x86: Set Vex=1 on VEX.128 only vmovq
[deliverable/binutils-gdb.git] / opcodes / i386-dis.c
1 /* Print i386 instructions for GDB, the GNU debugger.
2 Copyright (C) 1988-2018 Free Software Foundation, Inc.
3
4 This file is part of the GNU opcodes library.
5
6 This library is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 3, or (at your option)
9 any later version.
10
11 It is distributed in the hope that it will be useful, but WITHOUT
12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
14 License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
19 MA 02110-1301, USA. */
20
21
22 /* 80386 instruction printer by Pace Willisson (pace@prep.ai.mit.edu)
23 July 1988
24 modified by John Hassey (hassey@dg-rtp.dg.com)
25 x86-64 support added by Jan Hubicka (jh@suse.cz)
26 VIA PadLock support by Michal Ludvig (mludvig@suse.cz). */
27
28 /* The main tables describing the instructions is essentially a copy
29 of the "Opcode Map" chapter (Appendix A) of the Intel 80386
30 Programmers Manual. Usually, there is a capital letter, followed
31 by a small letter. The capital letter tell the addressing mode,
32 and the small letter tells about the operand size. Refer to
33 the Intel manual for details. */
34
35 #include "sysdep.h"
36 #include "disassemble.h"
37 #include "opintl.h"
38 #include "opcode/i386.h"
39 #include "libiberty.h"
40
41 #include <setjmp.h>
42
43 static int print_insn (bfd_vma, disassemble_info *);
44 static void dofloat (int);
45 static void OP_ST (int, int);
46 static void OP_STi (int, int);
47 static int putop (const char *, int);
48 static void oappend (const char *);
49 static void append_seg (void);
50 static void OP_indirE (int, int);
51 static void print_operand_value (char *, int, bfd_vma);
52 static void OP_E_register (int, int);
53 static void OP_E_memory (int, int);
54 static void print_displacement (char *, bfd_vma);
55 static void OP_E (int, int);
56 static void OP_G (int, int);
57 static bfd_vma get64 (void);
58 static bfd_signed_vma get32 (void);
59 static bfd_signed_vma get32s (void);
60 static int get16 (void);
61 static void set_op (bfd_vma, int);
62 static void OP_Skip_MODRM (int, int);
63 static void OP_REG (int, int);
64 static void OP_IMREG (int, int);
65 static void OP_I (int, int);
66 static void OP_I64 (int, int);
67 static void OP_sI (int, int);
68 static void OP_J (int, int);
69 static void OP_SEG (int, int);
70 static void OP_DIR (int, int);
71 static void OP_OFF (int, int);
72 static void OP_OFF64 (int, int);
73 static void ptr_reg (int, int);
74 static void OP_ESreg (int, int);
75 static void OP_DSreg (int, int);
76 static void OP_C (int, int);
77 static void OP_D (int, int);
78 static void OP_T (int, int);
79 static void OP_R (int, int);
80 static void OP_MMX (int, int);
81 static void OP_XMM (int, int);
82 static void OP_EM (int, int);
83 static void OP_EX (int, int);
84 static void OP_EMC (int,int);
85 static void OP_MXC (int,int);
86 static void OP_MS (int, int);
87 static void OP_XS (int, int);
88 static void OP_M (int, int);
89 static void OP_VEX (int, int);
90 static void OP_EX_Vex (int, int);
91 static void OP_EX_VexW (int, int);
92 static void OP_EX_VexImmW (int, int);
93 static void OP_XMM_Vex (int, int);
94 static void OP_XMM_VexW (int, int);
95 static void OP_Rounding (int, int);
96 static void OP_REG_VexI4 (int, int);
97 static void PCLMUL_Fixup (int, int);
98 static void VZERO_Fixup (int, int);
99 static void VCMP_Fixup (int, int);
100 static void VPCMP_Fixup (int, int);
101 static void VPCOM_Fixup (int, int);
102 static void OP_0f07 (int, int);
103 static void OP_Monitor (int, int);
104 static void OP_Mwait (int, int);
105 static void OP_Mwaitx (int, int);
106 static void NOP_Fixup1 (int, int);
107 static void NOP_Fixup2 (int, int);
108 static void OP_3DNowSuffix (int, int);
109 static void CMP_Fixup (int, int);
110 static void BadOp (void);
111 static void REP_Fixup (int, int);
112 static void BND_Fixup (int, int);
113 static void NOTRACK_Fixup (int, int);
114 static void HLE_Fixup1 (int, int);
115 static void HLE_Fixup2 (int, int);
116 static void HLE_Fixup3 (int, int);
117 static void CMPXCHG8B_Fixup (int, int);
118 static void XMM_Fixup (int, int);
119 static void CRC32_Fixup (int, int);
120 static void FXSAVE_Fixup (int, int);
121 static void PCMPESTR_Fixup (int, int);
122 static void OP_LWPCB_E (int, int);
123 static void OP_LWP_E (int, int);
124 static void OP_Vex_2src_1 (int, int);
125 static void OP_Vex_2src_2 (int, int);
126
127 static void MOVBE_Fixup (int, int);
128
129 static void OP_Mask (int, int);
130
131 struct dis_private {
132 /* Points to first byte not fetched. */
133 bfd_byte *max_fetched;
134 bfd_byte the_buffer[MAX_MNEM_SIZE];
135 bfd_vma insn_start;
136 int orig_sizeflag;
137 OPCODES_SIGJMP_BUF bailout;
138 };
139
140 enum address_mode
141 {
142 mode_16bit,
143 mode_32bit,
144 mode_64bit
145 };
146
147 enum address_mode address_mode;
148
149 /* Flags for the prefixes for the current instruction. See below. */
150 static int prefixes;
151
152 /* REX prefix the current instruction. See below. */
153 static int rex;
154 /* Bits of REX we've already used. */
155 static int rex_used;
156 /* REX bits in original REX prefix ignored. */
157 static int rex_ignored;
158 /* Mark parts used in the REX prefix. When we are testing for
159 empty prefix (for 8bit register REX extension), just mask it
160 out. Otherwise test for REX bit is excuse for existence of REX
161 only in case value is nonzero. */
162 #define USED_REX(value) \
163 { \
164 if (value) \
165 { \
166 if ((rex & value)) \
167 rex_used |= (value) | REX_OPCODE; \
168 } \
169 else \
170 rex_used |= REX_OPCODE; \
171 }
172
173 /* Flags for prefixes which we somehow handled when printing the
174 current instruction. */
175 static int used_prefixes;
176
177 /* Flags stored in PREFIXES. */
178 #define PREFIX_REPZ 1
179 #define PREFIX_REPNZ 2
180 #define PREFIX_LOCK 4
181 #define PREFIX_CS 8
182 #define PREFIX_SS 0x10
183 #define PREFIX_DS 0x20
184 #define PREFIX_ES 0x40
185 #define PREFIX_FS 0x80
186 #define PREFIX_GS 0x100
187 #define PREFIX_DATA 0x200
188 #define PREFIX_ADDR 0x400
189 #define PREFIX_FWAIT 0x800
190
191 /* Make sure that bytes from INFO->PRIVATE_DATA->BUFFER (inclusive)
192 to ADDR (exclusive) are valid. Returns 1 for success, longjmps
193 on error. */
194 #define FETCH_DATA(info, addr) \
195 ((addr) <= ((struct dis_private *) (info->private_data))->max_fetched \
196 ? 1 : fetch_data ((info), (addr)))
197
198 static int
199 fetch_data (struct disassemble_info *info, bfd_byte *addr)
200 {
201 int status;
202 struct dis_private *priv = (struct dis_private *) info->private_data;
203 bfd_vma start = priv->insn_start + (priv->max_fetched - priv->the_buffer);
204
205 if (addr <= priv->the_buffer + MAX_MNEM_SIZE)
206 status = (*info->read_memory_func) (start,
207 priv->max_fetched,
208 addr - priv->max_fetched,
209 info);
210 else
211 status = -1;
212 if (status != 0)
213 {
214 /* If we did manage to read at least one byte, then
215 print_insn_i386 will do something sensible. Otherwise, print
216 an error. We do that here because this is where we know
217 STATUS. */
218 if (priv->max_fetched == priv->the_buffer)
219 (*info->memory_error_func) (status, start, info);
220 OPCODES_SIGLONGJMP (priv->bailout, 1);
221 }
222 else
223 priv->max_fetched = addr;
224 return 1;
225 }
226
227 /* Possible values for prefix requirement. */
228 #define PREFIX_IGNORED_SHIFT 16
229 #define PREFIX_IGNORED_REPZ (PREFIX_REPZ << PREFIX_IGNORED_SHIFT)
230 #define PREFIX_IGNORED_REPNZ (PREFIX_REPNZ << PREFIX_IGNORED_SHIFT)
231 #define PREFIX_IGNORED_DATA (PREFIX_DATA << PREFIX_IGNORED_SHIFT)
232 #define PREFIX_IGNORED_ADDR (PREFIX_ADDR << PREFIX_IGNORED_SHIFT)
233 #define PREFIX_IGNORED_LOCK (PREFIX_LOCK << PREFIX_IGNORED_SHIFT)
234
235 /* Opcode prefixes. */
236 #define PREFIX_OPCODE (PREFIX_REPZ \
237 | PREFIX_REPNZ \
238 | PREFIX_DATA)
239
240 /* Prefixes ignored. */
241 #define PREFIX_IGNORED (PREFIX_IGNORED_REPZ \
242 | PREFIX_IGNORED_REPNZ \
243 | PREFIX_IGNORED_DATA)
244
245 #define XX { NULL, 0 }
246 #define Bad_Opcode NULL, { { NULL, 0 } }, 0
247
248 #define Eb { OP_E, b_mode }
249 #define Ebnd { OP_E, bnd_mode }
250 #define EbS { OP_E, b_swap_mode }
251 #define EbndS { OP_E, bnd_swap_mode }
252 #define Ev { OP_E, v_mode }
253 #define Eva { OP_E, va_mode }
254 #define Ev_bnd { OP_E, v_bnd_mode }
255 #define EvS { OP_E, v_swap_mode }
256 #define Ed { OP_E, d_mode }
257 #define Edq { OP_E, dq_mode }
258 #define Edqw { OP_E, dqw_mode }
259 #define Edqb { OP_E, dqb_mode }
260 #define Edb { OP_E, db_mode }
261 #define Edw { OP_E, dw_mode }
262 #define Edqd { OP_E, dqd_mode }
263 #define Edqa { OP_E, dqa_mode }
264 #define Eq { OP_E, q_mode }
265 #define indirEv { OP_indirE, indir_v_mode }
266 #define indirEp { OP_indirE, f_mode }
267 #define stackEv { OP_E, stack_v_mode }
268 #define Em { OP_E, m_mode }
269 #define Ew { OP_E, w_mode }
270 #define M { OP_M, 0 } /* lea, lgdt, etc. */
271 #define Ma { OP_M, a_mode }
272 #define Mb { OP_M, b_mode }
273 #define Md { OP_M, d_mode }
274 #define Mo { OP_M, o_mode }
275 #define Mp { OP_M, f_mode } /* 32 or 48 bit memory operand for LDS, LES etc */
276 #define Mq { OP_M, q_mode }
277 #define Mv_bnd { OP_M, v_bndmk_mode }
278 #define Mx { OP_M, x_mode }
279 #define Mxmm { OP_M, xmm_mode }
280 #define Gb { OP_G, b_mode }
281 #define Gbnd { OP_G, bnd_mode }
282 #define Gv { OP_G, v_mode }
283 #define Gd { OP_G, d_mode }
284 #define Gdq { OP_G, dq_mode }
285 #define Gm { OP_G, m_mode }
286 #define Gva { OP_G, va_mode }
287 #define Gw { OP_G, w_mode }
288 #define Rd { OP_R, d_mode }
289 #define Rdq { OP_R, dq_mode }
290 #define Rm { OP_R, m_mode }
291 #define Ib { OP_I, b_mode }
292 #define sIb { OP_sI, b_mode } /* sign extened byte */
293 #define sIbT { OP_sI, b_T_mode } /* sign extened byte like 'T' */
294 #define Iv { OP_I, v_mode }
295 #define sIv { OP_sI, v_mode }
296 #define Iq { OP_I, q_mode }
297 #define Iv64 { OP_I64, v_mode }
298 #define Iw { OP_I, w_mode }
299 #define I1 { OP_I, const_1_mode }
300 #define Jb { OP_J, b_mode }
301 #define Jv { OP_J, v_mode }
302 #define Cm { OP_C, m_mode }
303 #define Dm { OP_D, m_mode }
304 #define Td { OP_T, d_mode }
305 #define Skip_MODRM { OP_Skip_MODRM, 0 }
306
307 #define RMeAX { OP_REG, eAX_reg }
308 #define RMeBX { OP_REG, eBX_reg }
309 #define RMeCX { OP_REG, eCX_reg }
310 #define RMeDX { OP_REG, eDX_reg }
311 #define RMeSP { OP_REG, eSP_reg }
312 #define RMeBP { OP_REG, eBP_reg }
313 #define RMeSI { OP_REG, eSI_reg }
314 #define RMeDI { OP_REG, eDI_reg }
315 #define RMrAX { OP_REG, rAX_reg }
316 #define RMrBX { OP_REG, rBX_reg }
317 #define RMrCX { OP_REG, rCX_reg }
318 #define RMrDX { OP_REG, rDX_reg }
319 #define RMrSP { OP_REG, rSP_reg }
320 #define RMrBP { OP_REG, rBP_reg }
321 #define RMrSI { OP_REG, rSI_reg }
322 #define RMrDI { OP_REG, rDI_reg }
323 #define RMAL { OP_REG, al_reg }
324 #define RMCL { OP_REG, cl_reg }
325 #define RMDL { OP_REG, dl_reg }
326 #define RMBL { OP_REG, bl_reg }
327 #define RMAH { OP_REG, ah_reg }
328 #define RMCH { OP_REG, ch_reg }
329 #define RMDH { OP_REG, dh_reg }
330 #define RMBH { OP_REG, bh_reg }
331 #define RMAX { OP_REG, ax_reg }
332 #define RMDX { OP_REG, dx_reg }
333
334 #define eAX { OP_IMREG, eAX_reg }
335 #define eBX { OP_IMREG, eBX_reg }
336 #define eCX { OP_IMREG, eCX_reg }
337 #define eDX { OP_IMREG, eDX_reg }
338 #define eSP { OP_IMREG, eSP_reg }
339 #define eBP { OP_IMREG, eBP_reg }
340 #define eSI { OP_IMREG, eSI_reg }
341 #define eDI { OP_IMREG, eDI_reg }
342 #define AL { OP_IMREG, al_reg }
343 #define CL { OP_IMREG, cl_reg }
344 #define DL { OP_IMREG, dl_reg }
345 #define BL { OP_IMREG, bl_reg }
346 #define AH { OP_IMREG, ah_reg }
347 #define CH { OP_IMREG, ch_reg }
348 #define DH { OP_IMREG, dh_reg }
349 #define BH { OP_IMREG, bh_reg }
350 #define AX { OP_IMREG, ax_reg }
351 #define DX { OP_IMREG, dx_reg }
352 #define zAX { OP_IMREG, z_mode_ax_reg }
353 #define indirDX { OP_IMREG, indir_dx_reg }
354
355 #define Sw { OP_SEG, w_mode }
356 #define Sv { OP_SEG, v_mode }
357 #define Ap { OP_DIR, 0 }
358 #define Ob { OP_OFF64, b_mode }
359 #define Ov { OP_OFF64, v_mode }
360 #define Xb { OP_DSreg, eSI_reg }
361 #define Xv { OP_DSreg, eSI_reg }
362 #define Xz { OP_DSreg, eSI_reg }
363 #define Yb { OP_ESreg, eDI_reg }
364 #define Yv { OP_ESreg, eDI_reg }
365 #define DSBX { OP_DSreg, eBX_reg }
366
367 #define es { OP_REG, es_reg }
368 #define ss { OP_REG, ss_reg }
369 #define cs { OP_REG, cs_reg }
370 #define ds { OP_REG, ds_reg }
371 #define fs { OP_REG, fs_reg }
372 #define gs { OP_REG, gs_reg }
373
374 #define MX { OP_MMX, 0 }
375 #define XM { OP_XMM, 0 }
376 #define XMScalar { OP_XMM, scalar_mode }
377 #define XMGatherQ { OP_XMM, vex_vsib_q_w_dq_mode }
378 #define XMM { OP_XMM, xmm_mode }
379 #define XMxmmq { OP_XMM, xmmq_mode }
380 #define EM { OP_EM, v_mode }
381 #define EMS { OP_EM, v_swap_mode }
382 #define EMd { OP_EM, d_mode }
383 #define EMx { OP_EM, x_mode }
384 #define EXbScalar { OP_EX, b_scalar_mode }
385 #define EXw { OP_EX, w_mode }
386 #define EXwScalar { OP_EX, w_scalar_mode }
387 #define EXd { OP_EX, d_mode }
388 #define EXdScalar { OP_EX, d_scalar_mode }
389 #define EXdS { OP_EX, d_swap_mode }
390 #define EXdScalarS { OP_EX, d_scalar_swap_mode }
391 #define EXq { OP_EX, q_mode }
392 #define EXqScalar { OP_EX, q_scalar_mode }
393 #define EXqScalarS { OP_EX, q_scalar_swap_mode }
394 #define EXqS { OP_EX, q_swap_mode }
395 #define EXx { OP_EX, x_mode }
396 #define EXxS { OP_EX, x_swap_mode }
397 #define EXxmm { OP_EX, xmm_mode }
398 #define EXymm { OP_EX, ymm_mode }
399 #define EXxmmq { OP_EX, xmmq_mode }
400 #define EXEvexHalfBcstXmmq { OP_EX, evex_half_bcst_xmmq_mode }
401 #define EXxmm_mb { OP_EX, xmm_mb_mode }
402 #define EXxmm_mw { OP_EX, xmm_mw_mode }
403 #define EXxmm_md { OP_EX, xmm_md_mode }
404 #define EXxmm_mq { OP_EX, xmm_mq_mode }
405 #define EXxmm_mdq { OP_EX, xmm_mdq_mode }
406 #define EXxmmdw { OP_EX, xmmdw_mode }
407 #define EXxmmqd { OP_EX, xmmqd_mode }
408 #define EXymmq { OP_EX, ymmq_mode }
409 #define EXVexWdq { OP_EX, vex_w_dq_mode }
410 #define EXVexWdqScalar { OP_EX, vex_scalar_w_dq_mode }
411 #define EXEvexXGscat { OP_EX, evex_x_gscat_mode }
412 #define EXEvexXNoBcst { OP_EX, evex_x_nobcst_mode }
413 #define MS { OP_MS, v_mode }
414 #define XS { OP_XS, v_mode }
415 #define EMCq { OP_EMC, q_mode }
416 #define MXC { OP_MXC, 0 }
417 #define OPSUF { OP_3DNowSuffix, 0 }
418 #define CMP { CMP_Fixup, 0 }
419 #define XMM0 { XMM_Fixup, 0 }
420 #define FXSAVE { FXSAVE_Fixup, 0 }
421 #define Vex_2src_1 { OP_Vex_2src_1, 0 }
422 #define Vex_2src_2 { OP_Vex_2src_2, 0 }
423
424 #define Vex { OP_VEX, vex_mode }
425 #define VexScalar { OP_VEX, vex_scalar_mode }
426 #define VexGatherQ { OP_VEX, vex_vsib_q_w_dq_mode }
427 #define Vex128 { OP_VEX, vex128_mode }
428 #define Vex256 { OP_VEX, vex256_mode }
429 #define VexGdq { OP_VEX, dq_mode }
430 #define EXdVex { OP_EX_Vex, d_mode }
431 #define EXdVexS { OP_EX_Vex, d_swap_mode }
432 #define EXdVexScalarS { OP_EX_Vex, d_scalar_swap_mode }
433 #define EXqVex { OP_EX_Vex, q_mode }
434 #define EXqVexS { OP_EX_Vex, q_swap_mode }
435 #define EXqVexScalarS { OP_EX_Vex, q_scalar_swap_mode }
436 #define EXVexW { OP_EX_VexW, x_mode }
437 #define EXdVexW { OP_EX_VexW, d_mode }
438 #define EXqVexW { OP_EX_VexW, q_mode }
439 #define EXVexImmW { OP_EX_VexImmW, x_mode }
440 #define XMVex { OP_XMM_Vex, 0 }
441 #define XMVexScalar { OP_XMM_Vex, scalar_mode }
442 #define XMVexW { OP_XMM_VexW, 0 }
443 #define XMVexI4 { OP_REG_VexI4, x_mode }
444 #define PCLMUL { PCLMUL_Fixup, 0 }
445 #define VZERO { VZERO_Fixup, 0 }
446 #define VCMP { VCMP_Fixup, 0 }
447 #define VPCMP { VPCMP_Fixup, 0 }
448 #define VPCOM { VPCOM_Fixup, 0 }
449
450 #define EXxEVexR { OP_Rounding, evex_rounding_mode }
451 #define EXxEVexR64 { OP_Rounding, evex_rounding_64_mode }
452 #define EXxEVexS { OP_Rounding, evex_sae_mode }
453
454 #define XMask { OP_Mask, mask_mode }
455 #define MaskG { OP_G, mask_mode }
456 #define MaskE { OP_E, mask_mode }
457 #define MaskBDE { OP_E, mask_bd_mode }
458 #define MaskR { OP_R, mask_mode }
459 #define MaskVex { OP_VEX, mask_mode }
460
461 #define MVexVSIBDWpX { OP_M, vex_vsib_d_w_dq_mode }
462 #define MVexVSIBDQWpX { OP_M, vex_vsib_d_w_d_mode }
463 #define MVexVSIBQWpX { OP_M, vex_vsib_q_w_dq_mode }
464 #define MVexVSIBQDWpX { OP_M, vex_vsib_q_w_d_mode }
465
466 /* Used handle "rep" prefix for string instructions. */
467 #define Xbr { REP_Fixup, eSI_reg }
468 #define Xvr { REP_Fixup, eSI_reg }
469 #define Ybr { REP_Fixup, eDI_reg }
470 #define Yvr { REP_Fixup, eDI_reg }
471 #define Yzr { REP_Fixup, eDI_reg }
472 #define indirDXr { REP_Fixup, indir_dx_reg }
473 #define ALr { REP_Fixup, al_reg }
474 #define eAXr { REP_Fixup, eAX_reg }
475
476 /* Used handle HLE prefix for lockable instructions. */
477 #define Ebh1 { HLE_Fixup1, b_mode }
478 #define Evh1 { HLE_Fixup1, v_mode }
479 #define Ebh2 { HLE_Fixup2, b_mode }
480 #define Evh2 { HLE_Fixup2, v_mode }
481 #define Ebh3 { HLE_Fixup3, b_mode }
482 #define Evh3 { HLE_Fixup3, v_mode }
483
484 #define BND { BND_Fixup, 0 }
485 #define NOTRACK { NOTRACK_Fixup, 0 }
486
487 #define cond_jump_flag { NULL, cond_jump_mode }
488 #define loop_jcxz_flag { NULL, loop_jcxz_mode }
489
490 /* bits in sizeflag */
491 #define SUFFIX_ALWAYS 4
492 #define AFLAG 2
493 #define DFLAG 1
494
495 enum
496 {
497 /* byte operand */
498 b_mode = 1,
499 /* byte operand with operand swapped */
500 b_swap_mode,
501 /* byte operand, sign extend like 'T' suffix */
502 b_T_mode,
503 /* operand size depends on prefixes */
504 v_mode,
505 /* operand size depends on prefixes with operand swapped */
506 v_swap_mode,
507 /* operand size depends on address prefix */
508 va_mode,
509 /* word operand */
510 w_mode,
511 /* double word operand */
512 d_mode,
513 /* double word operand with operand swapped */
514 d_swap_mode,
515 /* quad word operand */
516 q_mode,
517 /* quad word operand with operand swapped */
518 q_swap_mode,
519 /* ten-byte operand */
520 t_mode,
521 /* 16-byte XMM, 32-byte YMM or 64-byte ZMM operand. In EVEX with
522 broadcast enabled. */
523 x_mode,
524 /* Similar to x_mode, but with different EVEX mem shifts. */
525 evex_x_gscat_mode,
526 /* Similar to x_mode, but with disabled broadcast. */
527 evex_x_nobcst_mode,
528 /* Similar to x_mode, but with operands swapped and disabled broadcast
529 in EVEX. */
530 x_swap_mode,
531 /* 16-byte XMM operand */
532 xmm_mode,
533 /* XMM, XMM or YMM register operand, or quad word, xmmword or ymmword
534 memory operand (depending on vector length). Broadcast isn't
535 allowed. */
536 xmmq_mode,
537 /* Same as xmmq_mode, but broadcast is allowed. */
538 evex_half_bcst_xmmq_mode,
539 /* XMM register or byte memory operand */
540 xmm_mb_mode,
541 /* XMM register or word memory operand */
542 xmm_mw_mode,
543 /* XMM register or double word memory operand */
544 xmm_md_mode,
545 /* XMM register or quad word memory operand */
546 xmm_mq_mode,
547 /* XMM register or double/quad word memory operand, depending on
548 VEX.W. */
549 xmm_mdq_mode,
550 /* 16-byte XMM, word, double word or quad word operand. */
551 xmmdw_mode,
552 /* 16-byte XMM, double word, quad word operand or xmm word operand. */
553 xmmqd_mode,
554 /* 32-byte YMM operand */
555 ymm_mode,
556 /* quad word, ymmword or zmmword memory operand. */
557 ymmq_mode,
558 /* 32-byte YMM or 16-byte word operand */
559 ymmxmm_mode,
560 /* d_mode in 32bit, q_mode in 64bit mode. */
561 m_mode,
562 /* pair of v_mode operands */
563 a_mode,
564 cond_jump_mode,
565 loop_jcxz_mode,
566 v_bnd_mode,
567 /* like v_bnd_mode in 32bit, no RIP-rel in 64bit mode. */
568 v_bndmk_mode,
569 /* operand size depends on REX prefixes. */
570 dq_mode,
571 /* registers like dq_mode, memory like w_mode. */
572 dqw_mode,
573 /* bounds operand */
574 bnd_mode,
575 /* bounds operand with operand swapped */
576 bnd_swap_mode,
577 /* 4- or 6-byte pointer operand */
578 f_mode,
579 const_1_mode,
580 /* v_mode for indirect branch opcodes. */
581 indir_v_mode,
582 /* v_mode for stack-related opcodes. */
583 stack_v_mode,
584 /* non-quad operand size depends on prefixes */
585 z_mode,
586 /* 16-byte operand */
587 o_mode,
588 /* registers like dq_mode, memory like b_mode. */
589 dqb_mode,
590 /* registers like d_mode, memory like b_mode. */
591 db_mode,
592 /* registers like d_mode, memory like w_mode. */
593 dw_mode,
594 /* registers like dq_mode, memory like d_mode. */
595 dqd_mode,
596 /* operand size depends on the W bit as well as address mode. */
597 dqa_mode,
598 /* normal vex mode */
599 vex_mode,
600 /* 128bit vex mode */
601 vex128_mode,
602 /* 256bit vex mode */
603 vex256_mode,
604 /* operand size depends on the VEX.W bit. */
605 vex_w_dq_mode,
606
607 /* Similar to vex_w_dq_mode, with VSIB dword indices. */
608 vex_vsib_d_w_dq_mode,
609 /* Similar to vex_vsib_d_w_dq_mode, with smaller memory. */
610 vex_vsib_d_w_d_mode,
611 /* Similar to vex_w_dq_mode, with VSIB qword indices. */
612 vex_vsib_q_w_dq_mode,
613 /* Similar to vex_vsib_q_w_dq_mode, with smaller memory. */
614 vex_vsib_q_w_d_mode,
615
616 /* scalar, ignore vector length. */
617 scalar_mode,
618 /* like b_mode, ignore vector length. */
619 b_scalar_mode,
620 /* like w_mode, ignore vector length. */
621 w_scalar_mode,
622 /* like d_mode, ignore vector length. */
623 d_scalar_mode,
624 /* like d_swap_mode, ignore vector length. */
625 d_scalar_swap_mode,
626 /* like q_mode, ignore vector length. */
627 q_scalar_mode,
628 /* like q_swap_mode, ignore vector length. */
629 q_scalar_swap_mode,
630 /* like vex_mode, ignore vector length. */
631 vex_scalar_mode,
632 /* like vex_w_dq_mode, ignore vector length. */
633 vex_scalar_w_dq_mode,
634
635 /* Static rounding. */
636 evex_rounding_mode,
637 /* Static rounding, 64-bit mode only. */
638 evex_rounding_64_mode,
639 /* Supress all exceptions. */
640 evex_sae_mode,
641
642 /* Mask register operand. */
643 mask_mode,
644 /* Mask register operand. */
645 mask_bd_mode,
646
647 es_reg,
648 cs_reg,
649 ss_reg,
650 ds_reg,
651 fs_reg,
652 gs_reg,
653
654 eAX_reg,
655 eCX_reg,
656 eDX_reg,
657 eBX_reg,
658 eSP_reg,
659 eBP_reg,
660 eSI_reg,
661 eDI_reg,
662
663 al_reg,
664 cl_reg,
665 dl_reg,
666 bl_reg,
667 ah_reg,
668 ch_reg,
669 dh_reg,
670 bh_reg,
671
672 ax_reg,
673 cx_reg,
674 dx_reg,
675 bx_reg,
676 sp_reg,
677 bp_reg,
678 si_reg,
679 di_reg,
680
681 rAX_reg,
682 rCX_reg,
683 rDX_reg,
684 rBX_reg,
685 rSP_reg,
686 rBP_reg,
687 rSI_reg,
688 rDI_reg,
689
690 z_mode_ax_reg,
691 indir_dx_reg
692 };
693
694 enum
695 {
696 FLOATCODE = 1,
697 USE_REG_TABLE,
698 USE_MOD_TABLE,
699 USE_RM_TABLE,
700 USE_PREFIX_TABLE,
701 USE_X86_64_TABLE,
702 USE_3BYTE_TABLE,
703 USE_XOP_8F_TABLE,
704 USE_VEX_C4_TABLE,
705 USE_VEX_C5_TABLE,
706 USE_VEX_LEN_TABLE,
707 USE_VEX_W_TABLE,
708 USE_EVEX_TABLE
709 };
710
711 #define FLOAT NULL, { { NULL, FLOATCODE } }, 0
712
713 #define DIS386(T, I) NULL, { { NULL, (T)}, { NULL, (I) } }, 0
714 #define DIS386_PREFIX(T, I, P) NULL, { { NULL, (T)}, { NULL, (I) } }, P
715 #define REG_TABLE(I) DIS386 (USE_REG_TABLE, (I))
716 #define MOD_TABLE(I) DIS386 (USE_MOD_TABLE, (I))
717 #define RM_TABLE(I) DIS386 (USE_RM_TABLE, (I))
718 #define PREFIX_TABLE(I) DIS386 (USE_PREFIX_TABLE, (I))
719 #define X86_64_TABLE(I) DIS386 (USE_X86_64_TABLE, (I))
720 #define THREE_BYTE_TABLE(I) DIS386 (USE_3BYTE_TABLE, (I))
721 #define THREE_BYTE_TABLE_PREFIX(I, P) DIS386_PREFIX (USE_3BYTE_TABLE, (I), P)
722 #define XOP_8F_TABLE(I) DIS386 (USE_XOP_8F_TABLE, (I))
723 #define VEX_C4_TABLE(I) DIS386 (USE_VEX_C4_TABLE, (I))
724 #define VEX_C5_TABLE(I) DIS386 (USE_VEX_C5_TABLE, (I))
725 #define VEX_LEN_TABLE(I) DIS386 (USE_VEX_LEN_TABLE, (I))
726 #define VEX_W_TABLE(I) DIS386 (USE_VEX_W_TABLE, (I))
727 #define EVEX_TABLE(I) DIS386 (USE_EVEX_TABLE, (I))
728
729 enum
730 {
731 REG_80 = 0,
732 REG_81,
733 REG_83,
734 REG_8F,
735 REG_C0,
736 REG_C1,
737 REG_C6,
738 REG_C7,
739 REG_D0,
740 REG_D1,
741 REG_D2,
742 REG_D3,
743 REG_F6,
744 REG_F7,
745 REG_FE,
746 REG_FF,
747 REG_0F00,
748 REG_0F01,
749 REG_0F0D,
750 REG_0F18,
751 REG_0F1C_MOD_0,
752 REG_0F1E_MOD_3,
753 REG_0F71,
754 REG_0F72,
755 REG_0F73,
756 REG_0FA6,
757 REG_0FA7,
758 REG_0FAE,
759 REG_0FBA,
760 REG_0FC7,
761 REG_VEX_0F71,
762 REG_VEX_0F72,
763 REG_VEX_0F73,
764 REG_VEX_0FAE,
765 REG_VEX_0F38F3,
766 REG_XOP_LWPCB,
767 REG_XOP_LWP,
768 REG_XOP_TBM_01,
769 REG_XOP_TBM_02,
770
771 REG_EVEX_0F71,
772 REG_EVEX_0F72,
773 REG_EVEX_0F73,
774 REG_EVEX_0F38C6,
775 REG_EVEX_0F38C7
776 };
777
778 enum
779 {
780 MOD_8D = 0,
781 MOD_C6_REG_7,
782 MOD_C7_REG_7,
783 MOD_FF_REG_3,
784 MOD_FF_REG_5,
785 MOD_0F01_REG_0,
786 MOD_0F01_REG_1,
787 MOD_0F01_REG_2,
788 MOD_0F01_REG_3,
789 MOD_0F01_REG_5,
790 MOD_0F01_REG_7,
791 MOD_0F12_PREFIX_0,
792 MOD_0F13,
793 MOD_0F16_PREFIX_0,
794 MOD_0F17,
795 MOD_0F18_REG_0,
796 MOD_0F18_REG_1,
797 MOD_0F18_REG_2,
798 MOD_0F18_REG_3,
799 MOD_0F18_REG_4,
800 MOD_0F18_REG_5,
801 MOD_0F18_REG_6,
802 MOD_0F18_REG_7,
803 MOD_0F1A_PREFIX_0,
804 MOD_0F1B_PREFIX_0,
805 MOD_0F1B_PREFIX_1,
806 MOD_0F1C_PREFIX_0,
807 MOD_0F1E_PREFIX_1,
808 MOD_0F24,
809 MOD_0F26,
810 MOD_0F2B_PREFIX_0,
811 MOD_0F2B_PREFIX_1,
812 MOD_0F2B_PREFIX_2,
813 MOD_0F2B_PREFIX_3,
814 MOD_0F51,
815 MOD_0F71_REG_2,
816 MOD_0F71_REG_4,
817 MOD_0F71_REG_6,
818 MOD_0F72_REG_2,
819 MOD_0F72_REG_4,
820 MOD_0F72_REG_6,
821 MOD_0F73_REG_2,
822 MOD_0F73_REG_3,
823 MOD_0F73_REG_6,
824 MOD_0F73_REG_7,
825 MOD_0FAE_REG_0,
826 MOD_0FAE_REG_1,
827 MOD_0FAE_REG_2,
828 MOD_0FAE_REG_3,
829 MOD_0FAE_REG_4,
830 MOD_0FAE_REG_5,
831 MOD_0FAE_REG_6,
832 MOD_0FAE_REG_7,
833 MOD_0FB2,
834 MOD_0FB4,
835 MOD_0FB5,
836 MOD_0FC3,
837 MOD_0FC7_REG_3,
838 MOD_0FC7_REG_4,
839 MOD_0FC7_REG_5,
840 MOD_0FC7_REG_6,
841 MOD_0FC7_REG_7,
842 MOD_0FD7,
843 MOD_0FE7_PREFIX_2,
844 MOD_0FF0_PREFIX_3,
845 MOD_0F382A_PREFIX_2,
846 MOD_0F38F5_PREFIX_2,
847 MOD_0F38F6_PREFIX_0,
848 MOD_0F38F8_PREFIX_2,
849 MOD_0F38F9_PREFIX_0,
850 MOD_62_32BIT,
851 MOD_C4_32BIT,
852 MOD_C5_32BIT,
853 MOD_VEX_0F12_PREFIX_0,
854 MOD_VEX_0F13,
855 MOD_VEX_0F16_PREFIX_0,
856 MOD_VEX_0F17,
857 MOD_VEX_0F2B,
858 MOD_VEX_W_0_0F41_P_0_LEN_1,
859 MOD_VEX_W_1_0F41_P_0_LEN_1,
860 MOD_VEX_W_0_0F41_P_2_LEN_1,
861 MOD_VEX_W_1_0F41_P_2_LEN_1,
862 MOD_VEX_W_0_0F42_P_0_LEN_1,
863 MOD_VEX_W_1_0F42_P_0_LEN_1,
864 MOD_VEX_W_0_0F42_P_2_LEN_1,
865 MOD_VEX_W_1_0F42_P_2_LEN_1,
866 MOD_VEX_W_0_0F44_P_0_LEN_1,
867 MOD_VEX_W_1_0F44_P_0_LEN_1,
868 MOD_VEX_W_0_0F44_P_2_LEN_1,
869 MOD_VEX_W_1_0F44_P_2_LEN_1,
870 MOD_VEX_W_0_0F45_P_0_LEN_1,
871 MOD_VEX_W_1_0F45_P_0_LEN_1,
872 MOD_VEX_W_0_0F45_P_2_LEN_1,
873 MOD_VEX_W_1_0F45_P_2_LEN_1,
874 MOD_VEX_W_0_0F46_P_0_LEN_1,
875 MOD_VEX_W_1_0F46_P_0_LEN_1,
876 MOD_VEX_W_0_0F46_P_2_LEN_1,
877 MOD_VEX_W_1_0F46_P_2_LEN_1,
878 MOD_VEX_W_0_0F47_P_0_LEN_1,
879 MOD_VEX_W_1_0F47_P_0_LEN_1,
880 MOD_VEX_W_0_0F47_P_2_LEN_1,
881 MOD_VEX_W_1_0F47_P_2_LEN_1,
882 MOD_VEX_W_0_0F4A_P_0_LEN_1,
883 MOD_VEX_W_1_0F4A_P_0_LEN_1,
884 MOD_VEX_W_0_0F4A_P_2_LEN_1,
885 MOD_VEX_W_1_0F4A_P_2_LEN_1,
886 MOD_VEX_W_0_0F4B_P_0_LEN_1,
887 MOD_VEX_W_1_0F4B_P_0_LEN_1,
888 MOD_VEX_W_0_0F4B_P_2_LEN_1,
889 MOD_VEX_0F50,
890 MOD_VEX_0F71_REG_2,
891 MOD_VEX_0F71_REG_4,
892 MOD_VEX_0F71_REG_6,
893 MOD_VEX_0F72_REG_2,
894 MOD_VEX_0F72_REG_4,
895 MOD_VEX_0F72_REG_6,
896 MOD_VEX_0F73_REG_2,
897 MOD_VEX_0F73_REG_3,
898 MOD_VEX_0F73_REG_6,
899 MOD_VEX_0F73_REG_7,
900 MOD_VEX_W_0_0F91_P_0_LEN_0,
901 MOD_VEX_W_1_0F91_P_0_LEN_0,
902 MOD_VEX_W_0_0F91_P_2_LEN_0,
903 MOD_VEX_W_1_0F91_P_2_LEN_0,
904 MOD_VEX_W_0_0F92_P_0_LEN_0,
905 MOD_VEX_W_0_0F92_P_2_LEN_0,
906 MOD_VEX_W_0_0F92_P_3_LEN_0,
907 MOD_VEX_W_1_0F92_P_3_LEN_0,
908 MOD_VEX_W_0_0F93_P_0_LEN_0,
909 MOD_VEX_W_0_0F93_P_2_LEN_0,
910 MOD_VEX_W_0_0F93_P_3_LEN_0,
911 MOD_VEX_W_1_0F93_P_3_LEN_0,
912 MOD_VEX_W_0_0F98_P_0_LEN_0,
913 MOD_VEX_W_1_0F98_P_0_LEN_0,
914 MOD_VEX_W_0_0F98_P_2_LEN_0,
915 MOD_VEX_W_1_0F98_P_2_LEN_0,
916 MOD_VEX_W_0_0F99_P_0_LEN_0,
917 MOD_VEX_W_1_0F99_P_0_LEN_0,
918 MOD_VEX_W_0_0F99_P_2_LEN_0,
919 MOD_VEX_W_1_0F99_P_2_LEN_0,
920 MOD_VEX_0FAE_REG_2,
921 MOD_VEX_0FAE_REG_3,
922 MOD_VEX_0FD7_PREFIX_2,
923 MOD_VEX_0FE7_PREFIX_2,
924 MOD_VEX_0FF0_PREFIX_3,
925 MOD_VEX_0F381A_PREFIX_2,
926 MOD_VEX_0F382A_PREFIX_2,
927 MOD_VEX_0F382C_PREFIX_2,
928 MOD_VEX_0F382D_PREFIX_2,
929 MOD_VEX_0F382E_PREFIX_2,
930 MOD_VEX_0F382F_PREFIX_2,
931 MOD_VEX_0F385A_PREFIX_2,
932 MOD_VEX_0F388C_PREFIX_2,
933 MOD_VEX_0F388E_PREFIX_2,
934 MOD_VEX_W_0_0F3A30_P_2_LEN_0,
935 MOD_VEX_W_1_0F3A30_P_2_LEN_0,
936 MOD_VEX_W_0_0F3A31_P_2_LEN_0,
937 MOD_VEX_W_1_0F3A31_P_2_LEN_0,
938 MOD_VEX_W_0_0F3A32_P_2_LEN_0,
939 MOD_VEX_W_1_0F3A32_P_2_LEN_0,
940 MOD_VEX_W_0_0F3A33_P_2_LEN_0,
941 MOD_VEX_W_1_0F3A33_P_2_LEN_0,
942
943 MOD_EVEX_0F10_PREFIX_1,
944 MOD_EVEX_0F10_PREFIX_3,
945 MOD_EVEX_0F11_PREFIX_1,
946 MOD_EVEX_0F11_PREFIX_3,
947 MOD_EVEX_0F12_PREFIX_0,
948 MOD_EVEX_0F16_PREFIX_0,
949 MOD_EVEX_0F38C6_REG_1,
950 MOD_EVEX_0F38C6_REG_2,
951 MOD_EVEX_0F38C6_REG_5,
952 MOD_EVEX_0F38C6_REG_6,
953 MOD_EVEX_0F38C7_REG_1,
954 MOD_EVEX_0F38C7_REG_2,
955 MOD_EVEX_0F38C7_REG_5,
956 MOD_EVEX_0F38C7_REG_6
957 };
958
959 enum
960 {
961 RM_C6_REG_7 = 0,
962 RM_C7_REG_7,
963 RM_0F01_REG_0,
964 RM_0F01_REG_1,
965 RM_0F01_REG_2,
966 RM_0F01_REG_3,
967 RM_0F01_REG_5,
968 RM_0F01_REG_7,
969 RM_0F1E_MOD_3_REG_7,
970 RM_0FAE_REG_6,
971 RM_0FAE_REG_7
972 };
973
974 enum
975 {
976 PREFIX_90 = 0,
977 PREFIX_MOD_0_0F01_REG_5,
978 PREFIX_MOD_3_0F01_REG_5_RM_0,
979 PREFIX_MOD_3_0F01_REG_5_RM_2,
980 PREFIX_0F09,
981 PREFIX_0F10,
982 PREFIX_0F11,
983 PREFIX_0F12,
984 PREFIX_0F16,
985 PREFIX_0F1A,
986 PREFIX_0F1B,
987 PREFIX_0F1C,
988 PREFIX_0F1E,
989 PREFIX_0F2A,
990 PREFIX_0F2B,
991 PREFIX_0F2C,
992 PREFIX_0F2D,
993 PREFIX_0F2E,
994 PREFIX_0F2F,
995 PREFIX_0F51,
996 PREFIX_0F52,
997 PREFIX_0F53,
998 PREFIX_0F58,
999 PREFIX_0F59,
1000 PREFIX_0F5A,
1001 PREFIX_0F5B,
1002 PREFIX_0F5C,
1003 PREFIX_0F5D,
1004 PREFIX_0F5E,
1005 PREFIX_0F5F,
1006 PREFIX_0F60,
1007 PREFIX_0F61,
1008 PREFIX_0F62,
1009 PREFIX_0F6C,
1010 PREFIX_0F6D,
1011 PREFIX_0F6F,
1012 PREFIX_0F70,
1013 PREFIX_0F73_REG_3,
1014 PREFIX_0F73_REG_7,
1015 PREFIX_0F78,
1016 PREFIX_0F79,
1017 PREFIX_0F7C,
1018 PREFIX_0F7D,
1019 PREFIX_0F7E,
1020 PREFIX_0F7F,
1021 PREFIX_0FAE_REG_0,
1022 PREFIX_0FAE_REG_1,
1023 PREFIX_0FAE_REG_2,
1024 PREFIX_0FAE_REG_3,
1025 PREFIX_MOD_0_0FAE_REG_4,
1026 PREFIX_MOD_3_0FAE_REG_4,
1027 PREFIX_MOD_0_0FAE_REG_5,
1028 PREFIX_MOD_3_0FAE_REG_5,
1029 PREFIX_MOD_0_0FAE_REG_6,
1030 PREFIX_MOD_1_0FAE_REG_6,
1031 PREFIX_0FAE_REG_7,
1032 PREFIX_0FB8,
1033 PREFIX_0FBC,
1034 PREFIX_0FBD,
1035 PREFIX_0FC2,
1036 PREFIX_MOD_0_0FC3,
1037 PREFIX_MOD_0_0FC7_REG_6,
1038 PREFIX_MOD_3_0FC7_REG_6,
1039 PREFIX_MOD_3_0FC7_REG_7,
1040 PREFIX_0FD0,
1041 PREFIX_0FD6,
1042 PREFIX_0FE6,
1043 PREFIX_0FE7,
1044 PREFIX_0FF0,
1045 PREFIX_0FF7,
1046 PREFIX_0F3810,
1047 PREFIX_0F3814,
1048 PREFIX_0F3815,
1049 PREFIX_0F3817,
1050 PREFIX_0F3820,
1051 PREFIX_0F3821,
1052 PREFIX_0F3822,
1053 PREFIX_0F3823,
1054 PREFIX_0F3824,
1055 PREFIX_0F3825,
1056 PREFIX_0F3828,
1057 PREFIX_0F3829,
1058 PREFIX_0F382A,
1059 PREFIX_0F382B,
1060 PREFIX_0F3830,
1061 PREFIX_0F3831,
1062 PREFIX_0F3832,
1063 PREFIX_0F3833,
1064 PREFIX_0F3834,
1065 PREFIX_0F3835,
1066 PREFIX_0F3837,
1067 PREFIX_0F3838,
1068 PREFIX_0F3839,
1069 PREFIX_0F383A,
1070 PREFIX_0F383B,
1071 PREFIX_0F383C,
1072 PREFIX_0F383D,
1073 PREFIX_0F383E,
1074 PREFIX_0F383F,
1075 PREFIX_0F3840,
1076 PREFIX_0F3841,
1077 PREFIX_0F3880,
1078 PREFIX_0F3881,
1079 PREFIX_0F3882,
1080 PREFIX_0F38C8,
1081 PREFIX_0F38C9,
1082 PREFIX_0F38CA,
1083 PREFIX_0F38CB,
1084 PREFIX_0F38CC,
1085 PREFIX_0F38CD,
1086 PREFIX_0F38CF,
1087 PREFIX_0F38DB,
1088 PREFIX_0F38DC,
1089 PREFIX_0F38DD,
1090 PREFIX_0F38DE,
1091 PREFIX_0F38DF,
1092 PREFIX_0F38F0,
1093 PREFIX_0F38F1,
1094 PREFIX_0F38F5,
1095 PREFIX_0F38F6,
1096 PREFIX_0F38F8,
1097 PREFIX_0F38F9,
1098 PREFIX_0F3A08,
1099 PREFIX_0F3A09,
1100 PREFIX_0F3A0A,
1101 PREFIX_0F3A0B,
1102 PREFIX_0F3A0C,
1103 PREFIX_0F3A0D,
1104 PREFIX_0F3A0E,
1105 PREFIX_0F3A14,
1106 PREFIX_0F3A15,
1107 PREFIX_0F3A16,
1108 PREFIX_0F3A17,
1109 PREFIX_0F3A20,
1110 PREFIX_0F3A21,
1111 PREFIX_0F3A22,
1112 PREFIX_0F3A40,
1113 PREFIX_0F3A41,
1114 PREFIX_0F3A42,
1115 PREFIX_0F3A44,
1116 PREFIX_0F3A60,
1117 PREFIX_0F3A61,
1118 PREFIX_0F3A62,
1119 PREFIX_0F3A63,
1120 PREFIX_0F3ACC,
1121 PREFIX_0F3ACE,
1122 PREFIX_0F3ACF,
1123 PREFIX_0F3ADF,
1124 PREFIX_VEX_0F10,
1125 PREFIX_VEX_0F11,
1126 PREFIX_VEX_0F12,
1127 PREFIX_VEX_0F16,
1128 PREFIX_VEX_0F2A,
1129 PREFIX_VEX_0F2C,
1130 PREFIX_VEX_0F2D,
1131 PREFIX_VEX_0F2E,
1132 PREFIX_VEX_0F2F,
1133 PREFIX_VEX_0F41,
1134 PREFIX_VEX_0F42,
1135 PREFIX_VEX_0F44,
1136 PREFIX_VEX_0F45,
1137 PREFIX_VEX_0F46,
1138 PREFIX_VEX_0F47,
1139 PREFIX_VEX_0F4A,
1140 PREFIX_VEX_0F4B,
1141 PREFIX_VEX_0F51,
1142 PREFIX_VEX_0F52,
1143 PREFIX_VEX_0F53,
1144 PREFIX_VEX_0F58,
1145 PREFIX_VEX_0F59,
1146 PREFIX_VEX_0F5A,
1147 PREFIX_VEX_0F5B,
1148 PREFIX_VEX_0F5C,
1149 PREFIX_VEX_0F5D,
1150 PREFIX_VEX_0F5E,
1151 PREFIX_VEX_0F5F,
1152 PREFIX_VEX_0F60,
1153 PREFIX_VEX_0F61,
1154 PREFIX_VEX_0F62,
1155 PREFIX_VEX_0F63,
1156 PREFIX_VEX_0F64,
1157 PREFIX_VEX_0F65,
1158 PREFIX_VEX_0F66,
1159 PREFIX_VEX_0F67,
1160 PREFIX_VEX_0F68,
1161 PREFIX_VEX_0F69,
1162 PREFIX_VEX_0F6A,
1163 PREFIX_VEX_0F6B,
1164 PREFIX_VEX_0F6C,
1165 PREFIX_VEX_0F6D,
1166 PREFIX_VEX_0F6E,
1167 PREFIX_VEX_0F6F,
1168 PREFIX_VEX_0F70,
1169 PREFIX_VEX_0F71_REG_2,
1170 PREFIX_VEX_0F71_REG_4,
1171 PREFIX_VEX_0F71_REG_6,
1172 PREFIX_VEX_0F72_REG_2,
1173 PREFIX_VEX_0F72_REG_4,
1174 PREFIX_VEX_0F72_REG_6,
1175 PREFIX_VEX_0F73_REG_2,
1176 PREFIX_VEX_0F73_REG_3,
1177 PREFIX_VEX_0F73_REG_6,
1178 PREFIX_VEX_0F73_REG_7,
1179 PREFIX_VEX_0F74,
1180 PREFIX_VEX_0F75,
1181 PREFIX_VEX_0F76,
1182 PREFIX_VEX_0F77,
1183 PREFIX_VEX_0F7C,
1184 PREFIX_VEX_0F7D,
1185 PREFIX_VEX_0F7E,
1186 PREFIX_VEX_0F7F,
1187 PREFIX_VEX_0F90,
1188 PREFIX_VEX_0F91,
1189 PREFIX_VEX_0F92,
1190 PREFIX_VEX_0F93,
1191 PREFIX_VEX_0F98,
1192 PREFIX_VEX_0F99,
1193 PREFIX_VEX_0FC2,
1194 PREFIX_VEX_0FC4,
1195 PREFIX_VEX_0FC5,
1196 PREFIX_VEX_0FD0,
1197 PREFIX_VEX_0FD1,
1198 PREFIX_VEX_0FD2,
1199 PREFIX_VEX_0FD3,
1200 PREFIX_VEX_0FD4,
1201 PREFIX_VEX_0FD5,
1202 PREFIX_VEX_0FD6,
1203 PREFIX_VEX_0FD7,
1204 PREFIX_VEX_0FD8,
1205 PREFIX_VEX_0FD9,
1206 PREFIX_VEX_0FDA,
1207 PREFIX_VEX_0FDB,
1208 PREFIX_VEX_0FDC,
1209 PREFIX_VEX_0FDD,
1210 PREFIX_VEX_0FDE,
1211 PREFIX_VEX_0FDF,
1212 PREFIX_VEX_0FE0,
1213 PREFIX_VEX_0FE1,
1214 PREFIX_VEX_0FE2,
1215 PREFIX_VEX_0FE3,
1216 PREFIX_VEX_0FE4,
1217 PREFIX_VEX_0FE5,
1218 PREFIX_VEX_0FE6,
1219 PREFIX_VEX_0FE7,
1220 PREFIX_VEX_0FE8,
1221 PREFIX_VEX_0FE9,
1222 PREFIX_VEX_0FEA,
1223 PREFIX_VEX_0FEB,
1224 PREFIX_VEX_0FEC,
1225 PREFIX_VEX_0FED,
1226 PREFIX_VEX_0FEE,
1227 PREFIX_VEX_0FEF,
1228 PREFIX_VEX_0FF0,
1229 PREFIX_VEX_0FF1,
1230 PREFIX_VEX_0FF2,
1231 PREFIX_VEX_0FF3,
1232 PREFIX_VEX_0FF4,
1233 PREFIX_VEX_0FF5,
1234 PREFIX_VEX_0FF6,
1235 PREFIX_VEX_0FF7,
1236 PREFIX_VEX_0FF8,
1237 PREFIX_VEX_0FF9,
1238 PREFIX_VEX_0FFA,
1239 PREFIX_VEX_0FFB,
1240 PREFIX_VEX_0FFC,
1241 PREFIX_VEX_0FFD,
1242 PREFIX_VEX_0FFE,
1243 PREFIX_VEX_0F3800,
1244 PREFIX_VEX_0F3801,
1245 PREFIX_VEX_0F3802,
1246 PREFIX_VEX_0F3803,
1247 PREFIX_VEX_0F3804,
1248 PREFIX_VEX_0F3805,
1249 PREFIX_VEX_0F3806,
1250 PREFIX_VEX_0F3807,
1251 PREFIX_VEX_0F3808,
1252 PREFIX_VEX_0F3809,
1253 PREFIX_VEX_0F380A,
1254 PREFIX_VEX_0F380B,
1255 PREFIX_VEX_0F380C,
1256 PREFIX_VEX_0F380D,
1257 PREFIX_VEX_0F380E,
1258 PREFIX_VEX_0F380F,
1259 PREFIX_VEX_0F3813,
1260 PREFIX_VEX_0F3816,
1261 PREFIX_VEX_0F3817,
1262 PREFIX_VEX_0F3818,
1263 PREFIX_VEX_0F3819,
1264 PREFIX_VEX_0F381A,
1265 PREFIX_VEX_0F381C,
1266 PREFIX_VEX_0F381D,
1267 PREFIX_VEX_0F381E,
1268 PREFIX_VEX_0F3820,
1269 PREFIX_VEX_0F3821,
1270 PREFIX_VEX_0F3822,
1271 PREFIX_VEX_0F3823,
1272 PREFIX_VEX_0F3824,
1273 PREFIX_VEX_0F3825,
1274 PREFIX_VEX_0F3828,
1275 PREFIX_VEX_0F3829,
1276 PREFIX_VEX_0F382A,
1277 PREFIX_VEX_0F382B,
1278 PREFIX_VEX_0F382C,
1279 PREFIX_VEX_0F382D,
1280 PREFIX_VEX_0F382E,
1281 PREFIX_VEX_0F382F,
1282 PREFIX_VEX_0F3830,
1283 PREFIX_VEX_0F3831,
1284 PREFIX_VEX_0F3832,
1285 PREFIX_VEX_0F3833,
1286 PREFIX_VEX_0F3834,
1287 PREFIX_VEX_0F3835,
1288 PREFIX_VEX_0F3836,
1289 PREFIX_VEX_0F3837,
1290 PREFIX_VEX_0F3838,
1291 PREFIX_VEX_0F3839,
1292 PREFIX_VEX_0F383A,
1293 PREFIX_VEX_0F383B,
1294 PREFIX_VEX_0F383C,
1295 PREFIX_VEX_0F383D,
1296 PREFIX_VEX_0F383E,
1297 PREFIX_VEX_0F383F,
1298 PREFIX_VEX_0F3840,
1299 PREFIX_VEX_0F3841,
1300 PREFIX_VEX_0F3845,
1301 PREFIX_VEX_0F3846,
1302 PREFIX_VEX_0F3847,
1303 PREFIX_VEX_0F3858,
1304 PREFIX_VEX_0F3859,
1305 PREFIX_VEX_0F385A,
1306 PREFIX_VEX_0F3878,
1307 PREFIX_VEX_0F3879,
1308 PREFIX_VEX_0F388C,
1309 PREFIX_VEX_0F388E,
1310 PREFIX_VEX_0F3890,
1311 PREFIX_VEX_0F3891,
1312 PREFIX_VEX_0F3892,
1313 PREFIX_VEX_0F3893,
1314 PREFIX_VEX_0F3896,
1315 PREFIX_VEX_0F3897,
1316 PREFIX_VEX_0F3898,
1317 PREFIX_VEX_0F3899,
1318 PREFIX_VEX_0F389A,
1319 PREFIX_VEX_0F389B,
1320 PREFIX_VEX_0F389C,
1321 PREFIX_VEX_0F389D,
1322 PREFIX_VEX_0F389E,
1323 PREFIX_VEX_0F389F,
1324 PREFIX_VEX_0F38A6,
1325 PREFIX_VEX_0F38A7,
1326 PREFIX_VEX_0F38A8,
1327 PREFIX_VEX_0F38A9,
1328 PREFIX_VEX_0F38AA,
1329 PREFIX_VEX_0F38AB,
1330 PREFIX_VEX_0F38AC,
1331 PREFIX_VEX_0F38AD,
1332 PREFIX_VEX_0F38AE,
1333 PREFIX_VEX_0F38AF,
1334 PREFIX_VEX_0F38B6,
1335 PREFIX_VEX_0F38B7,
1336 PREFIX_VEX_0F38B8,
1337 PREFIX_VEX_0F38B9,
1338 PREFIX_VEX_0F38BA,
1339 PREFIX_VEX_0F38BB,
1340 PREFIX_VEX_0F38BC,
1341 PREFIX_VEX_0F38BD,
1342 PREFIX_VEX_0F38BE,
1343 PREFIX_VEX_0F38BF,
1344 PREFIX_VEX_0F38CF,
1345 PREFIX_VEX_0F38DB,
1346 PREFIX_VEX_0F38DC,
1347 PREFIX_VEX_0F38DD,
1348 PREFIX_VEX_0F38DE,
1349 PREFIX_VEX_0F38DF,
1350 PREFIX_VEX_0F38F2,
1351 PREFIX_VEX_0F38F3_REG_1,
1352 PREFIX_VEX_0F38F3_REG_2,
1353 PREFIX_VEX_0F38F3_REG_3,
1354 PREFIX_VEX_0F38F5,
1355 PREFIX_VEX_0F38F6,
1356 PREFIX_VEX_0F38F7,
1357 PREFIX_VEX_0F3A00,
1358 PREFIX_VEX_0F3A01,
1359 PREFIX_VEX_0F3A02,
1360 PREFIX_VEX_0F3A04,
1361 PREFIX_VEX_0F3A05,
1362 PREFIX_VEX_0F3A06,
1363 PREFIX_VEX_0F3A08,
1364 PREFIX_VEX_0F3A09,
1365 PREFIX_VEX_0F3A0A,
1366 PREFIX_VEX_0F3A0B,
1367 PREFIX_VEX_0F3A0C,
1368 PREFIX_VEX_0F3A0D,
1369 PREFIX_VEX_0F3A0E,
1370 PREFIX_VEX_0F3A0F,
1371 PREFIX_VEX_0F3A14,
1372 PREFIX_VEX_0F3A15,
1373 PREFIX_VEX_0F3A16,
1374 PREFIX_VEX_0F3A17,
1375 PREFIX_VEX_0F3A18,
1376 PREFIX_VEX_0F3A19,
1377 PREFIX_VEX_0F3A1D,
1378 PREFIX_VEX_0F3A20,
1379 PREFIX_VEX_0F3A21,
1380 PREFIX_VEX_0F3A22,
1381 PREFIX_VEX_0F3A30,
1382 PREFIX_VEX_0F3A31,
1383 PREFIX_VEX_0F3A32,
1384 PREFIX_VEX_0F3A33,
1385 PREFIX_VEX_0F3A38,
1386 PREFIX_VEX_0F3A39,
1387 PREFIX_VEX_0F3A40,
1388 PREFIX_VEX_0F3A41,
1389 PREFIX_VEX_0F3A42,
1390 PREFIX_VEX_0F3A44,
1391 PREFIX_VEX_0F3A46,
1392 PREFIX_VEX_0F3A48,
1393 PREFIX_VEX_0F3A49,
1394 PREFIX_VEX_0F3A4A,
1395 PREFIX_VEX_0F3A4B,
1396 PREFIX_VEX_0F3A4C,
1397 PREFIX_VEX_0F3A5C,
1398 PREFIX_VEX_0F3A5D,
1399 PREFIX_VEX_0F3A5E,
1400 PREFIX_VEX_0F3A5F,
1401 PREFIX_VEX_0F3A60,
1402 PREFIX_VEX_0F3A61,
1403 PREFIX_VEX_0F3A62,
1404 PREFIX_VEX_0F3A63,
1405 PREFIX_VEX_0F3A68,
1406 PREFIX_VEX_0F3A69,
1407 PREFIX_VEX_0F3A6A,
1408 PREFIX_VEX_0F3A6B,
1409 PREFIX_VEX_0F3A6C,
1410 PREFIX_VEX_0F3A6D,
1411 PREFIX_VEX_0F3A6E,
1412 PREFIX_VEX_0F3A6F,
1413 PREFIX_VEX_0F3A78,
1414 PREFIX_VEX_0F3A79,
1415 PREFIX_VEX_0F3A7A,
1416 PREFIX_VEX_0F3A7B,
1417 PREFIX_VEX_0F3A7C,
1418 PREFIX_VEX_0F3A7D,
1419 PREFIX_VEX_0F3A7E,
1420 PREFIX_VEX_0F3A7F,
1421 PREFIX_VEX_0F3ACE,
1422 PREFIX_VEX_0F3ACF,
1423 PREFIX_VEX_0F3ADF,
1424 PREFIX_VEX_0F3AF0,
1425
1426 PREFIX_EVEX_0F10,
1427 PREFIX_EVEX_0F11,
1428 PREFIX_EVEX_0F12,
1429 PREFIX_EVEX_0F13,
1430 PREFIX_EVEX_0F14,
1431 PREFIX_EVEX_0F15,
1432 PREFIX_EVEX_0F16,
1433 PREFIX_EVEX_0F17,
1434 PREFIX_EVEX_0F28,
1435 PREFIX_EVEX_0F29,
1436 PREFIX_EVEX_0F2A,
1437 PREFIX_EVEX_0F2B,
1438 PREFIX_EVEX_0F2C,
1439 PREFIX_EVEX_0F2D,
1440 PREFIX_EVEX_0F2E,
1441 PREFIX_EVEX_0F2F,
1442 PREFIX_EVEX_0F51,
1443 PREFIX_EVEX_0F54,
1444 PREFIX_EVEX_0F55,
1445 PREFIX_EVEX_0F56,
1446 PREFIX_EVEX_0F57,
1447 PREFIX_EVEX_0F58,
1448 PREFIX_EVEX_0F59,
1449 PREFIX_EVEX_0F5A,
1450 PREFIX_EVEX_0F5B,
1451 PREFIX_EVEX_0F5C,
1452 PREFIX_EVEX_0F5D,
1453 PREFIX_EVEX_0F5E,
1454 PREFIX_EVEX_0F5F,
1455 PREFIX_EVEX_0F60,
1456 PREFIX_EVEX_0F61,
1457 PREFIX_EVEX_0F62,
1458 PREFIX_EVEX_0F63,
1459 PREFIX_EVEX_0F64,
1460 PREFIX_EVEX_0F65,
1461 PREFIX_EVEX_0F66,
1462 PREFIX_EVEX_0F67,
1463 PREFIX_EVEX_0F68,
1464 PREFIX_EVEX_0F69,
1465 PREFIX_EVEX_0F6A,
1466 PREFIX_EVEX_0F6B,
1467 PREFIX_EVEX_0F6C,
1468 PREFIX_EVEX_0F6D,
1469 PREFIX_EVEX_0F6E,
1470 PREFIX_EVEX_0F6F,
1471 PREFIX_EVEX_0F70,
1472 PREFIX_EVEX_0F71_REG_2,
1473 PREFIX_EVEX_0F71_REG_4,
1474 PREFIX_EVEX_0F71_REG_6,
1475 PREFIX_EVEX_0F72_REG_0,
1476 PREFIX_EVEX_0F72_REG_1,
1477 PREFIX_EVEX_0F72_REG_2,
1478 PREFIX_EVEX_0F72_REG_4,
1479 PREFIX_EVEX_0F72_REG_6,
1480 PREFIX_EVEX_0F73_REG_2,
1481 PREFIX_EVEX_0F73_REG_3,
1482 PREFIX_EVEX_0F73_REG_6,
1483 PREFIX_EVEX_0F73_REG_7,
1484 PREFIX_EVEX_0F74,
1485 PREFIX_EVEX_0F75,
1486 PREFIX_EVEX_0F76,
1487 PREFIX_EVEX_0F78,
1488 PREFIX_EVEX_0F79,
1489 PREFIX_EVEX_0F7A,
1490 PREFIX_EVEX_0F7B,
1491 PREFIX_EVEX_0F7E,
1492 PREFIX_EVEX_0F7F,
1493 PREFIX_EVEX_0FC2,
1494 PREFIX_EVEX_0FC4,
1495 PREFIX_EVEX_0FC5,
1496 PREFIX_EVEX_0FC6,
1497 PREFIX_EVEX_0FD1,
1498 PREFIX_EVEX_0FD2,
1499 PREFIX_EVEX_0FD3,
1500 PREFIX_EVEX_0FD4,
1501 PREFIX_EVEX_0FD5,
1502 PREFIX_EVEX_0FD6,
1503 PREFIX_EVEX_0FD8,
1504 PREFIX_EVEX_0FD9,
1505 PREFIX_EVEX_0FDA,
1506 PREFIX_EVEX_0FDB,
1507 PREFIX_EVEX_0FDC,
1508 PREFIX_EVEX_0FDD,
1509 PREFIX_EVEX_0FDE,
1510 PREFIX_EVEX_0FDF,
1511 PREFIX_EVEX_0FE0,
1512 PREFIX_EVEX_0FE1,
1513 PREFIX_EVEX_0FE2,
1514 PREFIX_EVEX_0FE3,
1515 PREFIX_EVEX_0FE4,
1516 PREFIX_EVEX_0FE5,
1517 PREFIX_EVEX_0FE6,
1518 PREFIX_EVEX_0FE7,
1519 PREFIX_EVEX_0FE8,
1520 PREFIX_EVEX_0FE9,
1521 PREFIX_EVEX_0FEA,
1522 PREFIX_EVEX_0FEB,
1523 PREFIX_EVEX_0FEC,
1524 PREFIX_EVEX_0FED,
1525 PREFIX_EVEX_0FEE,
1526 PREFIX_EVEX_0FEF,
1527 PREFIX_EVEX_0FF1,
1528 PREFIX_EVEX_0FF2,
1529 PREFIX_EVEX_0FF3,
1530 PREFIX_EVEX_0FF4,
1531 PREFIX_EVEX_0FF5,
1532 PREFIX_EVEX_0FF6,
1533 PREFIX_EVEX_0FF8,
1534 PREFIX_EVEX_0FF9,
1535 PREFIX_EVEX_0FFA,
1536 PREFIX_EVEX_0FFB,
1537 PREFIX_EVEX_0FFC,
1538 PREFIX_EVEX_0FFD,
1539 PREFIX_EVEX_0FFE,
1540 PREFIX_EVEX_0F3800,
1541 PREFIX_EVEX_0F3804,
1542 PREFIX_EVEX_0F380B,
1543 PREFIX_EVEX_0F380C,
1544 PREFIX_EVEX_0F380D,
1545 PREFIX_EVEX_0F3810,
1546 PREFIX_EVEX_0F3811,
1547 PREFIX_EVEX_0F3812,
1548 PREFIX_EVEX_0F3813,
1549 PREFIX_EVEX_0F3814,
1550 PREFIX_EVEX_0F3815,
1551 PREFIX_EVEX_0F3816,
1552 PREFIX_EVEX_0F3818,
1553 PREFIX_EVEX_0F3819,
1554 PREFIX_EVEX_0F381A,
1555 PREFIX_EVEX_0F381B,
1556 PREFIX_EVEX_0F381C,
1557 PREFIX_EVEX_0F381D,
1558 PREFIX_EVEX_0F381E,
1559 PREFIX_EVEX_0F381F,
1560 PREFIX_EVEX_0F3820,
1561 PREFIX_EVEX_0F3821,
1562 PREFIX_EVEX_0F3822,
1563 PREFIX_EVEX_0F3823,
1564 PREFIX_EVEX_0F3824,
1565 PREFIX_EVEX_0F3825,
1566 PREFIX_EVEX_0F3826,
1567 PREFIX_EVEX_0F3827,
1568 PREFIX_EVEX_0F3828,
1569 PREFIX_EVEX_0F3829,
1570 PREFIX_EVEX_0F382A,
1571 PREFIX_EVEX_0F382B,
1572 PREFIX_EVEX_0F382C,
1573 PREFIX_EVEX_0F382D,
1574 PREFIX_EVEX_0F3830,
1575 PREFIX_EVEX_0F3831,
1576 PREFIX_EVEX_0F3832,
1577 PREFIX_EVEX_0F3833,
1578 PREFIX_EVEX_0F3834,
1579 PREFIX_EVEX_0F3835,
1580 PREFIX_EVEX_0F3836,
1581 PREFIX_EVEX_0F3837,
1582 PREFIX_EVEX_0F3838,
1583 PREFIX_EVEX_0F3839,
1584 PREFIX_EVEX_0F383A,
1585 PREFIX_EVEX_0F383B,
1586 PREFIX_EVEX_0F383C,
1587 PREFIX_EVEX_0F383D,
1588 PREFIX_EVEX_0F383E,
1589 PREFIX_EVEX_0F383F,
1590 PREFIX_EVEX_0F3840,
1591 PREFIX_EVEX_0F3842,
1592 PREFIX_EVEX_0F3843,
1593 PREFIX_EVEX_0F3844,
1594 PREFIX_EVEX_0F3845,
1595 PREFIX_EVEX_0F3846,
1596 PREFIX_EVEX_0F3847,
1597 PREFIX_EVEX_0F384C,
1598 PREFIX_EVEX_0F384D,
1599 PREFIX_EVEX_0F384E,
1600 PREFIX_EVEX_0F384F,
1601 PREFIX_EVEX_0F3850,
1602 PREFIX_EVEX_0F3851,
1603 PREFIX_EVEX_0F3852,
1604 PREFIX_EVEX_0F3853,
1605 PREFIX_EVEX_0F3854,
1606 PREFIX_EVEX_0F3855,
1607 PREFIX_EVEX_0F3858,
1608 PREFIX_EVEX_0F3859,
1609 PREFIX_EVEX_0F385A,
1610 PREFIX_EVEX_0F385B,
1611 PREFIX_EVEX_0F3862,
1612 PREFIX_EVEX_0F3863,
1613 PREFIX_EVEX_0F3864,
1614 PREFIX_EVEX_0F3865,
1615 PREFIX_EVEX_0F3866,
1616 PREFIX_EVEX_0F3870,
1617 PREFIX_EVEX_0F3871,
1618 PREFIX_EVEX_0F3872,
1619 PREFIX_EVEX_0F3873,
1620 PREFIX_EVEX_0F3875,
1621 PREFIX_EVEX_0F3876,
1622 PREFIX_EVEX_0F3877,
1623 PREFIX_EVEX_0F3878,
1624 PREFIX_EVEX_0F3879,
1625 PREFIX_EVEX_0F387A,
1626 PREFIX_EVEX_0F387B,
1627 PREFIX_EVEX_0F387C,
1628 PREFIX_EVEX_0F387D,
1629 PREFIX_EVEX_0F387E,
1630 PREFIX_EVEX_0F387F,
1631 PREFIX_EVEX_0F3883,
1632 PREFIX_EVEX_0F3888,
1633 PREFIX_EVEX_0F3889,
1634 PREFIX_EVEX_0F388A,
1635 PREFIX_EVEX_0F388B,
1636 PREFIX_EVEX_0F388D,
1637 PREFIX_EVEX_0F388F,
1638 PREFIX_EVEX_0F3890,
1639 PREFIX_EVEX_0F3891,
1640 PREFIX_EVEX_0F3892,
1641 PREFIX_EVEX_0F3893,
1642 PREFIX_EVEX_0F3896,
1643 PREFIX_EVEX_0F3897,
1644 PREFIX_EVEX_0F3898,
1645 PREFIX_EVEX_0F3899,
1646 PREFIX_EVEX_0F389A,
1647 PREFIX_EVEX_0F389B,
1648 PREFIX_EVEX_0F389C,
1649 PREFIX_EVEX_0F389D,
1650 PREFIX_EVEX_0F389E,
1651 PREFIX_EVEX_0F389F,
1652 PREFIX_EVEX_0F38A0,
1653 PREFIX_EVEX_0F38A1,
1654 PREFIX_EVEX_0F38A2,
1655 PREFIX_EVEX_0F38A3,
1656 PREFIX_EVEX_0F38A6,
1657 PREFIX_EVEX_0F38A7,
1658 PREFIX_EVEX_0F38A8,
1659 PREFIX_EVEX_0F38A9,
1660 PREFIX_EVEX_0F38AA,
1661 PREFIX_EVEX_0F38AB,
1662 PREFIX_EVEX_0F38AC,
1663 PREFIX_EVEX_0F38AD,
1664 PREFIX_EVEX_0F38AE,
1665 PREFIX_EVEX_0F38AF,
1666 PREFIX_EVEX_0F38B4,
1667 PREFIX_EVEX_0F38B5,
1668 PREFIX_EVEX_0F38B6,
1669 PREFIX_EVEX_0F38B7,
1670 PREFIX_EVEX_0F38B8,
1671 PREFIX_EVEX_0F38B9,
1672 PREFIX_EVEX_0F38BA,
1673 PREFIX_EVEX_0F38BB,
1674 PREFIX_EVEX_0F38BC,
1675 PREFIX_EVEX_0F38BD,
1676 PREFIX_EVEX_0F38BE,
1677 PREFIX_EVEX_0F38BF,
1678 PREFIX_EVEX_0F38C4,
1679 PREFIX_EVEX_0F38C6_REG_1,
1680 PREFIX_EVEX_0F38C6_REG_2,
1681 PREFIX_EVEX_0F38C6_REG_5,
1682 PREFIX_EVEX_0F38C6_REG_6,
1683 PREFIX_EVEX_0F38C7_REG_1,
1684 PREFIX_EVEX_0F38C7_REG_2,
1685 PREFIX_EVEX_0F38C7_REG_5,
1686 PREFIX_EVEX_0F38C7_REG_6,
1687 PREFIX_EVEX_0F38C8,
1688 PREFIX_EVEX_0F38CA,
1689 PREFIX_EVEX_0F38CB,
1690 PREFIX_EVEX_0F38CC,
1691 PREFIX_EVEX_0F38CD,
1692 PREFIX_EVEX_0F38CF,
1693 PREFIX_EVEX_0F38DC,
1694 PREFIX_EVEX_0F38DD,
1695 PREFIX_EVEX_0F38DE,
1696 PREFIX_EVEX_0F38DF,
1697
1698 PREFIX_EVEX_0F3A00,
1699 PREFIX_EVEX_0F3A01,
1700 PREFIX_EVEX_0F3A03,
1701 PREFIX_EVEX_0F3A04,
1702 PREFIX_EVEX_0F3A05,
1703 PREFIX_EVEX_0F3A08,
1704 PREFIX_EVEX_0F3A09,
1705 PREFIX_EVEX_0F3A0A,
1706 PREFIX_EVEX_0F3A0B,
1707 PREFIX_EVEX_0F3A0F,
1708 PREFIX_EVEX_0F3A14,
1709 PREFIX_EVEX_0F3A15,
1710 PREFIX_EVEX_0F3A16,
1711 PREFIX_EVEX_0F3A17,
1712 PREFIX_EVEX_0F3A18,
1713 PREFIX_EVEX_0F3A19,
1714 PREFIX_EVEX_0F3A1A,
1715 PREFIX_EVEX_0F3A1B,
1716 PREFIX_EVEX_0F3A1D,
1717 PREFIX_EVEX_0F3A1E,
1718 PREFIX_EVEX_0F3A1F,
1719 PREFIX_EVEX_0F3A20,
1720 PREFIX_EVEX_0F3A21,
1721 PREFIX_EVEX_0F3A22,
1722 PREFIX_EVEX_0F3A23,
1723 PREFIX_EVEX_0F3A25,
1724 PREFIX_EVEX_0F3A26,
1725 PREFIX_EVEX_0F3A27,
1726 PREFIX_EVEX_0F3A38,
1727 PREFIX_EVEX_0F3A39,
1728 PREFIX_EVEX_0F3A3A,
1729 PREFIX_EVEX_0F3A3B,
1730 PREFIX_EVEX_0F3A3E,
1731 PREFIX_EVEX_0F3A3F,
1732 PREFIX_EVEX_0F3A42,
1733 PREFIX_EVEX_0F3A43,
1734 PREFIX_EVEX_0F3A44,
1735 PREFIX_EVEX_0F3A50,
1736 PREFIX_EVEX_0F3A51,
1737 PREFIX_EVEX_0F3A54,
1738 PREFIX_EVEX_0F3A55,
1739 PREFIX_EVEX_0F3A56,
1740 PREFIX_EVEX_0F3A57,
1741 PREFIX_EVEX_0F3A66,
1742 PREFIX_EVEX_0F3A67,
1743 PREFIX_EVEX_0F3A70,
1744 PREFIX_EVEX_0F3A71,
1745 PREFIX_EVEX_0F3A72,
1746 PREFIX_EVEX_0F3A73,
1747 PREFIX_EVEX_0F3ACE,
1748 PREFIX_EVEX_0F3ACF
1749 };
1750
1751 enum
1752 {
1753 X86_64_06 = 0,
1754 X86_64_07,
1755 X86_64_0D,
1756 X86_64_16,
1757 X86_64_17,
1758 X86_64_1E,
1759 X86_64_1F,
1760 X86_64_27,
1761 X86_64_2F,
1762 X86_64_37,
1763 X86_64_3F,
1764 X86_64_60,
1765 X86_64_61,
1766 X86_64_62,
1767 X86_64_63,
1768 X86_64_6D,
1769 X86_64_6F,
1770 X86_64_82,
1771 X86_64_9A,
1772 X86_64_C4,
1773 X86_64_C5,
1774 X86_64_CE,
1775 X86_64_D4,
1776 X86_64_D5,
1777 X86_64_E8,
1778 X86_64_E9,
1779 X86_64_EA,
1780 X86_64_0F01_REG_0,
1781 X86_64_0F01_REG_1,
1782 X86_64_0F01_REG_2,
1783 X86_64_0F01_REG_3
1784 };
1785
1786 enum
1787 {
1788 THREE_BYTE_0F38 = 0,
1789 THREE_BYTE_0F3A
1790 };
1791
1792 enum
1793 {
1794 XOP_08 = 0,
1795 XOP_09,
1796 XOP_0A
1797 };
1798
1799 enum
1800 {
1801 VEX_0F = 0,
1802 VEX_0F38,
1803 VEX_0F3A
1804 };
1805
1806 enum
1807 {
1808 EVEX_0F = 0,
1809 EVEX_0F38,
1810 EVEX_0F3A
1811 };
1812
1813 enum
1814 {
1815 VEX_LEN_0F10_P_1 = 0,
1816 VEX_LEN_0F10_P_3,
1817 VEX_LEN_0F11_P_1,
1818 VEX_LEN_0F11_P_3,
1819 VEX_LEN_0F12_P_0_M_0,
1820 VEX_LEN_0F12_P_0_M_1,
1821 VEX_LEN_0F12_P_2,
1822 VEX_LEN_0F13_M_0,
1823 VEX_LEN_0F16_P_0_M_0,
1824 VEX_LEN_0F16_P_0_M_1,
1825 VEX_LEN_0F16_P_2,
1826 VEX_LEN_0F17_M_0,
1827 VEX_LEN_0F2A_P_1,
1828 VEX_LEN_0F2A_P_3,
1829 VEX_LEN_0F2C_P_1,
1830 VEX_LEN_0F2C_P_3,
1831 VEX_LEN_0F2D_P_1,
1832 VEX_LEN_0F2D_P_3,
1833 VEX_LEN_0F2E_P_0,
1834 VEX_LEN_0F2E_P_2,
1835 VEX_LEN_0F2F_P_0,
1836 VEX_LEN_0F2F_P_2,
1837 VEX_LEN_0F41_P_0,
1838 VEX_LEN_0F41_P_2,
1839 VEX_LEN_0F42_P_0,
1840 VEX_LEN_0F42_P_2,
1841 VEX_LEN_0F44_P_0,
1842 VEX_LEN_0F44_P_2,
1843 VEX_LEN_0F45_P_0,
1844 VEX_LEN_0F45_P_2,
1845 VEX_LEN_0F46_P_0,
1846 VEX_LEN_0F46_P_2,
1847 VEX_LEN_0F47_P_0,
1848 VEX_LEN_0F47_P_2,
1849 VEX_LEN_0F4A_P_0,
1850 VEX_LEN_0F4A_P_2,
1851 VEX_LEN_0F4B_P_0,
1852 VEX_LEN_0F4B_P_2,
1853 VEX_LEN_0F51_P_1,
1854 VEX_LEN_0F51_P_3,
1855 VEX_LEN_0F52_P_1,
1856 VEX_LEN_0F53_P_1,
1857 VEX_LEN_0F58_P_1,
1858 VEX_LEN_0F58_P_3,
1859 VEX_LEN_0F59_P_1,
1860 VEX_LEN_0F59_P_3,
1861 VEX_LEN_0F5A_P_1,
1862 VEX_LEN_0F5A_P_3,
1863 VEX_LEN_0F5C_P_1,
1864 VEX_LEN_0F5C_P_3,
1865 VEX_LEN_0F5D_P_1,
1866 VEX_LEN_0F5D_P_3,
1867 VEX_LEN_0F5E_P_1,
1868 VEX_LEN_0F5E_P_3,
1869 VEX_LEN_0F5F_P_1,
1870 VEX_LEN_0F5F_P_3,
1871 VEX_LEN_0F6E_P_2,
1872 VEX_LEN_0F7E_P_1,
1873 VEX_LEN_0F7E_P_2,
1874 VEX_LEN_0F90_P_0,
1875 VEX_LEN_0F90_P_2,
1876 VEX_LEN_0F91_P_0,
1877 VEX_LEN_0F91_P_2,
1878 VEX_LEN_0F92_P_0,
1879 VEX_LEN_0F92_P_2,
1880 VEX_LEN_0F92_P_3,
1881 VEX_LEN_0F93_P_0,
1882 VEX_LEN_0F93_P_2,
1883 VEX_LEN_0F93_P_3,
1884 VEX_LEN_0F98_P_0,
1885 VEX_LEN_0F98_P_2,
1886 VEX_LEN_0F99_P_0,
1887 VEX_LEN_0F99_P_2,
1888 VEX_LEN_0FAE_R_2_M_0,
1889 VEX_LEN_0FAE_R_3_M_0,
1890 VEX_LEN_0FC2_P_1,
1891 VEX_LEN_0FC2_P_3,
1892 VEX_LEN_0FC4_P_2,
1893 VEX_LEN_0FC5_P_2,
1894 VEX_LEN_0FD6_P_2,
1895 VEX_LEN_0FF7_P_2,
1896 VEX_LEN_0F3816_P_2,
1897 VEX_LEN_0F3819_P_2,
1898 VEX_LEN_0F381A_P_2_M_0,
1899 VEX_LEN_0F3836_P_2,
1900 VEX_LEN_0F3841_P_2,
1901 VEX_LEN_0F385A_P_2_M_0,
1902 VEX_LEN_0F38DB_P_2,
1903 VEX_LEN_0F38F2_P_0,
1904 VEX_LEN_0F38F3_R_1_P_0,
1905 VEX_LEN_0F38F3_R_2_P_0,
1906 VEX_LEN_0F38F3_R_3_P_0,
1907 VEX_LEN_0F38F5_P_0,
1908 VEX_LEN_0F38F5_P_1,
1909 VEX_LEN_0F38F5_P_3,
1910 VEX_LEN_0F38F6_P_3,
1911 VEX_LEN_0F38F7_P_0,
1912 VEX_LEN_0F38F7_P_1,
1913 VEX_LEN_0F38F7_P_2,
1914 VEX_LEN_0F38F7_P_3,
1915 VEX_LEN_0F3A00_P_2,
1916 VEX_LEN_0F3A01_P_2,
1917 VEX_LEN_0F3A06_P_2,
1918 VEX_LEN_0F3A0A_P_2,
1919 VEX_LEN_0F3A0B_P_2,
1920 VEX_LEN_0F3A14_P_2,
1921 VEX_LEN_0F3A15_P_2,
1922 VEX_LEN_0F3A16_P_2,
1923 VEX_LEN_0F3A17_P_2,
1924 VEX_LEN_0F3A18_P_2,
1925 VEX_LEN_0F3A19_P_2,
1926 VEX_LEN_0F3A20_P_2,
1927 VEX_LEN_0F3A21_P_2,
1928 VEX_LEN_0F3A22_P_2,
1929 VEX_LEN_0F3A30_P_2,
1930 VEX_LEN_0F3A31_P_2,
1931 VEX_LEN_0F3A32_P_2,
1932 VEX_LEN_0F3A33_P_2,
1933 VEX_LEN_0F3A38_P_2,
1934 VEX_LEN_0F3A39_P_2,
1935 VEX_LEN_0F3A41_P_2,
1936 VEX_LEN_0F3A46_P_2,
1937 VEX_LEN_0F3A60_P_2,
1938 VEX_LEN_0F3A61_P_2,
1939 VEX_LEN_0F3A62_P_2,
1940 VEX_LEN_0F3A63_P_2,
1941 VEX_LEN_0F3A6A_P_2,
1942 VEX_LEN_0F3A6B_P_2,
1943 VEX_LEN_0F3A6E_P_2,
1944 VEX_LEN_0F3A6F_P_2,
1945 VEX_LEN_0F3A7A_P_2,
1946 VEX_LEN_0F3A7B_P_2,
1947 VEX_LEN_0F3A7E_P_2,
1948 VEX_LEN_0F3A7F_P_2,
1949 VEX_LEN_0F3ADF_P_2,
1950 VEX_LEN_0F3AF0_P_3,
1951 VEX_LEN_0FXOP_08_CC,
1952 VEX_LEN_0FXOP_08_CD,
1953 VEX_LEN_0FXOP_08_CE,
1954 VEX_LEN_0FXOP_08_CF,
1955 VEX_LEN_0FXOP_08_EC,
1956 VEX_LEN_0FXOP_08_ED,
1957 VEX_LEN_0FXOP_08_EE,
1958 VEX_LEN_0FXOP_08_EF,
1959 VEX_LEN_0FXOP_09_80,
1960 VEX_LEN_0FXOP_09_81
1961 };
1962
1963 enum
1964 {
1965 VEX_W_0F10_P_0 = 0,
1966 VEX_W_0F10_P_1,
1967 VEX_W_0F10_P_2,
1968 VEX_W_0F10_P_3,
1969 VEX_W_0F11_P_0,
1970 VEX_W_0F11_P_1,
1971 VEX_W_0F11_P_2,
1972 VEX_W_0F11_P_3,
1973 VEX_W_0F12_P_0_M_0,
1974 VEX_W_0F12_P_0_M_1,
1975 VEX_W_0F12_P_1,
1976 VEX_W_0F12_P_2,
1977 VEX_W_0F12_P_3,
1978 VEX_W_0F13_M_0,
1979 VEX_W_0F14,
1980 VEX_W_0F15,
1981 VEX_W_0F16_P_0_M_0,
1982 VEX_W_0F16_P_0_M_1,
1983 VEX_W_0F16_P_1,
1984 VEX_W_0F16_P_2,
1985 VEX_W_0F17_M_0,
1986 VEX_W_0F28,
1987 VEX_W_0F29,
1988 VEX_W_0F2B_M_0,
1989 VEX_W_0F2E_P_0,
1990 VEX_W_0F2E_P_2,
1991 VEX_W_0F2F_P_0,
1992 VEX_W_0F2F_P_2,
1993 VEX_W_0F41_P_0_LEN_1,
1994 VEX_W_0F41_P_2_LEN_1,
1995 VEX_W_0F42_P_0_LEN_1,
1996 VEX_W_0F42_P_2_LEN_1,
1997 VEX_W_0F44_P_0_LEN_0,
1998 VEX_W_0F44_P_2_LEN_0,
1999 VEX_W_0F45_P_0_LEN_1,
2000 VEX_W_0F45_P_2_LEN_1,
2001 VEX_W_0F46_P_0_LEN_1,
2002 VEX_W_0F46_P_2_LEN_1,
2003 VEX_W_0F47_P_0_LEN_1,
2004 VEX_W_0F47_P_2_LEN_1,
2005 VEX_W_0F4A_P_0_LEN_1,
2006 VEX_W_0F4A_P_2_LEN_1,
2007 VEX_W_0F4B_P_0_LEN_1,
2008 VEX_W_0F4B_P_2_LEN_1,
2009 VEX_W_0F50_M_0,
2010 VEX_W_0F51_P_0,
2011 VEX_W_0F51_P_1,
2012 VEX_W_0F51_P_2,
2013 VEX_W_0F51_P_3,
2014 VEX_W_0F52_P_0,
2015 VEX_W_0F52_P_1,
2016 VEX_W_0F53_P_0,
2017 VEX_W_0F53_P_1,
2018 VEX_W_0F58_P_0,
2019 VEX_W_0F58_P_1,
2020 VEX_W_0F58_P_2,
2021 VEX_W_0F58_P_3,
2022 VEX_W_0F59_P_0,
2023 VEX_W_0F59_P_1,
2024 VEX_W_0F59_P_2,
2025 VEX_W_0F59_P_3,
2026 VEX_W_0F5A_P_0,
2027 VEX_W_0F5A_P_1,
2028 VEX_W_0F5A_P_3,
2029 VEX_W_0F5B_P_0,
2030 VEX_W_0F5B_P_1,
2031 VEX_W_0F5B_P_2,
2032 VEX_W_0F5C_P_0,
2033 VEX_W_0F5C_P_1,
2034 VEX_W_0F5C_P_2,
2035 VEX_W_0F5C_P_3,
2036 VEX_W_0F5D_P_0,
2037 VEX_W_0F5D_P_1,
2038 VEX_W_0F5D_P_2,
2039 VEX_W_0F5D_P_3,
2040 VEX_W_0F5E_P_0,
2041 VEX_W_0F5E_P_1,
2042 VEX_W_0F5E_P_2,
2043 VEX_W_0F5E_P_3,
2044 VEX_W_0F5F_P_0,
2045 VEX_W_0F5F_P_1,
2046 VEX_W_0F5F_P_2,
2047 VEX_W_0F5F_P_3,
2048 VEX_W_0F60_P_2,
2049 VEX_W_0F61_P_2,
2050 VEX_W_0F62_P_2,
2051 VEX_W_0F63_P_2,
2052 VEX_W_0F64_P_2,
2053 VEX_W_0F65_P_2,
2054 VEX_W_0F66_P_2,
2055 VEX_W_0F67_P_2,
2056 VEX_W_0F68_P_2,
2057 VEX_W_0F69_P_2,
2058 VEX_W_0F6A_P_2,
2059 VEX_W_0F6B_P_2,
2060 VEX_W_0F6C_P_2,
2061 VEX_W_0F6D_P_2,
2062 VEX_W_0F6F_P_1,
2063 VEX_W_0F6F_P_2,
2064 VEX_W_0F70_P_1,
2065 VEX_W_0F70_P_2,
2066 VEX_W_0F70_P_3,
2067 VEX_W_0F71_R_2_P_2,
2068 VEX_W_0F71_R_4_P_2,
2069 VEX_W_0F71_R_6_P_2,
2070 VEX_W_0F72_R_2_P_2,
2071 VEX_W_0F72_R_4_P_2,
2072 VEX_W_0F72_R_6_P_2,
2073 VEX_W_0F73_R_2_P_2,
2074 VEX_W_0F73_R_3_P_2,
2075 VEX_W_0F73_R_6_P_2,
2076 VEX_W_0F73_R_7_P_2,
2077 VEX_W_0F74_P_2,
2078 VEX_W_0F75_P_2,
2079 VEX_W_0F76_P_2,
2080 VEX_W_0F77_P_0,
2081 VEX_W_0F7C_P_2,
2082 VEX_W_0F7C_P_3,
2083 VEX_W_0F7D_P_2,
2084 VEX_W_0F7D_P_3,
2085 VEX_W_0F7E_P_1,
2086 VEX_W_0F7F_P_1,
2087 VEX_W_0F7F_P_2,
2088 VEX_W_0F90_P_0_LEN_0,
2089 VEX_W_0F90_P_2_LEN_0,
2090 VEX_W_0F91_P_0_LEN_0,
2091 VEX_W_0F91_P_2_LEN_0,
2092 VEX_W_0F92_P_0_LEN_0,
2093 VEX_W_0F92_P_2_LEN_0,
2094 VEX_W_0F92_P_3_LEN_0,
2095 VEX_W_0F93_P_0_LEN_0,
2096 VEX_W_0F93_P_2_LEN_0,
2097 VEX_W_0F93_P_3_LEN_0,
2098 VEX_W_0F98_P_0_LEN_0,
2099 VEX_W_0F98_P_2_LEN_0,
2100 VEX_W_0F99_P_0_LEN_0,
2101 VEX_W_0F99_P_2_LEN_0,
2102 VEX_W_0FAE_R_2_M_0,
2103 VEX_W_0FAE_R_3_M_0,
2104 VEX_W_0FC2_P_0,
2105 VEX_W_0FC2_P_1,
2106 VEX_W_0FC2_P_2,
2107 VEX_W_0FC2_P_3,
2108 VEX_W_0FC4_P_2,
2109 VEX_W_0FC5_P_2,
2110 VEX_W_0FD0_P_2,
2111 VEX_W_0FD0_P_3,
2112 VEX_W_0FD1_P_2,
2113 VEX_W_0FD2_P_2,
2114 VEX_W_0FD3_P_2,
2115 VEX_W_0FD4_P_2,
2116 VEX_W_0FD5_P_2,
2117 VEX_W_0FD6_P_2,
2118 VEX_W_0FD7_P_2_M_1,
2119 VEX_W_0FD8_P_2,
2120 VEX_W_0FD9_P_2,
2121 VEX_W_0FDA_P_2,
2122 VEX_W_0FDB_P_2,
2123 VEX_W_0FDC_P_2,
2124 VEX_W_0FDD_P_2,
2125 VEX_W_0FDE_P_2,
2126 VEX_W_0FDF_P_2,
2127 VEX_W_0FE0_P_2,
2128 VEX_W_0FE1_P_2,
2129 VEX_W_0FE2_P_2,
2130 VEX_W_0FE3_P_2,
2131 VEX_W_0FE4_P_2,
2132 VEX_W_0FE5_P_2,
2133 VEX_W_0FE6_P_1,
2134 VEX_W_0FE6_P_2,
2135 VEX_W_0FE6_P_3,
2136 VEX_W_0FE7_P_2_M_0,
2137 VEX_W_0FE8_P_2,
2138 VEX_W_0FE9_P_2,
2139 VEX_W_0FEA_P_2,
2140 VEX_W_0FEB_P_2,
2141 VEX_W_0FEC_P_2,
2142 VEX_W_0FED_P_2,
2143 VEX_W_0FEE_P_2,
2144 VEX_W_0FEF_P_2,
2145 VEX_W_0FF0_P_3_M_0,
2146 VEX_W_0FF1_P_2,
2147 VEX_W_0FF2_P_2,
2148 VEX_W_0FF3_P_2,
2149 VEX_W_0FF4_P_2,
2150 VEX_W_0FF5_P_2,
2151 VEX_W_0FF6_P_2,
2152 VEX_W_0FF7_P_2,
2153 VEX_W_0FF8_P_2,
2154 VEX_W_0FF9_P_2,
2155 VEX_W_0FFA_P_2,
2156 VEX_W_0FFB_P_2,
2157 VEX_W_0FFC_P_2,
2158 VEX_W_0FFD_P_2,
2159 VEX_W_0FFE_P_2,
2160 VEX_W_0F3800_P_2,
2161 VEX_W_0F3801_P_2,
2162 VEX_W_0F3802_P_2,
2163 VEX_W_0F3803_P_2,
2164 VEX_W_0F3804_P_2,
2165 VEX_W_0F3805_P_2,
2166 VEX_W_0F3806_P_2,
2167 VEX_W_0F3807_P_2,
2168 VEX_W_0F3808_P_2,
2169 VEX_W_0F3809_P_2,
2170 VEX_W_0F380A_P_2,
2171 VEX_W_0F380B_P_2,
2172 VEX_W_0F380C_P_2,
2173 VEX_W_0F380D_P_2,
2174 VEX_W_0F380E_P_2,
2175 VEX_W_0F380F_P_2,
2176 VEX_W_0F3816_P_2,
2177 VEX_W_0F3817_P_2,
2178 VEX_W_0F3818_P_2,
2179 VEX_W_0F3819_P_2,
2180 VEX_W_0F381A_P_2_M_0,
2181 VEX_W_0F381C_P_2,
2182 VEX_W_0F381D_P_2,
2183 VEX_W_0F381E_P_2,
2184 VEX_W_0F3820_P_2,
2185 VEX_W_0F3821_P_2,
2186 VEX_W_0F3822_P_2,
2187 VEX_W_0F3823_P_2,
2188 VEX_W_0F3824_P_2,
2189 VEX_W_0F3825_P_2,
2190 VEX_W_0F3828_P_2,
2191 VEX_W_0F3829_P_2,
2192 VEX_W_0F382A_P_2_M_0,
2193 VEX_W_0F382B_P_2,
2194 VEX_W_0F382C_P_2_M_0,
2195 VEX_W_0F382D_P_2_M_0,
2196 VEX_W_0F382E_P_2_M_0,
2197 VEX_W_0F382F_P_2_M_0,
2198 VEX_W_0F3830_P_2,
2199 VEX_W_0F3831_P_2,
2200 VEX_W_0F3832_P_2,
2201 VEX_W_0F3833_P_2,
2202 VEX_W_0F3834_P_2,
2203 VEX_W_0F3835_P_2,
2204 VEX_W_0F3836_P_2,
2205 VEX_W_0F3837_P_2,
2206 VEX_W_0F3838_P_2,
2207 VEX_W_0F3839_P_2,
2208 VEX_W_0F383A_P_2,
2209 VEX_W_0F383B_P_2,
2210 VEX_W_0F383C_P_2,
2211 VEX_W_0F383D_P_2,
2212 VEX_W_0F383E_P_2,
2213 VEX_W_0F383F_P_2,
2214 VEX_W_0F3840_P_2,
2215 VEX_W_0F3841_P_2,
2216 VEX_W_0F3846_P_2,
2217 VEX_W_0F3858_P_2,
2218 VEX_W_0F3859_P_2,
2219 VEX_W_0F385A_P_2_M_0,
2220 VEX_W_0F3878_P_2,
2221 VEX_W_0F3879_P_2,
2222 VEX_W_0F38CF_P_2,
2223 VEX_W_0F38DB_P_2,
2224 VEX_W_0F3A00_P_2,
2225 VEX_W_0F3A01_P_2,
2226 VEX_W_0F3A02_P_2,
2227 VEX_W_0F3A04_P_2,
2228 VEX_W_0F3A05_P_2,
2229 VEX_W_0F3A06_P_2,
2230 VEX_W_0F3A08_P_2,
2231 VEX_W_0F3A09_P_2,
2232 VEX_W_0F3A0A_P_2,
2233 VEX_W_0F3A0B_P_2,
2234 VEX_W_0F3A0C_P_2,
2235 VEX_W_0F3A0D_P_2,
2236 VEX_W_0F3A0E_P_2,
2237 VEX_W_0F3A0F_P_2,
2238 VEX_W_0F3A14_P_2,
2239 VEX_W_0F3A15_P_2,
2240 VEX_W_0F3A18_P_2,
2241 VEX_W_0F3A19_P_2,
2242 VEX_W_0F3A20_P_2,
2243 VEX_W_0F3A21_P_2,
2244 VEX_W_0F3A30_P_2_LEN_0,
2245 VEX_W_0F3A31_P_2_LEN_0,
2246 VEX_W_0F3A32_P_2_LEN_0,
2247 VEX_W_0F3A33_P_2_LEN_0,
2248 VEX_W_0F3A38_P_2,
2249 VEX_W_0F3A39_P_2,
2250 VEX_W_0F3A40_P_2,
2251 VEX_W_0F3A41_P_2,
2252 VEX_W_0F3A42_P_2,
2253 VEX_W_0F3A46_P_2,
2254 VEX_W_0F3A48_P_2,
2255 VEX_W_0F3A49_P_2,
2256 VEX_W_0F3A4A_P_2,
2257 VEX_W_0F3A4B_P_2,
2258 VEX_W_0F3A4C_P_2,
2259 VEX_W_0F3A62_P_2,
2260 VEX_W_0F3A63_P_2,
2261 VEX_W_0F3ACE_P_2,
2262 VEX_W_0F3ACF_P_2,
2263 VEX_W_0F3ADF_P_2,
2264
2265 EVEX_W_0F10_P_0,
2266 EVEX_W_0F10_P_1_M_0,
2267 EVEX_W_0F10_P_1_M_1,
2268 EVEX_W_0F10_P_2,
2269 EVEX_W_0F10_P_3_M_0,
2270 EVEX_W_0F10_P_3_M_1,
2271 EVEX_W_0F11_P_0,
2272 EVEX_W_0F11_P_1_M_0,
2273 EVEX_W_0F11_P_1_M_1,
2274 EVEX_W_0F11_P_2,
2275 EVEX_W_0F11_P_3_M_0,
2276 EVEX_W_0F11_P_3_M_1,
2277 EVEX_W_0F12_P_0_M_0,
2278 EVEX_W_0F12_P_0_M_1,
2279 EVEX_W_0F12_P_1,
2280 EVEX_W_0F12_P_2,
2281 EVEX_W_0F12_P_3,
2282 EVEX_W_0F13_P_0,
2283 EVEX_W_0F13_P_2,
2284 EVEX_W_0F14_P_0,
2285 EVEX_W_0F14_P_2,
2286 EVEX_W_0F15_P_0,
2287 EVEX_W_0F15_P_2,
2288 EVEX_W_0F16_P_0_M_0,
2289 EVEX_W_0F16_P_0_M_1,
2290 EVEX_W_0F16_P_1,
2291 EVEX_W_0F16_P_2,
2292 EVEX_W_0F17_P_0,
2293 EVEX_W_0F17_P_2,
2294 EVEX_W_0F28_P_0,
2295 EVEX_W_0F28_P_2,
2296 EVEX_W_0F29_P_0,
2297 EVEX_W_0F29_P_2,
2298 EVEX_W_0F2A_P_1,
2299 EVEX_W_0F2A_P_3,
2300 EVEX_W_0F2B_P_0,
2301 EVEX_W_0F2B_P_2,
2302 EVEX_W_0F2E_P_0,
2303 EVEX_W_0F2E_P_2,
2304 EVEX_W_0F2F_P_0,
2305 EVEX_W_0F2F_P_2,
2306 EVEX_W_0F51_P_0,
2307 EVEX_W_0F51_P_1,
2308 EVEX_W_0F51_P_2,
2309 EVEX_W_0F51_P_3,
2310 EVEX_W_0F54_P_0,
2311 EVEX_W_0F54_P_2,
2312 EVEX_W_0F55_P_0,
2313 EVEX_W_0F55_P_2,
2314 EVEX_W_0F56_P_0,
2315 EVEX_W_0F56_P_2,
2316 EVEX_W_0F57_P_0,
2317 EVEX_W_0F57_P_2,
2318 EVEX_W_0F58_P_0,
2319 EVEX_W_0F58_P_1,
2320 EVEX_W_0F58_P_2,
2321 EVEX_W_0F58_P_3,
2322 EVEX_W_0F59_P_0,
2323 EVEX_W_0F59_P_1,
2324 EVEX_W_0F59_P_2,
2325 EVEX_W_0F59_P_3,
2326 EVEX_W_0F5A_P_0,
2327 EVEX_W_0F5A_P_1,
2328 EVEX_W_0F5A_P_2,
2329 EVEX_W_0F5A_P_3,
2330 EVEX_W_0F5B_P_0,
2331 EVEX_W_0F5B_P_1,
2332 EVEX_W_0F5B_P_2,
2333 EVEX_W_0F5C_P_0,
2334 EVEX_W_0F5C_P_1,
2335 EVEX_W_0F5C_P_2,
2336 EVEX_W_0F5C_P_3,
2337 EVEX_W_0F5D_P_0,
2338 EVEX_W_0F5D_P_1,
2339 EVEX_W_0F5D_P_2,
2340 EVEX_W_0F5D_P_3,
2341 EVEX_W_0F5E_P_0,
2342 EVEX_W_0F5E_P_1,
2343 EVEX_W_0F5E_P_2,
2344 EVEX_W_0F5E_P_3,
2345 EVEX_W_0F5F_P_0,
2346 EVEX_W_0F5F_P_1,
2347 EVEX_W_0F5F_P_2,
2348 EVEX_W_0F5F_P_3,
2349 EVEX_W_0F62_P_2,
2350 EVEX_W_0F66_P_2,
2351 EVEX_W_0F6A_P_2,
2352 EVEX_W_0F6B_P_2,
2353 EVEX_W_0F6C_P_2,
2354 EVEX_W_0F6D_P_2,
2355 EVEX_W_0F6E_P_2,
2356 EVEX_W_0F6F_P_1,
2357 EVEX_W_0F6F_P_2,
2358 EVEX_W_0F6F_P_3,
2359 EVEX_W_0F70_P_2,
2360 EVEX_W_0F72_R_2_P_2,
2361 EVEX_W_0F72_R_6_P_2,
2362 EVEX_W_0F73_R_2_P_2,
2363 EVEX_W_0F73_R_6_P_2,
2364 EVEX_W_0F76_P_2,
2365 EVEX_W_0F78_P_0,
2366 EVEX_W_0F78_P_2,
2367 EVEX_W_0F79_P_0,
2368 EVEX_W_0F79_P_2,
2369 EVEX_W_0F7A_P_1,
2370 EVEX_W_0F7A_P_2,
2371 EVEX_W_0F7A_P_3,
2372 EVEX_W_0F7B_P_1,
2373 EVEX_W_0F7B_P_2,
2374 EVEX_W_0F7B_P_3,
2375 EVEX_W_0F7E_P_1,
2376 EVEX_W_0F7E_P_2,
2377 EVEX_W_0F7F_P_1,
2378 EVEX_W_0F7F_P_2,
2379 EVEX_W_0F7F_P_3,
2380 EVEX_W_0FC2_P_0,
2381 EVEX_W_0FC2_P_1,
2382 EVEX_W_0FC2_P_2,
2383 EVEX_W_0FC2_P_3,
2384 EVEX_W_0FC6_P_0,
2385 EVEX_W_0FC6_P_2,
2386 EVEX_W_0FD2_P_2,
2387 EVEX_W_0FD3_P_2,
2388 EVEX_W_0FD4_P_2,
2389 EVEX_W_0FD6_P_2,
2390 EVEX_W_0FE6_P_1,
2391 EVEX_W_0FE6_P_2,
2392 EVEX_W_0FE6_P_3,
2393 EVEX_W_0FE7_P_2,
2394 EVEX_W_0FF2_P_2,
2395 EVEX_W_0FF3_P_2,
2396 EVEX_W_0FF4_P_2,
2397 EVEX_W_0FFA_P_2,
2398 EVEX_W_0FFB_P_2,
2399 EVEX_W_0FFE_P_2,
2400 EVEX_W_0F380C_P_2,
2401 EVEX_W_0F380D_P_2,
2402 EVEX_W_0F3810_P_1,
2403 EVEX_W_0F3810_P_2,
2404 EVEX_W_0F3811_P_1,
2405 EVEX_W_0F3811_P_2,
2406 EVEX_W_0F3812_P_1,
2407 EVEX_W_0F3812_P_2,
2408 EVEX_W_0F3813_P_1,
2409 EVEX_W_0F3813_P_2,
2410 EVEX_W_0F3814_P_1,
2411 EVEX_W_0F3815_P_1,
2412 EVEX_W_0F3818_P_2,
2413 EVEX_W_0F3819_P_2,
2414 EVEX_W_0F381A_P_2,
2415 EVEX_W_0F381B_P_2,
2416 EVEX_W_0F381E_P_2,
2417 EVEX_W_0F381F_P_2,
2418 EVEX_W_0F3820_P_1,
2419 EVEX_W_0F3821_P_1,
2420 EVEX_W_0F3822_P_1,
2421 EVEX_W_0F3823_P_1,
2422 EVEX_W_0F3824_P_1,
2423 EVEX_W_0F3825_P_1,
2424 EVEX_W_0F3825_P_2,
2425 EVEX_W_0F3826_P_1,
2426 EVEX_W_0F3826_P_2,
2427 EVEX_W_0F3828_P_1,
2428 EVEX_W_0F3828_P_2,
2429 EVEX_W_0F3829_P_1,
2430 EVEX_W_0F3829_P_2,
2431 EVEX_W_0F382A_P_1,
2432 EVEX_W_0F382A_P_2,
2433 EVEX_W_0F382B_P_2,
2434 EVEX_W_0F3830_P_1,
2435 EVEX_W_0F3831_P_1,
2436 EVEX_W_0F3832_P_1,
2437 EVEX_W_0F3833_P_1,
2438 EVEX_W_0F3834_P_1,
2439 EVEX_W_0F3835_P_1,
2440 EVEX_W_0F3835_P_2,
2441 EVEX_W_0F3837_P_2,
2442 EVEX_W_0F3838_P_1,
2443 EVEX_W_0F3839_P_1,
2444 EVEX_W_0F383A_P_1,
2445 EVEX_W_0F3840_P_2,
2446 EVEX_W_0F3854_P_2,
2447 EVEX_W_0F3855_P_2,
2448 EVEX_W_0F3858_P_2,
2449 EVEX_W_0F3859_P_2,
2450 EVEX_W_0F385A_P_2,
2451 EVEX_W_0F385B_P_2,
2452 EVEX_W_0F3862_P_2,
2453 EVEX_W_0F3863_P_2,
2454 EVEX_W_0F3866_P_2,
2455 EVEX_W_0F3870_P_2,
2456 EVEX_W_0F3871_P_2,
2457 EVEX_W_0F3872_P_2,
2458 EVEX_W_0F3873_P_2,
2459 EVEX_W_0F3875_P_2,
2460 EVEX_W_0F3878_P_2,
2461 EVEX_W_0F3879_P_2,
2462 EVEX_W_0F387A_P_2,
2463 EVEX_W_0F387B_P_2,
2464 EVEX_W_0F387D_P_2,
2465 EVEX_W_0F3883_P_2,
2466 EVEX_W_0F388D_P_2,
2467 EVEX_W_0F3891_P_2,
2468 EVEX_W_0F3893_P_2,
2469 EVEX_W_0F38A1_P_2,
2470 EVEX_W_0F38A3_P_2,
2471 EVEX_W_0F38C7_R_1_P_2,
2472 EVEX_W_0F38C7_R_2_P_2,
2473 EVEX_W_0F38C7_R_5_P_2,
2474 EVEX_W_0F38C7_R_6_P_2,
2475
2476 EVEX_W_0F3A00_P_2,
2477 EVEX_W_0F3A01_P_2,
2478 EVEX_W_0F3A04_P_2,
2479 EVEX_W_0F3A05_P_2,
2480 EVEX_W_0F3A08_P_2,
2481 EVEX_W_0F3A09_P_2,
2482 EVEX_W_0F3A0A_P_2,
2483 EVEX_W_0F3A0B_P_2,
2484 EVEX_W_0F3A16_P_2,
2485 EVEX_W_0F3A18_P_2,
2486 EVEX_W_0F3A19_P_2,
2487 EVEX_W_0F3A1A_P_2,
2488 EVEX_W_0F3A1B_P_2,
2489 EVEX_W_0F3A1D_P_2,
2490 EVEX_W_0F3A21_P_2,
2491 EVEX_W_0F3A22_P_2,
2492 EVEX_W_0F3A23_P_2,
2493 EVEX_W_0F3A38_P_2,
2494 EVEX_W_0F3A39_P_2,
2495 EVEX_W_0F3A3A_P_2,
2496 EVEX_W_0F3A3B_P_2,
2497 EVEX_W_0F3A3E_P_2,
2498 EVEX_W_0F3A3F_P_2,
2499 EVEX_W_0F3A42_P_2,
2500 EVEX_W_0F3A43_P_2,
2501 EVEX_W_0F3A50_P_2,
2502 EVEX_W_0F3A51_P_2,
2503 EVEX_W_0F3A56_P_2,
2504 EVEX_W_0F3A57_P_2,
2505 EVEX_W_0F3A66_P_2,
2506 EVEX_W_0F3A67_P_2,
2507 EVEX_W_0F3A70_P_2,
2508 EVEX_W_0F3A71_P_2,
2509 EVEX_W_0F3A72_P_2,
2510 EVEX_W_0F3A73_P_2,
2511 EVEX_W_0F3ACE_P_2,
2512 EVEX_W_0F3ACF_P_2
2513 };
2514
2515 typedef void (*op_rtn) (int bytemode, int sizeflag);
2516
2517 struct dis386 {
2518 const char *name;
2519 struct
2520 {
2521 op_rtn rtn;
2522 int bytemode;
2523 } op[MAX_OPERANDS];
2524 unsigned int prefix_requirement;
2525 };
2526
2527 /* Upper case letters in the instruction names here are macros.
2528 'A' => print 'b' if no register operands or suffix_always is true
2529 'B' => print 'b' if suffix_always is true
2530 'C' => print 's' or 'l' ('w' or 'd' in Intel mode) depending on operand
2531 size prefix
2532 'D' => print 'w' if no register operands or 'w', 'l' or 'q', if
2533 suffix_always is true
2534 'E' => print 'e' if 32-bit form of jcxz
2535 'F' => print 'w' or 'l' depending on address size prefix (loop insns)
2536 'G' => print 'w' or 'l' depending on operand size prefix (i/o insns)
2537 'H' => print ",pt" or ",pn" branch hint
2538 'I' => honor following macro letter even in Intel mode (implemented only
2539 for some of the macro letters)
2540 'J' => print 'l'
2541 'K' => print 'd' or 'q' if rex prefix is present.
2542 'L' => print 'l' if suffix_always is true
2543 'M' => print 'r' if intel_mnemonic is false.
2544 'N' => print 'n' if instruction has no wait "prefix"
2545 'O' => print 'd' or 'o' (or 'q' in Intel mode)
2546 'P' => print 'w', 'l' or 'q' if instruction has an operand size prefix,
2547 or suffix_always is true. print 'q' if rex prefix is present.
2548 'Q' => print 'w', 'l' or 'q' for memory operand or suffix_always
2549 is true
2550 'R' => print 'w', 'l' or 'q' ('d' for 'l' and 'e' in Intel mode)
2551 'S' => print 'w', 'l' or 'q' if suffix_always is true
2552 'T' => print 'q' in 64bit mode if instruction has no operand size
2553 prefix and behave as 'P' otherwise
2554 'U' => print 'q' in 64bit mode if instruction has no operand size
2555 prefix and behave as 'Q' otherwise
2556 'V' => print 'q' in 64bit mode if instruction has no operand size
2557 prefix and behave as 'S' otherwise
2558 'W' => print 'b', 'w' or 'l' ('d' in Intel mode)
2559 'X' => print 's', 'd' depending on data16 prefix (for XMM)
2560 'Y' unused.
2561 'Z' => print 'q' in 64bit mode and behave as 'L' otherwise
2562 '!' => change condition from true to false or from false to true.
2563 '%' => add 1 upper case letter to the macro.
2564 '^' => print 'w' or 'l' depending on operand size prefix or
2565 suffix_always is true (lcall/ljmp).
2566 '@' => print 'q' for Intel64 ISA, 'w' or 'q' for AMD64 ISA depending
2567 on operand size prefix.
2568 '&' => print 'q' in 64bit mode for Intel64 ISA or if instruction
2569 has no operand size prefix for AMD64 ISA, behave as 'P'
2570 otherwise
2571
2572 2 upper case letter macros:
2573 "XY" => print 'x' or 'y' if suffix_always is true or no register
2574 operands and no broadcast.
2575 "XZ" => print 'x', 'y', or 'z' if suffix_always is true or no
2576 register operands and no broadcast.
2577 "XW" => print 's', 'd' depending on the VEX.W bit (for FMA)
2578 "LQ" => print 'l' ('d' in Intel mode) or 'q' for memory operand
2579 or suffix_always is true
2580 "LB" => print "abs" in 64bit mode and behave as 'B' otherwise
2581 "LS" => print "abs" in 64bit mode and behave as 'S' otherwise
2582 "LV" => print "abs" for 64bit operand and behave as 'S' otherwise
2583 "LW" => print 'd', 'q' depending on the VEX.W bit
2584 "LP" => print 'w' or 'l' ('d' in Intel mode) if instruction has
2585 an operand size prefix, or suffix_always is true. print
2586 'q' if rex prefix is present.
2587
2588 Many of the above letters print nothing in Intel mode. See "putop"
2589 for the details.
2590
2591 Braces '{' and '}', and vertical bars '|', indicate alternative
2592 mnemonic strings for AT&T and Intel. */
2593
2594 static const struct dis386 dis386[] = {
2595 /* 00 */
2596 { "addB", { Ebh1, Gb }, 0 },
2597 { "addS", { Evh1, Gv }, 0 },
2598 { "addB", { Gb, EbS }, 0 },
2599 { "addS", { Gv, EvS }, 0 },
2600 { "addB", { AL, Ib }, 0 },
2601 { "addS", { eAX, Iv }, 0 },
2602 { X86_64_TABLE (X86_64_06) },
2603 { X86_64_TABLE (X86_64_07) },
2604 /* 08 */
2605 { "orB", { Ebh1, Gb }, 0 },
2606 { "orS", { Evh1, Gv }, 0 },
2607 { "orB", { Gb, EbS }, 0 },
2608 { "orS", { Gv, EvS }, 0 },
2609 { "orB", { AL, Ib }, 0 },
2610 { "orS", { eAX, Iv }, 0 },
2611 { X86_64_TABLE (X86_64_0D) },
2612 { Bad_Opcode }, /* 0x0f extended opcode escape */
2613 /* 10 */
2614 { "adcB", { Ebh1, Gb }, 0 },
2615 { "adcS", { Evh1, Gv }, 0 },
2616 { "adcB", { Gb, EbS }, 0 },
2617 { "adcS", { Gv, EvS }, 0 },
2618 { "adcB", { AL, Ib }, 0 },
2619 { "adcS", { eAX, Iv }, 0 },
2620 { X86_64_TABLE (X86_64_16) },
2621 { X86_64_TABLE (X86_64_17) },
2622 /* 18 */
2623 { "sbbB", { Ebh1, Gb }, 0 },
2624 { "sbbS", { Evh1, Gv }, 0 },
2625 { "sbbB", { Gb, EbS }, 0 },
2626 { "sbbS", { Gv, EvS }, 0 },
2627 { "sbbB", { AL, Ib }, 0 },
2628 { "sbbS", { eAX, Iv }, 0 },
2629 { X86_64_TABLE (X86_64_1E) },
2630 { X86_64_TABLE (X86_64_1F) },
2631 /* 20 */
2632 { "andB", { Ebh1, Gb }, 0 },
2633 { "andS", { Evh1, Gv }, 0 },
2634 { "andB", { Gb, EbS }, 0 },
2635 { "andS", { Gv, EvS }, 0 },
2636 { "andB", { AL, Ib }, 0 },
2637 { "andS", { eAX, Iv }, 0 },
2638 { Bad_Opcode }, /* SEG ES prefix */
2639 { X86_64_TABLE (X86_64_27) },
2640 /* 28 */
2641 { "subB", { Ebh1, Gb }, 0 },
2642 { "subS", { Evh1, Gv }, 0 },
2643 { "subB", { Gb, EbS }, 0 },
2644 { "subS", { Gv, EvS }, 0 },
2645 { "subB", { AL, Ib }, 0 },
2646 { "subS", { eAX, Iv }, 0 },
2647 { Bad_Opcode }, /* SEG CS prefix */
2648 { X86_64_TABLE (X86_64_2F) },
2649 /* 30 */
2650 { "xorB", { Ebh1, Gb }, 0 },
2651 { "xorS", { Evh1, Gv }, 0 },
2652 { "xorB", { Gb, EbS }, 0 },
2653 { "xorS", { Gv, EvS }, 0 },
2654 { "xorB", { AL, Ib }, 0 },
2655 { "xorS", { eAX, Iv }, 0 },
2656 { Bad_Opcode }, /* SEG SS prefix */
2657 { X86_64_TABLE (X86_64_37) },
2658 /* 38 */
2659 { "cmpB", { Eb, Gb }, 0 },
2660 { "cmpS", { Ev, Gv }, 0 },
2661 { "cmpB", { Gb, EbS }, 0 },
2662 { "cmpS", { Gv, EvS }, 0 },
2663 { "cmpB", { AL, Ib }, 0 },
2664 { "cmpS", { eAX, Iv }, 0 },
2665 { Bad_Opcode }, /* SEG DS prefix */
2666 { X86_64_TABLE (X86_64_3F) },
2667 /* 40 */
2668 { "inc{S|}", { RMeAX }, 0 },
2669 { "inc{S|}", { RMeCX }, 0 },
2670 { "inc{S|}", { RMeDX }, 0 },
2671 { "inc{S|}", { RMeBX }, 0 },
2672 { "inc{S|}", { RMeSP }, 0 },
2673 { "inc{S|}", { RMeBP }, 0 },
2674 { "inc{S|}", { RMeSI }, 0 },
2675 { "inc{S|}", { RMeDI }, 0 },
2676 /* 48 */
2677 { "dec{S|}", { RMeAX }, 0 },
2678 { "dec{S|}", { RMeCX }, 0 },
2679 { "dec{S|}", { RMeDX }, 0 },
2680 { "dec{S|}", { RMeBX }, 0 },
2681 { "dec{S|}", { RMeSP }, 0 },
2682 { "dec{S|}", { RMeBP }, 0 },
2683 { "dec{S|}", { RMeSI }, 0 },
2684 { "dec{S|}", { RMeDI }, 0 },
2685 /* 50 */
2686 { "pushV", { RMrAX }, 0 },
2687 { "pushV", { RMrCX }, 0 },
2688 { "pushV", { RMrDX }, 0 },
2689 { "pushV", { RMrBX }, 0 },
2690 { "pushV", { RMrSP }, 0 },
2691 { "pushV", { RMrBP }, 0 },
2692 { "pushV", { RMrSI }, 0 },
2693 { "pushV", { RMrDI }, 0 },
2694 /* 58 */
2695 { "popV", { RMrAX }, 0 },
2696 { "popV", { RMrCX }, 0 },
2697 { "popV", { RMrDX }, 0 },
2698 { "popV", { RMrBX }, 0 },
2699 { "popV", { RMrSP }, 0 },
2700 { "popV", { RMrBP }, 0 },
2701 { "popV", { RMrSI }, 0 },
2702 { "popV", { RMrDI }, 0 },
2703 /* 60 */
2704 { X86_64_TABLE (X86_64_60) },
2705 { X86_64_TABLE (X86_64_61) },
2706 { X86_64_TABLE (X86_64_62) },
2707 { X86_64_TABLE (X86_64_63) },
2708 { Bad_Opcode }, /* seg fs */
2709 { Bad_Opcode }, /* seg gs */
2710 { Bad_Opcode }, /* op size prefix */
2711 { Bad_Opcode }, /* adr size prefix */
2712 /* 68 */
2713 { "pushT", { sIv }, 0 },
2714 { "imulS", { Gv, Ev, Iv }, 0 },
2715 { "pushT", { sIbT }, 0 },
2716 { "imulS", { Gv, Ev, sIb }, 0 },
2717 { "ins{b|}", { Ybr, indirDX }, 0 },
2718 { X86_64_TABLE (X86_64_6D) },
2719 { "outs{b|}", { indirDXr, Xb }, 0 },
2720 { X86_64_TABLE (X86_64_6F) },
2721 /* 70 */
2722 { "joH", { Jb, BND, cond_jump_flag }, 0 },
2723 { "jnoH", { Jb, BND, cond_jump_flag }, 0 },
2724 { "jbH", { Jb, BND, cond_jump_flag }, 0 },
2725 { "jaeH", { Jb, BND, cond_jump_flag }, 0 },
2726 { "jeH", { Jb, BND, cond_jump_flag }, 0 },
2727 { "jneH", { Jb, BND, cond_jump_flag }, 0 },
2728 { "jbeH", { Jb, BND, cond_jump_flag }, 0 },
2729 { "jaH", { Jb, BND, cond_jump_flag }, 0 },
2730 /* 78 */
2731 { "jsH", { Jb, BND, cond_jump_flag }, 0 },
2732 { "jnsH", { Jb, BND, cond_jump_flag }, 0 },
2733 { "jpH", { Jb, BND, cond_jump_flag }, 0 },
2734 { "jnpH", { Jb, BND, cond_jump_flag }, 0 },
2735 { "jlH", { Jb, BND, cond_jump_flag }, 0 },
2736 { "jgeH", { Jb, BND, cond_jump_flag }, 0 },
2737 { "jleH", { Jb, BND, cond_jump_flag }, 0 },
2738 { "jgH", { Jb, BND, cond_jump_flag }, 0 },
2739 /* 80 */
2740 { REG_TABLE (REG_80) },
2741 { REG_TABLE (REG_81) },
2742 { X86_64_TABLE (X86_64_82) },
2743 { REG_TABLE (REG_83) },
2744 { "testB", { Eb, Gb }, 0 },
2745 { "testS", { Ev, Gv }, 0 },
2746 { "xchgB", { Ebh2, Gb }, 0 },
2747 { "xchgS", { Evh2, Gv }, 0 },
2748 /* 88 */
2749 { "movB", { Ebh3, Gb }, 0 },
2750 { "movS", { Evh3, Gv }, 0 },
2751 { "movB", { Gb, EbS }, 0 },
2752 { "movS", { Gv, EvS }, 0 },
2753 { "movD", { Sv, Sw }, 0 },
2754 { MOD_TABLE (MOD_8D) },
2755 { "movD", { Sw, Sv }, 0 },
2756 { REG_TABLE (REG_8F) },
2757 /* 90 */
2758 { PREFIX_TABLE (PREFIX_90) },
2759 { "xchgS", { RMeCX, eAX }, 0 },
2760 { "xchgS", { RMeDX, eAX }, 0 },
2761 { "xchgS", { RMeBX, eAX }, 0 },
2762 { "xchgS", { RMeSP, eAX }, 0 },
2763 { "xchgS", { RMeBP, eAX }, 0 },
2764 { "xchgS", { RMeSI, eAX }, 0 },
2765 { "xchgS", { RMeDI, eAX }, 0 },
2766 /* 98 */
2767 { "cW{t|}R", { XX }, 0 },
2768 { "cR{t|}O", { XX }, 0 },
2769 { X86_64_TABLE (X86_64_9A) },
2770 { Bad_Opcode }, /* fwait */
2771 { "pushfT", { XX }, 0 },
2772 { "popfT", { XX }, 0 },
2773 { "sahf", { XX }, 0 },
2774 { "lahf", { XX }, 0 },
2775 /* a0 */
2776 { "mov%LB", { AL, Ob }, 0 },
2777 { "mov%LS", { eAX, Ov }, 0 },
2778 { "mov%LB", { Ob, AL }, 0 },
2779 { "mov%LS", { Ov, eAX }, 0 },
2780 { "movs{b|}", { Ybr, Xb }, 0 },
2781 { "movs{R|}", { Yvr, Xv }, 0 },
2782 { "cmps{b|}", { Xb, Yb }, 0 },
2783 { "cmps{R|}", { Xv, Yv }, 0 },
2784 /* a8 */
2785 { "testB", { AL, Ib }, 0 },
2786 { "testS", { eAX, Iv }, 0 },
2787 { "stosB", { Ybr, AL }, 0 },
2788 { "stosS", { Yvr, eAX }, 0 },
2789 { "lodsB", { ALr, Xb }, 0 },
2790 { "lodsS", { eAXr, Xv }, 0 },
2791 { "scasB", { AL, Yb }, 0 },
2792 { "scasS", { eAX, Yv }, 0 },
2793 /* b0 */
2794 { "movB", { RMAL, Ib }, 0 },
2795 { "movB", { RMCL, Ib }, 0 },
2796 { "movB", { RMDL, Ib }, 0 },
2797 { "movB", { RMBL, Ib }, 0 },
2798 { "movB", { RMAH, Ib }, 0 },
2799 { "movB", { RMCH, Ib }, 0 },
2800 { "movB", { RMDH, Ib }, 0 },
2801 { "movB", { RMBH, Ib }, 0 },
2802 /* b8 */
2803 { "mov%LV", { RMeAX, Iv64 }, 0 },
2804 { "mov%LV", { RMeCX, Iv64 }, 0 },
2805 { "mov%LV", { RMeDX, Iv64 }, 0 },
2806 { "mov%LV", { RMeBX, Iv64 }, 0 },
2807 { "mov%LV", { RMeSP, Iv64 }, 0 },
2808 { "mov%LV", { RMeBP, Iv64 }, 0 },
2809 { "mov%LV", { RMeSI, Iv64 }, 0 },
2810 { "mov%LV", { RMeDI, Iv64 }, 0 },
2811 /* c0 */
2812 { REG_TABLE (REG_C0) },
2813 { REG_TABLE (REG_C1) },
2814 { "retT", { Iw, BND }, 0 },
2815 { "retT", { BND }, 0 },
2816 { X86_64_TABLE (X86_64_C4) },
2817 { X86_64_TABLE (X86_64_C5) },
2818 { REG_TABLE (REG_C6) },
2819 { REG_TABLE (REG_C7) },
2820 /* c8 */
2821 { "enterT", { Iw, Ib }, 0 },
2822 { "leaveT", { XX }, 0 },
2823 { "Jret{|f}P", { Iw }, 0 },
2824 { "Jret{|f}P", { XX }, 0 },
2825 { "int3", { XX }, 0 },
2826 { "int", { Ib }, 0 },
2827 { X86_64_TABLE (X86_64_CE) },
2828 { "iret%LP", { XX }, 0 },
2829 /* d0 */
2830 { REG_TABLE (REG_D0) },
2831 { REG_TABLE (REG_D1) },
2832 { REG_TABLE (REG_D2) },
2833 { REG_TABLE (REG_D3) },
2834 { X86_64_TABLE (X86_64_D4) },
2835 { X86_64_TABLE (X86_64_D5) },
2836 { Bad_Opcode },
2837 { "xlat", { DSBX }, 0 },
2838 /* d8 */
2839 { FLOAT },
2840 { FLOAT },
2841 { FLOAT },
2842 { FLOAT },
2843 { FLOAT },
2844 { FLOAT },
2845 { FLOAT },
2846 { FLOAT },
2847 /* e0 */
2848 { "loopneFH", { Jb, XX, loop_jcxz_flag }, 0 },
2849 { "loopeFH", { Jb, XX, loop_jcxz_flag }, 0 },
2850 { "loopFH", { Jb, XX, loop_jcxz_flag }, 0 },
2851 { "jEcxzH", { Jb, XX, loop_jcxz_flag }, 0 },
2852 { "inB", { AL, Ib }, 0 },
2853 { "inG", { zAX, Ib }, 0 },
2854 { "outB", { Ib, AL }, 0 },
2855 { "outG", { Ib, zAX }, 0 },
2856 /* e8 */
2857 { X86_64_TABLE (X86_64_E8) },
2858 { X86_64_TABLE (X86_64_E9) },
2859 { X86_64_TABLE (X86_64_EA) },
2860 { "jmp", { Jb, BND }, 0 },
2861 { "inB", { AL, indirDX }, 0 },
2862 { "inG", { zAX, indirDX }, 0 },
2863 { "outB", { indirDX, AL }, 0 },
2864 { "outG", { indirDX, zAX }, 0 },
2865 /* f0 */
2866 { Bad_Opcode }, /* lock prefix */
2867 { "icebp", { XX }, 0 },
2868 { Bad_Opcode }, /* repne */
2869 { Bad_Opcode }, /* repz */
2870 { "hlt", { XX }, 0 },
2871 { "cmc", { XX }, 0 },
2872 { REG_TABLE (REG_F6) },
2873 { REG_TABLE (REG_F7) },
2874 /* f8 */
2875 { "clc", { XX }, 0 },
2876 { "stc", { XX }, 0 },
2877 { "cli", { XX }, 0 },
2878 { "sti", { XX }, 0 },
2879 { "cld", { XX }, 0 },
2880 { "std", { XX }, 0 },
2881 { REG_TABLE (REG_FE) },
2882 { REG_TABLE (REG_FF) },
2883 };
2884
2885 static const struct dis386 dis386_twobyte[] = {
2886 /* 00 */
2887 { REG_TABLE (REG_0F00 ) },
2888 { REG_TABLE (REG_0F01 ) },
2889 { "larS", { Gv, Ew }, 0 },
2890 { "lslS", { Gv, Ew }, 0 },
2891 { Bad_Opcode },
2892 { "syscall", { XX }, 0 },
2893 { "clts", { XX }, 0 },
2894 { "sysret%LP", { XX }, 0 },
2895 /* 08 */
2896 { "invd", { XX }, 0 },
2897 { PREFIX_TABLE (PREFIX_0F09) },
2898 { Bad_Opcode },
2899 { "ud2", { XX }, 0 },
2900 { Bad_Opcode },
2901 { REG_TABLE (REG_0F0D) },
2902 { "femms", { XX }, 0 },
2903 { "", { MX, EM, OPSUF }, 0 }, /* See OP_3DNowSuffix. */
2904 /* 10 */
2905 { PREFIX_TABLE (PREFIX_0F10) },
2906 { PREFIX_TABLE (PREFIX_0F11) },
2907 { PREFIX_TABLE (PREFIX_0F12) },
2908 { MOD_TABLE (MOD_0F13) },
2909 { "unpcklpX", { XM, EXx }, PREFIX_OPCODE },
2910 { "unpckhpX", { XM, EXx }, PREFIX_OPCODE },
2911 { PREFIX_TABLE (PREFIX_0F16) },
2912 { MOD_TABLE (MOD_0F17) },
2913 /* 18 */
2914 { REG_TABLE (REG_0F18) },
2915 { "nopQ", { Ev }, 0 },
2916 { PREFIX_TABLE (PREFIX_0F1A) },
2917 { PREFIX_TABLE (PREFIX_0F1B) },
2918 { PREFIX_TABLE (PREFIX_0F1C) },
2919 { "nopQ", { Ev }, 0 },
2920 { PREFIX_TABLE (PREFIX_0F1E) },
2921 { "nopQ", { Ev }, 0 },
2922 /* 20 */
2923 { "movZ", { Rm, Cm }, 0 },
2924 { "movZ", { Rm, Dm }, 0 },
2925 { "movZ", { Cm, Rm }, 0 },
2926 { "movZ", { Dm, Rm }, 0 },
2927 { MOD_TABLE (MOD_0F24) },
2928 { Bad_Opcode },
2929 { MOD_TABLE (MOD_0F26) },
2930 { Bad_Opcode },
2931 /* 28 */
2932 { "movapX", { XM, EXx }, PREFIX_OPCODE },
2933 { "movapX", { EXxS, XM }, PREFIX_OPCODE },
2934 { PREFIX_TABLE (PREFIX_0F2A) },
2935 { PREFIX_TABLE (PREFIX_0F2B) },
2936 { PREFIX_TABLE (PREFIX_0F2C) },
2937 { PREFIX_TABLE (PREFIX_0F2D) },
2938 { PREFIX_TABLE (PREFIX_0F2E) },
2939 { PREFIX_TABLE (PREFIX_0F2F) },
2940 /* 30 */
2941 { "wrmsr", { XX }, 0 },
2942 { "rdtsc", { XX }, 0 },
2943 { "rdmsr", { XX }, 0 },
2944 { "rdpmc", { XX }, 0 },
2945 { "sysenter", { XX }, 0 },
2946 { "sysexit", { XX }, 0 },
2947 { Bad_Opcode },
2948 { "getsec", { XX }, 0 },
2949 /* 38 */
2950 { THREE_BYTE_TABLE_PREFIX (THREE_BYTE_0F38, PREFIX_OPCODE) },
2951 { Bad_Opcode },
2952 { THREE_BYTE_TABLE_PREFIX (THREE_BYTE_0F3A, PREFIX_OPCODE) },
2953 { Bad_Opcode },
2954 { Bad_Opcode },
2955 { Bad_Opcode },
2956 { Bad_Opcode },
2957 { Bad_Opcode },
2958 /* 40 */
2959 { "cmovoS", { Gv, Ev }, 0 },
2960 { "cmovnoS", { Gv, Ev }, 0 },
2961 { "cmovbS", { Gv, Ev }, 0 },
2962 { "cmovaeS", { Gv, Ev }, 0 },
2963 { "cmoveS", { Gv, Ev }, 0 },
2964 { "cmovneS", { Gv, Ev }, 0 },
2965 { "cmovbeS", { Gv, Ev }, 0 },
2966 { "cmovaS", { Gv, Ev }, 0 },
2967 /* 48 */
2968 { "cmovsS", { Gv, Ev }, 0 },
2969 { "cmovnsS", { Gv, Ev }, 0 },
2970 { "cmovpS", { Gv, Ev }, 0 },
2971 { "cmovnpS", { Gv, Ev }, 0 },
2972 { "cmovlS", { Gv, Ev }, 0 },
2973 { "cmovgeS", { Gv, Ev }, 0 },
2974 { "cmovleS", { Gv, Ev }, 0 },
2975 { "cmovgS", { Gv, Ev }, 0 },
2976 /* 50 */
2977 { MOD_TABLE (MOD_0F51) },
2978 { PREFIX_TABLE (PREFIX_0F51) },
2979 { PREFIX_TABLE (PREFIX_0F52) },
2980 { PREFIX_TABLE (PREFIX_0F53) },
2981 { "andpX", { XM, EXx }, PREFIX_OPCODE },
2982 { "andnpX", { XM, EXx }, PREFIX_OPCODE },
2983 { "orpX", { XM, EXx }, PREFIX_OPCODE },
2984 { "xorpX", { XM, EXx }, PREFIX_OPCODE },
2985 /* 58 */
2986 { PREFIX_TABLE (PREFIX_0F58) },
2987 { PREFIX_TABLE (PREFIX_0F59) },
2988 { PREFIX_TABLE (PREFIX_0F5A) },
2989 { PREFIX_TABLE (PREFIX_0F5B) },
2990 { PREFIX_TABLE (PREFIX_0F5C) },
2991 { PREFIX_TABLE (PREFIX_0F5D) },
2992 { PREFIX_TABLE (PREFIX_0F5E) },
2993 { PREFIX_TABLE (PREFIX_0F5F) },
2994 /* 60 */
2995 { PREFIX_TABLE (PREFIX_0F60) },
2996 { PREFIX_TABLE (PREFIX_0F61) },
2997 { PREFIX_TABLE (PREFIX_0F62) },
2998 { "packsswb", { MX, EM }, PREFIX_OPCODE },
2999 { "pcmpgtb", { MX, EM }, PREFIX_OPCODE },
3000 { "pcmpgtw", { MX, EM }, PREFIX_OPCODE },
3001 { "pcmpgtd", { MX, EM }, PREFIX_OPCODE },
3002 { "packuswb", { MX, EM }, PREFIX_OPCODE },
3003 /* 68 */
3004 { "punpckhbw", { MX, EM }, PREFIX_OPCODE },
3005 { "punpckhwd", { MX, EM }, PREFIX_OPCODE },
3006 { "punpckhdq", { MX, EM }, PREFIX_OPCODE },
3007 { "packssdw", { MX, EM }, PREFIX_OPCODE },
3008 { PREFIX_TABLE (PREFIX_0F6C) },
3009 { PREFIX_TABLE (PREFIX_0F6D) },
3010 { "movK", { MX, Edq }, PREFIX_OPCODE },
3011 { PREFIX_TABLE (PREFIX_0F6F) },
3012 /* 70 */
3013 { PREFIX_TABLE (PREFIX_0F70) },
3014 { REG_TABLE (REG_0F71) },
3015 { REG_TABLE (REG_0F72) },
3016 { REG_TABLE (REG_0F73) },
3017 { "pcmpeqb", { MX, EM }, PREFIX_OPCODE },
3018 { "pcmpeqw", { MX, EM }, PREFIX_OPCODE },
3019 { "pcmpeqd", { MX, EM }, PREFIX_OPCODE },
3020 { "emms", { XX }, PREFIX_OPCODE },
3021 /* 78 */
3022 { PREFIX_TABLE (PREFIX_0F78) },
3023 { PREFIX_TABLE (PREFIX_0F79) },
3024 { Bad_Opcode },
3025 { Bad_Opcode },
3026 { PREFIX_TABLE (PREFIX_0F7C) },
3027 { PREFIX_TABLE (PREFIX_0F7D) },
3028 { PREFIX_TABLE (PREFIX_0F7E) },
3029 { PREFIX_TABLE (PREFIX_0F7F) },
3030 /* 80 */
3031 { "joH", { Jv, BND, cond_jump_flag }, 0 },
3032 { "jnoH", { Jv, BND, cond_jump_flag }, 0 },
3033 { "jbH", { Jv, BND, cond_jump_flag }, 0 },
3034 { "jaeH", { Jv, BND, cond_jump_flag }, 0 },
3035 { "jeH", { Jv, BND, cond_jump_flag }, 0 },
3036 { "jneH", { Jv, BND, cond_jump_flag }, 0 },
3037 { "jbeH", { Jv, BND, cond_jump_flag }, 0 },
3038 { "jaH", { Jv, BND, cond_jump_flag }, 0 },
3039 /* 88 */
3040 { "jsH", { Jv, BND, cond_jump_flag }, 0 },
3041 { "jnsH", { Jv, BND, cond_jump_flag }, 0 },
3042 { "jpH", { Jv, BND, cond_jump_flag }, 0 },
3043 { "jnpH", { Jv, BND, cond_jump_flag }, 0 },
3044 { "jlH", { Jv, BND, cond_jump_flag }, 0 },
3045 { "jgeH", { Jv, BND, cond_jump_flag }, 0 },
3046 { "jleH", { Jv, BND, cond_jump_flag }, 0 },
3047 { "jgH", { Jv, BND, cond_jump_flag }, 0 },
3048 /* 90 */
3049 { "seto", { Eb }, 0 },
3050 { "setno", { Eb }, 0 },
3051 { "setb", { Eb }, 0 },
3052 { "setae", { Eb }, 0 },
3053 { "sete", { Eb }, 0 },
3054 { "setne", { Eb }, 0 },
3055 { "setbe", { Eb }, 0 },
3056 { "seta", { Eb }, 0 },
3057 /* 98 */
3058 { "sets", { Eb }, 0 },
3059 { "setns", { Eb }, 0 },
3060 { "setp", { Eb }, 0 },
3061 { "setnp", { Eb }, 0 },
3062 { "setl", { Eb }, 0 },
3063 { "setge", { Eb }, 0 },
3064 { "setle", { Eb }, 0 },
3065 { "setg", { Eb }, 0 },
3066 /* a0 */
3067 { "pushT", { fs }, 0 },
3068 { "popT", { fs }, 0 },
3069 { "cpuid", { XX }, 0 },
3070 { "btS", { Ev, Gv }, 0 },
3071 { "shldS", { Ev, Gv, Ib }, 0 },
3072 { "shldS", { Ev, Gv, CL }, 0 },
3073 { REG_TABLE (REG_0FA6) },
3074 { REG_TABLE (REG_0FA7) },
3075 /* a8 */
3076 { "pushT", { gs }, 0 },
3077 { "popT", { gs }, 0 },
3078 { "rsm", { XX }, 0 },
3079 { "btsS", { Evh1, Gv }, 0 },
3080 { "shrdS", { Ev, Gv, Ib }, 0 },
3081 { "shrdS", { Ev, Gv, CL }, 0 },
3082 { REG_TABLE (REG_0FAE) },
3083 { "imulS", { Gv, Ev }, 0 },
3084 /* b0 */
3085 { "cmpxchgB", { Ebh1, Gb }, 0 },
3086 { "cmpxchgS", { Evh1, Gv }, 0 },
3087 { MOD_TABLE (MOD_0FB2) },
3088 { "btrS", { Evh1, Gv }, 0 },
3089 { MOD_TABLE (MOD_0FB4) },
3090 { MOD_TABLE (MOD_0FB5) },
3091 { "movz{bR|x}", { Gv, Eb }, 0 },
3092 { "movz{wR|x}", { Gv, Ew }, 0 }, /* yes, there really is movzww ! */
3093 /* b8 */
3094 { PREFIX_TABLE (PREFIX_0FB8) },
3095 { "ud1S", { Gv, Ev }, 0 },
3096 { REG_TABLE (REG_0FBA) },
3097 { "btcS", { Evh1, Gv }, 0 },
3098 { PREFIX_TABLE (PREFIX_0FBC) },
3099 { PREFIX_TABLE (PREFIX_0FBD) },
3100 { "movs{bR|x}", { Gv, Eb }, 0 },
3101 { "movs{wR|x}", { Gv, Ew }, 0 }, /* yes, there really is movsww ! */
3102 /* c0 */
3103 { "xaddB", { Ebh1, Gb }, 0 },
3104 { "xaddS", { Evh1, Gv }, 0 },
3105 { PREFIX_TABLE (PREFIX_0FC2) },
3106 { MOD_TABLE (MOD_0FC3) },
3107 { "pinsrw", { MX, Edqw, Ib }, PREFIX_OPCODE },
3108 { "pextrw", { Gdq, MS, Ib }, PREFIX_OPCODE },
3109 { "shufpX", { XM, EXx, Ib }, PREFIX_OPCODE },
3110 { REG_TABLE (REG_0FC7) },
3111 /* c8 */
3112 { "bswap", { RMeAX }, 0 },
3113 { "bswap", { RMeCX }, 0 },
3114 { "bswap", { RMeDX }, 0 },
3115 { "bswap", { RMeBX }, 0 },
3116 { "bswap", { RMeSP }, 0 },
3117 { "bswap", { RMeBP }, 0 },
3118 { "bswap", { RMeSI }, 0 },
3119 { "bswap", { RMeDI }, 0 },
3120 /* d0 */
3121 { PREFIX_TABLE (PREFIX_0FD0) },
3122 { "psrlw", { MX, EM }, PREFIX_OPCODE },
3123 { "psrld", { MX, EM }, PREFIX_OPCODE },
3124 { "psrlq", { MX, EM }, PREFIX_OPCODE },
3125 { "paddq", { MX, EM }, PREFIX_OPCODE },
3126 { "pmullw", { MX, EM }, PREFIX_OPCODE },
3127 { PREFIX_TABLE (PREFIX_0FD6) },
3128 { MOD_TABLE (MOD_0FD7) },
3129 /* d8 */
3130 { "psubusb", { MX, EM }, PREFIX_OPCODE },
3131 { "psubusw", { MX, EM }, PREFIX_OPCODE },
3132 { "pminub", { MX, EM }, PREFIX_OPCODE },
3133 { "pand", { MX, EM }, PREFIX_OPCODE },
3134 { "paddusb", { MX, EM }, PREFIX_OPCODE },
3135 { "paddusw", { MX, EM }, PREFIX_OPCODE },
3136 { "pmaxub", { MX, EM }, PREFIX_OPCODE },
3137 { "pandn", { MX, EM }, PREFIX_OPCODE },
3138 /* e0 */
3139 { "pavgb", { MX, EM }, PREFIX_OPCODE },
3140 { "psraw", { MX, EM }, PREFIX_OPCODE },
3141 { "psrad", { MX, EM }, PREFIX_OPCODE },
3142 { "pavgw", { MX, EM }, PREFIX_OPCODE },
3143 { "pmulhuw", { MX, EM }, PREFIX_OPCODE },
3144 { "pmulhw", { MX, EM }, PREFIX_OPCODE },
3145 { PREFIX_TABLE (PREFIX_0FE6) },
3146 { PREFIX_TABLE (PREFIX_0FE7) },
3147 /* e8 */
3148 { "psubsb", { MX, EM }, PREFIX_OPCODE },
3149 { "psubsw", { MX, EM }, PREFIX_OPCODE },
3150 { "pminsw", { MX, EM }, PREFIX_OPCODE },
3151 { "por", { MX, EM }, PREFIX_OPCODE },
3152 { "paddsb", { MX, EM }, PREFIX_OPCODE },
3153 { "paddsw", { MX, EM }, PREFIX_OPCODE },
3154 { "pmaxsw", { MX, EM }, PREFIX_OPCODE },
3155 { "pxor", { MX, EM }, PREFIX_OPCODE },
3156 /* f0 */
3157 { PREFIX_TABLE (PREFIX_0FF0) },
3158 { "psllw", { MX, EM }, PREFIX_OPCODE },
3159 { "pslld", { MX, EM }, PREFIX_OPCODE },
3160 { "psllq", { MX, EM }, PREFIX_OPCODE },
3161 { "pmuludq", { MX, EM }, PREFIX_OPCODE },
3162 { "pmaddwd", { MX, EM }, PREFIX_OPCODE },
3163 { "psadbw", { MX, EM }, PREFIX_OPCODE },
3164 { PREFIX_TABLE (PREFIX_0FF7) },
3165 /* f8 */
3166 { "psubb", { MX, EM }, PREFIX_OPCODE },
3167 { "psubw", { MX, EM }, PREFIX_OPCODE },
3168 { "psubd", { MX, EM }, PREFIX_OPCODE },
3169 { "psubq", { MX, EM }, PREFIX_OPCODE },
3170 { "paddb", { MX, EM }, PREFIX_OPCODE },
3171 { "paddw", { MX, EM }, PREFIX_OPCODE },
3172 { "paddd", { MX, EM }, PREFIX_OPCODE },
3173 { "ud0S", { Gv, Ev }, 0 },
3174 };
3175
3176 static const unsigned char onebyte_has_modrm[256] = {
3177 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
3178 /* ------------------------------- */
3179 /* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 00 */
3180 /* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 10 */
3181 /* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 20 */
3182 /* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 30 */
3183 /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40 */
3184 /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50 */
3185 /* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, /* 60 */
3186 /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70 */
3187 /* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 80 */
3188 /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 90 */
3189 /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* a0 */
3190 /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* b0 */
3191 /* c0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* c0 */
3192 /* d0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* d0 */
3193 /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* e0 */
3194 /* f0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1 /* f0 */
3195 /* ------------------------------- */
3196 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
3197 };
3198
3199 static const unsigned char twobyte_has_modrm[256] = {
3200 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
3201 /* ------------------------------- */
3202 /* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */
3203 /* 10 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1f */
3204 /* 20 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 2f */
3205 /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
3206 /* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */
3207 /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */
3208 /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */
3209 /* 70 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 7f */
3210 /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
3211 /* 90 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9f */
3212 /* a0 */ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1, /* af */
3213 /* b0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* bf */
3214 /* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */
3215 /* d0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
3216 /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
3217 /* f0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 /* ff */
3218 /* ------------------------------- */
3219 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
3220 };
3221
3222 static char obuf[100];
3223 static char *obufp;
3224 static char *mnemonicendp;
3225 static char scratchbuf[100];
3226 static unsigned char *start_codep;
3227 static unsigned char *insn_codep;
3228 static unsigned char *codep;
3229 static unsigned char *end_codep;
3230 static int last_lock_prefix;
3231 static int last_repz_prefix;
3232 static int last_repnz_prefix;
3233 static int last_data_prefix;
3234 static int last_addr_prefix;
3235 static int last_rex_prefix;
3236 static int last_seg_prefix;
3237 static int fwait_prefix;
3238 /* The active segment register prefix. */
3239 static int active_seg_prefix;
3240 #define MAX_CODE_LENGTH 15
3241 /* We can up to 14 prefixes since the maximum instruction length is
3242 15bytes. */
3243 static int all_prefixes[MAX_CODE_LENGTH - 1];
3244 static disassemble_info *the_info;
3245 static struct
3246 {
3247 int mod;
3248 int reg;
3249 int rm;
3250 }
3251 modrm;
3252 static unsigned char need_modrm;
3253 static struct
3254 {
3255 int scale;
3256 int index;
3257 int base;
3258 }
3259 sib;
3260 static struct
3261 {
3262 int register_specifier;
3263 int length;
3264 int prefix;
3265 int w;
3266 int evex;
3267 int r;
3268 int v;
3269 int mask_register_specifier;
3270 int zeroing;
3271 int ll;
3272 int b;
3273 }
3274 vex;
3275 static unsigned char need_vex;
3276 static unsigned char need_vex_reg;
3277 static unsigned char vex_w_done;
3278
3279 struct op
3280 {
3281 const char *name;
3282 unsigned int len;
3283 };
3284
3285 /* If we are accessing mod/rm/reg without need_modrm set, then the
3286 values are stale. Hitting this abort likely indicates that you
3287 need to update onebyte_has_modrm or twobyte_has_modrm. */
3288 #define MODRM_CHECK if (!need_modrm) abort ()
3289
3290 static const char **names64;
3291 static const char **names32;
3292 static const char **names16;
3293 static const char **names8;
3294 static const char **names8rex;
3295 static const char **names_seg;
3296 static const char *index64;
3297 static const char *index32;
3298 static const char **index16;
3299 static const char **names_bnd;
3300
3301 static const char *intel_names64[] = {
3302 "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
3303 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
3304 };
3305 static const char *intel_names32[] = {
3306 "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
3307 "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"
3308 };
3309 static const char *intel_names16[] = {
3310 "ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
3311 "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
3312 };
3313 static const char *intel_names8[] = {
3314 "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh",
3315 };
3316 static const char *intel_names8rex[] = {
3317 "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
3318 "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"
3319 };
3320 static const char *intel_names_seg[] = {
3321 "es", "cs", "ss", "ds", "fs", "gs", "?", "?",
3322 };
3323 static const char *intel_index64 = "riz";
3324 static const char *intel_index32 = "eiz";
3325 static const char *intel_index16[] = {
3326 "bx+si", "bx+di", "bp+si", "bp+di", "si", "di", "bp", "bx"
3327 };
3328
3329 static const char *att_names64[] = {
3330 "%rax", "%rcx", "%rdx", "%rbx", "%rsp", "%rbp", "%rsi", "%rdi",
3331 "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
3332 };
3333 static const char *att_names32[] = {
3334 "%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi",
3335 "%r8d", "%r9d", "%r10d", "%r11d", "%r12d", "%r13d", "%r14d", "%r15d"
3336 };
3337 static const char *att_names16[] = {
3338 "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di",
3339 "%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w"
3340 };
3341 static const char *att_names8[] = {
3342 "%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh",
3343 };
3344 static const char *att_names8rex[] = {
3345 "%al", "%cl", "%dl", "%bl", "%spl", "%bpl", "%sil", "%dil",
3346 "%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b"
3347 };
3348 static const char *att_names_seg[] = {
3349 "%es", "%cs", "%ss", "%ds", "%fs", "%gs", "%?", "%?",
3350 };
3351 static const char *att_index64 = "%riz";
3352 static const char *att_index32 = "%eiz";
3353 static const char *att_index16[] = {
3354 "%bx,%si", "%bx,%di", "%bp,%si", "%bp,%di", "%si", "%di", "%bp", "%bx"
3355 };
3356
3357 static const char **names_mm;
3358 static const char *intel_names_mm[] = {
3359 "mm0", "mm1", "mm2", "mm3",
3360 "mm4", "mm5", "mm6", "mm7"
3361 };
3362 static const char *att_names_mm[] = {
3363 "%mm0", "%mm1", "%mm2", "%mm3",
3364 "%mm4", "%mm5", "%mm6", "%mm7"
3365 };
3366
3367 static const char *intel_names_bnd[] = {
3368 "bnd0", "bnd1", "bnd2", "bnd3"
3369 };
3370
3371 static const char *att_names_bnd[] = {
3372 "%bnd0", "%bnd1", "%bnd2", "%bnd3"
3373 };
3374
3375 static const char **names_xmm;
3376 static const char *intel_names_xmm[] = {
3377 "xmm0", "xmm1", "xmm2", "xmm3",
3378 "xmm4", "xmm5", "xmm6", "xmm7",
3379 "xmm8", "xmm9", "xmm10", "xmm11",
3380 "xmm12", "xmm13", "xmm14", "xmm15",
3381 "xmm16", "xmm17", "xmm18", "xmm19",
3382 "xmm20", "xmm21", "xmm22", "xmm23",
3383 "xmm24", "xmm25", "xmm26", "xmm27",
3384 "xmm28", "xmm29", "xmm30", "xmm31"
3385 };
3386 static const char *att_names_xmm[] = {
3387 "%xmm0", "%xmm1", "%xmm2", "%xmm3",
3388 "%xmm4", "%xmm5", "%xmm6", "%xmm7",
3389 "%xmm8", "%xmm9", "%xmm10", "%xmm11",
3390 "%xmm12", "%xmm13", "%xmm14", "%xmm15",
3391 "%xmm16", "%xmm17", "%xmm18", "%xmm19",
3392 "%xmm20", "%xmm21", "%xmm22", "%xmm23",
3393 "%xmm24", "%xmm25", "%xmm26", "%xmm27",
3394 "%xmm28", "%xmm29", "%xmm30", "%xmm31"
3395 };
3396
3397 static const char **names_ymm;
3398 static const char *intel_names_ymm[] = {
3399 "ymm0", "ymm1", "ymm2", "ymm3",
3400 "ymm4", "ymm5", "ymm6", "ymm7",
3401 "ymm8", "ymm9", "ymm10", "ymm11",
3402 "ymm12", "ymm13", "ymm14", "ymm15",
3403 "ymm16", "ymm17", "ymm18", "ymm19",
3404 "ymm20", "ymm21", "ymm22", "ymm23",
3405 "ymm24", "ymm25", "ymm26", "ymm27",
3406 "ymm28", "ymm29", "ymm30", "ymm31"
3407 };
3408 static const char *att_names_ymm[] = {
3409 "%ymm0", "%ymm1", "%ymm2", "%ymm3",
3410 "%ymm4", "%ymm5", "%ymm6", "%ymm7",
3411 "%ymm8", "%ymm9", "%ymm10", "%ymm11",
3412 "%ymm12", "%ymm13", "%ymm14", "%ymm15",
3413 "%ymm16", "%ymm17", "%ymm18", "%ymm19",
3414 "%ymm20", "%ymm21", "%ymm22", "%ymm23",
3415 "%ymm24", "%ymm25", "%ymm26", "%ymm27",
3416 "%ymm28", "%ymm29", "%ymm30", "%ymm31"
3417 };
3418
3419 static const char **names_zmm;
3420 static const char *intel_names_zmm[] = {
3421 "zmm0", "zmm1", "zmm2", "zmm3",
3422 "zmm4", "zmm5", "zmm6", "zmm7",
3423 "zmm8", "zmm9", "zmm10", "zmm11",
3424 "zmm12", "zmm13", "zmm14", "zmm15",
3425 "zmm16", "zmm17", "zmm18", "zmm19",
3426 "zmm20", "zmm21", "zmm22", "zmm23",
3427 "zmm24", "zmm25", "zmm26", "zmm27",
3428 "zmm28", "zmm29", "zmm30", "zmm31"
3429 };
3430 static const char *att_names_zmm[] = {
3431 "%zmm0", "%zmm1", "%zmm2", "%zmm3",
3432 "%zmm4", "%zmm5", "%zmm6", "%zmm7",
3433 "%zmm8", "%zmm9", "%zmm10", "%zmm11",
3434 "%zmm12", "%zmm13", "%zmm14", "%zmm15",
3435 "%zmm16", "%zmm17", "%zmm18", "%zmm19",
3436 "%zmm20", "%zmm21", "%zmm22", "%zmm23",
3437 "%zmm24", "%zmm25", "%zmm26", "%zmm27",
3438 "%zmm28", "%zmm29", "%zmm30", "%zmm31"
3439 };
3440
3441 static const char **names_mask;
3442 static const char *intel_names_mask[] = {
3443 "k0", "k1", "k2", "k3", "k4", "k5", "k6", "k7"
3444 };
3445 static const char *att_names_mask[] = {
3446 "%k0", "%k1", "%k2", "%k3", "%k4", "%k5", "%k6", "%k7"
3447 };
3448
3449 static const char *names_rounding[] =
3450 {
3451 "{rn-sae}",
3452 "{rd-sae}",
3453 "{ru-sae}",
3454 "{rz-sae}"
3455 };
3456
3457 static const struct dis386 reg_table[][8] = {
3458 /* REG_80 */
3459 {
3460 { "addA", { Ebh1, Ib }, 0 },
3461 { "orA", { Ebh1, Ib }, 0 },
3462 { "adcA", { Ebh1, Ib }, 0 },
3463 { "sbbA", { Ebh1, Ib }, 0 },
3464 { "andA", { Ebh1, Ib }, 0 },
3465 { "subA", { Ebh1, Ib }, 0 },
3466 { "xorA", { Ebh1, Ib }, 0 },
3467 { "cmpA", { Eb, Ib }, 0 },
3468 },
3469 /* REG_81 */
3470 {
3471 { "addQ", { Evh1, Iv }, 0 },
3472 { "orQ", { Evh1, Iv }, 0 },
3473 { "adcQ", { Evh1, Iv }, 0 },
3474 { "sbbQ", { Evh1, Iv }, 0 },
3475 { "andQ", { Evh1, Iv }, 0 },
3476 { "subQ", { Evh1, Iv }, 0 },
3477 { "xorQ", { Evh1, Iv }, 0 },
3478 { "cmpQ", { Ev, Iv }, 0 },
3479 },
3480 /* REG_83 */
3481 {
3482 { "addQ", { Evh1, sIb }, 0 },
3483 { "orQ", { Evh1, sIb }, 0 },
3484 { "adcQ", { Evh1, sIb }, 0 },
3485 { "sbbQ", { Evh1, sIb }, 0 },
3486 { "andQ", { Evh1, sIb }, 0 },
3487 { "subQ", { Evh1, sIb }, 0 },
3488 { "xorQ", { Evh1, sIb }, 0 },
3489 { "cmpQ", { Ev, sIb }, 0 },
3490 },
3491 /* REG_8F */
3492 {
3493 { "popU", { stackEv }, 0 },
3494 { XOP_8F_TABLE (XOP_09) },
3495 { Bad_Opcode },
3496 { Bad_Opcode },
3497 { Bad_Opcode },
3498 { XOP_8F_TABLE (XOP_09) },
3499 },
3500 /* REG_C0 */
3501 {
3502 { "rolA", { Eb, Ib }, 0 },
3503 { "rorA", { Eb, Ib }, 0 },
3504 { "rclA", { Eb, Ib }, 0 },
3505 { "rcrA", { Eb, Ib }, 0 },
3506 { "shlA", { Eb, Ib }, 0 },
3507 { "shrA", { Eb, Ib }, 0 },
3508 { "shlA", { Eb, Ib }, 0 },
3509 { "sarA", { Eb, Ib }, 0 },
3510 },
3511 /* REG_C1 */
3512 {
3513 { "rolQ", { Ev, Ib }, 0 },
3514 { "rorQ", { Ev, Ib }, 0 },
3515 { "rclQ", { Ev, Ib }, 0 },
3516 { "rcrQ", { Ev, Ib }, 0 },
3517 { "shlQ", { Ev, Ib }, 0 },
3518 { "shrQ", { Ev, Ib }, 0 },
3519 { "shlQ", { Ev, Ib }, 0 },
3520 { "sarQ", { Ev, Ib }, 0 },
3521 },
3522 /* REG_C6 */
3523 {
3524 { "movA", { Ebh3, Ib }, 0 },
3525 { Bad_Opcode },
3526 { Bad_Opcode },
3527 { Bad_Opcode },
3528 { Bad_Opcode },
3529 { Bad_Opcode },
3530 { Bad_Opcode },
3531 { MOD_TABLE (MOD_C6_REG_7) },
3532 },
3533 /* REG_C7 */
3534 {
3535 { "movQ", { Evh3, Iv }, 0 },
3536 { Bad_Opcode },
3537 { Bad_Opcode },
3538 { Bad_Opcode },
3539 { Bad_Opcode },
3540 { Bad_Opcode },
3541 { Bad_Opcode },
3542 { MOD_TABLE (MOD_C7_REG_7) },
3543 },
3544 /* REG_D0 */
3545 {
3546 { "rolA", { Eb, I1 }, 0 },
3547 { "rorA", { Eb, I1 }, 0 },
3548 { "rclA", { Eb, I1 }, 0 },
3549 { "rcrA", { Eb, I1 }, 0 },
3550 { "shlA", { Eb, I1 }, 0 },
3551 { "shrA", { Eb, I1 }, 0 },
3552 { "shlA", { Eb, I1 }, 0 },
3553 { "sarA", { Eb, I1 }, 0 },
3554 },
3555 /* REG_D1 */
3556 {
3557 { "rolQ", { Ev, I1 }, 0 },
3558 { "rorQ", { Ev, I1 }, 0 },
3559 { "rclQ", { Ev, I1 }, 0 },
3560 { "rcrQ", { Ev, I1 }, 0 },
3561 { "shlQ", { Ev, I1 }, 0 },
3562 { "shrQ", { Ev, I1 }, 0 },
3563 { "shlQ", { Ev, I1 }, 0 },
3564 { "sarQ", { Ev, I1 }, 0 },
3565 },
3566 /* REG_D2 */
3567 {
3568 { "rolA", { Eb, CL }, 0 },
3569 { "rorA", { Eb, CL }, 0 },
3570 { "rclA", { Eb, CL }, 0 },
3571 { "rcrA", { Eb, CL }, 0 },
3572 { "shlA", { Eb, CL }, 0 },
3573 { "shrA", { Eb, CL }, 0 },
3574 { "shlA", { Eb, CL }, 0 },
3575 { "sarA", { Eb, CL }, 0 },
3576 },
3577 /* REG_D3 */
3578 {
3579 { "rolQ", { Ev, CL }, 0 },
3580 { "rorQ", { Ev, CL }, 0 },
3581 { "rclQ", { Ev, CL }, 0 },
3582 { "rcrQ", { Ev, CL }, 0 },
3583 { "shlQ", { Ev, CL }, 0 },
3584 { "shrQ", { Ev, CL }, 0 },
3585 { "shlQ", { Ev, CL }, 0 },
3586 { "sarQ", { Ev, CL }, 0 },
3587 },
3588 /* REG_F6 */
3589 {
3590 { "testA", { Eb, Ib }, 0 },
3591 { "testA", { Eb, Ib }, 0 },
3592 { "notA", { Ebh1 }, 0 },
3593 { "negA", { Ebh1 }, 0 },
3594 { "mulA", { Eb }, 0 }, /* Don't print the implicit %al register, */
3595 { "imulA", { Eb }, 0 }, /* to distinguish these opcodes from other */
3596 { "divA", { Eb }, 0 }, /* mul/imul opcodes. Do the same for div */
3597 { "idivA", { Eb }, 0 }, /* and idiv for consistency. */
3598 },
3599 /* REG_F7 */
3600 {
3601 { "testQ", { Ev, Iv }, 0 },
3602 { "testQ", { Ev, Iv }, 0 },
3603 { "notQ", { Evh1 }, 0 },
3604 { "negQ", { Evh1 }, 0 },
3605 { "mulQ", { Ev }, 0 }, /* Don't print the implicit register. */
3606 { "imulQ", { Ev }, 0 },
3607 { "divQ", { Ev }, 0 },
3608 { "idivQ", { Ev }, 0 },
3609 },
3610 /* REG_FE */
3611 {
3612 { "incA", { Ebh1 }, 0 },
3613 { "decA", { Ebh1 }, 0 },
3614 },
3615 /* REG_FF */
3616 {
3617 { "incQ", { Evh1 }, 0 },
3618 { "decQ", { Evh1 }, 0 },
3619 { "call{&|}", { NOTRACK, indirEv, BND }, 0 },
3620 { MOD_TABLE (MOD_FF_REG_3) },
3621 { "jmp{&|}", { NOTRACK, indirEv, BND }, 0 },
3622 { MOD_TABLE (MOD_FF_REG_5) },
3623 { "pushU", { stackEv }, 0 },
3624 { Bad_Opcode },
3625 },
3626 /* REG_0F00 */
3627 {
3628 { "sldtD", { Sv }, 0 },
3629 { "strD", { Sv }, 0 },
3630 { "lldt", { Ew }, 0 },
3631 { "ltr", { Ew }, 0 },
3632 { "verr", { Ew }, 0 },
3633 { "verw", { Ew }, 0 },
3634 { Bad_Opcode },
3635 { Bad_Opcode },
3636 },
3637 /* REG_0F01 */
3638 {
3639 { MOD_TABLE (MOD_0F01_REG_0) },
3640 { MOD_TABLE (MOD_0F01_REG_1) },
3641 { MOD_TABLE (MOD_0F01_REG_2) },
3642 { MOD_TABLE (MOD_0F01_REG_3) },
3643 { "smswD", { Sv }, 0 },
3644 { MOD_TABLE (MOD_0F01_REG_5) },
3645 { "lmsw", { Ew }, 0 },
3646 { MOD_TABLE (MOD_0F01_REG_7) },
3647 },
3648 /* REG_0F0D */
3649 {
3650 { "prefetch", { Mb }, 0 },
3651 { "prefetchw", { Mb }, 0 },
3652 { "prefetchwt1", { Mb }, 0 },
3653 { "prefetch", { Mb }, 0 },
3654 { "prefetch", { Mb }, 0 },
3655 { "prefetch", { Mb }, 0 },
3656 { "prefetch", { Mb }, 0 },
3657 { "prefetch", { Mb }, 0 },
3658 },
3659 /* REG_0F18 */
3660 {
3661 { MOD_TABLE (MOD_0F18_REG_0) },
3662 { MOD_TABLE (MOD_0F18_REG_1) },
3663 { MOD_TABLE (MOD_0F18_REG_2) },
3664 { MOD_TABLE (MOD_0F18_REG_3) },
3665 { MOD_TABLE (MOD_0F18_REG_4) },
3666 { MOD_TABLE (MOD_0F18_REG_5) },
3667 { MOD_TABLE (MOD_0F18_REG_6) },
3668 { MOD_TABLE (MOD_0F18_REG_7) },
3669 },
3670 /* REG_0F1C_MOD_0 */
3671 {
3672 { "cldemote", { Mb }, 0 },
3673 { "nopQ", { Ev }, 0 },
3674 { "nopQ", { Ev }, 0 },
3675 { "nopQ", { Ev }, 0 },
3676 { "nopQ", { Ev }, 0 },
3677 { "nopQ", { Ev }, 0 },
3678 { "nopQ", { Ev }, 0 },
3679 { "nopQ", { Ev }, 0 },
3680 },
3681 /* REG_0F1E_MOD_3 */
3682 {
3683 { "nopQ", { Ev }, 0 },
3684 { "rdsspK", { Rdq }, PREFIX_OPCODE },
3685 { "nopQ", { Ev }, 0 },
3686 { "nopQ", { Ev }, 0 },
3687 { "nopQ", { Ev }, 0 },
3688 { "nopQ", { Ev }, 0 },
3689 { "nopQ", { Ev }, 0 },
3690 { RM_TABLE (RM_0F1E_MOD_3_REG_7) },
3691 },
3692 /* REG_0F71 */
3693 {
3694 { Bad_Opcode },
3695 { Bad_Opcode },
3696 { MOD_TABLE (MOD_0F71_REG_2) },
3697 { Bad_Opcode },
3698 { MOD_TABLE (MOD_0F71_REG_4) },
3699 { Bad_Opcode },
3700 { MOD_TABLE (MOD_0F71_REG_6) },
3701 },
3702 /* REG_0F72 */
3703 {
3704 { Bad_Opcode },
3705 { Bad_Opcode },
3706 { MOD_TABLE (MOD_0F72_REG_2) },
3707 { Bad_Opcode },
3708 { MOD_TABLE (MOD_0F72_REG_4) },
3709 { Bad_Opcode },
3710 { MOD_TABLE (MOD_0F72_REG_6) },
3711 },
3712 /* REG_0F73 */
3713 {
3714 { Bad_Opcode },
3715 { Bad_Opcode },
3716 { MOD_TABLE (MOD_0F73_REG_2) },
3717 { MOD_TABLE (MOD_0F73_REG_3) },
3718 { Bad_Opcode },
3719 { Bad_Opcode },
3720 { MOD_TABLE (MOD_0F73_REG_6) },
3721 { MOD_TABLE (MOD_0F73_REG_7) },
3722 },
3723 /* REG_0FA6 */
3724 {
3725 { "montmul", { { OP_0f07, 0 } }, 0 },
3726 { "xsha1", { { OP_0f07, 0 } }, 0 },
3727 { "xsha256", { { OP_0f07, 0 } }, 0 },
3728 },
3729 /* REG_0FA7 */
3730 {
3731 { "xstore-rng", { { OP_0f07, 0 } }, 0 },
3732 { "xcrypt-ecb", { { OP_0f07, 0 } }, 0 },
3733 { "xcrypt-cbc", { { OP_0f07, 0 } }, 0 },
3734 { "xcrypt-ctr", { { OP_0f07, 0 } }, 0 },
3735 { "xcrypt-cfb", { { OP_0f07, 0 } }, 0 },
3736 { "xcrypt-ofb", { { OP_0f07, 0 } }, 0 },
3737 },
3738 /* REG_0FAE */
3739 {
3740 { MOD_TABLE (MOD_0FAE_REG_0) },
3741 { MOD_TABLE (MOD_0FAE_REG_1) },
3742 { MOD_TABLE (MOD_0FAE_REG_2) },
3743 { MOD_TABLE (MOD_0FAE_REG_3) },
3744 { MOD_TABLE (MOD_0FAE_REG_4) },
3745 { MOD_TABLE (MOD_0FAE_REG_5) },
3746 { MOD_TABLE (MOD_0FAE_REG_6) },
3747 { MOD_TABLE (MOD_0FAE_REG_7) },
3748 },
3749 /* REG_0FBA */
3750 {
3751 { Bad_Opcode },
3752 { Bad_Opcode },
3753 { Bad_Opcode },
3754 { Bad_Opcode },
3755 { "btQ", { Ev, Ib }, 0 },
3756 { "btsQ", { Evh1, Ib }, 0 },
3757 { "btrQ", { Evh1, Ib }, 0 },
3758 { "btcQ", { Evh1, Ib }, 0 },
3759 },
3760 /* REG_0FC7 */
3761 {
3762 { Bad_Opcode },
3763 { "cmpxchg8b", { { CMPXCHG8B_Fixup, q_mode } }, 0 },
3764 { Bad_Opcode },
3765 { MOD_TABLE (MOD_0FC7_REG_3) },
3766 { MOD_TABLE (MOD_0FC7_REG_4) },
3767 { MOD_TABLE (MOD_0FC7_REG_5) },
3768 { MOD_TABLE (MOD_0FC7_REG_6) },
3769 { MOD_TABLE (MOD_0FC7_REG_7) },
3770 },
3771 /* REG_VEX_0F71 */
3772 {
3773 { Bad_Opcode },
3774 { Bad_Opcode },
3775 { MOD_TABLE (MOD_VEX_0F71_REG_2) },
3776 { Bad_Opcode },
3777 { MOD_TABLE (MOD_VEX_0F71_REG_4) },
3778 { Bad_Opcode },
3779 { MOD_TABLE (MOD_VEX_0F71_REG_6) },
3780 },
3781 /* REG_VEX_0F72 */
3782 {
3783 { Bad_Opcode },
3784 { Bad_Opcode },
3785 { MOD_TABLE (MOD_VEX_0F72_REG_2) },
3786 { Bad_Opcode },
3787 { MOD_TABLE (MOD_VEX_0F72_REG_4) },
3788 { Bad_Opcode },
3789 { MOD_TABLE (MOD_VEX_0F72_REG_6) },
3790 },
3791 /* REG_VEX_0F73 */
3792 {
3793 { Bad_Opcode },
3794 { Bad_Opcode },
3795 { MOD_TABLE (MOD_VEX_0F73_REG_2) },
3796 { MOD_TABLE (MOD_VEX_0F73_REG_3) },
3797 { Bad_Opcode },
3798 { Bad_Opcode },
3799 { MOD_TABLE (MOD_VEX_0F73_REG_6) },
3800 { MOD_TABLE (MOD_VEX_0F73_REG_7) },
3801 },
3802 /* REG_VEX_0FAE */
3803 {
3804 { Bad_Opcode },
3805 { Bad_Opcode },
3806 { MOD_TABLE (MOD_VEX_0FAE_REG_2) },
3807 { MOD_TABLE (MOD_VEX_0FAE_REG_3) },
3808 },
3809 /* REG_VEX_0F38F3 */
3810 {
3811 { Bad_Opcode },
3812 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_1) },
3813 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_2) },
3814 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_3) },
3815 },
3816 /* REG_XOP_LWPCB */
3817 {
3818 { "llwpcb", { { OP_LWPCB_E, 0 } }, 0 },
3819 { "slwpcb", { { OP_LWPCB_E, 0 } }, 0 },
3820 },
3821 /* REG_XOP_LWP */
3822 {
3823 { "lwpins", { { OP_LWP_E, 0 }, Ed, Iq }, 0 },
3824 { "lwpval", { { OP_LWP_E, 0 }, Ed, Iq }, 0 },
3825 },
3826 /* REG_XOP_TBM_01 */
3827 {
3828 { Bad_Opcode },
3829 { "blcfill", { { OP_LWP_E, 0 }, Ev }, 0 },
3830 { "blsfill", { { OP_LWP_E, 0 }, Ev }, 0 },
3831 { "blcs", { { OP_LWP_E, 0 }, Ev }, 0 },
3832 { "tzmsk", { { OP_LWP_E, 0 }, Ev }, 0 },
3833 { "blcic", { { OP_LWP_E, 0 }, Ev }, 0 },
3834 { "blsic", { { OP_LWP_E, 0 }, Ev }, 0 },
3835 { "t1mskc", { { OP_LWP_E, 0 }, Ev }, 0 },
3836 },
3837 /* REG_XOP_TBM_02 */
3838 {
3839 { Bad_Opcode },
3840 { "blcmsk", { { OP_LWP_E, 0 }, Ev }, 0 },
3841 { Bad_Opcode },
3842 { Bad_Opcode },
3843 { Bad_Opcode },
3844 { Bad_Opcode },
3845 { "blci", { { OP_LWP_E, 0 }, Ev }, 0 },
3846 },
3847 #define NEED_REG_TABLE
3848 #include "i386-dis-evex.h"
3849 #undef NEED_REG_TABLE
3850 };
3851
3852 static const struct dis386 prefix_table[][4] = {
3853 /* PREFIX_90 */
3854 {
3855 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } }, 0 },
3856 { "pause", { XX }, 0 },
3857 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } }, 0 },
3858 { NULL, { { NULL, 0 } }, PREFIX_IGNORED }
3859 },
3860
3861 /* PREFIX_MOD_0_0F01_REG_5 */
3862 {
3863 { Bad_Opcode },
3864 { "rstorssp", { Mq }, PREFIX_OPCODE },
3865 },
3866
3867 /* PREFIX_MOD_3_0F01_REG_5_RM_0 */
3868 {
3869 { Bad_Opcode },
3870 { "setssbsy", { Skip_MODRM }, PREFIX_OPCODE },
3871 },
3872
3873 /* PREFIX_MOD_3_0F01_REG_5_RM_2 */
3874 {
3875 { Bad_Opcode },
3876 { "saveprevssp", { Skip_MODRM }, PREFIX_OPCODE },
3877 },
3878
3879 /* PREFIX_0F09 */
3880 {
3881 { "wbinvd", { XX }, 0 },
3882 { "wbnoinvd", { XX }, 0 },
3883 },
3884
3885 /* PREFIX_0F10 */
3886 {
3887 { "movups", { XM, EXx }, PREFIX_OPCODE },
3888 { "movss", { XM, EXd }, PREFIX_OPCODE },
3889 { "movupd", { XM, EXx }, PREFIX_OPCODE },
3890 { "movsd", { XM, EXq }, PREFIX_OPCODE },
3891 },
3892
3893 /* PREFIX_0F11 */
3894 {
3895 { "movups", { EXxS, XM }, PREFIX_OPCODE },
3896 { "movss", { EXdS, XM }, PREFIX_OPCODE },
3897 { "movupd", { EXxS, XM }, PREFIX_OPCODE },
3898 { "movsd", { EXqS, XM }, PREFIX_OPCODE },
3899 },
3900
3901 /* PREFIX_0F12 */
3902 {
3903 { MOD_TABLE (MOD_0F12_PREFIX_0) },
3904 { "movsldup", { XM, EXx }, PREFIX_OPCODE },
3905 { "movlpd", { XM, EXq }, PREFIX_OPCODE },
3906 { "movddup", { XM, EXq }, PREFIX_OPCODE },
3907 },
3908
3909 /* PREFIX_0F16 */
3910 {
3911 { MOD_TABLE (MOD_0F16_PREFIX_0) },
3912 { "movshdup", { XM, EXx }, PREFIX_OPCODE },
3913 { "movhpd", { XM, EXq }, PREFIX_OPCODE },
3914 },
3915
3916 /* PREFIX_0F1A */
3917 {
3918 { MOD_TABLE (MOD_0F1A_PREFIX_0) },
3919 { "bndcl", { Gbnd, Ev_bnd }, 0 },
3920 { "bndmov", { Gbnd, Ebnd }, 0 },
3921 { "bndcu", { Gbnd, Ev_bnd }, 0 },
3922 },
3923
3924 /* PREFIX_0F1B */
3925 {
3926 { MOD_TABLE (MOD_0F1B_PREFIX_0) },
3927 { MOD_TABLE (MOD_0F1B_PREFIX_1) },
3928 { "bndmov", { EbndS, Gbnd }, 0 },
3929 { "bndcn", { Gbnd, Ev_bnd }, 0 },
3930 },
3931
3932 /* PREFIX_0F1C */
3933 {
3934 { MOD_TABLE (MOD_0F1C_PREFIX_0) },
3935 { "nopQ", { Ev }, PREFIX_OPCODE },
3936 { "nopQ", { Ev }, PREFIX_OPCODE },
3937 { "nopQ", { Ev }, PREFIX_OPCODE },
3938 },
3939
3940 /* PREFIX_0F1E */
3941 {
3942 { "nopQ", { Ev }, PREFIX_OPCODE },
3943 { MOD_TABLE (MOD_0F1E_PREFIX_1) },
3944 { "nopQ", { Ev }, PREFIX_OPCODE },
3945 { "nopQ", { Ev }, PREFIX_OPCODE },
3946 },
3947
3948 /* PREFIX_0F2A */
3949 {
3950 { "cvtpi2ps", { XM, EMCq }, PREFIX_OPCODE },
3951 { "cvtsi2ss%LQ", { XM, Ev }, PREFIX_OPCODE },
3952 { "cvtpi2pd", { XM, EMCq }, PREFIX_OPCODE },
3953 { "cvtsi2sd%LQ", { XM, Ev }, 0 },
3954 },
3955
3956 /* PREFIX_0F2B */
3957 {
3958 { MOD_TABLE (MOD_0F2B_PREFIX_0) },
3959 { MOD_TABLE (MOD_0F2B_PREFIX_1) },
3960 { MOD_TABLE (MOD_0F2B_PREFIX_2) },
3961 { MOD_TABLE (MOD_0F2B_PREFIX_3) },
3962 },
3963
3964 /* PREFIX_0F2C */
3965 {
3966 { "cvttps2pi", { MXC, EXq }, PREFIX_OPCODE },
3967 { "cvttss2si", { Gv, EXd }, PREFIX_OPCODE },
3968 { "cvttpd2pi", { MXC, EXx }, PREFIX_OPCODE },
3969 { "cvttsd2si", { Gv, EXq }, PREFIX_OPCODE },
3970 },
3971
3972 /* PREFIX_0F2D */
3973 {
3974 { "cvtps2pi", { MXC, EXq }, PREFIX_OPCODE },
3975 { "cvtss2si", { Gv, EXd }, PREFIX_OPCODE },
3976 { "cvtpd2pi", { MXC, EXx }, PREFIX_OPCODE },
3977 { "cvtsd2si", { Gv, EXq }, PREFIX_OPCODE },
3978 },
3979
3980 /* PREFIX_0F2E */
3981 {
3982 { "ucomiss",{ XM, EXd }, 0 },
3983 { Bad_Opcode },
3984 { "ucomisd",{ XM, EXq }, 0 },
3985 },
3986
3987 /* PREFIX_0F2F */
3988 {
3989 { "comiss", { XM, EXd }, 0 },
3990 { Bad_Opcode },
3991 { "comisd", { XM, EXq }, 0 },
3992 },
3993
3994 /* PREFIX_0F51 */
3995 {
3996 { "sqrtps", { XM, EXx }, PREFIX_OPCODE },
3997 { "sqrtss", { XM, EXd }, PREFIX_OPCODE },
3998 { "sqrtpd", { XM, EXx }, PREFIX_OPCODE },
3999 { "sqrtsd", { XM, EXq }, PREFIX_OPCODE },
4000 },
4001
4002 /* PREFIX_0F52 */
4003 {
4004 { "rsqrtps",{ XM, EXx }, PREFIX_OPCODE },
4005 { "rsqrtss",{ XM, EXd }, PREFIX_OPCODE },
4006 },
4007
4008 /* PREFIX_0F53 */
4009 {
4010 { "rcpps", { XM, EXx }, PREFIX_OPCODE },
4011 { "rcpss", { XM, EXd }, PREFIX_OPCODE },
4012 },
4013
4014 /* PREFIX_0F58 */
4015 {
4016 { "addps", { XM, EXx }, PREFIX_OPCODE },
4017 { "addss", { XM, EXd }, PREFIX_OPCODE },
4018 { "addpd", { XM, EXx }, PREFIX_OPCODE },
4019 { "addsd", { XM, EXq }, PREFIX_OPCODE },
4020 },
4021
4022 /* PREFIX_0F59 */
4023 {
4024 { "mulps", { XM, EXx }, PREFIX_OPCODE },
4025 { "mulss", { XM, EXd }, PREFIX_OPCODE },
4026 { "mulpd", { XM, EXx }, PREFIX_OPCODE },
4027 { "mulsd", { XM, EXq }, PREFIX_OPCODE },
4028 },
4029
4030 /* PREFIX_0F5A */
4031 {
4032 { "cvtps2pd", { XM, EXq }, PREFIX_OPCODE },
4033 { "cvtss2sd", { XM, EXd }, PREFIX_OPCODE },
4034 { "cvtpd2ps", { XM, EXx }, PREFIX_OPCODE },
4035 { "cvtsd2ss", { XM, EXq }, PREFIX_OPCODE },
4036 },
4037
4038 /* PREFIX_0F5B */
4039 {
4040 { "cvtdq2ps", { XM, EXx }, PREFIX_OPCODE },
4041 { "cvttps2dq", { XM, EXx }, PREFIX_OPCODE },
4042 { "cvtps2dq", { XM, EXx }, PREFIX_OPCODE },
4043 },
4044
4045 /* PREFIX_0F5C */
4046 {
4047 { "subps", { XM, EXx }, PREFIX_OPCODE },
4048 { "subss", { XM, EXd }, PREFIX_OPCODE },
4049 { "subpd", { XM, EXx }, PREFIX_OPCODE },
4050 { "subsd", { XM, EXq }, PREFIX_OPCODE },
4051 },
4052
4053 /* PREFIX_0F5D */
4054 {
4055 { "minps", { XM, EXx }, PREFIX_OPCODE },
4056 { "minss", { XM, EXd }, PREFIX_OPCODE },
4057 { "minpd", { XM, EXx }, PREFIX_OPCODE },
4058 { "minsd", { XM, EXq }, PREFIX_OPCODE },
4059 },
4060
4061 /* PREFIX_0F5E */
4062 {
4063 { "divps", { XM, EXx }, PREFIX_OPCODE },
4064 { "divss", { XM, EXd }, PREFIX_OPCODE },
4065 { "divpd", { XM, EXx }, PREFIX_OPCODE },
4066 { "divsd", { XM, EXq }, PREFIX_OPCODE },
4067 },
4068
4069 /* PREFIX_0F5F */
4070 {
4071 { "maxps", { XM, EXx }, PREFIX_OPCODE },
4072 { "maxss", { XM, EXd }, PREFIX_OPCODE },
4073 { "maxpd", { XM, EXx }, PREFIX_OPCODE },
4074 { "maxsd", { XM, EXq }, PREFIX_OPCODE },
4075 },
4076
4077 /* PREFIX_0F60 */
4078 {
4079 { "punpcklbw",{ MX, EMd }, PREFIX_OPCODE },
4080 { Bad_Opcode },
4081 { "punpcklbw",{ MX, EMx }, PREFIX_OPCODE },
4082 },
4083
4084 /* PREFIX_0F61 */
4085 {
4086 { "punpcklwd",{ MX, EMd }, PREFIX_OPCODE },
4087 { Bad_Opcode },
4088 { "punpcklwd",{ MX, EMx }, PREFIX_OPCODE },
4089 },
4090
4091 /* PREFIX_0F62 */
4092 {
4093 { "punpckldq",{ MX, EMd }, PREFIX_OPCODE },
4094 { Bad_Opcode },
4095 { "punpckldq",{ MX, EMx }, PREFIX_OPCODE },
4096 },
4097
4098 /* PREFIX_0F6C */
4099 {
4100 { Bad_Opcode },
4101 { Bad_Opcode },
4102 { "punpcklqdq", { XM, EXx }, PREFIX_OPCODE },
4103 },
4104
4105 /* PREFIX_0F6D */
4106 {
4107 { Bad_Opcode },
4108 { Bad_Opcode },
4109 { "punpckhqdq", { XM, EXx }, PREFIX_OPCODE },
4110 },
4111
4112 /* PREFIX_0F6F */
4113 {
4114 { "movq", { MX, EM }, PREFIX_OPCODE },
4115 { "movdqu", { XM, EXx }, PREFIX_OPCODE },
4116 { "movdqa", { XM, EXx }, PREFIX_OPCODE },
4117 },
4118
4119 /* PREFIX_0F70 */
4120 {
4121 { "pshufw", { MX, EM, Ib }, PREFIX_OPCODE },
4122 { "pshufhw",{ XM, EXx, Ib }, PREFIX_OPCODE },
4123 { "pshufd", { XM, EXx, Ib }, PREFIX_OPCODE },
4124 { "pshuflw",{ XM, EXx, Ib }, PREFIX_OPCODE },
4125 },
4126
4127 /* PREFIX_0F73_REG_3 */
4128 {
4129 { Bad_Opcode },
4130 { Bad_Opcode },
4131 { "psrldq", { XS, Ib }, 0 },
4132 },
4133
4134 /* PREFIX_0F73_REG_7 */
4135 {
4136 { Bad_Opcode },
4137 { Bad_Opcode },
4138 { "pslldq", { XS, Ib }, 0 },
4139 },
4140
4141 /* PREFIX_0F78 */
4142 {
4143 {"vmread", { Em, Gm }, 0 },
4144 { Bad_Opcode },
4145 {"extrq", { XS, Ib, Ib }, 0 },
4146 {"insertq", { XM, XS, Ib, Ib }, 0 },
4147 },
4148
4149 /* PREFIX_0F79 */
4150 {
4151 {"vmwrite", { Gm, Em }, 0 },
4152 { Bad_Opcode },
4153 {"extrq", { XM, XS }, 0 },
4154 {"insertq", { XM, XS }, 0 },
4155 },
4156
4157 /* PREFIX_0F7C */
4158 {
4159 { Bad_Opcode },
4160 { Bad_Opcode },
4161 { "haddpd", { XM, EXx }, PREFIX_OPCODE },
4162 { "haddps", { XM, EXx }, PREFIX_OPCODE },
4163 },
4164
4165 /* PREFIX_0F7D */
4166 {
4167 { Bad_Opcode },
4168 { Bad_Opcode },
4169 { "hsubpd", { XM, EXx }, PREFIX_OPCODE },
4170 { "hsubps", { XM, EXx }, PREFIX_OPCODE },
4171 },
4172
4173 /* PREFIX_0F7E */
4174 {
4175 { "movK", { Edq, MX }, PREFIX_OPCODE },
4176 { "movq", { XM, EXq }, PREFIX_OPCODE },
4177 { "movK", { Edq, XM }, PREFIX_OPCODE },
4178 },
4179
4180 /* PREFIX_0F7F */
4181 {
4182 { "movq", { EMS, MX }, PREFIX_OPCODE },
4183 { "movdqu", { EXxS, XM }, PREFIX_OPCODE },
4184 { "movdqa", { EXxS, XM }, PREFIX_OPCODE },
4185 },
4186
4187 /* PREFIX_0FAE_REG_0 */
4188 {
4189 { Bad_Opcode },
4190 { "rdfsbase", { Ev }, 0 },
4191 },
4192
4193 /* PREFIX_0FAE_REG_1 */
4194 {
4195 { Bad_Opcode },
4196 { "rdgsbase", { Ev }, 0 },
4197 },
4198
4199 /* PREFIX_0FAE_REG_2 */
4200 {
4201 { Bad_Opcode },
4202 { "wrfsbase", { Ev }, 0 },
4203 },
4204
4205 /* PREFIX_0FAE_REG_3 */
4206 {
4207 { Bad_Opcode },
4208 { "wrgsbase", { Ev }, 0 },
4209 },
4210
4211 /* PREFIX_MOD_0_0FAE_REG_4 */
4212 {
4213 { "xsave", { FXSAVE }, 0 },
4214 { "ptwrite%LQ", { Edq }, 0 },
4215 },
4216
4217 /* PREFIX_MOD_3_0FAE_REG_4 */
4218 {
4219 { Bad_Opcode },
4220 { "ptwrite%LQ", { Edq }, 0 },
4221 },
4222
4223 /* PREFIX_MOD_0_0FAE_REG_5 */
4224 {
4225 { "xrstor", { FXSAVE }, PREFIX_OPCODE },
4226 },
4227
4228 /* PREFIX_MOD_3_0FAE_REG_5 */
4229 {
4230 { "lfence", { Skip_MODRM }, 0 },
4231 { "incsspK", { Rdq }, PREFIX_OPCODE },
4232 },
4233
4234 /* PREFIX_MOD_0_0FAE_REG_6 */
4235 {
4236 { "xsaveopt", { FXSAVE }, PREFIX_OPCODE },
4237 { "clrssbsy", { Mq }, PREFIX_OPCODE },
4238 { "clwb", { Mb }, PREFIX_OPCODE },
4239 },
4240
4241 /* PREFIX_MOD_1_0FAE_REG_6 */
4242 {
4243 { RM_TABLE (RM_0FAE_REG_6) },
4244 { "umonitor", { Eva }, PREFIX_OPCODE },
4245 { "tpause", { Edq }, PREFIX_OPCODE },
4246 { "umwait", { Edq }, PREFIX_OPCODE },
4247 },
4248
4249 /* PREFIX_0FAE_REG_7 */
4250 {
4251 { "clflush", { Mb }, 0 },
4252 { Bad_Opcode },
4253 { "clflushopt", { Mb }, 0 },
4254 },
4255
4256 /* PREFIX_0FB8 */
4257 {
4258 { Bad_Opcode },
4259 { "popcntS", { Gv, Ev }, 0 },
4260 },
4261
4262 /* PREFIX_0FBC */
4263 {
4264 { "bsfS", { Gv, Ev }, 0 },
4265 { "tzcntS", { Gv, Ev }, 0 },
4266 { "bsfS", { Gv, Ev }, 0 },
4267 },
4268
4269 /* PREFIX_0FBD */
4270 {
4271 { "bsrS", { Gv, Ev }, 0 },
4272 { "lzcntS", { Gv, Ev }, 0 },
4273 { "bsrS", { Gv, Ev }, 0 },
4274 },
4275
4276 /* PREFIX_0FC2 */
4277 {
4278 { "cmpps", { XM, EXx, CMP }, PREFIX_OPCODE },
4279 { "cmpss", { XM, EXd, CMP }, PREFIX_OPCODE },
4280 { "cmppd", { XM, EXx, CMP }, PREFIX_OPCODE },
4281 { "cmpsd", { XM, EXq, CMP }, PREFIX_OPCODE },
4282 },
4283
4284 /* PREFIX_MOD_0_0FC3 */
4285 {
4286 { "movntiS", { Ev, Gv }, PREFIX_OPCODE },
4287 },
4288
4289 /* PREFIX_MOD_0_0FC7_REG_6 */
4290 {
4291 { "vmptrld",{ Mq }, 0 },
4292 { "vmxon", { Mq }, 0 },
4293 { "vmclear",{ Mq }, 0 },
4294 },
4295
4296 /* PREFIX_MOD_3_0FC7_REG_6 */
4297 {
4298 { "rdrand", { Ev }, 0 },
4299 { Bad_Opcode },
4300 { "rdrand", { Ev }, 0 }
4301 },
4302
4303 /* PREFIX_MOD_3_0FC7_REG_7 */
4304 {
4305 { "rdseed", { Ev }, 0 },
4306 { "rdpid", { Em }, 0 },
4307 { "rdseed", { Ev }, 0 },
4308 },
4309
4310 /* PREFIX_0FD0 */
4311 {
4312 { Bad_Opcode },
4313 { Bad_Opcode },
4314 { "addsubpd", { XM, EXx }, 0 },
4315 { "addsubps", { XM, EXx }, 0 },
4316 },
4317
4318 /* PREFIX_0FD6 */
4319 {
4320 { Bad_Opcode },
4321 { "movq2dq",{ XM, MS }, 0 },
4322 { "movq", { EXqS, XM }, 0 },
4323 { "movdq2q",{ MX, XS }, 0 },
4324 },
4325
4326 /* PREFIX_0FE6 */
4327 {
4328 { Bad_Opcode },
4329 { "cvtdq2pd", { XM, EXq }, PREFIX_OPCODE },
4330 { "cvttpd2dq", { XM, EXx }, PREFIX_OPCODE },
4331 { "cvtpd2dq", { XM, EXx }, PREFIX_OPCODE },
4332 },
4333
4334 /* PREFIX_0FE7 */
4335 {
4336 { "movntq", { Mq, MX }, PREFIX_OPCODE },
4337 { Bad_Opcode },
4338 { MOD_TABLE (MOD_0FE7_PREFIX_2) },
4339 },
4340
4341 /* PREFIX_0FF0 */
4342 {
4343 { Bad_Opcode },
4344 { Bad_Opcode },
4345 { Bad_Opcode },
4346 { MOD_TABLE (MOD_0FF0_PREFIX_3) },
4347 },
4348
4349 /* PREFIX_0FF7 */
4350 {
4351 { "maskmovq", { MX, MS }, PREFIX_OPCODE },
4352 { Bad_Opcode },
4353 { "maskmovdqu", { XM, XS }, PREFIX_OPCODE },
4354 },
4355
4356 /* PREFIX_0F3810 */
4357 {
4358 { Bad_Opcode },
4359 { Bad_Opcode },
4360 { "pblendvb", { XM, EXx, XMM0 }, PREFIX_OPCODE },
4361 },
4362
4363 /* PREFIX_0F3814 */
4364 {
4365 { Bad_Opcode },
4366 { Bad_Opcode },
4367 { "blendvps", { XM, EXx, XMM0 }, PREFIX_OPCODE },
4368 },
4369
4370 /* PREFIX_0F3815 */
4371 {
4372 { Bad_Opcode },
4373 { Bad_Opcode },
4374 { "blendvpd", { XM, EXx, XMM0 }, PREFIX_OPCODE },
4375 },
4376
4377 /* PREFIX_0F3817 */
4378 {
4379 { Bad_Opcode },
4380 { Bad_Opcode },
4381 { "ptest", { XM, EXx }, PREFIX_OPCODE },
4382 },
4383
4384 /* PREFIX_0F3820 */
4385 {
4386 { Bad_Opcode },
4387 { Bad_Opcode },
4388 { "pmovsxbw", { XM, EXq }, PREFIX_OPCODE },
4389 },
4390
4391 /* PREFIX_0F3821 */
4392 {
4393 { Bad_Opcode },
4394 { Bad_Opcode },
4395 { "pmovsxbd", { XM, EXd }, PREFIX_OPCODE },
4396 },
4397
4398 /* PREFIX_0F3822 */
4399 {
4400 { Bad_Opcode },
4401 { Bad_Opcode },
4402 { "pmovsxbq", { XM, EXw }, PREFIX_OPCODE },
4403 },
4404
4405 /* PREFIX_0F3823 */
4406 {
4407 { Bad_Opcode },
4408 { Bad_Opcode },
4409 { "pmovsxwd", { XM, EXq }, PREFIX_OPCODE },
4410 },
4411
4412 /* PREFIX_0F3824 */
4413 {
4414 { Bad_Opcode },
4415 { Bad_Opcode },
4416 { "pmovsxwq", { XM, EXd }, PREFIX_OPCODE },
4417 },
4418
4419 /* PREFIX_0F3825 */
4420 {
4421 { Bad_Opcode },
4422 { Bad_Opcode },
4423 { "pmovsxdq", { XM, EXq }, PREFIX_OPCODE },
4424 },
4425
4426 /* PREFIX_0F3828 */
4427 {
4428 { Bad_Opcode },
4429 { Bad_Opcode },
4430 { "pmuldq", { XM, EXx }, PREFIX_OPCODE },
4431 },
4432
4433 /* PREFIX_0F3829 */
4434 {
4435 { Bad_Opcode },
4436 { Bad_Opcode },
4437 { "pcmpeqq", { XM, EXx }, PREFIX_OPCODE },
4438 },
4439
4440 /* PREFIX_0F382A */
4441 {
4442 { Bad_Opcode },
4443 { Bad_Opcode },
4444 { MOD_TABLE (MOD_0F382A_PREFIX_2) },
4445 },
4446
4447 /* PREFIX_0F382B */
4448 {
4449 { Bad_Opcode },
4450 { Bad_Opcode },
4451 { "packusdw", { XM, EXx }, PREFIX_OPCODE },
4452 },
4453
4454 /* PREFIX_0F3830 */
4455 {
4456 { Bad_Opcode },
4457 { Bad_Opcode },
4458 { "pmovzxbw", { XM, EXq }, PREFIX_OPCODE },
4459 },
4460
4461 /* PREFIX_0F3831 */
4462 {
4463 { Bad_Opcode },
4464 { Bad_Opcode },
4465 { "pmovzxbd", { XM, EXd }, PREFIX_OPCODE },
4466 },
4467
4468 /* PREFIX_0F3832 */
4469 {
4470 { Bad_Opcode },
4471 { Bad_Opcode },
4472 { "pmovzxbq", { XM, EXw }, PREFIX_OPCODE },
4473 },
4474
4475 /* PREFIX_0F3833 */
4476 {
4477 { Bad_Opcode },
4478 { Bad_Opcode },
4479 { "pmovzxwd", { XM, EXq }, PREFIX_OPCODE },
4480 },
4481
4482 /* PREFIX_0F3834 */
4483 {
4484 { Bad_Opcode },
4485 { Bad_Opcode },
4486 { "pmovzxwq", { XM, EXd }, PREFIX_OPCODE },
4487 },
4488
4489 /* PREFIX_0F3835 */
4490 {
4491 { Bad_Opcode },
4492 { Bad_Opcode },
4493 { "pmovzxdq", { XM, EXq }, PREFIX_OPCODE },
4494 },
4495
4496 /* PREFIX_0F3837 */
4497 {
4498 { Bad_Opcode },
4499 { Bad_Opcode },
4500 { "pcmpgtq", { XM, EXx }, PREFIX_OPCODE },
4501 },
4502
4503 /* PREFIX_0F3838 */
4504 {
4505 { Bad_Opcode },
4506 { Bad_Opcode },
4507 { "pminsb", { XM, EXx }, PREFIX_OPCODE },
4508 },
4509
4510 /* PREFIX_0F3839 */
4511 {
4512 { Bad_Opcode },
4513 { Bad_Opcode },
4514 { "pminsd", { XM, EXx }, PREFIX_OPCODE },
4515 },
4516
4517 /* PREFIX_0F383A */
4518 {
4519 { Bad_Opcode },
4520 { Bad_Opcode },
4521 { "pminuw", { XM, EXx }, PREFIX_OPCODE },
4522 },
4523
4524 /* PREFIX_0F383B */
4525 {
4526 { Bad_Opcode },
4527 { Bad_Opcode },
4528 { "pminud", { XM, EXx }, PREFIX_OPCODE },
4529 },
4530
4531 /* PREFIX_0F383C */
4532 {
4533 { Bad_Opcode },
4534 { Bad_Opcode },
4535 { "pmaxsb", { XM, EXx }, PREFIX_OPCODE },
4536 },
4537
4538 /* PREFIX_0F383D */
4539 {
4540 { Bad_Opcode },
4541 { Bad_Opcode },
4542 { "pmaxsd", { XM, EXx }, PREFIX_OPCODE },
4543 },
4544
4545 /* PREFIX_0F383E */
4546 {
4547 { Bad_Opcode },
4548 { Bad_Opcode },
4549 { "pmaxuw", { XM, EXx }, PREFIX_OPCODE },
4550 },
4551
4552 /* PREFIX_0F383F */
4553 {
4554 { Bad_Opcode },
4555 { Bad_Opcode },
4556 { "pmaxud", { XM, EXx }, PREFIX_OPCODE },
4557 },
4558
4559 /* PREFIX_0F3840 */
4560 {
4561 { Bad_Opcode },
4562 { Bad_Opcode },
4563 { "pmulld", { XM, EXx }, PREFIX_OPCODE },
4564 },
4565
4566 /* PREFIX_0F3841 */
4567 {
4568 { Bad_Opcode },
4569 { Bad_Opcode },
4570 { "phminposuw", { XM, EXx }, PREFIX_OPCODE },
4571 },
4572
4573 /* PREFIX_0F3880 */
4574 {
4575 { Bad_Opcode },
4576 { Bad_Opcode },
4577 { "invept", { Gm, Mo }, PREFIX_OPCODE },
4578 },
4579
4580 /* PREFIX_0F3881 */
4581 {
4582 { Bad_Opcode },
4583 { Bad_Opcode },
4584 { "invvpid", { Gm, Mo }, PREFIX_OPCODE },
4585 },
4586
4587 /* PREFIX_0F3882 */
4588 {
4589 { Bad_Opcode },
4590 { Bad_Opcode },
4591 { "invpcid", { Gm, M }, PREFIX_OPCODE },
4592 },
4593
4594 /* PREFIX_0F38C8 */
4595 {
4596 { "sha1nexte", { XM, EXxmm }, PREFIX_OPCODE },
4597 },
4598
4599 /* PREFIX_0F38C9 */
4600 {
4601 { "sha1msg1", { XM, EXxmm }, PREFIX_OPCODE },
4602 },
4603
4604 /* PREFIX_0F38CA */
4605 {
4606 { "sha1msg2", { XM, EXxmm }, PREFIX_OPCODE },
4607 },
4608
4609 /* PREFIX_0F38CB */
4610 {
4611 { "sha256rnds2", { XM, EXxmm, XMM0 }, PREFIX_OPCODE },
4612 },
4613
4614 /* PREFIX_0F38CC */
4615 {
4616 { "sha256msg1", { XM, EXxmm }, PREFIX_OPCODE },
4617 },
4618
4619 /* PREFIX_0F38CD */
4620 {
4621 { "sha256msg2", { XM, EXxmm }, PREFIX_OPCODE },
4622 },
4623
4624 /* PREFIX_0F38CF */
4625 {
4626 { Bad_Opcode },
4627 { Bad_Opcode },
4628 { "gf2p8mulb", { XM, EXxmm }, PREFIX_OPCODE },
4629 },
4630
4631 /* PREFIX_0F38DB */
4632 {
4633 { Bad_Opcode },
4634 { Bad_Opcode },
4635 { "aesimc", { XM, EXx }, PREFIX_OPCODE },
4636 },
4637
4638 /* PREFIX_0F38DC */
4639 {
4640 { Bad_Opcode },
4641 { Bad_Opcode },
4642 { "aesenc", { XM, EXx }, PREFIX_OPCODE },
4643 },
4644
4645 /* PREFIX_0F38DD */
4646 {
4647 { Bad_Opcode },
4648 { Bad_Opcode },
4649 { "aesenclast", { XM, EXx }, PREFIX_OPCODE },
4650 },
4651
4652 /* PREFIX_0F38DE */
4653 {
4654 { Bad_Opcode },
4655 { Bad_Opcode },
4656 { "aesdec", { XM, EXx }, PREFIX_OPCODE },
4657 },
4658
4659 /* PREFIX_0F38DF */
4660 {
4661 { Bad_Opcode },
4662 { Bad_Opcode },
4663 { "aesdeclast", { XM, EXx }, PREFIX_OPCODE },
4664 },
4665
4666 /* PREFIX_0F38F0 */
4667 {
4668 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } }, PREFIX_OPCODE },
4669 { Bad_Opcode },
4670 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } }, PREFIX_OPCODE },
4671 { "crc32", { Gdq, { CRC32_Fixup, b_mode } }, PREFIX_OPCODE },
4672 },
4673
4674 /* PREFIX_0F38F1 */
4675 {
4676 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv }, PREFIX_OPCODE },
4677 { Bad_Opcode },
4678 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv }, PREFIX_OPCODE },
4679 { "crc32", { Gdq, { CRC32_Fixup, v_mode } }, PREFIX_OPCODE },
4680 },
4681
4682 /* PREFIX_0F38F5 */
4683 {
4684 { Bad_Opcode },
4685 { Bad_Opcode },
4686 { MOD_TABLE (MOD_0F38F5_PREFIX_2) },
4687 },
4688
4689 /* PREFIX_0F38F6 */
4690 {
4691 { MOD_TABLE (MOD_0F38F6_PREFIX_0) },
4692 { "adoxS", { Gdq, Edq}, PREFIX_OPCODE },
4693 { "adcxS", { Gdq, Edq}, PREFIX_OPCODE },
4694 { Bad_Opcode },
4695 },
4696
4697 /* PREFIX_0F38F8 */
4698 {
4699 { Bad_Opcode },
4700 { Bad_Opcode },
4701 { MOD_TABLE (MOD_0F38F8_PREFIX_2) },
4702 },
4703
4704 /* PREFIX_0F38F9 */
4705 {
4706 { MOD_TABLE (MOD_0F38F9_PREFIX_0) },
4707 },
4708
4709 /* PREFIX_0F3A08 */
4710 {
4711 { Bad_Opcode },
4712 { Bad_Opcode },
4713 { "roundps", { XM, EXx, Ib }, PREFIX_OPCODE },
4714 },
4715
4716 /* PREFIX_0F3A09 */
4717 {
4718 { Bad_Opcode },
4719 { Bad_Opcode },
4720 { "roundpd", { XM, EXx, Ib }, PREFIX_OPCODE },
4721 },
4722
4723 /* PREFIX_0F3A0A */
4724 {
4725 { Bad_Opcode },
4726 { Bad_Opcode },
4727 { "roundss", { XM, EXd, Ib }, PREFIX_OPCODE },
4728 },
4729
4730 /* PREFIX_0F3A0B */
4731 {
4732 { Bad_Opcode },
4733 { Bad_Opcode },
4734 { "roundsd", { XM, EXq, Ib }, PREFIX_OPCODE },
4735 },
4736
4737 /* PREFIX_0F3A0C */
4738 {
4739 { Bad_Opcode },
4740 { Bad_Opcode },
4741 { "blendps", { XM, EXx, Ib }, PREFIX_OPCODE },
4742 },
4743
4744 /* PREFIX_0F3A0D */
4745 {
4746 { Bad_Opcode },
4747 { Bad_Opcode },
4748 { "blendpd", { XM, EXx, Ib }, PREFIX_OPCODE },
4749 },
4750
4751 /* PREFIX_0F3A0E */
4752 {
4753 { Bad_Opcode },
4754 { Bad_Opcode },
4755 { "pblendw", { XM, EXx, Ib }, PREFIX_OPCODE },
4756 },
4757
4758 /* PREFIX_0F3A14 */
4759 {
4760 { Bad_Opcode },
4761 { Bad_Opcode },
4762 { "pextrb", { Edqb, XM, Ib }, PREFIX_OPCODE },
4763 },
4764
4765 /* PREFIX_0F3A15 */
4766 {
4767 { Bad_Opcode },
4768 { Bad_Opcode },
4769 { "pextrw", { Edqw, XM, Ib }, PREFIX_OPCODE },
4770 },
4771
4772 /* PREFIX_0F3A16 */
4773 {
4774 { Bad_Opcode },
4775 { Bad_Opcode },
4776 { "pextrK", { Edq, XM, Ib }, PREFIX_OPCODE },
4777 },
4778
4779 /* PREFIX_0F3A17 */
4780 {
4781 { Bad_Opcode },
4782 { Bad_Opcode },
4783 { "extractps", { Edqd, XM, Ib }, PREFIX_OPCODE },
4784 },
4785
4786 /* PREFIX_0F3A20 */
4787 {
4788 { Bad_Opcode },
4789 { Bad_Opcode },
4790 { "pinsrb", { XM, Edqb, Ib }, PREFIX_OPCODE },
4791 },
4792
4793 /* PREFIX_0F3A21 */
4794 {
4795 { Bad_Opcode },
4796 { Bad_Opcode },
4797 { "insertps", { XM, EXd, Ib }, PREFIX_OPCODE },
4798 },
4799
4800 /* PREFIX_0F3A22 */
4801 {
4802 { Bad_Opcode },
4803 { Bad_Opcode },
4804 { "pinsrK", { XM, Edq, Ib }, PREFIX_OPCODE },
4805 },
4806
4807 /* PREFIX_0F3A40 */
4808 {
4809 { Bad_Opcode },
4810 { Bad_Opcode },
4811 { "dpps", { XM, EXx, Ib }, PREFIX_OPCODE },
4812 },
4813
4814 /* PREFIX_0F3A41 */
4815 {
4816 { Bad_Opcode },
4817 { Bad_Opcode },
4818 { "dppd", { XM, EXx, Ib }, PREFIX_OPCODE },
4819 },
4820
4821 /* PREFIX_0F3A42 */
4822 {
4823 { Bad_Opcode },
4824 { Bad_Opcode },
4825 { "mpsadbw", { XM, EXx, Ib }, PREFIX_OPCODE },
4826 },
4827
4828 /* PREFIX_0F3A44 */
4829 {
4830 { Bad_Opcode },
4831 { Bad_Opcode },
4832 { "pclmulqdq", { XM, EXx, PCLMUL }, PREFIX_OPCODE },
4833 },
4834
4835 /* PREFIX_0F3A60 */
4836 {
4837 { Bad_Opcode },
4838 { Bad_Opcode },
4839 { "pcmpestrm", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, PREFIX_OPCODE },
4840 },
4841
4842 /* PREFIX_0F3A61 */
4843 {
4844 { Bad_Opcode },
4845 { Bad_Opcode },
4846 { "pcmpestri", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, PREFIX_OPCODE },
4847 },
4848
4849 /* PREFIX_0F3A62 */
4850 {
4851 { Bad_Opcode },
4852 { Bad_Opcode },
4853 { "pcmpistrm", { XM, EXx, Ib }, PREFIX_OPCODE },
4854 },
4855
4856 /* PREFIX_0F3A63 */
4857 {
4858 { Bad_Opcode },
4859 { Bad_Opcode },
4860 { "pcmpistri", { XM, EXx, Ib }, PREFIX_OPCODE },
4861 },
4862
4863 /* PREFIX_0F3ACC */
4864 {
4865 { "sha1rnds4", { XM, EXxmm, Ib }, PREFIX_OPCODE },
4866 },
4867
4868 /* PREFIX_0F3ACE */
4869 {
4870 { Bad_Opcode },
4871 { Bad_Opcode },
4872 { "gf2p8affineqb", { XM, EXxmm, Ib }, PREFIX_OPCODE },
4873 },
4874
4875 /* PREFIX_0F3ACF */
4876 {
4877 { Bad_Opcode },
4878 { Bad_Opcode },
4879 { "gf2p8affineinvqb", { XM, EXxmm, Ib }, PREFIX_OPCODE },
4880 },
4881
4882 /* PREFIX_0F3ADF */
4883 {
4884 { Bad_Opcode },
4885 { Bad_Opcode },
4886 { "aeskeygenassist", { XM, EXx, Ib }, PREFIX_OPCODE },
4887 },
4888
4889 /* PREFIX_VEX_0F10 */
4890 {
4891 { VEX_W_TABLE (VEX_W_0F10_P_0) },
4892 { VEX_LEN_TABLE (VEX_LEN_0F10_P_1) },
4893 { VEX_W_TABLE (VEX_W_0F10_P_2) },
4894 { VEX_LEN_TABLE (VEX_LEN_0F10_P_3) },
4895 },
4896
4897 /* PREFIX_VEX_0F11 */
4898 {
4899 { VEX_W_TABLE (VEX_W_0F11_P_0) },
4900 { VEX_LEN_TABLE (VEX_LEN_0F11_P_1) },
4901 { VEX_W_TABLE (VEX_W_0F11_P_2) },
4902 { VEX_LEN_TABLE (VEX_LEN_0F11_P_3) },
4903 },
4904
4905 /* PREFIX_VEX_0F12 */
4906 {
4907 { MOD_TABLE (MOD_VEX_0F12_PREFIX_0) },
4908 { VEX_W_TABLE (VEX_W_0F12_P_1) },
4909 { VEX_LEN_TABLE (VEX_LEN_0F12_P_2) },
4910 { VEX_W_TABLE (VEX_W_0F12_P_3) },
4911 },
4912
4913 /* PREFIX_VEX_0F16 */
4914 {
4915 { MOD_TABLE (MOD_VEX_0F16_PREFIX_0) },
4916 { VEX_W_TABLE (VEX_W_0F16_P_1) },
4917 { VEX_LEN_TABLE (VEX_LEN_0F16_P_2) },
4918 },
4919
4920 /* PREFIX_VEX_0F2A */
4921 {
4922 { Bad_Opcode },
4923 { VEX_LEN_TABLE (VEX_LEN_0F2A_P_1) },
4924 { Bad_Opcode },
4925 { VEX_LEN_TABLE (VEX_LEN_0F2A_P_3) },
4926 },
4927
4928 /* PREFIX_VEX_0F2C */
4929 {
4930 { Bad_Opcode },
4931 { VEX_LEN_TABLE (VEX_LEN_0F2C_P_1) },
4932 { Bad_Opcode },
4933 { VEX_LEN_TABLE (VEX_LEN_0F2C_P_3) },
4934 },
4935
4936 /* PREFIX_VEX_0F2D */
4937 {
4938 { Bad_Opcode },
4939 { VEX_LEN_TABLE (VEX_LEN_0F2D_P_1) },
4940 { Bad_Opcode },
4941 { VEX_LEN_TABLE (VEX_LEN_0F2D_P_3) },
4942 },
4943
4944 /* PREFIX_VEX_0F2E */
4945 {
4946 { VEX_LEN_TABLE (VEX_LEN_0F2E_P_0) },
4947 { Bad_Opcode },
4948 { VEX_LEN_TABLE (VEX_LEN_0F2E_P_2) },
4949 },
4950
4951 /* PREFIX_VEX_0F2F */
4952 {
4953 { VEX_LEN_TABLE (VEX_LEN_0F2F_P_0) },
4954 { Bad_Opcode },
4955 { VEX_LEN_TABLE (VEX_LEN_0F2F_P_2) },
4956 },
4957
4958 /* PREFIX_VEX_0F41 */
4959 {
4960 { VEX_LEN_TABLE (VEX_LEN_0F41_P_0) },
4961 { Bad_Opcode },
4962 { VEX_LEN_TABLE (VEX_LEN_0F41_P_2) },
4963 },
4964
4965 /* PREFIX_VEX_0F42 */
4966 {
4967 { VEX_LEN_TABLE (VEX_LEN_0F42_P_0) },
4968 { Bad_Opcode },
4969 { VEX_LEN_TABLE (VEX_LEN_0F42_P_2) },
4970 },
4971
4972 /* PREFIX_VEX_0F44 */
4973 {
4974 { VEX_LEN_TABLE (VEX_LEN_0F44_P_0) },
4975 { Bad_Opcode },
4976 { VEX_LEN_TABLE (VEX_LEN_0F44_P_2) },
4977 },
4978
4979 /* PREFIX_VEX_0F45 */
4980 {
4981 { VEX_LEN_TABLE (VEX_LEN_0F45_P_0) },
4982 { Bad_Opcode },
4983 { VEX_LEN_TABLE (VEX_LEN_0F45_P_2) },
4984 },
4985
4986 /* PREFIX_VEX_0F46 */
4987 {
4988 { VEX_LEN_TABLE (VEX_LEN_0F46_P_0) },
4989 { Bad_Opcode },
4990 { VEX_LEN_TABLE (VEX_LEN_0F46_P_2) },
4991 },
4992
4993 /* PREFIX_VEX_0F47 */
4994 {
4995 { VEX_LEN_TABLE (VEX_LEN_0F47_P_0) },
4996 { Bad_Opcode },
4997 { VEX_LEN_TABLE (VEX_LEN_0F47_P_2) },
4998 },
4999
5000 /* PREFIX_VEX_0F4A */
5001 {
5002 { VEX_LEN_TABLE (VEX_LEN_0F4A_P_0) },
5003 { Bad_Opcode },
5004 { VEX_LEN_TABLE (VEX_LEN_0F4A_P_2) },
5005 },
5006
5007 /* PREFIX_VEX_0F4B */
5008 {
5009 { VEX_LEN_TABLE (VEX_LEN_0F4B_P_0) },
5010 { Bad_Opcode },
5011 { VEX_LEN_TABLE (VEX_LEN_0F4B_P_2) },
5012 },
5013
5014 /* PREFIX_VEX_0F51 */
5015 {
5016 { VEX_W_TABLE (VEX_W_0F51_P_0) },
5017 { VEX_LEN_TABLE (VEX_LEN_0F51_P_1) },
5018 { VEX_W_TABLE (VEX_W_0F51_P_2) },
5019 { VEX_LEN_TABLE (VEX_LEN_0F51_P_3) },
5020 },
5021
5022 /* PREFIX_VEX_0F52 */
5023 {
5024 { VEX_W_TABLE (VEX_W_0F52_P_0) },
5025 { VEX_LEN_TABLE (VEX_LEN_0F52_P_1) },
5026 },
5027
5028 /* PREFIX_VEX_0F53 */
5029 {
5030 { VEX_W_TABLE (VEX_W_0F53_P_0) },
5031 { VEX_LEN_TABLE (VEX_LEN_0F53_P_1) },
5032 },
5033
5034 /* PREFIX_VEX_0F58 */
5035 {
5036 { VEX_W_TABLE (VEX_W_0F58_P_0) },
5037 { VEX_LEN_TABLE (VEX_LEN_0F58_P_1) },
5038 { VEX_W_TABLE (VEX_W_0F58_P_2) },
5039 { VEX_LEN_TABLE (VEX_LEN_0F58_P_3) },
5040 },
5041
5042 /* PREFIX_VEX_0F59 */
5043 {
5044 { VEX_W_TABLE (VEX_W_0F59_P_0) },
5045 { VEX_LEN_TABLE (VEX_LEN_0F59_P_1) },
5046 { VEX_W_TABLE (VEX_W_0F59_P_2) },
5047 { VEX_LEN_TABLE (VEX_LEN_0F59_P_3) },
5048 },
5049
5050 /* PREFIX_VEX_0F5A */
5051 {
5052 { VEX_W_TABLE (VEX_W_0F5A_P_0) },
5053 { VEX_LEN_TABLE (VEX_LEN_0F5A_P_1) },
5054 { "vcvtpd2ps%XY", { XMM, EXx }, 0 },
5055 { VEX_LEN_TABLE (VEX_LEN_0F5A_P_3) },
5056 },
5057
5058 /* PREFIX_VEX_0F5B */
5059 {
5060 { VEX_W_TABLE (VEX_W_0F5B_P_0) },
5061 { VEX_W_TABLE (VEX_W_0F5B_P_1) },
5062 { VEX_W_TABLE (VEX_W_0F5B_P_2) },
5063 },
5064
5065 /* PREFIX_VEX_0F5C */
5066 {
5067 { VEX_W_TABLE (VEX_W_0F5C_P_0) },
5068 { VEX_LEN_TABLE (VEX_LEN_0F5C_P_1) },
5069 { VEX_W_TABLE (VEX_W_0F5C_P_2) },
5070 { VEX_LEN_TABLE (VEX_LEN_0F5C_P_3) },
5071 },
5072
5073 /* PREFIX_VEX_0F5D */
5074 {
5075 { VEX_W_TABLE (VEX_W_0F5D_P_0) },
5076 { VEX_LEN_TABLE (VEX_LEN_0F5D_P_1) },
5077 { VEX_W_TABLE (VEX_W_0F5D_P_2) },
5078 { VEX_LEN_TABLE (VEX_LEN_0F5D_P_3) },
5079 },
5080
5081 /* PREFIX_VEX_0F5E */
5082 {
5083 { VEX_W_TABLE (VEX_W_0F5E_P_0) },
5084 { VEX_LEN_TABLE (VEX_LEN_0F5E_P_1) },
5085 { VEX_W_TABLE (VEX_W_0F5E_P_2) },
5086 { VEX_LEN_TABLE (VEX_LEN_0F5E_P_3) },
5087 },
5088
5089 /* PREFIX_VEX_0F5F */
5090 {
5091 { VEX_W_TABLE (VEX_W_0F5F_P_0) },
5092 { VEX_LEN_TABLE (VEX_LEN_0F5F_P_1) },
5093 { VEX_W_TABLE (VEX_W_0F5F_P_2) },
5094 { VEX_LEN_TABLE (VEX_LEN_0F5F_P_3) },
5095 },
5096
5097 /* PREFIX_VEX_0F60 */
5098 {
5099 { Bad_Opcode },
5100 { Bad_Opcode },
5101 { VEX_W_TABLE (VEX_W_0F60_P_2) },
5102 },
5103
5104 /* PREFIX_VEX_0F61 */
5105 {
5106 { Bad_Opcode },
5107 { Bad_Opcode },
5108 { VEX_W_TABLE (VEX_W_0F61_P_2) },
5109 },
5110
5111 /* PREFIX_VEX_0F62 */
5112 {
5113 { Bad_Opcode },
5114 { Bad_Opcode },
5115 { VEX_W_TABLE (VEX_W_0F62_P_2) },
5116 },
5117
5118 /* PREFIX_VEX_0F63 */
5119 {
5120 { Bad_Opcode },
5121 { Bad_Opcode },
5122 { VEX_W_TABLE (VEX_W_0F63_P_2) },
5123 },
5124
5125 /* PREFIX_VEX_0F64 */
5126 {
5127 { Bad_Opcode },
5128 { Bad_Opcode },
5129 { VEX_W_TABLE (VEX_W_0F64_P_2) },
5130 },
5131
5132 /* PREFIX_VEX_0F65 */
5133 {
5134 { Bad_Opcode },
5135 { Bad_Opcode },
5136 { VEX_W_TABLE (VEX_W_0F65_P_2) },
5137 },
5138
5139 /* PREFIX_VEX_0F66 */
5140 {
5141 { Bad_Opcode },
5142 { Bad_Opcode },
5143 { VEX_W_TABLE (VEX_W_0F66_P_2) },
5144 },
5145
5146 /* PREFIX_VEX_0F67 */
5147 {
5148 { Bad_Opcode },
5149 { Bad_Opcode },
5150 { VEX_W_TABLE (VEX_W_0F67_P_2) },
5151 },
5152
5153 /* PREFIX_VEX_0F68 */
5154 {
5155 { Bad_Opcode },
5156 { Bad_Opcode },
5157 { VEX_W_TABLE (VEX_W_0F68_P_2) },
5158 },
5159
5160 /* PREFIX_VEX_0F69 */
5161 {
5162 { Bad_Opcode },
5163 { Bad_Opcode },
5164 { VEX_W_TABLE (VEX_W_0F69_P_2) },
5165 },
5166
5167 /* PREFIX_VEX_0F6A */
5168 {
5169 { Bad_Opcode },
5170 { Bad_Opcode },
5171 { VEX_W_TABLE (VEX_W_0F6A_P_2) },
5172 },
5173
5174 /* PREFIX_VEX_0F6B */
5175 {
5176 { Bad_Opcode },
5177 { Bad_Opcode },
5178 { VEX_W_TABLE (VEX_W_0F6B_P_2) },
5179 },
5180
5181 /* PREFIX_VEX_0F6C */
5182 {
5183 { Bad_Opcode },
5184 { Bad_Opcode },
5185 { VEX_W_TABLE (VEX_W_0F6C_P_2) },
5186 },
5187
5188 /* PREFIX_VEX_0F6D */
5189 {
5190 { Bad_Opcode },
5191 { Bad_Opcode },
5192 { VEX_W_TABLE (VEX_W_0F6D_P_2) },
5193 },
5194
5195 /* PREFIX_VEX_0F6E */
5196 {
5197 { Bad_Opcode },
5198 { Bad_Opcode },
5199 { VEX_LEN_TABLE (VEX_LEN_0F6E_P_2) },
5200 },
5201
5202 /* PREFIX_VEX_0F6F */
5203 {
5204 { Bad_Opcode },
5205 { VEX_W_TABLE (VEX_W_0F6F_P_1) },
5206 { VEX_W_TABLE (VEX_W_0F6F_P_2) },
5207 },
5208
5209 /* PREFIX_VEX_0F70 */
5210 {
5211 { Bad_Opcode },
5212 { VEX_W_TABLE (VEX_W_0F70_P_1) },
5213 { VEX_W_TABLE (VEX_W_0F70_P_2) },
5214 { VEX_W_TABLE (VEX_W_0F70_P_3) },
5215 },
5216
5217 /* PREFIX_VEX_0F71_REG_2 */
5218 {
5219 { Bad_Opcode },
5220 { Bad_Opcode },
5221 { VEX_W_TABLE (VEX_W_0F71_R_2_P_2) },
5222 },
5223
5224 /* PREFIX_VEX_0F71_REG_4 */
5225 {
5226 { Bad_Opcode },
5227 { Bad_Opcode },
5228 { VEX_W_TABLE (VEX_W_0F71_R_4_P_2) },
5229 },
5230
5231 /* PREFIX_VEX_0F71_REG_6 */
5232 {
5233 { Bad_Opcode },
5234 { Bad_Opcode },
5235 { VEX_W_TABLE (VEX_W_0F71_R_6_P_2) },
5236 },
5237
5238 /* PREFIX_VEX_0F72_REG_2 */
5239 {
5240 { Bad_Opcode },
5241 { Bad_Opcode },
5242 { VEX_W_TABLE (VEX_W_0F72_R_2_P_2) },
5243 },
5244
5245 /* PREFIX_VEX_0F72_REG_4 */
5246 {
5247 { Bad_Opcode },
5248 { Bad_Opcode },
5249 { VEX_W_TABLE (VEX_W_0F72_R_4_P_2) },
5250 },
5251
5252 /* PREFIX_VEX_0F72_REG_6 */
5253 {
5254 { Bad_Opcode },
5255 { Bad_Opcode },
5256 { VEX_W_TABLE (VEX_W_0F72_R_6_P_2) },
5257 },
5258
5259 /* PREFIX_VEX_0F73_REG_2 */
5260 {
5261 { Bad_Opcode },
5262 { Bad_Opcode },
5263 { VEX_W_TABLE (VEX_W_0F73_R_2_P_2) },
5264 },
5265
5266 /* PREFIX_VEX_0F73_REG_3 */
5267 {
5268 { Bad_Opcode },
5269 { Bad_Opcode },
5270 { VEX_W_TABLE (VEX_W_0F73_R_3_P_2) },
5271 },
5272
5273 /* PREFIX_VEX_0F73_REG_6 */
5274 {
5275 { Bad_Opcode },
5276 { Bad_Opcode },
5277 { VEX_W_TABLE (VEX_W_0F73_R_6_P_2) },
5278 },
5279
5280 /* PREFIX_VEX_0F73_REG_7 */
5281 {
5282 { Bad_Opcode },
5283 { Bad_Opcode },
5284 { VEX_W_TABLE (VEX_W_0F73_R_7_P_2) },
5285 },
5286
5287 /* PREFIX_VEX_0F74 */
5288 {
5289 { Bad_Opcode },
5290 { Bad_Opcode },
5291 { VEX_W_TABLE (VEX_W_0F74_P_2) },
5292 },
5293
5294 /* PREFIX_VEX_0F75 */
5295 {
5296 { Bad_Opcode },
5297 { Bad_Opcode },
5298 { VEX_W_TABLE (VEX_W_0F75_P_2) },
5299 },
5300
5301 /* PREFIX_VEX_0F76 */
5302 {
5303 { Bad_Opcode },
5304 { Bad_Opcode },
5305 { VEX_W_TABLE (VEX_W_0F76_P_2) },
5306 },
5307
5308 /* PREFIX_VEX_0F77 */
5309 {
5310 { VEX_W_TABLE (VEX_W_0F77_P_0) },
5311 },
5312
5313 /* PREFIX_VEX_0F7C */
5314 {
5315 { Bad_Opcode },
5316 { Bad_Opcode },
5317 { VEX_W_TABLE (VEX_W_0F7C_P_2) },
5318 { VEX_W_TABLE (VEX_W_0F7C_P_3) },
5319 },
5320
5321 /* PREFIX_VEX_0F7D */
5322 {
5323 { Bad_Opcode },
5324 { Bad_Opcode },
5325 { VEX_W_TABLE (VEX_W_0F7D_P_2) },
5326 { VEX_W_TABLE (VEX_W_0F7D_P_3) },
5327 },
5328
5329 /* PREFIX_VEX_0F7E */
5330 {
5331 { Bad_Opcode },
5332 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_1) },
5333 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_2) },
5334 },
5335
5336 /* PREFIX_VEX_0F7F */
5337 {
5338 { Bad_Opcode },
5339 { VEX_W_TABLE (VEX_W_0F7F_P_1) },
5340 { VEX_W_TABLE (VEX_W_0F7F_P_2) },
5341 },
5342
5343 /* PREFIX_VEX_0F90 */
5344 {
5345 { VEX_LEN_TABLE (VEX_LEN_0F90_P_0) },
5346 { Bad_Opcode },
5347 { VEX_LEN_TABLE (VEX_LEN_0F90_P_2) },
5348 },
5349
5350 /* PREFIX_VEX_0F91 */
5351 {
5352 { VEX_LEN_TABLE (VEX_LEN_0F91_P_0) },
5353 { Bad_Opcode },
5354 { VEX_LEN_TABLE (VEX_LEN_0F91_P_2) },
5355 },
5356
5357 /* PREFIX_VEX_0F92 */
5358 {
5359 { VEX_LEN_TABLE (VEX_LEN_0F92_P_0) },
5360 { Bad_Opcode },
5361 { VEX_LEN_TABLE (VEX_LEN_0F92_P_2) },
5362 { VEX_LEN_TABLE (VEX_LEN_0F92_P_3) },
5363 },
5364
5365 /* PREFIX_VEX_0F93 */
5366 {
5367 { VEX_LEN_TABLE (VEX_LEN_0F93_P_0) },
5368 { Bad_Opcode },
5369 { VEX_LEN_TABLE (VEX_LEN_0F93_P_2) },
5370 { VEX_LEN_TABLE (VEX_LEN_0F93_P_3) },
5371 },
5372
5373 /* PREFIX_VEX_0F98 */
5374 {
5375 { VEX_LEN_TABLE (VEX_LEN_0F98_P_0) },
5376 { Bad_Opcode },
5377 { VEX_LEN_TABLE (VEX_LEN_0F98_P_2) },
5378 },
5379
5380 /* PREFIX_VEX_0F99 */
5381 {
5382 { VEX_LEN_TABLE (VEX_LEN_0F99_P_0) },
5383 { Bad_Opcode },
5384 { VEX_LEN_TABLE (VEX_LEN_0F99_P_2) },
5385 },
5386
5387 /* PREFIX_VEX_0FC2 */
5388 {
5389 { VEX_W_TABLE (VEX_W_0FC2_P_0) },
5390 { VEX_LEN_TABLE (VEX_LEN_0FC2_P_1) },
5391 { VEX_W_TABLE (VEX_W_0FC2_P_2) },
5392 { VEX_LEN_TABLE (VEX_LEN_0FC2_P_3) },
5393 },
5394
5395 /* PREFIX_VEX_0FC4 */
5396 {
5397 { Bad_Opcode },
5398 { Bad_Opcode },
5399 { VEX_LEN_TABLE (VEX_LEN_0FC4_P_2) },
5400 },
5401
5402 /* PREFIX_VEX_0FC5 */
5403 {
5404 { Bad_Opcode },
5405 { Bad_Opcode },
5406 { VEX_LEN_TABLE (VEX_LEN_0FC5_P_2) },
5407 },
5408
5409 /* PREFIX_VEX_0FD0 */
5410 {
5411 { Bad_Opcode },
5412 { Bad_Opcode },
5413 { VEX_W_TABLE (VEX_W_0FD0_P_2) },
5414 { VEX_W_TABLE (VEX_W_0FD0_P_3) },
5415 },
5416
5417 /* PREFIX_VEX_0FD1 */
5418 {
5419 { Bad_Opcode },
5420 { Bad_Opcode },
5421 { VEX_W_TABLE (VEX_W_0FD1_P_2) },
5422 },
5423
5424 /* PREFIX_VEX_0FD2 */
5425 {
5426 { Bad_Opcode },
5427 { Bad_Opcode },
5428 { VEX_W_TABLE (VEX_W_0FD2_P_2) },
5429 },
5430
5431 /* PREFIX_VEX_0FD3 */
5432 {
5433 { Bad_Opcode },
5434 { Bad_Opcode },
5435 { VEX_W_TABLE (VEX_W_0FD3_P_2) },
5436 },
5437
5438 /* PREFIX_VEX_0FD4 */
5439 {
5440 { Bad_Opcode },
5441 { Bad_Opcode },
5442 { VEX_W_TABLE (VEX_W_0FD4_P_2) },
5443 },
5444
5445 /* PREFIX_VEX_0FD5 */
5446 {
5447 { Bad_Opcode },
5448 { Bad_Opcode },
5449 { VEX_W_TABLE (VEX_W_0FD5_P_2) },
5450 },
5451
5452 /* PREFIX_VEX_0FD6 */
5453 {
5454 { Bad_Opcode },
5455 { Bad_Opcode },
5456 { VEX_LEN_TABLE (VEX_LEN_0FD6_P_2) },
5457 },
5458
5459 /* PREFIX_VEX_0FD7 */
5460 {
5461 { Bad_Opcode },
5462 { Bad_Opcode },
5463 { MOD_TABLE (MOD_VEX_0FD7_PREFIX_2) },
5464 },
5465
5466 /* PREFIX_VEX_0FD8 */
5467 {
5468 { Bad_Opcode },
5469 { Bad_Opcode },
5470 { VEX_W_TABLE (VEX_W_0FD8_P_2) },
5471 },
5472
5473 /* PREFIX_VEX_0FD9 */
5474 {
5475 { Bad_Opcode },
5476 { Bad_Opcode },
5477 { VEX_W_TABLE (VEX_W_0FD9_P_2) },
5478 },
5479
5480 /* PREFIX_VEX_0FDA */
5481 {
5482 { Bad_Opcode },
5483 { Bad_Opcode },
5484 { VEX_W_TABLE (VEX_W_0FDA_P_2) },
5485 },
5486
5487 /* PREFIX_VEX_0FDB */
5488 {
5489 { Bad_Opcode },
5490 { Bad_Opcode },
5491 { VEX_W_TABLE (VEX_W_0FDB_P_2) },
5492 },
5493
5494 /* PREFIX_VEX_0FDC */
5495 {
5496 { Bad_Opcode },
5497 { Bad_Opcode },
5498 { VEX_W_TABLE (VEX_W_0FDC_P_2) },
5499 },
5500
5501 /* PREFIX_VEX_0FDD */
5502 {
5503 { Bad_Opcode },
5504 { Bad_Opcode },
5505 { VEX_W_TABLE (VEX_W_0FDD_P_2) },
5506 },
5507
5508 /* PREFIX_VEX_0FDE */
5509 {
5510 { Bad_Opcode },
5511 { Bad_Opcode },
5512 { VEX_W_TABLE (VEX_W_0FDE_P_2) },
5513 },
5514
5515 /* PREFIX_VEX_0FDF */
5516 {
5517 { Bad_Opcode },
5518 { Bad_Opcode },
5519 { VEX_W_TABLE (VEX_W_0FDF_P_2) },
5520 },
5521
5522 /* PREFIX_VEX_0FE0 */
5523 {
5524 { Bad_Opcode },
5525 { Bad_Opcode },
5526 { VEX_W_TABLE (VEX_W_0FE0_P_2) },
5527 },
5528
5529 /* PREFIX_VEX_0FE1 */
5530 {
5531 { Bad_Opcode },
5532 { Bad_Opcode },
5533 { VEX_W_TABLE (VEX_W_0FE1_P_2) },
5534 },
5535
5536 /* PREFIX_VEX_0FE2 */
5537 {
5538 { Bad_Opcode },
5539 { Bad_Opcode },
5540 { VEX_W_TABLE (VEX_W_0FE2_P_2) },
5541 },
5542
5543 /* PREFIX_VEX_0FE3 */
5544 {
5545 { Bad_Opcode },
5546 { Bad_Opcode },
5547 { VEX_W_TABLE (VEX_W_0FE3_P_2) },
5548 },
5549
5550 /* PREFIX_VEX_0FE4 */
5551 {
5552 { Bad_Opcode },
5553 { Bad_Opcode },
5554 { VEX_W_TABLE (VEX_W_0FE4_P_2) },
5555 },
5556
5557 /* PREFIX_VEX_0FE5 */
5558 {
5559 { Bad_Opcode },
5560 { Bad_Opcode },
5561 { VEX_W_TABLE (VEX_W_0FE5_P_2) },
5562 },
5563
5564 /* PREFIX_VEX_0FE6 */
5565 {
5566 { Bad_Opcode },
5567 { VEX_W_TABLE (VEX_W_0FE6_P_1) },
5568 { VEX_W_TABLE (VEX_W_0FE6_P_2) },
5569 { VEX_W_TABLE (VEX_W_0FE6_P_3) },
5570 },
5571
5572 /* PREFIX_VEX_0FE7 */
5573 {
5574 { Bad_Opcode },
5575 { Bad_Opcode },
5576 { MOD_TABLE (MOD_VEX_0FE7_PREFIX_2) },
5577 },
5578
5579 /* PREFIX_VEX_0FE8 */
5580 {
5581 { Bad_Opcode },
5582 { Bad_Opcode },
5583 { VEX_W_TABLE (VEX_W_0FE8_P_2) },
5584 },
5585
5586 /* PREFIX_VEX_0FE9 */
5587 {
5588 { Bad_Opcode },
5589 { Bad_Opcode },
5590 { VEX_W_TABLE (VEX_W_0FE9_P_2) },
5591 },
5592
5593 /* PREFIX_VEX_0FEA */
5594 {
5595 { Bad_Opcode },
5596 { Bad_Opcode },
5597 { VEX_W_TABLE (VEX_W_0FEA_P_2) },
5598 },
5599
5600 /* PREFIX_VEX_0FEB */
5601 {
5602 { Bad_Opcode },
5603 { Bad_Opcode },
5604 { VEX_W_TABLE (VEX_W_0FEB_P_2) },
5605 },
5606
5607 /* PREFIX_VEX_0FEC */
5608 {
5609 { Bad_Opcode },
5610 { Bad_Opcode },
5611 { VEX_W_TABLE (VEX_W_0FEC_P_2) },
5612 },
5613
5614 /* PREFIX_VEX_0FED */
5615 {
5616 { Bad_Opcode },
5617 { Bad_Opcode },
5618 { VEX_W_TABLE (VEX_W_0FED_P_2) },
5619 },
5620
5621 /* PREFIX_VEX_0FEE */
5622 {
5623 { Bad_Opcode },
5624 { Bad_Opcode },
5625 { VEX_W_TABLE (VEX_W_0FEE_P_2) },
5626 },
5627
5628 /* PREFIX_VEX_0FEF */
5629 {
5630 { Bad_Opcode },
5631 { Bad_Opcode },
5632 { VEX_W_TABLE (VEX_W_0FEF_P_2) },
5633 },
5634
5635 /* PREFIX_VEX_0FF0 */
5636 {
5637 { Bad_Opcode },
5638 { Bad_Opcode },
5639 { Bad_Opcode },
5640 { MOD_TABLE (MOD_VEX_0FF0_PREFIX_3) },
5641 },
5642
5643 /* PREFIX_VEX_0FF1 */
5644 {
5645 { Bad_Opcode },
5646 { Bad_Opcode },
5647 { VEX_W_TABLE (VEX_W_0FF1_P_2) },
5648 },
5649
5650 /* PREFIX_VEX_0FF2 */
5651 {
5652 { Bad_Opcode },
5653 { Bad_Opcode },
5654 { VEX_W_TABLE (VEX_W_0FF2_P_2) },
5655 },
5656
5657 /* PREFIX_VEX_0FF3 */
5658 {
5659 { Bad_Opcode },
5660 { Bad_Opcode },
5661 { VEX_W_TABLE (VEX_W_0FF3_P_2) },
5662 },
5663
5664 /* PREFIX_VEX_0FF4 */
5665 {
5666 { Bad_Opcode },
5667 { Bad_Opcode },
5668 { VEX_W_TABLE (VEX_W_0FF4_P_2) },
5669 },
5670
5671 /* PREFIX_VEX_0FF5 */
5672 {
5673 { Bad_Opcode },
5674 { Bad_Opcode },
5675 { VEX_W_TABLE (VEX_W_0FF5_P_2) },
5676 },
5677
5678 /* PREFIX_VEX_0FF6 */
5679 {
5680 { Bad_Opcode },
5681 { Bad_Opcode },
5682 { VEX_W_TABLE (VEX_W_0FF6_P_2) },
5683 },
5684
5685 /* PREFIX_VEX_0FF7 */
5686 {
5687 { Bad_Opcode },
5688 { Bad_Opcode },
5689 { VEX_LEN_TABLE (VEX_LEN_0FF7_P_2) },
5690 },
5691
5692 /* PREFIX_VEX_0FF8 */
5693 {
5694 { Bad_Opcode },
5695 { Bad_Opcode },
5696 { VEX_W_TABLE (VEX_W_0FF8_P_2) },
5697 },
5698
5699 /* PREFIX_VEX_0FF9 */
5700 {
5701 { Bad_Opcode },
5702 { Bad_Opcode },
5703 { VEX_W_TABLE (VEX_W_0FF9_P_2) },
5704 },
5705
5706 /* PREFIX_VEX_0FFA */
5707 {
5708 { Bad_Opcode },
5709 { Bad_Opcode },
5710 { VEX_W_TABLE (VEX_W_0FFA_P_2) },
5711 },
5712
5713 /* PREFIX_VEX_0FFB */
5714 {
5715 { Bad_Opcode },
5716 { Bad_Opcode },
5717 { VEX_W_TABLE (VEX_W_0FFB_P_2) },
5718 },
5719
5720 /* PREFIX_VEX_0FFC */
5721 {
5722 { Bad_Opcode },
5723 { Bad_Opcode },
5724 { VEX_W_TABLE (VEX_W_0FFC_P_2) },
5725 },
5726
5727 /* PREFIX_VEX_0FFD */
5728 {
5729 { Bad_Opcode },
5730 { Bad_Opcode },
5731 { VEX_W_TABLE (VEX_W_0FFD_P_2) },
5732 },
5733
5734 /* PREFIX_VEX_0FFE */
5735 {
5736 { Bad_Opcode },
5737 { Bad_Opcode },
5738 { VEX_W_TABLE (VEX_W_0FFE_P_2) },
5739 },
5740
5741 /* PREFIX_VEX_0F3800 */
5742 {
5743 { Bad_Opcode },
5744 { Bad_Opcode },
5745 { VEX_W_TABLE (VEX_W_0F3800_P_2) },
5746 },
5747
5748 /* PREFIX_VEX_0F3801 */
5749 {
5750 { Bad_Opcode },
5751 { Bad_Opcode },
5752 { VEX_W_TABLE (VEX_W_0F3801_P_2) },
5753 },
5754
5755 /* PREFIX_VEX_0F3802 */
5756 {
5757 { Bad_Opcode },
5758 { Bad_Opcode },
5759 { VEX_W_TABLE (VEX_W_0F3802_P_2) },
5760 },
5761
5762 /* PREFIX_VEX_0F3803 */
5763 {
5764 { Bad_Opcode },
5765 { Bad_Opcode },
5766 { VEX_W_TABLE (VEX_W_0F3803_P_2) },
5767 },
5768
5769 /* PREFIX_VEX_0F3804 */
5770 {
5771 { Bad_Opcode },
5772 { Bad_Opcode },
5773 { VEX_W_TABLE (VEX_W_0F3804_P_2) },
5774 },
5775
5776 /* PREFIX_VEX_0F3805 */
5777 {
5778 { Bad_Opcode },
5779 { Bad_Opcode },
5780 { VEX_W_TABLE (VEX_W_0F3805_P_2) },
5781 },
5782
5783 /* PREFIX_VEX_0F3806 */
5784 {
5785 { Bad_Opcode },
5786 { Bad_Opcode },
5787 { VEX_W_TABLE (VEX_W_0F3806_P_2) },
5788 },
5789
5790 /* PREFIX_VEX_0F3807 */
5791 {
5792 { Bad_Opcode },
5793 { Bad_Opcode },
5794 { VEX_W_TABLE (VEX_W_0F3807_P_2) },
5795 },
5796
5797 /* PREFIX_VEX_0F3808 */
5798 {
5799 { Bad_Opcode },
5800 { Bad_Opcode },
5801 { VEX_W_TABLE (VEX_W_0F3808_P_2) },
5802 },
5803
5804 /* PREFIX_VEX_0F3809 */
5805 {
5806 { Bad_Opcode },
5807 { Bad_Opcode },
5808 { VEX_W_TABLE (VEX_W_0F3809_P_2) },
5809 },
5810
5811 /* PREFIX_VEX_0F380A */
5812 {
5813 { Bad_Opcode },
5814 { Bad_Opcode },
5815 { VEX_W_TABLE (VEX_W_0F380A_P_2) },
5816 },
5817
5818 /* PREFIX_VEX_0F380B */
5819 {
5820 { Bad_Opcode },
5821 { Bad_Opcode },
5822 { VEX_W_TABLE (VEX_W_0F380B_P_2) },
5823 },
5824
5825 /* PREFIX_VEX_0F380C */
5826 {
5827 { Bad_Opcode },
5828 { Bad_Opcode },
5829 { VEX_W_TABLE (VEX_W_0F380C_P_2) },
5830 },
5831
5832 /* PREFIX_VEX_0F380D */
5833 {
5834 { Bad_Opcode },
5835 { Bad_Opcode },
5836 { VEX_W_TABLE (VEX_W_0F380D_P_2) },
5837 },
5838
5839 /* PREFIX_VEX_0F380E */
5840 {
5841 { Bad_Opcode },
5842 { Bad_Opcode },
5843 { VEX_W_TABLE (VEX_W_0F380E_P_2) },
5844 },
5845
5846 /* PREFIX_VEX_0F380F */
5847 {
5848 { Bad_Opcode },
5849 { Bad_Opcode },
5850 { VEX_W_TABLE (VEX_W_0F380F_P_2) },
5851 },
5852
5853 /* PREFIX_VEX_0F3813 */
5854 {
5855 { Bad_Opcode },
5856 { Bad_Opcode },
5857 { "vcvtph2ps", { XM, EXxmmq }, 0 },
5858 },
5859
5860 /* PREFIX_VEX_0F3816 */
5861 {
5862 { Bad_Opcode },
5863 { Bad_Opcode },
5864 { VEX_LEN_TABLE (VEX_LEN_0F3816_P_2) },
5865 },
5866
5867 /* PREFIX_VEX_0F3817 */
5868 {
5869 { Bad_Opcode },
5870 { Bad_Opcode },
5871 { VEX_W_TABLE (VEX_W_0F3817_P_2) },
5872 },
5873
5874 /* PREFIX_VEX_0F3818 */
5875 {
5876 { Bad_Opcode },
5877 { Bad_Opcode },
5878 { VEX_W_TABLE (VEX_W_0F3818_P_2) },
5879 },
5880
5881 /* PREFIX_VEX_0F3819 */
5882 {
5883 { Bad_Opcode },
5884 { Bad_Opcode },
5885 { VEX_LEN_TABLE (VEX_LEN_0F3819_P_2) },
5886 },
5887
5888 /* PREFIX_VEX_0F381A */
5889 {
5890 { Bad_Opcode },
5891 { Bad_Opcode },
5892 { MOD_TABLE (MOD_VEX_0F381A_PREFIX_2) },
5893 },
5894
5895 /* PREFIX_VEX_0F381C */
5896 {
5897 { Bad_Opcode },
5898 { Bad_Opcode },
5899 { VEX_W_TABLE (VEX_W_0F381C_P_2) },
5900 },
5901
5902 /* PREFIX_VEX_0F381D */
5903 {
5904 { Bad_Opcode },
5905 { Bad_Opcode },
5906 { VEX_W_TABLE (VEX_W_0F381D_P_2) },
5907 },
5908
5909 /* PREFIX_VEX_0F381E */
5910 {
5911 { Bad_Opcode },
5912 { Bad_Opcode },
5913 { VEX_W_TABLE (VEX_W_0F381E_P_2) },
5914 },
5915
5916 /* PREFIX_VEX_0F3820 */
5917 {
5918 { Bad_Opcode },
5919 { Bad_Opcode },
5920 { VEX_W_TABLE (VEX_W_0F3820_P_2) },
5921 },
5922
5923 /* PREFIX_VEX_0F3821 */
5924 {
5925 { Bad_Opcode },
5926 { Bad_Opcode },
5927 { VEX_W_TABLE (VEX_W_0F3821_P_2) },
5928 },
5929
5930 /* PREFIX_VEX_0F3822 */
5931 {
5932 { Bad_Opcode },
5933 { Bad_Opcode },
5934 { VEX_W_TABLE (VEX_W_0F3822_P_2) },
5935 },
5936
5937 /* PREFIX_VEX_0F3823 */
5938 {
5939 { Bad_Opcode },
5940 { Bad_Opcode },
5941 { VEX_W_TABLE (VEX_W_0F3823_P_2) },
5942 },
5943
5944 /* PREFIX_VEX_0F3824 */
5945 {
5946 { Bad_Opcode },
5947 { Bad_Opcode },
5948 { VEX_W_TABLE (VEX_W_0F3824_P_2) },
5949 },
5950
5951 /* PREFIX_VEX_0F3825 */
5952 {
5953 { Bad_Opcode },
5954 { Bad_Opcode },
5955 { VEX_W_TABLE (VEX_W_0F3825_P_2) },
5956 },
5957
5958 /* PREFIX_VEX_0F3828 */
5959 {
5960 { Bad_Opcode },
5961 { Bad_Opcode },
5962 { VEX_W_TABLE (VEX_W_0F3828_P_2) },
5963 },
5964
5965 /* PREFIX_VEX_0F3829 */
5966 {
5967 { Bad_Opcode },
5968 { Bad_Opcode },
5969 { VEX_W_TABLE (VEX_W_0F3829_P_2) },
5970 },
5971
5972 /* PREFIX_VEX_0F382A */
5973 {
5974 { Bad_Opcode },
5975 { Bad_Opcode },
5976 { MOD_TABLE (MOD_VEX_0F382A_PREFIX_2) },
5977 },
5978
5979 /* PREFIX_VEX_0F382B */
5980 {
5981 { Bad_Opcode },
5982 { Bad_Opcode },
5983 { VEX_W_TABLE (VEX_W_0F382B_P_2) },
5984 },
5985
5986 /* PREFIX_VEX_0F382C */
5987 {
5988 { Bad_Opcode },
5989 { Bad_Opcode },
5990 { MOD_TABLE (MOD_VEX_0F382C_PREFIX_2) },
5991 },
5992
5993 /* PREFIX_VEX_0F382D */
5994 {
5995 { Bad_Opcode },
5996 { Bad_Opcode },
5997 { MOD_TABLE (MOD_VEX_0F382D_PREFIX_2) },
5998 },
5999
6000 /* PREFIX_VEX_0F382E */
6001 {
6002 { Bad_Opcode },
6003 { Bad_Opcode },
6004 { MOD_TABLE (MOD_VEX_0F382E_PREFIX_2) },
6005 },
6006
6007 /* PREFIX_VEX_0F382F */
6008 {
6009 { Bad_Opcode },
6010 { Bad_Opcode },
6011 { MOD_TABLE (MOD_VEX_0F382F_PREFIX_2) },
6012 },
6013
6014 /* PREFIX_VEX_0F3830 */
6015 {
6016 { Bad_Opcode },
6017 { Bad_Opcode },
6018 { VEX_W_TABLE (VEX_W_0F3830_P_2) },
6019 },
6020
6021 /* PREFIX_VEX_0F3831 */
6022 {
6023 { Bad_Opcode },
6024 { Bad_Opcode },
6025 { VEX_W_TABLE (VEX_W_0F3831_P_2) },
6026 },
6027
6028 /* PREFIX_VEX_0F3832 */
6029 {
6030 { Bad_Opcode },
6031 { Bad_Opcode },
6032 { VEX_W_TABLE (VEX_W_0F3832_P_2) },
6033 },
6034
6035 /* PREFIX_VEX_0F3833 */
6036 {
6037 { Bad_Opcode },
6038 { Bad_Opcode },
6039 { VEX_W_TABLE (VEX_W_0F3833_P_2) },
6040 },
6041
6042 /* PREFIX_VEX_0F3834 */
6043 {
6044 { Bad_Opcode },
6045 { Bad_Opcode },
6046 { VEX_W_TABLE (VEX_W_0F3834_P_2) },
6047 },
6048
6049 /* PREFIX_VEX_0F3835 */
6050 {
6051 { Bad_Opcode },
6052 { Bad_Opcode },
6053 { VEX_W_TABLE (VEX_W_0F3835_P_2) },
6054 },
6055
6056 /* PREFIX_VEX_0F3836 */
6057 {
6058 { Bad_Opcode },
6059 { Bad_Opcode },
6060 { VEX_LEN_TABLE (VEX_LEN_0F3836_P_2) },
6061 },
6062
6063 /* PREFIX_VEX_0F3837 */
6064 {
6065 { Bad_Opcode },
6066 { Bad_Opcode },
6067 { VEX_W_TABLE (VEX_W_0F3837_P_2) },
6068 },
6069
6070 /* PREFIX_VEX_0F3838 */
6071 {
6072 { Bad_Opcode },
6073 { Bad_Opcode },
6074 { VEX_W_TABLE (VEX_W_0F3838_P_2) },
6075 },
6076
6077 /* PREFIX_VEX_0F3839 */
6078 {
6079 { Bad_Opcode },
6080 { Bad_Opcode },
6081 { VEX_W_TABLE (VEX_W_0F3839_P_2) },
6082 },
6083
6084 /* PREFIX_VEX_0F383A */
6085 {
6086 { Bad_Opcode },
6087 { Bad_Opcode },
6088 { VEX_W_TABLE (VEX_W_0F383A_P_2) },
6089 },
6090
6091 /* PREFIX_VEX_0F383B */
6092 {
6093 { Bad_Opcode },
6094 { Bad_Opcode },
6095 { VEX_W_TABLE (VEX_W_0F383B_P_2) },
6096 },
6097
6098 /* PREFIX_VEX_0F383C */
6099 {
6100 { Bad_Opcode },
6101 { Bad_Opcode },
6102 { VEX_W_TABLE (VEX_W_0F383C_P_2) },
6103 },
6104
6105 /* PREFIX_VEX_0F383D */
6106 {
6107 { Bad_Opcode },
6108 { Bad_Opcode },
6109 { VEX_W_TABLE (VEX_W_0F383D_P_2) },
6110 },
6111
6112 /* PREFIX_VEX_0F383E */
6113 {
6114 { Bad_Opcode },
6115 { Bad_Opcode },
6116 { VEX_W_TABLE (VEX_W_0F383E_P_2) },
6117 },
6118
6119 /* PREFIX_VEX_0F383F */
6120 {
6121 { Bad_Opcode },
6122 { Bad_Opcode },
6123 { VEX_W_TABLE (VEX_W_0F383F_P_2) },
6124 },
6125
6126 /* PREFIX_VEX_0F3840 */
6127 {
6128 { Bad_Opcode },
6129 { Bad_Opcode },
6130 { VEX_W_TABLE (VEX_W_0F3840_P_2) },
6131 },
6132
6133 /* PREFIX_VEX_0F3841 */
6134 {
6135 { Bad_Opcode },
6136 { Bad_Opcode },
6137 { VEX_LEN_TABLE (VEX_LEN_0F3841_P_2) },
6138 },
6139
6140 /* PREFIX_VEX_0F3845 */
6141 {
6142 { Bad_Opcode },
6143 { Bad_Opcode },
6144 { "vpsrlv%LW", { XM, Vex, EXx }, 0 },
6145 },
6146
6147 /* PREFIX_VEX_0F3846 */
6148 {
6149 { Bad_Opcode },
6150 { Bad_Opcode },
6151 { VEX_W_TABLE (VEX_W_0F3846_P_2) },
6152 },
6153
6154 /* PREFIX_VEX_0F3847 */
6155 {
6156 { Bad_Opcode },
6157 { Bad_Opcode },
6158 { "vpsllv%LW", { XM, Vex, EXx }, 0 },
6159 },
6160
6161 /* PREFIX_VEX_0F3858 */
6162 {
6163 { Bad_Opcode },
6164 { Bad_Opcode },
6165 { VEX_W_TABLE (VEX_W_0F3858_P_2) },
6166 },
6167
6168 /* PREFIX_VEX_0F3859 */
6169 {
6170 { Bad_Opcode },
6171 { Bad_Opcode },
6172 { VEX_W_TABLE (VEX_W_0F3859_P_2) },
6173 },
6174
6175 /* PREFIX_VEX_0F385A */
6176 {
6177 { Bad_Opcode },
6178 { Bad_Opcode },
6179 { MOD_TABLE (MOD_VEX_0F385A_PREFIX_2) },
6180 },
6181
6182 /* PREFIX_VEX_0F3878 */
6183 {
6184 { Bad_Opcode },
6185 { Bad_Opcode },
6186 { VEX_W_TABLE (VEX_W_0F3878_P_2) },
6187 },
6188
6189 /* PREFIX_VEX_0F3879 */
6190 {
6191 { Bad_Opcode },
6192 { Bad_Opcode },
6193 { VEX_W_TABLE (VEX_W_0F3879_P_2) },
6194 },
6195
6196 /* PREFIX_VEX_0F388C */
6197 {
6198 { Bad_Opcode },
6199 { Bad_Opcode },
6200 { MOD_TABLE (MOD_VEX_0F388C_PREFIX_2) },
6201 },
6202
6203 /* PREFIX_VEX_0F388E */
6204 {
6205 { Bad_Opcode },
6206 { Bad_Opcode },
6207 { MOD_TABLE (MOD_VEX_0F388E_PREFIX_2) },
6208 },
6209
6210 /* PREFIX_VEX_0F3890 */
6211 {
6212 { Bad_Opcode },
6213 { Bad_Opcode },
6214 { "vpgatherd%LW", { XM, MVexVSIBDWpX, Vex }, 0 },
6215 },
6216
6217 /* PREFIX_VEX_0F3891 */
6218 {
6219 { Bad_Opcode },
6220 { Bad_Opcode },
6221 { "vpgatherq%LW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ }, 0 },
6222 },
6223
6224 /* PREFIX_VEX_0F3892 */
6225 {
6226 { Bad_Opcode },
6227 { Bad_Opcode },
6228 { "vgatherdp%XW", { XM, MVexVSIBDWpX, Vex }, 0 },
6229 },
6230
6231 /* PREFIX_VEX_0F3893 */
6232 {
6233 { Bad_Opcode },
6234 { Bad_Opcode },
6235 { "vgatherqp%XW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ }, 0 },
6236 },
6237
6238 /* PREFIX_VEX_0F3896 */
6239 {
6240 { Bad_Opcode },
6241 { Bad_Opcode },
6242 { "vfmaddsub132p%XW", { XM, Vex, EXx }, 0 },
6243 },
6244
6245 /* PREFIX_VEX_0F3897 */
6246 {
6247 { Bad_Opcode },
6248 { Bad_Opcode },
6249 { "vfmsubadd132p%XW", { XM, Vex, EXx }, 0 },
6250 },
6251
6252 /* PREFIX_VEX_0F3898 */
6253 {
6254 { Bad_Opcode },
6255 { Bad_Opcode },
6256 { "vfmadd132p%XW", { XM, Vex, EXx }, 0 },
6257 },
6258
6259 /* PREFIX_VEX_0F3899 */
6260 {
6261 { Bad_Opcode },
6262 { Bad_Opcode },
6263 { "vfmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
6264 },
6265
6266 /* PREFIX_VEX_0F389A */
6267 {
6268 { Bad_Opcode },
6269 { Bad_Opcode },
6270 { "vfmsub132p%XW", { XM, Vex, EXx }, 0 },
6271 },
6272
6273 /* PREFIX_VEX_0F389B */
6274 {
6275 { Bad_Opcode },
6276 { Bad_Opcode },
6277 { "vfmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
6278 },
6279
6280 /* PREFIX_VEX_0F389C */
6281 {
6282 { Bad_Opcode },
6283 { Bad_Opcode },
6284 { "vfnmadd132p%XW", { XM, Vex, EXx }, 0 },
6285 },
6286
6287 /* PREFIX_VEX_0F389D */
6288 {
6289 { Bad_Opcode },
6290 { Bad_Opcode },
6291 { "vfnmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
6292 },
6293
6294 /* PREFIX_VEX_0F389E */
6295 {
6296 { Bad_Opcode },
6297 { Bad_Opcode },
6298 { "vfnmsub132p%XW", { XM, Vex, EXx }, 0 },
6299 },
6300
6301 /* PREFIX_VEX_0F389F */
6302 {
6303 { Bad_Opcode },
6304 { Bad_Opcode },
6305 { "vfnmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
6306 },
6307
6308 /* PREFIX_VEX_0F38A6 */
6309 {
6310 { Bad_Opcode },
6311 { Bad_Opcode },
6312 { "vfmaddsub213p%XW", { XM, Vex, EXx }, 0 },
6313 { Bad_Opcode },
6314 },
6315
6316 /* PREFIX_VEX_0F38A7 */
6317 {
6318 { Bad_Opcode },
6319 { Bad_Opcode },
6320 { "vfmsubadd213p%XW", { XM, Vex, EXx }, 0 },
6321 },
6322
6323 /* PREFIX_VEX_0F38A8 */
6324 {
6325 { Bad_Opcode },
6326 { Bad_Opcode },
6327 { "vfmadd213p%XW", { XM, Vex, EXx }, 0 },
6328 },
6329
6330 /* PREFIX_VEX_0F38A9 */
6331 {
6332 { Bad_Opcode },
6333 { Bad_Opcode },
6334 { "vfmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
6335 },
6336
6337 /* PREFIX_VEX_0F38AA */
6338 {
6339 { Bad_Opcode },
6340 { Bad_Opcode },
6341 { "vfmsub213p%XW", { XM, Vex, EXx }, 0 },
6342 },
6343
6344 /* PREFIX_VEX_0F38AB */
6345 {
6346 { Bad_Opcode },
6347 { Bad_Opcode },
6348 { "vfmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
6349 },
6350
6351 /* PREFIX_VEX_0F38AC */
6352 {
6353 { Bad_Opcode },
6354 { Bad_Opcode },
6355 { "vfnmadd213p%XW", { XM, Vex, EXx }, 0 },
6356 },
6357
6358 /* PREFIX_VEX_0F38AD */
6359 {
6360 { Bad_Opcode },
6361 { Bad_Opcode },
6362 { "vfnmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
6363 },
6364
6365 /* PREFIX_VEX_0F38AE */
6366 {
6367 { Bad_Opcode },
6368 { Bad_Opcode },
6369 { "vfnmsub213p%XW", { XM, Vex, EXx }, 0 },
6370 },
6371
6372 /* PREFIX_VEX_0F38AF */
6373 {
6374 { Bad_Opcode },
6375 { Bad_Opcode },
6376 { "vfnmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
6377 },
6378
6379 /* PREFIX_VEX_0F38B6 */
6380 {
6381 { Bad_Opcode },
6382 { Bad_Opcode },
6383 { "vfmaddsub231p%XW", { XM, Vex, EXx }, 0 },
6384 },
6385
6386 /* PREFIX_VEX_0F38B7 */
6387 {
6388 { Bad_Opcode },
6389 { Bad_Opcode },
6390 { "vfmsubadd231p%XW", { XM, Vex, EXx }, 0 },
6391 },
6392
6393 /* PREFIX_VEX_0F38B8 */
6394 {
6395 { Bad_Opcode },
6396 { Bad_Opcode },
6397 { "vfmadd231p%XW", { XM, Vex, EXx }, 0 },
6398 },
6399
6400 /* PREFIX_VEX_0F38B9 */
6401 {
6402 { Bad_Opcode },
6403 { Bad_Opcode },
6404 { "vfmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
6405 },
6406
6407 /* PREFIX_VEX_0F38BA */
6408 {
6409 { Bad_Opcode },
6410 { Bad_Opcode },
6411 { "vfmsub231p%XW", { XM, Vex, EXx }, 0 },
6412 },
6413
6414 /* PREFIX_VEX_0F38BB */
6415 {
6416 { Bad_Opcode },
6417 { Bad_Opcode },
6418 { "vfmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
6419 },
6420
6421 /* PREFIX_VEX_0F38BC */
6422 {
6423 { Bad_Opcode },
6424 { Bad_Opcode },
6425 { "vfnmadd231p%XW", { XM, Vex, EXx }, 0 },
6426 },
6427
6428 /* PREFIX_VEX_0F38BD */
6429 {
6430 { Bad_Opcode },
6431 { Bad_Opcode },
6432 { "vfnmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
6433 },
6434
6435 /* PREFIX_VEX_0F38BE */
6436 {
6437 { Bad_Opcode },
6438 { Bad_Opcode },
6439 { "vfnmsub231p%XW", { XM, Vex, EXx }, 0 },
6440 },
6441
6442 /* PREFIX_VEX_0F38BF */
6443 {
6444 { Bad_Opcode },
6445 { Bad_Opcode },
6446 { "vfnmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
6447 },
6448
6449 /* PREFIX_VEX_0F38CF */
6450 {
6451 { Bad_Opcode },
6452 { Bad_Opcode },
6453 { VEX_W_TABLE (VEX_W_0F38CF_P_2) },
6454 },
6455
6456 /* PREFIX_VEX_0F38DB */
6457 {
6458 { Bad_Opcode },
6459 { Bad_Opcode },
6460 { VEX_LEN_TABLE (VEX_LEN_0F38DB_P_2) },
6461 },
6462
6463 /* PREFIX_VEX_0F38DC */
6464 {
6465 { Bad_Opcode },
6466 { Bad_Opcode },
6467 { "vaesenc", { XM, Vex, EXx }, 0 },
6468 },
6469
6470 /* PREFIX_VEX_0F38DD */
6471 {
6472 { Bad_Opcode },
6473 { Bad_Opcode },
6474 { "vaesenclast", { XM, Vex, EXx }, 0 },
6475 },
6476
6477 /* PREFIX_VEX_0F38DE */
6478 {
6479 { Bad_Opcode },
6480 { Bad_Opcode },
6481 { "vaesdec", { XM, Vex, EXx }, 0 },
6482 },
6483
6484 /* PREFIX_VEX_0F38DF */
6485 {
6486 { Bad_Opcode },
6487 { Bad_Opcode },
6488 { "vaesdeclast", { XM, Vex, EXx }, 0 },
6489 },
6490
6491 /* PREFIX_VEX_0F38F2 */
6492 {
6493 { VEX_LEN_TABLE (VEX_LEN_0F38F2_P_0) },
6494 },
6495
6496 /* PREFIX_VEX_0F38F3_REG_1 */
6497 {
6498 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_1_P_0) },
6499 },
6500
6501 /* PREFIX_VEX_0F38F3_REG_2 */
6502 {
6503 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_2_P_0) },
6504 },
6505
6506 /* PREFIX_VEX_0F38F3_REG_3 */
6507 {
6508 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_3_P_0) },
6509 },
6510
6511 /* PREFIX_VEX_0F38F5 */
6512 {
6513 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_0) },
6514 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_1) },
6515 { Bad_Opcode },
6516 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_3) },
6517 },
6518
6519 /* PREFIX_VEX_0F38F6 */
6520 {
6521 { Bad_Opcode },
6522 { Bad_Opcode },
6523 { Bad_Opcode },
6524 { VEX_LEN_TABLE (VEX_LEN_0F38F6_P_3) },
6525 },
6526
6527 /* PREFIX_VEX_0F38F7 */
6528 {
6529 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_0) },
6530 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_1) },
6531 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_2) },
6532 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_3) },
6533 },
6534
6535 /* PREFIX_VEX_0F3A00 */
6536 {
6537 { Bad_Opcode },
6538 { Bad_Opcode },
6539 { VEX_LEN_TABLE (VEX_LEN_0F3A00_P_2) },
6540 },
6541
6542 /* PREFIX_VEX_0F3A01 */
6543 {
6544 { Bad_Opcode },
6545 { Bad_Opcode },
6546 { VEX_LEN_TABLE (VEX_LEN_0F3A01_P_2) },
6547 },
6548
6549 /* PREFIX_VEX_0F3A02 */
6550 {
6551 { Bad_Opcode },
6552 { Bad_Opcode },
6553 { VEX_W_TABLE (VEX_W_0F3A02_P_2) },
6554 },
6555
6556 /* PREFIX_VEX_0F3A04 */
6557 {
6558 { Bad_Opcode },
6559 { Bad_Opcode },
6560 { VEX_W_TABLE (VEX_W_0F3A04_P_2) },
6561 },
6562
6563 /* PREFIX_VEX_0F3A05 */
6564 {
6565 { Bad_Opcode },
6566 { Bad_Opcode },
6567 { VEX_W_TABLE (VEX_W_0F3A05_P_2) },
6568 },
6569
6570 /* PREFIX_VEX_0F3A06 */
6571 {
6572 { Bad_Opcode },
6573 { Bad_Opcode },
6574 { VEX_LEN_TABLE (VEX_LEN_0F3A06_P_2) },
6575 },
6576
6577 /* PREFIX_VEX_0F3A08 */
6578 {
6579 { Bad_Opcode },
6580 { Bad_Opcode },
6581 { VEX_W_TABLE (VEX_W_0F3A08_P_2) },
6582 },
6583
6584 /* PREFIX_VEX_0F3A09 */
6585 {
6586 { Bad_Opcode },
6587 { Bad_Opcode },
6588 { VEX_W_TABLE (VEX_W_0F3A09_P_2) },
6589 },
6590
6591 /* PREFIX_VEX_0F3A0A */
6592 {
6593 { Bad_Opcode },
6594 { Bad_Opcode },
6595 { VEX_LEN_TABLE (VEX_LEN_0F3A0A_P_2) },
6596 },
6597
6598 /* PREFIX_VEX_0F3A0B */
6599 {
6600 { Bad_Opcode },
6601 { Bad_Opcode },
6602 { VEX_LEN_TABLE (VEX_LEN_0F3A0B_P_2) },
6603 },
6604
6605 /* PREFIX_VEX_0F3A0C */
6606 {
6607 { Bad_Opcode },
6608 { Bad_Opcode },
6609 { VEX_W_TABLE (VEX_W_0F3A0C_P_2) },
6610 },
6611
6612 /* PREFIX_VEX_0F3A0D */
6613 {
6614 { Bad_Opcode },
6615 { Bad_Opcode },
6616 { VEX_W_TABLE (VEX_W_0F3A0D_P_2) },
6617 },
6618
6619 /* PREFIX_VEX_0F3A0E */
6620 {
6621 { Bad_Opcode },
6622 { Bad_Opcode },
6623 { VEX_W_TABLE (VEX_W_0F3A0E_P_2) },
6624 },
6625
6626 /* PREFIX_VEX_0F3A0F */
6627 {
6628 { Bad_Opcode },
6629 { Bad_Opcode },
6630 { VEX_W_TABLE (VEX_W_0F3A0F_P_2) },
6631 },
6632
6633 /* PREFIX_VEX_0F3A14 */
6634 {
6635 { Bad_Opcode },
6636 { Bad_Opcode },
6637 { VEX_LEN_TABLE (VEX_LEN_0F3A14_P_2) },
6638 },
6639
6640 /* PREFIX_VEX_0F3A15 */
6641 {
6642 { Bad_Opcode },
6643 { Bad_Opcode },
6644 { VEX_LEN_TABLE (VEX_LEN_0F3A15_P_2) },
6645 },
6646
6647 /* PREFIX_VEX_0F3A16 */
6648 {
6649 { Bad_Opcode },
6650 { Bad_Opcode },
6651 { VEX_LEN_TABLE (VEX_LEN_0F3A16_P_2) },
6652 },
6653
6654 /* PREFIX_VEX_0F3A17 */
6655 {
6656 { Bad_Opcode },
6657 { Bad_Opcode },
6658 { VEX_LEN_TABLE (VEX_LEN_0F3A17_P_2) },
6659 },
6660
6661 /* PREFIX_VEX_0F3A18 */
6662 {
6663 { Bad_Opcode },
6664 { Bad_Opcode },
6665 { VEX_LEN_TABLE (VEX_LEN_0F3A18_P_2) },
6666 },
6667
6668 /* PREFIX_VEX_0F3A19 */
6669 {
6670 { Bad_Opcode },
6671 { Bad_Opcode },
6672 { VEX_LEN_TABLE (VEX_LEN_0F3A19_P_2) },
6673 },
6674
6675 /* PREFIX_VEX_0F3A1D */
6676 {
6677 { Bad_Opcode },
6678 { Bad_Opcode },
6679 { "vcvtps2ph", { EXxmmq, XM, Ib }, 0 },
6680 },
6681
6682 /* PREFIX_VEX_0F3A20 */
6683 {
6684 { Bad_Opcode },
6685 { Bad_Opcode },
6686 { VEX_LEN_TABLE (VEX_LEN_0F3A20_P_2) },
6687 },
6688
6689 /* PREFIX_VEX_0F3A21 */
6690 {
6691 { Bad_Opcode },
6692 { Bad_Opcode },
6693 { VEX_LEN_TABLE (VEX_LEN_0F3A21_P_2) },
6694 },
6695
6696 /* PREFIX_VEX_0F3A22 */
6697 {
6698 { Bad_Opcode },
6699 { Bad_Opcode },
6700 { VEX_LEN_TABLE (VEX_LEN_0F3A22_P_2) },
6701 },
6702
6703 /* PREFIX_VEX_0F3A30 */
6704 {
6705 { Bad_Opcode },
6706 { Bad_Opcode },
6707 { VEX_LEN_TABLE (VEX_LEN_0F3A30_P_2) },
6708 },
6709
6710 /* PREFIX_VEX_0F3A31 */
6711 {
6712 { Bad_Opcode },
6713 { Bad_Opcode },
6714 { VEX_LEN_TABLE (VEX_LEN_0F3A31_P_2) },
6715 },
6716
6717 /* PREFIX_VEX_0F3A32 */
6718 {
6719 { Bad_Opcode },
6720 { Bad_Opcode },
6721 { VEX_LEN_TABLE (VEX_LEN_0F3A32_P_2) },
6722 },
6723
6724 /* PREFIX_VEX_0F3A33 */
6725 {
6726 { Bad_Opcode },
6727 { Bad_Opcode },
6728 { VEX_LEN_TABLE (VEX_LEN_0F3A33_P_2) },
6729 },
6730
6731 /* PREFIX_VEX_0F3A38 */
6732 {
6733 { Bad_Opcode },
6734 { Bad_Opcode },
6735 { VEX_LEN_TABLE (VEX_LEN_0F3A38_P_2) },
6736 },
6737
6738 /* PREFIX_VEX_0F3A39 */
6739 {
6740 { Bad_Opcode },
6741 { Bad_Opcode },
6742 { VEX_LEN_TABLE (VEX_LEN_0F3A39_P_2) },
6743 },
6744
6745 /* PREFIX_VEX_0F3A40 */
6746 {
6747 { Bad_Opcode },
6748 { Bad_Opcode },
6749 { VEX_W_TABLE (VEX_W_0F3A40_P_2) },
6750 },
6751
6752 /* PREFIX_VEX_0F3A41 */
6753 {
6754 { Bad_Opcode },
6755 { Bad_Opcode },
6756 { VEX_LEN_TABLE (VEX_LEN_0F3A41_P_2) },
6757 },
6758
6759 /* PREFIX_VEX_0F3A42 */
6760 {
6761 { Bad_Opcode },
6762 { Bad_Opcode },
6763 { VEX_W_TABLE (VEX_W_0F3A42_P_2) },
6764 },
6765
6766 /* PREFIX_VEX_0F3A44 */
6767 {
6768 { Bad_Opcode },
6769 { Bad_Opcode },
6770 { "vpclmulqdq", { XM, Vex, EXx, PCLMUL }, 0 },
6771 },
6772
6773 /* PREFIX_VEX_0F3A46 */
6774 {
6775 { Bad_Opcode },
6776 { Bad_Opcode },
6777 { VEX_LEN_TABLE (VEX_LEN_0F3A46_P_2) },
6778 },
6779
6780 /* PREFIX_VEX_0F3A48 */
6781 {
6782 { Bad_Opcode },
6783 { Bad_Opcode },
6784 { VEX_W_TABLE (VEX_W_0F3A48_P_2) },
6785 },
6786
6787 /* PREFIX_VEX_0F3A49 */
6788 {
6789 { Bad_Opcode },
6790 { Bad_Opcode },
6791 { VEX_W_TABLE (VEX_W_0F3A49_P_2) },
6792 },
6793
6794 /* PREFIX_VEX_0F3A4A */
6795 {
6796 { Bad_Opcode },
6797 { Bad_Opcode },
6798 { VEX_W_TABLE (VEX_W_0F3A4A_P_2) },
6799 },
6800
6801 /* PREFIX_VEX_0F3A4B */
6802 {
6803 { Bad_Opcode },
6804 { Bad_Opcode },
6805 { VEX_W_TABLE (VEX_W_0F3A4B_P_2) },
6806 },
6807
6808 /* PREFIX_VEX_0F3A4C */
6809 {
6810 { Bad_Opcode },
6811 { Bad_Opcode },
6812 { VEX_W_TABLE (VEX_W_0F3A4C_P_2) },
6813 },
6814
6815 /* PREFIX_VEX_0F3A5C */
6816 {
6817 { Bad_Opcode },
6818 { Bad_Opcode },
6819 { "vfmaddsubps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
6820 },
6821
6822 /* PREFIX_VEX_0F3A5D */
6823 {
6824 { Bad_Opcode },
6825 { Bad_Opcode },
6826 { "vfmaddsubpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
6827 },
6828
6829 /* PREFIX_VEX_0F3A5E */
6830 {
6831 { Bad_Opcode },
6832 { Bad_Opcode },
6833 { "vfmsubaddps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
6834 },
6835
6836 /* PREFIX_VEX_0F3A5F */
6837 {
6838 { Bad_Opcode },
6839 { Bad_Opcode },
6840 { "vfmsubaddpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
6841 },
6842
6843 /* PREFIX_VEX_0F3A60 */
6844 {
6845 { Bad_Opcode },
6846 { Bad_Opcode },
6847 { VEX_LEN_TABLE (VEX_LEN_0F3A60_P_2) },
6848 { Bad_Opcode },
6849 },
6850
6851 /* PREFIX_VEX_0F3A61 */
6852 {
6853 { Bad_Opcode },
6854 { Bad_Opcode },
6855 { VEX_LEN_TABLE (VEX_LEN_0F3A61_P_2) },
6856 },
6857
6858 /* PREFIX_VEX_0F3A62 */
6859 {
6860 { Bad_Opcode },
6861 { Bad_Opcode },
6862 { VEX_LEN_TABLE (VEX_LEN_0F3A62_P_2) },
6863 },
6864
6865 /* PREFIX_VEX_0F3A63 */
6866 {
6867 { Bad_Opcode },
6868 { Bad_Opcode },
6869 { VEX_LEN_TABLE (VEX_LEN_0F3A63_P_2) },
6870 },
6871
6872 /* PREFIX_VEX_0F3A68 */
6873 {
6874 { Bad_Opcode },
6875 { Bad_Opcode },
6876 { "vfmaddps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
6877 },
6878
6879 /* PREFIX_VEX_0F3A69 */
6880 {
6881 { Bad_Opcode },
6882 { Bad_Opcode },
6883 { "vfmaddpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
6884 },
6885
6886 /* PREFIX_VEX_0F3A6A */
6887 {
6888 { Bad_Opcode },
6889 { Bad_Opcode },
6890 { VEX_LEN_TABLE (VEX_LEN_0F3A6A_P_2) },
6891 },
6892
6893 /* PREFIX_VEX_0F3A6B */
6894 {
6895 { Bad_Opcode },
6896 { Bad_Opcode },
6897 { VEX_LEN_TABLE (VEX_LEN_0F3A6B_P_2) },
6898 },
6899
6900 /* PREFIX_VEX_0F3A6C */
6901 {
6902 { Bad_Opcode },
6903 { Bad_Opcode },
6904 { "vfmsubps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
6905 },
6906
6907 /* PREFIX_VEX_0F3A6D */
6908 {
6909 { Bad_Opcode },
6910 { Bad_Opcode },
6911 { "vfmsubpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
6912 },
6913
6914 /* PREFIX_VEX_0F3A6E */
6915 {
6916 { Bad_Opcode },
6917 { Bad_Opcode },
6918 { VEX_LEN_TABLE (VEX_LEN_0F3A6E_P_2) },
6919 },
6920
6921 /* PREFIX_VEX_0F3A6F */
6922 {
6923 { Bad_Opcode },
6924 { Bad_Opcode },
6925 { VEX_LEN_TABLE (VEX_LEN_0F3A6F_P_2) },
6926 },
6927
6928 /* PREFIX_VEX_0F3A78 */
6929 {
6930 { Bad_Opcode },
6931 { Bad_Opcode },
6932 { "vfnmaddps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
6933 },
6934
6935 /* PREFIX_VEX_0F3A79 */
6936 {
6937 { Bad_Opcode },
6938 { Bad_Opcode },
6939 { "vfnmaddpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
6940 },
6941
6942 /* PREFIX_VEX_0F3A7A */
6943 {
6944 { Bad_Opcode },
6945 { Bad_Opcode },
6946 { VEX_LEN_TABLE (VEX_LEN_0F3A7A_P_2) },
6947 },
6948
6949 /* PREFIX_VEX_0F3A7B */
6950 {
6951 { Bad_Opcode },
6952 { Bad_Opcode },
6953 { VEX_LEN_TABLE (VEX_LEN_0F3A7B_P_2) },
6954 },
6955
6956 /* PREFIX_VEX_0F3A7C */
6957 {
6958 { Bad_Opcode },
6959 { Bad_Opcode },
6960 { "vfnmsubps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
6961 { Bad_Opcode },
6962 },
6963
6964 /* PREFIX_VEX_0F3A7D */
6965 {
6966 { Bad_Opcode },
6967 { Bad_Opcode },
6968 { "vfnmsubpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
6969 },
6970
6971 /* PREFIX_VEX_0F3A7E */
6972 {
6973 { Bad_Opcode },
6974 { Bad_Opcode },
6975 { VEX_LEN_TABLE (VEX_LEN_0F3A7E_P_2) },
6976 },
6977
6978 /* PREFIX_VEX_0F3A7F */
6979 {
6980 { Bad_Opcode },
6981 { Bad_Opcode },
6982 { VEX_LEN_TABLE (VEX_LEN_0F3A7F_P_2) },
6983 },
6984
6985 /* PREFIX_VEX_0F3ACE */
6986 {
6987 { Bad_Opcode },
6988 { Bad_Opcode },
6989 { VEX_W_TABLE (VEX_W_0F3ACE_P_2) },
6990 },
6991
6992 /* PREFIX_VEX_0F3ACF */
6993 {
6994 { Bad_Opcode },
6995 { Bad_Opcode },
6996 { VEX_W_TABLE (VEX_W_0F3ACF_P_2) },
6997 },
6998
6999 /* PREFIX_VEX_0F3ADF */
7000 {
7001 { Bad_Opcode },
7002 { Bad_Opcode },
7003 { VEX_LEN_TABLE (VEX_LEN_0F3ADF_P_2) },
7004 },
7005
7006 /* PREFIX_VEX_0F3AF0 */
7007 {
7008 { Bad_Opcode },
7009 { Bad_Opcode },
7010 { Bad_Opcode },
7011 { VEX_LEN_TABLE (VEX_LEN_0F3AF0_P_3) },
7012 },
7013
7014 #define NEED_PREFIX_TABLE
7015 #include "i386-dis-evex.h"
7016 #undef NEED_PREFIX_TABLE
7017 };
7018
7019 static const struct dis386 x86_64_table[][2] = {
7020 /* X86_64_06 */
7021 {
7022 { "pushP", { es }, 0 },
7023 },
7024
7025 /* X86_64_07 */
7026 {
7027 { "popP", { es }, 0 },
7028 },
7029
7030 /* X86_64_0D */
7031 {
7032 { "pushP", { cs }, 0 },
7033 },
7034
7035 /* X86_64_16 */
7036 {
7037 { "pushP", { ss }, 0 },
7038 },
7039
7040 /* X86_64_17 */
7041 {
7042 { "popP", { ss }, 0 },
7043 },
7044
7045 /* X86_64_1E */
7046 {
7047 { "pushP", { ds }, 0 },
7048 },
7049
7050 /* X86_64_1F */
7051 {
7052 { "popP", { ds }, 0 },
7053 },
7054
7055 /* X86_64_27 */
7056 {
7057 { "daa", { XX }, 0 },
7058 },
7059
7060 /* X86_64_2F */
7061 {
7062 { "das", { XX }, 0 },
7063 },
7064
7065 /* X86_64_37 */
7066 {
7067 { "aaa", { XX }, 0 },
7068 },
7069
7070 /* X86_64_3F */
7071 {
7072 { "aas", { XX }, 0 },
7073 },
7074
7075 /* X86_64_60 */
7076 {
7077 { "pushaP", { XX }, 0 },
7078 },
7079
7080 /* X86_64_61 */
7081 {
7082 { "popaP", { XX }, 0 },
7083 },
7084
7085 /* X86_64_62 */
7086 {
7087 { MOD_TABLE (MOD_62_32BIT) },
7088 { EVEX_TABLE (EVEX_0F) },
7089 },
7090
7091 /* X86_64_63 */
7092 {
7093 { "arpl", { Ew, Gw }, 0 },
7094 { "movs{lq|xd}", { Gv, Ed }, 0 },
7095 },
7096
7097 /* X86_64_6D */
7098 {
7099 { "ins{R|}", { Yzr, indirDX }, 0 },
7100 { "ins{G|}", { Yzr, indirDX }, 0 },
7101 },
7102
7103 /* X86_64_6F */
7104 {
7105 { "outs{R|}", { indirDXr, Xz }, 0 },
7106 { "outs{G|}", { indirDXr, Xz }, 0 },
7107 },
7108
7109 /* X86_64_82 */
7110 {
7111 /* Opcode 0x82 is an alias of opcode 0x80 in 32-bit mode. */
7112 { REG_TABLE (REG_80) },
7113 },
7114
7115 /* X86_64_9A */
7116 {
7117 { "Jcall{T|}", { Ap }, 0 },
7118 },
7119
7120 /* X86_64_C4 */
7121 {
7122 { MOD_TABLE (MOD_C4_32BIT) },
7123 { VEX_C4_TABLE (VEX_0F) },
7124 },
7125
7126 /* X86_64_C5 */
7127 {
7128 { MOD_TABLE (MOD_C5_32BIT) },
7129 { VEX_C5_TABLE (VEX_0F) },
7130 },
7131
7132 /* X86_64_CE */
7133 {
7134 { "into", { XX }, 0 },
7135 },
7136
7137 /* X86_64_D4 */
7138 {
7139 { "aam", { Ib }, 0 },
7140 },
7141
7142 /* X86_64_D5 */
7143 {
7144 { "aad", { Ib }, 0 },
7145 },
7146
7147 /* X86_64_E8 */
7148 {
7149 { "callP", { Jv, BND }, 0 },
7150 { "call@", { Jv, BND }, 0 }
7151 },
7152
7153 /* X86_64_E9 */
7154 {
7155 { "jmpP", { Jv, BND }, 0 },
7156 { "jmp@", { Jv, BND }, 0 }
7157 },
7158
7159 /* X86_64_EA */
7160 {
7161 { "Jjmp{T|}", { Ap }, 0 },
7162 },
7163
7164 /* X86_64_0F01_REG_0 */
7165 {
7166 { "sgdt{Q|IQ}", { M }, 0 },
7167 { "sgdt", { M }, 0 },
7168 },
7169
7170 /* X86_64_0F01_REG_1 */
7171 {
7172 { "sidt{Q|IQ}", { M }, 0 },
7173 { "sidt", { M }, 0 },
7174 },
7175
7176 /* X86_64_0F01_REG_2 */
7177 {
7178 { "lgdt{Q|Q}", { M }, 0 },
7179 { "lgdt", { M }, 0 },
7180 },
7181
7182 /* X86_64_0F01_REG_3 */
7183 {
7184 { "lidt{Q|Q}", { M }, 0 },
7185 { "lidt", { M }, 0 },
7186 },
7187 };
7188
7189 static const struct dis386 three_byte_table[][256] = {
7190
7191 /* THREE_BYTE_0F38 */
7192 {
7193 /* 00 */
7194 { "pshufb", { MX, EM }, PREFIX_OPCODE },
7195 { "phaddw", { MX, EM }, PREFIX_OPCODE },
7196 { "phaddd", { MX, EM }, PREFIX_OPCODE },
7197 { "phaddsw", { MX, EM }, PREFIX_OPCODE },
7198 { "pmaddubsw", { MX, EM }, PREFIX_OPCODE },
7199 { "phsubw", { MX, EM }, PREFIX_OPCODE },
7200 { "phsubd", { MX, EM }, PREFIX_OPCODE },
7201 { "phsubsw", { MX, EM }, PREFIX_OPCODE },
7202 /* 08 */
7203 { "psignb", { MX, EM }, PREFIX_OPCODE },
7204 { "psignw", { MX, EM }, PREFIX_OPCODE },
7205 { "psignd", { MX, EM }, PREFIX_OPCODE },
7206 { "pmulhrsw", { MX, EM }, PREFIX_OPCODE },
7207 { Bad_Opcode },
7208 { Bad_Opcode },
7209 { Bad_Opcode },
7210 { Bad_Opcode },
7211 /* 10 */
7212 { PREFIX_TABLE (PREFIX_0F3810) },
7213 { Bad_Opcode },
7214 { Bad_Opcode },
7215 { Bad_Opcode },
7216 { PREFIX_TABLE (PREFIX_0F3814) },
7217 { PREFIX_TABLE (PREFIX_0F3815) },
7218 { Bad_Opcode },
7219 { PREFIX_TABLE (PREFIX_0F3817) },
7220 /* 18 */
7221 { Bad_Opcode },
7222 { Bad_Opcode },
7223 { Bad_Opcode },
7224 { Bad_Opcode },
7225 { "pabsb", { MX, EM }, PREFIX_OPCODE },
7226 { "pabsw", { MX, EM }, PREFIX_OPCODE },
7227 { "pabsd", { MX, EM }, PREFIX_OPCODE },
7228 { Bad_Opcode },
7229 /* 20 */
7230 { PREFIX_TABLE (PREFIX_0F3820) },
7231 { PREFIX_TABLE (PREFIX_0F3821) },
7232 { PREFIX_TABLE (PREFIX_0F3822) },
7233 { PREFIX_TABLE (PREFIX_0F3823) },
7234 { PREFIX_TABLE (PREFIX_0F3824) },
7235 { PREFIX_TABLE (PREFIX_0F3825) },
7236 { Bad_Opcode },
7237 { Bad_Opcode },
7238 /* 28 */
7239 { PREFIX_TABLE (PREFIX_0F3828) },
7240 { PREFIX_TABLE (PREFIX_0F3829) },
7241 { PREFIX_TABLE (PREFIX_0F382A) },
7242 { PREFIX_TABLE (PREFIX_0F382B) },
7243 { Bad_Opcode },
7244 { Bad_Opcode },
7245 { Bad_Opcode },
7246 { Bad_Opcode },
7247 /* 30 */
7248 { PREFIX_TABLE (PREFIX_0F3830) },
7249 { PREFIX_TABLE (PREFIX_0F3831) },
7250 { PREFIX_TABLE (PREFIX_0F3832) },
7251 { PREFIX_TABLE (PREFIX_0F3833) },
7252 { PREFIX_TABLE (PREFIX_0F3834) },
7253 { PREFIX_TABLE (PREFIX_0F3835) },
7254 { Bad_Opcode },
7255 { PREFIX_TABLE (PREFIX_0F3837) },
7256 /* 38 */
7257 { PREFIX_TABLE (PREFIX_0F3838) },
7258 { PREFIX_TABLE (PREFIX_0F3839) },
7259 { PREFIX_TABLE (PREFIX_0F383A) },
7260 { PREFIX_TABLE (PREFIX_0F383B) },
7261 { PREFIX_TABLE (PREFIX_0F383C) },
7262 { PREFIX_TABLE (PREFIX_0F383D) },
7263 { PREFIX_TABLE (PREFIX_0F383E) },
7264 { PREFIX_TABLE (PREFIX_0F383F) },
7265 /* 40 */
7266 { PREFIX_TABLE (PREFIX_0F3840) },
7267 { PREFIX_TABLE (PREFIX_0F3841) },
7268 { Bad_Opcode },
7269 { Bad_Opcode },
7270 { Bad_Opcode },
7271 { Bad_Opcode },
7272 { Bad_Opcode },
7273 { Bad_Opcode },
7274 /* 48 */
7275 { Bad_Opcode },
7276 { Bad_Opcode },
7277 { Bad_Opcode },
7278 { Bad_Opcode },
7279 { Bad_Opcode },
7280 { Bad_Opcode },
7281 { Bad_Opcode },
7282 { Bad_Opcode },
7283 /* 50 */
7284 { Bad_Opcode },
7285 { Bad_Opcode },
7286 { Bad_Opcode },
7287 { Bad_Opcode },
7288 { Bad_Opcode },
7289 { Bad_Opcode },
7290 { Bad_Opcode },
7291 { Bad_Opcode },
7292 /* 58 */
7293 { Bad_Opcode },
7294 { Bad_Opcode },
7295 { Bad_Opcode },
7296 { Bad_Opcode },
7297 { Bad_Opcode },
7298 { Bad_Opcode },
7299 { Bad_Opcode },
7300 { Bad_Opcode },
7301 /* 60 */
7302 { Bad_Opcode },
7303 { Bad_Opcode },
7304 { Bad_Opcode },
7305 { Bad_Opcode },
7306 { Bad_Opcode },
7307 { Bad_Opcode },
7308 { Bad_Opcode },
7309 { Bad_Opcode },
7310 /* 68 */
7311 { Bad_Opcode },
7312 { Bad_Opcode },
7313 { Bad_Opcode },
7314 { Bad_Opcode },
7315 { Bad_Opcode },
7316 { Bad_Opcode },
7317 { Bad_Opcode },
7318 { Bad_Opcode },
7319 /* 70 */
7320 { Bad_Opcode },
7321 { Bad_Opcode },
7322 { Bad_Opcode },
7323 { Bad_Opcode },
7324 { Bad_Opcode },
7325 { Bad_Opcode },
7326 { Bad_Opcode },
7327 { Bad_Opcode },
7328 /* 78 */
7329 { Bad_Opcode },
7330 { Bad_Opcode },
7331 { Bad_Opcode },
7332 { Bad_Opcode },
7333 { Bad_Opcode },
7334 { Bad_Opcode },
7335 { Bad_Opcode },
7336 { Bad_Opcode },
7337 /* 80 */
7338 { PREFIX_TABLE (PREFIX_0F3880) },
7339 { PREFIX_TABLE (PREFIX_0F3881) },
7340 { PREFIX_TABLE (PREFIX_0F3882) },
7341 { Bad_Opcode },
7342 { Bad_Opcode },
7343 { Bad_Opcode },
7344 { Bad_Opcode },
7345 { Bad_Opcode },
7346 /* 88 */
7347 { Bad_Opcode },
7348 { Bad_Opcode },
7349 { Bad_Opcode },
7350 { Bad_Opcode },
7351 { Bad_Opcode },
7352 { Bad_Opcode },
7353 { Bad_Opcode },
7354 { Bad_Opcode },
7355 /* 90 */
7356 { Bad_Opcode },
7357 { Bad_Opcode },
7358 { Bad_Opcode },
7359 { Bad_Opcode },
7360 { Bad_Opcode },
7361 { Bad_Opcode },
7362 { Bad_Opcode },
7363 { Bad_Opcode },
7364 /* 98 */
7365 { Bad_Opcode },
7366 { Bad_Opcode },
7367 { Bad_Opcode },
7368 { Bad_Opcode },
7369 { Bad_Opcode },
7370 { Bad_Opcode },
7371 { Bad_Opcode },
7372 { Bad_Opcode },
7373 /* a0 */
7374 { Bad_Opcode },
7375 { Bad_Opcode },
7376 { Bad_Opcode },
7377 { Bad_Opcode },
7378 { Bad_Opcode },
7379 { Bad_Opcode },
7380 { Bad_Opcode },
7381 { Bad_Opcode },
7382 /* a8 */
7383 { Bad_Opcode },
7384 { Bad_Opcode },
7385 { Bad_Opcode },
7386 { Bad_Opcode },
7387 { Bad_Opcode },
7388 { Bad_Opcode },
7389 { Bad_Opcode },
7390 { Bad_Opcode },
7391 /* b0 */
7392 { Bad_Opcode },
7393 { Bad_Opcode },
7394 { Bad_Opcode },
7395 { Bad_Opcode },
7396 { Bad_Opcode },
7397 { Bad_Opcode },
7398 { Bad_Opcode },
7399 { Bad_Opcode },
7400 /* b8 */
7401 { Bad_Opcode },
7402 { Bad_Opcode },
7403 { Bad_Opcode },
7404 { Bad_Opcode },
7405 { Bad_Opcode },
7406 { Bad_Opcode },
7407 { Bad_Opcode },
7408 { Bad_Opcode },
7409 /* c0 */
7410 { Bad_Opcode },
7411 { Bad_Opcode },
7412 { Bad_Opcode },
7413 { Bad_Opcode },
7414 { Bad_Opcode },
7415 { Bad_Opcode },
7416 { Bad_Opcode },
7417 { Bad_Opcode },
7418 /* c8 */
7419 { PREFIX_TABLE (PREFIX_0F38C8) },
7420 { PREFIX_TABLE (PREFIX_0F38C9) },
7421 { PREFIX_TABLE (PREFIX_0F38CA) },
7422 { PREFIX_TABLE (PREFIX_0F38CB) },
7423 { PREFIX_TABLE (PREFIX_0F38CC) },
7424 { PREFIX_TABLE (PREFIX_0F38CD) },
7425 { Bad_Opcode },
7426 { PREFIX_TABLE (PREFIX_0F38CF) },
7427 /* d0 */
7428 { Bad_Opcode },
7429 { Bad_Opcode },
7430 { Bad_Opcode },
7431 { Bad_Opcode },
7432 { Bad_Opcode },
7433 { Bad_Opcode },
7434 { Bad_Opcode },
7435 { Bad_Opcode },
7436 /* d8 */
7437 { Bad_Opcode },
7438 { Bad_Opcode },
7439 { Bad_Opcode },
7440 { PREFIX_TABLE (PREFIX_0F38DB) },
7441 { PREFIX_TABLE (PREFIX_0F38DC) },
7442 { PREFIX_TABLE (PREFIX_0F38DD) },
7443 { PREFIX_TABLE (PREFIX_0F38DE) },
7444 { PREFIX_TABLE (PREFIX_0F38DF) },
7445 /* e0 */
7446 { Bad_Opcode },
7447 { Bad_Opcode },
7448 { Bad_Opcode },
7449 { Bad_Opcode },
7450 { Bad_Opcode },
7451 { Bad_Opcode },
7452 { Bad_Opcode },
7453 { Bad_Opcode },
7454 /* e8 */
7455 { Bad_Opcode },
7456 { Bad_Opcode },
7457 { Bad_Opcode },
7458 { Bad_Opcode },
7459 { Bad_Opcode },
7460 { Bad_Opcode },
7461 { Bad_Opcode },
7462 { Bad_Opcode },
7463 /* f0 */
7464 { PREFIX_TABLE (PREFIX_0F38F0) },
7465 { PREFIX_TABLE (PREFIX_0F38F1) },
7466 { Bad_Opcode },
7467 { Bad_Opcode },
7468 { Bad_Opcode },
7469 { PREFIX_TABLE (PREFIX_0F38F5) },
7470 { PREFIX_TABLE (PREFIX_0F38F6) },
7471 { Bad_Opcode },
7472 /* f8 */
7473 { PREFIX_TABLE (PREFIX_0F38F8) },
7474 { PREFIX_TABLE (PREFIX_0F38F9) },
7475 { Bad_Opcode },
7476 { Bad_Opcode },
7477 { Bad_Opcode },
7478 { Bad_Opcode },
7479 { Bad_Opcode },
7480 { Bad_Opcode },
7481 },
7482 /* THREE_BYTE_0F3A */
7483 {
7484 /* 00 */
7485 { Bad_Opcode },
7486 { Bad_Opcode },
7487 { Bad_Opcode },
7488 { Bad_Opcode },
7489 { Bad_Opcode },
7490 { Bad_Opcode },
7491 { Bad_Opcode },
7492 { Bad_Opcode },
7493 /* 08 */
7494 { PREFIX_TABLE (PREFIX_0F3A08) },
7495 { PREFIX_TABLE (PREFIX_0F3A09) },
7496 { PREFIX_TABLE (PREFIX_0F3A0A) },
7497 { PREFIX_TABLE (PREFIX_0F3A0B) },
7498 { PREFIX_TABLE (PREFIX_0F3A0C) },
7499 { PREFIX_TABLE (PREFIX_0F3A0D) },
7500 { PREFIX_TABLE (PREFIX_0F3A0E) },
7501 { "palignr", { MX, EM, Ib }, PREFIX_OPCODE },
7502 /* 10 */
7503 { Bad_Opcode },
7504 { Bad_Opcode },
7505 { Bad_Opcode },
7506 { Bad_Opcode },
7507 { PREFIX_TABLE (PREFIX_0F3A14) },
7508 { PREFIX_TABLE (PREFIX_0F3A15) },
7509 { PREFIX_TABLE (PREFIX_0F3A16) },
7510 { PREFIX_TABLE (PREFIX_0F3A17) },
7511 /* 18 */
7512 { Bad_Opcode },
7513 { Bad_Opcode },
7514 { Bad_Opcode },
7515 { Bad_Opcode },
7516 { Bad_Opcode },
7517 { Bad_Opcode },
7518 { Bad_Opcode },
7519 { Bad_Opcode },
7520 /* 20 */
7521 { PREFIX_TABLE (PREFIX_0F3A20) },
7522 { PREFIX_TABLE (PREFIX_0F3A21) },
7523 { PREFIX_TABLE (PREFIX_0F3A22) },
7524 { Bad_Opcode },
7525 { Bad_Opcode },
7526 { Bad_Opcode },
7527 { Bad_Opcode },
7528 { Bad_Opcode },
7529 /* 28 */
7530 { Bad_Opcode },
7531 { Bad_Opcode },
7532 { Bad_Opcode },
7533 { Bad_Opcode },
7534 { Bad_Opcode },
7535 { Bad_Opcode },
7536 { Bad_Opcode },
7537 { Bad_Opcode },
7538 /* 30 */
7539 { Bad_Opcode },
7540 { Bad_Opcode },
7541 { Bad_Opcode },
7542 { Bad_Opcode },
7543 { Bad_Opcode },
7544 { Bad_Opcode },
7545 { Bad_Opcode },
7546 { Bad_Opcode },
7547 /* 38 */
7548 { Bad_Opcode },
7549 { Bad_Opcode },
7550 { Bad_Opcode },
7551 { Bad_Opcode },
7552 { Bad_Opcode },
7553 { Bad_Opcode },
7554 { Bad_Opcode },
7555 { Bad_Opcode },
7556 /* 40 */
7557 { PREFIX_TABLE (PREFIX_0F3A40) },
7558 { PREFIX_TABLE (PREFIX_0F3A41) },
7559 { PREFIX_TABLE (PREFIX_0F3A42) },
7560 { Bad_Opcode },
7561 { PREFIX_TABLE (PREFIX_0F3A44) },
7562 { Bad_Opcode },
7563 { Bad_Opcode },
7564 { Bad_Opcode },
7565 /* 48 */
7566 { Bad_Opcode },
7567 { Bad_Opcode },
7568 { Bad_Opcode },
7569 { Bad_Opcode },
7570 { Bad_Opcode },
7571 { Bad_Opcode },
7572 { Bad_Opcode },
7573 { Bad_Opcode },
7574 /* 50 */
7575 { Bad_Opcode },
7576 { Bad_Opcode },
7577 { Bad_Opcode },
7578 { Bad_Opcode },
7579 { Bad_Opcode },
7580 { Bad_Opcode },
7581 { Bad_Opcode },
7582 { Bad_Opcode },
7583 /* 58 */
7584 { Bad_Opcode },
7585 { Bad_Opcode },
7586 { Bad_Opcode },
7587 { Bad_Opcode },
7588 { Bad_Opcode },
7589 { Bad_Opcode },
7590 { Bad_Opcode },
7591 { Bad_Opcode },
7592 /* 60 */
7593 { PREFIX_TABLE (PREFIX_0F3A60) },
7594 { PREFIX_TABLE (PREFIX_0F3A61) },
7595 { PREFIX_TABLE (PREFIX_0F3A62) },
7596 { PREFIX_TABLE (PREFIX_0F3A63) },
7597 { Bad_Opcode },
7598 { Bad_Opcode },
7599 { Bad_Opcode },
7600 { Bad_Opcode },
7601 /* 68 */
7602 { Bad_Opcode },
7603 { Bad_Opcode },
7604 { Bad_Opcode },
7605 { Bad_Opcode },
7606 { Bad_Opcode },
7607 { Bad_Opcode },
7608 { Bad_Opcode },
7609 { Bad_Opcode },
7610 /* 70 */
7611 { Bad_Opcode },
7612 { Bad_Opcode },
7613 { Bad_Opcode },
7614 { Bad_Opcode },
7615 { Bad_Opcode },
7616 { Bad_Opcode },
7617 { Bad_Opcode },
7618 { Bad_Opcode },
7619 /* 78 */
7620 { Bad_Opcode },
7621 { Bad_Opcode },
7622 { Bad_Opcode },
7623 { Bad_Opcode },
7624 { Bad_Opcode },
7625 { Bad_Opcode },
7626 { Bad_Opcode },
7627 { Bad_Opcode },
7628 /* 80 */
7629 { Bad_Opcode },
7630 { Bad_Opcode },
7631 { Bad_Opcode },
7632 { Bad_Opcode },
7633 { Bad_Opcode },
7634 { Bad_Opcode },
7635 { Bad_Opcode },
7636 { Bad_Opcode },
7637 /* 88 */
7638 { Bad_Opcode },
7639 { Bad_Opcode },
7640 { Bad_Opcode },
7641 { Bad_Opcode },
7642 { Bad_Opcode },
7643 { Bad_Opcode },
7644 { Bad_Opcode },
7645 { Bad_Opcode },
7646 /* 90 */
7647 { Bad_Opcode },
7648 { Bad_Opcode },
7649 { Bad_Opcode },
7650 { Bad_Opcode },
7651 { Bad_Opcode },
7652 { Bad_Opcode },
7653 { Bad_Opcode },
7654 { Bad_Opcode },
7655 /* 98 */
7656 { Bad_Opcode },
7657 { Bad_Opcode },
7658 { Bad_Opcode },
7659 { Bad_Opcode },
7660 { Bad_Opcode },
7661 { Bad_Opcode },
7662 { Bad_Opcode },
7663 { Bad_Opcode },
7664 /* a0 */
7665 { Bad_Opcode },
7666 { Bad_Opcode },
7667 { Bad_Opcode },
7668 { Bad_Opcode },
7669 { Bad_Opcode },
7670 { Bad_Opcode },
7671 { Bad_Opcode },
7672 { Bad_Opcode },
7673 /* a8 */
7674 { Bad_Opcode },
7675 { Bad_Opcode },
7676 { Bad_Opcode },
7677 { Bad_Opcode },
7678 { Bad_Opcode },
7679 { Bad_Opcode },
7680 { Bad_Opcode },
7681 { Bad_Opcode },
7682 /* b0 */
7683 { Bad_Opcode },
7684 { Bad_Opcode },
7685 { Bad_Opcode },
7686 { Bad_Opcode },
7687 { Bad_Opcode },
7688 { Bad_Opcode },
7689 { Bad_Opcode },
7690 { Bad_Opcode },
7691 /* b8 */
7692 { Bad_Opcode },
7693 { Bad_Opcode },
7694 { Bad_Opcode },
7695 { Bad_Opcode },
7696 { Bad_Opcode },
7697 { Bad_Opcode },
7698 { Bad_Opcode },
7699 { Bad_Opcode },
7700 /* c0 */
7701 { Bad_Opcode },
7702 { Bad_Opcode },
7703 { Bad_Opcode },
7704 { Bad_Opcode },
7705 { Bad_Opcode },
7706 { Bad_Opcode },
7707 { Bad_Opcode },
7708 { Bad_Opcode },
7709 /* c8 */
7710 { Bad_Opcode },
7711 { Bad_Opcode },
7712 { Bad_Opcode },
7713 { Bad_Opcode },
7714 { PREFIX_TABLE (PREFIX_0F3ACC) },
7715 { Bad_Opcode },
7716 { PREFIX_TABLE (PREFIX_0F3ACE) },
7717 { PREFIX_TABLE (PREFIX_0F3ACF) },
7718 /* d0 */
7719 { Bad_Opcode },
7720 { Bad_Opcode },
7721 { Bad_Opcode },
7722 { Bad_Opcode },
7723 { Bad_Opcode },
7724 { Bad_Opcode },
7725 { Bad_Opcode },
7726 { Bad_Opcode },
7727 /* d8 */
7728 { Bad_Opcode },
7729 { Bad_Opcode },
7730 { Bad_Opcode },
7731 { Bad_Opcode },
7732 { Bad_Opcode },
7733 { Bad_Opcode },
7734 { Bad_Opcode },
7735 { PREFIX_TABLE (PREFIX_0F3ADF) },
7736 /* e0 */
7737 { Bad_Opcode },
7738 { Bad_Opcode },
7739 { Bad_Opcode },
7740 { Bad_Opcode },
7741 { Bad_Opcode },
7742 { Bad_Opcode },
7743 { Bad_Opcode },
7744 { Bad_Opcode },
7745 /* e8 */
7746 { Bad_Opcode },
7747 { Bad_Opcode },
7748 { Bad_Opcode },
7749 { Bad_Opcode },
7750 { Bad_Opcode },
7751 { Bad_Opcode },
7752 { Bad_Opcode },
7753 { Bad_Opcode },
7754 /* f0 */
7755 { Bad_Opcode },
7756 { Bad_Opcode },
7757 { Bad_Opcode },
7758 { Bad_Opcode },
7759 { Bad_Opcode },
7760 { Bad_Opcode },
7761 { Bad_Opcode },
7762 { Bad_Opcode },
7763 /* f8 */
7764 { Bad_Opcode },
7765 { Bad_Opcode },
7766 { Bad_Opcode },
7767 { Bad_Opcode },
7768 { Bad_Opcode },
7769 { Bad_Opcode },
7770 { Bad_Opcode },
7771 { Bad_Opcode },
7772 },
7773 };
7774
7775 static const struct dis386 xop_table[][256] = {
7776 /* XOP_08 */
7777 {
7778 /* 00 */
7779 { Bad_Opcode },
7780 { Bad_Opcode },
7781 { Bad_Opcode },
7782 { Bad_Opcode },
7783 { Bad_Opcode },
7784 { Bad_Opcode },
7785 { Bad_Opcode },
7786 { Bad_Opcode },
7787 /* 08 */
7788 { Bad_Opcode },
7789 { Bad_Opcode },
7790 { Bad_Opcode },
7791 { Bad_Opcode },
7792 { Bad_Opcode },
7793 { Bad_Opcode },
7794 { Bad_Opcode },
7795 { Bad_Opcode },
7796 /* 10 */
7797 { Bad_Opcode },
7798 { Bad_Opcode },
7799 { Bad_Opcode },
7800 { Bad_Opcode },
7801 { Bad_Opcode },
7802 { Bad_Opcode },
7803 { Bad_Opcode },
7804 { Bad_Opcode },
7805 /* 18 */
7806 { Bad_Opcode },
7807 { Bad_Opcode },
7808 { Bad_Opcode },
7809 { Bad_Opcode },
7810 { Bad_Opcode },
7811 { Bad_Opcode },
7812 { Bad_Opcode },
7813 { Bad_Opcode },
7814 /* 20 */
7815 { Bad_Opcode },
7816 { Bad_Opcode },
7817 { Bad_Opcode },
7818 { Bad_Opcode },
7819 { Bad_Opcode },
7820 { Bad_Opcode },
7821 { Bad_Opcode },
7822 { Bad_Opcode },
7823 /* 28 */
7824 { Bad_Opcode },
7825 { Bad_Opcode },
7826 { Bad_Opcode },
7827 { Bad_Opcode },
7828 { Bad_Opcode },
7829 { Bad_Opcode },
7830 { Bad_Opcode },
7831 { Bad_Opcode },
7832 /* 30 */
7833 { Bad_Opcode },
7834 { Bad_Opcode },
7835 { Bad_Opcode },
7836 { Bad_Opcode },
7837 { Bad_Opcode },
7838 { Bad_Opcode },
7839 { Bad_Opcode },
7840 { Bad_Opcode },
7841 /* 38 */
7842 { Bad_Opcode },
7843 { Bad_Opcode },
7844 { Bad_Opcode },
7845 { Bad_Opcode },
7846 { Bad_Opcode },
7847 { Bad_Opcode },
7848 { Bad_Opcode },
7849 { Bad_Opcode },
7850 /* 40 */
7851 { Bad_Opcode },
7852 { Bad_Opcode },
7853 { Bad_Opcode },
7854 { Bad_Opcode },
7855 { Bad_Opcode },
7856 { Bad_Opcode },
7857 { Bad_Opcode },
7858 { Bad_Opcode },
7859 /* 48 */
7860 { Bad_Opcode },
7861 { Bad_Opcode },
7862 { Bad_Opcode },
7863 { Bad_Opcode },
7864 { Bad_Opcode },
7865 { Bad_Opcode },
7866 { Bad_Opcode },
7867 { Bad_Opcode },
7868 /* 50 */
7869 { Bad_Opcode },
7870 { Bad_Opcode },
7871 { Bad_Opcode },
7872 { Bad_Opcode },
7873 { Bad_Opcode },
7874 { Bad_Opcode },
7875 { Bad_Opcode },
7876 { Bad_Opcode },
7877 /* 58 */
7878 { Bad_Opcode },
7879 { Bad_Opcode },
7880 { Bad_Opcode },
7881 { Bad_Opcode },
7882 { Bad_Opcode },
7883 { Bad_Opcode },
7884 { Bad_Opcode },
7885 { Bad_Opcode },
7886 /* 60 */
7887 { Bad_Opcode },
7888 { Bad_Opcode },
7889 { Bad_Opcode },
7890 { Bad_Opcode },
7891 { Bad_Opcode },
7892 { Bad_Opcode },
7893 { Bad_Opcode },
7894 { Bad_Opcode },
7895 /* 68 */
7896 { Bad_Opcode },
7897 { Bad_Opcode },
7898 { Bad_Opcode },
7899 { Bad_Opcode },
7900 { Bad_Opcode },
7901 { Bad_Opcode },
7902 { Bad_Opcode },
7903 { Bad_Opcode },
7904 /* 70 */
7905 { Bad_Opcode },
7906 { Bad_Opcode },
7907 { Bad_Opcode },
7908 { Bad_Opcode },
7909 { Bad_Opcode },
7910 { Bad_Opcode },
7911 { Bad_Opcode },
7912 { Bad_Opcode },
7913 /* 78 */
7914 { Bad_Opcode },
7915 { Bad_Opcode },
7916 { Bad_Opcode },
7917 { Bad_Opcode },
7918 { Bad_Opcode },
7919 { Bad_Opcode },
7920 { Bad_Opcode },
7921 { Bad_Opcode },
7922 /* 80 */
7923 { Bad_Opcode },
7924 { Bad_Opcode },
7925 { Bad_Opcode },
7926 { Bad_Opcode },
7927 { Bad_Opcode },
7928 { "vpmacssww", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7929 { "vpmacsswd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7930 { "vpmacssdql", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7931 /* 88 */
7932 { Bad_Opcode },
7933 { Bad_Opcode },
7934 { Bad_Opcode },
7935 { Bad_Opcode },
7936 { Bad_Opcode },
7937 { Bad_Opcode },
7938 { "vpmacssdd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7939 { "vpmacssdqh", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7940 /* 90 */
7941 { Bad_Opcode },
7942 { Bad_Opcode },
7943 { Bad_Opcode },
7944 { Bad_Opcode },
7945 { Bad_Opcode },
7946 { "vpmacsww", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7947 { "vpmacswd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7948 { "vpmacsdql", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7949 /* 98 */
7950 { Bad_Opcode },
7951 { Bad_Opcode },
7952 { Bad_Opcode },
7953 { Bad_Opcode },
7954 { Bad_Opcode },
7955 { Bad_Opcode },
7956 { "vpmacsdd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7957 { "vpmacsdqh", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7958 /* a0 */
7959 { Bad_Opcode },
7960 { Bad_Opcode },
7961 { "vpcmov", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7962 { "vpperm", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7963 { Bad_Opcode },
7964 { Bad_Opcode },
7965 { "vpmadcsswd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7966 { Bad_Opcode },
7967 /* a8 */
7968 { Bad_Opcode },
7969 { Bad_Opcode },
7970 { Bad_Opcode },
7971 { Bad_Opcode },
7972 { Bad_Opcode },
7973 { Bad_Opcode },
7974 { Bad_Opcode },
7975 { Bad_Opcode },
7976 /* b0 */
7977 { Bad_Opcode },
7978 { Bad_Opcode },
7979 { Bad_Opcode },
7980 { Bad_Opcode },
7981 { Bad_Opcode },
7982 { Bad_Opcode },
7983 { "vpmadcswd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7984 { Bad_Opcode },
7985 /* b8 */
7986 { Bad_Opcode },
7987 { Bad_Opcode },
7988 { Bad_Opcode },
7989 { Bad_Opcode },
7990 { Bad_Opcode },
7991 { Bad_Opcode },
7992 { Bad_Opcode },
7993 { Bad_Opcode },
7994 /* c0 */
7995 { "vprotb", { XM, Vex_2src_1, Ib }, 0 },
7996 { "vprotw", { XM, Vex_2src_1, Ib }, 0 },
7997 { "vprotd", { XM, Vex_2src_1, Ib }, 0 },
7998 { "vprotq", { XM, Vex_2src_1, Ib }, 0 },
7999 { Bad_Opcode },
8000 { Bad_Opcode },
8001 { Bad_Opcode },
8002 { Bad_Opcode },
8003 /* c8 */
8004 { Bad_Opcode },
8005 { Bad_Opcode },
8006 { Bad_Opcode },
8007 { Bad_Opcode },
8008 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CC) },
8009 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CD) },
8010 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CE) },
8011 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CF) },
8012 /* d0 */
8013 { Bad_Opcode },
8014 { Bad_Opcode },
8015 { Bad_Opcode },
8016 { Bad_Opcode },
8017 { Bad_Opcode },
8018 { Bad_Opcode },
8019 { Bad_Opcode },
8020 { Bad_Opcode },
8021 /* d8 */
8022 { Bad_Opcode },
8023 { Bad_Opcode },
8024 { Bad_Opcode },
8025 { Bad_Opcode },
8026 { Bad_Opcode },
8027 { Bad_Opcode },
8028 { Bad_Opcode },
8029 { Bad_Opcode },
8030 /* e0 */
8031 { Bad_Opcode },
8032 { Bad_Opcode },
8033 { Bad_Opcode },
8034 { Bad_Opcode },
8035 { Bad_Opcode },
8036 { Bad_Opcode },
8037 { Bad_Opcode },
8038 { Bad_Opcode },
8039 /* e8 */
8040 { Bad_Opcode },
8041 { Bad_Opcode },
8042 { Bad_Opcode },
8043 { Bad_Opcode },
8044 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EC) },
8045 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_ED) },
8046 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EE) },
8047 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EF) },
8048 /* f0 */
8049 { Bad_Opcode },
8050 { Bad_Opcode },
8051 { Bad_Opcode },
8052 { Bad_Opcode },
8053 { Bad_Opcode },
8054 { Bad_Opcode },
8055 { Bad_Opcode },
8056 { Bad_Opcode },
8057 /* f8 */
8058 { Bad_Opcode },
8059 { Bad_Opcode },
8060 { Bad_Opcode },
8061 { Bad_Opcode },
8062 { Bad_Opcode },
8063 { Bad_Opcode },
8064 { Bad_Opcode },
8065 { Bad_Opcode },
8066 },
8067 /* XOP_09 */
8068 {
8069 /* 00 */
8070 { Bad_Opcode },
8071 { REG_TABLE (REG_XOP_TBM_01) },
8072 { REG_TABLE (REG_XOP_TBM_02) },
8073 { Bad_Opcode },
8074 { Bad_Opcode },
8075 { Bad_Opcode },
8076 { Bad_Opcode },
8077 { Bad_Opcode },
8078 /* 08 */
8079 { Bad_Opcode },
8080 { Bad_Opcode },
8081 { Bad_Opcode },
8082 { Bad_Opcode },
8083 { Bad_Opcode },
8084 { Bad_Opcode },
8085 { Bad_Opcode },
8086 { Bad_Opcode },
8087 /* 10 */
8088 { Bad_Opcode },
8089 { Bad_Opcode },
8090 { REG_TABLE (REG_XOP_LWPCB) },
8091 { Bad_Opcode },
8092 { Bad_Opcode },
8093 { Bad_Opcode },
8094 { Bad_Opcode },
8095 { Bad_Opcode },
8096 /* 18 */
8097 { Bad_Opcode },
8098 { Bad_Opcode },
8099 { Bad_Opcode },
8100 { Bad_Opcode },
8101 { Bad_Opcode },
8102 { Bad_Opcode },
8103 { Bad_Opcode },
8104 { Bad_Opcode },
8105 /* 20 */
8106 { Bad_Opcode },
8107 { Bad_Opcode },
8108 { Bad_Opcode },
8109 { Bad_Opcode },
8110 { Bad_Opcode },
8111 { Bad_Opcode },
8112 { Bad_Opcode },
8113 { Bad_Opcode },
8114 /* 28 */
8115 { Bad_Opcode },
8116 { Bad_Opcode },
8117 { Bad_Opcode },
8118 { Bad_Opcode },
8119 { Bad_Opcode },
8120 { Bad_Opcode },
8121 { Bad_Opcode },
8122 { Bad_Opcode },
8123 /* 30 */
8124 { Bad_Opcode },
8125 { Bad_Opcode },
8126 { Bad_Opcode },
8127 { Bad_Opcode },
8128 { Bad_Opcode },
8129 { Bad_Opcode },
8130 { Bad_Opcode },
8131 { Bad_Opcode },
8132 /* 38 */
8133 { Bad_Opcode },
8134 { Bad_Opcode },
8135 { Bad_Opcode },
8136 { Bad_Opcode },
8137 { Bad_Opcode },
8138 { Bad_Opcode },
8139 { Bad_Opcode },
8140 { Bad_Opcode },
8141 /* 40 */
8142 { Bad_Opcode },
8143 { Bad_Opcode },
8144 { Bad_Opcode },
8145 { Bad_Opcode },
8146 { Bad_Opcode },
8147 { Bad_Opcode },
8148 { Bad_Opcode },
8149 { Bad_Opcode },
8150 /* 48 */
8151 { Bad_Opcode },
8152 { Bad_Opcode },
8153 { Bad_Opcode },
8154 { Bad_Opcode },
8155 { Bad_Opcode },
8156 { Bad_Opcode },
8157 { Bad_Opcode },
8158 { Bad_Opcode },
8159 /* 50 */
8160 { Bad_Opcode },
8161 { Bad_Opcode },
8162 { Bad_Opcode },
8163 { Bad_Opcode },
8164 { Bad_Opcode },
8165 { Bad_Opcode },
8166 { Bad_Opcode },
8167 { Bad_Opcode },
8168 /* 58 */
8169 { Bad_Opcode },
8170 { Bad_Opcode },
8171 { Bad_Opcode },
8172 { Bad_Opcode },
8173 { Bad_Opcode },
8174 { Bad_Opcode },
8175 { Bad_Opcode },
8176 { Bad_Opcode },
8177 /* 60 */
8178 { Bad_Opcode },
8179 { Bad_Opcode },
8180 { Bad_Opcode },
8181 { Bad_Opcode },
8182 { Bad_Opcode },
8183 { Bad_Opcode },
8184 { Bad_Opcode },
8185 { Bad_Opcode },
8186 /* 68 */
8187 { Bad_Opcode },
8188 { Bad_Opcode },
8189 { Bad_Opcode },
8190 { Bad_Opcode },
8191 { Bad_Opcode },
8192 { Bad_Opcode },
8193 { Bad_Opcode },
8194 { Bad_Opcode },
8195 /* 70 */
8196 { Bad_Opcode },
8197 { Bad_Opcode },
8198 { Bad_Opcode },
8199 { Bad_Opcode },
8200 { Bad_Opcode },
8201 { Bad_Opcode },
8202 { Bad_Opcode },
8203 { Bad_Opcode },
8204 /* 78 */
8205 { Bad_Opcode },
8206 { Bad_Opcode },
8207 { Bad_Opcode },
8208 { Bad_Opcode },
8209 { Bad_Opcode },
8210 { Bad_Opcode },
8211 { Bad_Opcode },
8212 { Bad_Opcode },
8213 /* 80 */
8214 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_80) },
8215 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_81) },
8216 { "vfrczss", { XM, EXd }, 0 },
8217 { "vfrczsd", { XM, EXq }, 0 },
8218 { Bad_Opcode },
8219 { Bad_Opcode },
8220 { Bad_Opcode },
8221 { Bad_Opcode },
8222 /* 88 */
8223 { Bad_Opcode },
8224 { Bad_Opcode },
8225 { Bad_Opcode },
8226 { Bad_Opcode },
8227 { Bad_Opcode },
8228 { Bad_Opcode },
8229 { Bad_Opcode },
8230 { Bad_Opcode },
8231 /* 90 */
8232 { "vprotb", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8233 { "vprotw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8234 { "vprotd", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8235 { "vprotq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8236 { "vpshlb", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8237 { "vpshlw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8238 { "vpshld", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8239 { "vpshlq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8240 /* 98 */
8241 { "vpshab", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8242 { "vpshaw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8243 { "vpshad", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8244 { "vpshaq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8245 { Bad_Opcode },
8246 { Bad_Opcode },
8247 { Bad_Opcode },
8248 { Bad_Opcode },
8249 /* a0 */
8250 { Bad_Opcode },
8251 { Bad_Opcode },
8252 { Bad_Opcode },
8253 { Bad_Opcode },
8254 { Bad_Opcode },
8255 { Bad_Opcode },
8256 { Bad_Opcode },
8257 { Bad_Opcode },
8258 /* a8 */
8259 { Bad_Opcode },
8260 { Bad_Opcode },
8261 { Bad_Opcode },
8262 { Bad_Opcode },
8263 { Bad_Opcode },
8264 { Bad_Opcode },
8265 { Bad_Opcode },
8266 { Bad_Opcode },
8267 /* b0 */
8268 { Bad_Opcode },
8269 { Bad_Opcode },
8270 { Bad_Opcode },
8271 { Bad_Opcode },
8272 { Bad_Opcode },
8273 { Bad_Opcode },
8274 { Bad_Opcode },
8275 { Bad_Opcode },
8276 /* b8 */
8277 { Bad_Opcode },
8278 { Bad_Opcode },
8279 { Bad_Opcode },
8280 { Bad_Opcode },
8281 { Bad_Opcode },
8282 { Bad_Opcode },
8283 { Bad_Opcode },
8284 { Bad_Opcode },
8285 /* c0 */
8286 { Bad_Opcode },
8287 { "vphaddbw", { XM, EXxmm }, 0 },
8288 { "vphaddbd", { XM, EXxmm }, 0 },
8289 { "vphaddbq", { XM, EXxmm }, 0 },
8290 { Bad_Opcode },
8291 { Bad_Opcode },
8292 { "vphaddwd", { XM, EXxmm }, 0 },
8293 { "vphaddwq", { XM, EXxmm }, 0 },
8294 /* c8 */
8295 { Bad_Opcode },
8296 { Bad_Opcode },
8297 { Bad_Opcode },
8298 { "vphadddq", { XM, EXxmm }, 0 },
8299 { Bad_Opcode },
8300 { Bad_Opcode },
8301 { Bad_Opcode },
8302 { Bad_Opcode },
8303 /* d0 */
8304 { Bad_Opcode },
8305 { "vphaddubw", { XM, EXxmm }, 0 },
8306 { "vphaddubd", { XM, EXxmm }, 0 },
8307 { "vphaddubq", { XM, EXxmm }, 0 },
8308 { Bad_Opcode },
8309 { Bad_Opcode },
8310 { "vphadduwd", { XM, EXxmm }, 0 },
8311 { "vphadduwq", { XM, EXxmm }, 0 },
8312 /* d8 */
8313 { Bad_Opcode },
8314 { Bad_Opcode },
8315 { Bad_Opcode },
8316 { "vphaddudq", { XM, EXxmm }, 0 },
8317 { Bad_Opcode },
8318 { Bad_Opcode },
8319 { Bad_Opcode },
8320 { Bad_Opcode },
8321 /* e0 */
8322 { Bad_Opcode },
8323 { "vphsubbw", { XM, EXxmm }, 0 },
8324 { "vphsubwd", { XM, EXxmm }, 0 },
8325 { "vphsubdq", { XM, EXxmm }, 0 },
8326 { Bad_Opcode },
8327 { Bad_Opcode },
8328 { Bad_Opcode },
8329 { Bad_Opcode },
8330 /* e8 */
8331 { Bad_Opcode },
8332 { Bad_Opcode },
8333 { Bad_Opcode },
8334 { Bad_Opcode },
8335 { Bad_Opcode },
8336 { Bad_Opcode },
8337 { Bad_Opcode },
8338 { Bad_Opcode },
8339 /* f0 */
8340 { Bad_Opcode },
8341 { Bad_Opcode },
8342 { Bad_Opcode },
8343 { Bad_Opcode },
8344 { Bad_Opcode },
8345 { Bad_Opcode },
8346 { Bad_Opcode },
8347 { Bad_Opcode },
8348 /* f8 */
8349 { Bad_Opcode },
8350 { Bad_Opcode },
8351 { Bad_Opcode },
8352 { Bad_Opcode },
8353 { Bad_Opcode },
8354 { Bad_Opcode },
8355 { Bad_Opcode },
8356 { Bad_Opcode },
8357 },
8358 /* XOP_0A */
8359 {
8360 /* 00 */
8361 { Bad_Opcode },
8362 { Bad_Opcode },
8363 { Bad_Opcode },
8364 { Bad_Opcode },
8365 { Bad_Opcode },
8366 { Bad_Opcode },
8367 { Bad_Opcode },
8368 { Bad_Opcode },
8369 /* 08 */
8370 { Bad_Opcode },
8371 { Bad_Opcode },
8372 { Bad_Opcode },
8373 { Bad_Opcode },
8374 { Bad_Opcode },
8375 { Bad_Opcode },
8376 { Bad_Opcode },
8377 { Bad_Opcode },
8378 /* 10 */
8379 { "bextr", { Gv, Ev, Iq }, 0 },
8380 { Bad_Opcode },
8381 { REG_TABLE (REG_XOP_LWP) },
8382 { Bad_Opcode },
8383 { Bad_Opcode },
8384 { Bad_Opcode },
8385 { Bad_Opcode },
8386 { Bad_Opcode },
8387 /* 18 */
8388 { Bad_Opcode },
8389 { Bad_Opcode },
8390 { Bad_Opcode },
8391 { Bad_Opcode },
8392 { Bad_Opcode },
8393 { Bad_Opcode },
8394 { Bad_Opcode },
8395 { Bad_Opcode },
8396 /* 20 */
8397 { Bad_Opcode },
8398 { Bad_Opcode },
8399 { Bad_Opcode },
8400 { Bad_Opcode },
8401 { Bad_Opcode },
8402 { Bad_Opcode },
8403 { Bad_Opcode },
8404 { Bad_Opcode },
8405 /* 28 */
8406 { Bad_Opcode },
8407 { Bad_Opcode },
8408 { Bad_Opcode },
8409 { Bad_Opcode },
8410 { Bad_Opcode },
8411 { Bad_Opcode },
8412 { Bad_Opcode },
8413 { Bad_Opcode },
8414 /* 30 */
8415 { Bad_Opcode },
8416 { Bad_Opcode },
8417 { Bad_Opcode },
8418 { Bad_Opcode },
8419 { Bad_Opcode },
8420 { Bad_Opcode },
8421 { Bad_Opcode },
8422 { Bad_Opcode },
8423 /* 38 */
8424 { Bad_Opcode },
8425 { Bad_Opcode },
8426 { Bad_Opcode },
8427 { Bad_Opcode },
8428 { Bad_Opcode },
8429 { Bad_Opcode },
8430 { Bad_Opcode },
8431 { Bad_Opcode },
8432 /* 40 */
8433 { Bad_Opcode },
8434 { Bad_Opcode },
8435 { Bad_Opcode },
8436 { Bad_Opcode },
8437 { Bad_Opcode },
8438 { Bad_Opcode },
8439 { Bad_Opcode },
8440 { Bad_Opcode },
8441 /* 48 */
8442 { Bad_Opcode },
8443 { Bad_Opcode },
8444 { Bad_Opcode },
8445 { Bad_Opcode },
8446 { Bad_Opcode },
8447 { Bad_Opcode },
8448 { Bad_Opcode },
8449 { Bad_Opcode },
8450 /* 50 */
8451 { Bad_Opcode },
8452 { Bad_Opcode },
8453 { Bad_Opcode },
8454 { Bad_Opcode },
8455 { Bad_Opcode },
8456 { Bad_Opcode },
8457 { Bad_Opcode },
8458 { Bad_Opcode },
8459 /* 58 */
8460 { Bad_Opcode },
8461 { Bad_Opcode },
8462 { Bad_Opcode },
8463 { Bad_Opcode },
8464 { Bad_Opcode },
8465 { Bad_Opcode },
8466 { Bad_Opcode },
8467 { Bad_Opcode },
8468 /* 60 */
8469 { Bad_Opcode },
8470 { Bad_Opcode },
8471 { Bad_Opcode },
8472 { Bad_Opcode },
8473 { Bad_Opcode },
8474 { Bad_Opcode },
8475 { Bad_Opcode },
8476 { Bad_Opcode },
8477 /* 68 */
8478 { Bad_Opcode },
8479 { Bad_Opcode },
8480 { Bad_Opcode },
8481 { Bad_Opcode },
8482 { Bad_Opcode },
8483 { Bad_Opcode },
8484 { Bad_Opcode },
8485 { Bad_Opcode },
8486 /* 70 */
8487 { Bad_Opcode },
8488 { Bad_Opcode },
8489 { Bad_Opcode },
8490 { Bad_Opcode },
8491 { Bad_Opcode },
8492 { Bad_Opcode },
8493 { Bad_Opcode },
8494 { Bad_Opcode },
8495 /* 78 */
8496 { Bad_Opcode },
8497 { Bad_Opcode },
8498 { Bad_Opcode },
8499 { Bad_Opcode },
8500 { Bad_Opcode },
8501 { Bad_Opcode },
8502 { Bad_Opcode },
8503 { Bad_Opcode },
8504 /* 80 */
8505 { Bad_Opcode },
8506 { Bad_Opcode },
8507 { Bad_Opcode },
8508 { Bad_Opcode },
8509 { Bad_Opcode },
8510 { Bad_Opcode },
8511 { Bad_Opcode },
8512 { Bad_Opcode },
8513 /* 88 */
8514 { Bad_Opcode },
8515 { Bad_Opcode },
8516 { Bad_Opcode },
8517 { Bad_Opcode },
8518 { Bad_Opcode },
8519 { Bad_Opcode },
8520 { Bad_Opcode },
8521 { Bad_Opcode },
8522 /* 90 */
8523 { Bad_Opcode },
8524 { Bad_Opcode },
8525 { Bad_Opcode },
8526 { Bad_Opcode },
8527 { Bad_Opcode },
8528 { Bad_Opcode },
8529 { Bad_Opcode },
8530 { Bad_Opcode },
8531 /* 98 */
8532 { Bad_Opcode },
8533 { Bad_Opcode },
8534 { Bad_Opcode },
8535 { Bad_Opcode },
8536 { Bad_Opcode },
8537 { Bad_Opcode },
8538 { Bad_Opcode },
8539 { Bad_Opcode },
8540 /* a0 */
8541 { Bad_Opcode },
8542 { Bad_Opcode },
8543 { Bad_Opcode },
8544 { Bad_Opcode },
8545 { Bad_Opcode },
8546 { Bad_Opcode },
8547 { Bad_Opcode },
8548 { Bad_Opcode },
8549 /* a8 */
8550 { Bad_Opcode },
8551 { Bad_Opcode },
8552 { Bad_Opcode },
8553 { Bad_Opcode },
8554 { Bad_Opcode },
8555 { Bad_Opcode },
8556 { Bad_Opcode },
8557 { Bad_Opcode },
8558 /* b0 */
8559 { Bad_Opcode },
8560 { Bad_Opcode },
8561 { Bad_Opcode },
8562 { Bad_Opcode },
8563 { Bad_Opcode },
8564 { Bad_Opcode },
8565 { Bad_Opcode },
8566 { Bad_Opcode },
8567 /* b8 */
8568 { Bad_Opcode },
8569 { Bad_Opcode },
8570 { Bad_Opcode },
8571 { Bad_Opcode },
8572 { Bad_Opcode },
8573 { Bad_Opcode },
8574 { Bad_Opcode },
8575 { Bad_Opcode },
8576 /* c0 */
8577 { Bad_Opcode },
8578 { Bad_Opcode },
8579 { Bad_Opcode },
8580 { Bad_Opcode },
8581 { Bad_Opcode },
8582 { Bad_Opcode },
8583 { Bad_Opcode },
8584 { Bad_Opcode },
8585 /* c8 */
8586 { Bad_Opcode },
8587 { Bad_Opcode },
8588 { Bad_Opcode },
8589 { Bad_Opcode },
8590 { Bad_Opcode },
8591 { Bad_Opcode },
8592 { Bad_Opcode },
8593 { Bad_Opcode },
8594 /* d0 */
8595 { Bad_Opcode },
8596 { Bad_Opcode },
8597 { Bad_Opcode },
8598 { Bad_Opcode },
8599 { Bad_Opcode },
8600 { Bad_Opcode },
8601 { Bad_Opcode },
8602 { Bad_Opcode },
8603 /* d8 */
8604 { Bad_Opcode },
8605 { Bad_Opcode },
8606 { Bad_Opcode },
8607 { Bad_Opcode },
8608 { Bad_Opcode },
8609 { Bad_Opcode },
8610 { Bad_Opcode },
8611 { Bad_Opcode },
8612 /* e0 */
8613 { Bad_Opcode },
8614 { Bad_Opcode },
8615 { Bad_Opcode },
8616 { Bad_Opcode },
8617 { Bad_Opcode },
8618 { Bad_Opcode },
8619 { Bad_Opcode },
8620 { Bad_Opcode },
8621 /* e8 */
8622 { Bad_Opcode },
8623 { Bad_Opcode },
8624 { Bad_Opcode },
8625 { Bad_Opcode },
8626 { Bad_Opcode },
8627 { Bad_Opcode },
8628 { Bad_Opcode },
8629 { Bad_Opcode },
8630 /* f0 */
8631 { Bad_Opcode },
8632 { Bad_Opcode },
8633 { Bad_Opcode },
8634 { Bad_Opcode },
8635 { Bad_Opcode },
8636 { Bad_Opcode },
8637 { Bad_Opcode },
8638 { Bad_Opcode },
8639 /* f8 */
8640 { Bad_Opcode },
8641 { Bad_Opcode },
8642 { Bad_Opcode },
8643 { Bad_Opcode },
8644 { Bad_Opcode },
8645 { Bad_Opcode },
8646 { Bad_Opcode },
8647 { Bad_Opcode },
8648 },
8649 };
8650
8651 static const struct dis386 vex_table[][256] = {
8652 /* VEX_0F */
8653 {
8654 /* 00 */
8655 { Bad_Opcode },
8656 { Bad_Opcode },
8657 { Bad_Opcode },
8658 { Bad_Opcode },
8659 { Bad_Opcode },
8660 { Bad_Opcode },
8661 { Bad_Opcode },
8662 { Bad_Opcode },
8663 /* 08 */
8664 { Bad_Opcode },
8665 { Bad_Opcode },
8666 { Bad_Opcode },
8667 { Bad_Opcode },
8668 { Bad_Opcode },
8669 { Bad_Opcode },
8670 { Bad_Opcode },
8671 { Bad_Opcode },
8672 /* 10 */
8673 { PREFIX_TABLE (PREFIX_VEX_0F10) },
8674 { PREFIX_TABLE (PREFIX_VEX_0F11) },
8675 { PREFIX_TABLE (PREFIX_VEX_0F12) },
8676 { MOD_TABLE (MOD_VEX_0F13) },
8677 { VEX_W_TABLE (VEX_W_0F14) },
8678 { VEX_W_TABLE (VEX_W_0F15) },
8679 { PREFIX_TABLE (PREFIX_VEX_0F16) },
8680 { MOD_TABLE (MOD_VEX_0F17) },
8681 /* 18 */
8682 { Bad_Opcode },
8683 { Bad_Opcode },
8684 { Bad_Opcode },
8685 { Bad_Opcode },
8686 { Bad_Opcode },
8687 { Bad_Opcode },
8688 { Bad_Opcode },
8689 { Bad_Opcode },
8690 /* 20 */
8691 { Bad_Opcode },
8692 { Bad_Opcode },
8693 { Bad_Opcode },
8694 { Bad_Opcode },
8695 { Bad_Opcode },
8696 { Bad_Opcode },
8697 { Bad_Opcode },
8698 { Bad_Opcode },
8699 /* 28 */
8700 { VEX_W_TABLE (VEX_W_0F28) },
8701 { VEX_W_TABLE (VEX_W_0F29) },
8702 { PREFIX_TABLE (PREFIX_VEX_0F2A) },
8703 { MOD_TABLE (MOD_VEX_0F2B) },
8704 { PREFIX_TABLE (PREFIX_VEX_0F2C) },
8705 { PREFIX_TABLE (PREFIX_VEX_0F2D) },
8706 { PREFIX_TABLE (PREFIX_VEX_0F2E) },
8707 { PREFIX_TABLE (PREFIX_VEX_0F2F) },
8708 /* 30 */
8709 { Bad_Opcode },
8710 { Bad_Opcode },
8711 { Bad_Opcode },
8712 { Bad_Opcode },
8713 { Bad_Opcode },
8714 { Bad_Opcode },
8715 { Bad_Opcode },
8716 { Bad_Opcode },
8717 /* 38 */
8718 { Bad_Opcode },
8719 { Bad_Opcode },
8720 { Bad_Opcode },
8721 { Bad_Opcode },
8722 { Bad_Opcode },
8723 { Bad_Opcode },
8724 { Bad_Opcode },
8725 { Bad_Opcode },
8726 /* 40 */
8727 { Bad_Opcode },
8728 { PREFIX_TABLE (PREFIX_VEX_0F41) },
8729 { PREFIX_TABLE (PREFIX_VEX_0F42) },
8730 { Bad_Opcode },
8731 { PREFIX_TABLE (PREFIX_VEX_0F44) },
8732 { PREFIX_TABLE (PREFIX_VEX_0F45) },
8733 { PREFIX_TABLE (PREFIX_VEX_0F46) },
8734 { PREFIX_TABLE (PREFIX_VEX_0F47) },
8735 /* 48 */
8736 { Bad_Opcode },
8737 { Bad_Opcode },
8738 { PREFIX_TABLE (PREFIX_VEX_0F4A) },
8739 { PREFIX_TABLE (PREFIX_VEX_0F4B) },
8740 { Bad_Opcode },
8741 { Bad_Opcode },
8742 { Bad_Opcode },
8743 { Bad_Opcode },
8744 /* 50 */
8745 { MOD_TABLE (MOD_VEX_0F50) },
8746 { PREFIX_TABLE (PREFIX_VEX_0F51) },
8747 { PREFIX_TABLE (PREFIX_VEX_0F52) },
8748 { PREFIX_TABLE (PREFIX_VEX_0F53) },
8749 { "vandpX", { XM, Vex, EXx }, 0 },
8750 { "vandnpX", { XM, Vex, EXx }, 0 },
8751 { "vorpX", { XM, Vex, EXx }, 0 },
8752 { "vxorpX", { XM, Vex, EXx }, 0 },
8753 /* 58 */
8754 { PREFIX_TABLE (PREFIX_VEX_0F58) },
8755 { PREFIX_TABLE (PREFIX_VEX_0F59) },
8756 { PREFIX_TABLE (PREFIX_VEX_0F5A) },
8757 { PREFIX_TABLE (PREFIX_VEX_0F5B) },
8758 { PREFIX_TABLE (PREFIX_VEX_0F5C) },
8759 { PREFIX_TABLE (PREFIX_VEX_0F5D) },
8760 { PREFIX_TABLE (PREFIX_VEX_0F5E) },
8761 { PREFIX_TABLE (PREFIX_VEX_0F5F) },
8762 /* 60 */
8763 { PREFIX_TABLE (PREFIX_VEX_0F60) },
8764 { PREFIX_TABLE (PREFIX_VEX_0F61) },
8765 { PREFIX_TABLE (PREFIX_VEX_0F62) },
8766 { PREFIX_TABLE (PREFIX_VEX_0F63) },
8767 { PREFIX_TABLE (PREFIX_VEX_0F64) },
8768 { PREFIX_TABLE (PREFIX_VEX_0F65) },
8769 { PREFIX_TABLE (PREFIX_VEX_0F66) },
8770 { PREFIX_TABLE (PREFIX_VEX_0F67) },
8771 /* 68 */
8772 { PREFIX_TABLE (PREFIX_VEX_0F68) },
8773 { PREFIX_TABLE (PREFIX_VEX_0F69) },
8774 { PREFIX_TABLE (PREFIX_VEX_0F6A) },
8775 { PREFIX_TABLE (PREFIX_VEX_0F6B) },
8776 { PREFIX_TABLE (PREFIX_VEX_0F6C) },
8777 { PREFIX_TABLE (PREFIX_VEX_0F6D) },
8778 { PREFIX_TABLE (PREFIX_VEX_0F6E) },
8779 { PREFIX_TABLE (PREFIX_VEX_0F6F) },
8780 /* 70 */
8781 { PREFIX_TABLE (PREFIX_VEX_0F70) },
8782 { REG_TABLE (REG_VEX_0F71) },
8783 { REG_TABLE (REG_VEX_0F72) },
8784 { REG_TABLE (REG_VEX_0F73) },
8785 { PREFIX_TABLE (PREFIX_VEX_0F74) },
8786 { PREFIX_TABLE (PREFIX_VEX_0F75) },
8787 { PREFIX_TABLE (PREFIX_VEX_0F76) },
8788 { PREFIX_TABLE (PREFIX_VEX_0F77) },
8789 /* 78 */
8790 { Bad_Opcode },
8791 { Bad_Opcode },
8792 { Bad_Opcode },
8793 { Bad_Opcode },
8794 { PREFIX_TABLE (PREFIX_VEX_0F7C) },
8795 { PREFIX_TABLE (PREFIX_VEX_0F7D) },
8796 { PREFIX_TABLE (PREFIX_VEX_0F7E) },
8797 { PREFIX_TABLE (PREFIX_VEX_0F7F) },
8798 /* 80 */
8799 { Bad_Opcode },
8800 { Bad_Opcode },
8801 { Bad_Opcode },
8802 { Bad_Opcode },
8803 { Bad_Opcode },
8804 { Bad_Opcode },
8805 { Bad_Opcode },
8806 { Bad_Opcode },
8807 /* 88 */
8808 { Bad_Opcode },
8809 { Bad_Opcode },
8810 { Bad_Opcode },
8811 { Bad_Opcode },
8812 { Bad_Opcode },
8813 { Bad_Opcode },
8814 { Bad_Opcode },
8815 { Bad_Opcode },
8816 /* 90 */
8817 { PREFIX_TABLE (PREFIX_VEX_0F90) },
8818 { PREFIX_TABLE (PREFIX_VEX_0F91) },
8819 { PREFIX_TABLE (PREFIX_VEX_0F92) },
8820 { PREFIX_TABLE (PREFIX_VEX_0F93) },
8821 { Bad_Opcode },
8822 { Bad_Opcode },
8823 { Bad_Opcode },
8824 { Bad_Opcode },
8825 /* 98 */
8826 { PREFIX_TABLE (PREFIX_VEX_0F98) },
8827 { PREFIX_TABLE (PREFIX_VEX_0F99) },
8828 { Bad_Opcode },
8829 { Bad_Opcode },
8830 { Bad_Opcode },
8831 { Bad_Opcode },
8832 { Bad_Opcode },
8833 { Bad_Opcode },
8834 /* a0 */
8835 { Bad_Opcode },
8836 { Bad_Opcode },
8837 { Bad_Opcode },
8838 { Bad_Opcode },
8839 { Bad_Opcode },
8840 { Bad_Opcode },
8841 { Bad_Opcode },
8842 { Bad_Opcode },
8843 /* a8 */
8844 { Bad_Opcode },
8845 { Bad_Opcode },
8846 { Bad_Opcode },
8847 { Bad_Opcode },
8848 { Bad_Opcode },
8849 { Bad_Opcode },
8850 { REG_TABLE (REG_VEX_0FAE) },
8851 { Bad_Opcode },
8852 /* b0 */
8853 { Bad_Opcode },
8854 { Bad_Opcode },
8855 { Bad_Opcode },
8856 { Bad_Opcode },
8857 { Bad_Opcode },
8858 { Bad_Opcode },
8859 { Bad_Opcode },
8860 { Bad_Opcode },
8861 /* b8 */
8862 { Bad_Opcode },
8863 { Bad_Opcode },
8864 { Bad_Opcode },
8865 { Bad_Opcode },
8866 { Bad_Opcode },
8867 { Bad_Opcode },
8868 { Bad_Opcode },
8869 { Bad_Opcode },
8870 /* c0 */
8871 { Bad_Opcode },
8872 { Bad_Opcode },
8873 { PREFIX_TABLE (PREFIX_VEX_0FC2) },
8874 { Bad_Opcode },
8875 { PREFIX_TABLE (PREFIX_VEX_0FC4) },
8876 { PREFIX_TABLE (PREFIX_VEX_0FC5) },
8877 { "vshufpX", { XM, Vex, EXx, Ib }, 0 },
8878 { Bad_Opcode },
8879 /* c8 */
8880 { Bad_Opcode },
8881 { Bad_Opcode },
8882 { Bad_Opcode },
8883 { Bad_Opcode },
8884 { Bad_Opcode },
8885 { Bad_Opcode },
8886 { Bad_Opcode },
8887 { Bad_Opcode },
8888 /* d0 */
8889 { PREFIX_TABLE (PREFIX_VEX_0FD0) },
8890 { PREFIX_TABLE (PREFIX_VEX_0FD1) },
8891 { PREFIX_TABLE (PREFIX_VEX_0FD2) },
8892 { PREFIX_TABLE (PREFIX_VEX_0FD3) },
8893 { PREFIX_TABLE (PREFIX_VEX_0FD4) },
8894 { PREFIX_TABLE (PREFIX_VEX_0FD5) },
8895 { PREFIX_TABLE (PREFIX_VEX_0FD6) },
8896 { PREFIX_TABLE (PREFIX_VEX_0FD7) },
8897 /* d8 */
8898 { PREFIX_TABLE (PREFIX_VEX_0FD8) },
8899 { PREFIX_TABLE (PREFIX_VEX_0FD9) },
8900 { PREFIX_TABLE (PREFIX_VEX_0FDA) },
8901 { PREFIX_TABLE (PREFIX_VEX_0FDB) },
8902 { PREFIX_TABLE (PREFIX_VEX_0FDC) },
8903 { PREFIX_TABLE (PREFIX_VEX_0FDD) },
8904 { PREFIX_TABLE (PREFIX_VEX_0FDE) },
8905 { PREFIX_TABLE (PREFIX_VEX_0FDF) },
8906 /* e0 */
8907 { PREFIX_TABLE (PREFIX_VEX_0FE0) },
8908 { PREFIX_TABLE (PREFIX_VEX_0FE1) },
8909 { PREFIX_TABLE (PREFIX_VEX_0FE2) },
8910 { PREFIX_TABLE (PREFIX_VEX_0FE3) },
8911 { PREFIX_TABLE (PREFIX_VEX_0FE4) },
8912 { PREFIX_TABLE (PREFIX_VEX_0FE5) },
8913 { PREFIX_TABLE (PREFIX_VEX_0FE6) },
8914 { PREFIX_TABLE (PREFIX_VEX_0FE7) },
8915 /* e8 */
8916 { PREFIX_TABLE (PREFIX_VEX_0FE8) },
8917 { PREFIX_TABLE (PREFIX_VEX_0FE9) },
8918 { PREFIX_TABLE (PREFIX_VEX_0FEA) },
8919 { PREFIX_TABLE (PREFIX_VEX_0FEB) },
8920 { PREFIX_TABLE (PREFIX_VEX_0FEC) },
8921 { PREFIX_TABLE (PREFIX_VEX_0FED) },
8922 { PREFIX_TABLE (PREFIX_VEX_0FEE) },
8923 { PREFIX_TABLE (PREFIX_VEX_0FEF) },
8924 /* f0 */
8925 { PREFIX_TABLE (PREFIX_VEX_0FF0) },
8926 { PREFIX_TABLE (PREFIX_VEX_0FF1) },
8927 { PREFIX_TABLE (PREFIX_VEX_0FF2) },
8928 { PREFIX_TABLE (PREFIX_VEX_0FF3) },
8929 { PREFIX_TABLE (PREFIX_VEX_0FF4) },
8930 { PREFIX_TABLE (PREFIX_VEX_0FF5) },
8931 { PREFIX_TABLE (PREFIX_VEX_0FF6) },
8932 { PREFIX_TABLE (PREFIX_VEX_0FF7) },
8933 /* f8 */
8934 { PREFIX_TABLE (PREFIX_VEX_0FF8) },
8935 { PREFIX_TABLE (PREFIX_VEX_0FF9) },
8936 { PREFIX_TABLE (PREFIX_VEX_0FFA) },
8937 { PREFIX_TABLE (PREFIX_VEX_0FFB) },
8938 { PREFIX_TABLE (PREFIX_VEX_0FFC) },
8939 { PREFIX_TABLE (PREFIX_VEX_0FFD) },
8940 { PREFIX_TABLE (PREFIX_VEX_0FFE) },
8941 { Bad_Opcode },
8942 },
8943 /* VEX_0F38 */
8944 {
8945 /* 00 */
8946 { PREFIX_TABLE (PREFIX_VEX_0F3800) },
8947 { PREFIX_TABLE (PREFIX_VEX_0F3801) },
8948 { PREFIX_TABLE (PREFIX_VEX_0F3802) },
8949 { PREFIX_TABLE (PREFIX_VEX_0F3803) },
8950 { PREFIX_TABLE (PREFIX_VEX_0F3804) },
8951 { PREFIX_TABLE (PREFIX_VEX_0F3805) },
8952 { PREFIX_TABLE (PREFIX_VEX_0F3806) },
8953 { PREFIX_TABLE (PREFIX_VEX_0F3807) },
8954 /* 08 */
8955 { PREFIX_TABLE (PREFIX_VEX_0F3808) },
8956 { PREFIX_TABLE (PREFIX_VEX_0F3809) },
8957 { PREFIX_TABLE (PREFIX_VEX_0F380A) },
8958 { PREFIX_TABLE (PREFIX_VEX_0F380B) },
8959 { PREFIX_TABLE (PREFIX_VEX_0F380C) },
8960 { PREFIX_TABLE (PREFIX_VEX_0F380D) },
8961 { PREFIX_TABLE (PREFIX_VEX_0F380E) },
8962 { PREFIX_TABLE (PREFIX_VEX_0F380F) },
8963 /* 10 */
8964 { Bad_Opcode },
8965 { Bad_Opcode },
8966 { Bad_Opcode },
8967 { PREFIX_TABLE (PREFIX_VEX_0F3813) },
8968 { Bad_Opcode },
8969 { Bad_Opcode },
8970 { PREFIX_TABLE (PREFIX_VEX_0F3816) },
8971 { PREFIX_TABLE (PREFIX_VEX_0F3817) },
8972 /* 18 */
8973 { PREFIX_TABLE (PREFIX_VEX_0F3818) },
8974 { PREFIX_TABLE (PREFIX_VEX_0F3819) },
8975 { PREFIX_TABLE (PREFIX_VEX_0F381A) },
8976 { Bad_Opcode },
8977 { PREFIX_TABLE (PREFIX_VEX_0F381C) },
8978 { PREFIX_TABLE (PREFIX_VEX_0F381D) },
8979 { PREFIX_TABLE (PREFIX_VEX_0F381E) },
8980 { Bad_Opcode },
8981 /* 20 */
8982 { PREFIX_TABLE (PREFIX_VEX_0F3820) },
8983 { PREFIX_TABLE (PREFIX_VEX_0F3821) },
8984 { PREFIX_TABLE (PREFIX_VEX_0F3822) },
8985 { PREFIX_TABLE (PREFIX_VEX_0F3823) },
8986 { PREFIX_TABLE (PREFIX_VEX_0F3824) },
8987 { PREFIX_TABLE (PREFIX_VEX_0F3825) },
8988 { Bad_Opcode },
8989 { Bad_Opcode },
8990 /* 28 */
8991 { PREFIX_TABLE (PREFIX_VEX_0F3828) },
8992 { PREFIX_TABLE (PREFIX_VEX_0F3829) },
8993 { PREFIX_TABLE (PREFIX_VEX_0F382A) },
8994 { PREFIX_TABLE (PREFIX_VEX_0F382B) },
8995 { PREFIX_TABLE (PREFIX_VEX_0F382C) },
8996 { PREFIX_TABLE (PREFIX_VEX_0F382D) },
8997 { PREFIX_TABLE (PREFIX_VEX_0F382E) },
8998 { PREFIX_TABLE (PREFIX_VEX_0F382F) },
8999 /* 30 */
9000 { PREFIX_TABLE (PREFIX_VEX_0F3830) },
9001 { PREFIX_TABLE (PREFIX_VEX_0F3831) },
9002 { PREFIX_TABLE (PREFIX_VEX_0F3832) },
9003 { PREFIX_TABLE (PREFIX_VEX_0F3833) },
9004 { PREFIX_TABLE (PREFIX_VEX_0F3834) },
9005 { PREFIX_TABLE (PREFIX_VEX_0F3835) },
9006 { PREFIX_TABLE (PREFIX_VEX_0F3836) },
9007 { PREFIX_TABLE (PREFIX_VEX_0F3837) },
9008 /* 38 */
9009 { PREFIX_TABLE (PREFIX_VEX_0F3838) },
9010 { PREFIX_TABLE (PREFIX_VEX_0F3839) },
9011 { PREFIX_TABLE (PREFIX_VEX_0F383A) },
9012 { PREFIX_TABLE (PREFIX_VEX_0F383B) },
9013 { PREFIX_TABLE (PREFIX_VEX_0F383C) },
9014 { PREFIX_TABLE (PREFIX_VEX_0F383D) },
9015 { PREFIX_TABLE (PREFIX_VEX_0F383E) },
9016 { PREFIX_TABLE (PREFIX_VEX_0F383F) },
9017 /* 40 */
9018 { PREFIX_TABLE (PREFIX_VEX_0F3840) },
9019 { PREFIX_TABLE (PREFIX_VEX_0F3841) },
9020 { Bad_Opcode },
9021 { Bad_Opcode },
9022 { Bad_Opcode },
9023 { PREFIX_TABLE (PREFIX_VEX_0F3845) },
9024 { PREFIX_TABLE (PREFIX_VEX_0F3846) },
9025 { PREFIX_TABLE (PREFIX_VEX_0F3847) },
9026 /* 48 */
9027 { Bad_Opcode },
9028 { Bad_Opcode },
9029 { Bad_Opcode },
9030 { Bad_Opcode },
9031 { Bad_Opcode },
9032 { Bad_Opcode },
9033 { Bad_Opcode },
9034 { Bad_Opcode },
9035 /* 50 */
9036 { Bad_Opcode },
9037 { Bad_Opcode },
9038 { Bad_Opcode },
9039 { Bad_Opcode },
9040 { Bad_Opcode },
9041 { Bad_Opcode },
9042 { Bad_Opcode },
9043 { Bad_Opcode },
9044 /* 58 */
9045 { PREFIX_TABLE (PREFIX_VEX_0F3858) },
9046 { PREFIX_TABLE (PREFIX_VEX_0F3859) },
9047 { PREFIX_TABLE (PREFIX_VEX_0F385A) },
9048 { Bad_Opcode },
9049 { Bad_Opcode },
9050 { Bad_Opcode },
9051 { Bad_Opcode },
9052 { Bad_Opcode },
9053 /* 60 */
9054 { Bad_Opcode },
9055 { Bad_Opcode },
9056 { Bad_Opcode },
9057 { Bad_Opcode },
9058 { Bad_Opcode },
9059 { Bad_Opcode },
9060 { Bad_Opcode },
9061 { Bad_Opcode },
9062 /* 68 */
9063 { Bad_Opcode },
9064 { Bad_Opcode },
9065 { Bad_Opcode },
9066 { Bad_Opcode },
9067 { Bad_Opcode },
9068 { Bad_Opcode },
9069 { Bad_Opcode },
9070 { Bad_Opcode },
9071 /* 70 */
9072 { Bad_Opcode },
9073 { Bad_Opcode },
9074 { Bad_Opcode },
9075 { Bad_Opcode },
9076 { Bad_Opcode },
9077 { Bad_Opcode },
9078 { Bad_Opcode },
9079 { Bad_Opcode },
9080 /* 78 */
9081 { PREFIX_TABLE (PREFIX_VEX_0F3878) },
9082 { PREFIX_TABLE (PREFIX_VEX_0F3879) },
9083 { Bad_Opcode },
9084 { Bad_Opcode },
9085 { Bad_Opcode },
9086 { Bad_Opcode },
9087 { Bad_Opcode },
9088 { Bad_Opcode },
9089 /* 80 */
9090 { Bad_Opcode },
9091 { Bad_Opcode },
9092 { Bad_Opcode },
9093 { Bad_Opcode },
9094 { Bad_Opcode },
9095 { Bad_Opcode },
9096 { Bad_Opcode },
9097 { Bad_Opcode },
9098 /* 88 */
9099 { Bad_Opcode },
9100 { Bad_Opcode },
9101 { Bad_Opcode },
9102 { Bad_Opcode },
9103 { PREFIX_TABLE (PREFIX_VEX_0F388C) },
9104 { Bad_Opcode },
9105 { PREFIX_TABLE (PREFIX_VEX_0F388E) },
9106 { Bad_Opcode },
9107 /* 90 */
9108 { PREFIX_TABLE (PREFIX_VEX_0F3890) },
9109 { PREFIX_TABLE (PREFIX_VEX_0F3891) },
9110 { PREFIX_TABLE (PREFIX_VEX_0F3892) },
9111 { PREFIX_TABLE (PREFIX_VEX_0F3893) },
9112 { Bad_Opcode },
9113 { Bad_Opcode },
9114 { PREFIX_TABLE (PREFIX_VEX_0F3896) },
9115 { PREFIX_TABLE (PREFIX_VEX_0F3897) },
9116 /* 98 */
9117 { PREFIX_TABLE (PREFIX_VEX_0F3898) },
9118 { PREFIX_TABLE (PREFIX_VEX_0F3899) },
9119 { PREFIX_TABLE (PREFIX_VEX_0F389A) },
9120 { PREFIX_TABLE (PREFIX_VEX_0F389B) },
9121 { PREFIX_TABLE (PREFIX_VEX_0F389C) },
9122 { PREFIX_TABLE (PREFIX_VEX_0F389D) },
9123 { PREFIX_TABLE (PREFIX_VEX_0F389E) },
9124 { PREFIX_TABLE (PREFIX_VEX_0F389F) },
9125 /* a0 */
9126 { Bad_Opcode },
9127 { Bad_Opcode },
9128 { Bad_Opcode },
9129 { Bad_Opcode },
9130 { Bad_Opcode },
9131 { Bad_Opcode },
9132 { PREFIX_TABLE (PREFIX_VEX_0F38A6) },
9133 { PREFIX_TABLE (PREFIX_VEX_0F38A7) },
9134 /* a8 */
9135 { PREFIX_TABLE (PREFIX_VEX_0F38A8) },
9136 { PREFIX_TABLE (PREFIX_VEX_0F38A9) },
9137 { PREFIX_TABLE (PREFIX_VEX_0F38AA) },
9138 { PREFIX_TABLE (PREFIX_VEX_0F38AB) },
9139 { PREFIX_TABLE (PREFIX_VEX_0F38AC) },
9140 { PREFIX_TABLE (PREFIX_VEX_0F38AD) },
9141 { PREFIX_TABLE (PREFIX_VEX_0F38AE) },
9142 { PREFIX_TABLE (PREFIX_VEX_0F38AF) },
9143 /* b0 */
9144 { Bad_Opcode },
9145 { Bad_Opcode },
9146 { Bad_Opcode },
9147 { Bad_Opcode },
9148 { Bad_Opcode },
9149 { Bad_Opcode },
9150 { PREFIX_TABLE (PREFIX_VEX_0F38B6) },
9151 { PREFIX_TABLE (PREFIX_VEX_0F38B7) },
9152 /* b8 */
9153 { PREFIX_TABLE (PREFIX_VEX_0F38B8) },
9154 { PREFIX_TABLE (PREFIX_VEX_0F38B9) },
9155 { PREFIX_TABLE (PREFIX_VEX_0F38BA) },
9156 { PREFIX_TABLE (PREFIX_VEX_0F38BB) },
9157 { PREFIX_TABLE (PREFIX_VEX_0F38BC) },
9158 { PREFIX_TABLE (PREFIX_VEX_0F38BD) },
9159 { PREFIX_TABLE (PREFIX_VEX_0F38BE) },
9160 { PREFIX_TABLE (PREFIX_VEX_0F38BF) },
9161 /* c0 */
9162 { Bad_Opcode },
9163 { Bad_Opcode },
9164 { Bad_Opcode },
9165 { Bad_Opcode },
9166 { Bad_Opcode },
9167 { Bad_Opcode },
9168 { Bad_Opcode },
9169 { Bad_Opcode },
9170 /* c8 */
9171 { Bad_Opcode },
9172 { Bad_Opcode },
9173 { Bad_Opcode },
9174 { Bad_Opcode },
9175 { Bad_Opcode },
9176 { Bad_Opcode },
9177 { Bad_Opcode },
9178 { PREFIX_TABLE (PREFIX_VEX_0F38CF) },
9179 /* d0 */
9180 { Bad_Opcode },
9181 { Bad_Opcode },
9182 { Bad_Opcode },
9183 { Bad_Opcode },
9184 { Bad_Opcode },
9185 { Bad_Opcode },
9186 { Bad_Opcode },
9187 { Bad_Opcode },
9188 /* d8 */
9189 { Bad_Opcode },
9190 { Bad_Opcode },
9191 { Bad_Opcode },
9192 { PREFIX_TABLE (PREFIX_VEX_0F38DB) },
9193 { PREFIX_TABLE (PREFIX_VEX_0F38DC) },
9194 { PREFIX_TABLE (PREFIX_VEX_0F38DD) },
9195 { PREFIX_TABLE (PREFIX_VEX_0F38DE) },
9196 { PREFIX_TABLE (PREFIX_VEX_0F38DF) },
9197 /* e0 */
9198 { Bad_Opcode },
9199 { Bad_Opcode },
9200 { Bad_Opcode },
9201 { Bad_Opcode },
9202 { Bad_Opcode },
9203 { Bad_Opcode },
9204 { Bad_Opcode },
9205 { Bad_Opcode },
9206 /* e8 */
9207 { Bad_Opcode },
9208 { Bad_Opcode },
9209 { Bad_Opcode },
9210 { Bad_Opcode },
9211 { Bad_Opcode },
9212 { Bad_Opcode },
9213 { Bad_Opcode },
9214 { Bad_Opcode },
9215 /* f0 */
9216 { Bad_Opcode },
9217 { Bad_Opcode },
9218 { PREFIX_TABLE (PREFIX_VEX_0F38F2) },
9219 { REG_TABLE (REG_VEX_0F38F3) },
9220 { Bad_Opcode },
9221 { PREFIX_TABLE (PREFIX_VEX_0F38F5) },
9222 { PREFIX_TABLE (PREFIX_VEX_0F38F6) },
9223 { PREFIX_TABLE (PREFIX_VEX_0F38F7) },
9224 /* f8 */
9225 { Bad_Opcode },
9226 { Bad_Opcode },
9227 { Bad_Opcode },
9228 { Bad_Opcode },
9229 { Bad_Opcode },
9230 { Bad_Opcode },
9231 { Bad_Opcode },
9232 { Bad_Opcode },
9233 },
9234 /* VEX_0F3A */
9235 {
9236 /* 00 */
9237 { PREFIX_TABLE (PREFIX_VEX_0F3A00) },
9238 { PREFIX_TABLE (PREFIX_VEX_0F3A01) },
9239 { PREFIX_TABLE (PREFIX_VEX_0F3A02) },
9240 { Bad_Opcode },
9241 { PREFIX_TABLE (PREFIX_VEX_0F3A04) },
9242 { PREFIX_TABLE (PREFIX_VEX_0F3A05) },
9243 { PREFIX_TABLE (PREFIX_VEX_0F3A06) },
9244 { Bad_Opcode },
9245 /* 08 */
9246 { PREFIX_TABLE (PREFIX_VEX_0F3A08) },
9247 { PREFIX_TABLE (PREFIX_VEX_0F3A09) },
9248 { PREFIX_TABLE (PREFIX_VEX_0F3A0A) },
9249 { PREFIX_TABLE (PREFIX_VEX_0F3A0B) },
9250 { PREFIX_TABLE (PREFIX_VEX_0F3A0C) },
9251 { PREFIX_TABLE (PREFIX_VEX_0F3A0D) },
9252 { PREFIX_TABLE (PREFIX_VEX_0F3A0E) },
9253 { PREFIX_TABLE (PREFIX_VEX_0F3A0F) },
9254 /* 10 */
9255 { Bad_Opcode },
9256 { Bad_Opcode },
9257 { Bad_Opcode },
9258 { Bad_Opcode },
9259 { PREFIX_TABLE (PREFIX_VEX_0F3A14) },
9260 { PREFIX_TABLE (PREFIX_VEX_0F3A15) },
9261 { PREFIX_TABLE (PREFIX_VEX_0F3A16) },
9262 { PREFIX_TABLE (PREFIX_VEX_0F3A17) },
9263 /* 18 */
9264 { PREFIX_TABLE (PREFIX_VEX_0F3A18) },
9265 { PREFIX_TABLE (PREFIX_VEX_0F3A19) },
9266 { Bad_Opcode },
9267 { Bad_Opcode },
9268 { Bad_Opcode },
9269 { PREFIX_TABLE (PREFIX_VEX_0F3A1D) },
9270 { Bad_Opcode },
9271 { Bad_Opcode },
9272 /* 20 */
9273 { PREFIX_TABLE (PREFIX_VEX_0F3A20) },
9274 { PREFIX_TABLE (PREFIX_VEX_0F3A21) },
9275 { PREFIX_TABLE (PREFIX_VEX_0F3A22) },
9276 { Bad_Opcode },
9277 { Bad_Opcode },
9278 { Bad_Opcode },
9279 { Bad_Opcode },
9280 { Bad_Opcode },
9281 /* 28 */
9282 { Bad_Opcode },
9283 { Bad_Opcode },
9284 { Bad_Opcode },
9285 { Bad_Opcode },
9286 { Bad_Opcode },
9287 { Bad_Opcode },
9288 { Bad_Opcode },
9289 { Bad_Opcode },
9290 /* 30 */
9291 { PREFIX_TABLE (PREFIX_VEX_0F3A30) },
9292 { PREFIX_TABLE (PREFIX_VEX_0F3A31) },
9293 { PREFIX_TABLE (PREFIX_VEX_0F3A32) },
9294 { PREFIX_TABLE (PREFIX_VEX_0F3A33) },
9295 { Bad_Opcode },
9296 { Bad_Opcode },
9297 { Bad_Opcode },
9298 { Bad_Opcode },
9299 /* 38 */
9300 { PREFIX_TABLE (PREFIX_VEX_0F3A38) },
9301 { PREFIX_TABLE (PREFIX_VEX_0F3A39) },
9302 { Bad_Opcode },
9303 { Bad_Opcode },
9304 { Bad_Opcode },
9305 { Bad_Opcode },
9306 { Bad_Opcode },
9307 { Bad_Opcode },
9308 /* 40 */
9309 { PREFIX_TABLE (PREFIX_VEX_0F3A40) },
9310 { PREFIX_TABLE (PREFIX_VEX_0F3A41) },
9311 { PREFIX_TABLE (PREFIX_VEX_0F3A42) },
9312 { Bad_Opcode },
9313 { PREFIX_TABLE (PREFIX_VEX_0F3A44) },
9314 { Bad_Opcode },
9315 { PREFIX_TABLE (PREFIX_VEX_0F3A46) },
9316 { Bad_Opcode },
9317 /* 48 */
9318 { PREFIX_TABLE (PREFIX_VEX_0F3A48) },
9319 { PREFIX_TABLE (PREFIX_VEX_0F3A49) },
9320 { PREFIX_TABLE (PREFIX_VEX_0F3A4A) },
9321 { PREFIX_TABLE (PREFIX_VEX_0F3A4B) },
9322 { PREFIX_TABLE (PREFIX_VEX_0F3A4C) },
9323 { Bad_Opcode },
9324 { Bad_Opcode },
9325 { Bad_Opcode },
9326 /* 50 */
9327 { Bad_Opcode },
9328 { Bad_Opcode },
9329 { Bad_Opcode },
9330 { Bad_Opcode },
9331 { Bad_Opcode },
9332 { Bad_Opcode },
9333 { Bad_Opcode },
9334 { Bad_Opcode },
9335 /* 58 */
9336 { Bad_Opcode },
9337 { Bad_Opcode },
9338 { Bad_Opcode },
9339 { Bad_Opcode },
9340 { PREFIX_TABLE (PREFIX_VEX_0F3A5C) },
9341 { PREFIX_TABLE (PREFIX_VEX_0F3A5D) },
9342 { PREFIX_TABLE (PREFIX_VEX_0F3A5E) },
9343 { PREFIX_TABLE (PREFIX_VEX_0F3A5F) },
9344 /* 60 */
9345 { PREFIX_TABLE (PREFIX_VEX_0F3A60) },
9346 { PREFIX_TABLE (PREFIX_VEX_0F3A61) },
9347 { PREFIX_TABLE (PREFIX_VEX_0F3A62) },
9348 { PREFIX_TABLE (PREFIX_VEX_0F3A63) },
9349 { Bad_Opcode },
9350 { Bad_Opcode },
9351 { Bad_Opcode },
9352 { Bad_Opcode },
9353 /* 68 */
9354 { PREFIX_TABLE (PREFIX_VEX_0F3A68) },
9355 { PREFIX_TABLE (PREFIX_VEX_0F3A69) },
9356 { PREFIX_TABLE (PREFIX_VEX_0F3A6A) },
9357 { PREFIX_TABLE (PREFIX_VEX_0F3A6B) },
9358 { PREFIX_TABLE (PREFIX_VEX_0F3A6C) },
9359 { PREFIX_TABLE (PREFIX_VEX_0F3A6D) },
9360 { PREFIX_TABLE (PREFIX_VEX_0F3A6E) },
9361 { PREFIX_TABLE (PREFIX_VEX_0F3A6F) },
9362 /* 70 */
9363 { Bad_Opcode },
9364 { Bad_Opcode },
9365 { Bad_Opcode },
9366 { Bad_Opcode },
9367 { Bad_Opcode },
9368 { Bad_Opcode },
9369 { Bad_Opcode },
9370 { Bad_Opcode },
9371 /* 78 */
9372 { PREFIX_TABLE (PREFIX_VEX_0F3A78) },
9373 { PREFIX_TABLE (PREFIX_VEX_0F3A79) },
9374 { PREFIX_TABLE (PREFIX_VEX_0F3A7A) },
9375 { PREFIX_TABLE (PREFIX_VEX_0F3A7B) },
9376 { PREFIX_TABLE (PREFIX_VEX_0F3A7C) },
9377 { PREFIX_TABLE (PREFIX_VEX_0F3A7D) },
9378 { PREFIX_TABLE (PREFIX_VEX_0F3A7E) },
9379 { PREFIX_TABLE (PREFIX_VEX_0F3A7F) },
9380 /* 80 */
9381 { Bad_Opcode },
9382 { Bad_Opcode },
9383 { Bad_Opcode },
9384 { Bad_Opcode },
9385 { Bad_Opcode },
9386 { Bad_Opcode },
9387 { Bad_Opcode },
9388 { Bad_Opcode },
9389 /* 88 */
9390 { Bad_Opcode },
9391 { Bad_Opcode },
9392 { Bad_Opcode },
9393 { Bad_Opcode },
9394 { Bad_Opcode },
9395 { Bad_Opcode },
9396 { Bad_Opcode },
9397 { Bad_Opcode },
9398 /* 90 */
9399 { Bad_Opcode },
9400 { Bad_Opcode },
9401 { Bad_Opcode },
9402 { Bad_Opcode },
9403 { Bad_Opcode },
9404 { Bad_Opcode },
9405 { Bad_Opcode },
9406 { Bad_Opcode },
9407 /* 98 */
9408 { Bad_Opcode },
9409 { Bad_Opcode },
9410 { Bad_Opcode },
9411 { Bad_Opcode },
9412 { Bad_Opcode },
9413 { Bad_Opcode },
9414 { Bad_Opcode },
9415 { Bad_Opcode },
9416 /* a0 */
9417 { Bad_Opcode },
9418 { Bad_Opcode },
9419 { Bad_Opcode },
9420 { Bad_Opcode },
9421 { Bad_Opcode },
9422 { Bad_Opcode },
9423 { Bad_Opcode },
9424 { Bad_Opcode },
9425 /* a8 */
9426 { Bad_Opcode },
9427 { Bad_Opcode },
9428 { Bad_Opcode },
9429 { Bad_Opcode },
9430 { Bad_Opcode },
9431 { Bad_Opcode },
9432 { Bad_Opcode },
9433 { Bad_Opcode },
9434 /* b0 */
9435 { Bad_Opcode },
9436 { Bad_Opcode },
9437 { Bad_Opcode },
9438 { Bad_Opcode },
9439 { Bad_Opcode },
9440 { Bad_Opcode },
9441 { Bad_Opcode },
9442 { Bad_Opcode },
9443 /* b8 */
9444 { Bad_Opcode },
9445 { Bad_Opcode },
9446 { Bad_Opcode },
9447 { Bad_Opcode },
9448 { Bad_Opcode },
9449 { Bad_Opcode },
9450 { Bad_Opcode },
9451 { Bad_Opcode },
9452 /* c0 */
9453 { Bad_Opcode },
9454 { Bad_Opcode },
9455 { Bad_Opcode },
9456 { Bad_Opcode },
9457 { Bad_Opcode },
9458 { Bad_Opcode },
9459 { Bad_Opcode },
9460 { Bad_Opcode },
9461 /* c8 */
9462 { Bad_Opcode },
9463 { Bad_Opcode },
9464 { Bad_Opcode },
9465 { Bad_Opcode },
9466 { Bad_Opcode },
9467 { Bad_Opcode },
9468 { PREFIX_TABLE(PREFIX_VEX_0F3ACE) },
9469 { PREFIX_TABLE(PREFIX_VEX_0F3ACF) },
9470 /* d0 */
9471 { Bad_Opcode },
9472 { Bad_Opcode },
9473 { Bad_Opcode },
9474 { Bad_Opcode },
9475 { Bad_Opcode },
9476 { Bad_Opcode },
9477 { Bad_Opcode },
9478 { Bad_Opcode },
9479 /* d8 */
9480 { Bad_Opcode },
9481 { Bad_Opcode },
9482 { Bad_Opcode },
9483 { Bad_Opcode },
9484 { Bad_Opcode },
9485 { Bad_Opcode },
9486 { Bad_Opcode },
9487 { PREFIX_TABLE (PREFIX_VEX_0F3ADF) },
9488 /* e0 */
9489 { Bad_Opcode },
9490 { Bad_Opcode },
9491 { Bad_Opcode },
9492 { Bad_Opcode },
9493 { Bad_Opcode },
9494 { Bad_Opcode },
9495 { Bad_Opcode },
9496 { Bad_Opcode },
9497 /* e8 */
9498 { Bad_Opcode },
9499 { Bad_Opcode },
9500 { Bad_Opcode },
9501 { Bad_Opcode },
9502 { Bad_Opcode },
9503 { Bad_Opcode },
9504 { Bad_Opcode },
9505 { Bad_Opcode },
9506 /* f0 */
9507 { PREFIX_TABLE (PREFIX_VEX_0F3AF0) },
9508 { Bad_Opcode },
9509 { Bad_Opcode },
9510 { Bad_Opcode },
9511 { Bad_Opcode },
9512 { Bad_Opcode },
9513 { Bad_Opcode },
9514 { Bad_Opcode },
9515 /* f8 */
9516 { Bad_Opcode },
9517 { Bad_Opcode },
9518 { Bad_Opcode },
9519 { Bad_Opcode },
9520 { Bad_Opcode },
9521 { Bad_Opcode },
9522 { Bad_Opcode },
9523 { Bad_Opcode },
9524 },
9525 };
9526
9527 #define NEED_OPCODE_TABLE
9528 #include "i386-dis-evex.h"
9529 #undef NEED_OPCODE_TABLE
9530 static const struct dis386 vex_len_table[][2] = {
9531 /* VEX_LEN_0F10_P_1 */
9532 {
9533 { VEX_W_TABLE (VEX_W_0F10_P_1) },
9534 { VEX_W_TABLE (VEX_W_0F10_P_1) },
9535 },
9536
9537 /* VEX_LEN_0F10_P_3 */
9538 {
9539 { VEX_W_TABLE (VEX_W_0F10_P_3) },
9540 { VEX_W_TABLE (VEX_W_0F10_P_3) },
9541 },
9542
9543 /* VEX_LEN_0F11_P_1 */
9544 {
9545 { VEX_W_TABLE (VEX_W_0F11_P_1) },
9546 { VEX_W_TABLE (VEX_W_0F11_P_1) },
9547 },
9548
9549 /* VEX_LEN_0F11_P_3 */
9550 {
9551 { VEX_W_TABLE (VEX_W_0F11_P_3) },
9552 { VEX_W_TABLE (VEX_W_0F11_P_3) },
9553 },
9554
9555 /* VEX_LEN_0F12_P_0_M_0 */
9556 {
9557 { VEX_W_TABLE (VEX_W_0F12_P_0_M_0) },
9558 },
9559
9560 /* VEX_LEN_0F12_P_0_M_1 */
9561 {
9562 { VEX_W_TABLE (VEX_W_0F12_P_0_M_1) },
9563 },
9564
9565 /* VEX_LEN_0F12_P_2 */
9566 {
9567 { VEX_W_TABLE (VEX_W_0F12_P_2) },
9568 },
9569
9570 /* VEX_LEN_0F13_M_0 */
9571 {
9572 { VEX_W_TABLE (VEX_W_0F13_M_0) },
9573 },
9574
9575 /* VEX_LEN_0F16_P_0_M_0 */
9576 {
9577 { VEX_W_TABLE (VEX_W_0F16_P_0_M_0) },
9578 },
9579
9580 /* VEX_LEN_0F16_P_0_M_1 */
9581 {
9582 { VEX_W_TABLE (VEX_W_0F16_P_0_M_1) },
9583 },
9584
9585 /* VEX_LEN_0F16_P_2 */
9586 {
9587 { VEX_W_TABLE (VEX_W_0F16_P_2) },
9588 },
9589
9590 /* VEX_LEN_0F17_M_0 */
9591 {
9592 { VEX_W_TABLE (VEX_W_0F17_M_0) },
9593 },
9594
9595 /* VEX_LEN_0F2A_P_1 */
9596 {
9597 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev }, 0 },
9598 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev }, 0 },
9599 },
9600
9601 /* VEX_LEN_0F2A_P_3 */
9602 {
9603 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev }, 0 },
9604 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev }, 0 },
9605 },
9606
9607 /* VEX_LEN_0F2C_P_1 */
9608 {
9609 { "vcvttss2si", { Gv, EXdScalar }, 0 },
9610 { "vcvttss2si", { Gv, EXdScalar }, 0 },
9611 },
9612
9613 /* VEX_LEN_0F2C_P_3 */
9614 {
9615 { "vcvttsd2si", { Gv, EXqScalar }, 0 },
9616 { "vcvttsd2si", { Gv, EXqScalar }, 0 },
9617 },
9618
9619 /* VEX_LEN_0F2D_P_1 */
9620 {
9621 { "vcvtss2si", { Gv, EXdScalar }, 0 },
9622 { "vcvtss2si", { Gv, EXdScalar }, 0 },
9623 },
9624
9625 /* VEX_LEN_0F2D_P_3 */
9626 {
9627 { "vcvtsd2si", { Gv, EXqScalar }, 0 },
9628 { "vcvtsd2si", { Gv, EXqScalar }, 0 },
9629 },
9630
9631 /* VEX_LEN_0F2E_P_0 */
9632 {
9633 { VEX_W_TABLE (VEX_W_0F2E_P_0) },
9634 { VEX_W_TABLE (VEX_W_0F2E_P_0) },
9635 },
9636
9637 /* VEX_LEN_0F2E_P_2 */
9638 {
9639 { VEX_W_TABLE (VEX_W_0F2E_P_2) },
9640 { VEX_W_TABLE (VEX_W_0F2E_P_2) },
9641 },
9642
9643 /* VEX_LEN_0F2F_P_0 */
9644 {
9645 { VEX_W_TABLE (VEX_W_0F2F_P_0) },
9646 { VEX_W_TABLE (VEX_W_0F2F_P_0) },
9647 },
9648
9649 /* VEX_LEN_0F2F_P_2 */
9650 {
9651 { VEX_W_TABLE (VEX_W_0F2F_P_2) },
9652 { VEX_W_TABLE (VEX_W_0F2F_P_2) },
9653 },
9654
9655 /* VEX_LEN_0F41_P_0 */
9656 {
9657 { Bad_Opcode },
9658 { VEX_W_TABLE (VEX_W_0F41_P_0_LEN_1) },
9659 },
9660 /* VEX_LEN_0F41_P_2 */
9661 {
9662 { Bad_Opcode },
9663 { VEX_W_TABLE (VEX_W_0F41_P_2_LEN_1) },
9664 },
9665 /* VEX_LEN_0F42_P_0 */
9666 {
9667 { Bad_Opcode },
9668 { VEX_W_TABLE (VEX_W_0F42_P_0_LEN_1) },
9669 },
9670 /* VEX_LEN_0F42_P_2 */
9671 {
9672 { Bad_Opcode },
9673 { VEX_W_TABLE (VEX_W_0F42_P_2_LEN_1) },
9674 },
9675 /* VEX_LEN_0F44_P_0 */
9676 {
9677 { VEX_W_TABLE (VEX_W_0F44_P_0_LEN_0) },
9678 },
9679 /* VEX_LEN_0F44_P_2 */
9680 {
9681 { VEX_W_TABLE (VEX_W_0F44_P_2_LEN_0) },
9682 },
9683 /* VEX_LEN_0F45_P_0 */
9684 {
9685 { Bad_Opcode },
9686 { VEX_W_TABLE (VEX_W_0F45_P_0_LEN_1) },
9687 },
9688 /* VEX_LEN_0F45_P_2 */
9689 {
9690 { Bad_Opcode },
9691 { VEX_W_TABLE (VEX_W_0F45_P_2_LEN_1) },
9692 },
9693 /* VEX_LEN_0F46_P_0 */
9694 {
9695 { Bad_Opcode },
9696 { VEX_W_TABLE (VEX_W_0F46_P_0_LEN_1) },
9697 },
9698 /* VEX_LEN_0F46_P_2 */
9699 {
9700 { Bad_Opcode },
9701 { VEX_W_TABLE (VEX_W_0F46_P_2_LEN_1) },
9702 },
9703 /* VEX_LEN_0F47_P_0 */
9704 {
9705 { Bad_Opcode },
9706 { VEX_W_TABLE (VEX_W_0F47_P_0_LEN_1) },
9707 },
9708 /* VEX_LEN_0F47_P_2 */
9709 {
9710 { Bad_Opcode },
9711 { VEX_W_TABLE (VEX_W_0F47_P_2_LEN_1) },
9712 },
9713 /* VEX_LEN_0F4A_P_0 */
9714 {
9715 { Bad_Opcode },
9716 { VEX_W_TABLE (VEX_W_0F4A_P_0_LEN_1) },
9717 },
9718 /* VEX_LEN_0F4A_P_2 */
9719 {
9720 { Bad_Opcode },
9721 { VEX_W_TABLE (VEX_W_0F4A_P_2_LEN_1) },
9722 },
9723 /* VEX_LEN_0F4B_P_0 */
9724 {
9725 { Bad_Opcode },
9726 { VEX_W_TABLE (VEX_W_0F4B_P_0_LEN_1) },
9727 },
9728 /* VEX_LEN_0F4B_P_2 */
9729 {
9730 { Bad_Opcode },
9731 { VEX_W_TABLE (VEX_W_0F4B_P_2_LEN_1) },
9732 },
9733
9734 /* VEX_LEN_0F51_P_1 */
9735 {
9736 { VEX_W_TABLE (VEX_W_0F51_P_1) },
9737 { VEX_W_TABLE (VEX_W_0F51_P_1) },
9738 },
9739
9740 /* VEX_LEN_0F51_P_3 */
9741 {
9742 { VEX_W_TABLE (VEX_W_0F51_P_3) },
9743 { VEX_W_TABLE (VEX_W_0F51_P_3) },
9744 },
9745
9746 /* VEX_LEN_0F52_P_1 */
9747 {
9748 { VEX_W_TABLE (VEX_W_0F52_P_1) },
9749 { VEX_W_TABLE (VEX_W_0F52_P_1) },
9750 },
9751
9752 /* VEX_LEN_0F53_P_1 */
9753 {
9754 { VEX_W_TABLE (VEX_W_0F53_P_1) },
9755 { VEX_W_TABLE (VEX_W_0F53_P_1) },
9756 },
9757
9758 /* VEX_LEN_0F58_P_1 */
9759 {
9760 { VEX_W_TABLE (VEX_W_0F58_P_1) },
9761 { VEX_W_TABLE (VEX_W_0F58_P_1) },
9762 },
9763
9764 /* VEX_LEN_0F58_P_3 */
9765 {
9766 { VEX_W_TABLE (VEX_W_0F58_P_3) },
9767 { VEX_W_TABLE (VEX_W_0F58_P_3) },
9768 },
9769
9770 /* VEX_LEN_0F59_P_1 */
9771 {
9772 { VEX_W_TABLE (VEX_W_0F59_P_1) },
9773 { VEX_W_TABLE (VEX_W_0F59_P_1) },
9774 },
9775
9776 /* VEX_LEN_0F59_P_3 */
9777 {
9778 { VEX_W_TABLE (VEX_W_0F59_P_3) },
9779 { VEX_W_TABLE (VEX_W_0F59_P_3) },
9780 },
9781
9782 /* VEX_LEN_0F5A_P_1 */
9783 {
9784 { VEX_W_TABLE (VEX_W_0F5A_P_1) },
9785 { VEX_W_TABLE (VEX_W_0F5A_P_1) },
9786 },
9787
9788 /* VEX_LEN_0F5A_P_3 */
9789 {
9790 { VEX_W_TABLE (VEX_W_0F5A_P_3) },
9791 { VEX_W_TABLE (VEX_W_0F5A_P_3) },
9792 },
9793
9794 /* VEX_LEN_0F5C_P_1 */
9795 {
9796 { VEX_W_TABLE (VEX_W_0F5C_P_1) },
9797 { VEX_W_TABLE (VEX_W_0F5C_P_1) },
9798 },
9799
9800 /* VEX_LEN_0F5C_P_3 */
9801 {
9802 { VEX_W_TABLE (VEX_W_0F5C_P_3) },
9803 { VEX_W_TABLE (VEX_W_0F5C_P_3) },
9804 },
9805
9806 /* VEX_LEN_0F5D_P_1 */
9807 {
9808 { VEX_W_TABLE (VEX_W_0F5D_P_1) },
9809 { VEX_W_TABLE (VEX_W_0F5D_P_1) },
9810 },
9811
9812 /* VEX_LEN_0F5D_P_3 */
9813 {
9814 { VEX_W_TABLE (VEX_W_0F5D_P_3) },
9815 { VEX_W_TABLE (VEX_W_0F5D_P_3) },
9816 },
9817
9818 /* VEX_LEN_0F5E_P_1 */
9819 {
9820 { VEX_W_TABLE (VEX_W_0F5E_P_1) },
9821 { VEX_W_TABLE (VEX_W_0F5E_P_1) },
9822 },
9823
9824 /* VEX_LEN_0F5E_P_3 */
9825 {
9826 { VEX_W_TABLE (VEX_W_0F5E_P_3) },
9827 { VEX_W_TABLE (VEX_W_0F5E_P_3) },
9828 },
9829
9830 /* VEX_LEN_0F5F_P_1 */
9831 {
9832 { VEX_W_TABLE (VEX_W_0F5F_P_1) },
9833 { VEX_W_TABLE (VEX_W_0F5F_P_1) },
9834 },
9835
9836 /* VEX_LEN_0F5F_P_3 */
9837 {
9838 { VEX_W_TABLE (VEX_W_0F5F_P_3) },
9839 { VEX_W_TABLE (VEX_W_0F5F_P_3) },
9840 },
9841
9842 /* VEX_LEN_0F6E_P_2 */
9843 {
9844 { "vmovK", { XMScalar, Edq }, 0 },
9845 { "vmovK", { XMScalar, Edq }, 0 },
9846 },
9847
9848 /* VEX_LEN_0F7E_P_1 */
9849 {
9850 { VEX_W_TABLE (VEX_W_0F7E_P_1) },
9851 },
9852
9853 /* VEX_LEN_0F7E_P_2 */
9854 {
9855 { "vmovK", { Edq, XMScalar }, 0 },
9856 { "vmovK", { Edq, XMScalar }, 0 },
9857 },
9858
9859 /* VEX_LEN_0F90_P_0 */
9860 {
9861 { VEX_W_TABLE (VEX_W_0F90_P_0_LEN_0) },
9862 },
9863
9864 /* VEX_LEN_0F90_P_2 */
9865 {
9866 { VEX_W_TABLE (VEX_W_0F90_P_2_LEN_0) },
9867 },
9868
9869 /* VEX_LEN_0F91_P_0 */
9870 {
9871 { VEX_W_TABLE (VEX_W_0F91_P_0_LEN_0) },
9872 },
9873
9874 /* VEX_LEN_0F91_P_2 */
9875 {
9876 { VEX_W_TABLE (VEX_W_0F91_P_2_LEN_0) },
9877 },
9878
9879 /* VEX_LEN_0F92_P_0 */
9880 {
9881 { VEX_W_TABLE (VEX_W_0F92_P_0_LEN_0) },
9882 },
9883
9884 /* VEX_LEN_0F92_P_2 */
9885 {
9886 { VEX_W_TABLE (VEX_W_0F92_P_2_LEN_0) },
9887 },
9888
9889 /* VEX_LEN_0F92_P_3 */
9890 {
9891 { VEX_W_TABLE (VEX_W_0F92_P_3_LEN_0) },
9892 },
9893
9894 /* VEX_LEN_0F93_P_0 */
9895 {
9896 { VEX_W_TABLE (VEX_W_0F93_P_0_LEN_0) },
9897 },
9898
9899 /* VEX_LEN_0F93_P_2 */
9900 {
9901 { VEX_W_TABLE (VEX_W_0F93_P_2_LEN_0) },
9902 },
9903
9904 /* VEX_LEN_0F93_P_3 */
9905 {
9906 { VEX_W_TABLE (VEX_W_0F93_P_3_LEN_0) },
9907 },
9908
9909 /* VEX_LEN_0F98_P_0 */
9910 {
9911 { VEX_W_TABLE (VEX_W_0F98_P_0_LEN_0) },
9912 },
9913
9914 /* VEX_LEN_0F98_P_2 */
9915 {
9916 { VEX_W_TABLE (VEX_W_0F98_P_2_LEN_0) },
9917 },
9918
9919 /* VEX_LEN_0F99_P_0 */
9920 {
9921 { VEX_W_TABLE (VEX_W_0F99_P_0_LEN_0) },
9922 },
9923
9924 /* VEX_LEN_0F99_P_2 */
9925 {
9926 { VEX_W_TABLE (VEX_W_0F99_P_2_LEN_0) },
9927 },
9928
9929 /* VEX_LEN_0FAE_R_2_M_0 */
9930 {
9931 { VEX_W_TABLE (VEX_W_0FAE_R_2_M_0) },
9932 },
9933
9934 /* VEX_LEN_0FAE_R_3_M_0 */
9935 {
9936 { VEX_W_TABLE (VEX_W_0FAE_R_3_M_0) },
9937 },
9938
9939 /* VEX_LEN_0FC2_P_1 */
9940 {
9941 { VEX_W_TABLE (VEX_W_0FC2_P_1) },
9942 { VEX_W_TABLE (VEX_W_0FC2_P_1) },
9943 },
9944
9945 /* VEX_LEN_0FC2_P_3 */
9946 {
9947 { VEX_W_TABLE (VEX_W_0FC2_P_3) },
9948 { VEX_W_TABLE (VEX_W_0FC2_P_3) },
9949 },
9950
9951 /* VEX_LEN_0FC4_P_2 */
9952 {
9953 { VEX_W_TABLE (VEX_W_0FC4_P_2) },
9954 },
9955
9956 /* VEX_LEN_0FC5_P_2 */
9957 {
9958 { VEX_W_TABLE (VEX_W_0FC5_P_2) },
9959 },
9960
9961 /* VEX_LEN_0FD6_P_2 */
9962 {
9963 { VEX_W_TABLE (VEX_W_0FD6_P_2) },
9964 },
9965
9966 /* VEX_LEN_0FF7_P_2 */
9967 {
9968 { VEX_W_TABLE (VEX_W_0FF7_P_2) },
9969 },
9970
9971 /* VEX_LEN_0F3816_P_2 */
9972 {
9973 { Bad_Opcode },
9974 { VEX_W_TABLE (VEX_W_0F3816_P_2) },
9975 },
9976
9977 /* VEX_LEN_0F3819_P_2 */
9978 {
9979 { Bad_Opcode },
9980 { VEX_W_TABLE (VEX_W_0F3819_P_2) },
9981 },
9982
9983 /* VEX_LEN_0F381A_P_2_M_0 */
9984 {
9985 { Bad_Opcode },
9986 { VEX_W_TABLE (VEX_W_0F381A_P_2_M_0) },
9987 },
9988
9989 /* VEX_LEN_0F3836_P_2 */
9990 {
9991 { Bad_Opcode },
9992 { VEX_W_TABLE (VEX_W_0F3836_P_2) },
9993 },
9994
9995 /* VEX_LEN_0F3841_P_2 */
9996 {
9997 { VEX_W_TABLE (VEX_W_0F3841_P_2) },
9998 },
9999
10000 /* VEX_LEN_0F385A_P_2_M_0 */
10001 {
10002 { Bad_Opcode },
10003 { VEX_W_TABLE (VEX_W_0F385A_P_2_M_0) },
10004 },
10005
10006 /* VEX_LEN_0F38DB_P_2 */
10007 {
10008 { VEX_W_TABLE (VEX_W_0F38DB_P_2) },
10009 },
10010
10011 /* VEX_LEN_0F38F2_P_0 */
10012 {
10013 { "andnS", { Gdq, VexGdq, Edq }, 0 },
10014 },
10015
10016 /* VEX_LEN_0F38F3_R_1_P_0 */
10017 {
10018 { "blsrS", { VexGdq, Edq }, 0 },
10019 },
10020
10021 /* VEX_LEN_0F38F3_R_2_P_0 */
10022 {
10023 { "blsmskS", { VexGdq, Edq }, 0 },
10024 },
10025
10026 /* VEX_LEN_0F38F3_R_3_P_0 */
10027 {
10028 { "blsiS", { VexGdq, Edq }, 0 },
10029 },
10030
10031 /* VEX_LEN_0F38F5_P_0 */
10032 {
10033 { "bzhiS", { Gdq, Edq, VexGdq }, 0 },
10034 },
10035
10036 /* VEX_LEN_0F38F5_P_1 */
10037 {
10038 { "pextS", { Gdq, VexGdq, Edq }, 0 },
10039 },
10040
10041 /* VEX_LEN_0F38F5_P_3 */
10042 {
10043 { "pdepS", { Gdq, VexGdq, Edq }, 0 },
10044 },
10045
10046 /* VEX_LEN_0F38F6_P_3 */
10047 {
10048 { "mulxS", { Gdq, VexGdq, Edq }, 0 },
10049 },
10050
10051 /* VEX_LEN_0F38F7_P_0 */
10052 {
10053 { "bextrS", { Gdq, Edq, VexGdq }, 0 },
10054 },
10055
10056 /* VEX_LEN_0F38F7_P_1 */
10057 {
10058 { "sarxS", { Gdq, Edq, VexGdq }, 0 },
10059 },
10060
10061 /* VEX_LEN_0F38F7_P_2 */
10062 {
10063 { "shlxS", { Gdq, Edq, VexGdq }, 0 },
10064 },
10065
10066 /* VEX_LEN_0F38F7_P_3 */
10067 {
10068 { "shrxS", { Gdq, Edq, VexGdq }, 0 },
10069 },
10070
10071 /* VEX_LEN_0F3A00_P_2 */
10072 {
10073 { Bad_Opcode },
10074 { VEX_W_TABLE (VEX_W_0F3A00_P_2) },
10075 },
10076
10077 /* VEX_LEN_0F3A01_P_2 */
10078 {
10079 { Bad_Opcode },
10080 { VEX_W_TABLE (VEX_W_0F3A01_P_2) },
10081 },
10082
10083 /* VEX_LEN_0F3A06_P_2 */
10084 {
10085 { Bad_Opcode },
10086 { VEX_W_TABLE (VEX_W_0F3A06_P_2) },
10087 },
10088
10089 /* VEX_LEN_0F3A0A_P_2 */
10090 {
10091 { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
10092 { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
10093 },
10094
10095 /* VEX_LEN_0F3A0B_P_2 */
10096 {
10097 { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
10098 { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
10099 },
10100
10101 /* VEX_LEN_0F3A14_P_2 */
10102 {
10103 { VEX_W_TABLE (VEX_W_0F3A14_P_2) },
10104 },
10105
10106 /* VEX_LEN_0F3A15_P_2 */
10107 {
10108 { VEX_W_TABLE (VEX_W_0F3A15_P_2) },
10109 },
10110
10111 /* VEX_LEN_0F3A16_P_2 */
10112 {
10113 { "vpextrK", { Edq, XM, Ib }, 0 },
10114 },
10115
10116 /* VEX_LEN_0F3A17_P_2 */
10117 {
10118 { "vextractps", { Edqd, XM, Ib }, 0 },
10119 },
10120
10121 /* VEX_LEN_0F3A18_P_2 */
10122 {
10123 { Bad_Opcode },
10124 { VEX_W_TABLE (VEX_W_0F3A18_P_2) },
10125 },
10126
10127 /* VEX_LEN_0F3A19_P_2 */
10128 {
10129 { Bad_Opcode },
10130 { VEX_W_TABLE (VEX_W_0F3A19_P_2) },
10131 },
10132
10133 /* VEX_LEN_0F3A20_P_2 */
10134 {
10135 { VEX_W_TABLE (VEX_W_0F3A20_P_2) },
10136 },
10137
10138 /* VEX_LEN_0F3A21_P_2 */
10139 {
10140 { VEX_W_TABLE (VEX_W_0F3A21_P_2) },
10141 },
10142
10143 /* VEX_LEN_0F3A22_P_2 */
10144 {
10145 { "vpinsrK", { XM, Vex128, Edq, Ib }, 0 },
10146 },
10147
10148 /* VEX_LEN_0F3A30_P_2 */
10149 {
10150 { VEX_W_TABLE (VEX_W_0F3A30_P_2_LEN_0) },
10151 },
10152
10153 /* VEX_LEN_0F3A31_P_2 */
10154 {
10155 { VEX_W_TABLE (VEX_W_0F3A31_P_2_LEN_0) },
10156 },
10157
10158 /* VEX_LEN_0F3A32_P_2 */
10159 {
10160 { VEX_W_TABLE (VEX_W_0F3A32_P_2_LEN_0) },
10161 },
10162
10163 /* VEX_LEN_0F3A33_P_2 */
10164 {
10165 { VEX_W_TABLE (VEX_W_0F3A33_P_2_LEN_0) },
10166 },
10167
10168 /* VEX_LEN_0F3A38_P_2 */
10169 {
10170 { Bad_Opcode },
10171 { VEX_W_TABLE (VEX_W_0F3A38_P_2) },
10172 },
10173
10174 /* VEX_LEN_0F3A39_P_2 */
10175 {
10176 { Bad_Opcode },
10177 { VEX_W_TABLE (VEX_W_0F3A39_P_2) },
10178 },
10179
10180 /* VEX_LEN_0F3A41_P_2 */
10181 {
10182 { VEX_W_TABLE (VEX_W_0F3A41_P_2) },
10183 },
10184
10185 /* VEX_LEN_0F3A46_P_2 */
10186 {
10187 { Bad_Opcode },
10188 { VEX_W_TABLE (VEX_W_0F3A46_P_2) },
10189 },
10190
10191 /* VEX_LEN_0F3A60_P_2 */
10192 {
10193 { "vpcmpestrm", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, 0 },
10194 },
10195
10196 /* VEX_LEN_0F3A61_P_2 */
10197 {
10198 { "vpcmpestri", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, 0 },
10199 },
10200
10201 /* VEX_LEN_0F3A62_P_2 */
10202 {
10203 { VEX_W_TABLE (VEX_W_0F3A62_P_2) },
10204 },
10205
10206 /* VEX_LEN_0F3A63_P_2 */
10207 {
10208 { VEX_W_TABLE (VEX_W_0F3A63_P_2) },
10209 },
10210
10211 /* VEX_LEN_0F3A6A_P_2 */
10212 {
10213 { "vfmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 },
10214 },
10215
10216 /* VEX_LEN_0F3A6B_P_2 */
10217 {
10218 { "vfmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 },
10219 },
10220
10221 /* VEX_LEN_0F3A6E_P_2 */
10222 {
10223 { "vfmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 },
10224 },
10225
10226 /* VEX_LEN_0F3A6F_P_2 */
10227 {
10228 { "vfmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 },
10229 },
10230
10231 /* VEX_LEN_0F3A7A_P_2 */
10232 {
10233 { "vfnmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 },
10234 },
10235
10236 /* VEX_LEN_0F3A7B_P_2 */
10237 {
10238 { "vfnmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 },
10239 },
10240
10241 /* VEX_LEN_0F3A7E_P_2 */
10242 {
10243 { "vfnmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 },
10244 },
10245
10246 /* VEX_LEN_0F3A7F_P_2 */
10247 {
10248 { "vfnmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 },
10249 },
10250
10251 /* VEX_LEN_0F3ADF_P_2 */
10252 {
10253 { VEX_W_TABLE (VEX_W_0F3ADF_P_2) },
10254 },
10255
10256 /* VEX_LEN_0F3AF0_P_3 */
10257 {
10258 { "rorxS", { Gdq, Edq, Ib }, 0 },
10259 },
10260
10261 /* VEX_LEN_0FXOP_08_CC */
10262 {
10263 { "vpcomb", { XM, Vex128, EXx, VPCOM }, 0 },
10264 },
10265
10266 /* VEX_LEN_0FXOP_08_CD */
10267 {
10268 { "vpcomw", { XM, Vex128, EXx, VPCOM }, 0 },
10269 },
10270
10271 /* VEX_LEN_0FXOP_08_CE */
10272 {
10273 { "vpcomd", { XM, Vex128, EXx, VPCOM }, 0 },
10274 },
10275
10276 /* VEX_LEN_0FXOP_08_CF */
10277 {
10278 { "vpcomq", { XM, Vex128, EXx, VPCOM }, 0 },
10279 },
10280
10281 /* VEX_LEN_0FXOP_08_EC */
10282 {
10283 { "vpcomub", { XM, Vex128, EXx, VPCOM }, 0 },
10284 },
10285
10286 /* VEX_LEN_0FXOP_08_ED */
10287 {
10288 { "vpcomuw", { XM, Vex128, EXx, VPCOM }, 0 },
10289 },
10290
10291 /* VEX_LEN_0FXOP_08_EE */
10292 {
10293 { "vpcomud", { XM, Vex128, EXx, VPCOM }, 0 },
10294 },
10295
10296 /* VEX_LEN_0FXOP_08_EF */
10297 {
10298 { "vpcomuq", { XM, Vex128, EXx, VPCOM }, 0 },
10299 },
10300
10301 /* VEX_LEN_0FXOP_09_80 */
10302 {
10303 { "vfrczps", { XM, EXxmm }, 0 },
10304 { "vfrczps", { XM, EXymmq }, 0 },
10305 },
10306
10307 /* VEX_LEN_0FXOP_09_81 */
10308 {
10309 { "vfrczpd", { XM, EXxmm }, 0 },
10310 { "vfrczpd", { XM, EXymmq }, 0 },
10311 },
10312 };
10313
10314 static const struct dis386 vex_w_table[][2] = {
10315 {
10316 /* VEX_W_0F10_P_0 */
10317 { "vmovups", { XM, EXx }, 0 },
10318 },
10319 {
10320 /* VEX_W_0F10_P_1 */
10321 { "vmovss", { XMVexScalar, VexScalar, EXdScalar }, 0 },
10322 },
10323 {
10324 /* VEX_W_0F10_P_2 */
10325 { "vmovupd", { XM, EXx }, 0 },
10326 },
10327 {
10328 /* VEX_W_0F10_P_3 */
10329 { "vmovsd", { XMVexScalar, VexScalar, EXqScalar }, 0 },
10330 },
10331 {
10332 /* VEX_W_0F11_P_0 */
10333 { "vmovups", { EXxS, XM }, 0 },
10334 },
10335 {
10336 /* VEX_W_0F11_P_1 */
10337 { "vmovss", { EXdVexScalarS, VexScalar, XMScalar }, 0 },
10338 },
10339 {
10340 /* VEX_W_0F11_P_2 */
10341 { "vmovupd", { EXxS, XM }, 0 },
10342 },
10343 {
10344 /* VEX_W_0F11_P_3 */
10345 { "vmovsd", { EXqVexScalarS, VexScalar, XMScalar }, 0 },
10346 },
10347 {
10348 /* VEX_W_0F12_P_0_M_0 */
10349 { "vmovlps", { XM, Vex128, EXq }, 0 },
10350 },
10351 {
10352 /* VEX_W_0F12_P_0_M_1 */
10353 { "vmovhlps", { XM, Vex128, EXq }, 0 },
10354 },
10355 {
10356 /* VEX_W_0F12_P_1 */
10357 { "vmovsldup", { XM, EXx }, 0 },
10358 },
10359 {
10360 /* VEX_W_0F12_P_2 */
10361 { "vmovlpd", { XM, Vex128, EXq }, 0 },
10362 },
10363 {
10364 /* VEX_W_0F12_P_3 */
10365 { "vmovddup", { XM, EXymmq }, 0 },
10366 },
10367 {
10368 /* VEX_W_0F13_M_0 */
10369 { "vmovlpX", { EXq, XM }, 0 },
10370 },
10371 {
10372 /* VEX_W_0F14 */
10373 { "vunpcklpX", { XM, Vex, EXx }, 0 },
10374 },
10375 {
10376 /* VEX_W_0F15 */
10377 { "vunpckhpX", { XM, Vex, EXx }, 0 },
10378 },
10379 {
10380 /* VEX_W_0F16_P_0_M_0 */
10381 { "vmovhps", { XM, Vex128, EXq }, 0 },
10382 },
10383 {
10384 /* VEX_W_0F16_P_0_M_1 */
10385 { "vmovlhps", { XM, Vex128, EXq }, 0 },
10386 },
10387 {
10388 /* VEX_W_0F16_P_1 */
10389 { "vmovshdup", { XM, EXx }, 0 },
10390 },
10391 {
10392 /* VEX_W_0F16_P_2 */
10393 { "vmovhpd", { XM, Vex128, EXq }, 0 },
10394 },
10395 {
10396 /* VEX_W_0F17_M_0 */
10397 { "vmovhpX", { EXq, XM }, 0 },
10398 },
10399 {
10400 /* VEX_W_0F28 */
10401 { "vmovapX", { XM, EXx }, 0 },
10402 },
10403 {
10404 /* VEX_W_0F29 */
10405 { "vmovapX", { EXxS, XM }, 0 },
10406 },
10407 {
10408 /* VEX_W_0F2B_M_0 */
10409 { "vmovntpX", { Mx, XM }, 0 },
10410 },
10411 {
10412 /* VEX_W_0F2E_P_0 */
10413 { "vucomiss", { XMScalar, EXdScalar }, 0 },
10414 },
10415 {
10416 /* VEX_W_0F2E_P_2 */
10417 { "vucomisd", { XMScalar, EXqScalar }, 0 },
10418 },
10419 {
10420 /* VEX_W_0F2F_P_0 */
10421 { "vcomiss", { XMScalar, EXdScalar }, 0 },
10422 },
10423 {
10424 /* VEX_W_0F2F_P_2 */
10425 { "vcomisd", { XMScalar, EXqScalar }, 0 },
10426 },
10427 {
10428 /* VEX_W_0F41_P_0_LEN_1 */
10429 { MOD_TABLE (MOD_VEX_W_0_0F41_P_0_LEN_1) },
10430 { MOD_TABLE (MOD_VEX_W_1_0F41_P_0_LEN_1) },
10431 },
10432 {
10433 /* VEX_W_0F41_P_2_LEN_1 */
10434 { MOD_TABLE (MOD_VEX_W_0_0F41_P_2_LEN_1) },
10435 { MOD_TABLE (MOD_VEX_W_1_0F41_P_2_LEN_1) }
10436 },
10437 {
10438 /* VEX_W_0F42_P_0_LEN_1 */
10439 { MOD_TABLE (MOD_VEX_W_0_0F42_P_0_LEN_1) },
10440 { MOD_TABLE (MOD_VEX_W_1_0F42_P_0_LEN_1) },
10441 },
10442 {
10443 /* VEX_W_0F42_P_2_LEN_1 */
10444 { MOD_TABLE (MOD_VEX_W_0_0F42_P_2_LEN_1) },
10445 { MOD_TABLE (MOD_VEX_W_1_0F42_P_2_LEN_1) },
10446 },
10447 {
10448 /* VEX_W_0F44_P_0_LEN_0 */
10449 { MOD_TABLE (MOD_VEX_W_0_0F44_P_0_LEN_1) },
10450 { MOD_TABLE (MOD_VEX_W_1_0F44_P_0_LEN_1) },
10451 },
10452 {
10453 /* VEX_W_0F44_P_2_LEN_0 */
10454 { MOD_TABLE (MOD_VEX_W_0_0F44_P_2_LEN_1) },
10455 { MOD_TABLE (MOD_VEX_W_1_0F44_P_2_LEN_1) },
10456 },
10457 {
10458 /* VEX_W_0F45_P_0_LEN_1 */
10459 { MOD_TABLE (MOD_VEX_W_0_0F45_P_0_LEN_1) },
10460 { MOD_TABLE (MOD_VEX_W_1_0F45_P_0_LEN_1) },
10461 },
10462 {
10463 /* VEX_W_0F45_P_2_LEN_1 */
10464 { MOD_TABLE (MOD_VEX_W_0_0F45_P_2_LEN_1) },
10465 { MOD_TABLE (MOD_VEX_W_1_0F45_P_2_LEN_1) },
10466 },
10467 {
10468 /* VEX_W_0F46_P_0_LEN_1 */
10469 { MOD_TABLE (MOD_VEX_W_0_0F46_P_0_LEN_1) },
10470 { MOD_TABLE (MOD_VEX_W_1_0F46_P_0_LEN_1) },
10471 },
10472 {
10473 /* VEX_W_0F46_P_2_LEN_1 */
10474 { MOD_TABLE (MOD_VEX_W_0_0F46_P_2_LEN_1) },
10475 { MOD_TABLE (MOD_VEX_W_1_0F46_P_2_LEN_1) },
10476 },
10477 {
10478 /* VEX_W_0F47_P_0_LEN_1 */
10479 { MOD_TABLE (MOD_VEX_W_0_0F47_P_0_LEN_1) },
10480 { MOD_TABLE (MOD_VEX_W_1_0F47_P_0_LEN_1) },
10481 },
10482 {
10483 /* VEX_W_0F47_P_2_LEN_1 */
10484 { MOD_TABLE (MOD_VEX_W_0_0F47_P_2_LEN_1) },
10485 { MOD_TABLE (MOD_VEX_W_1_0F47_P_2_LEN_1) },
10486 },
10487 {
10488 /* VEX_W_0F4A_P_0_LEN_1 */
10489 { MOD_TABLE (MOD_VEX_W_0_0F4A_P_0_LEN_1) },
10490 { MOD_TABLE (MOD_VEX_W_1_0F4A_P_0_LEN_1) },
10491 },
10492 {
10493 /* VEX_W_0F4A_P_2_LEN_1 */
10494 { MOD_TABLE (MOD_VEX_W_0_0F4A_P_2_LEN_1) },
10495 { MOD_TABLE (MOD_VEX_W_1_0F4A_P_2_LEN_1) },
10496 },
10497 {
10498 /* VEX_W_0F4B_P_0_LEN_1 */
10499 { MOD_TABLE (MOD_VEX_W_0_0F4B_P_0_LEN_1) },
10500 { MOD_TABLE (MOD_VEX_W_1_0F4B_P_0_LEN_1) },
10501 },
10502 {
10503 /* VEX_W_0F4B_P_2_LEN_1 */
10504 { MOD_TABLE (MOD_VEX_W_0_0F4B_P_2_LEN_1) },
10505 },
10506 {
10507 /* VEX_W_0F50_M_0 */
10508 { "vmovmskpX", { Gdq, XS }, 0 },
10509 },
10510 {
10511 /* VEX_W_0F51_P_0 */
10512 { "vsqrtps", { XM, EXx }, 0 },
10513 },
10514 {
10515 /* VEX_W_0F51_P_1 */
10516 { "vsqrtss", { XMScalar, VexScalar, EXdScalar }, 0 },
10517 },
10518 {
10519 /* VEX_W_0F51_P_2 */
10520 { "vsqrtpd", { XM, EXx }, 0 },
10521 },
10522 {
10523 /* VEX_W_0F51_P_3 */
10524 { "vsqrtsd", { XMScalar, VexScalar, EXqScalar }, 0 },
10525 },
10526 {
10527 /* VEX_W_0F52_P_0 */
10528 { "vrsqrtps", { XM, EXx }, 0 },
10529 },
10530 {
10531 /* VEX_W_0F52_P_1 */
10532 { "vrsqrtss", { XMScalar, VexScalar, EXdScalar }, 0 },
10533 },
10534 {
10535 /* VEX_W_0F53_P_0 */
10536 { "vrcpps", { XM, EXx }, 0 },
10537 },
10538 {
10539 /* VEX_W_0F53_P_1 */
10540 { "vrcpss", { XMScalar, VexScalar, EXdScalar }, 0 },
10541 },
10542 {
10543 /* VEX_W_0F58_P_0 */
10544 { "vaddps", { XM, Vex, EXx }, 0 },
10545 },
10546 {
10547 /* VEX_W_0F58_P_1 */
10548 { "vaddss", { XMScalar, VexScalar, EXdScalar }, 0 },
10549 },
10550 {
10551 /* VEX_W_0F58_P_2 */
10552 { "vaddpd", { XM, Vex, EXx }, 0 },
10553 },
10554 {
10555 /* VEX_W_0F58_P_3 */
10556 { "vaddsd", { XMScalar, VexScalar, EXqScalar }, 0 },
10557 },
10558 {
10559 /* VEX_W_0F59_P_0 */
10560 { "vmulps", { XM, Vex, EXx }, 0 },
10561 },
10562 {
10563 /* VEX_W_0F59_P_1 */
10564 { "vmulss", { XMScalar, VexScalar, EXdScalar }, 0 },
10565 },
10566 {
10567 /* VEX_W_0F59_P_2 */
10568 { "vmulpd", { XM, Vex, EXx }, 0 },
10569 },
10570 {
10571 /* VEX_W_0F59_P_3 */
10572 { "vmulsd", { XMScalar, VexScalar, EXqScalar }, 0 },
10573 },
10574 {
10575 /* VEX_W_0F5A_P_0 */
10576 { "vcvtps2pd", { XM, EXxmmq }, 0 },
10577 },
10578 {
10579 /* VEX_W_0F5A_P_1 */
10580 { "vcvtss2sd", { XMScalar, VexScalar, EXdScalar }, 0 },
10581 },
10582 {
10583 /* VEX_W_0F5A_P_3 */
10584 { "vcvtsd2ss", { XMScalar, VexScalar, EXqScalar }, 0 },
10585 },
10586 {
10587 /* VEX_W_0F5B_P_0 */
10588 { "vcvtdq2ps", { XM, EXx }, 0 },
10589 },
10590 {
10591 /* VEX_W_0F5B_P_1 */
10592 { "vcvttps2dq", { XM, EXx }, 0 },
10593 },
10594 {
10595 /* VEX_W_0F5B_P_2 */
10596 { "vcvtps2dq", { XM, EXx }, 0 },
10597 },
10598 {
10599 /* VEX_W_0F5C_P_0 */
10600 { "vsubps", { XM, Vex, EXx }, 0 },
10601 },
10602 {
10603 /* VEX_W_0F5C_P_1 */
10604 { "vsubss", { XMScalar, VexScalar, EXdScalar }, 0 },
10605 },
10606 {
10607 /* VEX_W_0F5C_P_2 */
10608 { "vsubpd", { XM, Vex, EXx }, 0 },
10609 },
10610 {
10611 /* VEX_W_0F5C_P_3 */
10612 { "vsubsd", { XMScalar, VexScalar, EXqScalar }, 0 },
10613 },
10614 {
10615 /* VEX_W_0F5D_P_0 */
10616 { "vminps", { XM, Vex, EXx }, 0 },
10617 },
10618 {
10619 /* VEX_W_0F5D_P_1 */
10620 { "vminss", { XMScalar, VexScalar, EXdScalar }, 0 },
10621 },
10622 {
10623 /* VEX_W_0F5D_P_2 */
10624 { "vminpd", { XM, Vex, EXx }, 0 },
10625 },
10626 {
10627 /* VEX_W_0F5D_P_3 */
10628 { "vminsd", { XMScalar, VexScalar, EXqScalar }, 0 },
10629 },
10630 {
10631 /* VEX_W_0F5E_P_0 */
10632 { "vdivps", { XM, Vex, EXx }, 0 },
10633 },
10634 {
10635 /* VEX_W_0F5E_P_1 */
10636 { "vdivss", { XMScalar, VexScalar, EXdScalar }, 0 },
10637 },
10638 {
10639 /* VEX_W_0F5E_P_2 */
10640 { "vdivpd", { XM, Vex, EXx }, 0 },
10641 },
10642 {
10643 /* VEX_W_0F5E_P_3 */
10644 { "vdivsd", { XMScalar, VexScalar, EXqScalar }, 0 },
10645 },
10646 {
10647 /* VEX_W_0F5F_P_0 */
10648 { "vmaxps", { XM, Vex, EXx }, 0 },
10649 },
10650 {
10651 /* VEX_W_0F5F_P_1 */
10652 { "vmaxss", { XMScalar, VexScalar, EXdScalar }, 0 },
10653 },
10654 {
10655 /* VEX_W_0F5F_P_2 */
10656 { "vmaxpd", { XM, Vex, EXx }, 0 },
10657 },
10658 {
10659 /* VEX_W_0F5F_P_3 */
10660 { "vmaxsd", { XMScalar, VexScalar, EXqScalar }, 0 },
10661 },
10662 {
10663 /* VEX_W_0F60_P_2 */
10664 { "vpunpcklbw", { XM, Vex, EXx }, 0 },
10665 },
10666 {
10667 /* VEX_W_0F61_P_2 */
10668 { "vpunpcklwd", { XM, Vex, EXx }, 0 },
10669 },
10670 {
10671 /* VEX_W_0F62_P_2 */
10672 { "vpunpckldq", { XM, Vex, EXx }, 0 },
10673 },
10674 {
10675 /* VEX_W_0F63_P_2 */
10676 { "vpacksswb", { XM, Vex, EXx }, 0 },
10677 },
10678 {
10679 /* VEX_W_0F64_P_2 */
10680 { "vpcmpgtb", { XM, Vex, EXx }, 0 },
10681 },
10682 {
10683 /* VEX_W_0F65_P_2 */
10684 { "vpcmpgtw", { XM, Vex, EXx }, 0 },
10685 },
10686 {
10687 /* VEX_W_0F66_P_2 */
10688 { "vpcmpgtd", { XM, Vex, EXx }, 0 },
10689 },
10690 {
10691 /* VEX_W_0F67_P_2 */
10692 { "vpackuswb", { XM, Vex, EXx }, 0 },
10693 },
10694 {
10695 /* VEX_W_0F68_P_2 */
10696 { "vpunpckhbw", { XM, Vex, EXx }, 0 },
10697 },
10698 {
10699 /* VEX_W_0F69_P_2 */
10700 { "vpunpckhwd", { XM, Vex, EXx }, 0 },
10701 },
10702 {
10703 /* VEX_W_0F6A_P_2 */
10704 { "vpunpckhdq", { XM, Vex, EXx }, 0 },
10705 },
10706 {
10707 /* VEX_W_0F6B_P_2 */
10708 { "vpackssdw", { XM, Vex, EXx }, 0 },
10709 },
10710 {
10711 /* VEX_W_0F6C_P_2 */
10712 { "vpunpcklqdq", { XM, Vex, EXx }, 0 },
10713 },
10714 {
10715 /* VEX_W_0F6D_P_2 */
10716 { "vpunpckhqdq", { XM, Vex, EXx }, 0 },
10717 },
10718 {
10719 /* VEX_W_0F6F_P_1 */
10720 { "vmovdqu", { XM, EXx }, 0 },
10721 },
10722 {
10723 /* VEX_W_0F6F_P_2 */
10724 { "vmovdqa", { XM, EXx }, 0 },
10725 },
10726 {
10727 /* VEX_W_0F70_P_1 */
10728 { "vpshufhw", { XM, EXx, Ib }, 0 },
10729 },
10730 {
10731 /* VEX_W_0F70_P_2 */
10732 { "vpshufd", { XM, EXx, Ib }, 0 },
10733 },
10734 {
10735 /* VEX_W_0F70_P_3 */
10736 { "vpshuflw", { XM, EXx, Ib }, 0 },
10737 },
10738 {
10739 /* VEX_W_0F71_R_2_P_2 */
10740 { "vpsrlw", { Vex, XS, Ib }, 0 },
10741 },
10742 {
10743 /* VEX_W_0F71_R_4_P_2 */
10744 { "vpsraw", { Vex, XS, Ib }, 0 },
10745 },
10746 {
10747 /* VEX_W_0F71_R_6_P_2 */
10748 { "vpsllw", { Vex, XS, Ib }, 0 },
10749 },
10750 {
10751 /* VEX_W_0F72_R_2_P_2 */
10752 { "vpsrld", { Vex, XS, Ib }, 0 },
10753 },
10754 {
10755 /* VEX_W_0F72_R_4_P_2 */
10756 { "vpsrad", { Vex, XS, Ib }, 0 },
10757 },
10758 {
10759 /* VEX_W_0F72_R_6_P_2 */
10760 { "vpslld", { Vex, XS, Ib }, 0 },
10761 },
10762 {
10763 /* VEX_W_0F73_R_2_P_2 */
10764 { "vpsrlq", { Vex, XS, Ib }, 0 },
10765 },
10766 {
10767 /* VEX_W_0F73_R_3_P_2 */
10768 { "vpsrldq", { Vex, XS, Ib }, 0 },
10769 },
10770 {
10771 /* VEX_W_0F73_R_6_P_2 */
10772 { "vpsllq", { Vex, XS, Ib }, 0 },
10773 },
10774 {
10775 /* VEX_W_0F73_R_7_P_2 */
10776 { "vpslldq", { Vex, XS, Ib }, 0 },
10777 },
10778 {
10779 /* VEX_W_0F74_P_2 */
10780 { "vpcmpeqb", { XM, Vex, EXx }, 0 },
10781 },
10782 {
10783 /* VEX_W_0F75_P_2 */
10784 { "vpcmpeqw", { XM, Vex, EXx }, 0 },
10785 },
10786 {
10787 /* VEX_W_0F76_P_2 */
10788 { "vpcmpeqd", { XM, Vex, EXx }, 0 },
10789 },
10790 {
10791 /* VEX_W_0F77_P_0 */
10792 { "", { VZERO }, 0 },
10793 },
10794 {
10795 /* VEX_W_0F7C_P_2 */
10796 { "vhaddpd", { XM, Vex, EXx }, 0 },
10797 },
10798 {
10799 /* VEX_W_0F7C_P_3 */
10800 { "vhaddps", { XM, Vex, EXx }, 0 },
10801 },
10802 {
10803 /* VEX_W_0F7D_P_2 */
10804 { "vhsubpd", { XM, Vex, EXx }, 0 },
10805 },
10806 {
10807 /* VEX_W_0F7D_P_3 */
10808 { "vhsubps", { XM, Vex, EXx }, 0 },
10809 },
10810 {
10811 /* VEX_W_0F7E_P_1 */
10812 { "vmovq", { XMScalar, EXqScalar }, 0 },
10813 },
10814 {
10815 /* VEX_W_0F7F_P_1 */
10816 { "vmovdqu", { EXxS, XM }, 0 },
10817 },
10818 {
10819 /* VEX_W_0F7F_P_2 */
10820 { "vmovdqa", { EXxS, XM }, 0 },
10821 },
10822 {
10823 /* VEX_W_0F90_P_0_LEN_0 */
10824 { "kmovw", { MaskG, MaskE }, 0 },
10825 { "kmovq", { MaskG, MaskE }, 0 },
10826 },
10827 {
10828 /* VEX_W_0F90_P_2_LEN_0 */
10829 { "kmovb", { MaskG, MaskBDE }, 0 },
10830 { "kmovd", { MaskG, MaskBDE }, 0 },
10831 },
10832 {
10833 /* VEX_W_0F91_P_0_LEN_0 */
10834 { MOD_TABLE (MOD_VEX_W_0_0F91_P_0_LEN_0) },
10835 { MOD_TABLE (MOD_VEX_W_1_0F91_P_0_LEN_0) },
10836 },
10837 {
10838 /* VEX_W_0F91_P_2_LEN_0 */
10839 { MOD_TABLE (MOD_VEX_W_0_0F91_P_2_LEN_0) },
10840 { MOD_TABLE (MOD_VEX_W_1_0F91_P_2_LEN_0) },
10841 },
10842 {
10843 /* VEX_W_0F92_P_0_LEN_0 */
10844 { MOD_TABLE (MOD_VEX_W_0_0F92_P_0_LEN_0) },
10845 },
10846 {
10847 /* VEX_W_0F92_P_2_LEN_0 */
10848 { MOD_TABLE (MOD_VEX_W_0_0F92_P_2_LEN_0) },
10849 },
10850 {
10851 /* VEX_W_0F92_P_3_LEN_0 */
10852 { MOD_TABLE (MOD_VEX_W_0_0F92_P_3_LEN_0) },
10853 { MOD_TABLE (MOD_VEX_W_1_0F92_P_3_LEN_0) },
10854 },
10855 {
10856 /* VEX_W_0F93_P_0_LEN_0 */
10857 { MOD_TABLE (MOD_VEX_W_0_0F93_P_0_LEN_0) },
10858 },
10859 {
10860 /* VEX_W_0F93_P_2_LEN_0 */
10861 { MOD_TABLE (MOD_VEX_W_0_0F93_P_2_LEN_0) },
10862 },
10863 {
10864 /* VEX_W_0F93_P_3_LEN_0 */
10865 { MOD_TABLE (MOD_VEX_W_0_0F93_P_3_LEN_0) },
10866 { MOD_TABLE (MOD_VEX_W_1_0F93_P_3_LEN_0) },
10867 },
10868 {
10869 /* VEX_W_0F98_P_0_LEN_0 */
10870 { MOD_TABLE (MOD_VEX_W_0_0F98_P_0_LEN_0) },
10871 { MOD_TABLE (MOD_VEX_W_1_0F98_P_0_LEN_0) },
10872 },
10873 {
10874 /* VEX_W_0F98_P_2_LEN_0 */
10875 { MOD_TABLE (MOD_VEX_W_0_0F98_P_2_LEN_0) },
10876 { MOD_TABLE (MOD_VEX_W_1_0F98_P_2_LEN_0) },
10877 },
10878 {
10879 /* VEX_W_0F99_P_0_LEN_0 */
10880 { MOD_TABLE (MOD_VEX_W_0_0F99_P_0_LEN_0) },
10881 { MOD_TABLE (MOD_VEX_W_1_0F99_P_0_LEN_0) },
10882 },
10883 {
10884 /* VEX_W_0F99_P_2_LEN_0 */
10885 { MOD_TABLE (MOD_VEX_W_0_0F99_P_2_LEN_0) },
10886 { MOD_TABLE (MOD_VEX_W_1_0F99_P_2_LEN_0) },
10887 },
10888 {
10889 /* VEX_W_0FAE_R_2_M_0 */
10890 { "vldmxcsr", { Md }, 0 },
10891 },
10892 {
10893 /* VEX_W_0FAE_R_3_M_0 */
10894 { "vstmxcsr", { Md }, 0 },
10895 },
10896 {
10897 /* VEX_W_0FC2_P_0 */
10898 { "vcmpps", { XM, Vex, EXx, VCMP }, 0 },
10899 },
10900 {
10901 /* VEX_W_0FC2_P_1 */
10902 { "vcmpss", { XMScalar, VexScalar, EXdScalar, VCMP }, 0 },
10903 },
10904 {
10905 /* VEX_W_0FC2_P_2 */
10906 { "vcmppd", { XM, Vex, EXx, VCMP }, 0 },
10907 },
10908 {
10909 /* VEX_W_0FC2_P_3 */
10910 { "vcmpsd", { XMScalar, VexScalar, EXqScalar, VCMP }, 0 },
10911 },
10912 {
10913 /* VEX_W_0FC4_P_2 */
10914 { "vpinsrw", { XM, Vex128, Edqw, Ib }, 0 },
10915 },
10916 {
10917 /* VEX_W_0FC5_P_2 */
10918 { "vpextrw", { Gdq, XS, Ib }, 0 },
10919 },
10920 {
10921 /* VEX_W_0FD0_P_2 */
10922 { "vaddsubpd", { XM, Vex, EXx }, 0 },
10923 },
10924 {
10925 /* VEX_W_0FD0_P_3 */
10926 { "vaddsubps", { XM, Vex, EXx }, 0 },
10927 },
10928 {
10929 /* VEX_W_0FD1_P_2 */
10930 { "vpsrlw", { XM, Vex, EXxmm }, 0 },
10931 },
10932 {
10933 /* VEX_W_0FD2_P_2 */
10934 { "vpsrld", { XM, Vex, EXxmm }, 0 },
10935 },
10936 {
10937 /* VEX_W_0FD3_P_2 */
10938 { "vpsrlq", { XM, Vex, EXxmm }, 0 },
10939 },
10940 {
10941 /* VEX_W_0FD4_P_2 */
10942 { "vpaddq", { XM, Vex, EXx }, 0 },
10943 },
10944 {
10945 /* VEX_W_0FD5_P_2 */
10946 { "vpmullw", { XM, Vex, EXx }, 0 },
10947 },
10948 {
10949 /* VEX_W_0FD6_P_2 */
10950 { "vmovq", { EXqScalarS, XMScalar }, 0 },
10951 },
10952 {
10953 /* VEX_W_0FD7_P_2_M_1 */
10954 { "vpmovmskb", { Gdq, XS }, 0 },
10955 },
10956 {
10957 /* VEX_W_0FD8_P_2 */
10958 { "vpsubusb", { XM, Vex, EXx }, 0 },
10959 },
10960 {
10961 /* VEX_W_0FD9_P_2 */
10962 { "vpsubusw", { XM, Vex, EXx }, 0 },
10963 },
10964 {
10965 /* VEX_W_0FDA_P_2 */
10966 { "vpminub", { XM, Vex, EXx }, 0 },
10967 },
10968 {
10969 /* VEX_W_0FDB_P_2 */
10970 { "vpand", { XM, Vex, EXx }, 0 },
10971 },
10972 {
10973 /* VEX_W_0FDC_P_2 */
10974 { "vpaddusb", { XM, Vex, EXx }, 0 },
10975 },
10976 {
10977 /* VEX_W_0FDD_P_2 */
10978 { "vpaddusw", { XM, Vex, EXx }, 0 },
10979 },
10980 {
10981 /* VEX_W_0FDE_P_2 */
10982 { "vpmaxub", { XM, Vex, EXx }, 0 },
10983 },
10984 {
10985 /* VEX_W_0FDF_P_2 */
10986 { "vpandn", { XM, Vex, EXx }, 0 },
10987 },
10988 {
10989 /* VEX_W_0FE0_P_2 */
10990 { "vpavgb", { XM, Vex, EXx }, 0 },
10991 },
10992 {
10993 /* VEX_W_0FE1_P_2 */
10994 { "vpsraw", { XM, Vex, EXxmm }, 0 },
10995 },
10996 {
10997 /* VEX_W_0FE2_P_2 */
10998 { "vpsrad", { XM, Vex, EXxmm }, 0 },
10999 },
11000 {
11001 /* VEX_W_0FE3_P_2 */
11002 { "vpavgw", { XM, Vex, EXx }, 0 },
11003 },
11004 {
11005 /* VEX_W_0FE4_P_2 */
11006 { "vpmulhuw", { XM, Vex, EXx }, 0 },
11007 },
11008 {
11009 /* VEX_W_0FE5_P_2 */
11010 { "vpmulhw", { XM, Vex, EXx }, 0 },
11011 },
11012 {
11013 /* VEX_W_0FE6_P_1 */
11014 { "vcvtdq2pd", { XM, EXxmmq }, 0 },
11015 },
11016 {
11017 /* VEX_W_0FE6_P_2 */
11018 { "vcvttpd2dq%XY", { XMM, EXx }, 0 },
11019 },
11020 {
11021 /* VEX_W_0FE6_P_3 */
11022 { "vcvtpd2dq%XY", { XMM, EXx }, 0 },
11023 },
11024 {
11025 /* VEX_W_0FE7_P_2_M_0 */
11026 { "vmovntdq", { Mx, XM }, 0 },
11027 },
11028 {
11029 /* VEX_W_0FE8_P_2 */
11030 { "vpsubsb", { XM, Vex, EXx }, 0 },
11031 },
11032 {
11033 /* VEX_W_0FE9_P_2 */
11034 { "vpsubsw", { XM, Vex, EXx }, 0 },
11035 },
11036 {
11037 /* VEX_W_0FEA_P_2 */
11038 { "vpminsw", { XM, Vex, EXx }, 0 },
11039 },
11040 {
11041 /* VEX_W_0FEB_P_2 */
11042 { "vpor", { XM, Vex, EXx }, 0 },
11043 },
11044 {
11045 /* VEX_W_0FEC_P_2 */
11046 { "vpaddsb", { XM, Vex, EXx }, 0 },
11047 },
11048 {
11049 /* VEX_W_0FED_P_2 */
11050 { "vpaddsw", { XM, Vex, EXx }, 0 },
11051 },
11052 {
11053 /* VEX_W_0FEE_P_2 */
11054 { "vpmaxsw", { XM, Vex, EXx }, 0 },
11055 },
11056 {
11057 /* VEX_W_0FEF_P_2 */
11058 { "vpxor", { XM, Vex, EXx }, 0 },
11059 },
11060 {
11061 /* VEX_W_0FF0_P_3_M_0 */
11062 { "vlddqu", { XM, M }, 0 },
11063 },
11064 {
11065 /* VEX_W_0FF1_P_2 */
11066 { "vpsllw", { XM, Vex, EXxmm }, 0 },
11067 },
11068 {
11069 /* VEX_W_0FF2_P_2 */
11070 { "vpslld", { XM, Vex, EXxmm }, 0 },
11071 },
11072 {
11073 /* VEX_W_0FF3_P_2 */
11074 { "vpsllq", { XM, Vex, EXxmm }, 0 },
11075 },
11076 {
11077 /* VEX_W_0FF4_P_2 */
11078 { "vpmuludq", { XM, Vex, EXx }, 0 },
11079 },
11080 {
11081 /* VEX_W_0FF5_P_2 */
11082 { "vpmaddwd", { XM, Vex, EXx }, 0 },
11083 },
11084 {
11085 /* VEX_W_0FF6_P_2 */
11086 { "vpsadbw", { XM, Vex, EXx }, 0 },
11087 },
11088 {
11089 /* VEX_W_0FF7_P_2 */
11090 { "vmaskmovdqu", { XM, XS }, 0 },
11091 },
11092 {
11093 /* VEX_W_0FF8_P_2 */
11094 { "vpsubb", { XM, Vex, EXx }, 0 },
11095 },
11096 {
11097 /* VEX_W_0FF9_P_2 */
11098 { "vpsubw", { XM, Vex, EXx }, 0 },
11099 },
11100 {
11101 /* VEX_W_0FFA_P_2 */
11102 { "vpsubd", { XM, Vex, EXx }, 0 },
11103 },
11104 {
11105 /* VEX_W_0FFB_P_2 */
11106 { "vpsubq", { XM, Vex, EXx }, 0 },
11107 },
11108 {
11109 /* VEX_W_0FFC_P_2 */
11110 { "vpaddb", { XM, Vex, EXx }, 0 },
11111 },
11112 {
11113 /* VEX_W_0FFD_P_2 */
11114 { "vpaddw", { XM, Vex, EXx }, 0 },
11115 },
11116 {
11117 /* VEX_W_0FFE_P_2 */
11118 { "vpaddd", { XM, Vex, EXx }, 0 },
11119 },
11120 {
11121 /* VEX_W_0F3800_P_2 */
11122 { "vpshufb", { XM, Vex, EXx }, 0 },
11123 },
11124 {
11125 /* VEX_W_0F3801_P_2 */
11126 { "vphaddw", { XM, Vex, EXx }, 0 },
11127 },
11128 {
11129 /* VEX_W_0F3802_P_2 */
11130 { "vphaddd", { XM, Vex, EXx }, 0 },
11131 },
11132 {
11133 /* VEX_W_0F3803_P_2 */
11134 { "vphaddsw", { XM, Vex, EXx }, 0 },
11135 },
11136 {
11137 /* VEX_W_0F3804_P_2 */
11138 { "vpmaddubsw", { XM, Vex, EXx }, 0 },
11139 },
11140 {
11141 /* VEX_W_0F3805_P_2 */
11142 { "vphsubw", { XM, Vex, EXx }, 0 },
11143 },
11144 {
11145 /* VEX_W_0F3806_P_2 */
11146 { "vphsubd", { XM, Vex, EXx }, 0 },
11147 },
11148 {
11149 /* VEX_W_0F3807_P_2 */
11150 { "vphsubsw", { XM, Vex, EXx }, 0 },
11151 },
11152 {
11153 /* VEX_W_0F3808_P_2 */
11154 { "vpsignb", { XM, Vex, EXx }, 0 },
11155 },
11156 {
11157 /* VEX_W_0F3809_P_2 */
11158 { "vpsignw", { XM, Vex, EXx }, 0 },
11159 },
11160 {
11161 /* VEX_W_0F380A_P_2 */
11162 { "vpsignd", { XM, Vex, EXx }, 0 },
11163 },
11164 {
11165 /* VEX_W_0F380B_P_2 */
11166 { "vpmulhrsw", { XM, Vex, EXx }, 0 },
11167 },
11168 {
11169 /* VEX_W_0F380C_P_2 */
11170 { "vpermilps", { XM, Vex, EXx }, 0 },
11171 },
11172 {
11173 /* VEX_W_0F380D_P_2 */
11174 { "vpermilpd", { XM, Vex, EXx }, 0 },
11175 },
11176 {
11177 /* VEX_W_0F380E_P_2 */
11178 { "vtestps", { XM, EXx }, 0 },
11179 },
11180 {
11181 /* VEX_W_0F380F_P_2 */
11182 { "vtestpd", { XM, EXx }, 0 },
11183 },
11184 {
11185 /* VEX_W_0F3816_P_2 */
11186 { "vpermps", { XM, Vex, EXx }, 0 },
11187 },
11188 {
11189 /* VEX_W_0F3817_P_2 */
11190 { "vptest", { XM, EXx }, 0 },
11191 },
11192 {
11193 /* VEX_W_0F3818_P_2 */
11194 { "vbroadcastss", { XM, EXxmm_md }, 0 },
11195 },
11196 {
11197 /* VEX_W_0F3819_P_2 */
11198 { "vbroadcastsd", { XM, EXxmm_mq }, 0 },
11199 },
11200 {
11201 /* VEX_W_0F381A_P_2_M_0 */
11202 { "vbroadcastf128", { XM, Mxmm }, 0 },
11203 },
11204 {
11205 /* VEX_W_0F381C_P_2 */
11206 { "vpabsb", { XM, EXx }, 0 },
11207 },
11208 {
11209 /* VEX_W_0F381D_P_2 */
11210 { "vpabsw", { XM, EXx }, 0 },
11211 },
11212 {
11213 /* VEX_W_0F381E_P_2 */
11214 { "vpabsd", { XM, EXx }, 0 },
11215 },
11216 {
11217 /* VEX_W_0F3820_P_2 */
11218 { "vpmovsxbw", { XM, EXxmmq }, 0 },
11219 },
11220 {
11221 /* VEX_W_0F3821_P_2 */
11222 { "vpmovsxbd", { XM, EXxmmqd }, 0 },
11223 },
11224 {
11225 /* VEX_W_0F3822_P_2 */
11226 { "vpmovsxbq", { XM, EXxmmdw }, 0 },
11227 },
11228 {
11229 /* VEX_W_0F3823_P_2 */
11230 { "vpmovsxwd", { XM, EXxmmq }, 0 },
11231 },
11232 {
11233 /* VEX_W_0F3824_P_2 */
11234 { "vpmovsxwq", { XM, EXxmmqd }, 0 },
11235 },
11236 {
11237 /* VEX_W_0F3825_P_2 */
11238 { "vpmovsxdq", { XM, EXxmmq }, 0 },
11239 },
11240 {
11241 /* VEX_W_0F3828_P_2 */
11242 { "vpmuldq", { XM, Vex, EXx }, 0 },
11243 },
11244 {
11245 /* VEX_W_0F3829_P_2 */
11246 { "vpcmpeqq", { XM, Vex, EXx }, 0 },
11247 },
11248 {
11249 /* VEX_W_0F382A_P_2_M_0 */
11250 { "vmovntdqa", { XM, Mx }, 0 },
11251 },
11252 {
11253 /* VEX_W_0F382B_P_2 */
11254 { "vpackusdw", { XM, Vex, EXx }, 0 },
11255 },
11256 {
11257 /* VEX_W_0F382C_P_2_M_0 */
11258 { "vmaskmovps", { XM, Vex, Mx }, 0 },
11259 },
11260 {
11261 /* VEX_W_0F382D_P_2_M_0 */
11262 { "vmaskmovpd", { XM, Vex, Mx }, 0 },
11263 },
11264 {
11265 /* VEX_W_0F382E_P_2_M_0 */
11266 { "vmaskmovps", { Mx, Vex, XM }, 0 },
11267 },
11268 {
11269 /* VEX_W_0F382F_P_2_M_0 */
11270 { "vmaskmovpd", { Mx, Vex, XM }, 0 },
11271 },
11272 {
11273 /* VEX_W_0F3830_P_2 */
11274 { "vpmovzxbw", { XM, EXxmmq }, 0 },
11275 },
11276 {
11277 /* VEX_W_0F3831_P_2 */
11278 { "vpmovzxbd", { XM, EXxmmqd }, 0 },
11279 },
11280 {
11281 /* VEX_W_0F3832_P_2 */
11282 { "vpmovzxbq", { XM, EXxmmdw }, 0 },
11283 },
11284 {
11285 /* VEX_W_0F3833_P_2 */
11286 { "vpmovzxwd", { XM, EXxmmq }, 0 },
11287 },
11288 {
11289 /* VEX_W_0F3834_P_2 */
11290 { "vpmovzxwq", { XM, EXxmmqd }, 0 },
11291 },
11292 {
11293 /* VEX_W_0F3835_P_2 */
11294 { "vpmovzxdq", { XM, EXxmmq }, 0 },
11295 },
11296 {
11297 /* VEX_W_0F3836_P_2 */
11298 { "vpermd", { XM, Vex, EXx }, 0 },
11299 },
11300 {
11301 /* VEX_W_0F3837_P_2 */
11302 { "vpcmpgtq", { XM, Vex, EXx }, 0 },
11303 },
11304 {
11305 /* VEX_W_0F3838_P_2 */
11306 { "vpminsb", { XM, Vex, EXx }, 0 },
11307 },
11308 {
11309 /* VEX_W_0F3839_P_2 */
11310 { "vpminsd", { XM, Vex, EXx }, 0 },
11311 },
11312 {
11313 /* VEX_W_0F383A_P_2 */
11314 { "vpminuw", { XM, Vex, EXx }, 0 },
11315 },
11316 {
11317 /* VEX_W_0F383B_P_2 */
11318 { "vpminud", { XM, Vex, EXx }, 0 },
11319 },
11320 {
11321 /* VEX_W_0F383C_P_2 */
11322 { "vpmaxsb", { XM, Vex, EXx }, 0 },
11323 },
11324 {
11325 /* VEX_W_0F383D_P_2 */
11326 { "vpmaxsd", { XM, Vex, EXx }, 0 },
11327 },
11328 {
11329 /* VEX_W_0F383E_P_2 */
11330 { "vpmaxuw", { XM, Vex, EXx }, 0 },
11331 },
11332 {
11333 /* VEX_W_0F383F_P_2 */
11334 { "vpmaxud", { XM, Vex, EXx }, 0 },
11335 },
11336 {
11337 /* VEX_W_0F3840_P_2 */
11338 { "vpmulld", { XM, Vex, EXx }, 0 },
11339 },
11340 {
11341 /* VEX_W_0F3841_P_2 */
11342 { "vphminposuw", { XM, EXx }, 0 },
11343 },
11344 {
11345 /* VEX_W_0F3846_P_2 */
11346 { "vpsravd", { XM, Vex, EXx }, 0 },
11347 },
11348 {
11349 /* VEX_W_0F3858_P_2 */
11350 { "vpbroadcastd", { XM, EXxmm_md }, 0 },
11351 },
11352 {
11353 /* VEX_W_0F3859_P_2 */
11354 { "vpbroadcastq", { XM, EXxmm_mq }, 0 },
11355 },
11356 {
11357 /* VEX_W_0F385A_P_2_M_0 */
11358 { "vbroadcasti128", { XM, Mxmm }, 0 },
11359 },
11360 {
11361 /* VEX_W_0F3878_P_2 */
11362 { "vpbroadcastb", { XM, EXxmm_mb }, 0 },
11363 },
11364 {
11365 /* VEX_W_0F3879_P_2 */
11366 { "vpbroadcastw", { XM, EXxmm_mw }, 0 },
11367 },
11368 {
11369 /* VEX_W_0F38CF_P_2 */
11370 { "vgf2p8mulb", { XM, Vex, EXx }, 0 },
11371 },
11372 {
11373 /* VEX_W_0F38DB_P_2 */
11374 { "vaesimc", { XM, EXx }, 0 },
11375 },
11376 {
11377 /* VEX_W_0F3A00_P_2 */
11378 { Bad_Opcode },
11379 { "vpermq", { XM, EXx, Ib }, 0 },
11380 },
11381 {
11382 /* VEX_W_0F3A01_P_2 */
11383 { Bad_Opcode },
11384 { "vpermpd", { XM, EXx, Ib }, 0 },
11385 },
11386 {
11387 /* VEX_W_0F3A02_P_2 */
11388 { "vpblendd", { XM, Vex, EXx, Ib }, 0 },
11389 },
11390 {
11391 /* VEX_W_0F3A04_P_2 */
11392 { "vpermilps", { XM, EXx, Ib }, 0 },
11393 },
11394 {
11395 /* VEX_W_0F3A05_P_2 */
11396 { "vpermilpd", { XM, EXx, Ib }, 0 },
11397 },
11398 {
11399 /* VEX_W_0F3A06_P_2 */
11400 { "vperm2f128", { XM, Vex256, EXx, Ib }, 0 },
11401 },
11402 {
11403 /* VEX_W_0F3A08_P_2 */
11404 { "vroundps", { XM, EXx, Ib }, 0 },
11405 },
11406 {
11407 /* VEX_W_0F3A09_P_2 */
11408 { "vroundpd", { XM, EXx, Ib }, 0 },
11409 },
11410 {
11411 /* VEX_W_0F3A0A_P_2 */
11412 { "vroundss", { XMScalar, VexScalar, EXdScalar, Ib }, 0 },
11413 },
11414 {
11415 /* VEX_W_0F3A0B_P_2 */
11416 { "vroundsd", { XMScalar, VexScalar, EXqScalar, Ib }, 0 },
11417 },
11418 {
11419 /* VEX_W_0F3A0C_P_2 */
11420 { "vblendps", { XM, Vex, EXx, Ib }, 0 },
11421 },
11422 {
11423 /* VEX_W_0F3A0D_P_2 */
11424 { "vblendpd", { XM, Vex, EXx, Ib }, 0 },
11425 },
11426 {
11427 /* VEX_W_0F3A0E_P_2 */
11428 { "vpblendw", { XM, Vex, EXx, Ib }, 0 },
11429 },
11430 {
11431 /* VEX_W_0F3A0F_P_2 */
11432 { "vpalignr", { XM, Vex, EXx, Ib }, 0 },
11433 },
11434 {
11435 /* VEX_W_0F3A14_P_2 */
11436 { "vpextrb", { Edqb, XM, Ib }, 0 },
11437 },
11438 {
11439 /* VEX_W_0F3A15_P_2 */
11440 { "vpextrw", { Edqw, XM, Ib }, 0 },
11441 },
11442 {
11443 /* VEX_W_0F3A18_P_2 */
11444 { "vinsertf128", { XM, Vex256, EXxmm, Ib }, 0 },
11445 },
11446 {
11447 /* VEX_W_0F3A19_P_2 */
11448 { "vextractf128", { EXxmm, XM, Ib }, 0 },
11449 },
11450 {
11451 /* VEX_W_0F3A20_P_2 */
11452 { "vpinsrb", { XM, Vex128, Edqb, Ib }, 0 },
11453 },
11454 {
11455 /* VEX_W_0F3A21_P_2 */
11456 { "vinsertps", { XM, Vex128, EXd, Ib }, 0 },
11457 },
11458 {
11459 /* VEX_W_0F3A30_P_2_LEN_0 */
11460 { MOD_TABLE (MOD_VEX_W_0_0F3A30_P_2_LEN_0) },
11461 { MOD_TABLE (MOD_VEX_W_1_0F3A30_P_2_LEN_0) },
11462 },
11463 {
11464 /* VEX_W_0F3A31_P_2_LEN_0 */
11465 { MOD_TABLE (MOD_VEX_W_0_0F3A31_P_2_LEN_0) },
11466 { MOD_TABLE (MOD_VEX_W_1_0F3A31_P_2_LEN_0) },
11467 },
11468 {
11469 /* VEX_W_0F3A32_P_2_LEN_0 */
11470 { MOD_TABLE (MOD_VEX_W_0_0F3A32_P_2_LEN_0) },
11471 { MOD_TABLE (MOD_VEX_W_1_0F3A32_P_2_LEN_0) },
11472 },
11473 {
11474 /* VEX_W_0F3A33_P_2_LEN_0 */
11475 { MOD_TABLE (MOD_VEX_W_0_0F3A33_P_2_LEN_0) },
11476 { MOD_TABLE (MOD_VEX_W_1_0F3A33_P_2_LEN_0) },
11477 },
11478 {
11479 /* VEX_W_0F3A38_P_2 */
11480 { "vinserti128", { XM, Vex256, EXxmm, Ib }, 0 },
11481 },
11482 {
11483 /* VEX_W_0F3A39_P_2 */
11484 { "vextracti128", { EXxmm, XM, Ib }, 0 },
11485 },
11486 {
11487 /* VEX_W_0F3A40_P_2 */
11488 { "vdpps", { XM, Vex, EXx, Ib }, 0 },
11489 },
11490 {
11491 /* VEX_W_0F3A41_P_2 */
11492 { "vdppd", { XM, Vex128, EXx, Ib }, 0 },
11493 },
11494 {
11495 /* VEX_W_0F3A42_P_2 */
11496 { "vmpsadbw", { XM, Vex, EXx, Ib }, 0 },
11497 },
11498 {
11499 /* VEX_W_0F3A46_P_2 */
11500 { "vperm2i128", { XM, Vex256, EXx, Ib }, 0 },
11501 },
11502 {
11503 /* VEX_W_0F3A48_P_2 */
11504 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
11505 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
11506 },
11507 {
11508 /* VEX_W_0F3A49_P_2 */
11509 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
11510 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
11511 },
11512 {
11513 /* VEX_W_0F3A4A_P_2 */
11514 { "vblendvps", { XM, Vex, EXx, XMVexI4 }, 0 },
11515 },
11516 {
11517 /* VEX_W_0F3A4B_P_2 */
11518 { "vblendvpd", { XM, Vex, EXx, XMVexI4 }, 0 },
11519 },
11520 {
11521 /* VEX_W_0F3A4C_P_2 */
11522 { "vpblendvb", { XM, Vex, EXx, XMVexI4 }, 0 },
11523 },
11524 {
11525 /* VEX_W_0F3A62_P_2 */
11526 { "vpcmpistrm", { XM, EXx, Ib }, 0 },
11527 },
11528 {
11529 /* VEX_W_0F3A63_P_2 */
11530 { "vpcmpistri", { XM, EXx, Ib }, 0 },
11531 },
11532 {
11533 /* VEX_W_0F3ACE_P_2 */
11534 { Bad_Opcode },
11535 { "vgf2p8affineqb", { XM, Vex, EXx, Ib }, 0 },
11536 },
11537 {
11538 /* VEX_W_0F3ACF_P_2 */
11539 { Bad_Opcode },
11540 { "vgf2p8affineinvqb", { XM, Vex, EXx, Ib }, 0 },
11541 },
11542 {
11543 /* VEX_W_0F3ADF_P_2 */
11544 { "vaeskeygenassist", { XM, EXx, Ib }, 0 },
11545 },
11546 #define NEED_VEX_W_TABLE
11547 #include "i386-dis-evex.h"
11548 #undef NEED_VEX_W_TABLE
11549 };
11550
11551 static const struct dis386 mod_table[][2] = {
11552 {
11553 /* MOD_8D */
11554 { "leaS", { Gv, M }, 0 },
11555 },
11556 {
11557 /* MOD_C6_REG_7 */
11558 { Bad_Opcode },
11559 { RM_TABLE (RM_C6_REG_7) },
11560 },
11561 {
11562 /* MOD_C7_REG_7 */
11563 { Bad_Opcode },
11564 { RM_TABLE (RM_C7_REG_7) },
11565 },
11566 {
11567 /* MOD_FF_REG_3 */
11568 { "Jcall^", { indirEp }, 0 },
11569 },
11570 {
11571 /* MOD_FF_REG_5 */
11572 { "Jjmp^", { indirEp }, 0 },
11573 },
11574 {
11575 /* MOD_0F01_REG_0 */
11576 { X86_64_TABLE (X86_64_0F01_REG_0) },
11577 { RM_TABLE (RM_0F01_REG_0) },
11578 },
11579 {
11580 /* MOD_0F01_REG_1 */
11581 { X86_64_TABLE (X86_64_0F01_REG_1) },
11582 { RM_TABLE (RM_0F01_REG_1) },
11583 },
11584 {
11585 /* MOD_0F01_REG_2 */
11586 { X86_64_TABLE (X86_64_0F01_REG_2) },
11587 { RM_TABLE (RM_0F01_REG_2) },
11588 },
11589 {
11590 /* MOD_0F01_REG_3 */
11591 { X86_64_TABLE (X86_64_0F01_REG_3) },
11592 { RM_TABLE (RM_0F01_REG_3) },
11593 },
11594 {
11595 /* MOD_0F01_REG_5 */
11596 { PREFIX_TABLE (PREFIX_MOD_0_0F01_REG_5) },
11597 { RM_TABLE (RM_0F01_REG_5) },
11598 },
11599 {
11600 /* MOD_0F01_REG_7 */
11601 { "invlpg", { Mb }, 0 },
11602 { RM_TABLE (RM_0F01_REG_7) },
11603 },
11604 {
11605 /* MOD_0F12_PREFIX_0 */
11606 { "movlps", { XM, EXq }, PREFIX_OPCODE },
11607 { "movhlps", { XM, EXq }, PREFIX_OPCODE },
11608 },
11609 {
11610 /* MOD_0F13 */
11611 { "movlpX", { EXq, XM }, PREFIX_OPCODE },
11612 },
11613 {
11614 /* MOD_0F16_PREFIX_0 */
11615 { "movhps", { XM, EXq }, 0 },
11616 { "movlhps", { XM, EXq }, 0 },
11617 },
11618 {
11619 /* MOD_0F17 */
11620 { "movhpX", { EXq, XM }, PREFIX_OPCODE },
11621 },
11622 {
11623 /* MOD_0F18_REG_0 */
11624 { "prefetchnta", { Mb }, 0 },
11625 },
11626 {
11627 /* MOD_0F18_REG_1 */
11628 { "prefetcht0", { Mb }, 0 },
11629 },
11630 {
11631 /* MOD_0F18_REG_2 */
11632 { "prefetcht1", { Mb }, 0 },
11633 },
11634 {
11635 /* MOD_0F18_REG_3 */
11636 { "prefetcht2", { Mb }, 0 },
11637 },
11638 {
11639 /* MOD_0F18_REG_4 */
11640 { "nop/reserved", { Mb }, 0 },
11641 },
11642 {
11643 /* MOD_0F18_REG_5 */
11644 { "nop/reserved", { Mb }, 0 },
11645 },
11646 {
11647 /* MOD_0F18_REG_6 */
11648 { "nop/reserved", { Mb }, 0 },
11649 },
11650 {
11651 /* MOD_0F18_REG_7 */
11652 { "nop/reserved", { Mb }, 0 },
11653 },
11654 {
11655 /* MOD_0F1A_PREFIX_0 */
11656 { "bndldx", { Gbnd, Mv_bnd }, 0 },
11657 { "nopQ", { Ev }, 0 },
11658 },
11659 {
11660 /* MOD_0F1B_PREFIX_0 */
11661 { "bndstx", { Mv_bnd, Gbnd }, 0 },
11662 { "nopQ", { Ev }, 0 },
11663 },
11664 {
11665 /* MOD_0F1B_PREFIX_1 */
11666 { "bndmk", { Gbnd, Mv_bnd }, 0 },
11667 { "nopQ", { Ev }, 0 },
11668 },
11669 {
11670 /* MOD_0F1C_PREFIX_0 */
11671 { REG_TABLE (REG_0F1C_MOD_0) },
11672 { "nopQ", { Ev }, 0 },
11673 },
11674 {
11675 /* MOD_0F1E_PREFIX_1 */
11676 { "nopQ", { Ev }, 0 },
11677 { REG_TABLE (REG_0F1E_MOD_3) },
11678 },
11679 {
11680 /* MOD_0F24 */
11681 { Bad_Opcode },
11682 { "movL", { Rd, Td }, 0 },
11683 },
11684 {
11685 /* MOD_0F26 */
11686 { Bad_Opcode },
11687 { "movL", { Td, Rd }, 0 },
11688 },
11689 {
11690 /* MOD_0F2B_PREFIX_0 */
11691 {"movntps", { Mx, XM }, PREFIX_OPCODE },
11692 },
11693 {
11694 /* MOD_0F2B_PREFIX_1 */
11695 {"movntss", { Md, XM }, PREFIX_OPCODE },
11696 },
11697 {
11698 /* MOD_0F2B_PREFIX_2 */
11699 {"movntpd", { Mx, XM }, PREFIX_OPCODE },
11700 },
11701 {
11702 /* MOD_0F2B_PREFIX_3 */
11703 {"movntsd", { Mq, XM }, PREFIX_OPCODE },
11704 },
11705 {
11706 /* MOD_0F51 */
11707 { Bad_Opcode },
11708 { "movmskpX", { Gdq, XS }, PREFIX_OPCODE },
11709 },
11710 {
11711 /* MOD_0F71_REG_2 */
11712 { Bad_Opcode },
11713 { "psrlw", { MS, Ib }, 0 },
11714 },
11715 {
11716 /* MOD_0F71_REG_4 */
11717 { Bad_Opcode },
11718 { "psraw", { MS, Ib }, 0 },
11719 },
11720 {
11721 /* MOD_0F71_REG_6 */
11722 { Bad_Opcode },
11723 { "psllw", { MS, Ib }, 0 },
11724 },
11725 {
11726 /* MOD_0F72_REG_2 */
11727 { Bad_Opcode },
11728 { "psrld", { MS, Ib }, 0 },
11729 },
11730 {
11731 /* MOD_0F72_REG_4 */
11732 { Bad_Opcode },
11733 { "psrad", { MS, Ib }, 0 },
11734 },
11735 {
11736 /* MOD_0F72_REG_6 */
11737 { Bad_Opcode },
11738 { "pslld", { MS, Ib }, 0 },
11739 },
11740 {
11741 /* MOD_0F73_REG_2 */
11742 { Bad_Opcode },
11743 { "psrlq", { MS, Ib }, 0 },
11744 },
11745 {
11746 /* MOD_0F73_REG_3 */
11747 { Bad_Opcode },
11748 { PREFIX_TABLE (PREFIX_0F73_REG_3) },
11749 },
11750 {
11751 /* MOD_0F73_REG_6 */
11752 { Bad_Opcode },
11753 { "psllq", { MS, Ib }, 0 },
11754 },
11755 {
11756 /* MOD_0F73_REG_7 */
11757 { Bad_Opcode },
11758 { PREFIX_TABLE (PREFIX_0F73_REG_7) },
11759 },
11760 {
11761 /* MOD_0FAE_REG_0 */
11762 { "fxsave", { FXSAVE }, 0 },
11763 { PREFIX_TABLE (PREFIX_0FAE_REG_0) },
11764 },
11765 {
11766 /* MOD_0FAE_REG_1 */
11767 { "fxrstor", { FXSAVE }, 0 },
11768 { PREFIX_TABLE (PREFIX_0FAE_REG_1) },
11769 },
11770 {
11771 /* MOD_0FAE_REG_2 */
11772 { "ldmxcsr", { Md }, 0 },
11773 { PREFIX_TABLE (PREFIX_0FAE_REG_2) },
11774 },
11775 {
11776 /* MOD_0FAE_REG_3 */
11777 { "stmxcsr", { Md }, 0 },
11778 { PREFIX_TABLE (PREFIX_0FAE_REG_3) },
11779 },
11780 {
11781 /* MOD_0FAE_REG_4 */
11782 { PREFIX_TABLE (PREFIX_MOD_0_0FAE_REG_4) },
11783 { PREFIX_TABLE (PREFIX_MOD_3_0FAE_REG_4) },
11784 },
11785 {
11786 /* MOD_0FAE_REG_5 */
11787 { PREFIX_TABLE (PREFIX_MOD_0_0FAE_REG_5) },
11788 { PREFIX_TABLE (PREFIX_MOD_3_0FAE_REG_5) },
11789 },
11790 {
11791 /* MOD_0FAE_REG_6 */
11792 { PREFIX_TABLE (PREFIX_MOD_0_0FAE_REG_6) },
11793 { PREFIX_TABLE (PREFIX_MOD_1_0FAE_REG_6) },
11794 },
11795 {
11796 /* MOD_0FAE_REG_7 */
11797 { PREFIX_TABLE (PREFIX_0FAE_REG_7) },
11798 { RM_TABLE (RM_0FAE_REG_7) },
11799 },
11800 {
11801 /* MOD_0FB2 */
11802 { "lssS", { Gv, Mp }, 0 },
11803 },
11804 {
11805 /* MOD_0FB4 */
11806 { "lfsS", { Gv, Mp }, 0 },
11807 },
11808 {
11809 /* MOD_0FB5 */
11810 { "lgsS", { Gv, Mp }, 0 },
11811 },
11812 {
11813 /* MOD_0FC3 */
11814 { PREFIX_TABLE (PREFIX_MOD_0_0FC3) },
11815 },
11816 {
11817 /* MOD_0FC7_REG_3 */
11818 { "xrstors", { FXSAVE }, 0 },
11819 },
11820 {
11821 /* MOD_0FC7_REG_4 */
11822 { "xsavec", { FXSAVE }, 0 },
11823 },
11824 {
11825 /* MOD_0FC7_REG_5 */
11826 { "xsaves", { FXSAVE }, 0 },
11827 },
11828 {
11829 /* MOD_0FC7_REG_6 */
11830 { PREFIX_TABLE (PREFIX_MOD_0_0FC7_REG_6) },
11831 { PREFIX_TABLE (PREFIX_MOD_3_0FC7_REG_6) }
11832 },
11833 {
11834 /* MOD_0FC7_REG_7 */
11835 { "vmptrst", { Mq }, 0 },
11836 { PREFIX_TABLE (PREFIX_MOD_3_0FC7_REG_7) }
11837 },
11838 {
11839 /* MOD_0FD7 */
11840 { Bad_Opcode },
11841 { "pmovmskb", { Gdq, MS }, 0 },
11842 },
11843 {
11844 /* MOD_0FE7_PREFIX_2 */
11845 { "movntdq", { Mx, XM }, 0 },
11846 },
11847 {
11848 /* MOD_0FF0_PREFIX_3 */
11849 { "lddqu", { XM, M }, 0 },
11850 },
11851 {
11852 /* MOD_0F382A_PREFIX_2 */
11853 { "movntdqa", { XM, Mx }, 0 },
11854 },
11855 {
11856 /* MOD_0F38F5_PREFIX_2 */
11857 { "wrussK", { M, Gdq }, PREFIX_OPCODE },
11858 },
11859 {
11860 /* MOD_0F38F6_PREFIX_0 */
11861 { "wrssK", { M, Gdq }, PREFIX_OPCODE },
11862 },
11863 {
11864 /* MOD_0F38F8_PREFIX_2 */
11865 { "movdir64b", { Gva, M }, PREFIX_OPCODE },
11866 },
11867 {
11868 /* MOD_0F38F9_PREFIX_0 */
11869 { "movdiri", { Em, Gv }, PREFIX_OPCODE },
11870 },
11871 {
11872 /* MOD_62_32BIT */
11873 { "bound{S|}", { Gv, Ma }, 0 },
11874 { EVEX_TABLE (EVEX_0F) },
11875 },
11876 {
11877 /* MOD_C4_32BIT */
11878 { "lesS", { Gv, Mp }, 0 },
11879 { VEX_C4_TABLE (VEX_0F) },
11880 },
11881 {
11882 /* MOD_C5_32BIT */
11883 { "ldsS", { Gv, Mp }, 0 },
11884 { VEX_C5_TABLE (VEX_0F) },
11885 },
11886 {
11887 /* MOD_VEX_0F12_PREFIX_0 */
11888 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_0) },
11889 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_1) },
11890 },
11891 {
11892 /* MOD_VEX_0F13 */
11893 { VEX_LEN_TABLE (VEX_LEN_0F13_M_0) },
11894 },
11895 {
11896 /* MOD_VEX_0F16_PREFIX_0 */
11897 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_0) },
11898 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_1) },
11899 },
11900 {
11901 /* MOD_VEX_0F17 */
11902 { VEX_LEN_TABLE (VEX_LEN_0F17_M_0) },
11903 },
11904 {
11905 /* MOD_VEX_0F2B */
11906 { VEX_W_TABLE (VEX_W_0F2B_M_0) },
11907 },
11908 {
11909 /* MOD_VEX_W_0_0F41_P_0_LEN_1 */
11910 { Bad_Opcode },
11911 { "kandw", { MaskG, MaskVex, MaskR }, 0 },
11912 },
11913 {
11914 /* MOD_VEX_W_1_0F41_P_0_LEN_1 */
11915 { Bad_Opcode },
11916 { "kandq", { MaskG, MaskVex, MaskR }, 0 },
11917 },
11918 {
11919 /* MOD_VEX_W_0_0F41_P_2_LEN_1 */
11920 { Bad_Opcode },
11921 { "kandb", { MaskG, MaskVex, MaskR }, 0 },
11922 },
11923 {
11924 /* MOD_VEX_W_1_0F41_P_2_LEN_1 */
11925 { Bad_Opcode },
11926 { "kandd", { MaskG, MaskVex, MaskR }, 0 },
11927 },
11928 {
11929 /* MOD_VEX_W_0_0F42_P_0_LEN_1 */
11930 { Bad_Opcode },
11931 { "kandnw", { MaskG, MaskVex, MaskR }, 0 },
11932 },
11933 {
11934 /* MOD_VEX_W_1_0F42_P_0_LEN_1 */
11935 { Bad_Opcode },
11936 { "kandnq", { MaskG, MaskVex, MaskR }, 0 },
11937 },
11938 {
11939 /* MOD_VEX_W_0_0F42_P_2_LEN_1 */
11940 { Bad_Opcode },
11941 { "kandnb", { MaskG, MaskVex, MaskR }, 0 },
11942 },
11943 {
11944 /* MOD_VEX_W_1_0F42_P_2_LEN_1 */
11945 { Bad_Opcode },
11946 { "kandnd", { MaskG, MaskVex, MaskR }, 0 },
11947 },
11948 {
11949 /* MOD_VEX_W_0_0F44_P_0_LEN_0 */
11950 { Bad_Opcode },
11951 { "knotw", { MaskG, MaskR }, 0 },
11952 },
11953 {
11954 /* MOD_VEX_W_1_0F44_P_0_LEN_0 */
11955 { Bad_Opcode },
11956 { "knotq", { MaskG, MaskR }, 0 },
11957 },
11958 {
11959 /* MOD_VEX_W_0_0F44_P_2_LEN_0 */
11960 { Bad_Opcode },
11961 { "knotb", { MaskG, MaskR }, 0 },
11962 },
11963 {
11964 /* MOD_VEX_W_1_0F44_P_2_LEN_0 */
11965 { Bad_Opcode },
11966 { "knotd", { MaskG, MaskR }, 0 },
11967 },
11968 {
11969 /* MOD_VEX_W_0_0F45_P_0_LEN_1 */
11970 { Bad_Opcode },
11971 { "korw", { MaskG, MaskVex, MaskR }, 0 },
11972 },
11973 {
11974 /* MOD_VEX_W_1_0F45_P_0_LEN_1 */
11975 { Bad_Opcode },
11976 { "korq", { MaskG, MaskVex, MaskR }, 0 },
11977 },
11978 {
11979 /* MOD_VEX_W_0_0F45_P_2_LEN_1 */
11980 { Bad_Opcode },
11981 { "korb", { MaskG, MaskVex, MaskR }, 0 },
11982 },
11983 {
11984 /* MOD_VEX_W_1_0F45_P_2_LEN_1 */
11985 { Bad_Opcode },
11986 { "kord", { MaskG, MaskVex, MaskR }, 0 },
11987 },
11988 {
11989 /* MOD_VEX_W_0_0F46_P_0_LEN_1 */
11990 { Bad_Opcode },
11991 { "kxnorw", { MaskG, MaskVex, MaskR }, 0 },
11992 },
11993 {
11994 /* MOD_VEX_W_1_0F46_P_0_LEN_1 */
11995 { Bad_Opcode },
11996 { "kxnorq", { MaskG, MaskVex, MaskR }, 0 },
11997 },
11998 {
11999 /* MOD_VEX_W_0_0F46_P_2_LEN_1 */
12000 { Bad_Opcode },
12001 { "kxnorb", { MaskG, MaskVex, MaskR }, 0 },
12002 },
12003 {
12004 /* MOD_VEX_W_1_0F46_P_2_LEN_1 */
12005 { Bad_Opcode },
12006 { "kxnord", { MaskG, MaskVex, MaskR }, 0 },
12007 },
12008 {
12009 /* MOD_VEX_W_0_0F47_P_0_LEN_1 */
12010 { Bad_Opcode },
12011 { "kxorw", { MaskG, MaskVex, MaskR }, 0 },
12012 },
12013 {
12014 /* MOD_VEX_W_1_0F47_P_0_LEN_1 */
12015 { Bad_Opcode },
12016 { "kxorq", { MaskG, MaskVex, MaskR }, 0 },
12017 },
12018 {
12019 /* MOD_VEX_W_0_0F47_P_2_LEN_1 */
12020 { Bad_Opcode },
12021 { "kxorb", { MaskG, MaskVex, MaskR }, 0 },
12022 },
12023 {
12024 /* MOD_VEX_W_1_0F47_P_2_LEN_1 */
12025 { Bad_Opcode },
12026 { "kxord", { MaskG, MaskVex, MaskR }, 0 },
12027 },
12028 {
12029 /* MOD_VEX_W_0_0F4A_P_0_LEN_1 */
12030 { Bad_Opcode },
12031 { "kaddw", { MaskG, MaskVex, MaskR }, 0 },
12032 },
12033 {
12034 /* MOD_VEX_W_1_0F4A_P_0_LEN_1 */
12035 { Bad_Opcode },
12036 { "kaddq", { MaskG, MaskVex, MaskR }, 0 },
12037 },
12038 {
12039 /* MOD_VEX_W_0_0F4A_P_2_LEN_1 */
12040 { Bad_Opcode },
12041 { "kaddb", { MaskG, MaskVex, MaskR }, 0 },
12042 },
12043 {
12044 /* MOD_VEX_W_1_0F4A_P_2_LEN_1 */
12045 { Bad_Opcode },
12046 { "kaddd", { MaskG, MaskVex, MaskR }, 0 },
12047 },
12048 {
12049 /* MOD_VEX_W_0_0F4B_P_0_LEN_1 */
12050 { Bad_Opcode },
12051 { "kunpckwd", { MaskG, MaskVex, MaskR }, 0 },
12052 },
12053 {
12054 /* MOD_VEX_W_1_0F4B_P_0_LEN_1 */
12055 { Bad_Opcode },
12056 { "kunpckdq", { MaskG, MaskVex, MaskR }, 0 },
12057 },
12058 {
12059 /* MOD_VEX_W_0_0F4B_P_2_LEN_1 */
12060 { Bad_Opcode },
12061 { "kunpckbw", { MaskG, MaskVex, MaskR }, 0 },
12062 },
12063 {
12064 /* MOD_VEX_0F50 */
12065 { Bad_Opcode },
12066 { VEX_W_TABLE (VEX_W_0F50_M_0) },
12067 },
12068 {
12069 /* MOD_VEX_0F71_REG_2 */
12070 { Bad_Opcode },
12071 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_2) },
12072 },
12073 {
12074 /* MOD_VEX_0F71_REG_4 */
12075 { Bad_Opcode },
12076 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_4) },
12077 },
12078 {
12079 /* MOD_VEX_0F71_REG_6 */
12080 { Bad_Opcode },
12081 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_6) },
12082 },
12083 {
12084 /* MOD_VEX_0F72_REG_2 */
12085 { Bad_Opcode },
12086 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_2) },
12087 },
12088 {
12089 /* MOD_VEX_0F72_REG_4 */
12090 { Bad_Opcode },
12091 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_4) },
12092 },
12093 {
12094 /* MOD_VEX_0F72_REG_6 */
12095 { Bad_Opcode },
12096 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_6) },
12097 },
12098 {
12099 /* MOD_VEX_0F73_REG_2 */
12100 { Bad_Opcode },
12101 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_2) },
12102 },
12103 {
12104 /* MOD_VEX_0F73_REG_3 */
12105 { Bad_Opcode },
12106 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_3) },
12107 },
12108 {
12109 /* MOD_VEX_0F73_REG_6 */
12110 { Bad_Opcode },
12111 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_6) },
12112 },
12113 {
12114 /* MOD_VEX_0F73_REG_7 */
12115 { Bad_Opcode },
12116 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_7) },
12117 },
12118 {
12119 /* MOD_VEX_W_0_0F91_P_0_LEN_0 */
12120 { "kmovw", { Ew, MaskG }, 0 },
12121 { Bad_Opcode },
12122 },
12123 {
12124 /* MOD_VEX_W_0_0F91_P_0_LEN_0 */
12125 { "kmovq", { Eq, MaskG }, 0 },
12126 { Bad_Opcode },
12127 },
12128 {
12129 /* MOD_VEX_W_0_0F91_P_2_LEN_0 */
12130 { "kmovb", { Eb, MaskG }, 0 },
12131 { Bad_Opcode },
12132 },
12133 {
12134 /* MOD_VEX_W_0_0F91_P_2_LEN_0 */
12135 { "kmovd", { Ed, MaskG }, 0 },
12136 { Bad_Opcode },
12137 },
12138 {
12139 /* MOD_VEX_W_0_0F92_P_0_LEN_0 */
12140 { Bad_Opcode },
12141 { "kmovw", { MaskG, Rdq }, 0 },
12142 },
12143 {
12144 /* MOD_VEX_W_0_0F92_P_2_LEN_0 */
12145 { Bad_Opcode },
12146 { "kmovb", { MaskG, Rdq }, 0 },
12147 },
12148 {
12149 /* MOD_VEX_W_0_0F92_P_3_LEN_0 */
12150 { Bad_Opcode },
12151 { "kmovd", { MaskG, Rdq }, 0 },
12152 },
12153 {
12154 /* MOD_VEX_W_1_0F92_P_3_LEN_0 */
12155 { Bad_Opcode },
12156 { "kmovq", { MaskG, Rdq }, 0 },
12157 },
12158 {
12159 /* MOD_VEX_W_0_0F93_P_0_LEN_0 */
12160 { Bad_Opcode },
12161 { "kmovw", { Gdq, MaskR }, 0 },
12162 },
12163 {
12164 /* MOD_VEX_W_0_0F93_P_2_LEN_0 */
12165 { Bad_Opcode },
12166 { "kmovb", { Gdq, MaskR }, 0 },
12167 },
12168 {
12169 /* MOD_VEX_W_0_0F93_P_3_LEN_0 */
12170 { Bad_Opcode },
12171 { "kmovd", { Gdq, MaskR }, 0 },
12172 },
12173 {
12174 /* MOD_VEX_W_1_0F93_P_3_LEN_0 */
12175 { Bad_Opcode },
12176 { "kmovq", { Gdq, MaskR }, 0 },
12177 },
12178 {
12179 /* MOD_VEX_W_0_0F98_P_0_LEN_0 */
12180 { Bad_Opcode },
12181 { "kortestw", { MaskG, MaskR }, 0 },
12182 },
12183 {
12184 /* MOD_VEX_W_1_0F98_P_0_LEN_0 */
12185 { Bad_Opcode },
12186 { "kortestq", { MaskG, MaskR }, 0 },
12187 },
12188 {
12189 /* MOD_VEX_W_0_0F98_P_2_LEN_0 */
12190 { Bad_Opcode },
12191 { "kortestb", { MaskG, MaskR }, 0 },
12192 },
12193 {
12194 /* MOD_VEX_W_1_0F98_P_2_LEN_0 */
12195 { Bad_Opcode },
12196 { "kortestd", { MaskG, MaskR }, 0 },
12197 },
12198 {
12199 /* MOD_VEX_W_0_0F99_P_0_LEN_0 */
12200 { Bad_Opcode },
12201 { "ktestw", { MaskG, MaskR }, 0 },
12202 },
12203 {
12204 /* MOD_VEX_W_1_0F99_P_0_LEN_0 */
12205 { Bad_Opcode },
12206 { "ktestq", { MaskG, MaskR }, 0 },
12207 },
12208 {
12209 /* MOD_VEX_W_0_0F99_P_2_LEN_0 */
12210 { Bad_Opcode },
12211 { "ktestb", { MaskG, MaskR }, 0 },
12212 },
12213 {
12214 /* MOD_VEX_W_1_0F99_P_2_LEN_0 */
12215 { Bad_Opcode },
12216 { "ktestd", { MaskG, MaskR }, 0 },
12217 },
12218 {
12219 /* MOD_VEX_0FAE_REG_2 */
12220 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_2_M_0) },
12221 },
12222 {
12223 /* MOD_VEX_0FAE_REG_3 */
12224 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_3_M_0) },
12225 },
12226 {
12227 /* MOD_VEX_0FD7_PREFIX_2 */
12228 { Bad_Opcode },
12229 { VEX_W_TABLE (VEX_W_0FD7_P_2_M_1) },
12230 },
12231 {
12232 /* MOD_VEX_0FE7_PREFIX_2 */
12233 { VEX_W_TABLE (VEX_W_0FE7_P_2_M_0) },
12234 },
12235 {
12236 /* MOD_VEX_0FF0_PREFIX_3 */
12237 { VEX_W_TABLE (VEX_W_0FF0_P_3_M_0) },
12238 },
12239 {
12240 /* MOD_VEX_0F381A_PREFIX_2 */
12241 { VEX_LEN_TABLE (VEX_LEN_0F381A_P_2_M_0) },
12242 },
12243 {
12244 /* MOD_VEX_0F382A_PREFIX_2 */
12245 { VEX_W_TABLE (VEX_W_0F382A_P_2_M_0) },
12246 },
12247 {
12248 /* MOD_VEX_0F382C_PREFIX_2 */
12249 { VEX_W_TABLE (VEX_W_0F382C_P_2_M_0) },
12250 },
12251 {
12252 /* MOD_VEX_0F382D_PREFIX_2 */
12253 { VEX_W_TABLE (VEX_W_0F382D_P_2_M_0) },
12254 },
12255 {
12256 /* MOD_VEX_0F382E_PREFIX_2 */
12257 { VEX_W_TABLE (VEX_W_0F382E_P_2_M_0) },
12258 },
12259 {
12260 /* MOD_VEX_0F382F_PREFIX_2 */
12261 { VEX_W_TABLE (VEX_W_0F382F_P_2_M_0) },
12262 },
12263 {
12264 /* MOD_VEX_0F385A_PREFIX_2 */
12265 { VEX_LEN_TABLE (VEX_LEN_0F385A_P_2_M_0) },
12266 },
12267 {
12268 /* MOD_VEX_0F388C_PREFIX_2 */
12269 { "vpmaskmov%LW", { XM, Vex, Mx }, 0 },
12270 },
12271 {
12272 /* MOD_VEX_0F388E_PREFIX_2 */
12273 { "vpmaskmov%LW", { Mx, Vex, XM }, 0 },
12274 },
12275 {
12276 /* MOD_VEX_W_0_0F3A30_P_2_LEN_0 */
12277 { Bad_Opcode },
12278 { "kshiftrb", { MaskG, MaskR, Ib }, 0 },
12279 },
12280 {
12281 /* MOD_VEX_W_1_0F3A30_P_2_LEN_0 */
12282 { Bad_Opcode },
12283 { "kshiftrw", { MaskG, MaskR, Ib }, 0 },
12284 },
12285 {
12286 /* MOD_VEX_W_0_0F3A31_P_2_LEN_0 */
12287 { Bad_Opcode },
12288 { "kshiftrd", { MaskG, MaskR, Ib }, 0 },
12289 },
12290 {
12291 /* MOD_VEX_W_1_0F3A31_P_2_LEN_0 */
12292 { Bad_Opcode },
12293 { "kshiftrq", { MaskG, MaskR, Ib }, 0 },
12294 },
12295 {
12296 /* MOD_VEX_W_0_0F3A32_P_2_LEN_0 */
12297 { Bad_Opcode },
12298 { "kshiftlb", { MaskG, MaskR, Ib }, 0 },
12299 },
12300 {
12301 /* MOD_VEX_W_1_0F3A32_P_2_LEN_0 */
12302 { Bad_Opcode },
12303 { "kshiftlw", { MaskG, MaskR, Ib }, 0 },
12304 },
12305 {
12306 /* MOD_VEX_W_0_0F3A33_P_2_LEN_0 */
12307 { Bad_Opcode },
12308 { "kshiftld", { MaskG, MaskR, Ib }, 0 },
12309 },
12310 {
12311 /* MOD_VEX_W_1_0F3A33_P_2_LEN_0 */
12312 { Bad_Opcode },
12313 { "kshiftlq", { MaskG, MaskR, Ib }, 0 },
12314 },
12315 #define NEED_MOD_TABLE
12316 #include "i386-dis-evex.h"
12317 #undef NEED_MOD_TABLE
12318 };
12319
12320 static const struct dis386 rm_table[][8] = {
12321 {
12322 /* RM_C6_REG_7 */
12323 { "xabort", { Skip_MODRM, Ib }, 0 },
12324 },
12325 {
12326 /* RM_C7_REG_7 */
12327 { "xbeginT", { Skip_MODRM, Jv }, 0 },
12328 },
12329 {
12330 /* RM_0F01_REG_0 */
12331 { Bad_Opcode },
12332 { "vmcall", { Skip_MODRM }, 0 },
12333 { "vmlaunch", { Skip_MODRM }, 0 },
12334 { "vmresume", { Skip_MODRM }, 0 },
12335 { "vmxoff", { Skip_MODRM }, 0 },
12336 { "pconfig", { Skip_MODRM }, 0 },
12337 },
12338 {
12339 /* RM_0F01_REG_1 */
12340 { "monitor", { { OP_Monitor, 0 } }, 0 },
12341 { "mwait", { { OP_Mwait, 0 } }, 0 },
12342 { "clac", { Skip_MODRM }, 0 },
12343 { "stac", { Skip_MODRM }, 0 },
12344 { Bad_Opcode },
12345 { Bad_Opcode },
12346 { Bad_Opcode },
12347 { "encls", { Skip_MODRM }, 0 },
12348 },
12349 {
12350 /* RM_0F01_REG_2 */
12351 { "xgetbv", { Skip_MODRM }, 0 },
12352 { "xsetbv", { Skip_MODRM }, 0 },
12353 { Bad_Opcode },
12354 { Bad_Opcode },
12355 { "vmfunc", { Skip_MODRM }, 0 },
12356 { "xend", { Skip_MODRM }, 0 },
12357 { "xtest", { Skip_MODRM }, 0 },
12358 { "enclu", { Skip_MODRM }, 0 },
12359 },
12360 {
12361 /* RM_0F01_REG_3 */
12362 { "vmrun", { Skip_MODRM }, 0 },
12363 { "vmmcall", { Skip_MODRM }, 0 },
12364 { "vmload", { Skip_MODRM }, 0 },
12365 { "vmsave", { Skip_MODRM }, 0 },
12366 { "stgi", { Skip_MODRM }, 0 },
12367 { "clgi", { Skip_MODRM }, 0 },
12368 { "skinit", { Skip_MODRM }, 0 },
12369 { "invlpga", { Skip_MODRM }, 0 },
12370 },
12371 {
12372 /* RM_0F01_REG_5 */
12373 { PREFIX_TABLE (PREFIX_MOD_3_0F01_REG_5_RM_0) },
12374 { Bad_Opcode },
12375 { PREFIX_TABLE (PREFIX_MOD_3_0F01_REG_5_RM_2) },
12376 { Bad_Opcode },
12377 { Bad_Opcode },
12378 { Bad_Opcode },
12379 { "rdpkru", { Skip_MODRM }, 0 },
12380 { "wrpkru", { Skip_MODRM }, 0 },
12381 },
12382 {
12383 /* RM_0F01_REG_7 */
12384 { "swapgs", { Skip_MODRM }, 0 },
12385 { "rdtscp", { Skip_MODRM }, 0 },
12386 { "monitorx", { { OP_Monitor, 0 } }, 0 },
12387 { "mwaitx", { { OP_Mwaitx, 0 } }, 0 },
12388 { "clzero", { Skip_MODRM }, 0 },
12389 },
12390 {
12391 /* RM_0F1E_MOD_3_REG_7 */
12392 { "nopQ", { Ev }, 0 },
12393 { "nopQ", { Ev }, 0 },
12394 { "endbr64", { Skip_MODRM }, PREFIX_OPCODE },
12395 { "endbr32", { Skip_MODRM }, PREFIX_OPCODE },
12396 { "nopQ", { Ev }, 0 },
12397 { "nopQ", { Ev }, 0 },
12398 { "nopQ", { Ev }, 0 },
12399 { "nopQ", { Ev }, 0 },
12400 },
12401 {
12402 /* RM_0FAE_REG_6 */
12403 { "mfence", { Skip_MODRM }, 0 },
12404 },
12405 {
12406 /* RM_0FAE_REG_7 */
12407 { "sfence", { Skip_MODRM }, 0 },
12408
12409 },
12410 };
12411
12412 #define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")
12413
12414 /* We use the high bit to indicate different name for the same
12415 prefix. */
12416 #define REP_PREFIX (0xf3 | 0x100)
12417 #define XACQUIRE_PREFIX (0xf2 | 0x200)
12418 #define XRELEASE_PREFIX (0xf3 | 0x400)
12419 #define BND_PREFIX (0xf2 | 0x400)
12420 #define NOTRACK_PREFIX (0x3e | 0x100)
12421
12422 static int
12423 ckprefix (void)
12424 {
12425 int newrex, i, length;
12426 rex = 0;
12427 rex_ignored = 0;
12428 prefixes = 0;
12429 used_prefixes = 0;
12430 rex_used = 0;
12431 last_lock_prefix = -1;
12432 last_repz_prefix = -1;
12433 last_repnz_prefix = -1;
12434 last_data_prefix = -1;
12435 last_addr_prefix = -1;
12436 last_rex_prefix = -1;
12437 last_seg_prefix = -1;
12438 fwait_prefix = -1;
12439 active_seg_prefix = 0;
12440 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
12441 all_prefixes[i] = 0;
12442 i = 0;
12443 length = 0;
12444 /* The maximum instruction length is 15bytes. */
12445 while (length < MAX_CODE_LENGTH - 1)
12446 {
12447 FETCH_DATA (the_info, codep + 1);
12448 newrex = 0;
12449 switch (*codep)
12450 {
12451 /* REX prefixes family. */
12452 case 0x40:
12453 case 0x41:
12454 case 0x42:
12455 case 0x43:
12456 case 0x44:
12457 case 0x45:
12458 case 0x46:
12459 case 0x47:
12460 case 0x48:
12461 case 0x49:
12462 case 0x4a:
12463 case 0x4b:
12464 case 0x4c:
12465 case 0x4d:
12466 case 0x4e:
12467 case 0x4f:
12468 if (address_mode == mode_64bit)
12469 newrex = *codep;
12470 else
12471 return 1;
12472 last_rex_prefix = i;
12473 break;
12474 case 0xf3:
12475 prefixes |= PREFIX_REPZ;
12476 last_repz_prefix = i;
12477 break;
12478 case 0xf2:
12479 prefixes |= PREFIX_REPNZ;
12480 last_repnz_prefix = i;
12481 break;
12482 case 0xf0:
12483 prefixes |= PREFIX_LOCK;
12484 last_lock_prefix = i;
12485 break;
12486 case 0x2e:
12487 prefixes |= PREFIX_CS;
12488 last_seg_prefix = i;
12489 active_seg_prefix = PREFIX_CS;
12490 break;
12491 case 0x36:
12492 prefixes |= PREFIX_SS;
12493 last_seg_prefix = i;
12494 active_seg_prefix = PREFIX_SS;
12495 break;
12496 case 0x3e:
12497 prefixes |= PREFIX_DS;
12498 last_seg_prefix = i;
12499 active_seg_prefix = PREFIX_DS;
12500 break;
12501 case 0x26:
12502 prefixes |= PREFIX_ES;
12503 last_seg_prefix = i;
12504 active_seg_prefix = PREFIX_ES;
12505 break;
12506 case 0x64:
12507 prefixes |= PREFIX_FS;
12508 last_seg_prefix = i;
12509 active_seg_prefix = PREFIX_FS;
12510 break;
12511 case 0x65:
12512 prefixes |= PREFIX_GS;
12513 last_seg_prefix = i;
12514 active_seg_prefix = PREFIX_GS;
12515 break;
12516 case 0x66:
12517 prefixes |= PREFIX_DATA;
12518 last_data_prefix = i;
12519 break;
12520 case 0x67:
12521 prefixes |= PREFIX_ADDR;
12522 last_addr_prefix = i;
12523 break;
12524 case FWAIT_OPCODE:
12525 /* fwait is really an instruction. If there are prefixes
12526 before the fwait, they belong to the fwait, *not* to the
12527 following instruction. */
12528 fwait_prefix = i;
12529 if (prefixes || rex)
12530 {
12531 prefixes |= PREFIX_FWAIT;
12532 codep++;
12533 /* This ensures that the previous REX prefixes are noticed
12534 as unused prefixes, as in the return case below. */
12535 rex_used = rex;
12536 return 1;
12537 }
12538 prefixes = PREFIX_FWAIT;
12539 break;
12540 default:
12541 return 1;
12542 }
12543 /* Rex is ignored when followed by another prefix. */
12544 if (rex)
12545 {
12546 rex_used = rex;
12547 return 1;
12548 }
12549 if (*codep != FWAIT_OPCODE)
12550 all_prefixes[i++] = *codep;
12551 rex = newrex;
12552 codep++;
12553 length++;
12554 }
12555 return 0;
12556 }
12557
12558 /* Return the name of the prefix byte PREF, or NULL if PREF is not a
12559 prefix byte. */
12560
12561 static const char *
12562 prefix_name (int pref, int sizeflag)
12563 {
12564 static const char *rexes [16] =
12565 {
12566 "rex", /* 0x40 */
12567 "rex.B", /* 0x41 */
12568 "rex.X", /* 0x42 */
12569 "rex.XB", /* 0x43 */
12570 "rex.R", /* 0x44 */
12571 "rex.RB", /* 0x45 */
12572 "rex.RX", /* 0x46 */
12573 "rex.RXB", /* 0x47 */
12574 "rex.W", /* 0x48 */
12575 "rex.WB", /* 0x49 */
12576 "rex.WX", /* 0x4a */
12577 "rex.WXB", /* 0x4b */
12578 "rex.WR", /* 0x4c */
12579 "rex.WRB", /* 0x4d */
12580 "rex.WRX", /* 0x4e */
12581 "rex.WRXB", /* 0x4f */
12582 };
12583
12584 switch (pref)
12585 {
12586 /* REX prefixes family. */
12587 case 0x40:
12588 case 0x41:
12589 case 0x42:
12590 case 0x43:
12591 case 0x44:
12592 case 0x45:
12593 case 0x46:
12594 case 0x47:
12595 case 0x48:
12596 case 0x49:
12597 case 0x4a:
12598 case 0x4b:
12599 case 0x4c:
12600 case 0x4d:
12601 case 0x4e:
12602 case 0x4f:
12603 return rexes [pref - 0x40];
12604 case 0xf3:
12605 return "repz";
12606 case 0xf2:
12607 return "repnz";
12608 case 0xf0:
12609 return "lock";
12610 case 0x2e:
12611 return "cs";
12612 case 0x36:
12613 return "ss";
12614 case 0x3e:
12615 return "ds";
12616 case 0x26:
12617 return "es";
12618 case 0x64:
12619 return "fs";
12620 case 0x65:
12621 return "gs";
12622 case 0x66:
12623 return (sizeflag & DFLAG) ? "data16" : "data32";
12624 case 0x67:
12625 if (address_mode == mode_64bit)
12626 return (sizeflag & AFLAG) ? "addr32" : "addr64";
12627 else
12628 return (sizeflag & AFLAG) ? "addr16" : "addr32";
12629 case FWAIT_OPCODE:
12630 return "fwait";
12631 case REP_PREFIX:
12632 return "rep";
12633 case XACQUIRE_PREFIX:
12634 return "xacquire";
12635 case XRELEASE_PREFIX:
12636 return "xrelease";
12637 case BND_PREFIX:
12638 return "bnd";
12639 case NOTRACK_PREFIX:
12640 return "notrack";
12641 default:
12642 return NULL;
12643 }
12644 }
12645
12646 static char op_out[MAX_OPERANDS][100];
12647 static int op_ad, op_index[MAX_OPERANDS];
12648 static int two_source_ops;
12649 static bfd_vma op_address[MAX_OPERANDS];
12650 static bfd_vma op_riprel[MAX_OPERANDS];
12651 static bfd_vma start_pc;
12652
12653 /*
12654 * On the 386's of 1988, the maximum length of an instruction is 15 bytes.
12655 * (see topic "Redundant prefixes" in the "Differences from 8086"
12656 * section of the "Virtual 8086 Mode" chapter.)
12657 * 'pc' should be the address of this instruction, it will
12658 * be used to print the target address if this is a relative jump or call
12659 * The function returns the length of this instruction in bytes.
12660 */
12661
12662 static char intel_syntax;
12663 static char intel_mnemonic = !SYSV386_COMPAT;
12664 static char open_char;
12665 static char close_char;
12666 static char separator_char;
12667 static char scale_char;
12668
12669 enum x86_64_isa
12670 {
12671 amd64 = 0,
12672 intel64
12673 };
12674
12675 static enum x86_64_isa isa64;
12676
12677 /* Here for backwards compatibility. When gdb stops using
12678 print_insn_i386_att and print_insn_i386_intel these functions can
12679 disappear, and print_insn_i386 be merged into print_insn. */
12680 int
12681 print_insn_i386_att (bfd_vma pc, disassemble_info *info)
12682 {
12683 intel_syntax = 0;
12684
12685 return print_insn (pc, info);
12686 }
12687
12688 int
12689 print_insn_i386_intel (bfd_vma pc, disassemble_info *info)
12690 {
12691 intel_syntax = 1;
12692
12693 return print_insn (pc, info);
12694 }
12695
12696 int
12697 print_insn_i386 (bfd_vma pc, disassemble_info *info)
12698 {
12699 intel_syntax = -1;
12700
12701 return print_insn (pc, info);
12702 }
12703
12704 void
12705 print_i386_disassembler_options (FILE *stream)
12706 {
12707 fprintf (stream, _("\n\
12708 The following i386/x86-64 specific disassembler options are supported for use\n\
12709 with the -M switch (multiple options should be separated by commas):\n"));
12710
12711 fprintf (stream, _(" x86-64 Disassemble in 64bit mode\n"));
12712 fprintf (stream, _(" i386 Disassemble in 32bit mode\n"));
12713 fprintf (stream, _(" i8086 Disassemble in 16bit mode\n"));
12714 fprintf (stream, _(" att Display instruction in AT&T syntax\n"));
12715 fprintf (stream, _(" intel Display instruction in Intel syntax\n"));
12716 fprintf (stream, _(" att-mnemonic\n"
12717 " Display instruction in AT&T mnemonic\n"));
12718 fprintf (stream, _(" intel-mnemonic\n"
12719 " Display instruction in Intel mnemonic\n"));
12720 fprintf (stream, _(" addr64 Assume 64bit address size\n"));
12721 fprintf (stream, _(" addr32 Assume 32bit address size\n"));
12722 fprintf (stream, _(" addr16 Assume 16bit address size\n"));
12723 fprintf (stream, _(" data32 Assume 32bit data size\n"));
12724 fprintf (stream, _(" data16 Assume 16bit data size\n"));
12725 fprintf (stream, _(" suffix Always display instruction suffix in AT&T syntax\n"));
12726 fprintf (stream, _(" amd64 Display instruction in AMD64 ISA\n"));
12727 fprintf (stream, _(" intel64 Display instruction in Intel64 ISA\n"));
12728 }
12729
12730 /* Bad opcode. */
12731 static const struct dis386 bad_opcode = { "(bad)", { XX }, 0 };
12732
12733 /* Get a pointer to struct dis386 with a valid name. */
12734
12735 static const struct dis386 *
12736 get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
12737 {
12738 int vindex, vex_table_index;
12739
12740 if (dp->name != NULL)
12741 return dp;
12742
12743 switch (dp->op[0].bytemode)
12744 {
12745 case USE_REG_TABLE:
12746 dp = &reg_table[dp->op[1].bytemode][modrm.reg];
12747 break;
12748
12749 case USE_MOD_TABLE:
12750 vindex = modrm.mod == 0x3 ? 1 : 0;
12751 dp = &mod_table[dp->op[1].bytemode][vindex];
12752 break;
12753
12754 case USE_RM_TABLE:
12755 dp = &rm_table[dp->op[1].bytemode][modrm.rm];
12756 break;
12757
12758 case USE_PREFIX_TABLE:
12759 if (need_vex)
12760 {
12761 /* The prefix in VEX is implicit. */
12762 switch (vex.prefix)
12763 {
12764 case 0:
12765 vindex = 0;
12766 break;
12767 case REPE_PREFIX_OPCODE:
12768 vindex = 1;
12769 break;
12770 case DATA_PREFIX_OPCODE:
12771 vindex = 2;
12772 break;
12773 case REPNE_PREFIX_OPCODE:
12774 vindex = 3;
12775 break;
12776 default:
12777 abort ();
12778 break;
12779 }
12780 }
12781 else
12782 {
12783 int last_prefix = -1;
12784 int prefix = 0;
12785 vindex = 0;
12786 /* We check PREFIX_REPNZ and PREFIX_REPZ before PREFIX_DATA.
12787 When there are multiple PREFIX_REPNZ and PREFIX_REPZ, the
12788 last one wins. */
12789 if ((prefixes & (PREFIX_REPZ | PREFIX_REPNZ)) != 0)
12790 {
12791 if (last_repz_prefix > last_repnz_prefix)
12792 {
12793 vindex = 1;
12794 prefix = PREFIX_REPZ;
12795 last_prefix = last_repz_prefix;
12796 }
12797 else
12798 {
12799 vindex = 3;
12800 prefix = PREFIX_REPNZ;
12801 last_prefix = last_repnz_prefix;
12802 }
12803
12804 /* Check if prefix should be ignored. */
12805 if ((((prefix_table[dp->op[1].bytemode][vindex].prefix_requirement
12806 & PREFIX_IGNORED) >> PREFIX_IGNORED_SHIFT)
12807 & prefix) != 0)
12808 vindex = 0;
12809 }
12810
12811 if (vindex == 0 && (prefixes & PREFIX_DATA) != 0)
12812 {
12813 vindex = 2;
12814 prefix = PREFIX_DATA;
12815 last_prefix = last_data_prefix;
12816 }
12817
12818 if (vindex != 0)
12819 {
12820 used_prefixes |= prefix;
12821 all_prefixes[last_prefix] = 0;
12822 }
12823 }
12824 dp = &prefix_table[dp->op[1].bytemode][vindex];
12825 break;
12826
12827 case USE_X86_64_TABLE:
12828 vindex = address_mode == mode_64bit ? 1 : 0;
12829 dp = &x86_64_table[dp->op[1].bytemode][vindex];
12830 break;
12831
12832 case USE_3BYTE_TABLE:
12833 FETCH_DATA (info, codep + 2);
12834 vindex = *codep++;
12835 dp = &three_byte_table[dp->op[1].bytemode][vindex];
12836 end_codep = codep;
12837 modrm.mod = (*codep >> 6) & 3;
12838 modrm.reg = (*codep >> 3) & 7;
12839 modrm.rm = *codep & 7;
12840 break;
12841
12842 case USE_VEX_LEN_TABLE:
12843 if (!need_vex)
12844 abort ();
12845
12846 switch (vex.length)
12847 {
12848 case 128:
12849 vindex = 0;
12850 break;
12851 case 256:
12852 vindex = 1;
12853 break;
12854 default:
12855 abort ();
12856 break;
12857 }
12858
12859 dp = &vex_len_table[dp->op[1].bytemode][vindex];
12860 break;
12861
12862 case USE_XOP_8F_TABLE:
12863 FETCH_DATA (info, codep + 3);
12864 /* All bits in the REX prefix are ignored. */
12865 rex_ignored = rex;
12866 rex = ~(*codep >> 5) & 0x7;
12867
12868 /* VEX_TABLE_INDEX is the mmmmm part of the XOP byte 1 "RCB.mmmmm". */
12869 switch ((*codep & 0x1f))
12870 {
12871 default:
12872 dp = &bad_opcode;
12873 return dp;
12874 case 0x8:
12875 vex_table_index = XOP_08;
12876 break;
12877 case 0x9:
12878 vex_table_index = XOP_09;
12879 break;
12880 case 0xa:
12881 vex_table_index = XOP_0A;
12882 break;
12883 }
12884 codep++;
12885 vex.w = *codep & 0x80;
12886 if (vex.w && address_mode == mode_64bit)
12887 rex |= REX_W;
12888
12889 vex.register_specifier = (~(*codep >> 3)) & 0xf;
12890 if (address_mode != mode_64bit)
12891 {
12892 /* In 16/32-bit mode REX_B is silently ignored. */
12893 rex &= ~REX_B;
12894 }
12895
12896 vex.length = (*codep & 0x4) ? 256 : 128;
12897 switch ((*codep & 0x3))
12898 {
12899 case 0:
12900 break;
12901 case 1:
12902 vex.prefix = DATA_PREFIX_OPCODE;
12903 break;
12904 case 2:
12905 vex.prefix = REPE_PREFIX_OPCODE;
12906 break;
12907 case 3:
12908 vex.prefix = REPNE_PREFIX_OPCODE;
12909 break;
12910 }
12911 need_vex = 1;
12912 need_vex_reg = 1;
12913 codep++;
12914 vindex = *codep++;
12915 dp = &xop_table[vex_table_index][vindex];
12916
12917 end_codep = codep;
12918 FETCH_DATA (info, codep + 1);
12919 modrm.mod = (*codep >> 6) & 3;
12920 modrm.reg = (*codep >> 3) & 7;
12921 modrm.rm = *codep & 7;
12922 break;
12923
12924 case USE_VEX_C4_TABLE:
12925 /* VEX prefix. */
12926 FETCH_DATA (info, codep + 3);
12927 /* All bits in the REX prefix are ignored. */
12928 rex_ignored = rex;
12929 rex = ~(*codep >> 5) & 0x7;
12930 switch ((*codep & 0x1f))
12931 {
12932 default:
12933 dp = &bad_opcode;
12934 return dp;
12935 case 0x1:
12936 vex_table_index = VEX_0F;
12937 break;
12938 case 0x2:
12939 vex_table_index = VEX_0F38;
12940 break;
12941 case 0x3:
12942 vex_table_index = VEX_0F3A;
12943 break;
12944 }
12945 codep++;
12946 vex.w = *codep & 0x80;
12947 if (address_mode == mode_64bit)
12948 {
12949 if (vex.w)
12950 rex |= REX_W;
12951 }
12952 else
12953 {
12954 /* For the 3-byte VEX prefix in 32-bit mode, the REX_B bit
12955 is ignored, other REX bits are 0 and the highest bit in
12956 VEX.vvvv is also ignored (but we mustn't clear it here). */
12957 rex = 0;
12958 }
12959 vex.register_specifier = (~(*codep >> 3)) & 0xf;
12960 vex.length = (*codep & 0x4) ? 256 : 128;
12961 switch ((*codep & 0x3))
12962 {
12963 case 0:
12964 break;
12965 case 1:
12966 vex.prefix = DATA_PREFIX_OPCODE;
12967 break;
12968 case 2:
12969 vex.prefix = REPE_PREFIX_OPCODE;
12970 break;
12971 case 3:
12972 vex.prefix = REPNE_PREFIX_OPCODE;
12973 break;
12974 }
12975 need_vex = 1;
12976 need_vex_reg = 1;
12977 codep++;
12978 vindex = *codep++;
12979 dp = &vex_table[vex_table_index][vindex];
12980 end_codep = codep;
12981 /* There is no MODRM byte for VEX0F 77. */
12982 if (vex_table_index != VEX_0F || vindex != 0x77)
12983 {
12984 FETCH_DATA (info, codep + 1);
12985 modrm.mod = (*codep >> 6) & 3;
12986 modrm.reg = (*codep >> 3) & 7;
12987 modrm.rm = *codep & 7;
12988 }
12989 break;
12990
12991 case USE_VEX_C5_TABLE:
12992 /* VEX prefix. */
12993 FETCH_DATA (info, codep + 2);
12994 /* All bits in the REX prefix are ignored. */
12995 rex_ignored = rex;
12996 rex = (*codep & 0x80) ? 0 : REX_R;
12997
12998 /* For the 2-byte VEX prefix in 32-bit mode, the highest bit in
12999 VEX.vvvv is 1. */
13000 vex.register_specifier = (~(*codep >> 3)) & 0xf;
13001 vex.length = (*codep & 0x4) ? 256 : 128;
13002 switch ((*codep & 0x3))
13003 {
13004 case 0:
13005 break;
13006 case 1:
13007 vex.prefix = DATA_PREFIX_OPCODE;
13008 break;
13009 case 2:
13010 vex.prefix = REPE_PREFIX_OPCODE;
13011 break;
13012 case 3:
13013 vex.prefix = REPNE_PREFIX_OPCODE;
13014 break;
13015 }
13016 need_vex = 1;
13017 need_vex_reg = 1;
13018 codep++;
13019 vindex = *codep++;
13020 dp = &vex_table[dp->op[1].bytemode][vindex];
13021 end_codep = codep;
13022 /* There is no MODRM byte for VEX 77. */
13023 if (vindex != 0x77)
13024 {
13025 FETCH_DATA (info, codep + 1);
13026 modrm.mod = (*codep >> 6) & 3;
13027 modrm.reg = (*codep >> 3) & 7;
13028 modrm.rm = *codep & 7;
13029 }
13030 break;
13031
13032 case USE_VEX_W_TABLE:
13033 if (!need_vex)
13034 abort ();
13035
13036 dp = &vex_w_table[dp->op[1].bytemode][vex.w ? 1 : 0];
13037 break;
13038
13039 case USE_EVEX_TABLE:
13040 two_source_ops = 0;
13041 /* EVEX prefix. */
13042 vex.evex = 1;
13043 FETCH_DATA (info, codep + 4);
13044 /* All bits in the REX prefix are ignored. */
13045 rex_ignored = rex;
13046 /* The first byte after 0x62. */
13047 rex = ~(*codep >> 5) & 0x7;
13048 vex.r = *codep & 0x10;
13049 switch ((*codep & 0xf))
13050 {
13051 default:
13052 return &bad_opcode;
13053 case 0x1:
13054 vex_table_index = EVEX_0F;
13055 break;
13056 case 0x2:
13057 vex_table_index = EVEX_0F38;
13058 break;
13059 case 0x3:
13060 vex_table_index = EVEX_0F3A;
13061 break;
13062 }
13063
13064 /* The second byte after 0x62. */
13065 codep++;
13066 vex.w = *codep & 0x80;
13067 if (vex.w && address_mode == mode_64bit)
13068 rex |= REX_W;
13069
13070 vex.register_specifier = (~(*codep >> 3)) & 0xf;
13071
13072 /* The U bit. */
13073 if (!(*codep & 0x4))
13074 return &bad_opcode;
13075
13076 switch ((*codep & 0x3))
13077 {
13078 case 0:
13079 break;
13080 case 1:
13081 vex.prefix = DATA_PREFIX_OPCODE;
13082 break;
13083 case 2:
13084 vex.prefix = REPE_PREFIX_OPCODE;
13085 break;
13086 case 3:
13087 vex.prefix = REPNE_PREFIX_OPCODE;
13088 break;
13089 }
13090
13091 /* The third byte after 0x62. */
13092 codep++;
13093
13094 /* Remember the static rounding bits. */
13095 vex.ll = (*codep >> 5) & 3;
13096 vex.b = (*codep & 0x10) != 0;
13097
13098 vex.v = *codep & 0x8;
13099 vex.mask_register_specifier = *codep & 0x7;
13100 vex.zeroing = *codep & 0x80;
13101
13102 if (address_mode != mode_64bit)
13103 {
13104 /* In 16/32-bit mode silently ignore following bits. */
13105 rex &= ~REX_B;
13106 vex.r = 1;
13107 vex.v = 1;
13108 }
13109
13110 need_vex = 1;
13111 need_vex_reg = 1;
13112 codep++;
13113 vindex = *codep++;
13114 dp = &evex_table[vex_table_index][vindex];
13115 end_codep = codep;
13116 FETCH_DATA (info, codep + 1);
13117 modrm.mod = (*codep >> 6) & 3;
13118 modrm.reg = (*codep >> 3) & 7;
13119 modrm.rm = *codep & 7;
13120
13121 /* Set vector length. */
13122 if (modrm.mod == 3 && vex.b)
13123 vex.length = 512;
13124 else
13125 {
13126 switch (vex.ll)
13127 {
13128 case 0x0:
13129 vex.length = 128;
13130 break;
13131 case 0x1:
13132 vex.length = 256;
13133 break;
13134 case 0x2:
13135 vex.length = 512;
13136 break;
13137 default:
13138 return &bad_opcode;
13139 }
13140 }
13141 break;
13142
13143 case 0:
13144 dp = &bad_opcode;
13145 break;
13146
13147 default:
13148 abort ();
13149 }
13150
13151 if (dp->name != NULL)
13152 return dp;
13153 else
13154 return get_valid_dis386 (dp, info);
13155 }
13156
13157 static void
13158 get_sib (disassemble_info *info, int sizeflag)
13159 {
13160 /* If modrm.mod == 3, operand must be register. */
13161 if (need_modrm
13162 && ((sizeflag & AFLAG) || address_mode == mode_64bit)
13163 && modrm.mod != 3
13164 && modrm.rm == 4)
13165 {
13166 FETCH_DATA (info, codep + 2);
13167 sib.index = (codep [1] >> 3) & 7;
13168 sib.scale = (codep [1] >> 6) & 3;
13169 sib.base = codep [1] & 7;
13170 }
13171 }
13172
13173 static int
13174 print_insn (bfd_vma pc, disassemble_info *info)
13175 {
13176 const struct dis386 *dp;
13177 int i;
13178 char *op_txt[MAX_OPERANDS];
13179 int needcomma;
13180 int sizeflag, orig_sizeflag;
13181 const char *p;
13182 struct dis_private priv;
13183 int prefix_length;
13184
13185 priv.orig_sizeflag = AFLAG | DFLAG;
13186 if ((info->mach & bfd_mach_i386_i386) != 0)
13187 address_mode = mode_32bit;
13188 else if (info->mach == bfd_mach_i386_i8086)
13189 {
13190 address_mode = mode_16bit;
13191 priv.orig_sizeflag = 0;
13192 }
13193 else
13194 address_mode = mode_64bit;
13195
13196 if (intel_syntax == (char) -1)
13197 intel_syntax = (info->mach & bfd_mach_i386_intel_syntax) != 0;
13198
13199 for (p = info->disassembler_options; p != NULL; )
13200 {
13201 if (CONST_STRNEQ (p, "amd64"))
13202 isa64 = amd64;
13203 else if (CONST_STRNEQ (p, "intel64"))
13204 isa64 = intel64;
13205 else if (CONST_STRNEQ (p, "x86-64"))
13206 {
13207 address_mode = mode_64bit;
13208 priv.orig_sizeflag = AFLAG | DFLAG;
13209 }
13210 else if (CONST_STRNEQ (p, "i386"))
13211 {
13212 address_mode = mode_32bit;
13213 priv.orig_sizeflag = AFLAG | DFLAG;
13214 }
13215 else if (CONST_STRNEQ (p, "i8086"))
13216 {
13217 address_mode = mode_16bit;
13218 priv.orig_sizeflag = 0;
13219 }
13220 else if (CONST_STRNEQ (p, "intel"))
13221 {
13222 intel_syntax = 1;
13223 if (CONST_STRNEQ (p + 5, "-mnemonic"))
13224 intel_mnemonic = 1;
13225 }
13226 else if (CONST_STRNEQ (p, "att"))
13227 {
13228 intel_syntax = 0;
13229 if (CONST_STRNEQ (p + 3, "-mnemonic"))
13230 intel_mnemonic = 0;
13231 }
13232 else if (CONST_STRNEQ (p, "addr"))
13233 {
13234 if (address_mode == mode_64bit)
13235 {
13236 if (p[4] == '3' && p[5] == '2')
13237 priv.orig_sizeflag &= ~AFLAG;
13238 else if (p[4] == '6' && p[5] == '4')
13239 priv.orig_sizeflag |= AFLAG;
13240 }
13241 else
13242 {
13243 if (p[4] == '1' && p[5] == '6')
13244 priv.orig_sizeflag &= ~AFLAG;
13245 else if (p[4] == '3' && p[5] == '2')
13246 priv.orig_sizeflag |= AFLAG;
13247 }
13248 }
13249 else if (CONST_STRNEQ (p, "data"))
13250 {
13251 if (p[4] == '1' && p[5] == '6')
13252 priv.orig_sizeflag &= ~DFLAG;
13253 else if (p[4] == '3' && p[5] == '2')
13254 priv.orig_sizeflag |= DFLAG;
13255 }
13256 else if (CONST_STRNEQ (p, "suffix"))
13257 priv.orig_sizeflag |= SUFFIX_ALWAYS;
13258
13259 p = strchr (p, ',');
13260 if (p != NULL)
13261 p++;
13262 }
13263
13264 if (address_mode == mode_64bit && sizeof (bfd_vma) < 8)
13265 {
13266 (*info->fprintf_func) (info->stream,
13267 _("64-bit address is disabled"));
13268 return -1;
13269 }
13270
13271 if (intel_syntax)
13272 {
13273 names64 = intel_names64;
13274 names32 = intel_names32;
13275 names16 = intel_names16;
13276 names8 = intel_names8;
13277 names8rex = intel_names8rex;
13278 names_seg = intel_names_seg;
13279 names_mm = intel_names_mm;
13280 names_bnd = intel_names_bnd;
13281 names_xmm = intel_names_xmm;
13282 names_ymm = intel_names_ymm;
13283 names_zmm = intel_names_zmm;
13284 index64 = intel_index64;
13285 index32 = intel_index32;
13286 names_mask = intel_names_mask;
13287 index16 = intel_index16;
13288 open_char = '[';
13289 close_char = ']';
13290 separator_char = '+';
13291 scale_char = '*';
13292 }
13293 else
13294 {
13295 names64 = att_names64;
13296 names32 = att_names32;
13297 names16 = att_names16;
13298 names8 = att_names8;
13299 names8rex = att_names8rex;
13300 names_seg = att_names_seg;
13301 names_mm = att_names_mm;
13302 names_bnd = att_names_bnd;
13303 names_xmm = att_names_xmm;
13304 names_ymm = att_names_ymm;
13305 names_zmm = att_names_zmm;
13306 index64 = att_index64;
13307 index32 = att_index32;
13308 names_mask = att_names_mask;
13309 index16 = att_index16;
13310 open_char = '(';
13311 close_char = ')';
13312 separator_char = ',';
13313 scale_char = ',';
13314 }
13315
13316 /* The output looks better if we put 7 bytes on a line, since that
13317 puts most long word instructions on a single line. Use 8 bytes
13318 for Intel L1OM. */
13319 if ((info->mach & bfd_mach_l1om) != 0)
13320 info->bytes_per_line = 8;
13321 else
13322 info->bytes_per_line = 7;
13323
13324 info->private_data = &priv;
13325 priv.max_fetched = priv.the_buffer;
13326 priv.insn_start = pc;
13327
13328 obuf[0] = 0;
13329 for (i = 0; i < MAX_OPERANDS; ++i)
13330 {
13331 op_out[i][0] = 0;
13332 op_index[i] = -1;
13333 }
13334
13335 the_info = info;
13336 start_pc = pc;
13337 start_codep = priv.the_buffer;
13338 codep = priv.the_buffer;
13339
13340 if (OPCODES_SIGSETJMP (priv.bailout) != 0)
13341 {
13342 const char *name;
13343
13344 /* Getting here means we tried for data but didn't get it. That
13345 means we have an incomplete instruction of some sort. Just
13346 print the first byte as a prefix or a .byte pseudo-op. */
13347 if (codep > priv.the_buffer)
13348 {
13349 name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
13350 if (name != NULL)
13351 (*info->fprintf_func) (info->stream, "%s", name);
13352 else
13353 {
13354 /* Just print the first byte as a .byte instruction. */
13355 (*info->fprintf_func) (info->stream, ".byte 0x%x",
13356 (unsigned int) priv.the_buffer[0]);
13357 }
13358
13359 return 1;
13360 }
13361
13362 return -1;
13363 }
13364
13365 obufp = obuf;
13366 sizeflag = priv.orig_sizeflag;
13367
13368 if (!ckprefix () || rex_used)
13369 {
13370 /* Too many prefixes or unused REX prefixes. */
13371 for (i = 0;
13372 i < (int) ARRAY_SIZE (all_prefixes) && all_prefixes[i];
13373 i++)
13374 (*info->fprintf_func) (info->stream, "%s%s",
13375 i == 0 ? "" : " ",
13376 prefix_name (all_prefixes[i], sizeflag));
13377 return i;
13378 }
13379
13380 insn_codep = codep;
13381
13382 FETCH_DATA (info, codep + 1);
13383 two_source_ops = (*codep == 0x62) || (*codep == 0xc8);
13384
13385 if (((prefixes & PREFIX_FWAIT)
13386 && ((*codep < 0xd8) || (*codep > 0xdf))))
13387 {
13388 /* Handle prefixes before fwait. */
13389 for (i = 0; i < fwait_prefix && all_prefixes[i];
13390 i++)
13391 (*info->fprintf_func) (info->stream, "%s ",
13392 prefix_name (all_prefixes[i], sizeflag));
13393 (*info->fprintf_func) (info->stream, "fwait");
13394 return i + 1;
13395 }
13396
13397 if (*codep == 0x0f)
13398 {
13399 unsigned char threebyte;
13400
13401 codep++;
13402 FETCH_DATA (info, codep + 1);
13403 threebyte = *codep;
13404 dp = &dis386_twobyte[threebyte];
13405 need_modrm = twobyte_has_modrm[*codep];
13406 codep++;
13407 }
13408 else
13409 {
13410 dp = &dis386[*codep];
13411 need_modrm = onebyte_has_modrm[*codep];
13412 codep++;
13413 }
13414
13415 /* Save sizeflag for printing the extra prefixes later before updating
13416 it for mnemonic and operand processing. The prefix names depend
13417 only on the address mode. */
13418 orig_sizeflag = sizeflag;
13419 if (prefixes & PREFIX_ADDR)
13420 sizeflag ^= AFLAG;
13421 if ((prefixes & PREFIX_DATA))
13422 sizeflag ^= DFLAG;
13423
13424 end_codep = codep;
13425 if (need_modrm)
13426 {
13427 FETCH_DATA (info, codep + 1);
13428 modrm.mod = (*codep >> 6) & 3;
13429 modrm.reg = (*codep >> 3) & 7;
13430 modrm.rm = *codep & 7;
13431 }
13432
13433 need_vex = 0;
13434 need_vex_reg = 0;
13435 vex_w_done = 0;
13436 memset (&vex, 0, sizeof (vex));
13437
13438 if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE)
13439 {
13440 get_sib (info, sizeflag);
13441 dofloat (sizeflag);
13442 }
13443 else
13444 {
13445 dp = get_valid_dis386 (dp, info);
13446 if (dp != NULL && putop (dp->name, sizeflag) == 0)
13447 {
13448 get_sib (info, sizeflag);
13449 for (i = 0; i < MAX_OPERANDS; ++i)
13450 {
13451 obufp = op_out[i];
13452 op_ad = MAX_OPERANDS - 1 - i;
13453 if (dp->op[i].rtn)
13454 (*dp->op[i].rtn) (dp->op[i].bytemode, sizeflag);
13455 /* For EVEX instruction after the last operand masking
13456 should be printed. */
13457 if (i == 0 && vex.evex)
13458 {
13459 /* Don't print {%k0}. */
13460 if (vex.mask_register_specifier)
13461 {
13462 oappend ("{");
13463 oappend (names_mask[vex.mask_register_specifier]);
13464 oappend ("}");
13465 }
13466 if (vex.zeroing)
13467 oappend ("{z}");
13468 }
13469 }
13470 }
13471 }
13472
13473 /* Check if the REX prefix is used. */
13474 if (rex_ignored == 0 && (rex ^ rex_used) == 0 && last_rex_prefix >= 0)
13475 all_prefixes[last_rex_prefix] = 0;
13476
13477 /* Check if the SEG prefix is used. */
13478 if ((prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS | PREFIX_ES
13479 | PREFIX_FS | PREFIX_GS)) != 0
13480 && (used_prefixes & active_seg_prefix) != 0)
13481 all_prefixes[last_seg_prefix] = 0;
13482
13483 /* Check if the ADDR prefix is used. */
13484 if ((prefixes & PREFIX_ADDR) != 0
13485 && (used_prefixes & PREFIX_ADDR) != 0)
13486 all_prefixes[last_addr_prefix] = 0;
13487
13488 /* Check if the DATA prefix is used. */
13489 if ((prefixes & PREFIX_DATA) != 0
13490 && (used_prefixes & PREFIX_DATA) != 0)
13491 all_prefixes[last_data_prefix] = 0;
13492
13493 /* Print the extra prefixes. */
13494 prefix_length = 0;
13495 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
13496 if (all_prefixes[i])
13497 {
13498 const char *name;
13499 name = prefix_name (all_prefixes[i], orig_sizeflag);
13500 if (name == NULL)
13501 abort ();
13502 prefix_length += strlen (name) + 1;
13503 (*info->fprintf_func) (info->stream, "%s ", name);
13504 }
13505
13506 /* If the mandatory PREFIX_REPZ/PREFIX_REPNZ/PREFIX_DATA prefix is
13507 unused, opcode is invalid. Since the PREFIX_DATA prefix may be
13508 used by putop and MMX/SSE operand and may be overriden by the
13509 PREFIX_REPZ/PREFIX_REPNZ fix, we check the PREFIX_DATA prefix
13510 separately. */
13511 if (dp->prefix_requirement == PREFIX_OPCODE
13512 && dp != &bad_opcode
13513 && (((prefixes
13514 & (PREFIX_REPZ | PREFIX_REPNZ)) != 0
13515 && (used_prefixes
13516 & (PREFIX_REPZ | PREFIX_REPNZ)) == 0)
13517 || ((((prefixes
13518 & (PREFIX_REPZ | PREFIX_REPNZ | PREFIX_DATA))
13519 == PREFIX_DATA)
13520 && (used_prefixes & PREFIX_DATA) == 0))))
13521 {
13522 (*info->fprintf_func) (info->stream, "(bad)");
13523 return end_codep - priv.the_buffer;
13524 }
13525
13526 /* Check maximum code length. */
13527 if ((codep - start_codep) > MAX_CODE_LENGTH)
13528 {
13529 (*info->fprintf_func) (info->stream, "(bad)");
13530 return MAX_CODE_LENGTH;
13531 }
13532
13533 obufp = mnemonicendp;
13534 for (i = strlen (obuf) + prefix_length; i < 6; i++)
13535 oappend (" ");
13536 oappend (" ");
13537 (*info->fprintf_func) (info->stream, "%s", obuf);
13538
13539 /* The enter and bound instructions are printed with operands in the same
13540 order as the intel book; everything else is printed in reverse order. */
13541 if (intel_syntax || two_source_ops)
13542 {
13543 bfd_vma riprel;
13544
13545 for (i = 0; i < MAX_OPERANDS; ++i)
13546 op_txt[i] = op_out[i];
13547
13548 if (intel_syntax && dp && dp->op[2].rtn == OP_Rounding
13549 && dp->op[3].rtn == OP_E && dp->op[4].rtn == NULL)
13550 {
13551 op_txt[2] = op_out[3];
13552 op_txt[3] = op_out[2];
13553 }
13554
13555 for (i = 0; i < (MAX_OPERANDS >> 1); ++i)
13556 {
13557 op_ad = op_index[i];
13558 op_index[i] = op_index[MAX_OPERANDS - 1 - i];
13559 op_index[MAX_OPERANDS - 1 - i] = op_ad;
13560 riprel = op_riprel[i];
13561 op_riprel[i] = op_riprel [MAX_OPERANDS - 1 - i];
13562 op_riprel[MAX_OPERANDS - 1 - i] = riprel;
13563 }
13564 }
13565 else
13566 {
13567 for (i = 0; i < MAX_OPERANDS; ++i)
13568 op_txt[MAX_OPERANDS - 1 - i] = op_out[i];
13569 }
13570
13571 needcomma = 0;
13572 for (i = 0; i < MAX_OPERANDS; ++i)
13573 if (*op_txt[i])
13574 {
13575 if (needcomma)
13576 (*info->fprintf_func) (info->stream, ",");
13577 if (op_index[i] != -1 && !op_riprel[i])
13578 (*info->print_address_func) ((bfd_vma) op_address[op_index[i]], info);
13579 else
13580 (*info->fprintf_func) (info->stream, "%s", op_txt[i]);
13581 needcomma = 1;
13582 }
13583
13584 for (i = 0; i < MAX_OPERANDS; i++)
13585 if (op_index[i] != -1 && op_riprel[i])
13586 {
13587 (*info->fprintf_func) (info->stream, " # ");
13588 (*info->print_address_func) ((bfd_vma) (start_pc + (codep - start_codep)
13589 + op_address[op_index[i]]), info);
13590 break;
13591 }
13592 return codep - priv.the_buffer;
13593 }
13594
13595 static const char *float_mem[] = {
13596 /* d8 */
13597 "fadd{s|}",
13598 "fmul{s|}",
13599 "fcom{s|}",
13600 "fcomp{s|}",
13601 "fsub{s|}",
13602 "fsubr{s|}",
13603 "fdiv{s|}",
13604 "fdivr{s|}",
13605 /* d9 */
13606 "fld{s|}",
13607 "(bad)",
13608 "fst{s|}",
13609 "fstp{s|}",
13610 "fldenvIC",
13611 "fldcw",
13612 "fNstenvIC",
13613 "fNstcw",
13614 /* da */
13615 "fiadd{l|}",
13616 "fimul{l|}",
13617 "ficom{l|}",
13618 "ficomp{l|}",
13619 "fisub{l|}",
13620 "fisubr{l|}",
13621 "fidiv{l|}",
13622 "fidivr{l|}",
13623 /* db */
13624 "fild{l|}",
13625 "fisttp{l|}",
13626 "fist{l|}",
13627 "fistp{l|}",
13628 "(bad)",
13629 "fld{t||t|}",
13630 "(bad)",
13631 "fstp{t||t|}",
13632 /* dc */
13633 "fadd{l|}",
13634 "fmul{l|}",
13635 "fcom{l|}",
13636 "fcomp{l|}",
13637 "fsub{l|}",
13638 "fsubr{l|}",
13639 "fdiv{l|}",
13640 "fdivr{l|}",
13641 /* dd */
13642 "fld{l|}",
13643 "fisttp{ll|}",
13644 "fst{l||}",
13645 "fstp{l|}",
13646 "frstorIC",
13647 "(bad)",
13648 "fNsaveIC",
13649 "fNstsw",
13650 /* de */
13651 "fiadd{s|}",
13652 "fimul{s|}",
13653 "ficom{s|}",
13654 "ficomp{s|}",
13655 "fisub{s|}",
13656 "fisubr{s|}",
13657 "fidiv{s|}",
13658 "fidivr{s|}",
13659 /* df */
13660 "fild{s|}",
13661 "fisttp{s|}",
13662 "fist{s|}",
13663 "fistp{s|}",
13664 "fbld",
13665 "fild{ll|}",
13666 "fbstp",
13667 "fistp{ll|}",
13668 };
13669
13670 static const unsigned char float_mem_mode[] = {
13671 /* d8 */
13672 d_mode,
13673 d_mode,
13674 d_mode,
13675 d_mode,
13676 d_mode,
13677 d_mode,
13678 d_mode,
13679 d_mode,
13680 /* d9 */
13681 d_mode,
13682 0,
13683 d_mode,
13684 d_mode,
13685 0,
13686 w_mode,
13687 0,
13688 w_mode,
13689 /* da */
13690 d_mode,
13691 d_mode,
13692 d_mode,
13693 d_mode,
13694 d_mode,
13695 d_mode,
13696 d_mode,
13697 d_mode,
13698 /* db */
13699 d_mode,
13700 d_mode,
13701 d_mode,
13702 d_mode,
13703 0,
13704 t_mode,
13705 0,
13706 t_mode,
13707 /* dc */
13708 q_mode,
13709 q_mode,
13710 q_mode,
13711 q_mode,
13712 q_mode,
13713 q_mode,
13714 q_mode,
13715 q_mode,
13716 /* dd */
13717 q_mode,
13718 q_mode,
13719 q_mode,
13720 q_mode,
13721 0,
13722 0,
13723 0,
13724 w_mode,
13725 /* de */
13726 w_mode,
13727 w_mode,
13728 w_mode,
13729 w_mode,
13730 w_mode,
13731 w_mode,
13732 w_mode,
13733 w_mode,
13734 /* df */
13735 w_mode,
13736 w_mode,
13737 w_mode,
13738 w_mode,
13739 t_mode,
13740 q_mode,
13741 t_mode,
13742 q_mode
13743 };
13744
13745 #define ST { OP_ST, 0 }
13746 #define STi { OP_STi, 0 }
13747
13748 #define FGRPd9_2 NULL, { { NULL, 1 } }, 0
13749 #define FGRPd9_4 NULL, { { NULL, 2 } }, 0
13750 #define FGRPd9_5 NULL, { { NULL, 3 } }, 0
13751 #define FGRPd9_6 NULL, { { NULL, 4 } }, 0
13752 #define FGRPd9_7 NULL, { { NULL, 5 } }, 0
13753 #define FGRPda_5 NULL, { { NULL, 6 } }, 0
13754 #define FGRPdb_4 NULL, { { NULL, 7 } }, 0
13755 #define FGRPde_3 NULL, { { NULL, 8 } }, 0
13756 #define FGRPdf_4 NULL, { { NULL, 9 } }, 0
13757
13758 static const struct dis386 float_reg[][8] = {
13759 /* d8 */
13760 {
13761 { "fadd", { ST, STi }, 0 },
13762 { "fmul", { ST, STi }, 0 },
13763 { "fcom", { STi }, 0 },
13764 { "fcomp", { STi }, 0 },
13765 { "fsub", { ST, STi }, 0 },
13766 { "fsubr", { ST, STi }, 0 },
13767 { "fdiv", { ST, STi }, 0 },
13768 { "fdivr", { ST, STi }, 0 },
13769 },
13770 /* d9 */
13771 {
13772 { "fld", { STi }, 0 },
13773 { "fxch", { STi }, 0 },
13774 { FGRPd9_2 },
13775 { Bad_Opcode },
13776 { FGRPd9_4 },
13777 { FGRPd9_5 },
13778 { FGRPd9_6 },
13779 { FGRPd9_7 },
13780 },
13781 /* da */
13782 {
13783 { "fcmovb", { ST, STi }, 0 },
13784 { "fcmove", { ST, STi }, 0 },
13785 { "fcmovbe",{ ST, STi }, 0 },
13786 { "fcmovu", { ST, STi }, 0 },
13787 { Bad_Opcode },
13788 { FGRPda_5 },
13789 { Bad_Opcode },
13790 { Bad_Opcode },
13791 },
13792 /* db */
13793 {
13794 { "fcmovnb",{ ST, STi }, 0 },
13795 { "fcmovne",{ ST, STi }, 0 },
13796 { "fcmovnbe",{ ST, STi }, 0 },
13797 { "fcmovnu",{ ST, STi }, 0 },
13798 { FGRPdb_4 },
13799 { "fucomi", { ST, STi }, 0 },
13800 { "fcomi", { ST, STi }, 0 },
13801 { Bad_Opcode },
13802 },
13803 /* dc */
13804 {
13805 { "fadd", { STi, ST }, 0 },
13806 { "fmul", { STi, ST }, 0 },
13807 { Bad_Opcode },
13808 { Bad_Opcode },
13809 { "fsub{!M|r}", { STi, ST }, 0 },
13810 { "fsub{M|}", { STi, ST }, 0 },
13811 { "fdiv{!M|r}", { STi, ST }, 0 },
13812 { "fdiv{M|}", { STi, ST }, 0 },
13813 },
13814 /* dd */
13815 {
13816 { "ffree", { STi }, 0 },
13817 { Bad_Opcode },
13818 { "fst", { STi }, 0 },
13819 { "fstp", { STi }, 0 },
13820 { "fucom", { STi }, 0 },
13821 { "fucomp", { STi }, 0 },
13822 { Bad_Opcode },
13823 { Bad_Opcode },
13824 },
13825 /* de */
13826 {
13827 { "faddp", { STi, ST }, 0 },
13828 { "fmulp", { STi, ST }, 0 },
13829 { Bad_Opcode },
13830 { FGRPde_3 },
13831 { "fsub{!M|r}p", { STi, ST }, 0 },
13832 { "fsub{M|}p", { STi, ST }, 0 },
13833 { "fdiv{!M|r}p", { STi, ST }, 0 },
13834 { "fdiv{M|}p", { STi, ST }, 0 },
13835 },
13836 /* df */
13837 {
13838 { "ffreep", { STi }, 0 },
13839 { Bad_Opcode },
13840 { Bad_Opcode },
13841 { Bad_Opcode },
13842 { FGRPdf_4 },
13843 { "fucomip", { ST, STi }, 0 },
13844 { "fcomip", { ST, STi }, 0 },
13845 { Bad_Opcode },
13846 },
13847 };
13848
13849 static char *fgrps[][8] = {
13850 /* Bad opcode 0 */
13851 {
13852 "(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13853 },
13854
13855 /* d9_2 1 */
13856 {
13857 "fnop","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13858 },
13859
13860 /* d9_4 2 */
13861 {
13862 "fchs","fabs","(bad)","(bad)","ftst","fxam","(bad)","(bad)",
13863 },
13864
13865 /* d9_5 3 */
13866 {
13867 "fld1","fldl2t","fldl2e","fldpi","fldlg2","fldln2","fldz","(bad)",
13868 },
13869
13870 /* d9_6 4 */
13871 {
13872 "f2xm1","fyl2x","fptan","fpatan","fxtract","fprem1","fdecstp","fincstp",
13873 },
13874
13875 /* d9_7 5 */
13876 {
13877 "fprem","fyl2xp1","fsqrt","fsincos","frndint","fscale","fsin","fcos",
13878 },
13879
13880 /* da_5 6 */
13881 {
13882 "(bad)","fucompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13883 },
13884
13885 /* db_4 7 */
13886 {
13887 "fNeni(8087 only)","fNdisi(8087 only)","fNclex","fNinit",
13888 "fNsetpm(287 only)","frstpm(287 only)","(bad)","(bad)",
13889 },
13890
13891 /* de_3 8 */
13892 {
13893 "(bad)","fcompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13894 },
13895
13896 /* df_4 9 */
13897 {
13898 "fNstsw","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13899 },
13900 };
13901
13902 static void
13903 swap_operand (void)
13904 {
13905 mnemonicendp[0] = '.';
13906 mnemonicendp[1] = 's';
13907 mnemonicendp += 2;
13908 }
13909
13910 static void
13911 OP_Skip_MODRM (int bytemode ATTRIBUTE_UNUSED,
13912 int sizeflag ATTRIBUTE_UNUSED)
13913 {
13914 /* Skip mod/rm byte. */
13915 MODRM_CHECK;
13916 codep++;
13917 }
13918
13919 static void
13920 dofloat (int sizeflag)
13921 {
13922 const struct dis386 *dp;
13923 unsigned char floatop;
13924
13925 floatop = codep[-1];
13926
13927 if (modrm.mod != 3)
13928 {
13929 int fp_indx = (floatop - 0xd8) * 8 + modrm.reg;
13930
13931 putop (float_mem[fp_indx], sizeflag);
13932 obufp = op_out[0];
13933 op_ad = 2;
13934 OP_E (float_mem_mode[fp_indx], sizeflag);
13935 return;
13936 }
13937 /* Skip mod/rm byte. */
13938 MODRM_CHECK;
13939 codep++;
13940
13941 dp = &float_reg[floatop - 0xd8][modrm.reg];
13942 if (dp->name == NULL)
13943 {
13944 putop (fgrps[dp->op[0].bytemode][modrm.rm], sizeflag);
13945
13946 /* Instruction fnstsw is only one with strange arg. */
13947 if (floatop == 0xdf && codep[-1] == 0xe0)
13948 strcpy (op_out[0], names16[0]);
13949 }
13950 else
13951 {
13952 putop (dp->name, sizeflag);
13953
13954 obufp = op_out[0];
13955 op_ad = 2;
13956 if (dp->op[0].rtn)
13957 (*dp->op[0].rtn) (dp->op[0].bytemode, sizeflag);
13958
13959 obufp = op_out[1];
13960 op_ad = 1;
13961 if (dp->op[1].rtn)
13962 (*dp->op[1].rtn) (dp->op[1].bytemode, sizeflag);
13963 }
13964 }
13965
13966 /* Like oappend (below), but S is a string starting with '%'.
13967 In Intel syntax, the '%' is elided. */
13968 static void
13969 oappend_maybe_intel (const char *s)
13970 {
13971 oappend (s + intel_syntax);
13972 }
13973
13974 static void
13975 OP_ST (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
13976 {
13977 oappend_maybe_intel ("%st");
13978 }
13979
13980 static void
13981 OP_STi (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
13982 {
13983 sprintf (scratchbuf, "%%st(%d)", modrm.rm);
13984 oappend_maybe_intel (scratchbuf);
13985 }
13986
13987 /* Capital letters in template are macros. */
13988 static int
13989 putop (const char *in_template, int sizeflag)
13990 {
13991 const char *p;
13992 int alt = 0;
13993 int cond = 1;
13994 unsigned int l = 0, len = 1;
13995 char last[4];
13996
13997 #define SAVE_LAST(c) \
13998 if (l < len && l < sizeof (last)) \
13999 last[l++] = c; \
14000 else \
14001 abort ();
14002
14003 for (p = in_template; *p; p++)
14004 {
14005 switch (*p)
14006 {
14007 default:
14008 *obufp++ = *p;
14009 break;
14010 case '%':
14011 len++;
14012 break;
14013 case '!':
14014 cond = 0;
14015 break;
14016 case '{':
14017 if (intel_syntax)
14018 {
14019 while (*++p != '|')
14020 if (*p == '}' || *p == '\0')
14021 abort ();
14022 }
14023 /* Fall through. */
14024 case 'I':
14025 alt = 1;
14026 continue;
14027 case '|':
14028 while (*++p != '}')
14029 {
14030 if (*p == '\0')
14031 abort ();
14032 }
14033 break;
14034 case '}':
14035 break;
14036 case 'A':
14037 if (intel_syntax)
14038 break;
14039 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
14040 *obufp++ = 'b';
14041 break;
14042 case 'B':
14043 if (l == 0 && len == 1)
14044 {
14045 case_B:
14046 if (intel_syntax)
14047 break;
14048 if (sizeflag & SUFFIX_ALWAYS)
14049 *obufp++ = 'b';
14050 }
14051 else
14052 {
14053 if (l != 1
14054 || len != 2
14055 || last[0] != 'L')
14056 {
14057 SAVE_LAST (*p);
14058 break;
14059 }
14060
14061 if (address_mode == mode_64bit
14062 && !(prefixes & PREFIX_ADDR))
14063 {
14064 *obufp++ = 'a';
14065 *obufp++ = 'b';
14066 *obufp++ = 's';
14067 }
14068
14069 goto case_B;
14070 }
14071 break;
14072 case 'C':
14073 if (intel_syntax && !alt)
14074 break;
14075 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
14076 {
14077 if (sizeflag & DFLAG)
14078 *obufp++ = intel_syntax ? 'd' : 'l';
14079 else
14080 *obufp++ = intel_syntax ? 'w' : 's';
14081 used_prefixes |= (prefixes & PREFIX_DATA);
14082 }
14083 break;
14084 case 'D':
14085 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
14086 break;
14087 USED_REX (REX_W);
14088 if (modrm.mod == 3)
14089 {
14090 if (rex & REX_W)
14091 *obufp++ = 'q';
14092 else
14093 {
14094 if (sizeflag & DFLAG)
14095 *obufp++ = intel_syntax ? 'd' : 'l';
14096 else
14097 *obufp++ = 'w';
14098 used_prefixes |= (prefixes & PREFIX_DATA);
14099 }
14100 }
14101 else
14102 *obufp++ = 'w';
14103 break;
14104 case 'E': /* For jcxz/jecxz */
14105 if (address_mode == mode_64bit)
14106 {
14107 if (sizeflag & AFLAG)
14108 *obufp++ = 'r';
14109 else
14110 *obufp++ = 'e';
14111 }
14112 else
14113 if (sizeflag & AFLAG)
14114 *obufp++ = 'e';
14115 used_prefixes |= (prefixes & PREFIX_ADDR);
14116 break;
14117 case 'F':
14118 if (intel_syntax)
14119 break;
14120 if ((prefixes & PREFIX_ADDR) || (sizeflag & SUFFIX_ALWAYS))
14121 {
14122 if (sizeflag & AFLAG)
14123 *obufp++ = address_mode == mode_64bit ? 'q' : 'l';
14124 else
14125 *obufp++ = address_mode == mode_64bit ? 'l' : 'w';
14126 used_prefixes |= (prefixes & PREFIX_ADDR);
14127 }
14128 break;
14129 case 'G':
14130 if (intel_syntax || (obufp[-1] != 's' && !(sizeflag & SUFFIX_ALWAYS)))
14131 break;
14132 if ((rex & REX_W) || (sizeflag & DFLAG))
14133 *obufp++ = 'l';
14134 else
14135 *obufp++ = 'w';
14136 if (!(rex & REX_W))
14137 used_prefixes |= (prefixes & PREFIX_DATA);
14138 break;
14139 case 'H':
14140 if (intel_syntax)
14141 break;
14142 if ((prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_CS
14143 || (prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_DS)
14144 {
14145 used_prefixes |= prefixes & (PREFIX_CS | PREFIX_DS);
14146 *obufp++ = ',';
14147 *obufp++ = 'p';
14148 if (prefixes & PREFIX_DS)
14149 *obufp++ = 't';
14150 else
14151 *obufp++ = 'n';
14152 }
14153 break;
14154 case 'J':
14155 if (intel_syntax)
14156 break;
14157 *obufp++ = 'l';
14158 break;
14159 case 'K':
14160 USED_REX (REX_W);
14161 if (rex & REX_W)
14162 *obufp++ = 'q';
14163 else
14164 *obufp++ = 'd';
14165 break;
14166 case 'Z':
14167 if (l != 0 || len != 1)
14168 {
14169 if (l != 1 || len != 2 || last[0] != 'X')
14170 {
14171 SAVE_LAST (*p);
14172 break;
14173 }
14174 if (!need_vex || !vex.evex)
14175 abort ();
14176 if (intel_syntax
14177 || ((modrm.mod == 3 || vex.b) && !(sizeflag & SUFFIX_ALWAYS)))
14178 break;
14179 switch (vex.length)
14180 {
14181 case 128:
14182 *obufp++ = 'x';
14183 break;
14184 case 256:
14185 *obufp++ = 'y';
14186 break;
14187 case 512:
14188 *obufp++ = 'z';
14189 break;
14190 default:
14191 abort ();
14192 }
14193 break;
14194 }
14195 if (intel_syntax)
14196 break;
14197 if (address_mode == mode_64bit && (sizeflag & SUFFIX_ALWAYS))
14198 {
14199 *obufp++ = 'q';
14200 break;
14201 }
14202 /* Fall through. */
14203 goto case_L;
14204 case 'L':
14205 if (l != 0 || len != 1)
14206 {
14207 SAVE_LAST (*p);
14208 break;
14209 }
14210 case_L:
14211 if (intel_syntax)
14212 break;
14213 if (sizeflag & SUFFIX_ALWAYS)
14214 *obufp++ = 'l';
14215 break;
14216 case 'M':
14217 if (intel_mnemonic != cond)
14218 *obufp++ = 'r';
14219 break;
14220 case 'N':
14221 if ((prefixes & PREFIX_FWAIT) == 0)
14222 *obufp++ = 'n';
14223 else
14224 used_prefixes |= PREFIX_FWAIT;
14225 break;
14226 case 'O':
14227 USED_REX (REX_W);
14228 if (rex & REX_W)
14229 *obufp++ = 'o';
14230 else if (intel_syntax && (sizeflag & DFLAG))
14231 *obufp++ = 'q';
14232 else
14233 *obufp++ = 'd';
14234 if (!(rex & REX_W))
14235 used_prefixes |= (prefixes & PREFIX_DATA);
14236 break;
14237 case '&':
14238 if (!intel_syntax
14239 && address_mode == mode_64bit
14240 && isa64 == intel64)
14241 {
14242 *obufp++ = 'q';
14243 break;
14244 }
14245 /* Fall through. */
14246 case 'T':
14247 if (!intel_syntax
14248 && address_mode == mode_64bit
14249 && ((sizeflag & DFLAG) || (rex & REX_W)))
14250 {
14251 *obufp++ = 'q';
14252 break;
14253 }
14254 /* Fall through. */
14255 goto case_P;
14256 case 'P':
14257 if (l == 0 && len == 1)
14258 {
14259 case_P:
14260 if (intel_syntax)
14261 {
14262 if ((rex & REX_W) == 0
14263 && (prefixes & PREFIX_DATA))
14264 {
14265 if ((sizeflag & DFLAG) == 0)
14266 *obufp++ = 'w';
14267 used_prefixes |= (prefixes & PREFIX_DATA);
14268 }
14269 break;
14270 }
14271 if ((prefixes & PREFIX_DATA)
14272 || (rex & REX_W)
14273 || (sizeflag & SUFFIX_ALWAYS))
14274 {
14275 USED_REX (REX_W);
14276 if (rex & REX_W)
14277 *obufp++ = 'q';
14278 else
14279 {
14280 if (sizeflag & DFLAG)
14281 *obufp++ = 'l';
14282 else
14283 *obufp++ = 'w';
14284 used_prefixes |= (prefixes & PREFIX_DATA);
14285 }
14286 }
14287 }
14288 else
14289 {
14290 if (l != 1 || len != 2 || last[0] != 'L')
14291 {
14292 SAVE_LAST (*p);
14293 break;
14294 }
14295
14296 if ((prefixes & PREFIX_DATA)
14297 || (rex & REX_W)
14298 || (sizeflag & SUFFIX_ALWAYS))
14299 {
14300 USED_REX (REX_W);
14301 if (rex & REX_W)
14302 *obufp++ = 'q';
14303 else
14304 {
14305 if (sizeflag & DFLAG)
14306 *obufp++ = intel_syntax ? 'd' : 'l';
14307 else
14308 *obufp++ = 'w';
14309 used_prefixes |= (prefixes & PREFIX_DATA);
14310 }
14311 }
14312 }
14313 break;
14314 case 'U':
14315 if (intel_syntax)
14316 break;
14317 if (address_mode == mode_64bit
14318 && ((sizeflag & DFLAG) || (rex & REX_W)))
14319 {
14320 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
14321 *obufp++ = 'q';
14322 break;
14323 }
14324 /* Fall through. */
14325 goto case_Q;
14326 case 'Q':
14327 if (l == 0 && len == 1)
14328 {
14329 case_Q:
14330 if (intel_syntax && !alt)
14331 break;
14332 USED_REX (REX_W);
14333 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
14334 {
14335 if (rex & REX_W)
14336 *obufp++ = 'q';
14337 else
14338 {
14339 if (sizeflag & DFLAG)
14340 *obufp++ = intel_syntax ? 'd' : 'l';
14341 else
14342 *obufp++ = 'w';
14343 used_prefixes |= (prefixes & PREFIX_DATA);
14344 }
14345 }
14346 }
14347 else
14348 {
14349 if (l != 1 || len != 2 || last[0] != 'L')
14350 {
14351 SAVE_LAST (*p);
14352 break;
14353 }
14354 if (intel_syntax
14355 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
14356 break;
14357 if ((rex & REX_W))
14358 {
14359 USED_REX (REX_W);
14360 *obufp++ = 'q';
14361 }
14362 else
14363 *obufp++ = 'l';
14364 }
14365 break;
14366 case 'R':
14367 USED_REX (REX_W);
14368 if (rex & REX_W)
14369 *obufp++ = 'q';
14370 else if (sizeflag & DFLAG)
14371 {
14372 if (intel_syntax)
14373 *obufp++ = 'd';
14374 else
14375 *obufp++ = 'l';
14376 }
14377 else
14378 *obufp++ = 'w';
14379 if (intel_syntax && !p[1]
14380 && ((rex & REX_W) || (sizeflag & DFLAG)))
14381 *obufp++ = 'e';
14382 if (!(rex & REX_W))
14383 used_prefixes |= (prefixes & PREFIX_DATA);
14384 break;
14385 case 'V':
14386 if (l == 0 && len == 1)
14387 {
14388 if (intel_syntax)
14389 break;
14390 if (address_mode == mode_64bit
14391 && ((sizeflag & DFLAG) || (rex & REX_W)))
14392 {
14393 if (sizeflag & SUFFIX_ALWAYS)
14394 *obufp++ = 'q';
14395 break;
14396 }
14397 }
14398 else
14399 {
14400 if (l != 1
14401 || len != 2
14402 || last[0] != 'L')
14403 {
14404 SAVE_LAST (*p);
14405 break;
14406 }
14407
14408 if (rex & REX_W)
14409 {
14410 *obufp++ = 'a';
14411 *obufp++ = 'b';
14412 *obufp++ = 's';
14413 }
14414 }
14415 /* Fall through. */
14416 goto case_S;
14417 case 'S':
14418 if (l == 0 && len == 1)
14419 {
14420 case_S:
14421 if (intel_syntax)
14422 break;
14423 if (sizeflag & SUFFIX_ALWAYS)
14424 {
14425 if (rex & REX_W)
14426 *obufp++ = 'q';
14427 else
14428 {
14429 if (sizeflag & DFLAG)
14430 *obufp++ = 'l';
14431 else
14432 *obufp++ = 'w';
14433 used_prefixes |= (prefixes & PREFIX_DATA);
14434 }
14435 }
14436 }
14437 else
14438 {
14439 if (l != 1
14440 || len != 2
14441 || last[0] != 'L')
14442 {
14443 SAVE_LAST (*p);
14444 break;
14445 }
14446
14447 if (address_mode == mode_64bit
14448 && !(prefixes & PREFIX_ADDR))
14449 {
14450 *obufp++ = 'a';
14451 *obufp++ = 'b';
14452 *obufp++ = 's';
14453 }
14454
14455 goto case_S;
14456 }
14457 break;
14458 case 'X':
14459 if (l != 0 || len != 1)
14460 {
14461 SAVE_LAST (*p);
14462 break;
14463 }
14464 if (need_vex && vex.prefix)
14465 {
14466 if (vex.prefix == DATA_PREFIX_OPCODE)
14467 *obufp++ = 'd';
14468 else
14469 *obufp++ = 's';
14470 }
14471 else
14472 {
14473 if (prefixes & PREFIX_DATA)
14474 *obufp++ = 'd';
14475 else
14476 *obufp++ = 's';
14477 used_prefixes |= (prefixes & PREFIX_DATA);
14478 }
14479 break;
14480 case 'Y':
14481 if (l == 0 && len == 1)
14482 abort ();
14483 else
14484 {
14485 if (l != 1 || len != 2 || last[0] != 'X')
14486 {
14487 SAVE_LAST (*p);
14488 break;
14489 }
14490 if (!need_vex)
14491 abort ();
14492 if (intel_syntax
14493 || ((modrm.mod == 3 || vex.b) && !(sizeflag & SUFFIX_ALWAYS)))
14494 break;
14495 switch (vex.length)
14496 {
14497 case 128:
14498 *obufp++ = 'x';
14499 break;
14500 case 256:
14501 *obufp++ = 'y';
14502 break;
14503 case 512:
14504 if (!vex.evex)
14505 default:
14506 abort ();
14507 }
14508 }
14509 break;
14510 case 'W':
14511 if (l == 0 && len == 1)
14512 {
14513 /* operand size flag for cwtl, cbtw */
14514 USED_REX (REX_W);
14515 if (rex & REX_W)
14516 {
14517 if (intel_syntax)
14518 *obufp++ = 'd';
14519 else
14520 *obufp++ = 'l';
14521 }
14522 else if (sizeflag & DFLAG)
14523 *obufp++ = 'w';
14524 else
14525 *obufp++ = 'b';
14526 if (!(rex & REX_W))
14527 used_prefixes |= (prefixes & PREFIX_DATA);
14528 }
14529 else
14530 {
14531 if (l != 1
14532 || len != 2
14533 || (last[0] != 'X'
14534 && last[0] != 'L'))
14535 {
14536 SAVE_LAST (*p);
14537 break;
14538 }
14539 if (!need_vex)
14540 abort ();
14541 if (last[0] == 'X')
14542 *obufp++ = vex.w ? 'd': 's';
14543 else
14544 *obufp++ = vex.w ? 'q': 'd';
14545 }
14546 break;
14547 case '^':
14548 if (intel_syntax)
14549 break;
14550 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
14551 {
14552 if (sizeflag & DFLAG)
14553 *obufp++ = 'l';
14554 else
14555 *obufp++ = 'w';
14556 used_prefixes |= (prefixes & PREFIX_DATA);
14557 }
14558 break;
14559 case '@':
14560 if (intel_syntax)
14561 break;
14562 if (address_mode == mode_64bit
14563 && (isa64 == intel64
14564 || ((sizeflag & DFLAG) || (rex & REX_W))))
14565 *obufp++ = 'q';
14566 else if ((prefixes & PREFIX_DATA))
14567 {
14568 if (!(sizeflag & DFLAG))
14569 *obufp++ = 'w';
14570 used_prefixes |= (prefixes & PREFIX_DATA);
14571 }
14572 break;
14573 }
14574 alt = 0;
14575 }
14576 *obufp = 0;
14577 mnemonicendp = obufp;
14578 return 0;
14579 }
14580
14581 static void
14582 oappend (const char *s)
14583 {
14584 obufp = stpcpy (obufp, s);
14585 }
14586
14587 static void
14588 append_seg (void)
14589 {
14590 /* Only print the active segment register. */
14591 if (!active_seg_prefix)
14592 return;
14593
14594 used_prefixes |= active_seg_prefix;
14595 switch (active_seg_prefix)
14596 {
14597 case PREFIX_CS:
14598 oappend_maybe_intel ("%cs:");
14599 break;
14600 case PREFIX_DS:
14601 oappend_maybe_intel ("%ds:");
14602 break;
14603 case PREFIX_SS:
14604 oappend_maybe_intel ("%ss:");
14605 break;
14606 case PREFIX_ES:
14607 oappend_maybe_intel ("%es:");
14608 break;
14609 case PREFIX_FS:
14610 oappend_maybe_intel ("%fs:");
14611 break;
14612 case PREFIX_GS:
14613 oappend_maybe_intel ("%gs:");
14614 break;
14615 default:
14616 break;
14617 }
14618 }
14619
14620 static void
14621 OP_indirE (int bytemode, int sizeflag)
14622 {
14623 if (!intel_syntax)
14624 oappend ("*");
14625 OP_E (bytemode, sizeflag);
14626 }
14627
14628 static void
14629 print_operand_value (char *buf, int hex, bfd_vma disp)
14630 {
14631 if (address_mode == mode_64bit)
14632 {
14633 if (hex)
14634 {
14635 char tmp[30];
14636 int i;
14637 buf[0] = '0';
14638 buf[1] = 'x';
14639 sprintf_vma (tmp, disp);
14640 for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++);
14641 strcpy (buf + 2, tmp + i);
14642 }
14643 else
14644 {
14645 bfd_signed_vma v = disp;
14646 char tmp[30];
14647 int i;
14648 if (v < 0)
14649 {
14650 *(buf++) = '-';
14651 v = -disp;
14652 /* Check for possible overflow on 0x8000000000000000. */
14653 if (v < 0)
14654 {
14655 strcpy (buf, "9223372036854775808");
14656 return;
14657 }
14658 }
14659 if (!v)
14660 {
14661 strcpy (buf, "0");
14662 return;
14663 }
14664
14665 i = 0;
14666 tmp[29] = 0;
14667 while (v)
14668 {
14669 tmp[28 - i] = (v % 10) + '0';
14670 v /= 10;
14671 i++;
14672 }
14673 strcpy (buf, tmp + 29 - i);
14674 }
14675 }
14676 else
14677 {
14678 if (hex)
14679 sprintf (buf, "0x%x", (unsigned int) disp);
14680 else
14681 sprintf (buf, "%d", (int) disp);
14682 }
14683 }
14684
14685 /* Put DISP in BUF as signed hex number. */
14686
14687 static void
14688 print_displacement (char *buf, bfd_vma disp)
14689 {
14690 bfd_signed_vma val = disp;
14691 char tmp[30];
14692 int i, j = 0;
14693
14694 if (val < 0)
14695 {
14696 buf[j++] = '-';
14697 val = -disp;
14698
14699 /* Check for possible overflow. */
14700 if (val < 0)
14701 {
14702 switch (address_mode)
14703 {
14704 case mode_64bit:
14705 strcpy (buf + j, "0x8000000000000000");
14706 break;
14707 case mode_32bit:
14708 strcpy (buf + j, "0x80000000");
14709 break;
14710 case mode_16bit:
14711 strcpy (buf + j, "0x8000");
14712 break;
14713 }
14714 return;
14715 }
14716 }
14717
14718 buf[j++] = '0';
14719 buf[j++] = 'x';
14720
14721 sprintf_vma (tmp, (bfd_vma) val);
14722 for (i = 0; tmp[i] == '0'; i++)
14723 continue;
14724 if (tmp[i] == '\0')
14725 i--;
14726 strcpy (buf + j, tmp + i);
14727 }
14728
14729 static void
14730 intel_operand_size (int bytemode, int sizeflag)
14731 {
14732 if (vex.evex
14733 && vex.b
14734 && (bytemode == x_mode
14735 || bytemode == evex_half_bcst_xmmq_mode))
14736 {
14737 if (vex.w)
14738 oappend ("QWORD PTR ");
14739 else
14740 oappend ("DWORD PTR ");
14741 return;
14742 }
14743 switch (bytemode)
14744 {
14745 case b_mode:
14746 case b_swap_mode:
14747 case dqb_mode:
14748 case db_mode:
14749 oappend ("BYTE PTR ");
14750 break;
14751 case w_mode:
14752 case dw_mode:
14753 case dqw_mode:
14754 oappend ("WORD PTR ");
14755 break;
14756 case indir_v_mode:
14757 if (address_mode == mode_64bit && isa64 == intel64)
14758 {
14759 oappend ("QWORD PTR ");
14760 break;
14761 }
14762 /* Fall through. */
14763 case stack_v_mode:
14764 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
14765 {
14766 oappend ("QWORD PTR ");
14767 break;
14768 }
14769 /* Fall through. */
14770 case v_mode:
14771 case v_swap_mode:
14772 case dq_mode:
14773 USED_REX (REX_W);
14774 if (rex & REX_W)
14775 oappend ("QWORD PTR ");
14776 else
14777 {
14778 if ((sizeflag & DFLAG) || bytemode == dq_mode)
14779 oappend ("DWORD PTR ");
14780 else
14781 oappend ("WORD PTR ");
14782 used_prefixes |= (prefixes & PREFIX_DATA);
14783 }
14784 break;
14785 case z_mode:
14786 if ((rex & REX_W) || (sizeflag & DFLAG))
14787 *obufp++ = 'D';
14788 oappend ("WORD PTR ");
14789 if (!(rex & REX_W))
14790 used_prefixes |= (prefixes & PREFIX_DATA);
14791 break;
14792 case a_mode:
14793 if (sizeflag & DFLAG)
14794 oappend ("QWORD PTR ");
14795 else
14796 oappend ("DWORD PTR ");
14797 used_prefixes |= (prefixes & PREFIX_DATA);
14798 break;
14799 case d_mode:
14800 case d_scalar_mode:
14801 case d_scalar_swap_mode:
14802 case d_swap_mode:
14803 case dqd_mode:
14804 oappend ("DWORD PTR ");
14805 break;
14806 case q_mode:
14807 case q_scalar_mode:
14808 case q_scalar_swap_mode:
14809 case q_swap_mode:
14810 oappend ("QWORD PTR ");
14811 break;
14812 case dqa_mode:
14813 case m_mode:
14814 if (address_mode == mode_64bit)
14815 oappend ("QWORD PTR ");
14816 else
14817 oappend ("DWORD PTR ");
14818 break;
14819 case f_mode:
14820 if (sizeflag & DFLAG)
14821 oappend ("FWORD PTR ");
14822 else
14823 oappend ("DWORD PTR ");
14824 used_prefixes |= (prefixes & PREFIX_DATA);
14825 break;
14826 case t_mode:
14827 oappend ("TBYTE PTR ");
14828 break;
14829 case x_mode:
14830 case x_swap_mode:
14831 case evex_x_gscat_mode:
14832 case evex_x_nobcst_mode:
14833 case b_scalar_mode:
14834 case w_scalar_mode:
14835 if (need_vex)
14836 {
14837 switch (vex.length)
14838 {
14839 case 128:
14840 oappend ("XMMWORD PTR ");
14841 break;
14842 case 256:
14843 oappend ("YMMWORD PTR ");
14844 break;
14845 case 512:
14846 oappend ("ZMMWORD PTR ");
14847 break;
14848 default:
14849 abort ();
14850 }
14851 }
14852 else
14853 oappend ("XMMWORD PTR ");
14854 break;
14855 case xmm_mode:
14856 oappend ("XMMWORD PTR ");
14857 break;
14858 case ymm_mode:
14859 oappend ("YMMWORD PTR ");
14860 break;
14861 case xmmq_mode:
14862 case evex_half_bcst_xmmq_mode:
14863 if (!need_vex)
14864 abort ();
14865
14866 switch (vex.length)
14867 {
14868 case 128:
14869 oappend ("QWORD PTR ");
14870 break;
14871 case 256:
14872 oappend ("XMMWORD PTR ");
14873 break;
14874 case 512:
14875 oappend ("YMMWORD PTR ");
14876 break;
14877 default:
14878 abort ();
14879 }
14880 break;
14881 case xmm_mb_mode:
14882 if (!need_vex)
14883 abort ();
14884
14885 switch (vex.length)
14886 {
14887 case 128:
14888 case 256:
14889 case 512:
14890 oappend ("BYTE PTR ");
14891 break;
14892 default:
14893 abort ();
14894 }
14895 break;
14896 case xmm_mw_mode:
14897 if (!need_vex)
14898 abort ();
14899
14900 switch (vex.length)
14901 {
14902 case 128:
14903 case 256:
14904 case 512:
14905 oappend ("WORD PTR ");
14906 break;
14907 default:
14908 abort ();
14909 }
14910 break;
14911 case xmm_md_mode:
14912 if (!need_vex)
14913 abort ();
14914
14915 switch (vex.length)
14916 {
14917 case 128:
14918 case 256:
14919 case 512:
14920 oappend ("DWORD PTR ");
14921 break;
14922 default:
14923 abort ();
14924 }
14925 break;
14926 case xmm_mq_mode:
14927 if (!need_vex)
14928 abort ();
14929
14930 switch (vex.length)
14931 {
14932 case 128:
14933 case 256:
14934 case 512:
14935 oappend ("QWORD PTR ");
14936 break;
14937 default:
14938 abort ();
14939 }
14940 break;
14941 case xmmdw_mode:
14942 if (!need_vex)
14943 abort ();
14944
14945 switch (vex.length)
14946 {
14947 case 128:
14948 oappend ("WORD PTR ");
14949 break;
14950 case 256:
14951 oappend ("DWORD PTR ");
14952 break;
14953 case 512:
14954 oappend ("QWORD PTR ");
14955 break;
14956 default:
14957 abort ();
14958 }
14959 break;
14960 case xmmqd_mode:
14961 if (!need_vex)
14962 abort ();
14963
14964 switch (vex.length)
14965 {
14966 case 128:
14967 oappend ("DWORD PTR ");
14968 break;
14969 case 256:
14970 oappend ("QWORD PTR ");
14971 break;
14972 case 512:
14973 oappend ("XMMWORD PTR ");
14974 break;
14975 default:
14976 abort ();
14977 }
14978 break;
14979 case ymmq_mode:
14980 if (!need_vex)
14981 abort ();
14982
14983 switch (vex.length)
14984 {
14985 case 128:
14986 oappend ("QWORD PTR ");
14987 break;
14988 case 256:
14989 oappend ("YMMWORD PTR ");
14990 break;
14991 case 512:
14992 oappend ("ZMMWORD PTR ");
14993 break;
14994 default:
14995 abort ();
14996 }
14997 break;
14998 case ymmxmm_mode:
14999 if (!need_vex)
15000 abort ();
15001
15002 switch (vex.length)
15003 {
15004 case 128:
15005 case 256:
15006 oappend ("XMMWORD PTR ");
15007 break;
15008 default:
15009 abort ();
15010 }
15011 break;
15012 case o_mode:
15013 oappend ("OWORD PTR ");
15014 break;
15015 case xmm_mdq_mode:
15016 case vex_w_dq_mode:
15017 case vex_scalar_w_dq_mode:
15018 if (!need_vex)
15019 abort ();
15020
15021 if (vex.w)
15022 oappend ("QWORD PTR ");
15023 else
15024 oappend ("DWORD PTR ");
15025 break;
15026 case vex_vsib_d_w_dq_mode:
15027 case vex_vsib_q_w_dq_mode:
15028 if (!need_vex)
15029 abort ();
15030
15031 if (!vex.evex)
15032 {
15033 if (vex.w)
15034 oappend ("QWORD PTR ");
15035 else
15036 oappend ("DWORD PTR ");
15037 }
15038 else
15039 {
15040 switch (vex.length)
15041 {
15042 case 128:
15043 oappend ("XMMWORD PTR ");
15044 break;
15045 case 256:
15046 oappend ("YMMWORD PTR ");
15047 break;
15048 case 512:
15049 oappend ("ZMMWORD PTR ");
15050 break;
15051 default:
15052 abort ();
15053 }
15054 }
15055 break;
15056 case vex_vsib_q_w_d_mode:
15057 case vex_vsib_d_w_d_mode:
15058 if (!need_vex || !vex.evex)
15059 abort ();
15060
15061 switch (vex.length)
15062 {
15063 case 128:
15064 oappend ("QWORD PTR ");
15065 break;
15066 case 256:
15067 oappend ("XMMWORD PTR ");
15068 break;
15069 case 512:
15070 oappend ("YMMWORD PTR ");
15071 break;
15072 default:
15073 abort ();
15074 }
15075
15076 break;
15077 case mask_bd_mode:
15078 if (!need_vex || vex.length != 128)
15079 abort ();
15080 if (vex.w)
15081 oappend ("DWORD PTR ");
15082 else
15083 oappend ("BYTE PTR ");
15084 break;
15085 case mask_mode:
15086 if (!need_vex)
15087 abort ();
15088 if (vex.w)
15089 oappend ("QWORD PTR ");
15090 else
15091 oappend ("WORD PTR ");
15092 break;
15093 case v_bnd_mode:
15094 case v_bndmk_mode:
15095 default:
15096 break;
15097 }
15098 }
15099
15100 static void
15101 OP_E_register (int bytemode, int sizeflag)
15102 {
15103 int reg = modrm.rm;
15104 const char **names;
15105
15106 USED_REX (REX_B);
15107 if ((rex & REX_B))
15108 reg += 8;
15109
15110 if ((sizeflag & SUFFIX_ALWAYS)
15111 && (bytemode == b_swap_mode
15112 || bytemode == bnd_swap_mode
15113 || bytemode == v_swap_mode))
15114 swap_operand ();
15115
15116 switch (bytemode)
15117 {
15118 case b_mode:
15119 case b_swap_mode:
15120 USED_REX (0);
15121 if (rex)
15122 names = names8rex;
15123 else
15124 names = names8;
15125 break;
15126 case w_mode:
15127 names = names16;
15128 break;
15129 case d_mode:
15130 case dw_mode:
15131 case db_mode:
15132 names = names32;
15133 break;
15134 case q_mode:
15135 names = names64;
15136 break;
15137 case m_mode:
15138 case v_bnd_mode:
15139 names = address_mode == mode_64bit ? names64 : names32;
15140 break;
15141 case bnd_mode:
15142 case bnd_swap_mode:
15143 if (reg > 0x3)
15144 {
15145 oappend ("(bad)");
15146 return;
15147 }
15148 names = names_bnd;
15149 break;
15150 case indir_v_mode:
15151 if (address_mode == mode_64bit && isa64 == intel64)
15152 {
15153 names = names64;
15154 break;
15155 }
15156 /* Fall through. */
15157 case stack_v_mode:
15158 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
15159 {
15160 names = names64;
15161 break;
15162 }
15163 bytemode = v_mode;
15164 /* Fall through. */
15165 case v_mode:
15166 case v_swap_mode:
15167 case dq_mode:
15168 case dqb_mode:
15169 case dqd_mode:
15170 case dqw_mode:
15171 case dqa_mode:
15172 USED_REX (REX_W);
15173 if (rex & REX_W)
15174 names = names64;
15175 else
15176 {
15177 if ((sizeflag & DFLAG)
15178 || (bytemode != v_mode
15179 && bytemode != v_swap_mode))
15180 names = names32;
15181 else
15182 names = names16;
15183 used_prefixes |= (prefixes & PREFIX_DATA);
15184 }
15185 break;
15186 case va_mode:
15187 names = (address_mode == mode_64bit
15188 ? names64 : names32);
15189 if (!(prefixes & PREFIX_ADDR))
15190 names = (address_mode == mode_16bit
15191 ? names16 : names);
15192 else
15193 {
15194 /* Remove "addr16/addr32". */
15195 all_prefixes[last_addr_prefix] = 0;
15196 names = (address_mode != mode_32bit
15197 ? names32 : names16);
15198 used_prefixes |= PREFIX_ADDR;
15199 }
15200 break;
15201 case mask_bd_mode:
15202 case mask_mode:
15203 if (reg > 0x7)
15204 {
15205 oappend ("(bad)");
15206 return;
15207 }
15208 names = names_mask;
15209 break;
15210 case 0:
15211 return;
15212 default:
15213 oappend (INTERNAL_DISASSEMBLER_ERROR);
15214 return;
15215 }
15216 oappend (names[reg]);
15217 }
15218
15219 static void
15220 OP_E_memory (int bytemode, int sizeflag)
15221 {
15222 bfd_vma disp = 0;
15223 int add = (rex & REX_B) ? 8 : 0;
15224 int riprel = 0;
15225 int shift;
15226
15227 if (vex.evex)
15228 {
15229 /* In EVEX, if operand doesn't allow broadcast, vex.b should be 0. */
15230 if (vex.b
15231 && bytemode != x_mode
15232 && bytemode != xmmq_mode
15233 && bytemode != evex_half_bcst_xmmq_mode)
15234 {
15235 BadOp ();
15236 return;
15237 }
15238 switch (bytemode)
15239 {
15240 case dqw_mode:
15241 case dw_mode:
15242 shift = 1;
15243 break;
15244 case dqb_mode:
15245 case db_mode:
15246 shift = 0;
15247 break;
15248 case vex_vsib_d_w_dq_mode:
15249 case vex_vsib_d_w_d_mode:
15250 case vex_vsib_q_w_dq_mode:
15251 case vex_vsib_q_w_d_mode:
15252 case evex_x_gscat_mode:
15253 case xmm_mdq_mode:
15254 shift = vex.w ? 3 : 2;
15255 break;
15256 case x_mode:
15257 case evex_half_bcst_xmmq_mode:
15258 case xmmq_mode:
15259 if (vex.b)
15260 {
15261 shift = vex.w ? 3 : 2;
15262 break;
15263 }
15264 /* Fall through. */
15265 case xmmqd_mode:
15266 case xmmdw_mode:
15267 case ymmq_mode:
15268 case evex_x_nobcst_mode:
15269 case x_swap_mode:
15270 switch (vex.length)
15271 {
15272 case 128:
15273 shift = 4;
15274 break;
15275 case 256:
15276 shift = 5;
15277 break;
15278 case 512:
15279 shift = 6;
15280 break;
15281 default:
15282 abort ();
15283 }
15284 break;
15285 case ymm_mode:
15286 shift = 5;
15287 break;
15288 case xmm_mode:
15289 shift = 4;
15290 break;
15291 case xmm_mq_mode:
15292 case q_mode:
15293 case q_scalar_mode:
15294 case q_swap_mode:
15295 case q_scalar_swap_mode:
15296 shift = 3;
15297 break;
15298 case dqd_mode:
15299 case xmm_md_mode:
15300 case d_mode:
15301 case d_scalar_mode:
15302 case d_swap_mode:
15303 case d_scalar_swap_mode:
15304 shift = 2;
15305 break;
15306 case w_scalar_mode:
15307 case xmm_mw_mode:
15308 shift = 1;
15309 break;
15310 case b_scalar_mode:
15311 case xmm_mb_mode:
15312 shift = 0;
15313 break;
15314 case dqa_mode:
15315 shift = address_mode == mode_64bit ? 3 : 2;
15316 break;
15317 default:
15318 abort ();
15319 }
15320 /* Make necessary corrections to shift for modes that need it.
15321 For these modes we currently have shift 4, 5 or 6 depending on
15322 vex.length (it corresponds to xmmword, ymmword or zmmword
15323 operand). We might want to make it 3, 4 or 5 (e.g. for
15324 xmmq_mode). In case of broadcast enabled the corrections
15325 aren't needed, as element size is always 32 or 64 bits. */
15326 if (!vex.b
15327 && (bytemode == xmmq_mode
15328 || bytemode == evex_half_bcst_xmmq_mode))
15329 shift -= 1;
15330 else if (bytemode == xmmqd_mode)
15331 shift -= 2;
15332 else if (bytemode == xmmdw_mode)
15333 shift -= 3;
15334 else if (bytemode == ymmq_mode && vex.length == 128)
15335 shift -= 1;
15336 }
15337 else
15338 shift = 0;
15339
15340 USED_REX (REX_B);
15341 if (intel_syntax)
15342 intel_operand_size (bytemode, sizeflag);
15343 append_seg ();
15344
15345 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
15346 {
15347 /* 32/64 bit address mode */
15348 int havedisp;
15349 int havesib;
15350 int havebase;
15351 int haveindex;
15352 int needindex;
15353 int needaddr32;
15354 int base, rbase;
15355 int vindex = 0;
15356 int scale = 0;
15357 int addr32flag = !((sizeflag & AFLAG)
15358 || bytemode == v_bnd_mode
15359 || bytemode == v_bndmk_mode
15360 || bytemode == bnd_mode
15361 || bytemode == bnd_swap_mode);
15362 const char **indexes64 = names64;
15363 const char **indexes32 = names32;
15364
15365 havesib = 0;
15366 havebase = 1;
15367 haveindex = 0;
15368 base = modrm.rm;
15369
15370 if (base == 4)
15371 {
15372 havesib = 1;
15373 vindex = sib.index;
15374 USED_REX (REX_X);
15375 if (rex & REX_X)
15376 vindex += 8;
15377 switch (bytemode)
15378 {
15379 case vex_vsib_d_w_dq_mode:
15380 case vex_vsib_d_w_d_mode:
15381 case vex_vsib_q_w_dq_mode:
15382 case vex_vsib_q_w_d_mode:
15383 if (!need_vex)
15384 abort ();
15385 if (vex.evex)
15386 {
15387 if (!vex.v)
15388 vindex += 16;
15389 }
15390
15391 haveindex = 1;
15392 switch (vex.length)
15393 {
15394 case 128:
15395 indexes64 = indexes32 = names_xmm;
15396 break;
15397 case 256:
15398 if (!vex.w
15399 || bytemode == vex_vsib_q_w_dq_mode
15400 || bytemode == vex_vsib_q_w_d_mode)
15401 indexes64 = indexes32 = names_ymm;
15402 else
15403 indexes64 = indexes32 = names_xmm;
15404 break;
15405 case 512:
15406 if (!vex.w
15407 || bytemode == vex_vsib_q_w_dq_mode
15408 || bytemode == vex_vsib_q_w_d_mode)
15409 indexes64 = indexes32 = names_zmm;
15410 else
15411 indexes64 = indexes32 = names_ymm;
15412 break;
15413 default:
15414 abort ();
15415 }
15416 break;
15417 default:
15418 haveindex = vindex != 4;
15419 break;
15420 }
15421 scale = sib.scale;
15422 base = sib.base;
15423 codep++;
15424 }
15425 rbase = base + add;
15426
15427 switch (modrm.mod)
15428 {
15429 case 0:
15430 if (base == 5)
15431 {
15432 havebase = 0;
15433 if (address_mode == mode_64bit && !havesib)
15434 riprel = 1;
15435 disp = get32s ();
15436 if (riprel && bytemode == v_bndmk_mode)
15437 {
15438 oappend ("(bad)");
15439 return;
15440 }
15441 }
15442 break;
15443 case 1:
15444 FETCH_DATA (the_info, codep + 1);
15445 disp = *codep++;
15446 if ((disp & 0x80) != 0)
15447 disp -= 0x100;
15448 if (vex.evex && shift > 0)
15449 disp <<= shift;
15450 break;
15451 case 2:
15452 disp = get32s ();
15453 break;
15454 }
15455
15456 needindex = 0;
15457 needaddr32 = 0;
15458 if (havesib
15459 && !havebase
15460 && !haveindex
15461 && address_mode != mode_16bit)
15462 {
15463 if (address_mode == mode_64bit)
15464 {
15465 /* Display eiz instead of addr32. */
15466 needindex = addr32flag;
15467 needaddr32 = 1;
15468 }
15469 else
15470 {
15471 /* In 32-bit mode, we need index register to tell [offset]
15472 from [eiz*1 + offset]. */
15473 needindex = 1;
15474 }
15475 }
15476
15477 havedisp = (havebase
15478 || needindex
15479 || (havesib && (haveindex || scale != 0)));
15480
15481 if (!intel_syntax)
15482 if (modrm.mod != 0 || base == 5)
15483 {
15484 if (havedisp || riprel)
15485 print_displacement (scratchbuf, disp);
15486 else
15487 print_operand_value (scratchbuf, 1, disp);
15488 oappend (scratchbuf);
15489 if (riprel)
15490 {
15491 set_op (disp, 1);
15492 oappend (!addr32flag ? "(%rip)" : "(%eip)");
15493 }
15494 }
15495
15496 if ((havebase || haveindex || needaddr32 || riprel)
15497 && (bytemode != v_bnd_mode)
15498 && (bytemode != v_bndmk_mode)
15499 && (bytemode != bnd_mode)
15500 && (bytemode != bnd_swap_mode))
15501 used_prefixes |= PREFIX_ADDR;
15502
15503 if (havedisp || (intel_syntax && riprel))
15504 {
15505 *obufp++ = open_char;
15506 if (intel_syntax && riprel)
15507 {
15508 set_op (disp, 1);
15509 oappend (!addr32flag ? "rip" : "eip");
15510 }
15511 *obufp = '\0';
15512 if (havebase)
15513 oappend (address_mode == mode_64bit && !addr32flag
15514 ? names64[rbase] : names32[rbase]);
15515 if (havesib)
15516 {
15517 /* ESP/RSP won't allow index. If base isn't ESP/RSP,
15518 print index to tell base + index from base. */
15519 if (scale != 0
15520 || needindex
15521 || haveindex
15522 || (havebase && base != ESP_REG_NUM))
15523 {
15524 if (!intel_syntax || havebase)
15525 {
15526 *obufp++ = separator_char;
15527 *obufp = '\0';
15528 }
15529 if (haveindex)
15530 oappend (address_mode == mode_64bit && !addr32flag
15531 ? indexes64[vindex] : indexes32[vindex]);
15532 else
15533 oappend (address_mode == mode_64bit && !addr32flag
15534 ? index64 : index32);
15535
15536 *obufp++ = scale_char;
15537 *obufp = '\0';
15538 sprintf (scratchbuf, "%d", 1 << scale);
15539 oappend (scratchbuf);
15540 }
15541 }
15542 if (intel_syntax
15543 && (disp || modrm.mod != 0 || base == 5))
15544 {
15545 if (!havedisp || (bfd_signed_vma) disp >= 0)
15546 {
15547 *obufp++ = '+';
15548 *obufp = '\0';
15549 }
15550 else if (modrm.mod != 1 && disp != -disp)
15551 {
15552 *obufp++ = '-';
15553 *obufp = '\0';
15554 disp = - (bfd_signed_vma) disp;
15555 }
15556
15557 if (havedisp)
15558 print_displacement (scratchbuf, disp);
15559 else
15560 print_operand_value (scratchbuf, 1, disp);
15561 oappend (scratchbuf);
15562 }
15563
15564 *obufp++ = close_char;
15565 *obufp = '\0';
15566 }
15567 else if (intel_syntax)
15568 {
15569 if (modrm.mod != 0 || base == 5)
15570 {
15571 if (!active_seg_prefix)
15572 {
15573 oappend (names_seg[ds_reg - es_reg]);
15574 oappend (":");
15575 }
15576 print_operand_value (scratchbuf, 1, disp);
15577 oappend (scratchbuf);
15578 }
15579 }
15580 }
15581 else
15582 {
15583 /* 16 bit address mode */
15584 used_prefixes |= prefixes & PREFIX_ADDR;
15585 switch (modrm.mod)
15586 {
15587 case 0:
15588 if (modrm.rm == 6)
15589 {
15590 disp = get16 ();
15591 if ((disp & 0x8000) != 0)
15592 disp -= 0x10000;
15593 }
15594 break;
15595 case 1:
15596 FETCH_DATA (the_info, codep + 1);
15597 disp = *codep++;
15598 if ((disp & 0x80) != 0)
15599 disp -= 0x100;
15600 if (vex.evex && shift > 0)
15601 disp <<= shift;
15602 break;
15603 case 2:
15604 disp = get16 ();
15605 if ((disp & 0x8000) != 0)
15606 disp -= 0x10000;
15607 break;
15608 }
15609
15610 if (!intel_syntax)
15611 if (modrm.mod != 0 || modrm.rm == 6)
15612 {
15613 print_displacement (scratchbuf, disp);
15614 oappend (scratchbuf);
15615 }
15616
15617 if (modrm.mod != 0 || modrm.rm != 6)
15618 {
15619 *obufp++ = open_char;
15620 *obufp = '\0';
15621 oappend (index16[modrm.rm]);
15622 if (intel_syntax
15623 && (disp || modrm.mod != 0 || modrm.rm == 6))
15624 {
15625 if ((bfd_signed_vma) disp >= 0)
15626 {
15627 *obufp++ = '+';
15628 *obufp = '\0';
15629 }
15630 else if (modrm.mod != 1)
15631 {
15632 *obufp++ = '-';
15633 *obufp = '\0';
15634 disp = - (bfd_signed_vma) disp;
15635 }
15636
15637 print_displacement (scratchbuf, disp);
15638 oappend (scratchbuf);
15639 }
15640
15641 *obufp++ = close_char;
15642 *obufp = '\0';
15643 }
15644 else if (intel_syntax)
15645 {
15646 if (!active_seg_prefix)
15647 {
15648 oappend (names_seg[ds_reg - es_reg]);
15649 oappend (":");
15650 }
15651 print_operand_value (scratchbuf, 1, disp & 0xffff);
15652 oappend (scratchbuf);
15653 }
15654 }
15655 if (vex.evex && vex.b
15656 && (bytemode == x_mode
15657 || bytemode == xmmq_mode
15658 || bytemode == evex_half_bcst_xmmq_mode))
15659 {
15660 if (vex.w
15661 || bytemode == xmmq_mode
15662 || bytemode == evex_half_bcst_xmmq_mode)
15663 {
15664 switch (vex.length)
15665 {
15666 case 128:
15667 oappend ("{1to2}");
15668 break;
15669 case 256:
15670 oappend ("{1to4}");
15671 break;
15672 case 512:
15673 oappend ("{1to8}");
15674 break;
15675 default:
15676 abort ();
15677 }
15678 }
15679 else
15680 {
15681 switch (vex.length)
15682 {
15683 case 128:
15684 oappend ("{1to4}");
15685 break;
15686 case 256:
15687 oappend ("{1to8}");
15688 break;
15689 case 512:
15690 oappend ("{1to16}");
15691 break;
15692 default:
15693 abort ();
15694 }
15695 }
15696 }
15697 }
15698
15699 static void
15700 OP_E (int bytemode, int sizeflag)
15701 {
15702 /* Skip mod/rm byte. */
15703 MODRM_CHECK;
15704 codep++;
15705
15706 if (modrm.mod == 3)
15707 OP_E_register (bytemode, sizeflag);
15708 else
15709 OP_E_memory (bytemode, sizeflag);
15710 }
15711
15712 static void
15713 OP_G (int bytemode, int sizeflag)
15714 {
15715 int add = 0;
15716 const char **names;
15717 USED_REX (REX_R);
15718 if (rex & REX_R)
15719 add += 8;
15720 switch (bytemode)
15721 {
15722 case b_mode:
15723 USED_REX (0);
15724 if (rex)
15725 oappend (names8rex[modrm.reg + add]);
15726 else
15727 oappend (names8[modrm.reg + add]);
15728 break;
15729 case w_mode:
15730 oappend (names16[modrm.reg + add]);
15731 break;
15732 case d_mode:
15733 case db_mode:
15734 case dw_mode:
15735 oappend (names32[modrm.reg + add]);
15736 break;
15737 case q_mode:
15738 oappend (names64[modrm.reg + add]);
15739 break;
15740 case bnd_mode:
15741 if (modrm.reg > 0x3)
15742 {
15743 oappend ("(bad)");
15744 return;
15745 }
15746 oappend (names_bnd[modrm.reg]);
15747 break;
15748 case v_mode:
15749 case dq_mode:
15750 case dqb_mode:
15751 case dqd_mode:
15752 case dqw_mode:
15753 USED_REX (REX_W);
15754 if (rex & REX_W)
15755 oappend (names64[modrm.reg + add]);
15756 else
15757 {
15758 if ((sizeflag & DFLAG) || bytemode != v_mode)
15759 oappend (names32[modrm.reg + add]);
15760 else
15761 oappend (names16[modrm.reg + add]);
15762 used_prefixes |= (prefixes & PREFIX_DATA);
15763 }
15764 break;
15765 case va_mode:
15766 names = (address_mode == mode_64bit
15767 ? names64 : names32);
15768 if (!(prefixes & PREFIX_ADDR))
15769 {
15770 if (address_mode == mode_16bit)
15771 names = names16;
15772 }
15773 else
15774 {
15775 /* Remove "addr16/addr32". */
15776 all_prefixes[last_addr_prefix] = 0;
15777 names = (address_mode != mode_32bit
15778 ? names32 : names16);
15779 used_prefixes |= PREFIX_ADDR;
15780 }
15781 oappend (names[modrm.reg + add]);
15782 break;
15783 case m_mode:
15784 if (address_mode == mode_64bit)
15785 oappend (names64[modrm.reg + add]);
15786 else
15787 oappend (names32[modrm.reg + add]);
15788 break;
15789 case mask_bd_mode:
15790 case mask_mode:
15791 if ((modrm.reg + add) > 0x7)
15792 {
15793 oappend ("(bad)");
15794 return;
15795 }
15796 oappend (names_mask[modrm.reg + add]);
15797 break;
15798 default:
15799 oappend (INTERNAL_DISASSEMBLER_ERROR);
15800 break;
15801 }
15802 }
15803
15804 static bfd_vma
15805 get64 (void)
15806 {
15807 bfd_vma x;
15808 #ifdef BFD64
15809 unsigned int a;
15810 unsigned int b;
15811
15812 FETCH_DATA (the_info, codep + 8);
15813 a = *codep++ & 0xff;
15814 a |= (*codep++ & 0xff) << 8;
15815 a |= (*codep++ & 0xff) << 16;
15816 a |= (*codep++ & 0xffu) << 24;
15817 b = *codep++ & 0xff;
15818 b |= (*codep++ & 0xff) << 8;
15819 b |= (*codep++ & 0xff) << 16;
15820 b |= (*codep++ & 0xffu) << 24;
15821 x = a + ((bfd_vma) b << 32);
15822 #else
15823 abort ();
15824 x = 0;
15825 #endif
15826 return x;
15827 }
15828
15829 static bfd_signed_vma
15830 get32 (void)
15831 {
15832 bfd_signed_vma x = 0;
15833
15834 FETCH_DATA (the_info, codep + 4);
15835 x = *codep++ & (bfd_signed_vma) 0xff;
15836 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
15837 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
15838 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
15839 return x;
15840 }
15841
15842 static bfd_signed_vma
15843 get32s (void)
15844 {
15845 bfd_signed_vma x = 0;
15846
15847 FETCH_DATA (the_info, codep + 4);
15848 x = *codep++ & (bfd_signed_vma) 0xff;
15849 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
15850 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
15851 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
15852
15853 x = (x ^ ((bfd_signed_vma) 1 << 31)) - ((bfd_signed_vma) 1 << 31);
15854
15855 return x;
15856 }
15857
15858 static int
15859 get16 (void)
15860 {
15861 int x = 0;
15862
15863 FETCH_DATA (the_info, codep + 2);
15864 x = *codep++ & 0xff;
15865 x |= (*codep++ & 0xff) << 8;
15866 return x;
15867 }
15868
15869 static void
15870 set_op (bfd_vma op, int riprel)
15871 {
15872 op_index[op_ad] = op_ad;
15873 if (address_mode == mode_64bit)
15874 {
15875 op_address[op_ad] = op;
15876 op_riprel[op_ad] = riprel;
15877 }
15878 else
15879 {
15880 /* Mask to get a 32-bit address. */
15881 op_address[op_ad] = op & 0xffffffff;
15882 op_riprel[op_ad] = riprel & 0xffffffff;
15883 }
15884 }
15885
15886 static void
15887 OP_REG (int code, int sizeflag)
15888 {
15889 const char *s;
15890 int add;
15891
15892 switch (code)
15893 {
15894 case es_reg: case ss_reg: case cs_reg:
15895 case ds_reg: case fs_reg: case gs_reg:
15896 oappend (names_seg[code - es_reg]);
15897 return;
15898 }
15899
15900 USED_REX (REX_B);
15901 if (rex & REX_B)
15902 add = 8;
15903 else
15904 add = 0;
15905
15906 switch (code)
15907 {
15908 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
15909 case sp_reg: case bp_reg: case si_reg: case di_reg:
15910 s = names16[code - ax_reg + add];
15911 break;
15912 case al_reg: case ah_reg: case cl_reg: case ch_reg:
15913 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
15914 USED_REX (0);
15915 if (rex)
15916 s = names8rex[code - al_reg + add];
15917 else
15918 s = names8[code - al_reg];
15919 break;
15920 case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg:
15921 case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg:
15922 if (address_mode == mode_64bit
15923 && ((sizeflag & DFLAG) || (rex & REX_W)))
15924 {
15925 s = names64[code - rAX_reg + add];
15926 break;
15927 }
15928 code += eAX_reg - rAX_reg;
15929 /* Fall through. */
15930 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
15931 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
15932 USED_REX (REX_W);
15933 if (rex & REX_W)
15934 s = names64[code - eAX_reg + add];
15935 else
15936 {
15937 if (sizeflag & DFLAG)
15938 s = names32[code - eAX_reg + add];
15939 else
15940 s = names16[code - eAX_reg + add];
15941 used_prefixes |= (prefixes & PREFIX_DATA);
15942 }
15943 break;
15944 default:
15945 s = INTERNAL_DISASSEMBLER_ERROR;
15946 break;
15947 }
15948 oappend (s);
15949 }
15950
15951 static void
15952 OP_IMREG (int code, int sizeflag)
15953 {
15954 const char *s;
15955
15956 switch (code)
15957 {
15958 case indir_dx_reg:
15959 if (intel_syntax)
15960 s = "dx";
15961 else
15962 s = "(%dx)";
15963 break;
15964 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
15965 case sp_reg: case bp_reg: case si_reg: case di_reg:
15966 s = names16[code - ax_reg];
15967 break;
15968 case es_reg: case ss_reg: case cs_reg:
15969 case ds_reg: case fs_reg: case gs_reg:
15970 s = names_seg[code - es_reg];
15971 break;
15972 case al_reg: case ah_reg: case cl_reg: case ch_reg:
15973 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
15974 USED_REX (0);
15975 if (rex)
15976 s = names8rex[code - al_reg];
15977 else
15978 s = names8[code - al_reg];
15979 break;
15980 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
15981 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
15982 USED_REX (REX_W);
15983 if (rex & REX_W)
15984 s = names64[code - eAX_reg];
15985 else
15986 {
15987 if (sizeflag & DFLAG)
15988 s = names32[code - eAX_reg];
15989 else
15990 s = names16[code - eAX_reg];
15991 used_prefixes |= (prefixes & PREFIX_DATA);
15992 }
15993 break;
15994 case z_mode_ax_reg:
15995 if ((rex & REX_W) || (sizeflag & DFLAG))
15996 s = *names32;
15997 else
15998 s = *names16;
15999 if (!(rex & REX_W))
16000 used_prefixes |= (prefixes & PREFIX_DATA);
16001 break;
16002 default:
16003 s = INTERNAL_DISASSEMBLER_ERROR;
16004 break;
16005 }
16006 oappend (s);
16007 }
16008
16009 static void
16010 OP_I (int bytemode, int sizeflag)
16011 {
16012 bfd_signed_vma op;
16013 bfd_signed_vma mask = -1;
16014
16015 switch (bytemode)
16016 {
16017 case b_mode:
16018 FETCH_DATA (the_info, codep + 1);
16019 op = *codep++;
16020 mask = 0xff;
16021 break;
16022 case q_mode:
16023 if (address_mode == mode_64bit)
16024 {
16025 op = get32s ();
16026 break;
16027 }
16028 /* Fall through. */
16029 case v_mode:
16030 USED_REX (REX_W);
16031 if (rex & REX_W)
16032 op = get32s ();
16033 else
16034 {
16035 if (sizeflag & DFLAG)
16036 {
16037 op = get32 ();
16038 mask = 0xffffffff;
16039 }
16040 else
16041 {
16042 op = get16 ();
16043 mask = 0xfffff;
16044 }
16045 used_prefixes |= (prefixes & PREFIX_DATA);
16046 }
16047 break;
16048 case w_mode:
16049 mask = 0xfffff;
16050 op = get16 ();
16051 break;
16052 case const_1_mode:
16053 if (intel_syntax)
16054 oappend ("1");
16055 return;
16056 default:
16057 oappend (INTERNAL_DISASSEMBLER_ERROR);
16058 return;
16059 }
16060
16061 op &= mask;
16062 scratchbuf[0] = '$';
16063 print_operand_value (scratchbuf + 1, 1, op);
16064 oappend_maybe_intel (scratchbuf);
16065 scratchbuf[0] = '\0';
16066 }
16067
16068 static void
16069 OP_I64 (int bytemode, int sizeflag)
16070 {
16071 bfd_signed_vma op;
16072 bfd_signed_vma mask = -1;
16073
16074 if (address_mode != mode_64bit)
16075 {
16076 OP_I (bytemode, sizeflag);
16077 return;
16078 }
16079
16080 switch (bytemode)
16081 {
16082 case b_mode:
16083 FETCH_DATA (the_info, codep + 1);
16084 op = *codep++;
16085 mask = 0xff;
16086 break;
16087 case v_mode:
16088 USED_REX (REX_W);
16089 if (rex & REX_W)
16090 op = get64 ();
16091 else
16092 {
16093 if (sizeflag & DFLAG)
16094 {
16095 op = get32 ();
16096 mask = 0xffffffff;
16097 }
16098 else
16099 {
16100 op = get16 ();
16101 mask = 0xfffff;
16102 }
16103 used_prefixes |= (prefixes & PREFIX_DATA);
16104 }
16105 break;
16106 case w_mode:
16107 mask = 0xfffff;
16108 op = get16 ();
16109 break;
16110 default:
16111 oappend (INTERNAL_DISASSEMBLER_ERROR);
16112 return;
16113 }
16114
16115 op &= mask;
16116 scratchbuf[0] = '$';
16117 print_operand_value (scratchbuf + 1, 1, op);
16118 oappend_maybe_intel (scratchbuf);
16119 scratchbuf[0] = '\0';
16120 }
16121
16122 static void
16123 OP_sI (int bytemode, int sizeflag)
16124 {
16125 bfd_signed_vma op;
16126
16127 switch (bytemode)
16128 {
16129 case b_mode:
16130 case b_T_mode:
16131 FETCH_DATA (the_info, codep + 1);
16132 op = *codep++;
16133 if ((op & 0x80) != 0)
16134 op -= 0x100;
16135 if (bytemode == b_T_mode)
16136 {
16137 if (address_mode != mode_64bit
16138 || !((sizeflag & DFLAG) || (rex & REX_W)))
16139 {
16140 /* The operand-size prefix is overridden by a REX prefix. */
16141 if ((sizeflag & DFLAG) || (rex & REX_W))
16142 op &= 0xffffffff;
16143 else
16144 op &= 0xffff;
16145 }
16146 }
16147 else
16148 {
16149 if (!(rex & REX_W))
16150 {
16151 if (sizeflag & DFLAG)
16152 op &= 0xffffffff;
16153 else
16154 op &= 0xffff;
16155 }
16156 }
16157 break;
16158 case v_mode:
16159 /* The operand-size prefix is overridden by a REX prefix. */
16160 if ((sizeflag & DFLAG) || (rex & REX_W))
16161 op = get32s ();
16162 else
16163 op = get16 ();
16164 break;
16165 default:
16166 oappend (INTERNAL_DISASSEMBLER_ERROR);
16167 return;
16168 }
16169
16170 scratchbuf[0] = '$';
16171 print_operand_value (scratchbuf + 1, 1, op);
16172 oappend_maybe_intel (scratchbuf);
16173 }
16174
16175 static void
16176 OP_J (int bytemode, int sizeflag)
16177 {
16178 bfd_vma disp;
16179 bfd_vma mask = -1;
16180 bfd_vma segment = 0;
16181
16182 switch (bytemode)
16183 {
16184 case b_mode:
16185 FETCH_DATA (the_info, codep + 1);
16186 disp = *codep++;
16187 if ((disp & 0x80) != 0)
16188 disp -= 0x100;
16189 break;
16190 case v_mode:
16191 if (isa64 == amd64)
16192 USED_REX (REX_W);
16193 if ((sizeflag & DFLAG)
16194 || (address_mode == mode_64bit
16195 && (isa64 != amd64 || (rex & REX_W))))
16196 disp = get32s ();
16197 else
16198 {
16199 disp = get16 ();
16200 if ((disp & 0x8000) != 0)
16201 disp -= 0x10000;
16202 /* In 16bit mode, address is wrapped around at 64k within
16203 the same segment. Otherwise, a data16 prefix on a jump
16204 instruction means that the pc is masked to 16 bits after
16205 the displacement is added! */
16206 mask = 0xffff;
16207 if ((prefixes & PREFIX_DATA) == 0)
16208 segment = ((start_pc + (codep - start_codep))
16209 & ~((bfd_vma) 0xffff));
16210 }
16211 if (address_mode != mode_64bit
16212 || (isa64 == amd64 && !(rex & REX_W)))
16213 used_prefixes |= (prefixes & PREFIX_DATA);
16214 break;
16215 default:
16216 oappend (INTERNAL_DISASSEMBLER_ERROR);
16217 return;
16218 }
16219 disp = ((start_pc + (codep - start_codep) + disp) & mask) | segment;
16220 set_op (disp, 0);
16221 print_operand_value (scratchbuf, 1, disp);
16222 oappend (scratchbuf);
16223 }
16224
16225 static void
16226 OP_SEG (int bytemode, int sizeflag)
16227 {
16228 if (bytemode == w_mode)
16229 oappend (names_seg[modrm.reg]);
16230 else
16231 OP_E (modrm.mod == 3 ? bytemode : w_mode, sizeflag);
16232 }
16233
16234 static void
16235 OP_DIR (int dummy ATTRIBUTE_UNUSED, int sizeflag)
16236 {
16237 int seg, offset;
16238
16239 if (sizeflag & DFLAG)
16240 {
16241 offset = get32 ();
16242 seg = get16 ();
16243 }
16244 else
16245 {
16246 offset = get16 ();
16247 seg = get16 ();
16248 }
16249 used_prefixes |= (prefixes & PREFIX_DATA);
16250 if (intel_syntax)
16251 sprintf (scratchbuf, "0x%x:0x%x", seg, offset);
16252 else
16253 sprintf (scratchbuf, "$0x%x,$0x%x", seg, offset);
16254 oappend (scratchbuf);
16255 }
16256
16257 static void
16258 OP_OFF (int bytemode, int sizeflag)
16259 {
16260 bfd_vma off;
16261
16262 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
16263 intel_operand_size (bytemode, sizeflag);
16264 append_seg ();
16265
16266 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
16267 off = get32 ();
16268 else
16269 off = get16 ();
16270
16271 if (intel_syntax)
16272 {
16273 if (!active_seg_prefix)
16274 {
16275 oappend (names_seg[ds_reg - es_reg]);
16276 oappend (":");
16277 }
16278 }
16279 print_operand_value (scratchbuf, 1, off);
16280 oappend (scratchbuf);
16281 }
16282
16283 static void
16284 OP_OFF64 (int bytemode, int sizeflag)
16285 {
16286 bfd_vma off;
16287
16288 if (address_mode != mode_64bit
16289 || (prefixes & PREFIX_ADDR))
16290 {
16291 OP_OFF (bytemode, sizeflag);
16292 return;
16293 }
16294
16295 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
16296 intel_operand_size (bytemode, sizeflag);
16297 append_seg ();
16298
16299 off = get64 ();
16300
16301 if (intel_syntax)
16302 {
16303 if (!active_seg_prefix)
16304 {
16305 oappend (names_seg[ds_reg - es_reg]);
16306 oappend (":");
16307 }
16308 }
16309 print_operand_value (scratchbuf, 1, off);
16310 oappend (scratchbuf);
16311 }
16312
16313 static void
16314 ptr_reg (int code, int sizeflag)
16315 {
16316 const char *s;
16317
16318 *obufp++ = open_char;
16319 used_prefixes |= (prefixes & PREFIX_ADDR);
16320 if (address_mode == mode_64bit)
16321 {
16322 if (!(sizeflag & AFLAG))
16323 s = names32[code - eAX_reg];
16324 else
16325 s = names64[code - eAX_reg];
16326 }
16327 else if (sizeflag & AFLAG)
16328 s = names32[code - eAX_reg];
16329 else
16330 s = names16[code - eAX_reg];
16331 oappend (s);
16332 *obufp++ = close_char;
16333 *obufp = 0;
16334 }
16335
16336 static void
16337 OP_ESreg (int code, int sizeflag)
16338 {
16339 if (intel_syntax)
16340 {
16341 switch (codep[-1])
16342 {
16343 case 0x6d: /* insw/insl */
16344 intel_operand_size (z_mode, sizeflag);
16345 break;
16346 case 0xa5: /* movsw/movsl/movsq */
16347 case 0xa7: /* cmpsw/cmpsl/cmpsq */
16348 case 0xab: /* stosw/stosl */
16349 case 0xaf: /* scasw/scasl */
16350 intel_operand_size (v_mode, sizeflag);
16351 break;
16352 default:
16353 intel_operand_size (b_mode, sizeflag);
16354 }
16355 }
16356 oappend_maybe_intel ("%es:");
16357 ptr_reg (code, sizeflag);
16358 }
16359
16360 static void
16361 OP_DSreg (int code, int sizeflag)
16362 {
16363 if (intel_syntax)
16364 {
16365 switch (codep[-1])
16366 {
16367 case 0x6f: /* outsw/outsl */
16368 intel_operand_size (z_mode, sizeflag);
16369 break;
16370 case 0xa5: /* movsw/movsl/movsq */
16371 case 0xa7: /* cmpsw/cmpsl/cmpsq */
16372 case 0xad: /* lodsw/lodsl/lodsq */
16373 intel_operand_size (v_mode, sizeflag);
16374 break;
16375 default:
16376 intel_operand_size (b_mode, sizeflag);
16377 }
16378 }
16379 /* Set active_seg_prefix to PREFIX_DS if it is unset so that the
16380 default segment register DS is printed. */
16381 if (!active_seg_prefix)
16382 active_seg_prefix = PREFIX_DS;
16383 append_seg ();
16384 ptr_reg (code, sizeflag);
16385 }
16386
16387 static void
16388 OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16389 {
16390 int add;
16391 if (rex & REX_R)
16392 {
16393 USED_REX (REX_R);
16394 add = 8;
16395 }
16396 else if (address_mode != mode_64bit && (prefixes & PREFIX_LOCK))
16397 {
16398 all_prefixes[last_lock_prefix] = 0;
16399 used_prefixes |= PREFIX_LOCK;
16400 add = 8;
16401 }
16402 else
16403 add = 0;
16404 sprintf (scratchbuf, "%%cr%d", modrm.reg + add);
16405 oappend_maybe_intel (scratchbuf);
16406 }
16407
16408 static void
16409 OP_D (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16410 {
16411 int add;
16412 USED_REX (REX_R);
16413 if (rex & REX_R)
16414 add = 8;
16415 else
16416 add = 0;
16417 if (intel_syntax)
16418 sprintf (scratchbuf, "db%d", modrm.reg + add);
16419 else
16420 sprintf (scratchbuf, "%%db%d", modrm.reg + add);
16421 oappend (scratchbuf);
16422 }
16423
16424 static void
16425 OP_T (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16426 {
16427 sprintf (scratchbuf, "%%tr%d", modrm.reg);
16428 oappend_maybe_intel (scratchbuf);
16429 }
16430
16431 static void
16432 OP_R (int bytemode, int sizeflag)
16433 {
16434 /* Skip mod/rm byte. */
16435 MODRM_CHECK;
16436 codep++;
16437 OP_E_register (bytemode, sizeflag);
16438 }
16439
16440 static void
16441 OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16442 {
16443 int reg = modrm.reg;
16444 const char **names;
16445
16446 used_prefixes |= (prefixes & PREFIX_DATA);
16447 if (prefixes & PREFIX_DATA)
16448 {
16449 names = names_xmm;
16450 USED_REX (REX_R);
16451 if (rex & REX_R)
16452 reg += 8;
16453 }
16454 else
16455 names = names_mm;
16456 oappend (names[reg]);
16457 }
16458
16459 static void
16460 OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16461 {
16462 int reg = modrm.reg;
16463 const char **names;
16464
16465 USED_REX (REX_R);
16466 if (rex & REX_R)
16467 reg += 8;
16468 if (vex.evex)
16469 {
16470 if (!vex.r)
16471 reg += 16;
16472 }
16473
16474 if (need_vex
16475 && bytemode != xmm_mode
16476 && bytemode != xmmq_mode
16477 && bytemode != evex_half_bcst_xmmq_mode
16478 && bytemode != ymm_mode
16479 && bytemode != scalar_mode)
16480 {
16481 switch (vex.length)
16482 {
16483 case 128:
16484 names = names_xmm;
16485 break;
16486 case 256:
16487 if (vex.w
16488 || (bytemode != vex_vsib_q_w_dq_mode
16489 && bytemode != vex_vsib_q_w_d_mode))
16490 names = names_ymm;
16491 else
16492 names = names_xmm;
16493 break;
16494 case 512:
16495 names = names_zmm;
16496 break;
16497 default:
16498 abort ();
16499 }
16500 }
16501 else if (bytemode == xmmq_mode
16502 || bytemode == evex_half_bcst_xmmq_mode)
16503 {
16504 switch (vex.length)
16505 {
16506 case 128:
16507 case 256:
16508 names = names_xmm;
16509 break;
16510 case 512:
16511 names = names_ymm;
16512 break;
16513 default:
16514 abort ();
16515 }
16516 }
16517 else if (bytemode == ymm_mode)
16518 names = names_ymm;
16519 else
16520 names = names_xmm;
16521 oappend (names[reg]);
16522 }
16523
16524 static void
16525 OP_EM (int bytemode, int sizeflag)
16526 {
16527 int reg;
16528 const char **names;
16529
16530 if (modrm.mod != 3)
16531 {
16532 if (intel_syntax
16533 && (bytemode == v_mode || bytemode == v_swap_mode))
16534 {
16535 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
16536 used_prefixes |= (prefixes & PREFIX_DATA);
16537 }
16538 OP_E (bytemode, sizeflag);
16539 return;
16540 }
16541
16542 if ((sizeflag & SUFFIX_ALWAYS) && bytemode == v_swap_mode)
16543 swap_operand ();
16544
16545 /* Skip mod/rm byte. */
16546 MODRM_CHECK;
16547 codep++;
16548 used_prefixes |= (prefixes & PREFIX_DATA);
16549 reg = modrm.rm;
16550 if (prefixes & PREFIX_DATA)
16551 {
16552 names = names_xmm;
16553 USED_REX (REX_B);
16554 if (rex & REX_B)
16555 reg += 8;
16556 }
16557 else
16558 names = names_mm;
16559 oappend (names[reg]);
16560 }
16561
16562 /* cvt* are the only instructions in sse2 which have
16563 both SSE and MMX operands and also have 0x66 prefix
16564 in their opcode. 0x66 was originally used to differentiate
16565 between SSE and MMX instruction(operands). So we have to handle the
16566 cvt* separately using OP_EMC and OP_MXC */
16567 static void
16568 OP_EMC (int bytemode, int sizeflag)
16569 {
16570 if (modrm.mod != 3)
16571 {
16572 if (intel_syntax && bytemode == v_mode)
16573 {
16574 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
16575 used_prefixes |= (prefixes & PREFIX_DATA);
16576 }
16577 OP_E (bytemode, sizeflag);
16578 return;
16579 }
16580
16581 /* Skip mod/rm byte. */
16582 MODRM_CHECK;
16583 codep++;
16584 used_prefixes |= (prefixes & PREFIX_DATA);
16585 oappend (names_mm[modrm.rm]);
16586 }
16587
16588 static void
16589 OP_MXC (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16590 {
16591 used_prefixes |= (prefixes & PREFIX_DATA);
16592 oappend (names_mm[modrm.reg]);
16593 }
16594
16595 static void
16596 OP_EX (int bytemode, int sizeflag)
16597 {
16598 int reg;
16599 const char **names;
16600
16601 /* Skip mod/rm byte. */
16602 MODRM_CHECK;
16603 codep++;
16604
16605 if (modrm.mod != 3)
16606 {
16607 OP_E_memory (bytemode, sizeflag);
16608 return;
16609 }
16610
16611 reg = modrm.rm;
16612 USED_REX (REX_B);
16613 if (rex & REX_B)
16614 reg += 8;
16615 if (vex.evex)
16616 {
16617 USED_REX (REX_X);
16618 if ((rex & REX_X))
16619 reg += 16;
16620 }
16621
16622 if ((sizeflag & SUFFIX_ALWAYS)
16623 && (bytemode == x_swap_mode
16624 || bytemode == d_swap_mode
16625 || bytemode == d_scalar_swap_mode
16626 || bytemode == q_swap_mode
16627 || bytemode == q_scalar_swap_mode))
16628 swap_operand ();
16629
16630 if (need_vex
16631 && bytemode != xmm_mode
16632 && bytemode != xmmdw_mode
16633 && bytemode != xmmqd_mode
16634 && bytemode != xmm_mb_mode
16635 && bytemode != xmm_mw_mode
16636 && bytemode != xmm_md_mode
16637 && bytemode != xmm_mq_mode
16638 && bytemode != xmm_mdq_mode
16639 && bytemode != xmmq_mode
16640 && bytemode != evex_half_bcst_xmmq_mode
16641 && bytemode != ymm_mode
16642 && bytemode != d_scalar_mode
16643 && bytemode != d_scalar_swap_mode
16644 && bytemode != q_scalar_mode
16645 && bytemode != q_scalar_swap_mode
16646 && bytemode != vex_scalar_w_dq_mode)
16647 {
16648 switch (vex.length)
16649 {
16650 case 128:
16651 names = names_xmm;
16652 break;
16653 case 256:
16654 names = names_ymm;
16655 break;
16656 case 512:
16657 names = names_zmm;
16658 break;
16659 default:
16660 abort ();
16661 }
16662 }
16663 else if (bytemode == xmmq_mode
16664 || bytemode == evex_half_bcst_xmmq_mode)
16665 {
16666 switch (vex.length)
16667 {
16668 case 128:
16669 case 256:
16670 names = names_xmm;
16671 break;
16672 case 512:
16673 names = names_ymm;
16674 break;
16675 default:
16676 abort ();
16677 }
16678 }
16679 else if (bytemode == ymm_mode)
16680 names = names_ymm;
16681 else
16682 names = names_xmm;
16683 oappend (names[reg]);
16684 }
16685
16686 static void
16687 OP_MS (int bytemode, int sizeflag)
16688 {
16689 if (modrm.mod == 3)
16690 OP_EM (bytemode, sizeflag);
16691 else
16692 BadOp ();
16693 }
16694
16695 static void
16696 OP_XS (int bytemode, int sizeflag)
16697 {
16698 if (modrm.mod == 3)
16699 OP_EX (bytemode, sizeflag);
16700 else
16701 BadOp ();
16702 }
16703
16704 static void
16705 OP_M (int bytemode, int sizeflag)
16706 {
16707 if (modrm.mod == 3)
16708 /* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */
16709 BadOp ();
16710 else
16711 OP_E (bytemode, sizeflag);
16712 }
16713
16714 static void
16715 OP_0f07 (int bytemode, int sizeflag)
16716 {
16717 if (modrm.mod != 3 || modrm.rm != 0)
16718 BadOp ();
16719 else
16720 OP_E (bytemode, sizeflag);
16721 }
16722
16723 /* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
16724 32bit mode and "xchg %rax,%rax" in 64bit mode. */
16725
16726 static void
16727 NOP_Fixup1 (int bytemode, int sizeflag)
16728 {
16729 if ((prefixes & PREFIX_DATA) != 0
16730 || (rex != 0
16731 && rex != 0x48
16732 && address_mode == mode_64bit))
16733 OP_REG (bytemode, sizeflag);
16734 else
16735 strcpy (obuf, "nop");
16736 }
16737
16738 static void
16739 NOP_Fixup2 (int bytemode, int sizeflag)
16740 {
16741 if ((prefixes & PREFIX_DATA) != 0
16742 || (rex != 0
16743 && rex != 0x48
16744 && address_mode == mode_64bit))
16745 OP_IMREG (bytemode, sizeflag);
16746 }
16747
16748 static const char *const Suffix3DNow[] = {
16749 /* 00 */ NULL, NULL, NULL, NULL,
16750 /* 04 */ NULL, NULL, NULL, NULL,
16751 /* 08 */ NULL, NULL, NULL, NULL,
16752 /* 0C */ "pi2fw", "pi2fd", NULL, NULL,
16753 /* 10 */ NULL, NULL, NULL, NULL,
16754 /* 14 */ NULL, NULL, NULL, NULL,
16755 /* 18 */ NULL, NULL, NULL, NULL,
16756 /* 1C */ "pf2iw", "pf2id", NULL, NULL,
16757 /* 20 */ NULL, NULL, NULL, NULL,
16758 /* 24 */ NULL, NULL, NULL, NULL,
16759 /* 28 */ NULL, NULL, NULL, NULL,
16760 /* 2C */ NULL, NULL, NULL, NULL,
16761 /* 30 */ NULL, NULL, NULL, NULL,
16762 /* 34 */ NULL, NULL, NULL, NULL,
16763 /* 38 */ NULL, NULL, NULL, NULL,
16764 /* 3C */ NULL, NULL, NULL, NULL,
16765 /* 40 */ NULL, NULL, NULL, NULL,
16766 /* 44 */ NULL, NULL, NULL, NULL,
16767 /* 48 */ NULL, NULL, NULL, NULL,
16768 /* 4C */ NULL, NULL, NULL, NULL,
16769 /* 50 */ NULL, NULL, NULL, NULL,
16770 /* 54 */ NULL, NULL, NULL, NULL,
16771 /* 58 */ NULL, NULL, NULL, NULL,
16772 /* 5C */ NULL, NULL, NULL, NULL,
16773 /* 60 */ NULL, NULL, NULL, NULL,
16774 /* 64 */ NULL, NULL, NULL, NULL,
16775 /* 68 */ NULL, NULL, NULL, NULL,
16776 /* 6C */ NULL, NULL, NULL, NULL,
16777 /* 70 */ NULL, NULL, NULL, NULL,
16778 /* 74 */ NULL, NULL, NULL, NULL,
16779 /* 78 */ NULL, NULL, NULL, NULL,
16780 /* 7C */ NULL, NULL, NULL, NULL,
16781 /* 80 */ NULL, NULL, NULL, NULL,
16782 /* 84 */ NULL, NULL, NULL, NULL,
16783 /* 88 */ NULL, NULL, "pfnacc", NULL,
16784 /* 8C */ NULL, NULL, "pfpnacc", NULL,
16785 /* 90 */ "pfcmpge", NULL, NULL, NULL,
16786 /* 94 */ "pfmin", NULL, "pfrcp", "pfrsqrt",
16787 /* 98 */ NULL, NULL, "pfsub", NULL,
16788 /* 9C */ NULL, NULL, "pfadd", NULL,
16789 /* A0 */ "pfcmpgt", NULL, NULL, NULL,
16790 /* A4 */ "pfmax", NULL, "pfrcpit1", "pfrsqit1",
16791 /* A8 */ NULL, NULL, "pfsubr", NULL,
16792 /* AC */ NULL, NULL, "pfacc", NULL,
16793 /* B0 */ "pfcmpeq", NULL, NULL, NULL,
16794 /* B4 */ "pfmul", NULL, "pfrcpit2", "pmulhrw",
16795 /* B8 */ NULL, NULL, NULL, "pswapd",
16796 /* BC */ NULL, NULL, NULL, "pavgusb",
16797 /* C0 */ NULL, NULL, NULL, NULL,
16798 /* C4 */ NULL, NULL, NULL, NULL,
16799 /* C8 */ NULL, NULL, NULL, NULL,
16800 /* CC */ NULL, NULL, NULL, NULL,
16801 /* D0 */ NULL, NULL, NULL, NULL,
16802 /* D4 */ NULL, NULL, NULL, NULL,
16803 /* D8 */ NULL, NULL, NULL, NULL,
16804 /* DC */ NULL, NULL, NULL, NULL,
16805 /* E0 */ NULL, NULL, NULL, NULL,
16806 /* E4 */ NULL, NULL, NULL, NULL,
16807 /* E8 */ NULL, NULL, NULL, NULL,
16808 /* EC */ NULL, NULL, NULL, NULL,
16809 /* F0 */ NULL, NULL, NULL, NULL,
16810 /* F4 */ NULL, NULL, NULL, NULL,
16811 /* F8 */ NULL, NULL, NULL, NULL,
16812 /* FC */ NULL, NULL, NULL, NULL,
16813 };
16814
16815 static void
16816 OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16817 {
16818 const char *mnemonic;
16819
16820 FETCH_DATA (the_info, codep + 1);
16821 /* AMD 3DNow! instructions are specified by an opcode suffix in the
16822 place where an 8-bit immediate would normally go. ie. the last
16823 byte of the instruction. */
16824 obufp = mnemonicendp;
16825 mnemonic = Suffix3DNow[*codep++ & 0xff];
16826 if (mnemonic)
16827 oappend (mnemonic);
16828 else
16829 {
16830 /* Since a variable sized modrm/sib chunk is between the start
16831 of the opcode (0x0f0f) and the opcode suffix, we need to do
16832 all the modrm processing first, and don't know until now that
16833 we have a bad opcode. This necessitates some cleaning up. */
16834 op_out[0][0] = '\0';
16835 op_out[1][0] = '\0';
16836 BadOp ();
16837 }
16838 mnemonicendp = obufp;
16839 }
16840
16841 static struct op simd_cmp_op[] =
16842 {
16843 { STRING_COMMA_LEN ("eq") },
16844 { STRING_COMMA_LEN ("lt") },
16845 { STRING_COMMA_LEN ("le") },
16846 { STRING_COMMA_LEN ("unord") },
16847 { STRING_COMMA_LEN ("neq") },
16848 { STRING_COMMA_LEN ("nlt") },
16849 { STRING_COMMA_LEN ("nle") },
16850 { STRING_COMMA_LEN ("ord") }
16851 };
16852
16853 static void
16854 CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16855 {
16856 unsigned int cmp_type;
16857
16858 FETCH_DATA (the_info, codep + 1);
16859 cmp_type = *codep++ & 0xff;
16860 if (cmp_type < ARRAY_SIZE (simd_cmp_op))
16861 {
16862 char suffix [3];
16863 char *p = mnemonicendp - 2;
16864 suffix[0] = p[0];
16865 suffix[1] = p[1];
16866 suffix[2] = '\0';
16867 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
16868 mnemonicendp += simd_cmp_op[cmp_type].len;
16869 }
16870 else
16871 {
16872 /* We have a reserved extension byte. Output it directly. */
16873 scratchbuf[0] = '$';
16874 print_operand_value (scratchbuf + 1, 1, cmp_type);
16875 oappend_maybe_intel (scratchbuf);
16876 scratchbuf[0] = '\0';
16877 }
16878 }
16879
16880 static void
16881 OP_Mwaitx (int bytemode ATTRIBUTE_UNUSED,
16882 int sizeflag ATTRIBUTE_UNUSED)
16883 {
16884 /* mwaitx %eax,%ecx,%ebx */
16885 if (!intel_syntax)
16886 {
16887 const char **names = (address_mode == mode_64bit
16888 ? names64 : names32);
16889 strcpy (op_out[0], names[0]);
16890 strcpy (op_out[1], names[1]);
16891 strcpy (op_out[2], names[3]);
16892 two_source_ops = 1;
16893 }
16894 /* Skip mod/rm byte. */
16895 MODRM_CHECK;
16896 codep++;
16897 }
16898
16899 static void
16900 OP_Mwait (int bytemode ATTRIBUTE_UNUSED,
16901 int sizeflag ATTRIBUTE_UNUSED)
16902 {
16903 /* mwait %eax,%ecx */
16904 if (!intel_syntax)
16905 {
16906 const char **names = (address_mode == mode_64bit
16907 ? names64 : names32);
16908 strcpy (op_out[0], names[0]);
16909 strcpy (op_out[1], names[1]);
16910 two_source_ops = 1;
16911 }
16912 /* Skip mod/rm byte. */
16913 MODRM_CHECK;
16914 codep++;
16915 }
16916
16917 static void
16918 OP_Monitor (int bytemode ATTRIBUTE_UNUSED,
16919 int sizeflag ATTRIBUTE_UNUSED)
16920 {
16921 /* monitor %eax,%ecx,%edx" */
16922 if (!intel_syntax)
16923 {
16924 const char **op1_names;
16925 const char **names = (address_mode == mode_64bit
16926 ? names64 : names32);
16927
16928 if (!(prefixes & PREFIX_ADDR))
16929 op1_names = (address_mode == mode_16bit
16930 ? names16 : names);
16931 else
16932 {
16933 /* Remove "addr16/addr32". */
16934 all_prefixes[last_addr_prefix] = 0;
16935 op1_names = (address_mode != mode_32bit
16936 ? names32 : names16);
16937 used_prefixes |= PREFIX_ADDR;
16938 }
16939 strcpy (op_out[0], op1_names[0]);
16940 strcpy (op_out[1], names[1]);
16941 strcpy (op_out[2], names[2]);
16942 two_source_ops = 1;
16943 }
16944 /* Skip mod/rm byte. */
16945 MODRM_CHECK;
16946 codep++;
16947 }
16948
16949 static void
16950 BadOp (void)
16951 {
16952 /* Throw away prefixes and 1st. opcode byte. */
16953 codep = insn_codep + 1;
16954 oappend ("(bad)");
16955 }
16956
16957 static void
16958 REP_Fixup (int bytemode, int sizeflag)
16959 {
16960 /* The 0xf3 prefix should be displayed as "rep" for ins, outs, movs,
16961 lods and stos. */
16962 if (prefixes & PREFIX_REPZ)
16963 all_prefixes[last_repz_prefix] = REP_PREFIX;
16964
16965 switch (bytemode)
16966 {
16967 case al_reg:
16968 case eAX_reg:
16969 case indir_dx_reg:
16970 OP_IMREG (bytemode, sizeflag);
16971 break;
16972 case eDI_reg:
16973 OP_ESreg (bytemode, sizeflag);
16974 break;
16975 case eSI_reg:
16976 OP_DSreg (bytemode, sizeflag);
16977 break;
16978 default:
16979 abort ();
16980 break;
16981 }
16982 }
16983
16984 /* For BND-prefixed instructions 0xF2 prefix should be displayed as
16985 "bnd". */
16986
16987 static void
16988 BND_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16989 {
16990 if (prefixes & PREFIX_REPNZ)
16991 all_prefixes[last_repnz_prefix] = BND_PREFIX;
16992 }
16993
16994 /* For NOTRACK-prefixed instructions, 0x3E prefix should be displayed as
16995 "notrack". */
16996
16997 static void
16998 NOTRACK_Fixup (int bytemode ATTRIBUTE_UNUSED,
16999 int sizeflag ATTRIBUTE_UNUSED)
17000 {
17001 if (active_seg_prefix == PREFIX_DS
17002 && (address_mode != mode_64bit || last_data_prefix < 0))
17003 {
17004 /* NOTRACK prefix is only valid on indirect branch instructions.
17005 NB: DATA prefix is unsupported for Intel64. */
17006 active_seg_prefix = 0;
17007 all_prefixes[last_seg_prefix] = NOTRACK_PREFIX;
17008 }
17009 }
17010
17011 /* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
17012 "xacquire"/"xrelease" for memory operand if there is a LOCK prefix.
17013 */
17014
17015 static void
17016 HLE_Fixup1 (int bytemode, int sizeflag)
17017 {
17018 if (modrm.mod != 3
17019 && (prefixes & PREFIX_LOCK) != 0)
17020 {
17021 if (prefixes & PREFIX_REPZ)
17022 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
17023 if (prefixes & PREFIX_REPNZ)
17024 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
17025 }
17026
17027 OP_E (bytemode, sizeflag);
17028 }
17029
17030 /* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
17031 "xacquire"/"xrelease" for memory operand. No check for LOCK prefix.
17032 */
17033
17034 static void
17035 HLE_Fixup2 (int bytemode, int sizeflag)
17036 {
17037 if (modrm.mod != 3)
17038 {
17039 if (prefixes & PREFIX_REPZ)
17040 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
17041 if (prefixes & PREFIX_REPNZ)
17042 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
17043 }
17044
17045 OP_E (bytemode, sizeflag);
17046 }
17047
17048 /* Similar to OP_E. But the 0xf3 prefixes should be displayed as
17049 "xrelease" for memory operand. No check for LOCK prefix. */
17050
17051 static void
17052 HLE_Fixup3 (int bytemode, int sizeflag)
17053 {
17054 if (modrm.mod != 3
17055 && last_repz_prefix > last_repnz_prefix
17056 && (prefixes & PREFIX_REPZ) != 0)
17057 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
17058
17059 OP_E (bytemode, sizeflag);
17060 }
17061
17062 static void
17063 CMPXCHG8B_Fixup (int bytemode, int sizeflag)
17064 {
17065 USED_REX (REX_W);
17066 if (rex & REX_W)
17067 {
17068 /* Change cmpxchg8b to cmpxchg16b. */
17069 char *p = mnemonicendp - 2;
17070 mnemonicendp = stpcpy (p, "16b");
17071 bytemode = o_mode;
17072 }
17073 else if ((prefixes & PREFIX_LOCK) != 0)
17074 {
17075 if (prefixes & PREFIX_REPZ)
17076 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
17077 if (prefixes & PREFIX_REPNZ)
17078 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
17079 }
17080
17081 OP_M (bytemode, sizeflag);
17082 }
17083
17084 static void
17085 XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED)
17086 {
17087 const char **names;
17088
17089 if (need_vex)
17090 {
17091 switch (vex.length)
17092 {
17093 case 128:
17094 names = names_xmm;
17095 break;
17096 case 256:
17097 names = names_ymm;
17098 break;
17099 default:
17100 abort ();
17101 }
17102 }
17103 else
17104 names = names_xmm;
17105 oappend (names[reg]);
17106 }
17107
17108 static void
17109 CRC32_Fixup (int bytemode, int sizeflag)
17110 {
17111 /* Add proper suffix to "crc32". */
17112 char *p = mnemonicendp;
17113
17114 switch (bytemode)
17115 {
17116 case b_mode:
17117 if (intel_syntax)
17118 goto skip;
17119
17120 *p++ = 'b';
17121 break;
17122 case v_mode:
17123 if (intel_syntax)
17124 goto skip;
17125
17126 USED_REX (REX_W);
17127 if (rex & REX_W)
17128 *p++ = 'q';
17129 else
17130 {
17131 if (sizeflag & DFLAG)
17132 *p++ = 'l';
17133 else
17134 *p++ = 'w';
17135 used_prefixes |= (prefixes & PREFIX_DATA);
17136 }
17137 break;
17138 default:
17139 oappend (INTERNAL_DISASSEMBLER_ERROR);
17140 break;
17141 }
17142 mnemonicendp = p;
17143 *p = '\0';
17144
17145 skip:
17146 if (modrm.mod == 3)
17147 {
17148 int add;
17149
17150 /* Skip mod/rm byte. */
17151 MODRM_CHECK;
17152 codep++;
17153
17154 USED_REX (REX_B);
17155 add = (rex & REX_B) ? 8 : 0;
17156 if (bytemode == b_mode)
17157 {
17158 USED_REX (0);
17159 if (rex)
17160 oappend (names8rex[modrm.rm + add]);
17161 else
17162 oappend (names8[modrm.rm + add]);
17163 }
17164 else
17165 {
17166 USED_REX (REX_W);
17167 if (rex & REX_W)
17168 oappend (names64[modrm.rm + add]);
17169 else if ((prefixes & PREFIX_DATA))
17170 oappend (names16[modrm.rm + add]);
17171 else
17172 oappend (names32[modrm.rm + add]);
17173 }
17174 }
17175 else
17176 OP_E (bytemode, sizeflag);
17177 }
17178
17179 static void
17180 FXSAVE_Fixup (int bytemode, int sizeflag)
17181 {
17182 /* Add proper suffix to "fxsave" and "fxrstor". */
17183 USED_REX (REX_W);
17184 if (rex & REX_W)
17185 {
17186 char *p = mnemonicendp;
17187 *p++ = '6';
17188 *p++ = '4';
17189 *p = '\0';
17190 mnemonicendp = p;
17191 }
17192 OP_M (bytemode, sizeflag);
17193 }
17194
17195 static void
17196 PCMPESTR_Fixup (int bytemode, int sizeflag)
17197 {
17198 /* Add proper suffix to "{,v}pcmpestr{i,m}". */
17199 if (!intel_syntax)
17200 {
17201 char *p = mnemonicendp;
17202
17203 USED_REX (REX_W);
17204 if (rex & REX_W)
17205 *p++ = 'q';
17206 else if (sizeflag & SUFFIX_ALWAYS)
17207 *p++ = 'l';
17208
17209 *p = '\0';
17210 mnemonicendp = p;
17211 }
17212
17213 OP_EX (bytemode, sizeflag);
17214 }
17215
17216 /* Display the destination register operand for instructions with
17217 VEX. */
17218
17219 static void
17220 OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
17221 {
17222 int reg;
17223 const char **names;
17224
17225 if (!need_vex)
17226 abort ();
17227
17228 if (!need_vex_reg)
17229 return;
17230
17231 reg = vex.register_specifier;
17232 if (address_mode != mode_64bit)
17233 reg &= 7;
17234 else if (vex.evex && !vex.v)
17235 reg += 16;
17236
17237 if (bytemode == vex_scalar_mode)
17238 {
17239 oappend (names_xmm[reg]);
17240 return;
17241 }
17242
17243 switch (vex.length)
17244 {
17245 case 128:
17246 switch (bytemode)
17247 {
17248 case vex_mode:
17249 case vex128_mode:
17250 case vex_vsib_q_w_dq_mode:
17251 case vex_vsib_q_w_d_mode:
17252 names = names_xmm;
17253 break;
17254 case dq_mode:
17255 if (rex & REX_W)
17256 names = names64;
17257 else
17258 names = names32;
17259 break;
17260 case mask_bd_mode:
17261 case mask_mode:
17262 if (reg > 0x7)
17263 {
17264 oappend ("(bad)");
17265 return;
17266 }
17267 names = names_mask;
17268 break;
17269 default:
17270 abort ();
17271 return;
17272 }
17273 break;
17274 case 256:
17275 switch (bytemode)
17276 {
17277 case vex_mode:
17278 case vex256_mode:
17279 names = names_ymm;
17280 break;
17281 case vex_vsib_q_w_dq_mode:
17282 case vex_vsib_q_w_d_mode:
17283 names = vex.w ? names_ymm : names_xmm;
17284 break;
17285 case mask_bd_mode:
17286 case mask_mode:
17287 if (reg > 0x7)
17288 {
17289 oappend ("(bad)");
17290 return;
17291 }
17292 names = names_mask;
17293 break;
17294 default:
17295 /* See PR binutils/20893 for a reproducer. */
17296 oappend ("(bad)");
17297 return;
17298 }
17299 break;
17300 case 512:
17301 names = names_zmm;
17302 break;
17303 default:
17304 abort ();
17305 break;
17306 }
17307 oappend (names[reg]);
17308 }
17309
17310 /* Get the VEX immediate byte without moving codep. */
17311
17312 static unsigned char
17313 get_vex_imm8 (int sizeflag, int opnum)
17314 {
17315 int bytes_before_imm = 0;
17316
17317 if (modrm.mod != 3)
17318 {
17319 /* There are SIB/displacement bytes. */
17320 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
17321 {
17322 /* 32/64 bit address mode */
17323 int base = modrm.rm;
17324
17325 /* Check SIB byte. */
17326 if (base == 4)
17327 {
17328 FETCH_DATA (the_info, codep + 1);
17329 base = *codep & 7;
17330 /* When decoding the third source, don't increase
17331 bytes_before_imm as this has already been incremented
17332 by one in OP_E_memory while decoding the second
17333 source operand. */
17334 if (opnum == 0)
17335 bytes_before_imm++;
17336 }
17337
17338 /* Don't increase bytes_before_imm when decoding the third source,
17339 it has already been incremented by OP_E_memory while decoding
17340 the second source operand. */
17341 if (opnum == 0)
17342 {
17343 switch (modrm.mod)
17344 {
17345 case 0:
17346 /* When modrm.rm == 5 or modrm.rm == 4 and base in
17347 SIB == 5, there is a 4 byte displacement. */
17348 if (base != 5)
17349 /* No displacement. */
17350 break;
17351 /* Fall through. */
17352 case 2:
17353 /* 4 byte displacement. */
17354 bytes_before_imm += 4;
17355 break;
17356 case 1:
17357 /* 1 byte displacement. */
17358 bytes_before_imm++;
17359 break;
17360 }
17361 }
17362 }
17363 else
17364 {
17365 /* 16 bit address mode */
17366 /* Don't increase bytes_before_imm when decoding the third source,
17367 it has already been incremented by OP_E_memory while decoding
17368 the second source operand. */
17369 if (opnum == 0)
17370 {
17371 switch (modrm.mod)
17372 {
17373 case 0:
17374 /* When modrm.rm == 6, there is a 2 byte displacement. */
17375 if (modrm.rm != 6)
17376 /* No displacement. */
17377 break;
17378 /* Fall through. */
17379 case 2:
17380 /* 2 byte displacement. */
17381 bytes_before_imm += 2;
17382 break;
17383 case 1:
17384 /* 1 byte displacement: when decoding the third source,
17385 don't increase bytes_before_imm as this has already
17386 been incremented by one in OP_E_memory while decoding
17387 the second source operand. */
17388 if (opnum == 0)
17389 bytes_before_imm++;
17390
17391 break;
17392 }
17393 }
17394 }
17395 }
17396
17397 FETCH_DATA (the_info, codep + bytes_before_imm + 1);
17398 return codep [bytes_before_imm];
17399 }
17400
17401 static void
17402 OP_EX_VexReg (int bytemode, int sizeflag, int reg)
17403 {
17404 const char **names;
17405
17406 if (reg == -1 && modrm.mod != 3)
17407 {
17408 OP_E_memory (bytemode, sizeflag);
17409 return;
17410 }
17411 else
17412 {
17413 if (reg == -1)
17414 {
17415 reg = modrm.rm;
17416 USED_REX (REX_B);
17417 if (rex & REX_B)
17418 reg += 8;
17419 }
17420 if (address_mode != mode_64bit)
17421 reg &= 7;
17422 }
17423
17424 switch (vex.length)
17425 {
17426 case 128:
17427 names = names_xmm;
17428 break;
17429 case 256:
17430 names = names_ymm;
17431 break;
17432 default:
17433 abort ();
17434 }
17435 oappend (names[reg]);
17436 }
17437
17438 static void
17439 OP_EX_VexImmW (int bytemode, int sizeflag)
17440 {
17441 int reg = -1;
17442 static unsigned char vex_imm8;
17443
17444 if (vex_w_done == 0)
17445 {
17446 vex_w_done = 1;
17447
17448 /* Skip mod/rm byte. */
17449 MODRM_CHECK;
17450 codep++;
17451
17452 vex_imm8 = get_vex_imm8 (sizeflag, 0);
17453
17454 if (vex.w)
17455 reg = vex_imm8 >> 4;
17456
17457 OP_EX_VexReg (bytemode, sizeflag, reg);
17458 }
17459 else if (vex_w_done == 1)
17460 {
17461 vex_w_done = 2;
17462
17463 if (!vex.w)
17464 reg = vex_imm8 >> 4;
17465
17466 OP_EX_VexReg (bytemode, sizeflag, reg);
17467 }
17468 else
17469 {
17470 /* Output the imm8 directly. */
17471 scratchbuf[0] = '$';
17472 print_operand_value (scratchbuf + 1, 1, vex_imm8 & 0xf);
17473 oappend_maybe_intel (scratchbuf);
17474 scratchbuf[0] = '\0';
17475 codep++;
17476 }
17477 }
17478
17479 static void
17480 OP_Vex_2src (int bytemode, int sizeflag)
17481 {
17482 if (modrm.mod == 3)
17483 {
17484 int reg = modrm.rm;
17485 USED_REX (REX_B);
17486 if (rex & REX_B)
17487 reg += 8;
17488 oappend (names_xmm[reg]);
17489 }
17490 else
17491 {
17492 if (intel_syntax
17493 && (bytemode == v_mode || bytemode == v_swap_mode))
17494 {
17495 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
17496 used_prefixes |= (prefixes & PREFIX_DATA);
17497 }
17498 OP_E (bytemode, sizeflag);
17499 }
17500 }
17501
17502 static void
17503 OP_Vex_2src_1 (int bytemode, int sizeflag)
17504 {
17505 if (modrm.mod == 3)
17506 {
17507 /* Skip mod/rm byte. */
17508 MODRM_CHECK;
17509 codep++;
17510 }
17511
17512 if (vex.w)
17513 {
17514 unsigned int reg = vex.register_specifier;
17515
17516 if (address_mode != mode_64bit)
17517 reg &= 7;
17518 oappend (names_xmm[reg]);
17519 }
17520 else
17521 OP_Vex_2src (bytemode, sizeflag);
17522 }
17523
17524 static void
17525 OP_Vex_2src_2 (int bytemode, int sizeflag)
17526 {
17527 if (vex.w)
17528 OP_Vex_2src (bytemode, sizeflag);
17529 else
17530 {
17531 unsigned int reg = vex.register_specifier;
17532
17533 if (address_mode != mode_64bit)
17534 reg &= 7;
17535 oappend (names_xmm[reg]);
17536 }
17537 }
17538
17539 static void
17540 OP_EX_VexW (int bytemode, int sizeflag)
17541 {
17542 int reg = -1;
17543
17544 if (!vex_w_done)
17545 {
17546 /* Skip mod/rm byte. */
17547 MODRM_CHECK;
17548 codep++;
17549
17550 if (vex.w)
17551 reg = get_vex_imm8 (sizeflag, 0) >> 4;
17552 }
17553 else
17554 {
17555 if (!vex.w)
17556 reg = get_vex_imm8 (sizeflag, 1) >> 4;
17557 }
17558
17559 OP_EX_VexReg (bytemode, sizeflag, reg);
17560
17561 if (vex_w_done)
17562 codep++;
17563 vex_w_done = 1;
17564 }
17565
17566 static void
17567 OP_REG_VexI4 (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
17568 {
17569 int reg;
17570 const char **names;
17571
17572 FETCH_DATA (the_info, codep + 1);
17573 reg = *codep++;
17574
17575 if (bytemode != x_mode)
17576 abort ();
17577
17578 reg >>= 4;
17579 if (address_mode != mode_64bit)
17580 reg &= 7;
17581
17582 switch (vex.length)
17583 {
17584 case 128:
17585 names = names_xmm;
17586 break;
17587 case 256:
17588 names = names_ymm;
17589 break;
17590 default:
17591 abort ();
17592 }
17593 oappend (names[reg]);
17594 }
17595
17596 static void
17597 OP_XMM_VexW (int bytemode, int sizeflag)
17598 {
17599 /* Turn off the REX.W bit since it is used for swapping operands
17600 now. */
17601 rex &= ~REX_W;
17602 OP_XMM (bytemode, sizeflag);
17603 }
17604
17605 static void
17606 OP_EX_Vex (int bytemode, int sizeflag)
17607 {
17608 if (modrm.mod != 3)
17609 {
17610 if (vex.register_specifier != 0)
17611 BadOp ();
17612 need_vex_reg = 0;
17613 }
17614 OP_EX (bytemode, sizeflag);
17615 }
17616
17617 static void
17618 OP_XMM_Vex (int bytemode, int sizeflag)
17619 {
17620 if (modrm.mod != 3)
17621 {
17622 if (vex.register_specifier != 0)
17623 BadOp ();
17624 need_vex_reg = 0;
17625 }
17626 OP_XMM (bytemode, sizeflag);
17627 }
17628
17629 static void
17630 VZERO_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
17631 {
17632 switch (vex.length)
17633 {
17634 case 128:
17635 mnemonicendp = stpcpy (obuf, "vzeroupper");
17636 break;
17637 case 256:
17638 mnemonicendp = stpcpy (obuf, "vzeroall");
17639 break;
17640 default:
17641 abort ();
17642 }
17643 }
17644
17645 static struct op vex_cmp_op[] =
17646 {
17647 { STRING_COMMA_LEN ("eq") },
17648 { STRING_COMMA_LEN ("lt") },
17649 { STRING_COMMA_LEN ("le") },
17650 { STRING_COMMA_LEN ("unord") },
17651 { STRING_COMMA_LEN ("neq") },
17652 { STRING_COMMA_LEN ("nlt") },
17653 { STRING_COMMA_LEN ("nle") },
17654 { STRING_COMMA_LEN ("ord") },
17655 { STRING_COMMA_LEN ("eq_uq") },
17656 { STRING_COMMA_LEN ("nge") },
17657 { STRING_COMMA_LEN ("ngt") },
17658 { STRING_COMMA_LEN ("false") },
17659 { STRING_COMMA_LEN ("neq_oq") },
17660 { STRING_COMMA_LEN ("ge") },
17661 { STRING_COMMA_LEN ("gt") },
17662 { STRING_COMMA_LEN ("true") },
17663 { STRING_COMMA_LEN ("eq_os") },
17664 { STRING_COMMA_LEN ("lt_oq") },
17665 { STRING_COMMA_LEN ("le_oq") },
17666 { STRING_COMMA_LEN ("unord_s") },
17667 { STRING_COMMA_LEN ("neq_us") },
17668 { STRING_COMMA_LEN ("nlt_uq") },
17669 { STRING_COMMA_LEN ("nle_uq") },
17670 { STRING_COMMA_LEN ("ord_s") },
17671 { STRING_COMMA_LEN ("eq_us") },
17672 { STRING_COMMA_LEN ("nge_uq") },
17673 { STRING_COMMA_LEN ("ngt_uq") },
17674 { STRING_COMMA_LEN ("false_os") },
17675 { STRING_COMMA_LEN ("neq_os") },
17676 { STRING_COMMA_LEN ("ge_oq") },
17677 { STRING_COMMA_LEN ("gt_oq") },
17678 { STRING_COMMA_LEN ("true_us") },
17679 };
17680
17681 static void
17682 VCMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
17683 {
17684 unsigned int cmp_type;
17685
17686 FETCH_DATA (the_info, codep + 1);
17687 cmp_type = *codep++ & 0xff;
17688 if (cmp_type < ARRAY_SIZE (vex_cmp_op))
17689 {
17690 char suffix [3];
17691 char *p = mnemonicendp - 2;
17692 suffix[0] = p[0];
17693 suffix[1] = p[1];
17694 suffix[2] = '\0';
17695 sprintf (p, "%s%s", vex_cmp_op[cmp_type].name, suffix);
17696 mnemonicendp += vex_cmp_op[cmp_type].len;
17697 }
17698 else
17699 {
17700 /* We have a reserved extension byte. Output it directly. */
17701 scratchbuf[0] = '$';
17702 print_operand_value (scratchbuf + 1, 1, cmp_type);
17703 oappend_maybe_intel (scratchbuf);
17704 scratchbuf[0] = '\0';
17705 }
17706 }
17707
17708 static void
17709 VPCMP_Fixup (int bytemode ATTRIBUTE_UNUSED,
17710 int sizeflag ATTRIBUTE_UNUSED)
17711 {
17712 unsigned int cmp_type;
17713
17714 if (!vex.evex)
17715 abort ();
17716
17717 FETCH_DATA (the_info, codep + 1);
17718 cmp_type = *codep++ & 0xff;
17719 /* There are aliases for immediates 0, 1, 2, 4, 5, 6.
17720 If it's the case, print suffix, otherwise - print the immediate. */
17721 if (cmp_type < ARRAY_SIZE (simd_cmp_op)
17722 && cmp_type != 3
17723 && cmp_type != 7)
17724 {
17725 char suffix [3];
17726 char *p = mnemonicendp - 2;
17727
17728 /* vpcmp* can have both one- and two-lettered suffix. */
17729 if (p[0] == 'p')
17730 {
17731 p++;
17732 suffix[0] = p[0];
17733 suffix[1] = '\0';
17734 }
17735 else
17736 {
17737 suffix[0] = p[0];
17738 suffix[1] = p[1];
17739 suffix[2] = '\0';
17740 }
17741
17742 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
17743 mnemonicendp += simd_cmp_op[cmp_type].len;
17744 }
17745 else
17746 {
17747 /* We have a reserved extension byte. Output it directly. */
17748 scratchbuf[0] = '$';
17749 print_operand_value (scratchbuf + 1, 1, cmp_type);
17750 oappend_maybe_intel (scratchbuf);
17751 scratchbuf[0] = '\0';
17752 }
17753 }
17754
17755 static const struct op xop_cmp_op[] =
17756 {
17757 { STRING_COMMA_LEN ("lt") },
17758 { STRING_COMMA_LEN ("le") },
17759 { STRING_COMMA_LEN ("gt") },
17760 { STRING_COMMA_LEN ("ge") },
17761 { STRING_COMMA_LEN ("eq") },
17762 { STRING_COMMA_LEN ("neq") },
17763 { STRING_COMMA_LEN ("false") },
17764 { STRING_COMMA_LEN ("true") }
17765 };
17766
17767 static void
17768 VPCOM_Fixup (int bytemode ATTRIBUTE_UNUSED,
17769 int sizeflag ATTRIBUTE_UNUSED)
17770 {
17771 unsigned int cmp_type;
17772
17773 FETCH_DATA (the_info, codep + 1);
17774 cmp_type = *codep++ & 0xff;
17775 if (cmp_type < ARRAY_SIZE (xop_cmp_op))
17776 {
17777 char suffix[3];
17778 char *p = mnemonicendp - 2;
17779
17780 /* vpcom* can have both one- and two-lettered suffix. */
17781 if (p[0] == 'm')
17782 {
17783 p++;
17784 suffix[0] = p[0];
17785 suffix[1] = '\0';
17786 }
17787 else
17788 {
17789 suffix[0] = p[0];
17790 suffix[1] = p[1];
17791 suffix[2] = '\0';
17792 }
17793
17794 sprintf (p, "%s%s", xop_cmp_op[cmp_type].name, suffix);
17795 mnemonicendp += xop_cmp_op[cmp_type].len;
17796 }
17797 else
17798 {
17799 /* We have a reserved extension byte. Output it directly. */
17800 scratchbuf[0] = '$';
17801 print_operand_value (scratchbuf + 1, 1, cmp_type);
17802 oappend_maybe_intel (scratchbuf);
17803 scratchbuf[0] = '\0';
17804 }
17805 }
17806
17807 static const struct op pclmul_op[] =
17808 {
17809 { STRING_COMMA_LEN ("lql") },
17810 { STRING_COMMA_LEN ("hql") },
17811 { STRING_COMMA_LEN ("lqh") },
17812 { STRING_COMMA_LEN ("hqh") }
17813 };
17814
17815 static void
17816 PCLMUL_Fixup (int bytemode ATTRIBUTE_UNUSED,
17817 int sizeflag ATTRIBUTE_UNUSED)
17818 {
17819 unsigned int pclmul_type;
17820
17821 FETCH_DATA (the_info, codep + 1);
17822 pclmul_type = *codep++ & 0xff;
17823 switch (pclmul_type)
17824 {
17825 case 0x10:
17826 pclmul_type = 2;
17827 break;
17828 case 0x11:
17829 pclmul_type = 3;
17830 break;
17831 default:
17832 break;
17833 }
17834 if (pclmul_type < ARRAY_SIZE (pclmul_op))
17835 {
17836 char suffix [4];
17837 char *p = mnemonicendp - 3;
17838 suffix[0] = p[0];
17839 suffix[1] = p[1];
17840 suffix[2] = p[2];
17841 suffix[3] = '\0';
17842 sprintf (p, "%s%s", pclmul_op[pclmul_type].name, suffix);
17843 mnemonicendp += pclmul_op[pclmul_type].len;
17844 }
17845 else
17846 {
17847 /* We have a reserved extension byte. Output it directly. */
17848 scratchbuf[0] = '$';
17849 print_operand_value (scratchbuf + 1, 1, pclmul_type);
17850 oappend_maybe_intel (scratchbuf);
17851 scratchbuf[0] = '\0';
17852 }
17853 }
17854
17855 static void
17856 MOVBE_Fixup (int bytemode, int sizeflag)
17857 {
17858 /* Add proper suffix to "movbe". */
17859 char *p = mnemonicendp;
17860
17861 switch (bytemode)
17862 {
17863 case v_mode:
17864 if (intel_syntax)
17865 goto skip;
17866
17867 USED_REX (REX_W);
17868 if (sizeflag & SUFFIX_ALWAYS)
17869 {
17870 if (rex & REX_W)
17871 *p++ = 'q';
17872 else
17873 {
17874 if (sizeflag & DFLAG)
17875 *p++ = 'l';
17876 else
17877 *p++ = 'w';
17878 used_prefixes |= (prefixes & PREFIX_DATA);
17879 }
17880 }
17881 break;
17882 default:
17883 oappend (INTERNAL_DISASSEMBLER_ERROR);
17884 break;
17885 }
17886 mnemonicendp = p;
17887 *p = '\0';
17888
17889 skip:
17890 OP_M (bytemode, sizeflag);
17891 }
17892
17893 static void
17894 OP_LWPCB_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
17895 {
17896 int reg;
17897 const char **names;
17898
17899 /* Skip mod/rm byte. */
17900 MODRM_CHECK;
17901 codep++;
17902
17903 if (rex & REX_W)
17904 names = names64;
17905 else
17906 names = names32;
17907
17908 reg = modrm.rm;
17909 USED_REX (REX_B);
17910 if (rex & REX_B)
17911 reg += 8;
17912
17913 oappend (names[reg]);
17914 }
17915
17916 static void
17917 OP_LWP_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
17918 {
17919 const char **names;
17920 unsigned int reg = vex.register_specifier;
17921
17922 if (rex & REX_W)
17923 names = names64;
17924 else
17925 names = names32;
17926
17927 if (address_mode != mode_64bit)
17928 reg &= 7;
17929 oappend (names[reg]);
17930 }
17931
17932 static void
17933 OP_Mask (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
17934 {
17935 if (!vex.evex
17936 || (bytemode != mask_mode && bytemode != mask_bd_mode))
17937 abort ();
17938
17939 USED_REX (REX_R);
17940 if ((rex & REX_R) != 0 || !vex.r)
17941 {
17942 BadOp ();
17943 return;
17944 }
17945
17946 oappend (names_mask [modrm.reg]);
17947 }
17948
17949 static void
17950 OP_Rounding (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
17951 {
17952 if (!vex.evex
17953 || (bytemode != evex_rounding_mode
17954 && bytemode != evex_rounding_64_mode
17955 && bytemode != evex_sae_mode))
17956 abort ();
17957 if (modrm.mod == 3 && vex.b)
17958 switch (bytemode)
17959 {
17960 case evex_rounding_64_mode:
17961 if (address_mode != mode_64bit)
17962 {
17963 oappend ("(bad)");
17964 break;
17965 }
17966 /* Fall through. */
17967 case evex_rounding_mode:
17968 oappend (names_rounding[vex.ll]);
17969 break;
17970 case evex_sae_mode:
17971 oappend ("{sae}");
17972 break;
17973 default:
17974 break;
17975 }
17976 }
This page took 0.371878 seconds and 5 git commands to generate.