x86: adjust register names printed for MONITOR/MWAIT
[deliverable/binutils-gdb.git] / opcodes / i386-dis.c
CommitLineData
252b5132 1/* Print i386 instructions for GDB, the GNU debugger.
82704155 2 Copyright (C) 1988-2019 Free Software Foundation, Inc.
252b5132 3
9b201bb5 4 This file is part of the GNU opcodes library.
20f0a1fc 5
9b201bb5 6 This library is free software; you can redistribute it and/or modify
20f0a1fc 7 it under the terms of the GNU General Public License as published by
9b201bb5
NC
8 the Free Software Foundation; either version 3, or (at your option)
9 any later version.
20f0a1fc 10
9b201bb5
NC
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.
20f0a1fc
NC
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
9b201bb5
NC
18 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
19 MA 02110-1301, USA. */
20
20f0a1fc
NC
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. */
252b5132 34
252b5132 35#include "sysdep.h"
88c1242d 36#include "disassemble.h"
252b5132 37#include "opintl.h"
0b1cf022 38#include "opcode/i386.h"
85f10a01 39#include "libiberty.h"
252b5132
RH
40
41#include <setjmp.h>
42
26ca5450
AJ
43static int print_insn (bfd_vma, disassemble_info *);
44static void dofloat (int);
45static void OP_ST (int, int);
46static void OP_STi (int, int);
47static int putop (const char *, int);
48static void oappend (const char *);
49static void append_seg (void);
50static void OP_indirE (int, int);
51static void print_operand_value (char *, int, bfd_vma);
c0f3af97 52static void OP_E_register (int, int);
c1e679ec 53static void OP_E_memory (int, int);
5d669648 54static void print_displacement (char *, bfd_vma);
26ca5450
AJ
55static void OP_E (int, int);
56static void OP_G (int, int);
57static bfd_vma get64 (void);
58static bfd_signed_vma get32 (void);
59static bfd_signed_vma get32s (void);
60static int get16 (void);
61static void set_op (bfd_vma, int);
b844680a 62static void OP_Skip_MODRM (int, int);
26ca5450
AJ
63static void OP_REG (int, int);
64static void OP_IMREG (int, int);
65static void OP_I (int, int);
66static void OP_I64 (int, int);
67static void OP_sI (int, int);
68static void OP_J (int, int);
69static void OP_SEG (int, int);
70static void OP_DIR (int, int);
71static void OP_OFF (int, int);
72static void OP_OFF64 (int, int);
73static void ptr_reg (int, int);
74static void OP_ESreg (int, int);
75static void OP_DSreg (int, int);
76static void OP_C (int, int);
77static void OP_D (int, int);
78static void OP_T (int, int);
6f74c397 79static void OP_R (int, int);
26ca5450
AJ
80static void OP_MMX (int, int);
81static void OP_XMM (int, int);
82static void OP_EM (int, int);
83static void OP_EX (int, int);
4d9567e0
MM
84static void OP_EMC (int,int);
85static void OP_MXC (int,int);
26ca5450
AJ
86static void OP_MS (int, int);
87static void OP_XS (int, int);
cc0ec051 88static void OP_M (int, int);
c0f3af97
L
89static void OP_VEX (int, int);
90static void OP_EX_Vex (int, int);
922d8de8 91static void OP_EX_VexW (int, int);
a683cc34 92static void OP_EX_VexImmW (int, int);
c0f3af97 93static void OP_XMM_Vex (int, int);
922d8de8 94static void OP_XMM_VexW (int, int);
43234a1e 95static void OP_Rounding (int, int);
c0f3af97
L
96static void OP_REG_VexI4 (int, int);
97static void PCLMUL_Fixup (int, int);
c0f3af97 98static void VCMP_Fixup (int, int);
43234a1e 99static void VPCMP_Fixup (int, int);
be92cb14 100static void VPCOM_Fixup (int, int);
cc0ec051 101static void OP_0f07 (int, int);
b844680a
L
102static void OP_Monitor (int, int);
103static void OP_Mwait (int, int);
46e883c5
L
104static void NOP_Fixup1 (int, int);
105static void NOP_Fixup2 (int, int);
26ca5450 106static void OP_3DNowSuffix (int, int);
ad19981d 107static void CMP_Fixup (int, int);
26ca5450 108static void BadOp (void);
35c52694 109static void REP_Fixup (int, int);
7e8b059b 110static void BND_Fixup (int, int);
04ef582a 111static void NOTRACK_Fixup (int, int);
42164a71
L
112static void HLE_Fixup1 (int, int);
113static void HLE_Fixup2 (int, int);
114static void HLE_Fixup3 (int, int);
f5804c90 115static void CMPXCHG8B_Fixup (int, int);
42903f7f 116static void XMM_Fixup (int, int);
381d071f 117static void CRC32_Fixup (int, int);
eacc9c89 118static void FXSAVE_Fixup (int, int);
15c7c1d8 119static void PCMPESTR_Fixup (int, int);
f88c9eb0
SP
120static void OP_LWPCB_E (int, int);
121static void OP_LWP_E (int, int);
5dd85c99
SP
122static void OP_Vex_2src_1 (int, int);
123static void OP_Vex_2src_2 (int, int);
c1e679ec 124
f1f8f695 125static void MOVBE_Fixup (int, int);
252b5132 126
43234a1e
L
127static void OP_Mask (int, int);
128
6608db57 129struct dis_private {
252b5132
RH
130 /* Points to first byte not fetched. */
131 bfd_byte *max_fetched;
0b1cf022 132 bfd_byte the_buffer[MAX_MNEM_SIZE];
252b5132 133 bfd_vma insn_start;
e396998b 134 int orig_sizeflag;
8df14d78 135 OPCODES_SIGJMP_BUF bailout;
252b5132
RH
136};
137
cb712a9e
L
138enum address_mode
139{
140 mode_16bit,
141 mode_32bit,
142 mode_64bit
143};
144
145enum address_mode address_mode;
52b15da3 146
5076851f
ILT
147/* Flags for the prefixes for the current instruction. See below. */
148static int prefixes;
149
52b15da3
JH
150/* REX prefix the current instruction. See below. */
151static int rex;
152/* Bits of REX we've already used. */
153static int rex_used;
d869730d 154/* REX bits in original REX prefix ignored. */
c0f3af97 155static int rex_ignored;
52b15da3
JH
156/* Mark parts used in the REX prefix. When we are testing for
157 empty prefix (for 8bit register REX extension), just mask it
158 out. Otherwise test for REX bit is excuse for existence of REX
159 only in case value is nonzero. */
160#define USED_REX(value) \
161 { \
162 if (value) \
161a04f6
L
163 { \
164 if ((rex & value)) \
165 rex_used |= (value) | REX_OPCODE; \
166 } \
52b15da3 167 else \
161a04f6 168 rex_used |= REX_OPCODE; \
52b15da3
JH
169 }
170
7d421014
ILT
171/* Flags for prefixes which we somehow handled when printing the
172 current instruction. */
173static int used_prefixes;
174
5076851f
ILT
175/* Flags stored in PREFIXES. */
176#define PREFIX_REPZ 1
177#define PREFIX_REPNZ 2
178#define PREFIX_LOCK 4
179#define PREFIX_CS 8
180#define PREFIX_SS 0x10
181#define PREFIX_DS 0x20
182#define PREFIX_ES 0x40
183#define PREFIX_FS 0x80
184#define PREFIX_GS 0x100
185#define PREFIX_DATA 0x200
186#define PREFIX_ADDR 0x400
187#define PREFIX_FWAIT 0x800
188
252b5132
RH
189/* Make sure that bytes from INFO->PRIVATE_DATA->BUFFER (inclusive)
190 to ADDR (exclusive) are valid. Returns 1 for success, longjmps
191 on error. */
192#define FETCH_DATA(info, addr) \
6608db57 193 ((addr) <= ((struct dis_private *) (info->private_data))->max_fetched \
252b5132
RH
194 ? 1 : fetch_data ((info), (addr)))
195
196static int
26ca5450 197fetch_data (struct disassemble_info *info, bfd_byte *addr)
252b5132
RH
198{
199 int status;
6608db57 200 struct dis_private *priv = (struct dis_private *) info->private_data;
252b5132
RH
201 bfd_vma start = priv->insn_start + (priv->max_fetched - priv->the_buffer);
202
0b1cf022 203 if (addr <= priv->the_buffer + MAX_MNEM_SIZE)
272c9217
JB
204 status = (*info->read_memory_func) (start,
205 priv->max_fetched,
206 addr - priv->max_fetched,
207 info);
208 else
209 status = -1;
252b5132
RH
210 if (status != 0)
211 {
7d421014 212 /* If we did manage to read at least one byte, then
db6eb5be
AM
213 print_insn_i386 will do something sensible. Otherwise, print
214 an error. We do that here because this is where we know
215 STATUS. */
7d421014 216 if (priv->max_fetched == priv->the_buffer)
5076851f 217 (*info->memory_error_func) (status, start, info);
8df14d78 218 OPCODES_SIGLONGJMP (priv->bailout, 1);
252b5132
RH
219 }
220 else
221 priv->max_fetched = addr;
222 return 1;
223}
224
bf890a93 225/* Possible values for prefix requirement. */
507bd325
L
226#define PREFIX_IGNORED_SHIFT 16
227#define PREFIX_IGNORED_REPZ (PREFIX_REPZ << PREFIX_IGNORED_SHIFT)
228#define PREFIX_IGNORED_REPNZ (PREFIX_REPNZ << PREFIX_IGNORED_SHIFT)
229#define PREFIX_IGNORED_DATA (PREFIX_DATA << PREFIX_IGNORED_SHIFT)
230#define PREFIX_IGNORED_ADDR (PREFIX_ADDR << PREFIX_IGNORED_SHIFT)
231#define PREFIX_IGNORED_LOCK (PREFIX_LOCK << PREFIX_IGNORED_SHIFT)
232
233/* Opcode prefixes. */
234#define PREFIX_OPCODE (PREFIX_REPZ \
235 | PREFIX_REPNZ \
236 | PREFIX_DATA)
237
238/* Prefixes ignored. */
239#define PREFIX_IGNORED (PREFIX_IGNORED_REPZ \
240 | PREFIX_IGNORED_REPNZ \
241 | PREFIX_IGNORED_DATA)
bf890a93 242
ce518a5f 243#define XX { NULL, 0 }
507bd325 244#define Bad_Opcode NULL, { { NULL, 0 } }, 0
ce518a5f
L
245
246#define Eb { OP_E, b_mode }
7e8b059b 247#define Ebnd { OP_E, bnd_mode }
b6169b20 248#define EbS { OP_E, b_swap_mode }
9f79e886 249#define EbndS { OP_E, bnd_swap_mode }
ce518a5f 250#define Ev { OP_E, v_mode }
de89d0a3 251#define Eva { OP_E, va_mode }
7e8b059b 252#define Ev_bnd { OP_E, v_bnd_mode }
b6169b20 253#define EvS { OP_E, v_swap_mode }
ce518a5f
L
254#define Ed { OP_E, d_mode }
255#define Edq { OP_E, dq_mode }
256#define Edqw { OP_E, dqw_mode }
42903f7f 257#define Edqb { OP_E, dqb_mode }
1ba585e8
IT
258#define Edb { OP_E, db_mode }
259#define Edw { OP_E, dw_mode }
42903f7f 260#define Edqd { OP_E, dqd_mode }
09335d05 261#define Eq { OP_E, q_mode }
07f5af7d 262#define indirEv { OP_indirE, indir_v_mode }
ce518a5f
L
263#define indirEp { OP_indirE, f_mode }
264#define stackEv { OP_E, stack_v_mode }
265#define Em { OP_E, m_mode }
266#define Ew { OP_E, w_mode }
267#define M { OP_M, 0 } /* lea, lgdt, etc. */
34b772a6 268#define Ma { OP_M, a_mode }
b844680a 269#define Mb { OP_M, b_mode }
d9a5e5e5 270#define Md { OP_M, d_mode }
f1f8f695 271#define Mo { OP_M, o_mode }
ce518a5f
L
272#define Mp { OP_M, f_mode } /* 32 or 48 bit memory operand for LDS, LES etc */
273#define Mq { OP_M, q_mode }
d276ec69 274#define Mv_bnd { OP_M, v_bndmk_mode }
4ee52178 275#define Mx { OP_M, x_mode }
c0f3af97 276#define Mxmm { OP_M, xmm_mode }
ce518a5f 277#define Gb { OP_G, b_mode }
7e8b059b 278#define Gbnd { OP_G, bnd_mode }
ce518a5f
L
279#define Gv { OP_G, v_mode }
280#define Gd { OP_G, d_mode }
281#define Gdq { OP_G, dq_mode }
282#define Gm { OP_G, m_mode }
c0a30a9f 283#define Gva { OP_G, va_mode }
ce518a5f 284#define Gw { OP_G, w_mode }
6f74c397 285#define Rd { OP_R, d_mode }
43234a1e 286#define Rdq { OP_R, dq_mode }
6f74c397 287#define Rm { OP_R, m_mode }
ce518a5f
L
288#define Ib { OP_I, b_mode }
289#define sIb { OP_sI, b_mode } /* sign extened byte */
e3949f17 290#define sIbT { OP_sI, b_T_mode } /* sign extened byte like 'T' */
ce518a5f 291#define Iv { OP_I, v_mode }
7bb15c6f 292#define sIv { OP_sI, v_mode }
ce518a5f 293#define Iv64 { OP_I64, v_mode }
c1dc7af5 294#define Id { OP_I, d_mode }
ce518a5f
L
295#define Iw { OP_I, w_mode }
296#define I1 { OP_I, const_1_mode }
297#define Jb { OP_J, b_mode }
298#define Jv { OP_J, v_mode }
299#define Cm { OP_C, m_mode }
300#define Dm { OP_D, m_mode }
301#define Td { OP_T, d_mode }
b844680a 302#define Skip_MODRM { OP_Skip_MODRM, 0 }
ce518a5f
L
303
304#define RMeAX { OP_REG, eAX_reg }
305#define RMeBX { OP_REG, eBX_reg }
306#define RMeCX { OP_REG, eCX_reg }
307#define RMeDX { OP_REG, eDX_reg }
308#define RMeSP { OP_REG, eSP_reg }
309#define RMeBP { OP_REG, eBP_reg }
310#define RMeSI { OP_REG, eSI_reg }
311#define RMeDI { OP_REG, eDI_reg }
312#define RMrAX { OP_REG, rAX_reg }
313#define RMrBX { OP_REG, rBX_reg }
314#define RMrCX { OP_REG, rCX_reg }
315#define RMrDX { OP_REG, rDX_reg }
316#define RMrSP { OP_REG, rSP_reg }
317#define RMrBP { OP_REG, rBP_reg }
318#define RMrSI { OP_REG, rSI_reg }
319#define RMrDI { OP_REG, rDI_reg }
320#define RMAL { OP_REG, al_reg }
ce518a5f
L
321#define RMCL { OP_REG, cl_reg }
322#define RMDL { OP_REG, dl_reg }
323#define RMBL { OP_REG, bl_reg }
324#define RMAH { OP_REG, ah_reg }
325#define RMCH { OP_REG, ch_reg }
326#define RMDH { OP_REG, dh_reg }
327#define RMBH { OP_REG, bh_reg }
328#define RMAX { OP_REG, ax_reg }
329#define RMDX { OP_REG, dx_reg }
330
331#define eAX { OP_IMREG, eAX_reg }
332#define eBX { OP_IMREG, eBX_reg }
333#define eCX { OP_IMREG, eCX_reg }
334#define eDX { OP_IMREG, eDX_reg }
335#define eSP { OP_IMREG, eSP_reg }
336#define eBP { OP_IMREG, eBP_reg }
337#define eSI { OP_IMREG, eSI_reg }
338#define eDI { OP_IMREG, eDI_reg }
339#define AL { OP_IMREG, al_reg }
340#define CL { OP_IMREG, cl_reg }
341#define DL { OP_IMREG, dl_reg }
342#define BL { OP_IMREG, bl_reg }
343#define AH { OP_IMREG, ah_reg }
344#define CH { OP_IMREG, ch_reg }
345#define DH { OP_IMREG, dh_reg }
346#define BH { OP_IMREG, bh_reg }
347#define AX { OP_IMREG, ax_reg }
348#define DX { OP_IMREG, dx_reg }
349#define zAX { OP_IMREG, z_mode_ax_reg }
350#define indirDX { OP_IMREG, indir_dx_reg }
351
352#define Sw { OP_SEG, w_mode }
353#define Sv { OP_SEG, v_mode }
354#define Ap { OP_DIR, 0 }
355#define Ob { OP_OFF64, b_mode }
356#define Ov { OP_OFF64, v_mode }
357#define Xb { OP_DSreg, eSI_reg }
358#define Xv { OP_DSreg, eSI_reg }
359#define Xz { OP_DSreg, eSI_reg }
360#define Yb { OP_ESreg, eDI_reg }
361#define Yv { OP_ESreg, eDI_reg }
362#define DSBX { OP_DSreg, eBX_reg }
363
364#define es { OP_REG, es_reg }
365#define ss { OP_REG, ss_reg }
366#define cs { OP_REG, cs_reg }
367#define ds { OP_REG, ds_reg }
368#define fs { OP_REG, fs_reg }
369#define gs { OP_REG, gs_reg }
370
371#define MX { OP_MMX, 0 }
372#define XM { OP_XMM, 0 }
539f890d 373#define XMScalar { OP_XMM, scalar_mode }
6c30d220 374#define XMGatherQ { OP_XMM, vex_vsib_q_w_dq_mode }
c0f3af97 375#define XMM { OP_XMM, xmm_mode }
43234a1e 376#define XMxmmq { OP_XMM, xmmq_mode }
ce518a5f 377#define EM { OP_EM, v_mode }
b6169b20 378#define EMS { OP_EM, v_swap_mode }
09a2c6cf 379#define EMd { OP_EM, d_mode }
14051056 380#define EMx { OP_EM, x_mode }
53467f57 381#define EXbScalar { OP_EX, b_scalar_mode }
8976381e 382#define EXw { OP_EX, w_mode }
53467f57 383#define EXwScalar { OP_EX, w_scalar_mode }
09a2c6cf 384#define EXd { OP_EX, d_mode }
539f890d 385#define EXdScalar { OP_EX, d_scalar_mode }
fa99fab2 386#define EXdS { OP_EX, d_swap_mode }
09a2c6cf 387#define EXq { OP_EX, q_mode }
539f890d
L
388#define EXqScalar { OP_EX, q_scalar_mode }
389#define EXqScalarS { OP_EX, q_scalar_swap_mode }
b6169b20 390#define EXqS { OP_EX, q_swap_mode }
09a2c6cf 391#define EXx { OP_EX, x_mode }
b6169b20 392#define EXxS { OP_EX, x_swap_mode }
c0f3af97 393#define EXxmm { OP_EX, xmm_mode }
43234a1e 394#define EXymm { OP_EX, ymm_mode }
c0f3af97 395#define EXxmmq { OP_EX, xmmq_mode }
43234a1e 396#define EXEvexHalfBcstXmmq { OP_EX, evex_half_bcst_xmmq_mode }
6c30d220
L
397#define EXxmm_mb { OP_EX, xmm_mb_mode }
398#define EXxmm_mw { OP_EX, xmm_mw_mode }
399#define EXxmm_md { OP_EX, xmm_md_mode }
400#define EXxmm_mq { OP_EX, xmm_mq_mode }
43234a1e 401#define EXxmm_mdq { OP_EX, xmm_mdq_mode }
6c30d220
L
402#define EXxmmdw { OP_EX, xmmdw_mode }
403#define EXxmmqd { OP_EX, xmmqd_mode }
c0f3af97 404#define EXymmq { OP_EX, ymmq_mode }
0bfee649 405#define EXVexWdq { OP_EX, vex_w_dq_mode }
1c480963 406#define EXVexWdqScalar { OP_EX, vex_scalar_w_dq_mode }
43234a1e
L
407#define EXEvexXGscat { OP_EX, evex_x_gscat_mode }
408#define EXEvexXNoBcst { OP_EX, evex_x_nobcst_mode }
ce518a5f
L
409#define MS { OP_MS, v_mode }
410#define XS { OP_XS, v_mode }
09335d05 411#define EMCq { OP_EMC, q_mode }
ce518a5f 412#define MXC { OP_MXC, 0 }
ce518a5f 413#define OPSUF { OP_3DNowSuffix, 0 }
ad19981d 414#define CMP { CMP_Fixup, 0 }
42903f7f 415#define XMM0 { XMM_Fixup, 0 }
eacc9c89 416#define FXSAVE { FXSAVE_Fixup, 0 }
5dd85c99
SP
417#define Vex_2src_1 { OP_Vex_2src_1, 0 }
418#define Vex_2src_2 { OP_Vex_2src_2, 0 }
252b5132 419
c0f3af97 420#define Vex { OP_VEX, vex_mode }
539f890d 421#define VexScalar { OP_VEX, vex_scalar_mode }
6c30d220 422#define VexGatherQ { OP_VEX, vex_vsib_q_w_dq_mode }
c0f3af97
L
423#define Vex128 { OP_VEX, vex128_mode }
424#define Vex256 { OP_VEX, vex256_mode }
cb21baef 425#define VexGdq { OP_VEX, dq_mode }
539f890d 426#define EXdVexScalarS { OP_EX_Vex, d_scalar_swap_mode }
539f890d 427#define EXqVexScalarS { OP_EX_Vex, q_scalar_swap_mode }
922d8de8
DR
428#define EXVexW { OP_EX_VexW, x_mode }
429#define EXdVexW { OP_EX_VexW, d_mode }
430#define EXqVexW { OP_EX_VexW, q_mode }
a683cc34 431#define EXVexImmW { OP_EX_VexImmW, x_mode }
539f890d 432#define XMVexScalar { OP_XMM_Vex, scalar_mode }
922d8de8 433#define XMVexW { OP_XMM_VexW, 0 }
c0f3af97
L
434#define XMVexI4 { OP_REG_VexI4, x_mode }
435#define PCLMUL { PCLMUL_Fixup, 0 }
c0f3af97 436#define VCMP { VCMP_Fixup, 0 }
43234a1e 437#define VPCMP { VPCMP_Fixup, 0 }
be92cb14 438#define VPCOM { VPCOM_Fixup, 0 }
43234a1e
L
439
440#define EXxEVexR { OP_Rounding, evex_rounding_mode }
70df6fc9 441#define EXxEVexR64 { OP_Rounding, evex_rounding_64_mode }
43234a1e
L
442#define EXxEVexS { OP_Rounding, evex_sae_mode }
443
444#define XMask { OP_Mask, mask_mode }
445#define MaskG { OP_G, mask_mode }
446#define MaskE { OP_E, mask_mode }
1ba585e8 447#define MaskBDE { OP_E, mask_bd_mode }
43234a1e
L
448#define MaskR { OP_R, mask_mode }
449#define MaskVex { OP_VEX, mask_mode }
c0f3af97 450
6c30d220 451#define MVexVSIBDWpX { OP_M, vex_vsib_d_w_dq_mode }
5fc35d96 452#define MVexVSIBDQWpX { OP_M, vex_vsib_d_w_d_mode }
6c30d220 453#define MVexVSIBQWpX { OP_M, vex_vsib_q_w_dq_mode }
5fc35d96 454#define MVexVSIBQDWpX { OP_M, vex_vsib_q_w_d_mode }
6c30d220 455
35c52694 456/* Used handle "rep" prefix for string instructions. */
ce518a5f
L
457#define Xbr { REP_Fixup, eSI_reg }
458#define Xvr { REP_Fixup, eSI_reg }
459#define Ybr { REP_Fixup, eDI_reg }
460#define Yvr { REP_Fixup, eDI_reg }
461#define Yzr { REP_Fixup, eDI_reg }
462#define indirDXr { REP_Fixup, indir_dx_reg }
463#define ALr { REP_Fixup, al_reg }
464#define eAXr { REP_Fixup, eAX_reg }
465
42164a71
L
466/* Used handle HLE prefix for lockable instructions. */
467#define Ebh1 { HLE_Fixup1, b_mode }
468#define Evh1 { HLE_Fixup1, v_mode }
469#define Ebh2 { HLE_Fixup2, b_mode }
470#define Evh2 { HLE_Fixup2, v_mode }
471#define Ebh3 { HLE_Fixup3, b_mode }
472#define Evh3 { HLE_Fixup3, v_mode }
473
7e8b059b 474#define BND { BND_Fixup, 0 }
04ef582a 475#define NOTRACK { NOTRACK_Fixup, 0 }
7e8b059b 476
ce518a5f
L
477#define cond_jump_flag { NULL, cond_jump_mode }
478#define loop_jcxz_flag { NULL, loop_jcxz_mode }
3ffd33cf 479
252b5132 480/* bits in sizeflag */
252b5132 481#define SUFFIX_ALWAYS 4
252b5132
RH
482#define AFLAG 2
483#define DFLAG 1
484
51e7da1b
L
485enum
486{
487 /* byte operand */
488 b_mode = 1,
489 /* byte operand with operand swapped */
3873ba12 490 b_swap_mode,
e3949f17
L
491 /* byte operand, sign extend like 'T' suffix */
492 b_T_mode,
51e7da1b 493 /* operand size depends on prefixes */
3873ba12 494 v_mode,
51e7da1b 495 /* operand size depends on prefixes with operand swapped */
3873ba12 496 v_swap_mode,
de89d0a3
IT
497 /* operand size depends on address prefix */
498 va_mode,
51e7da1b 499 /* word operand */
3873ba12 500 w_mode,
51e7da1b 501 /* double word operand */
3873ba12 502 d_mode,
51e7da1b 503 /* double word operand with operand swapped */
3873ba12 504 d_swap_mode,
51e7da1b 505 /* quad word operand */
3873ba12 506 q_mode,
51e7da1b 507 /* quad word operand with operand swapped */
3873ba12 508 q_swap_mode,
51e7da1b 509 /* ten-byte operand */
3873ba12 510 t_mode,
43234a1e
L
511 /* 16-byte XMM, 32-byte YMM or 64-byte ZMM operand. In EVEX with
512 broadcast enabled. */
3873ba12 513 x_mode,
43234a1e
L
514 /* Similar to x_mode, but with different EVEX mem shifts. */
515 evex_x_gscat_mode,
516 /* Similar to x_mode, but with disabled broadcast. */
517 evex_x_nobcst_mode,
518 /* Similar to x_mode, but with operands swapped and disabled broadcast
519 in EVEX. */
3873ba12 520 x_swap_mode,
51e7da1b 521 /* 16-byte XMM operand */
3873ba12 522 xmm_mode,
43234a1e
L
523 /* XMM, XMM or YMM register operand, or quad word, xmmword or ymmword
524 memory operand (depending on vector length). Broadcast isn't
525 allowed. */
3873ba12 526 xmmq_mode,
43234a1e
L
527 /* Same as xmmq_mode, but broadcast is allowed. */
528 evex_half_bcst_xmmq_mode,
6c30d220
L
529 /* XMM register or byte memory operand */
530 xmm_mb_mode,
531 /* XMM register or word memory operand */
532 xmm_mw_mode,
533 /* XMM register or double word memory operand */
534 xmm_md_mode,
535 /* XMM register or quad word memory operand */
536 xmm_mq_mode,
43234a1e
L
537 /* XMM register or double/quad word memory operand, depending on
538 VEX.W. */
539 xmm_mdq_mode,
540 /* 16-byte XMM, word, double word or quad word operand. */
6c30d220 541 xmmdw_mode,
43234a1e 542 /* 16-byte XMM, double word, quad word operand or xmm word operand. */
6c30d220 543 xmmqd_mode,
43234a1e
L
544 /* 32-byte YMM operand */
545 ymm_mode,
546 /* quad word, ymmword or zmmword memory operand. */
3873ba12 547 ymmq_mode,
6c30d220
L
548 /* 32-byte YMM or 16-byte word operand */
549 ymmxmm_mode,
51e7da1b 550 /* d_mode in 32bit, q_mode in 64bit mode. */
3873ba12 551 m_mode,
51e7da1b 552 /* pair of v_mode operands */
3873ba12
L
553 a_mode,
554 cond_jump_mode,
555 loop_jcxz_mode,
7e8b059b 556 v_bnd_mode,
d276ec69
JB
557 /* like v_bnd_mode in 32bit, no RIP-rel in 64bit mode. */
558 v_bndmk_mode,
51e7da1b 559 /* operand size depends on REX prefixes. */
3873ba12 560 dq_mode,
51e7da1b 561 /* registers like dq_mode, memory like w_mode. */
3873ba12 562 dqw_mode,
9f79e886 563 /* bounds operand */
7e8b059b 564 bnd_mode,
9f79e886
JB
565 /* bounds operand with operand swapped */
566 bnd_swap_mode,
51e7da1b 567 /* 4- or 6-byte pointer operand */
3873ba12
L
568 f_mode,
569 const_1_mode,
07f5af7d
L
570 /* v_mode for indirect branch opcodes. */
571 indir_v_mode,
51e7da1b 572 /* v_mode for stack-related opcodes. */
3873ba12 573 stack_v_mode,
51e7da1b 574 /* non-quad operand size depends on prefixes */
3873ba12 575 z_mode,
51e7da1b 576 /* 16-byte operand */
3873ba12 577 o_mode,
51e7da1b 578 /* registers like dq_mode, memory like b_mode. */
3873ba12 579 dqb_mode,
1ba585e8
IT
580 /* registers like d_mode, memory like b_mode. */
581 db_mode,
582 /* registers like d_mode, memory like w_mode. */
583 dw_mode,
51e7da1b 584 /* registers like dq_mode, memory like d_mode. */
3873ba12 585 dqd_mode,
51e7da1b 586 /* normal vex mode */
3873ba12 587 vex_mode,
51e7da1b 588 /* 128bit vex mode */
3873ba12 589 vex128_mode,
51e7da1b 590 /* 256bit vex mode */
3873ba12 591 vex256_mode,
51e7da1b 592 /* operand size depends on the VEX.W bit. */
3873ba12 593 vex_w_dq_mode,
d55ee72f 594
6c30d220
L
595 /* Similar to vex_w_dq_mode, with VSIB dword indices. */
596 vex_vsib_d_w_dq_mode,
5fc35d96
IT
597 /* Similar to vex_vsib_d_w_dq_mode, with smaller memory. */
598 vex_vsib_d_w_d_mode,
6c30d220
L
599 /* Similar to vex_w_dq_mode, with VSIB qword indices. */
600 vex_vsib_q_w_dq_mode,
5fc35d96
IT
601 /* Similar to vex_vsib_q_w_dq_mode, with smaller memory. */
602 vex_vsib_q_w_d_mode,
6c30d220 603
539f890d
L
604 /* scalar, ignore vector length. */
605 scalar_mode,
53467f57
IT
606 /* like b_mode, ignore vector length. */
607 b_scalar_mode,
608 /* like w_mode, ignore vector length. */
609 w_scalar_mode,
539f890d
L
610 /* like d_mode, ignore vector length. */
611 d_scalar_mode,
612 /* like d_swap_mode, ignore vector length. */
613 d_scalar_swap_mode,
614 /* like q_mode, ignore vector length. */
615 q_scalar_mode,
616 /* like q_swap_mode, ignore vector length. */
617 q_scalar_swap_mode,
618 /* like vex_mode, ignore vector length. */
619 vex_scalar_mode,
1c480963
L
620 /* like vex_w_dq_mode, ignore vector length. */
621 vex_scalar_w_dq_mode,
539f890d 622
43234a1e
L
623 /* Static rounding. */
624 evex_rounding_mode,
70df6fc9
L
625 /* Static rounding, 64-bit mode only. */
626 evex_rounding_64_mode,
43234a1e
L
627 /* Supress all exceptions. */
628 evex_sae_mode,
629
630 /* Mask register operand. */
631 mask_mode,
1ba585e8
IT
632 /* Mask register operand. */
633 mask_bd_mode,
43234a1e 634
3873ba12
L
635 es_reg,
636 cs_reg,
637 ss_reg,
638 ds_reg,
639 fs_reg,
640 gs_reg,
d55ee72f 641
3873ba12
L
642 eAX_reg,
643 eCX_reg,
644 eDX_reg,
645 eBX_reg,
646 eSP_reg,
647 eBP_reg,
648 eSI_reg,
649 eDI_reg,
d55ee72f 650
3873ba12
L
651 al_reg,
652 cl_reg,
653 dl_reg,
654 bl_reg,
655 ah_reg,
656 ch_reg,
657 dh_reg,
658 bh_reg,
d55ee72f 659
3873ba12
L
660 ax_reg,
661 cx_reg,
662 dx_reg,
663 bx_reg,
664 sp_reg,
665 bp_reg,
666 si_reg,
667 di_reg,
d55ee72f 668
3873ba12
L
669 rAX_reg,
670 rCX_reg,
671 rDX_reg,
672 rBX_reg,
673 rSP_reg,
674 rBP_reg,
675 rSI_reg,
676 rDI_reg,
d55ee72f 677
3873ba12
L
678 z_mode_ax_reg,
679 indir_dx_reg
51e7da1b 680};
252b5132 681
51e7da1b
L
682enum
683{
684 FLOATCODE = 1,
3873ba12
L
685 USE_REG_TABLE,
686 USE_MOD_TABLE,
687 USE_RM_TABLE,
688 USE_PREFIX_TABLE,
689 USE_X86_64_TABLE,
690 USE_3BYTE_TABLE,
f88c9eb0 691 USE_XOP_8F_TABLE,
3873ba12
L
692 USE_VEX_C4_TABLE,
693 USE_VEX_C5_TABLE,
9e30b8e0 694 USE_VEX_LEN_TABLE,
43234a1e 695 USE_VEX_W_TABLE,
04e2a182
L
696 USE_EVEX_TABLE,
697 USE_EVEX_LEN_TABLE
51e7da1b 698};
6439fc28 699
bf890a93 700#define FLOAT NULL, { { NULL, FLOATCODE } }, 0
4efba78c 701
bf890a93
IT
702#define DIS386(T, I) NULL, { { NULL, (T)}, { NULL, (I) } }, 0
703#define DIS386_PREFIX(T, I, P) NULL, { { NULL, (T)}, { NULL, (I) } }, P
1ceb70f8
L
704#define REG_TABLE(I) DIS386 (USE_REG_TABLE, (I))
705#define MOD_TABLE(I) DIS386 (USE_MOD_TABLE, (I))
706#define RM_TABLE(I) DIS386 (USE_RM_TABLE, (I))
707#define PREFIX_TABLE(I) DIS386 (USE_PREFIX_TABLE, (I))
4e7d34a6
L
708#define X86_64_TABLE(I) DIS386 (USE_X86_64_TABLE, (I))
709#define THREE_BYTE_TABLE(I) DIS386 (USE_3BYTE_TABLE, (I))
bf890a93 710#define THREE_BYTE_TABLE_PREFIX(I, P) DIS386_PREFIX (USE_3BYTE_TABLE, (I), P)
f88c9eb0 711#define XOP_8F_TABLE(I) DIS386 (USE_XOP_8F_TABLE, (I))
c0f3af97
L
712#define VEX_C4_TABLE(I) DIS386 (USE_VEX_C4_TABLE, (I))
713#define VEX_C5_TABLE(I) DIS386 (USE_VEX_C5_TABLE, (I))
714#define VEX_LEN_TABLE(I) DIS386 (USE_VEX_LEN_TABLE, (I))
9e30b8e0 715#define VEX_W_TABLE(I) DIS386 (USE_VEX_W_TABLE, (I))
43234a1e 716#define EVEX_TABLE(I) DIS386 (USE_EVEX_TABLE, (I))
04e2a182 717#define EVEX_LEN_TABLE(I) DIS386 (USE_EVEX_LEN_TABLE, (I))
1ceb70f8 718
51e7da1b
L
719enum
720{
721 REG_80 = 0,
3873ba12 722 REG_81,
7148c369 723 REG_83,
3873ba12
L
724 REG_8F,
725 REG_C0,
726 REG_C1,
727 REG_C6,
728 REG_C7,
729 REG_D0,
730 REG_D1,
731 REG_D2,
732 REG_D3,
733 REG_F6,
734 REG_F7,
735 REG_FE,
736 REG_FF,
737 REG_0F00,
738 REG_0F01,
739 REG_0F0D,
740 REG_0F18,
f8687e93
JB
741 REG_0F1C_P_0_MOD_0,
742 REG_0F1E_P_1_MOD_3,
3873ba12
L
743 REG_0F71,
744 REG_0F72,
745 REG_0F73,
746 REG_0FA6,
747 REG_0FA7,
748 REG_0FAE,
749 REG_0FBA,
750 REG_0FC7,
592a252b
L
751 REG_VEX_0F71,
752 REG_VEX_0F72,
753 REG_VEX_0F73,
754 REG_VEX_0FAE,
f12dc422 755 REG_VEX_0F38F3,
f88c9eb0 756 REG_XOP_LWPCB,
2a2a0f38
QN
757 REG_XOP_LWP,
758 REG_XOP_TBM_01,
43234a1e
L
759 REG_XOP_TBM_02,
760
1ba585e8 761 REG_EVEX_0F71,
43234a1e
L
762 REG_EVEX_0F72,
763 REG_EVEX_0F73,
764 REG_EVEX_0F38C6,
765 REG_EVEX_0F38C7
51e7da1b 766};
1ceb70f8 767
51e7da1b
L
768enum
769{
770 MOD_8D = 0,
42164a71
L
771 MOD_C6_REG_7,
772 MOD_C7_REG_7,
4a357820
MZ
773 MOD_FF_REG_3,
774 MOD_FF_REG_5,
3873ba12
L
775 MOD_0F01_REG_0,
776 MOD_0F01_REG_1,
777 MOD_0F01_REG_2,
778 MOD_0F01_REG_3,
8eab4136 779 MOD_0F01_REG_5,
3873ba12
L
780 MOD_0F01_REG_7,
781 MOD_0F12_PREFIX_0,
782 MOD_0F13,
783 MOD_0F16_PREFIX_0,
784 MOD_0F17,
785 MOD_0F18_REG_0,
786 MOD_0F18_REG_1,
787 MOD_0F18_REG_2,
788 MOD_0F18_REG_3,
d7189fa5
RM
789 MOD_0F18_REG_4,
790 MOD_0F18_REG_5,
791 MOD_0F18_REG_6,
792 MOD_0F18_REG_7,
7e8b059b
L
793 MOD_0F1A_PREFIX_0,
794 MOD_0F1B_PREFIX_0,
795 MOD_0F1B_PREFIX_1,
c48935d7 796 MOD_0F1C_PREFIX_0,
603555e5 797 MOD_0F1E_PREFIX_1,
3873ba12
L
798 MOD_0F24,
799 MOD_0F26,
800 MOD_0F2B_PREFIX_0,
801 MOD_0F2B_PREFIX_1,
802 MOD_0F2B_PREFIX_2,
803 MOD_0F2B_PREFIX_3,
804 MOD_0F51,
805 MOD_0F71_REG_2,
806 MOD_0F71_REG_4,
807 MOD_0F71_REG_6,
808 MOD_0F72_REG_2,
809 MOD_0F72_REG_4,
810 MOD_0F72_REG_6,
811 MOD_0F73_REG_2,
812 MOD_0F73_REG_3,
813 MOD_0F73_REG_6,
814 MOD_0F73_REG_7,
815 MOD_0FAE_REG_0,
816 MOD_0FAE_REG_1,
817 MOD_0FAE_REG_2,
818 MOD_0FAE_REG_3,
819 MOD_0FAE_REG_4,
820 MOD_0FAE_REG_5,
821 MOD_0FAE_REG_6,
822 MOD_0FAE_REG_7,
823 MOD_0FB2,
824 MOD_0FB4,
825 MOD_0FB5,
a8484f96 826 MOD_0FC3,
963f3586
IT
827 MOD_0FC7_REG_3,
828 MOD_0FC7_REG_4,
829 MOD_0FC7_REG_5,
3873ba12
L
830 MOD_0FC7_REG_6,
831 MOD_0FC7_REG_7,
832 MOD_0FD7,
833 MOD_0FE7_PREFIX_2,
834 MOD_0FF0_PREFIX_3,
835 MOD_0F382A_PREFIX_2,
603555e5
L
836 MOD_0F38F5_PREFIX_2,
837 MOD_0F38F6_PREFIX_0,
5d79adc4 838 MOD_0F38F8_PREFIX_1,
c0a30a9f 839 MOD_0F38F8_PREFIX_2,
5d79adc4 840 MOD_0F38F8_PREFIX_3,
c0a30a9f 841 MOD_0F38F9_PREFIX_0,
3873ba12
L
842 MOD_62_32BIT,
843 MOD_C4_32BIT,
844 MOD_C5_32BIT,
592a252b
L
845 MOD_VEX_0F12_PREFIX_0,
846 MOD_VEX_0F13,
847 MOD_VEX_0F16_PREFIX_0,
848 MOD_VEX_0F17,
849 MOD_VEX_0F2B,
ab4e4ed5
AF
850 MOD_VEX_W_0_0F41_P_0_LEN_1,
851 MOD_VEX_W_1_0F41_P_0_LEN_1,
852 MOD_VEX_W_0_0F41_P_2_LEN_1,
853 MOD_VEX_W_1_0F41_P_2_LEN_1,
854 MOD_VEX_W_0_0F42_P_0_LEN_1,
855 MOD_VEX_W_1_0F42_P_0_LEN_1,
856 MOD_VEX_W_0_0F42_P_2_LEN_1,
857 MOD_VEX_W_1_0F42_P_2_LEN_1,
858 MOD_VEX_W_0_0F44_P_0_LEN_1,
859 MOD_VEX_W_1_0F44_P_0_LEN_1,
860 MOD_VEX_W_0_0F44_P_2_LEN_1,
861 MOD_VEX_W_1_0F44_P_2_LEN_1,
862 MOD_VEX_W_0_0F45_P_0_LEN_1,
863 MOD_VEX_W_1_0F45_P_0_LEN_1,
864 MOD_VEX_W_0_0F45_P_2_LEN_1,
865 MOD_VEX_W_1_0F45_P_2_LEN_1,
866 MOD_VEX_W_0_0F46_P_0_LEN_1,
867 MOD_VEX_W_1_0F46_P_0_LEN_1,
868 MOD_VEX_W_0_0F46_P_2_LEN_1,
869 MOD_VEX_W_1_0F46_P_2_LEN_1,
870 MOD_VEX_W_0_0F47_P_0_LEN_1,
871 MOD_VEX_W_1_0F47_P_0_LEN_1,
872 MOD_VEX_W_0_0F47_P_2_LEN_1,
873 MOD_VEX_W_1_0F47_P_2_LEN_1,
874 MOD_VEX_W_0_0F4A_P_0_LEN_1,
875 MOD_VEX_W_1_0F4A_P_0_LEN_1,
876 MOD_VEX_W_0_0F4A_P_2_LEN_1,
877 MOD_VEX_W_1_0F4A_P_2_LEN_1,
878 MOD_VEX_W_0_0F4B_P_0_LEN_1,
879 MOD_VEX_W_1_0F4B_P_0_LEN_1,
880 MOD_VEX_W_0_0F4B_P_2_LEN_1,
592a252b
L
881 MOD_VEX_0F50,
882 MOD_VEX_0F71_REG_2,
883 MOD_VEX_0F71_REG_4,
884 MOD_VEX_0F71_REG_6,
885 MOD_VEX_0F72_REG_2,
886 MOD_VEX_0F72_REG_4,
887 MOD_VEX_0F72_REG_6,
888 MOD_VEX_0F73_REG_2,
889 MOD_VEX_0F73_REG_3,
890 MOD_VEX_0F73_REG_6,
891 MOD_VEX_0F73_REG_7,
ab4e4ed5
AF
892 MOD_VEX_W_0_0F91_P_0_LEN_0,
893 MOD_VEX_W_1_0F91_P_0_LEN_0,
894 MOD_VEX_W_0_0F91_P_2_LEN_0,
895 MOD_VEX_W_1_0F91_P_2_LEN_0,
896 MOD_VEX_W_0_0F92_P_0_LEN_0,
897 MOD_VEX_W_0_0F92_P_2_LEN_0,
58a211d2 898 MOD_VEX_0F92_P_3_LEN_0,
ab4e4ed5
AF
899 MOD_VEX_W_0_0F93_P_0_LEN_0,
900 MOD_VEX_W_0_0F93_P_2_LEN_0,
58a211d2 901 MOD_VEX_0F93_P_3_LEN_0,
ab4e4ed5
AF
902 MOD_VEX_W_0_0F98_P_0_LEN_0,
903 MOD_VEX_W_1_0F98_P_0_LEN_0,
904 MOD_VEX_W_0_0F98_P_2_LEN_0,
905 MOD_VEX_W_1_0F98_P_2_LEN_0,
906 MOD_VEX_W_0_0F99_P_0_LEN_0,
907 MOD_VEX_W_1_0F99_P_0_LEN_0,
908 MOD_VEX_W_0_0F99_P_2_LEN_0,
909 MOD_VEX_W_1_0F99_P_2_LEN_0,
592a252b
L
910 MOD_VEX_0FAE_REG_2,
911 MOD_VEX_0FAE_REG_3,
912 MOD_VEX_0FD7_PREFIX_2,
913 MOD_VEX_0FE7_PREFIX_2,
914 MOD_VEX_0FF0_PREFIX_3,
592a252b
L
915 MOD_VEX_0F381A_PREFIX_2,
916 MOD_VEX_0F382A_PREFIX_2,
917 MOD_VEX_0F382C_PREFIX_2,
918 MOD_VEX_0F382D_PREFIX_2,
919 MOD_VEX_0F382E_PREFIX_2,
6c30d220
L
920 MOD_VEX_0F382F_PREFIX_2,
921 MOD_VEX_0F385A_PREFIX_2,
922 MOD_VEX_0F388C_PREFIX_2,
923 MOD_VEX_0F388E_PREFIX_2,
ab4e4ed5
AF
924 MOD_VEX_W_0_0F3A30_P_2_LEN_0,
925 MOD_VEX_W_1_0F3A30_P_2_LEN_0,
926 MOD_VEX_W_0_0F3A31_P_2_LEN_0,
927 MOD_VEX_W_1_0F3A31_P_2_LEN_0,
928 MOD_VEX_W_0_0F3A32_P_2_LEN_0,
929 MOD_VEX_W_1_0F3A32_P_2_LEN_0,
930 MOD_VEX_W_0_0F3A33_P_2_LEN_0,
931 MOD_VEX_W_1_0F3A33_P_2_LEN_0,
43234a1e 932
43234a1e
L
933 MOD_EVEX_0F12_PREFIX_0,
934 MOD_EVEX_0F16_PREFIX_0,
935 MOD_EVEX_0F38C6_REG_1,
936 MOD_EVEX_0F38C6_REG_2,
937 MOD_EVEX_0F38C6_REG_5,
938 MOD_EVEX_0F38C6_REG_6,
939 MOD_EVEX_0F38C7_REG_1,
940 MOD_EVEX_0F38C7_REG_2,
941 MOD_EVEX_0F38C7_REG_5,
942 MOD_EVEX_0F38C7_REG_6
51e7da1b 943};
1ceb70f8 944
51e7da1b
L
945enum
946{
42164a71
L
947 RM_C6_REG_7 = 0,
948 RM_C7_REG_7,
949 RM_0F01_REG_0,
3873ba12
L
950 RM_0F01_REG_1,
951 RM_0F01_REG_2,
952 RM_0F01_REG_3,
f8687e93
JB
953 RM_0F01_REG_5_MOD_3,
954 RM_0F01_REG_7_MOD_3,
955 RM_0F1E_P_1_MOD_3_REG_7,
956 RM_0FAE_REG_6_MOD_3_P_0,
957 RM_0FAE_REG_7_MOD_3,
51e7da1b 958};
1ceb70f8 959
51e7da1b
L
960enum
961{
962 PREFIX_90 = 0,
f8687e93
JB
963 PREFIX_0F01_REG_5_MOD_0,
964 PREFIX_0F01_REG_5_MOD_3_RM_0,
965 PREFIX_0F01_REG_5_MOD_3_RM_2,
267b8516
JB
966 PREFIX_0F01_REG_7_MOD_3_RM_2,
967 PREFIX_0F01_REG_7_MOD_3_RM_3,
3233d7d0 968 PREFIX_0F09,
3873ba12
L
969 PREFIX_0F10,
970 PREFIX_0F11,
971 PREFIX_0F12,
972 PREFIX_0F16,
7e8b059b
L
973 PREFIX_0F1A,
974 PREFIX_0F1B,
c48935d7 975 PREFIX_0F1C,
603555e5 976 PREFIX_0F1E,
3873ba12
L
977 PREFIX_0F2A,
978 PREFIX_0F2B,
979 PREFIX_0F2C,
980 PREFIX_0F2D,
981 PREFIX_0F2E,
982 PREFIX_0F2F,
983 PREFIX_0F51,
984 PREFIX_0F52,
985 PREFIX_0F53,
986 PREFIX_0F58,
987 PREFIX_0F59,
988 PREFIX_0F5A,
989 PREFIX_0F5B,
990 PREFIX_0F5C,
991 PREFIX_0F5D,
992 PREFIX_0F5E,
993 PREFIX_0F5F,
994 PREFIX_0F60,
995 PREFIX_0F61,
996 PREFIX_0F62,
997 PREFIX_0F6C,
998 PREFIX_0F6D,
999 PREFIX_0F6F,
1000 PREFIX_0F70,
1001 PREFIX_0F73_REG_3,
1002 PREFIX_0F73_REG_7,
1003 PREFIX_0F78,
1004 PREFIX_0F79,
1005 PREFIX_0F7C,
1006 PREFIX_0F7D,
1007 PREFIX_0F7E,
1008 PREFIX_0F7F,
f8687e93
JB
1009 PREFIX_0FAE_REG_0_MOD_3,
1010 PREFIX_0FAE_REG_1_MOD_3,
1011 PREFIX_0FAE_REG_2_MOD_3,
1012 PREFIX_0FAE_REG_3_MOD_3,
1013 PREFIX_0FAE_REG_4_MOD_0,
1014 PREFIX_0FAE_REG_4_MOD_3,
1015 PREFIX_0FAE_REG_5_MOD_0,
1016 PREFIX_0FAE_REG_5_MOD_3,
1017 PREFIX_0FAE_REG_6_MOD_0,
1018 PREFIX_0FAE_REG_6_MOD_3,
1019 PREFIX_0FAE_REG_7_MOD_0,
3873ba12 1020 PREFIX_0FB8,
f12dc422 1021 PREFIX_0FBC,
3873ba12
L
1022 PREFIX_0FBD,
1023 PREFIX_0FC2,
f8687e93
JB
1024 PREFIX_0FC3_MOD_0,
1025 PREFIX_0FC7_REG_6_MOD_0,
1026 PREFIX_0FC7_REG_6_MOD_3,
1027 PREFIX_0FC7_REG_7_MOD_3,
3873ba12
L
1028 PREFIX_0FD0,
1029 PREFIX_0FD6,
1030 PREFIX_0FE6,
1031 PREFIX_0FE7,
1032 PREFIX_0FF0,
1033 PREFIX_0FF7,
1034 PREFIX_0F3810,
1035 PREFIX_0F3814,
1036 PREFIX_0F3815,
1037 PREFIX_0F3817,
1038 PREFIX_0F3820,
1039 PREFIX_0F3821,
1040 PREFIX_0F3822,
1041 PREFIX_0F3823,
1042 PREFIX_0F3824,
1043 PREFIX_0F3825,
1044 PREFIX_0F3828,
1045 PREFIX_0F3829,
1046 PREFIX_0F382A,
1047 PREFIX_0F382B,
1048 PREFIX_0F3830,
1049 PREFIX_0F3831,
1050 PREFIX_0F3832,
1051 PREFIX_0F3833,
1052 PREFIX_0F3834,
1053 PREFIX_0F3835,
1054 PREFIX_0F3837,
1055 PREFIX_0F3838,
1056 PREFIX_0F3839,
1057 PREFIX_0F383A,
1058 PREFIX_0F383B,
1059 PREFIX_0F383C,
1060 PREFIX_0F383D,
1061 PREFIX_0F383E,
1062 PREFIX_0F383F,
1063 PREFIX_0F3840,
1064 PREFIX_0F3841,
1065 PREFIX_0F3880,
1066 PREFIX_0F3881,
6c30d220 1067 PREFIX_0F3882,
a0046408
L
1068 PREFIX_0F38C8,
1069 PREFIX_0F38C9,
1070 PREFIX_0F38CA,
1071 PREFIX_0F38CB,
1072 PREFIX_0F38CC,
1073 PREFIX_0F38CD,
48521003 1074 PREFIX_0F38CF,
3873ba12
L
1075 PREFIX_0F38DB,
1076 PREFIX_0F38DC,
1077 PREFIX_0F38DD,
1078 PREFIX_0F38DE,
1079 PREFIX_0F38DF,
1080 PREFIX_0F38F0,
1081 PREFIX_0F38F1,
603555e5 1082 PREFIX_0F38F5,
e2e1fcde 1083 PREFIX_0F38F6,
c0a30a9f
L
1084 PREFIX_0F38F8,
1085 PREFIX_0F38F9,
3873ba12
L
1086 PREFIX_0F3A08,
1087 PREFIX_0F3A09,
1088 PREFIX_0F3A0A,
1089 PREFIX_0F3A0B,
1090 PREFIX_0F3A0C,
1091 PREFIX_0F3A0D,
1092 PREFIX_0F3A0E,
1093 PREFIX_0F3A14,
1094 PREFIX_0F3A15,
1095 PREFIX_0F3A16,
1096 PREFIX_0F3A17,
1097 PREFIX_0F3A20,
1098 PREFIX_0F3A21,
1099 PREFIX_0F3A22,
1100 PREFIX_0F3A40,
1101 PREFIX_0F3A41,
1102 PREFIX_0F3A42,
1103 PREFIX_0F3A44,
1104 PREFIX_0F3A60,
1105 PREFIX_0F3A61,
1106 PREFIX_0F3A62,
1107 PREFIX_0F3A63,
a0046408 1108 PREFIX_0F3ACC,
48521003
IT
1109 PREFIX_0F3ACE,
1110 PREFIX_0F3ACF,
3873ba12 1111 PREFIX_0F3ADF,
592a252b
L
1112 PREFIX_VEX_0F10,
1113 PREFIX_VEX_0F11,
1114 PREFIX_VEX_0F12,
1115 PREFIX_VEX_0F16,
1116 PREFIX_VEX_0F2A,
1117 PREFIX_VEX_0F2C,
1118 PREFIX_VEX_0F2D,
1119 PREFIX_VEX_0F2E,
1120 PREFIX_VEX_0F2F,
43234a1e
L
1121 PREFIX_VEX_0F41,
1122 PREFIX_VEX_0F42,
1123 PREFIX_VEX_0F44,
1124 PREFIX_VEX_0F45,
1125 PREFIX_VEX_0F46,
1126 PREFIX_VEX_0F47,
1ba585e8 1127 PREFIX_VEX_0F4A,
43234a1e 1128 PREFIX_VEX_0F4B,
592a252b
L
1129 PREFIX_VEX_0F51,
1130 PREFIX_VEX_0F52,
1131 PREFIX_VEX_0F53,
1132 PREFIX_VEX_0F58,
1133 PREFIX_VEX_0F59,
1134 PREFIX_VEX_0F5A,
1135 PREFIX_VEX_0F5B,
1136 PREFIX_VEX_0F5C,
1137 PREFIX_VEX_0F5D,
1138 PREFIX_VEX_0F5E,
1139 PREFIX_VEX_0F5F,
1140 PREFIX_VEX_0F60,
1141 PREFIX_VEX_0F61,
1142 PREFIX_VEX_0F62,
1143 PREFIX_VEX_0F63,
1144 PREFIX_VEX_0F64,
1145 PREFIX_VEX_0F65,
1146 PREFIX_VEX_0F66,
1147 PREFIX_VEX_0F67,
1148 PREFIX_VEX_0F68,
1149 PREFIX_VEX_0F69,
1150 PREFIX_VEX_0F6A,
1151 PREFIX_VEX_0F6B,
1152 PREFIX_VEX_0F6C,
1153 PREFIX_VEX_0F6D,
1154 PREFIX_VEX_0F6E,
1155 PREFIX_VEX_0F6F,
1156 PREFIX_VEX_0F70,
1157 PREFIX_VEX_0F71_REG_2,
1158 PREFIX_VEX_0F71_REG_4,
1159 PREFIX_VEX_0F71_REG_6,
1160 PREFIX_VEX_0F72_REG_2,
1161 PREFIX_VEX_0F72_REG_4,
1162 PREFIX_VEX_0F72_REG_6,
1163 PREFIX_VEX_0F73_REG_2,
1164 PREFIX_VEX_0F73_REG_3,
1165 PREFIX_VEX_0F73_REG_6,
1166 PREFIX_VEX_0F73_REG_7,
1167 PREFIX_VEX_0F74,
1168 PREFIX_VEX_0F75,
1169 PREFIX_VEX_0F76,
1170 PREFIX_VEX_0F77,
1171 PREFIX_VEX_0F7C,
1172 PREFIX_VEX_0F7D,
1173 PREFIX_VEX_0F7E,
1174 PREFIX_VEX_0F7F,
43234a1e
L
1175 PREFIX_VEX_0F90,
1176 PREFIX_VEX_0F91,
1177 PREFIX_VEX_0F92,
1178 PREFIX_VEX_0F93,
1179 PREFIX_VEX_0F98,
1ba585e8 1180 PREFIX_VEX_0F99,
592a252b
L
1181 PREFIX_VEX_0FC2,
1182 PREFIX_VEX_0FC4,
1183 PREFIX_VEX_0FC5,
1184 PREFIX_VEX_0FD0,
1185 PREFIX_VEX_0FD1,
1186 PREFIX_VEX_0FD2,
1187 PREFIX_VEX_0FD3,
1188 PREFIX_VEX_0FD4,
1189 PREFIX_VEX_0FD5,
1190 PREFIX_VEX_0FD6,
1191 PREFIX_VEX_0FD7,
1192 PREFIX_VEX_0FD8,
1193 PREFIX_VEX_0FD9,
1194 PREFIX_VEX_0FDA,
1195 PREFIX_VEX_0FDB,
1196 PREFIX_VEX_0FDC,
1197 PREFIX_VEX_0FDD,
1198 PREFIX_VEX_0FDE,
1199 PREFIX_VEX_0FDF,
1200 PREFIX_VEX_0FE0,
1201 PREFIX_VEX_0FE1,
1202 PREFIX_VEX_0FE2,
1203 PREFIX_VEX_0FE3,
1204 PREFIX_VEX_0FE4,
1205 PREFIX_VEX_0FE5,
1206 PREFIX_VEX_0FE6,
1207 PREFIX_VEX_0FE7,
1208 PREFIX_VEX_0FE8,
1209 PREFIX_VEX_0FE9,
1210 PREFIX_VEX_0FEA,
1211 PREFIX_VEX_0FEB,
1212 PREFIX_VEX_0FEC,
1213 PREFIX_VEX_0FED,
1214 PREFIX_VEX_0FEE,
1215 PREFIX_VEX_0FEF,
1216 PREFIX_VEX_0FF0,
1217 PREFIX_VEX_0FF1,
1218 PREFIX_VEX_0FF2,
1219 PREFIX_VEX_0FF3,
1220 PREFIX_VEX_0FF4,
1221 PREFIX_VEX_0FF5,
1222 PREFIX_VEX_0FF6,
1223 PREFIX_VEX_0FF7,
1224 PREFIX_VEX_0FF8,
1225 PREFIX_VEX_0FF9,
1226 PREFIX_VEX_0FFA,
1227 PREFIX_VEX_0FFB,
1228 PREFIX_VEX_0FFC,
1229 PREFIX_VEX_0FFD,
1230 PREFIX_VEX_0FFE,
1231 PREFIX_VEX_0F3800,
1232 PREFIX_VEX_0F3801,
1233 PREFIX_VEX_0F3802,
1234 PREFIX_VEX_0F3803,
1235 PREFIX_VEX_0F3804,
1236 PREFIX_VEX_0F3805,
1237 PREFIX_VEX_0F3806,
1238 PREFIX_VEX_0F3807,
1239 PREFIX_VEX_0F3808,
1240 PREFIX_VEX_0F3809,
1241 PREFIX_VEX_0F380A,
1242 PREFIX_VEX_0F380B,
1243 PREFIX_VEX_0F380C,
1244 PREFIX_VEX_0F380D,
1245 PREFIX_VEX_0F380E,
1246 PREFIX_VEX_0F380F,
1247 PREFIX_VEX_0F3813,
6c30d220 1248 PREFIX_VEX_0F3816,
592a252b
L
1249 PREFIX_VEX_0F3817,
1250 PREFIX_VEX_0F3818,
1251 PREFIX_VEX_0F3819,
1252 PREFIX_VEX_0F381A,
1253 PREFIX_VEX_0F381C,
1254 PREFIX_VEX_0F381D,
1255 PREFIX_VEX_0F381E,
1256 PREFIX_VEX_0F3820,
1257 PREFIX_VEX_0F3821,
1258 PREFIX_VEX_0F3822,
1259 PREFIX_VEX_0F3823,
1260 PREFIX_VEX_0F3824,
1261 PREFIX_VEX_0F3825,
1262 PREFIX_VEX_0F3828,
1263 PREFIX_VEX_0F3829,
1264 PREFIX_VEX_0F382A,
1265 PREFIX_VEX_0F382B,
1266 PREFIX_VEX_0F382C,
1267 PREFIX_VEX_0F382D,
1268 PREFIX_VEX_0F382E,
1269 PREFIX_VEX_0F382F,
1270 PREFIX_VEX_0F3830,
1271 PREFIX_VEX_0F3831,
1272 PREFIX_VEX_0F3832,
1273 PREFIX_VEX_0F3833,
1274 PREFIX_VEX_0F3834,
1275 PREFIX_VEX_0F3835,
6c30d220 1276 PREFIX_VEX_0F3836,
592a252b
L
1277 PREFIX_VEX_0F3837,
1278 PREFIX_VEX_0F3838,
1279 PREFIX_VEX_0F3839,
1280 PREFIX_VEX_0F383A,
1281 PREFIX_VEX_0F383B,
1282 PREFIX_VEX_0F383C,
1283 PREFIX_VEX_0F383D,
1284 PREFIX_VEX_0F383E,
1285 PREFIX_VEX_0F383F,
1286 PREFIX_VEX_0F3840,
1287 PREFIX_VEX_0F3841,
6c30d220
L
1288 PREFIX_VEX_0F3845,
1289 PREFIX_VEX_0F3846,
1290 PREFIX_VEX_0F3847,
1291 PREFIX_VEX_0F3858,
1292 PREFIX_VEX_0F3859,
1293 PREFIX_VEX_0F385A,
1294 PREFIX_VEX_0F3878,
1295 PREFIX_VEX_0F3879,
1296 PREFIX_VEX_0F388C,
1297 PREFIX_VEX_0F388E,
1298 PREFIX_VEX_0F3890,
1299 PREFIX_VEX_0F3891,
1300 PREFIX_VEX_0F3892,
1301 PREFIX_VEX_0F3893,
592a252b
L
1302 PREFIX_VEX_0F3896,
1303 PREFIX_VEX_0F3897,
1304 PREFIX_VEX_0F3898,
1305 PREFIX_VEX_0F3899,
1306 PREFIX_VEX_0F389A,
1307 PREFIX_VEX_0F389B,
1308 PREFIX_VEX_0F389C,
1309 PREFIX_VEX_0F389D,
1310 PREFIX_VEX_0F389E,
1311 PREFIX_VEX_0F389F,
1312 PREFIX_VEX_0F38A6,
1313 PREFIX_VEX_0F38A7,
1314 PREFIX_VEX_0F38A8,
1315 PREFIX_VEX_0F38A9,
1316 PREFIX_VEX_0F38AA,
1317 PREFIX_VEX_0F38AB,
1318 PREFIX_VEX_0F38AC,
1319 PREFIX_VEX_0F38AD,
1320 PREFIX_VEX_0F38AE,
1321 PREFIX_VEX_0F38AF,
1322 PREFIX_VEX_0F38B6,
1323 PREFIX_VEX_0F38B7,
1324 PREFIX_VEX_0F38B8,
1325 PREFIX_VEX_0F38B9,
1326 PREFIX_VEX_0F38BA,
1327 PREFIX_VEX_0F38BB,
1328 PREFIX_VEX_0F38BC,
1329 PREFIX_VEX_0F38BD,
1330 PREFIX_VEX_0F38BE,
1331 PREFIX_VEX_0F38BF,
48521003 1332 PREFIX_VEX_0F38CF,
592a252b
L
1333 PREFIX_VEX_0F38DB,
1334 PREFIX_VEX_0F38DC,
1335 PREFIX_VEX_0F38DD,
1336 PREFIX_VEX_0F38DE,
1337 PREFIX_VEX_0F38DF,
f12dc422
L
1338 PREFIX_VEX_0F38F2,
1339 PREFIX_VEX_0F38F3_REG_1,
1340 PREFIX_VEX_0F38F3_REG_2,
1341 PREFIX_VEX_0F38F3_REG_3,
6c30d220
L
1342 PREFIX_VEX_0F38F5,
1343 PREFIX_VEX_0F38F6,
f12dc422 1344 PREFIX_VEX_0F38F7,
6c30d220
L
1345 PREFIX_VEX_0F3A00,
1346 PREFIX_VEX_0F3A01,
1347 PREFIX_VEX_0F3A02,
592a252b
L
1348 PREFIX_VEX_0F3A04,
1349 PREFIX_VEX_0F3A05,
1350 PREFIX_VEX_0F3A06,
1351 PREFIX_VEX_0F3A08,
1352 PREFIX_VEX_0F3A09,
1353 PREFIX_VEX_0F3A0A,
1354 PREFIX_VEX_0F3A0B,
1355 PREFIX_VEX_0F3A0C,
1356 PREFIX_VEX_0F3A0D,
1357 PREFIX_VEX_0F3A0E,
1358 PREFIX_VEX_0F3A0F,
1359 PREFIX_VEX_0F3A14,
1360 PREFIX_VEX_0F3A15,
1361 PREFIX_VEX_0F3A16,
1362 PREFIX_VEX_0F3A17,
1363 PREFIX_VEX_0F3A18,
1364 PREFIX_VEX_0F3A19,
1365 PREFIX_VEX_0F3A1D,
1366 PREFIX_VEX_0F3A20,
1367 PREFIX_VEX_0F3A21,
1368 PREFIX_VEX_0F3A22,
43234a1e 1369 PREFIX_VEX_0F3A30,
1ba585e8 1370 PREFIX_VEX_0F3A31,
43234a1e 1371 PREFIX_VEX_0F3A32,
1ba585e8 1372 PREFIX_VEX_0F3A33,
6c30d220
L
1373 PREFIX_VEX_0F3A38,
1374 PREFIX_VEX_0F3A39,
592a252b
L
1375 PREFIX_VEX_0F3A40,
1376 PREFIX_VEX_0F3A41,
1377 PREFIX_VEX_0F3A42,
1378 PREFIX_VEX_0F3A44,
6c30d220 1379 PREFIX_VEX_0F3A46,
592a252b
L
1380 PREFIX_VEX_0F3A48,
1381 PREFIX_VEX_0F3A49,
1382 PREFIX_VEX_0F3A4A,
1383 PREFIX_VEX_0F3A4B,
1384 PREFIX_VEX_0F3A4C,
1385 PREFIX_VEX_0F3A5C,
1386 PREFIX_VEX_0F3A5D,
1387 PREFIX_VEX_0F3A5E,
1388 PREFIX_VEX_0F3A5F,
1389 PREFIX_VEX_0F3A60,
1390 PREFIX_VEX_0F3A61,
1391 PREFIX_VEX_0F3A62,
1392 PREFIX_VEX_0F3A63,
1393 PREFIX_VEX_0F3A68,
1394 PREFIX_VEX_0F3A69,
1395 PREFIX_VEX_0F3A6A,
1396 PREFIX_VEX_0F3A6B,
1397 PREFIX_VEX_0F3A6C,
1398 PREFIX_VEX_0F3A6D,
1399 PREFIX_VEX_0F3A6E,
1400 PREFIX_VEX_0F3A6F,
1401 PREFIX_VEX_0F3A78,
1402 PREFIX_VEX_0F3A79,
1403 PREFIX_VEX_0F3A7A,
1404 PREFIX_VEX_0F3A7B,
1405 PREFIX_VEX_0F3A7C,
1406 PREFIX_VEX_0F3A7D,
1407 PREFIX_VEX_0F3A7E,
1408 PREFIX_VEX_0F3A7F,
48521003
IT
1409 PREFIX_VEX_0F3ACE,
1410 PREFIX_VEX_0F3ACF,
6c30d220 1411 PREFIX_VEX_0F3ADF,
43234a1e
L
1412 PREFIX_VEX_0F3AF0,
1413
1414 PREFIX_EVEX_0F10,
1415 PREFIX_EVEX_0F11,
1416 PREFIX_EVEX_0F12,
1417 PREFIX_EVEX_0F13,
1418 PREFIX_EVEX_0F14,
1419 PREFIX_EVEX_0F15,
1420 PREFIX_EVEX_0F16,
1421 PREFIX_EVEX_0F17,
1422 PREFIX_EVEX_0F28,
1423 PREFIX_EVEX_0F29,
1424 PREFIX_EVEX_0F2A,
1425 PREFIX_EVEX_0F2B,
1426 PREFIX_EVEX_0F2C,
1427 PREFIX_EVEX_0F2D,
1428 PREFIX_EVEX_0F2E,
1429 PREFIX_EVEX_0F2F,
1430 PREFIX_EVEX_0F51,
90a915bf
IT
1431 PREFIX_EVEX_0F54,
1432 PREFIX_EVEX_0F55,
1433 PREFIX_EVEX_0F56,
1434 PREFIX_EVEX_0F57,
43234a1e
L
1435 PREFIX_EVEX_0F58,
1436 PREFIX_EVEX_0F59,
1437 PREFIX_EVEX_0F5A,
1438 PREFIX_EVEX_0F5B,
1439 PREFIX_EVEX_0F5C,
1440 PREFIX_EVEX_0F5D,
1441 PREFIX_EVEX_0F5E,
1442 PREFIX_EVEX_0F5F,
1ba585e8
IT
1443 PREFIX_EVEX_0F60,
1444 PREFIX_EVEX_0F61,
43234a1e 1445 PREFIX_EVEX_0F62,
1ba585e8
IT
1446 PREFIX_EVEX_0F63,
1447 PREFIX_EVEX_0F64,
1448 PREFIX_EVEX_0F65,
43234a1e 1449 PREFIX_EVEX_0F66,
1ba585e8
IT
1450 PREFIX_EVEX_0F67,
1451 PREFIX_EVEX_0F68,
1452 PREFIX_EVEX_0F69,
43234a1e 1453 PREFIX_EVEX_0F6A,
1ba585e8 1454 PREFIX_EVEX_0F6B,
43234a1e
L
1455 PREFIX_EVEX_0F6C,
1456 PREFIX_EVEX_0F6D,
1457 PREFIX_EVEX_0F6E,
1458 PREFIX_EVEX_0F6F,
1459 PREFIX_EVEX_0F70,
1ba585e8
IT
1460 PREFIX_EVEX_0F71_REG_2,
1461 PREFIX_EVEX_0F71_REG_4,
1462 PREFIX_EVEX_0F71_REG_6,
43234a1e
L
1463 PREFIX_EVEX_0F72_REG_0,
1464 PREFIX_EVEX_0F72_REG_1,
1465 PREFIX_EVEX_0F72_REG_2,
1466 PREFIX_EVEX_0F72_REG_4,
1467 PREFIX_EVEX_0F72_REG_6,
1468 PREFIX_EVEX_0F73_REG_2,
1ba585e8 1469 PREFIX_EVEX_0F73_REG_3,
43234a1e 1470 PREFIX_EVEX_0F73_REG_6,
1ba585e8
IT
1471 PREFIX_EVEX_0F73_REG_7,
1472 PREFIX_EVEX_0F74,
1473 PREFIX_EVEX_0F75,
43234a1e
L
1474 PREFIX_EVEX_0F76,
1475 PREFIX_EVEX_0F78,
1476 PREFIX_EVEX_0F79,
1477 PREFIX_EVEX_0F7A,
1478 PREFIX_EVEX_0F7B,
1479 PREFIX_EVEX_0F7E,
1480 PREFIX_EVEX_0F7F,
1481 PREFIX_EVEX_0FC2,
1ba585e8
IT
1482 PREFIX_EVEX_0FC4,
1483 PREFIX_EVEX_0FC5,
43234a1e 1484 PREFIX_EVEX_0FC6,
1ba585e8 1485 PREFIX_EVEX_0FD1,
43234a1e
L
1486 PREFIX_EVEX_0FD2,
1487 PREFIX_EVEX_0FD3,
1488 PREFIX_EVEX_0FD4,
1ba585e8 1489 PREFIX_EVEX_0FD5,
43234a1e 1490 PREFIX_EVEX_0FD6,
1ba585e8
IT
1491 PREFIX_EVEX_0FD8,
1492 PREFIX_EVEX_0FD9,
1493 PREFIX_EVEX_0FDA,
43234a1e 1494 PREFIX_EVEX_0FDB,
1ba585e8
IT
1495 PREFIX_EVEX_0FDC,
1496 PREFIX_EVEX_0FDD,
1497 PREFIX_EVEX_0FDE,
43234a1e 1498 PREFIX_EVEX_0FDF,
1ba585e8
IT
1499 PREFIX_EVEX_0FE0,
1500 PREFIX_EVEX_0FE1,
43234a1e 1501 PREFIX_EVEX_0FE2,
1ba585e8
IT
1502 PREFIX_EVEX_0FE3,
1503 PREFIX_EVEX_0FE4,
1504 PREFIX_EVEX_0FE5,
43234a1e
L
1505 PREFIX_EVEX_0FE6,
1506 PREFIX_EVEX_0FE7,
1ba585e8
IT
1507 PREFIX_EVEX_0FE8,
1508 PREFIX_EVEX_0FE9,
1509 PREFIX_EVEX_0FEA,
43234a1e 1510 PREFIX_EVEX_0FEB,
1ba585e8
IT
1511 PREFIX_EVEX_0FEC,
1512 PREFIX_EVEX_0FED,
1513 PREFIX_EVEX_0FEE,
43234a1e 1514 PREFIX_EVEX_0FEF,
1ba585e8 1515 PREFIX_EVEX_0FF1,
43234a1e
L
1516 PREFIX_EVEX_0FF2,
1517 PREFIX_EVEX_0FF3,
1518 PREFIX_EVEX_0FF4,
1ba585e8
IT
1519 PREFIX_EVEX_0FF5,
1520 PREFIX_EVEX_0FF6,
1521 PREFIX_EVEX_0FF8,
1522 PREFIX_EVEX_0FF9,
43234a1e
L
1523 PREFIX_EVEX_0FFA,
1524 PREFIX_EVEX_0FFB,
1ba585e8
IT
1525 PREFIX_EVEX_0FFC,
1526 PREFIX_EVEX_0FFD,
43234a1e 1527 PREFIX_EVEX_0FFE,
1ba585e8
IT
1528 PREFIX_EVEX_0F3800,
1529 PREFIX_EVEX_0F3804,
1530 PREFIX_EVEX_0F380B,
43234a1e
L
1531 PREFIX_EVEX_0F380C,
1532 PREFIX_EVEX_0F380D,
1ba585e8 1533 PREFIX_EVEX_0F3810,
43234a1e
L
1534 PREFIX_EVEX_0F3811,
1535 PREFIX_EVEX_0F3812,
1536 PREFIX_EVEX_0F3813,
1537 PREFIX_EVEX_0F3814,
1538 PREFIX_EVEX_0F3815,
1539 PREFIX_EVEX_0F3816,
1540 PREFIX_EVEX_0F3818,
1541 PREFIX_EVEX_0F3819,
1542 PREFIX_EVEX_0F381A,
1543 PREFIX_EVEX_0F381B,
1ba585e8
IT
1544 PREFIX_EVEX_0F381C,
1545 PREFIX_EVEX_0F381D,
43234a1e
L
1546 PREFIX_EVEX_0F381E,
1547 PREFIX_EVEX_0F381F,
1ba585e8 1548 PREFIX_EVEX_0F3820,
43234a1e
L
1549 PREFIX_EVEX_0F3821,
1550 PREFIX_EVEX_0F3822,
1551 PREFIX_EVEX_0F3823,
1552 PREFIX_EVEX_0F3824,
1553 PREFIX_EVEX_0F3825,
1ba585e8 1554 PREFIX_EVEX_0F3826,
43234a1e
L
1555 PREFIX_EVEX_0F3827,
1556 PREFIX_EVEX_0F3828,
1557 PREFIX_EVEX_0F3829,
1558 PREFIX_EVEX_0F382A,
1ba585e8 1559 PREFIX_EVEX_0F382B,
43234a1e
L
1560 PREFIX_EVEX_0F382C,
1561 PREFIX_EVEX_0F382D,
1ba585e8 1562 PREFIX_EVEX_0F3830,
43234a1e
L
1563 PREFIX_EVEX_0F3831,
1564 PREFIX_EVEX_0F3832,
1565 PREFIX_EVEX_0F3833,
1566 PREFIX_EVEX_0F3834,
1567 PREFIX_EVEX_0F3835,
1568 PREFIX_EVEX_0F3836,
1569 PREFIX_EVEX_0F3837,
1ba585e8 1570 PREFIX_EVEX_0F3838,
43234a1e
L
1571 PREFIX_EVEX_0F3839,
1572 PREFIX_EVEX_0F383A,
1573 PREFIX_EVEX_0F383B,
1ba585e8 1574 PREFIX_EVEX_0F383C,
43234a1e 1575 PREFIX_EVEX_0F383D,
1ba585e8 1576 PREFIX_EVEX_0F383E,
43234a1e
L
1577 PREFIX_EVEX_0F383F,
1578 PREFIX_EVEX_0F3840,
1579 PREFIX_EVEX_0F3842,
1580 PREFIX_EVEX_0F3843,
1581 PREFIX_EVEX_0F3844,
1582 PREFIX_EVEX_0F3845,
1583 PREFIX_EVEX_0F3846,
1584 PREFIX_EVEX_0F3847,
1585 PREFIX_EVEX_0F384C,
1586 PREFIX_EVEX_0F384D,
1587 PREFIX_EVEX_0F384E,
1588 PREFIX_EVEX_0F384F,
8cfcb765
IT
1589 PREFIX_EVEX_0F3850,
1590 PREFIX_EVEX_0F3851,
47acf0bd
IT
1591 PREFIX_EVEX_0F3852,
1592 PREFIX_EVEX_0F3853,
ee6872be 1593 PREFIX_EVEX_0F3854,
620214f7 1594 PREFIX_EVEX_0F3855,
43234a1e
L
1595 PREFIX_EVEX_0F3858,
1596 PREFIX_EVEX_0F3859,
1597 PREFIX_EVEX_0F385A,
1598 PREFIX_EVEX_0F385B,
53467f57
IT
1599 PREFIX_EVEX_0F3862,
1600 PREFIX_EVEX_0F3863,
43234a1e
L
1601 PREFIX_EVEX_0F3864,
1602 PREFIX_EVEX_0F3865,
1ba585e8 1603 PREFIX_EVEX_0F3866,
9186c494 1604 PREFIX_EVEX_0F3868,
53467f57
IT
1605 PREFIX_EVEX_0F3870,
1606 PREFIX_EVEX_0F3871,
1607 PREFIX_EVEX_0F3872,
1608 PREFIX_EVEX_0F3873,
1ba585e8 1609 PREFIX_EVEX_0F3875,
43234a1e
L
1610 PREFIX_EVEX_0F3876,
1611 PREFIX_EVEX_0F3877,
1ba585e8
IT
1612 PREFIX_EVEX_0F3878,
1613 PREFIX_EVEX_0F3879,
1614 PREFIX_EVEX_0F387A,
1615 PREFIX_EVEX_0F387B,
43234a1e 1616 PREFIX_EVEX_0F387C,
1ba585e8 1617 PREFIX_EVEX_0F387D,
43234a1e
L
1618 PREFIX_EVEX_0F387E,
1619 PREFIX_EVEX_0F387F,
14f195c9 1620 PREFIX_EVEX_0F3883,
43234a1e
L
1621 PREFIX_EVEX_0F3888,
1622 PREFIX_EVEX_0F3889,
1623 PREFIX_EVEX_0F388A,
1624 PREFIX_EVEX_0F388B,
1ba585e8 1625 PREFIX_EVEX_0F388D,
ee6872be 1626 PREFIX_EVEX_0F388F,
43234a1e
L
1627 PREFIX_EVEX_0F3890,
1628 PREFIX_EVEX_0F3891,
1629 PREFIX_EVEX_0F3892,
1630 PREFIX_EVEX_0F3893,
1631 PREFIX_EVEX_0F3896,
1632 PREFIX_EVEX_0F3897,
1633 PREFIX_EVEX_0F3898,
1634 PREFIX_EVEX_0F3899,
1635 PREFIX_EVEX_0F389A,
1636 PREFIX_EVEX_0F389B,
1637 PREFIX_EVEX_0F389C,
1638 PREFIX_EVEX_0F389D,
1639 PREFIX_EVEX_0F389E,
1640 PREFIX_EVEX_0F389F,
1641 PREFIX_EVEX_0F38A0,
1642 PREFIX_EVEX_0F38A1,
1643 PREFIX_EVEX_0F38A2,
1644 PREFIX_EVEX_0F38A3,
1645 PREFIX_EVEX_0F38A6,
1646 PREFIX_EVEX_0F38A7,
1647 PREFIX_EVEX_0F38A8,
1648 PREFIX_EVEX_0F38A9,
1649 PREFIX_EVEX_0F38AA,
1650 PREFIX_EVEX_0F38AB,
1651 PREFIX_EVEX_0F38AC,
1652 PREFIX_EVEX_0F38AD,
1653 PREFIX_EVEX_0F38AE,
1654 PREFIX_EVEX_0F38AF,
2cc1b5aa
IT
1655 PREFIX_EVEX_0F38B4,
1656 PREFIX_EVEX_0F38B5,
43234a1e
L
1657 PREFIX_EVEX_0F38B6,
1658 PREFIX_EVEX_0F38B7,
1659 PREFIX_EVEX_0F38B8,
1660 PREFIX_EVEX_0F38B9,
1661 PREFIX_EVEX_0F38BA,
1662 PREFIX_EVEX_0F38BB,
1663 PREFIX_EVEX_0F38BC,
1664 PREFIX_EVEX_0F38BD,
1665 PREFIX_EVEX_0F38BE,
1666 PREFIX_EVEX_0F38BF,
1667 PREFIX_EVEX_0F38C4,
1668 PREFIX_EVEX_0F38C6_REG_1,
1669 PREFIX_EVEX_0F38C6_REG_2,
1670 PREFIX_EVEX_0F38C6_REG_5,
1671 PREFIX_EVEX_0F38C6_REG_6,
1672 PREFIX_EVEX_0F38C7_REG_1,
1673 PREFIX_EVEX_0F38C7_REG_2,
1674 PREFIX_EVEX_0F38C7_REG_5,
1675 PREFIX_EVEX_0F38C7_REG_6,
1676 PREFIX_EVEX_0F38C8,
1677 PREFIX_EVEX_0F38CA,
1678 PREFIX_EVEX_0F38CB,
1679 PREFIX_EVEX_0F38CC,
1680 PREFIX_EVEX_0F38CD,
48521003 1681 PREFIX_EVEX_0F38CF,
8dcf1fad
IT
1682 PREFIX_EVEX_0F38DC,
1683 PREFIX_EVEX_0F38DD,
1684 PREFIX_EVEX_0F38DE,
1685 PREFIX_EVEX_0F38DF,
43234a1e
L
1686
1687 PREFIX_EVEX_0F3A00,
1688 PREFIX_EVEX_0F3A01,
1689 PREFIX_EVEX_0F3A03,
1690 PREFIX_EVEX_0F3A04,
1691 PREFIX_EVEX_0F3A05,
1692 PREFIX_EVEX_0F3A08,
1693 PREFIX_EVEX_0F3A09,
1694 PREFIX_EVEX_0F3A0A,
1695 PREFIX_EVEX_0F3A0B,
1ba585e8
IT
1696 PREFIX_EVEX_0F3A0F,
1697 PREFIX_EVEX_0F3A14,
1698 PREFIX_EVEX_0F3A15,
90a915bf 1699 PREFIX_EVEX_0F3A16,
43234a1e
L
1700 PREFIX_EVEX_0F3A17,
1701 PREFIX_EVEX_0F3A18,
1702 PREFIX_EVEX_0F3A19,
1703 PREFIX_EVEX_0F3A1A,
1704 PREFIX_EVEX_0F3A1B,
1705 PREFIX_EVEX_0F3A1D,
1706 PREFIX_EVEX_0F3A1E,
1707 PREFIX_EVEX_0F3A1F,
1ba585e8 1708 PREFIX_EVEX_0F3A20,
43234a1e 1709 PREFIX_EVEX_0F3A21,
90a915bf 1710 PREFIX_EVEX_0F3A22,
43234a1e
L
1711 PREFIX_EVEX_0F3A23,
1712 PREFIX_EVEX_0F3A25,
1713 PREFIX_EVEX_0F3A26,
1714 PREFIX_EVEX_0F3A27,
1715 PREFIX_EVEX_0F3A38,
1716 PREFIX_EVEX_0F3A39,
1717 PREFIX_EVEX_0F3A3A,
1718 PREFIX_EVEX_0F3A3B,
1ba585e8
IT
1719 PREFIX_EVEX_0F3A3E,
1720 PREFIX_EVEX_0F3A3F,
1721 PREFIX_EVEX_0F3A42,
43234a1e 1722 PREFIX_EVEX_0F3A43,
ff1982d5 1723 PREFIX_EVEX_0F3A44,
90a915bf
IT
1724 PREFIX_EVEX_0F3A50,
1725 PREFIX_EVEX_0F3A51,
43234a1e 1726 PREFIX_EVEX_0F3A54,
90a915bf
IT
1727 PREFIX_EVEX_0F3A55,
1728 PREFIX_EVEX_0F3A56,
1729 PREFIX_EVEX_0F3A57,
1730 PREFIX_EVEX_0F3A66,
53467f57
IT
1731 PREFIX_EVEX_0F3A67,
1732 PREFIX_EVEX_0F3A70,
1733 PREFIX_EVEX_0F3A71,
1734 PREFIX_EVEX_0F3A72,
48521003
IT
1735 PREFIX_EVEX_0F3A73,
1736 PREFIX_EVEX_0F3ACE,
1737 PREFIX_EVEX_0F3ACF
51e7da1b 1738};
4e7d34a6 1739
51e7da1b
L
1740enum
1741{
1742 X86_64_06 = 0,
3873ba12
L
1743 X86_64_07,
1744 X86_64_0D,
1745 X86_64_16,
1746 X86_64_17,
1747 X86_64_1E,
1748 X86_64_1F,
1749 X86_64_27,
1750 X86_64_2F,
1751 X86_64_37,
1752 X86_64_3F,
1753 X86_64_60,
1754 X86_64_61,
1755 X86_64_62,
1756 X86_64_63,
1757 X86_64_6D,
1758 X86_64_6F,
d039fef3 1759 X86_64_82,
3873ba12
L
1760 X86_64_9A,
1761 X86_64_C4,
1762 X86_64_C5,
1763 X86_64_CE,
1764 X86_64_D4,
1765 X86_64_D5,
a72d2af2
L
1766 X86_64_E8,
1767 X86_64_E9,
3873ba12
L
1768 X86_64_EA,
1769 X86_64_0F01_REG_0,
1770 X86_64_0F01_REG_1,
1771 X86_64_0F01_REG_2,
1772 X86_64_0F01_REG_3
51e7da1b 1773};
4e7d34a6 1774
51e7da1b
L
1775enum
1776{
1777 THREE_BYTE_0F38 = 0,
1f334aeb 1778 THREE_BYTE_0F3A
51e7da1b 1779};
4e7d34a6 1780
f88c9eb0
SP
1781enum
1782{
5dd85c99
SP
1783 XOP_08 = 0,
1784 XOP_09,
f88c9eb0
SP
1785 XOP_0A
1786};
1787
51e7da1b
L
1788enum
1789{
1790 VEX_0F = 0,
3873ba12
L
1791 VEX_0F38,
1792 VEX_0F3A
51e7da1b 1793};
c0f3af97 1794
43234a1e
L
1795enum
1796{
1797 EVEX_0F = 0,
1798 EVEX_0F38,
1799 EVEX_0F3A
1800};
1801
51e7da1b
L
1802enum
1803{
ec6f095a 1804 VEX_LEN_0F12_P_0_M_0 = 0,
592a252b
L
1805 VEX_LEN_0F12_P_0_M_1,
1806 VEX_LEN_0F12_P_2,
1807 VEX_LEN_0F13_M_0,
1808 VEX_LEN_0F16_P_0_M_0,
1809 VEX_LEN_0F16_P_0_M_1,
1810 VEX_LEN_0F16_P_2,
1811 VEX_LEN_0F17_M_0,
43234a1e 1812 VEX_LEN_0F41_P_0,
1ba585e8 1813 VEX_LEN_0F41_P_2,
43234a1e 1814 VEX_LEN_0F42_P_0,
1ba585e8 1815 VEX_LEN_0F42_P_2,
43234a1e 1816 VEX_LEN_0F44_P_0,
1ba585e8 1817 VEX_LEN_0F44_P_2,
43234a1e 1818 VEX_LEN_0F45_P_0,
1ba585e8 1819 VEX_LEN_0F45_P_2,
43234a1e 1820 VEX_LEN_0F46_P_0,
1ba585e8 1821 VEX_LEN_0F46_P_2,
43234a1e 1822 VEX_LEN_0F47_P_0,
1ba585e8
IT
1823 VEX_LEN_0F47_P_2,
1824 VEX_LEN_0F4A_P_0,
1825 VEX_LEN_0F4A_P_2,
1826 VEX_LEN_0F4B_P_0,
43234a1e 1827 VEX_LEN_0F4B_P_2,
592a252b 1828 VEX_LEN_0F6E_P_2,
ec6f095a 1829 VEX_LEN_0F77_P_0,
592a252b
L
1830 VEX_LEN_0F7E_P_1,
1831 VEX_LEN_0F7E_P_2,
43234a1e 1832 VEX_LEN_0F90_P_0,
1ba585e8 1833 VEX_LEN_0F90_P_2,
43234a1e 1834 VEX_LEN_0F91_P_0,
1ba585e8 1835 VEX_LEN_0F91_P_2,
43234a1e 1836 VEX_LEN_0F92_P_0,
90a915bf 1837 VEX_LEN_0F92_P_2,
1ba585e8 1838 VEX_LEN_0F92_P_3,
43234a1e 1839 VEX_LEN_0F93_P_0,
90a915bf 1840 VEX_LEN_0F93_P_2,
1ba585e8 1841 VEX_LEN_0F93_P_3,
43234a1e 1842 VEX_LEN_0F98_P_0,
1ba585e8
IT
1843 VEX_LEN_0F98_P_2,
1844 VEX_LEN_0F99_P_0,
1845 VEX_LEN_0F99_P_2,
592a252b
L
1846 VEX_LEN_0FAE_R_2_M_0,
1847 VEX_LEN_0FAE_R_3_M_0,
592a252b
L
1848 VEX_LEN_0FC4_P_2,
1849 VEX_LEN_0FC5_P_2,
592a252b 1850 VEX_LEN_0FD6_P_2,
592a252b 1851 VEX_LEN_0FF7_P_2,
6c30d220
L
1852 VEX_LEN_0F3816_P_2,
1853 VEX_LEN_0F3819_P_2,
592a252b 1854 VEX_LEN_0F381A_P_2_M_0,
6c30d220 1855 VEX_LEN_0F3836_P_2,
592a252b 1856 VEX_LEN_0F3841_P_2,
6c30d220 1857 VEX_LEN_0F385A_P_2_M_0,
592a252b 1858 VEX_LEN_0F38DB_P_2,
f12dc422
L
1859 VEX_LEN_0F38F2_P_0,
1860 VEX_LEN_0F38F3_R_1_P_0,
1861 VEX_LEN_0F38F3_R_2_P_0,
1862 VEX_LEN_0F38F3_R_3_P_0,
6c30d220
L
1863 VEX_LEN_0F38F5_P_0,
1864 VEX_LEN_0F38F5_P_1,
1865 VEX_LEN_0F38F5_P_3,
1866 VEX_LEN_0F38F6_P_3,
f12dc422 1867 VEX_LEN_0F38F7_P_0,
6c30d220
L
1868 VEX_LEN_0F38F7_P_1,
1869 VEX_LEN_0F38F7_P_2,
1870 VEX_LEN_0F38F7_P_3,
1871 VEX_LEN_0F3A00_P_2,
1872 VEX_LEN_0F3A01_P_2,
592a252b 1873 VEX_LEN_0F3A06_P_2,
592a252b
L
1874 VEX_LEN_0F3A14_P_2,
1875 VEX_LEN_0F3A15_P_2,
1876 VEX_LEN_0F3A16_P_2,
1877 VEX_LEN_0F3A17_P_2,
1878 VEX_LEN_0F3A18_P_2,
1879 VEX_LEN_0F3A19_P_2,
1880 VEX_LEN_0F3A20_P_2,
1881 VEX_LEN_0F3A21_P_2,
1882 VEX_LEN_0F3A22_P_2,
43234a1e 1883 VEX_LEN_0F3A30_P_2,
1ba585e8 1884 VEX_LEN_0F3A31_P_2,
43234a1e 1885 VEX_LEN_0F3A32_P_2,
1ba585e8 1886 VEX_LEN_0F3A33_P_2,
6c30d220
L
1887 VEX_LEN_0F3A38_P_2,
1888 VEX_LEN_0F3A39_P_2,
592a252b 1889 VEX_LEN_0F3A41_P_2,
6c30d220 1890 VEX_LEN_0F3A46_P_2,
592a252b
L
1891 VEX_LEN_0F3A60_P_2,
1892 VEX_LEN_0F3A61_P_2,
1893 VEX_LEN_0F3A62_P_2,
1894 VEX_LEN_0F3A63_P_2,
1895 VEX_LEN_0F3A6A_P_2,
1896 VEX_LEN_0F3A6B_P_2,
1897 VEX_LEN_0F3A6E_P_2,
1898 VEX_LEN_0F3A6F_P_2,
1899 VEX_LEN_0F3A7A_P_2,
1900 VEX_LEN_0F3A7B_P_2,
1901 VEX_LEN_0F3A7E_P_2,
1902 VEX_LEN_0F3A7F_P_2,
1903 VEX_LEN_0F3ADF_P_2,
6c30d220 1904 VEX_LEN_0F3AF0_P_3,
ff688e1f
L
1905 VEX_LEN_0FXOP_08_CC,
1906 VEX_LEN_0FXOP_08_CD,
1907 VEX_LEN_0FXOP_08_CE,
1908 VEX_LEN_0FXOP_08_CF,
1909 VEX_LEN_0FXOP_08_EC,
1910 VEX_LEN_0FXOP_08_ED,
1911 VEX_LEN_0FXOP_08_EE,
1912 VEX_LEN_0FXOP_08_EF,
592a252b
L
1913 VEX_LEN_0FXOP_09_80,
1914 VEX_LEN_0FXOP_09_81
51e7da1b 1915};
c0f3af97 1916
04e2a182
L
1917enum
1918{
1919 EVEX_LEN_0F6E_P_2 = 0,
1920 EVEX_LEN_0F7E_P_1,
1921 EVEX_LEN_0F7E_P_2,
12efd68d 1922 EVEX_LEN_0FD6_P_2,
f0a6222e
L
1923 EVEX_LEN_0F3819_P_2_W_0,
1924 EVEX_LEN_0F3819_P_2_W_1,
1925 EVEX_LEN_0F381A_P_2_W_0,
1926 EVEX_LEN_0F381A_P_2_W_1,
1927 EVEX_LEN_0F381B_P_2_W_0,
1928 EVEX_LEN_0F381B_P_2_W_1,
1929 EVEX_LEN_0F385A_P_2_W_0,
1930 EVEX_LEN_0F385A_P_2_W_1,
1931 EVEX_LEN_0F385B_P_2_W_0,
1932 EVEX_LEN_0F385B_P_2_W_1,
e395f487
L
1933 EVEX_LEN_0F38C6_REG_1_PREFIX_2,
1934 EVEX_LEN_0F38C6_REG_2_PREFIX_2,
1935 EVEX_LEN_0F38C6_REG_5_PREFIX_2,
1936 EVEX_LEN_0F38C6_REG_6_PREFIX_2,
1937 EVEX_LEN_0F38C7_R_1_P_2_W_0,
1938 EVEX_LEN_0F38C7_R_1_P_2_W_1,
1939 EVEX_LEN_0F38C7_R_2_P_2_W_0,
1940 EVEX_LEN_0F38C7_R_2_P_2_W_1,
1941 EVEX_LEN_0F38C7_R_5_P_2_W_0,
1942 EVEX_LEN_0F38C7_R_5_P_2_W_1,
1943 EVEX_LEN_0F38C7_R_6_P_2_W_0,
1944 EVEX_LEN_0F38C7_R_6_P_2_W_1,
12efd68d
L
1945 EVEX_LEN_0F3A18_P_2_W_0,
1946 EVEX_LEN_0F3A18_P_2_W_1,
1947 EVEX_LEN_0F3A19_P_2_W_0,
1948 EVEX_LEN_0F3A19_P_2_W_1,
1949 EVEX_LEN_0F3A1A_P_2_W_0,
1950 EVEX_LEN_0F3A1A_P_2_W_1,
1951 EVEX_LEN_0F3A1B_P_2_W_0,
6e1c90b7
L
1952 EVEX_LEN_0F3A1B_P_2_W_1,
1953 EVEX_LEN_0F3A23_P_2_W_0,
1954 EVEX_LEN_0F3A23_P_2_W_1,
1955 EVEX_LEN_0F3A38_P_2_W_0,
1956 EVEX_LEN_0F3A38_P_2_W_1,
1957 EVEX_LEN_0F3A39_P_2_W_0,
1958 EVEX_LEN_0F3A39_P_2_W_1,
1959 EVEX_LEN_0F3A3A_P_2_W_0,
1960 EVEX_LEN_0F3A3A_P_2_W_1,
1961 EVEX_LEN_0F3A3B_P_2_W_0,
1962 EVEX_LEN_0F3A3B_P_2_W_1,
1963 EVEX_LEN_0F3A43_P_2_W_0,
1964 EVEX_LEN_0F3A43_P_2_W_1
04e2a182
L
1965};
1966
9e30b8e0
L
1967enum
1968{
ec6f095a 1969 VEX_W_0F41_P_0_LEN_1 = 0,
1ba585e8 1970 VEX_W_0F41_P_2_LEN_1,
43234a1e 1971 VEX_W_0F42_P_0_LEN_1,
1ba585e8 1972 VEX_W_0F42_P_2_LEN_1,
43234a1e 1973 VEX_W_0F44_P_0_LEN_0,
1ba585e8 1974 VEX_W_0F44_P_2_LEN_0,
43234a1e 1975 VEX_W_0F45_P_0_LEN_1,
1ba585e8 1976 VEX_W_0F45_P_2_LEN_1,
43234a1e 1977 VEX_W_0F46_P_0_LEN_1,
1ba585e8 1978 VEX_W_0F46_P_2_LEN_1,
43234a1e 1979 VEX_W_0F47_P_0_LEN_1,
1ba585e8
IT
1980 VEX_W_0F47_P_2_LEN_1,
1981 VEX_W_0F4A_P_0_LEN_1,
1982 VEX_W_0F4A_P_2_LEN_1,
1983 VEX_W_0F4B_P_0_LEN_1,
43234a1e 1984 VEX_W_0F4B_P_2_LEN_1,
43234a1e 1985 VEX_W_0F90_P_0_LEN_0,
1ba585e8 1986 VEX_W_0F90_P_2_LEN_0,
43234a1e 1987 VEX_W_0F91_P_0_LEN_0,
1ba585e8 1988 VEX_W_0F91_P_2_LEN_0,
43234a1e 1989 VEX_W_0F92_P_0_LEN_0,
90a915bf 1990 VEX_W_0F92_P_2_LEN_0,
43234a1e 1991 VEX_W_0F93_P_0_LEN_0,
90a915bf 1992 VEX_W_0F93_P_2_LEN_0,
43234a1e 1993 VEX_W_0F98_P_0_LEN_0,
1ba585e8
IT
1994 VEX_W_0F98_P_2_LEN_0,
1995 VEX_W_0F99_P_0_LEN_0,
1996 VEX_W_0F99_P_2_LEN_0,
592a252b
L
1997 VEX_W_0F380C_P_2,
1998 VEX_W_0F380D_P_2,
1999 VEX_W_0F380E_P_2,
2000 VEX_W_0F380F_P_2,
6c30d220 2001 VEX_W_0F3816_P_2,
6c30d220
L
2002 VEX_W_0F3818_P_2,
2003 VEX_W_0F3819_P_2,
592a252b 2004 VEX_W_0F381A_P_2_M_0,
592a252b
L
2005 VEX_W_0F382C_P_2_M_0,
2006 VEX_W_0F382D_P_2_M_0,
2007 VEX_W_0F382E_P_2_M_0,
2008 VEX_W_0F382F_P_2_M_0,
6c30d220 2009 VEX_W_0F3836_P_2,
6c30d220
L
2010 VEX_W_0F3846_P_2,
2011 VEX_W_0F3858_P_2,
2012 VEX_W_0F3859_P_2,
2013 VEX_W_0F385A_P_2_M_0,
2014 VEX_W_0F3878_P_2,
2015 VEX_W_0F3879_P_2,
48521003 2016 VEX_W_0F38CF_P_2,
6c30d220
L
2017 VEX_W_0F3A00_P_2,
2018 VEX_W_0F3A01_P_2,
2019 VEX_W_0F3A02_P_2,
592a252b
L
2020 VEX_W_0F3A04_P_2,
2021 VEX_W_0F3A05_P_2,
2022 VEX_W_0F3A06_P_2,
592a252b
L
2023 VEX_W_0F3A18_P_2,
2024 VEX_W_0F3A19_P_2,
43234a1e 2025 VEX_W_0F3A30_P_2_LEN_0,
1ba585e8 2026 VEX_W_0F3A31_P_2_LEN_0,
43234a1e 2027 VEX_W_0F3A32_P_2_LEN_0,
1ba585e8 2028 VEX_W_0F3A33_P_2_LEN_0,
6c30d220
L
2029 VEX_W_0F3A38_P_2,
2030 VEX_W_0F3A39_P_2,
6c30d220 2031 VEX_W_0F3A46_P_2,
592a252b
L
2032 VEX_W_0F3A48_P_2,
2033 VEX_W_0F3A49_P_2,
2034 VEX_W_0F3A4A_P_2,
2035 VEX_W_0F3A4B_P_2,
2036 VEX_W_0F3A4C_P_2,
48521003
IT
2037 VEX_W_0F3ACE_P_2,
2038 VEX_W_0F3ACF_P_2,
43234a1e
L
2039
2040 EVEX_W_0F10_P_0,
36cc073e 2041 EVEX_W_0F10_P_1,
43234a1e 2042 EVEX_W_0F10_P_2,
36cc073e 2043 EVEX_W_0F10_P_3,
43234a1e 2044 EVEX_W_0F11_P_0,
36cc073e 2045 EVEX_W_0F11_P_1,
43234a1e 2046 EVEX_W_0F11_P_2,
36cc073e 2047 EVEX_W_0F11_P_3,
43234a1e
L
2048 EVEX_W_0F12_P_0_M_0,
2049 EVEX_W_0F12_P_0_M_1,
2050 EVEX_W_0F12_P_1,
2051 EVEX_W_0F12_P_2,
2052 EVEX_W_0F12_P_3,
2053 EVEX_W_0F13_P_0,
2054 EVEX_W_0F13_P_2,
2055 EVEX_W_0F14_P_0,
2056 EVEX_W_0F14_P_2,
2057 EVEX_W_0F15_P_0,
2058 EVEX_W_0F15_P_2,
2059 EVEX_W_0F16_P_0_M_0,
2060 EVEX_W_0F16_P_0_M_1,
2061 EVEX_W_0F16_P_1,
2062 EVEX_W_0F16_P_2,
2063 EVEX_W_0F17_P_0,
2064 EVEX_W_0F17_P_2,
2065 EVEX_W_0F28_P_0,
2066 EVEX_W_0F28_P_2,
2067 EVEX_W_0F29_P_0,
2068 EVEX_W_0F29_P_2,
43234a1e
L
2069 EVEX_W_0F2A_P_3,
2070 EVEX_W_0F2B_P_0,
2071 EVEX_W_0F2B_P_2,
2072 EVEX_W_0F2E_P_0,
2073 EVEX_W_0F2E_P_2,
2074 EVEX_W_0F2F_P_0,
2075 EVEX_W_0F2F_P_2,
2076 EVEX_W_0F51_P_0,
2077 EVEX_W_0F51_P_1,
2078 EVEX_W_0F51_P_2,
2079 EVEX_W_0F51_P_3,
90a915bf
IT
2080 EVEX_W_0F54_P_0,
2081 EVEX_W_0F54_P_2,
2082 EVEX_W_0F55_P_0,
2083 EVEX_W_0F55_P_2,
2084 EVEX_W_0F56_P_0,
2085 EVEX_W_0F56_P_2,
2086 EVEX_W_0F57_P_0,
2087 EVEX_W_0F57_P_2,
43234a1e
L
2088 EVEX_W_0F58_P_0,
2089 EVEX_W_0F58_P_1,
2090 EVEX_W_0F58_P_2,
2091 EVEX_W_0F58_P_3,
2092 EVEX_W_0F59_P_0,
2093 EVEX_W_0F59_P_1,
2094 EVEX_W_0F59_P_2,
2095 EVEX_W_0F59_P_3,
2096 EVEX_W_0F5A_P_0,
2097 EVEX_W_0F5A_P_1,
2098 EVEX_W_0F5A_P_2,
2099 EVEX_W_0F5A_P_3,
2100 EVEX_W_0F5B_P_0,
2101 EVEX_W_0F5B_P_1,
2102 EVEX_W_0F5B_P_2,
2103 EVEX_W_0F5C_P_0,
2104 EVEX_W_0F5C_P_1,
2105 EVEX_W_0F5C_P_2,
2106 EVEX_W_0F5C_P_3,
2107 EVEX_W_0F5D_P_0,
2108 EVEX_W_0F5D_P_1,
2109 EVEX_W_0F5D_P_2,
2110 EVEX_W_0F5D_P_3,
2111 EVEX_W_0F5E_P_0,
2112 EVEX_W_0F5E_P_1,
2113 EVEX_W_0F5E_P_2,
2114 EVEX_W_0F5E_P_3,
2115 EVEX_W_0F5F_P_0,
2116 EVEX_W_0F5F_P_1,
2117 EVEX_W_0F5F_P_2,
2118 EVEX_W_0F5F_P_3,
2119 EVEX_W_0F62_P_2,
2120 EVEX_W_0F66_P_2,
2121 EVEX_W_0F6A_P_2,
1ba585e8 2122 EVEX_W_0F6B_P_2,
43234a1e
L
2123 EVEX_W_0F6C_P_2,
2124 EVEX_W_0F6D_P_2,
43234a1e
L
2125 EVEX_W_0F6F_P_1,
2126 EVEX_W_0F6F_P_2,
1ba585e8 2127 EVEX_W_0F6F_P_3,
43234a1e
L
2128 EVEX_W_0F70_P_2,
2129 EVEX_W_0F72_R_2_P_2,
2130 EVEX_W_0F72_R_6_P_2,
2131 EVEX_W_0F73_R_2_P_2,
2132 EVEX_W_0F73_R_6_P_2,
2133 EVEX_W_0F76_P_2,
2134 EVEX_W_0F78_P_0,
90a915bf 2135 EVEX_W_0F78_P_2,
43234a1e 2136 EVEX_W_0F79_P_0,
90a915bf 2137 EVEX_W_0F79_P_2,
43234a1e 2138 EVEX_W_0F7A_P_1,
90a915bf 2139 EVEX_W_0F7A_P_2,
43234a1e 2140 EVEX_W_0F7A_P_3,
90a915bf 2141 EVEX_W_0F7B_P_2,
43234a1e
L
2142 EVEX_W_0F7B_P_3,
2143 EVEX_W_0F7E_P_1,
43234a1e
L
2144 EVEX_W_0F7F_P_1,
2145 EVEX_W_0F7F_P_2,
1ba585e8 2146 EVEX_W_0F7F_P_3,
43234a1e
L
2147 EVEX_W_0FC2_P_0,
2148 EVEX_W_0FC2_P_1,
2149 EVEX_W_0FC2_P_2,
2150 EVEX_W_0FC2_P_3,
2151 EVEX_W_0FC6_P_0,
2152 EVEX_W_0FC6_P_2,
2153 EVEX_W_0FD2_P_2,
2154 EVEX_W_0FD3_P_2,
2155 EVEX_W_0FD4_P_2,
2156 EVEX_W_0FD6_P_2,
2157 EVEX_W_0FE6_P_1,
2158 EVEX_W_0FE6_P_2,
2159 EVEX_W_0FE6_P_3,
2160 EVEX_W_0FE7_P_2,
2161 EVEX_W_0FF2_P_2,
2162 EVEX_W_0FF3_P_2,
2163 EVEX_W_0FF4_P_2,
2164 EVEX_W_0FFA_P_2,
2165 EVEX_W_0FFB_P_2,
2166 EVEX_W_0FFE_P_2,
2167 EVEX_W_0F380C_P_2,
2168 EVEX_W_0F380D_P_2,
1ba585e8
IT
2169 EVEX_W_0F3810_P_1,
2170 EVEX_W_0F3810_P_2,
43234a1e 2171 EVEX_W_0F3811_P_1,
1ba585e8 2172 EVEX_W_0F3811_P_2,
43234a1e 2173 EVEX_W_0F3812_P_1,
1ba585e8 2174 EVEX_W_0F3812_P_2,
43234a1e
L
2175 EVEX_W_0F3813_P_1,
2176 EVEX_W_0F3813_P_2,
2177 EVEX_W_0F3814_P_1,
2178 EVEX_W_0F3815_P_1,
2179 EVEX_W_0F3818_P_2,
2180 EVEX_W_0F3819_P_2,
2181 EVEX_W_0F381A_P_2,
2182 EVEX_W_0F381B_P_2,
2183 EVEX_W_0F381E_P_2,
2184 EVEX_W_0F381F_P_2,
1ba585e8 2185 EVEX_W_0F3820_P_1,
43234a1e
L
2186 EVEX_W_0F3821_P_1,
2187 EVEX_W_0F3822_P_1,
2188 EVEX_W_0F3823_P_1,
2189 EVEX_W_0F3824_P_1,
2190 EVEX_W_0F3825_P_1,
2191 EVEX_W_0F3825_P_2,
1ba585e8
IT
2192 EVEX_W_0F3826_P_1,
2193 EVEX_W_0F3826_P_2,
2194 EVEX_W_0F3828_P_1,
43234a1e 2195 EVEX_W_0F3828_P_2,
1ba585e8 2196 EVEX_W_0F3829_P_1,
43234a1e
L
2197 EVEX_W_0F3829_P_2,
2198 EVEX_W_0F382A_P_1,
2199 EVEX_W_0F382A_P_2,
1ba585e8
IT
2200 EVEX_W_0F382B_P_2,
2201 EVEX_W_0F3830_P_1,
43234a1e
L
2202 EVEX_W_0F3831_P_1,
2203 EVEX_W_0F3832_P_1,
2204 EVEX_W_0F3833_P_1,
2205 EVEX_W_0F3834_P_1,
2206 EVEX_W_0F3835_P_1,
2207 EVEX_W_0F3835_P_2,
2208 EVEX_W_0F3837_P_2,
90a915bf
IT
2209 EVEX_W_0F3838_P_1,
2210 EVEX_W_0F3839_P_1,
43234a1e
L
2211 EVEX_W_0F383A_P_1,
2212 EVEX_W_0F3840_P_2,
d6aab7a1 2213 EVEX_W_0F3852_P_1,
ee6872be 2214 EVEX_W_0F3854_P_2,
620214f7 2215 EVEX_W_0F3855_P_2,
43234a1e
L
2216 EVEX_W_0F3858_P_2,
2217 EVEX_W_0F3859_P_2,
2218 EVEX_W_0F385A_P_2,
2219 EVEX_W_0F385B_P_2,
53467f57
IT
2220 EVEX_W_0F3862_P_2,
2221 EVEX_W_0F3863_P_2,
1ba585e8 2222 EVEX_W_0F3866_P_2,
9186c494 2223 EVEX_W_0F3868_P_3,
53467f57
IT
2224 EVEX_W_0F3870_P_2,
2225 EVEX_W_0F3871_P_2,
d6aab7a1 2226 EVEX_W_0F3872_P_1,
53467f57 2227 EVEX_W_0F3872_P_2,
d6aab7a1 2228 EVEX_W_0F3872_P_3,
53467f57 2229 EVEX_W_0F3873_P_2,
1ba585e8
IT
2230 EVEX_W_0F3875_P_2,
2231 EVEX_W_0F3878_P_2,
2232 EVEX_W_0F3879_P_2,
2233 EVEX_W_0F387A_P_2,
2234 EVEX_W_0F387B_P_2,
2235 EVEX_W_0F387D_P_2,
14f195c9 2236 EVEX_W_0F3883_P_2,
1ba585e8 2237 EVEX_W_0F388D_P_2,
43234a1e
L
2238 EVEX_W_0F3891_P_2,
2239 EVEX_W_0F3893_P_2,
2240 EVEX_W_0F38A1_P_2,
2241 EVEX_W_0F38A3_P_2,
2242 EVEX_W_0F38C7_R_1_P_2,
2243 EVEX_W_0F38C7_R_2_P_2,
2244 EVEX_W_0F38C7_R_5_P_2,
2245 EVEX_W_0F38C7_R_6_P_2,
2246
2247 EVEX_W_0F3A00_P_2,
2248 EVEX_W_0F3A01_P_2,
2249 EVEX_W_0F3A04_P_2,
2250 EVEX_W_0F3A05_P_2,
2251 EVEX_W_0F3A08_P_2,
2252 EVEX_W_0F3A09_P_2,
2253 EVEX_W_0F3A0A_P_2,
2254 EVEX_W_0F3A0B_P_2,
2255 EVEX_W_0F3A18_P_2,
2256 EVEX_W_0F3A19_P_2,
2257 EVEX_W_0F3A1A_P_2,
2258 EVEX_W_0F3A1B_P_2,
2259 EVEX_W_0F3A1D_P_2,
2260 EVEX_W_0F3A21_P_2,
2261 EVEX_W_0F3A23_P_2,
2262 EVEX_W_0F3A38_P_2,
2263 EVEX_W_0F3A39_P_2,
2264 EVEX_W_0F3A3A_P_2,
2265 EVEX_W_0F3A3B_P_2,
1ba585e8
IT
2266 EVEX_W_0F3A3E_P_2,
2267 EVEX_W_0F3A3F_P_2,
2268 EVEX_W_0F3A42_P_2,
90a915bf
IT
2269 EVEX_W_0F3A43_P_2,
2270 EVEX_W_0F3A50_P_2,
2271 EVEX_W_0F3A51_P_2,
2272 EVEX_W_0F3A56_P_2,
2273 EVEX_W_0F3A57_P_2,
2274 EVEX_W_0F3A66_P_2,
53467f57
IT
2275 EVEX_W_0F3A67_P_2,
2276 EVEX_W_0F3A70_P_2,
2277 EVEX_W_0F3A71_P_2,
2278 EVEX_W_0F3A72_P_2,
48521003
IT
2279 EVEX_W_0F3A73_P_2,
2280 EVEX_W_0F3ACE_P_2,
2281 EVEX_W_0F3ACF_P_2
9e30b8e0
L
2282};
2283
26ca5450 2284typedef void (*op_rtn) (int bytemode, int sizeflag);
252b5132
RH
2285
2286struct dis386 {
2da11e11 2287 const char *name;
ce518a5f
L
2288 struct
2289 {
2290 op_rtn rtn;
2291 int bytemode;
2292 } op[MAX_OPERANDS];
bf890a93 2293 unsigned int prefix_requirement;
252b5132
RH
2294};
2295
2296/* Upper case letters in the instruction names here are macros.
2297 'A' => print 'b' if no register operands or suffix_always is true
2298 'B' => print 'b' if suffix_always is true
9306ca4a 2299 'C' => print 's' or 'l' ('w' or 'd' in Intel mode) depending on operand
98b528ac 2300 size prefix
ed7841b3 2301 'D' => print 'w' if no register operands or 'w', 'l' or 'q', if
98b528ac 2302 suffix_always is true
252b5132 2303 'E' => print 'e' if 32-bit form of jcxz
3ffd33cf 2304 'F' => print 'w' or 'l' depending on address size prefix (loop insns)
52fd6d94 2305 'G' => print 'w' or 'l' depending on operand size prefix (i/o insns)
5dd0794d 2306 'H' => print ",pt" or ",pn" branch hint
9306ca4a 2307 'I' => honor following macro letter even in Intel mode (implemented only
98b528ac 2308 for some of the macro letters)
9306ca4a 2309 'J' => print 'l'
42903f7f 2310 'K' => print 'd' or 'q' if rex prefix is present.
252b5132 2311 'L' => print 'l' if suffix_always is true
9d141669 2312 'M' => print 'r' if intel_mnemonic is false.
252b5132 2313 'N' => print 'n' if instruction has no wait "prefix"
a35ca55a 2314 'O' => print 'd' or 'o' (or 'q' in Intel mode)
52b15da3 2315 'P' => print 'w', 'l' or 'q' if instruction has an operand size prefix,
98b528ac
L
2316 or suffix_always is true. print 'q' if rex prefix is present.
2317 'Q' => print 'w', 'l' or 'q' for memory operand or suffix_always
2318 is true
a35ca55a 2319 'R' => print 'w', 'l' or 'q' ('d' for 'l' and 'e' in Intel mode)
52b15da3 2320 'S' => print 'w', 'l' or 'q' if suffix_always is true
a72d2af2
L
2321 'T' => print 'q' in 64bit mode if instruction has no operand size
2322 prefix and behave as 'P' otherwise
2323 'U' => print 'q' in 64bit mode if instruction has no operand size
2324 prefix and behave as 'Q' otherwise
2325 'V' => print 'q' in 64bit mode if instruction has no operand size
2326 prefix and behave as 'S' otherwise
a35ca55a 2327 'W' => print 'b', 'w' or 'l' ('d' in Intel mode)
9306ca4a 2328 'X' => print 's', 'd' depending on data16 prefix (for XMM)
9646c87b 2329 'Y' unused.
6dd5059a 2330 'Z' => print 'q' in 64bit mode and behave as 'L' otherwise
9d141669 2331 '!' => change condition from true to false or from false to true.
98b528ac 2332 '%' => add 1 upper case letter to the macro.
a72d2af2
L
2333 '^' => print 'w' or 'l' depending on operand size prefix or
2334 suffix_always is true (lcall/ljmp).
5db04b09
L
2335 '@' => print 'q' for Intel64 ISA, 'w' or 'q' for AMD64 ISA depending
2336 on operand size prefix.
07f5af7d
L
2337 '&' => print 'q' in 64bit mode for Intel64 ISA or if instruction
2338 has no operand size prefix for AMD64 ISA, behave as 'P'
2339 otherwise
98b528ac
L
2340
2341 2 upper case letter macros:
04d824a4
JB
2342 "XY" => print 'x' or 'y' if suffix_always is true or no register
2343 operands and no broadcast.
2344 "XZ" => print 'x', 'y', or 'z' if suffix_always is true or no
2345 register operands and no broadcast.
4b06377f
L
2346 "XW" => print 's', 'd' depending on the VEX.W bit (for FMA)
2347 "LQ" => print 'l' ('d' in Intel mode) or 'q' for memory operand
98b528ac 2348 or suffix_always is true
4b06377f
L
2349 "LB" => print "abs" in 64bit mode and behave as 'B' otherwise
2350 "LS" => print "abs" in 64bit mode and behave as 'S' otherwise
2351 "LV" => print "abs" for 64bit operand and behave as 'S' otherwise
6c30d220 2352 "LW" => print 'd', 'q' depending on the VEX.W bit
4b4c407a
L
2353 "LP" => print 'w' or 'l' ('d' in Intel mode) if instruction has
2354 an operand size prefix, or suffix_always is true. print
2355 'q' if rex prefix is present.
52b15da3 2356
6439fc28
AM
2357 Many of the above letters print nothing in Intel mode. See "putop"
2358 for the details.
52b15da3 2359
6439fc28 2360 Braces '{' and '}', and vertical bars '|', indicate alternative
7c52e0e8 2361 mnemonic strings for AT&T and Intel. */
252b5132 2362
6439fc28 2363static const struct dis386 dis386[] = {
252b5132 2364 /* 00 */
bf890a93
IT
2365 { "addB", { Ebh1, Gb }, 0 },
2366 { "addS", { Evh1, Gv }, 0 },
2367 { "addB", { Gb, EbS }, 0 },
2368 { "addS", { Gv, EvS }, 0 },
2369 { "addB", { AL, Ib }, 0 },
2370 { "addS", { eAX, Iv }, 0 },
4e7d34a6
L
2371 { X86_64_TABLE (X86_64_06) },
2372 { X86_64_TABLE (X86_64_07) },
252b5132 2373 /* 08 */
bf890a93
IT
2374 { "orB", { Ebh1, Gb }, 0 },
2375 { "orS", { Evh1, Gv }, 0 },
2376 { "orB", { Gb, EbS }, 0 },
2377 { "orS", { Gv, EvS }, 0 },
2378 { "orB", { AL, Ib }, 0 },
2379 { "orS", { eAX, Iv }, 0 },
4e7d34a6 2380 { X86_64_TABLE (X86_64_0D) },
592d1631 2381 { Bad_Opcode }, /* 0x0f extended opcode escape */
252b5132 2382 /* 10 */
bf890a93
IT
2383 { "adcB", { Ebh1, Gb }, 0 },
2384 { "adcS", { Evh1, Gv }, 0 },
2385 { "adcB", { Gb, EbS }, 0 },
2386 { "adcS", { Gv, EvS }, 0 },
2387 { "adcB", { AL, Ib }, 0 },
2388 { "adcS", { eAX, Iv }, 0 },
4e7d34a6
L
2389 { X86_64_TABLE (X86_64_16) },
2390 { X86_64_TABLE (X86_64_17) },
252b5132 2391 /* 18 */
bf890a93
IT
2392 { "sbbB", { Ebh1, Gb }, 0 },
2393 { "sbbS", { Evh1, Gv }, 0 },
2394 { "sbbB", { Gb, EbS }, 0 },
2395 { "sbbS", { Gv, EvS }, 0 },
2396 { "sbbB", { AL, Ib }, 0 },
2397 { "sbbS", { eAX, Iv }, 0 },
4e7d34a6
L
2398 { X86_64_TABLE (X86_64_1E) },
2399 { X86_64_TABLE (X86_64_1F) },
252b5132 2400 /* 20 */
bf890a93
IT
2401 { "andB", { Ebh1, Gb }, 0 },
2402 { "andS", { Evh1, Gv }, 0 },
2403 { "andB", { Gb, EbS }, 0 },
2404 { "andS", { Gv, EvS }, 0 },
2405 { "andB", { AL, Ib }, 0 },
2406 { "andS", { eAX, Iv }, 0 },
592d1631 2407 { Bad_Opcode }, /* SEG ES prefix */
4e7d34a6 2408 { X86_64_TABLE (X86_64_27) },
252b5132 2409 /* 28 */
bf890a93
IT
2410 { "subB", { Ebh1, Gb }, 0 },
2411 { "subS", { Evh1, Gv }, 0 },
2412 { "subB", { Gb, EbS }, 0 },
2413 { "subS", { Gv, EvS }, 0 },
2414 { "subB", { AL, Ib }, 0 },
2415 { "subS", { eAX, Iv }, 0 },
592d1631 2416 { Bad_Opcode }, /* SEG CS prefix */
4e7d34a6 2417 { X86_64_TABLE (X86_64_2F) },
252b5132 2418 /* 30 */
bf890a93
IT
2419 { "xorB", { Ebh1, Gb }, 0 },
2420 { "xorS", { Evh1, Gv }, 0 },
2421 { "xorB", { Gb, EbS }, 0 },
2422 { "xorS", { Gv, EvS }, 0 },
2423 { "xorB", { AL, Ib }, 0 },
2424 { "xorS", { eAX, Iv }, 0 },
592d1631 2425 { Bad_Opcode }, /* SEG SS prefix */
4e7d34a6 2426 { X86_64_TABLE (X86_64_37) },
252b5132 2427 /* 38 */
bf890a93
IT
2428 { "cmpB", { Eb, Gb }, 0 },
2429 { "cmpS", { Ev, Gv }, 0 },
2430 { "cmpB", { Gb, EbS }, 0 },
2431 { "cmpS", { Gv, EvS }, 0 },
2432 { "cmpB", { AL, Ib }, 0 },
2433 { "cmpS", { eAX, Iv }, 0 },
592d1631 2434 { Bad_Opcode }, /* SEG DS prefix */
4e7d34a6 2435 { X86_64_TABLE (X86_64_3F) },
252b5132 2436 /* 40 */
bf890a93
IT
2437 { "inc{S|}", { RMeAX }, 0 },
2438 { "inc{S|}", { RMeCX }, 0 },
2439 { "inc{S|}", { RMeDX }, 0 },
2440 { "inc{S|}", { RMeBX }, 0 },
2441 { "inc{S|}", { RMeSP }, 0 },
2442 { "inc{S|}", { RMeBP }, 0 },
2443 { "inc{S|}", { RMeSI }, 0 },
2444 { "inc{S|}", { RMeDI }, 0 },
252b5132 2445 /* 48 */
bf890a93
IT
2446 { "dec{S|}", { RMeAX }, 0 },
2447 { "dec{S|}", { RMeCX }, 0 },
2448 { "dec{S|}", { RMeDX }, 0 },
2449 { "dec{S|}", { RMeBX }, 0 },
2450 { "dec{S|}", { RMeSP }, 0 },
2451 { "dec{S|}", { RMeBP }, 0 },
2452 { "dec{S|}", { RMeSI }, 0 },
2453 { "dec{S|}", { RMeDI }, 0 },
252b5132 2454 /* 50 */
bf890a93
IT
2455 { "pushV", { RMrAX }, 0 },
2456 { "pushV", { RMrCX }, 0 },
2457 { "pushV", { RMrDX }, 0 },
2458 { "pushV", { RMrBX }, 0 },
2459 { "pushV", { RMrSP }, 0 },
2460 { "pushV", { RMrBP }, 0 },
2461 { "pushV", { RMrSI }, 0 },
2462 { "pushV", { RMrDI }, 0 },
252b5132 2463 /* 58 */
bf890a93
IT
2464 { "popV", { RMrAX }, 0 },
2465 { "popV", { RMrCX }, 0 },
2466 { "popV", { RMrDX }, 0 },
2467 { "popV", { RMrBX }, 0 },
2468 { "popV", { RMrSP }, 0 },
2469 { "popV", { RMrBP }, 0 },
2470 { "popV", { RMrSI }, 0 },
2471 { "popV", { RMrDI }, 0 },
252b5132 2472 /* 60 */
4e7d34a6
L
2473 { X86_64_TABLE (X86_64_60) },
2474 { X86_64_TABLE (X86_64_61) },
2475 { X86_64_TABLE (X86_64_62) },
2476 { X86_64_TABLE (X86_64_63) },
592d1631
L
2477 { Bad_Opcode }, /* seg fs */
2478 { Bad_Opcode }, /* seg gs */
2479 { Bad_Opcode }, /* op size prefix */
2480 { Bad_Opcode }, /* adr size prefix */
252b5132 2481 /* 68 */
bf890a93
IT
2482 { "pushT", { sIv }, 0 },
2483 { "imulS", { Gv, Ev, Iv }, 0 },
2484 { "pushT", { sIbT }, 0 },
2485 { "imulS", { Gv, Ev, sIb }, 0 },
2486 { "ins{b|}", { Ybr, indirDX }, 0 },
4e7d34a6 2487 { X86_64_TABLE (X86_64_6D) },
bf890a93 2488 { "outs{b|}", { indirDXr, Xb }, 0 },
4e7d34a6 2489 { X86_64_TABLE (X86_64_6F) },
252b5132 2490 /* 70 */
bf890a93
IT
2491 { "joH", { Jb, BND, cond_jump_flag }, 0 },
2492 { "jnoH", { Jb, BND, cond_jump_flag }, 0 },
2493 { "jbH", { Jb, BND, cond_jump_flag }, 0 },
2494 { "jaeH", { Jb, BND, cond_jump_flag }, 0 },
2495 { "jeH", { Jb, BND, cond_jump_flag }, 0 },
2496 { "jneH", { Jb, BND, cond_jump_flag }, 0 },
2497 { "jbeH", { Jb, BND, cond_jump_flag }, 0 },
2498 { "jaH", { Jb, BND, cond_jump_flag }, 0 },
252b5132 2499 /* 78 */
bf890a93
IT
2500 { "jsH", { Jb, BND, cond_jump_flag }, 0 },
2501 { "jnsH", { Jb, BND, cond_jump_flag }, 0 },
2502 { "jpH", { Jb, BND, cond_jump_flag }, 0 },
2503 { "jnpH", { Jb, BND, cond_jump_flag }, 0 },
2504 { "jlH", { Jb, BND, cond_jump_flag }, 0 },
2505 { "jgeH", { Jb, BND, cond_jump_flag }, 0 },
2506 { "jleH", { Jb, BND, cond_jump_flag }, 0 },
2507 { "jgH", { Jb, BND, cond_jump_flag }, 0 },
252b5132 2508 /* 80 */
1ceb70f8
L
2509 { REG_TABLE (REG_80) },
2510 { REG_TABLE (REG_81) },
d039fef3 2511 { X86_64_TABLE (X86_64_82) },
7148c369 2512 { REG_TABLE (REG_83) },
bf890a93
IT
2513 { "testB", { Eb, Gb }, 0 },
2514 { "testS", { Ev, Gv }, 0 },
2515 { "xchgB", { Ebh2, Gb }, 0 },
2516 { "xchgS", { Evh2, Gv }, 0 },
252b5132 2517 /* 88 */
bf890a93
IT
2518 { "movB", { Ebh3, Gb }, 0 },
2519 { "movS", { Evh3, Gv }, 0 },
2520 { "movB", { Gb, EbS }, 0 },
2521 { "movS", { Gv, EvS }, 0 },
2522 { "movD", { Sv, Sw }, 0 },
1ceb70f8 2523 { MOD_TABLE (MOD_8D) },
bf890a93 2524 { "movD", { Sw, Sv }, 0 },
1ceb70f8 2525 { REG_TABLE (REG_8F) },
252b5132 2526 /* 90 */
1ceb70f8 2527 { PREFIX_TABLE (PREFIX_90) },
bf890a93
IT
2528 { "xchgS", { RMeCX, eAX }, 0 },
2529 { "xchgS", { RMeDX, eAX }, 0 },
2530 { "xchgS", { RMeBX, eAX }, 0 },
2531 { "xchgS", { RMeSP, eAX }, 0 },
2532 { "xchgS", { RMeBP, eAX }, 0 },
2533 { "xchgS", { RMeSI, eAX }, 0 },
2534 { "xchgS", { RMeDI, eAX }, 0 },
252b5132 2535 /* 98 */
bf890a93
IT
2536 { "cW{t|}R", { XX }, 0 },
2537 { "cR{t|}O", { XX }, 0 },
4e7d34a6 2538 { X86_64_TABLE (X86_64_9A) },
592d1631 2539 { Bad_Opcode }, /* fwait */
bf890a93
IT
2540 { "pushfT", { XX }, 0 },
2541 { "popfT", { XX }, 0 },
2542 { "sahf", { XX }, 0 },
2543 { "lahf", { XX }, 0 },
252b5132 2544 /* a0 */
bf890a93
IT
2545 { "mov%LB", { AL, Ob }, 0 },
2546 { "mov%LS", { eAX, Ov }, 0 },
2547 { "mov%LB", { Ob, AL }, 0 },
2548 { "mov%LS", { Ov, eAX }, 0 },
2549 { "movs{b|}", { Ybr, Xb }, 0 },
2550 { "movs{R|}", { Yvr, Xv }, 0 },
2551 { "cmps{b|}", { Xb, Yb }, 0 },
2552 { "cmps{R|}", { Xv, Yv }, 0 },
252b5132 2553 /* a8 */
bf890a93
IT
2554 { "testB", { AL, Ib }, 0 },
2555 { "testS", { eAX, Iv }, 0 },
2556 { "stosB", { Ybr, AL }, 0 },
2557 { "stosS", { Yvr, eAX }, 0 },
2558 { "lodsB", { ALr, Xb }, 0 },
2559 { "lodsS", { eAXr, Xv }, 0 },
2560 { "scasB", { AL, Yb }, 0 },
2561 { "scasS", { eAX, Yv }, 0 },
252b5132 2562 /* b0 */
bf890a93
IT
2563 { "movB", { RMAL, Ib }, 0 },
2564 { "movB", { RMCL, Ib }, 0 },
2565 { "movB", { RMDL, Ib }, 0 },
2566 { "movB", { RMBL, Ib }, 0 },
2567 { "movB", { RMAH, Ib }, 0 },
2568 { "movB", { RMCH, Ib }, 0 },
2569 { "movB", { RMDH, Ib }, 0 },
2570 { "movB", { RMBH, Ib }, 0 },
252b5132 2571 /* b8 */
bf890a93
IT
2572 { "mov%LV", { RMeAX, Iv64 }, 0 },
2573 { "mov%LV", { RMeCX, Iv64 }, 0 },
2574 { "mov%LV", { RMeDX, Iv64 }, 0 },
2575 { "mov%LV", { RMeBX, Iv64 }, 0 },
2576 { "mov%LV", { RMeSP, Iv64 }, 0 },
2577 { "mov%LV", { RMeBP, Iv64 }, 0 },
2578 { "mov%LV", { RMeSI, Iv64 }, 0 },
2579 { "mov%LV", { RMeDI, Iv64 }, 0 },
252b5132 2580 /* c0 */
1ceb70f8
L
2581 { REG_TABLE (REG_C0) },
2582 { REG_TABLE (REG_C1) },
bf890a93
IT
2583 { "retT", { Iw, BND }, 0 },
2584 { "retT", { BND }, 0 },
4e7d34a6
L
2585 { X86_64_TABLE (X86_64_C4) },
2586 { X86_64_TABLE (X86_64_C5) },
1ceb70f8
L
2587 { REG_TABLE (REG_C6) },
2588 { REG_TABLE (REG_C7) },
252b5132 2589 /* c8 */
bf890a93
IT
2590 { "enterT", { Iw, Ib }, 0 },
2591 { "leaveT", { XX }, 0 },
2592 { "Jret{|f}P", { Iw }, 0 },
2593 { "Jret{|f}P", { XX }, 0 },
2594 { "int3", { XX }, 0 },
2595 { "int", { Ib }, 0 },
4e7d34a6 2596 { X86_64_TABLE (X86_64_CE) },
bf890a93 2597 { "iret%LP", { XX }, 0 },
252b5132 2598 /* d0 */
1ceb70f8
L
2599 { REG_TABLE (REG_D0) },
2600 { REG_TABLE (REG_D1) },
2601 { REG_TABLE (REG_D2) },
2602 { REG_TABLE (REG_D3) },
4e7d34a6
L
2603 { X86_64_TABLE (X86_64_D4) },
2604 { X86_64_TABLE (X86_64_D5) },
592d1631 2605 { Bad_Opcode },
bf890a93 2606 { "xlat", { DSBX }, 0 },
252b5132
RH
2607 /* d8 */
2608 { FLOAT },
2609 { FLOAT },
2610 { FLOAT },
2611 { FLOAT },
2612 { FLOAT },
2613 { FLOAT },
2614 { FLOAT },
2615 { FLOAT },
2616 /* e0 */
bf890a93
IT
2617 { "loopneFH", { Jb, XX, loop_jcxz_flag }, 0 },
2618 { "loopeFH", { Jb, XX, loop_jcxz_flag }, 0 },
2619 { "loopFH", { Jb, XX, loop_jcxz_flag }, 0 },
2620 { "jEcxzH", { Jb, XX, loop_jcxz_flag }, 0 },
2621 { "inB", { AL, Ib }, 0 },
2622 { "inG", { zAX, Ib }, 0 },
2623 { "outB", { Ib, AL }, 0 },
2624 { "outG", { Ib, zAX }, 0 },
252b5132 2625 /* e8 */
a72d2af2
L
2626 { X86_64_TABLE (X86_64_E8) },
2627 { X86_64_TABLE (X86_64_E9) },
4e7d34a6 2628 { X86_64_TABLE (X86_64_EA) },
bf890a93
IT
2629 { "jmp", { Jb, BND }, 0 },
2630 { "inB", { AL, indirDX }, 0 },
2631 { "inG", { zAX, indirDX }, 0 },
2632 { "outB", { indirDX, AL }, 0 },
2633 { "outG", { indirDX, zAX }, 0 },
252b5132 2634 /* f0 */
592d1631 2635 { Bad_Opcode }, /* lock prefix */
bf890a93 2636 { "icebp", { XX }, 0 },
592d1631
L
2637 { Bad_Opcode }, /* repne */
2638 { Bad_Opcode }, /* repz */
bf890a93
IT
2639 { "hlt", { XX }, 0 },
2640 { "cmc", { XX }, 0 },
1ceb70f8
L
2641 { REG_TABLE (REG_F6) },
2642 { REG_TABLE (REG_F7) },
252b5132 2643 /* f8 */
bf890a93
IT
2644 { "clc", { XX }, 0 },
2645 { "stc", { XX }, 0 },
2646 { "cli", { XX }, 0 },
2647 { "sti", { XX }, 0 },
2648 { "cld", { XX }, 0 },
2649 { "std", { XX }, 0 },
1ceb70f8
L
2650 { REG_TABLE (REG_FE) },
2651 { REG_TABLE (REG_FF) },
252b5132
RH
2652};
2653
6439fc28 2654static const struct dis386 dis386_twobyte[] = {
252b5132 2655 /* 00 */
1ceb70f8
L
2656 { REG_TABLE (REG_0F00 ) },
2657 { REG_TABLE (REG_0F01 ) },
bf890a93
IT
2658 { "larS", { Gv, Ew }, 0 },
2659 { "lslS", { Gv, Ew }, 0 },
592d1631 2660 { Bad_Opcode },
bf890a93
IT
2661 { "syscall", { XX }, 0 },
2662 { "clts", { XX }, 0 },
2663 { "sysret%LP", { XX }, 0 },
252b5132 2664 /* 08 */
bf890a93 2665 { "invd", { XX }, 0 },
3233d7d0 2666 { PREFIX_TABLE (PREFIX_0F09) },
592d1631 2667 { Bad_Opcode },
bf890a93 2668 { "ud2", { XX }, 0 },
592d1631 2669 { Bad_Opcode },
b5b1fc4f 2670 { REG_TABLE (REG_0F0D) },
bf890a93
IT
2671 { "femms", { XX }, 0 },
2672 { "", { MX, EM, OPSUF }, 0 }, /* See OP_3DNowSuffix. */
252b5132 2673 /* 10 */
1ceb70f8
L
2674 { PREFIX_TABLE (PREFIX_0F10) },
2675 { PREFIX_TABLE (PREFIX_0F11) },
2676 { PREFIX_TABLE (PREFIX_0F12) },
2677 { MOD_TABLE (MOD_0F13) },
507bd325
L
2678 { "unpcklpX", { XM, EXx }, PREFIX_OPCODE },
2679 { "unpckhpX", { XM, EXx }, PREFIX_OPCODE },
1ceb70f8
L
2680 { PREFIX_TABLE (PREFIX_0F16) },
2681 { MOD_TABLE (MOD_0F17) },
252b5132 2682 /* 18 */
1ceb70f8 2683 { REG_TABLE (REG_0F18) },
bf890a93 2684 { "nopQ", { Ev }, 0 },
7e8b059b
L
2685 { PREFIX_TABLE (PREFIX_0F1A) },
2686 { PREFIX_TABLE (PREFIX_0F1B) },
c48935d7 2687 { PREFIX_TABLE (PREFIX_0F1C) },
bf890a93 2688 { "nopQ", { Ev }, 0 },
603555e5 2689 { PREFIX_TABLE (PREFIX_0F1E) },
bf890a93 2690 { "nopQ", { Ev }, 0 },
252b5132 2691 /* 20 */
bf890a93
IT
2692 { "movZ", { Rm, Cm }, 0 },
2693 { "movZ", { Rm, Dm }, 0 },
2694 { "movZ", { Cm, Rm }, 0 },
2695 { "movZ", { Dm, Rm }, 0 },
1ceb70f8 2696 { MOD_TABLE (MOD_0F24) },
592d1631 2697 { Bad_Opcode },
1ceb70f8 2698 { MOD_TABLE (MOD_0F26) },
592d1631 2699 { Bad_Opcode },
252b5132 2700 /* 28 */
507bd325
L
2701 { "movapX", { XM, EXx }, PREFIX_OPCODE },
2702 { "movapX", { EXxS, XM }, PREFIX_OPCODE },
1ceb70f8
L
2703 { PREFIX_TABLE (PREFIX_0F2A) },
2704 { PREFIX_TABLE (PREFIX_0F2B) },
2705 { PREFIX_TABLE (PREFIX_0F2C) },
2706 { PREFIX_TABLE (PREFIX_0F2D) },
2707 { PREFIX_TABLE (PREFIX_0F2E) },
2708 { PREFIX_TABLE (PREFIX_0F2F) },
252b5132 2709 /* 30 */
bf890a93
IT
2710 { "wrmsr", { XX }, 0 },
2711 { "rdtsc", { XX }, 0 },
2712 { "rdmsr", { XX }, 0 },
2713 { "rdpmc", { XX }, 0 },
2714 { "sysenter", { XX }, 0 },
2715 { "sysexit", { XX }, 0 },
592d1631 2716 { Bad_Opcode },
bf890a93 2717 { "getsec", { XX }, 0 },
252b5132 2718 /* 38 */
507bd325 2719 { THREE_BYTE_TABLE_PREFIX (THREE_BYTE_0F38, PREFIX_OPCODE) },
592d1631 2720 { Bad_Opcode },
507bd325 2721 { THREE_BYTE_TABLE_PREFIX (THREE_BYTE_0F3A, PREFIX_OPCODE) },
592d1631
L
2722 { Bad_Opcode },
2723 { Bad_Opcode },
2724 { Bad_Opcode },
2725 { Bad_Opcode },
2726 { Bad_Opcode },
252b5132 2727 /* 40 */
bf890a93
IT
2728 { "cmovoS", { Gv, Ev }, 0 },
2729 { "cmovnoS", { Gv, Ev }, 0 },
2730 { "cmovbS", { Gv, Ev }, 0 },
2731 { "cmovaeS", { Gv, Ev }, 0 },
2732 { "cmoveS", { Gv, Ev }, 0 },
2733 { "cmovneS", { Gv, Ev }, 0 },
2734 { "cmovbeS", { Gv, Ev }, 0 },
2735 { "cmovaS", { Gv, Ev }, 0 },
252b5132 2736 /* 48 */
bf890a93
IT
2737 { "cmovsS", { Gv, Ev }, 0 },
2738 { "cmovnsS", { Gv, Ev }, 0 },
2739 { "cmovpS", { Gv, Ev }, 0 },
2740 { "cmovnpS", { Gv, Ev }, 0 },
2741 { "cmovlS", { Gv, Ev }, 0 },
2742 { "cmovgeS", { Gv, Ev }, 0 },
2743 { "cmovleS", { Gv, Ev }, 0 },
2744 { "cmovgS", { Gv, Ev }, 0 },
252b5132 2745 /* 50 */
75c135a8 2746 { MOD_TABLE (MOD_0F51) },
1ceb70f8
L
2747 { PREFIX_TABLE (PREFIX_0F51) },
2748 { PREFIX_TABLE (PREFIX_0F52) },
2749 { PREFIX_TABLE (PREFIX_0F53) },
507bd325
L
2750 { "andpX", { XM, EXx }, PREFIX_OPCODE },
2751 { "andnpX", { XM, EXx }, PREFIX_OPCODE },
2752 { "orpX", { XM, EXx }, PREFIX_OPCODE },
2753 { "xorpX", { XM, EXx }, PREFIX_OPCODE },
252b5132 2754 /* 58 */
1ceb70f8
L
2755 { PREFIX_TABLE (PREFIX_0F58) },
2756 { PREFIX_TABLE (PREFIX_0F59) },
2757 { PREFIX_TABLE (PREFIX_0F5A) },
2758 { PREFIX_TABLE (PREFIX_0F5B) },
2759 { PREFIX_TABLE (PREFIX_0F5C) },
2760 { PREFIX_TABLE (PREFIX_0F5D) },
2761 { PREFIX_TABLE (PREFIX_0F5E) },
2762 { PREFIX_TABLE (PREFIX_0F5F) },
252b5132 2763 /* 60 */
1ceb70f8
L
2764 { PREFIX_TABLE (PREFIX_0F60) },
2765 { PREFIX_TABLE (PREFIX_0F61) },
2766 { PREFIX_TABLE (PREFIX_0F62) },
507bd325
L
2767 { "packsswb", { MX, EM }, PREFIX_OPCODE },
2768 { "pcmpgtb", { MX, EM }, PREFIX_OPCODE },
2769 { "pcmpgtw", { MX, EM }, PREFIX_OPCODE },
2770 { "pcmpgtd", { MX, EM }, PREFIX_OPCODE },
2771 { "packuswb", { MX, EM }, PREFIX_OPCODE },
252b5132 2772 /* 68 */
507bd325
L
2773 { "punpckhbw", { MX, EM }, PREFIX_OPCODE },
2774 { "punpckhwd", { MX, EM }, PREFIX_OPCODE },
2775 { "punpckhdq", { MX, EM }, PREFIX_OPCODE },
2776 { "packssdw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8
L
2777 { PREFIX_TABLE (PREFIX_0F6C) },
2778 { PREFIX_TABLE (PREFIX_0F6D) },
507bd325 2779 { "movK", { MX, Edq }, PREFIX_OPCODE },
1ceb70f8 2780 { PREFIX_TABLE (PREFIX_0F6F) },
252b5132 2781 /* 70 */
1ceb70f8
L
2782 { PREFIX_TABLE (PREFIX_0F70) },
2783 { REG_TABLE (REG_0F71) },
2784 { REG_TABLE (REG_0F72) },
2785 { REG_TABLE (REG_0F73) },
507bd325
L
2786 { "pcmpeqb", { MX, EM }, PREFIX_OPCODE },
2787 { "pcmpeqw", { MX, EM }, PREFIX_OPCODE },
2788 { "pcmpeqd", { MX, EM }, PREFIX_OPCODE },
2789 { "emms", { XX }, PREFIX_OPCODE },
252b5132 2790 /* 78 */
1ceb70f8
L
2791 { PREFIX_TABLE (PREFIX_0F78) },
2792 { PREFIX_TABLE (PREFIX_0F79) },
1f334aeb 2793 { Bad_Opcode },
592d1631 2794 { Bad_Opcode },
1ceb70f8
L
2795 { PREFIX_TABLE (PREFIX_0F7C) },
2796 { PREFIX_TABLE (PREFIX_0F7D) },
2797 { PREFIX_TABLE (PREFIX_0F7E) },
2798 { PREFIX_TABLE (PREFIX_0F7F) },
252b5132 2799 /* 80 */
bf890a93
IT
2800 { "joH", { Jv, BND, cond_jump_flag }, 0 },
2801 { "jnoH", { Jv, BND, cond_jump_flag }, 0 },
2802 { "jbH", { Jv, BND, cond_jump_flag }, 0 },
2803 { "jaeH", { Jv, BND, cond_jump_flag }, 0 },
2804 { "jeH", { Jv, BND, cond_jump_flag }, 0 },
2805 { "jneH", { Jv, BND, cond_jump_flag }, 0 },
2806 { "jbeH", { Jv, BND, cond_jump_flag }, 0 },
2807 { "jaH", { Jv, BND, cond_jump_flag }, 0 },
252b5132 2808 /* 88 */
bf890a93
IT
2809 { "jsH", { Jv, BND, cond_jump_flag }, 0 },
2810 { "jnsH", { Jv, BND, cond_jump_flag }, 0 },
2811 { "jpH", { Jv, BND, cond_jump_flag }, 0 },
2812 { "jnpH", { Jv, BND, cond_jump_flag }, 0 },
2813 { "jlH", { Jv, BND, cond_jump_flag }, 0 },
2814 { "jgeH", { Jv, BND, cond_jump_flag }, 0 },
2815 { "jleH", { Jv, BND, cond_jump_flag }, 0 },
2816 { "jgH", { Jv, BND, cond_jump_flag }, 0 },
252b5132 2817 /* 90 */
bf890a93
IT
2818 { "seto", { Eb }, 0 },
2819 { "setno", { Eb }, 0 },
2820 { "setb", { Eb }, 0 },
2821 { "setae", { Eb }, 0 },
2822 { "sete", { Eb }, 0 },
2823 { "setne", { Eb }, 0 },
2824 { "setbe", { Eb }, 0 },
2825 { "seta", { Eb }, 0 },
252b5132 2826 /* 98 */
bf890a93
IT
2827 { "sets", { Eb }, 0 },
2828 { "setns", { Eb }, 0 },
2829 { "setp", { Eb }, 0 },
2830 { "setnp", { Eb }, 0 },
2831 { "setl", { Eb }, 0 },
2832 { "setge", { Eb }, 0 },
2833 { "setle", { Eb }, 0 },
2834 { "setg", { Eb }, 0 },
252b5132 2835 /* a0 */
bf890a93
IT
2836 { "pushT", { fs }, 0 },
2837 { "popT", { fs }, 0 },
2838 { "cpuid", { XX }, 0 },
2839 { "btS", { Ev, Gv }, 0 },
2840 { "shldS", { Ev, Gv, Ib }, 0 },
2841 { "shldS", { Ev, Gv, CL }, 0 },
1ceb70f8
L
2842 { REG_TABLE (REG_0FA6) },
2843 { REG_TABLE (REG_0FA7) },
252b5132 2844 /* a8 */
bf890a93
IT
2845 { "pushT", { gs }, 0 },
2846 { "popT", { gs }, 0 },
2847 { "rsm", { XX }, 0 },
2848 { "btsS", { Evh1, Gv }, 0 },
2849 { "shrdS", { Ev, Gv, Ib }, 0 },
2850 { "shrdS", { Ev, Gv, CL }, 0 },
1ceb70f8 2851 { REG_TABLE (REG_0FAE) },
bf890a93 2852 { "imulS", { Gv, Ev }, 0 },
252b5132 2853 /* b0 */
bf890a93
IT
2854 { "cmpxchgB", { Ebh1, Gb }, 0 },
2855 { "cmpxchgS", { Evh1, Gv }, 0 },
1ceb70f8 2856 { MOD_TABLE (MOD_0FB2) },
bf890a93 2857 { "btrS", { Evh1, Gv }, 0 },
1ceb70f8
L
2858 { MOD_TABLE (MOD_0FB4) },
2859 { MOD_TABLE (MOD_0FB5) },
bf890a93
IT
2860 { "movz{bR|x}", { Gv, Eb }, 0 },
2861 { "movz{wR|x}", { Gv, Ew }, 0 }, /* yes, there really is movzww ! */
252b5132 2862 /* b8 */
1ceb70f8 2863 { PREFIX_TABLE (PREFIX_0FB8) },
66f1eba0 2864 { "ud1S", { Gv, Ev }, 0 },
1ceb70f8 2865 { REG_TABLE (REG_0FBA) },
bf890a93 2866 { "btcS", { Evh1, Gv }, 0 },
f12dc422 2867 { PREFIX_TABLE (PREFIX_0FBC) },
1ceb70f8 2868 { PREFIX_TABLE (PREFIX_0FBD) },
bf890a93
IT
2869 { "movs{bR|x}", { Gv, Eb }, 0 },
2870 { "movs{wR|x}", { Gv, Ew }, 0 }, /* yes, there really is movsww ! */
252b5132 2871 /* c0 */
bf890a93
IT
2872 { "xaddB", { Ebh1, Gb }, 0 },
2873 { "xaddS", { Evh1, Gv }, 0 },
1ceb70f8 2874 { PREFIX_TABLE (PREFIX_0FC2) },
a8484f96 2875 { MOD_TABLE (MOD_0FC3) },
507bd325
L
2876 { "pinsrw", { MX, Edqw, Ib }, PREFIX_OPCODE },
2877 { "pextrw", { Gdq, MS, Ib }, PREFIX_OPCODE },
2878 { "shufpX", { XM, EXx, Ib }, PREFIX_OPCODE },
1ceb70f8 2879 { REG_TABLE (REG_0FC7) },
252b5132 2880 /* c8 */
bf890a93
IT
2881 { "bswap", { RMeAX }, 0 },
2882 { "bswap", { RMeCX }, 0 },
2883 { "bswap", { RMeDX }, 0 },
2884 { "bswap", { RMeBX }, 0 },
2885 { "bswap", { RMeSP }, 0 },
2886 { "bswap", { RMeBP }, 0 },
2887 { "bswap", { RMeSI }, 0 },
2888 { "bswap", { RMeDI }, 0 },
252b5132 2889 /* d0 */
1ceb70f8 2890 { PREFIX_TABLE (PREFIX_0FD0) },
507bd325
L
2891 { "psrlw", { MX, EM }, PREFIX_OPCODE },
2892 { "psrld", { MX, EM }, PREFIX_OPCODE },
2893 { "psrlq", { MX, EM }, PREFIX_OPCODE },
2894 { "paddq", { MX, EM }, PREFIX_OPCODE },
2895 { "pmullw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8 2896 { PREFIX_TABLE (PREFIX_0FD6) },
75c135a8 2897 { MOD_TABLE (MOD_0FD7) },
252b5132 2898 /* d8 */
507bd325
L
2899 { "psubusb", { MX, EM }, PREFIX_OPCODE },
2900 { "psubusw", { MX, EM }, PREFIX_OPCODE },
2901 { "pminub", { MX, EM }, PREFIX_OPCODE },
2902 { "pand", { MX, EM }, PREFIX_OPCODE },
2903 { "paddusb", { MX, EM }, PREFIX_OPCODE },
2904 { "paddusw", { MX, EM }, PREFIX_OPCODE },
2905 { "pmaxub", { MX, EM }, PREFIX_OPCODE },
2906 { "pandn", { MX, EM }, PREFIX_OPCODE },
252b5132 2907 /* e0 */
507bd325
L
2908 { "pavgb", { MX, EM }, PREFIX_OPCODE },
2909 { "psraw", { MX, EM }, PREFIX_OPCODE },
2910 { "psrad", { MX, EM }, PREFIX_OPCODE },
2911 { "pavgw", { MX, EM }, PREFIX_OPCODE },
2912 { "pmulhuw", { MX, EM }, PREFIX_OPCODE },
2913 { "pmulhw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8
L
2914 { PREFIX_TABLE (PREFIX_0FE6) },
2915 { PREFIX_TABLE (PREFIX_0FE7) },
252b5132 2916 /* e8 */
507bd325
L
2917 { "psubsb", { MX, EM }, PREFIX_OPCODE },
2918 { "psubsw", { MX, EM }, PREFIX_OPCODE },
2919 { "pminsw", { MX, EM }, PREFIX_OPCODE },
2920 { "por", { MX, EM }, PREFIX_OPCODE },
2921 { "paddsb", { MX, EM }, PREFIX_OPCODE },
2922 { "paddsw", { MX, EM }, PREFIX_OPCODE },
2923 { "pmaxsw", { MX, EM }, PREFIX_OPCODE },
2924 { "pxor", { MX, EM }, PREFIX_OPCODE },
252b5132 2925 /* f0 */
1ceb70f8 2926 { PREFIX_TABLE (PREFIX_0FF0) },
507bd325
L
2927 { "psllw", { MX, EM }, PREFIX_OPCODE },
2928 { "pslld", { MX, EM }, PREFIX_OPCODE },
2929 { "psllq", { MX, EM }, PREFIX_OPCODE },
2930 { "pmuludq", { MX, EM }, PREFIX_OPCODE },
2931 { "pmaddwd", { MX, EM }, PREFIX_OPCODE },
2932 { "psadbw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8 2933 { PREFIX_TABLE (PREFIX_0FF7) },
252b5132 2934 /* f8 */
507bd325
L
2935 { "psubb", { MX, EM }, PREFIX_OPCODE },
2936 { "psubw", { MX, EM }, PREFIX_OPCODE },
2937 { "psubd", { MX, EM }, PREFIX_OPCODE },
2938 { "psubq", { MX, EM }, PREFIX_OPCODE },
2939 { "paddb", { MX, EM }, PREFIX_OPCODE },
2940 { "paddw", { MX, EM }, PREFIX_OPCODE },
2941 { "paddd", { MX, EM }, PREFIX_OPCODE },
66f1eba0 2942 { "ud0S", { Gv, Ev }, 0 },
252b5132
RH
2943};
2944
2945static const unsigned char onebyte_has_modrm[256] = {
c608c12e
AM
2946 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2947 /* ------------------------------- */
2948 /* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 00 */
2949 /* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 10 */
2950 /* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 20 */
2951 /* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 30 */
2952 /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40 */
2953 /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50 */
2954 /* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, /* 60 */
2955 /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70 */
2956 /* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 80 */
2957 /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 90 */
2958 /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* a0 */
2959 /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* b0 */
2960 /* c0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* c0 */
2961 /* d0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* d0 */
2962 /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* e0 */
2963 /* f0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1 /* f0 */
2964 /* ------------------------------- */
2965 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
252b5132
RH
2966};
2967
2968static const unsigned char twobyte_has_modrm[256] = {
c608c12e
AM
2969 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2970 /* ------------------------------- */
252b5132 2971 /* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */
b5b1fc4f 2972 /* 10 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1f */
85f10a01 2973 /* 20 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 2f */
331d2d0d 2974 /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
252b5132 2975 /* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */
4bba6815
AM
2976 /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */
2977 /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */
85f10a01 2978 /* 70 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 7f */
252b5132
RH
2979 /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
2980 /* 90 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9f */
30d1c836 2981 /* a0 */ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1, /* af */
66f1eba0 2982 /* b0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* bf */
252b5132 2983 /* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */
ca164297 2984 /* d0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
4bba6815 2985 /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
66f1eba0 2986 /* f0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 /* ff */
c608c12e
AM
2987 /* ------------------------------- */
2988 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2989};
2990
252b5132
RH
2991static char obuf[100];
2992static char *obufp;
ea397f5b 2993static char *mnemonicendp;
252b5132
RH
2994static char scratchbuf[100];
2995static unsigned char *start_codep;
2996static unsigned char *insn_codep;
2997static unsigned char *codep;
285ca992 2998static unsigned char *end_codep;
f16cd0d5
L
2999static int last_lock_prefix;
3000static int last_repz_prefix;
3001static int last_repnz_prefix;
3002static int last_data_prefix;
3003static int last_addr_prefix;
3004static int last_rex_prefix;
3005static int last_seg_prefix;
d9949a36 3006static int fwait_prefix;
285ca992
L
3007/* The active segment register prefix. */
3008static int active_seg_prefix;
f16cd0d5
L
3009#define MAX_CODE_LENGTH 15
3010/* We can up to 14 prefixes since the maximum instruction length is
3011 15bytes. */
3012static int all_prefixes[MAX_CODE_LENGTH - 1];
252b5132 3013static disassemble_info *the_info;
7967e09e
L
3014static struct
3015 {
3016 int mod;
7967e09e 3017 int reg;
484c222e 3018 int rm;
7967e09e
L
3019 }
3020modrm;
4bba6815 3021static unsigned char need_modrm;
dfc8cf43
L
3022static struct
3023 {
3024 int scale;
3025 int index;
3026 int base;
3027 }
3028sib;
c0f3af97
L
3029static struct
3030 {
3031 int register_specifier;
3032 int length;
3033 int prefix;
3034 int w;
43234a1e
L
3035 int evex;
3036 int r;
3037 int v;
3038 int mask_register_specifier;
3039 int zeroing;
3040 int ll;
3041 int b;
c0f3af97
L
3042 }
3043vex;
3044static unsigned char need_vex;
3045static unsigned char need_vex_reg;
dae39acc 3046static unsigned char vex_w_done;
252b5132 3047
ea397f5b
L
3048struct op
3049 {
3050 const char *name;
3051 unsigned int len;
3052 };
3053
4bba6815
AM
3054/* If we are accessing mod/rm/reg without need_modrm set, then the
3055 values are stale. Hitting this abort likely indicates that you
3056 need to update onebyte_has_modrm or twobyte_has_modrm. */
3057#define MODRM_CHECK if (!need_modrm) abort ()
3058
d708bcba
AM
3059static const char **names64;
3060static const char **names32;
3061static const char **names16;
3062static const char **names8;
3063static const char **names8rex;
3064static const char **names_seg;
db51cc60
L
3065static const char *index64;
3066static const char *index32;
d708bcba 3067static const char **index16;
7e8b059b 3068static const char **names_bnd;
d708bcba
AM
3069
3070static const char *intel_names64[] = {
3071 "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
3072 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
3073};
3074static const char *intel_names32[] = {
3075 "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
3076 "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"
3077};
3078static const char *intel_names16[] = {
3079 "ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
3080 "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
3081};
3082static const char *intel_names8[] = {
3083 "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh",
3084};
3085static const char *intel_names8rex[] = {
3086 "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
3087 "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"
3088};
3089static const char *intel_names_seg[] = {
3090 "es", "cs", "ss", "ds", "fs", "gs", "?", "?",
3091};
db51cc60
L
3092static const char *intel_index64 = "riz";
3093static const char *intel_index32 = "eiz";
d708bcba
AM
3094static const char *intel_index16[] = {
3095 "bx+si", "bx+di", "bp+si", "bp+di", "si", "di", "bp", "bx"
3096};
3097
3098static const char *att_names64[] = {
3099 "%rax", "%rcx", "%rdx", "%rbx", "%rsp", "%rbp", "%rsi", "%rdi",
52b15da3
JH
3100 "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
3101};
d708bcba
AM
3102static const char *att_names32[] = {
3103 "%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi",
52b15da3 3104 "%r8d", "%r9d", "%r10d", "%r11d", "%r12d", "%r13d", "%r14d", "%r15d"
252b5132 3105};
d708bcba
AM
3106static const char *att_names16[] = {
3107 "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di",
52b15da3 3108 "%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w"
252b5132 3109};
d708bcba
AM
3110static const char *att_names8[] = {
3111 "%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh",
252b5132 3112};
d708bcba
AM
3113static const char *att_names8rex[] = {
3114 "%al", "%cl", "%dl", "%bl", "%spl", "%bpl", "%sil", "%dil",
52b15da3
JH
3115 "%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b"
3116};
d708bcba
AM
3117static const char *att_names_seg[] = {
3118 "%es", "%cs", "%ss", "%ds", "%fs", "%gs", "%?", "%?",
252b5132 3119};
db51cc60
L
3120static const char *att_index64 = "%riz";
3121static const char *att_index32 = "%eiz";
d708bcba
AM
3122static const char *att_index16[] = {
3123 "%bx,%si", "%bx,%di", "%bp,%si", "%bp,%di", "%si", "%di", "%bp", "%bx"
252b5132
RH
3124};
3125
b9733481
L
3126static const char **names_mm;
3127static const char *intel_names_mm[] = {
3128 "mm0", "mm1", "mm2", "mm3",
3129 "mm4", "mm5", "mm6", "mm7"
3130};
3131static const char *att_names_mm[] = {
3132 "%mm0", "%mm1", "%mm2", "%mm3",
3133 "%mm4", "%mm5", "%mm6", "%mm7"
3134};
3135
7e8b059b
L
3136static const char *intel_names_bnd[] = {
3137 "bnd0", "bnd1", "bnd2", "bnd3"
3138};
3139
3140static const char *att_names_bnd[] = {
3141 "%bnd0", "%bnd1", "%bnd2", "%bnd3"
3142};
3143
b9733481
L
3144static const char **names_xmm;
3145static const char *intel_names_xmm[] = {
3146 "xmm0", "xmm1", "xmm2", "xmm3",
3147 "xmm4", "xmm5", "xmm6", "xmm7",
3148 "xmm8", "xmm9", "xmm10", "xmm11",
43234a1e
L
3149 "xmm12", "xmm13", "xmm14", "xmm15",
3150 "xmm16", "xmm17", "xmm18", "xmm19",
3151 "xmm20", "xmm21", "xmm22", "xmm23",
3152 "xmm24", "xmm25", "xmm26", "xmm27",
3153 "xmm28", "xmm29", "xmm30", "xmm31"
b9733481
L
3154};
3155static const char *att_names_xmm[] = {
3156 "%xmm0", "%xmm1", "%xmm2", "%xmm3",
3157 "%xmm4", "%xmm5", "%xmm6", "%xmm7",
3158 "%xmm8", "%xmm9", "%xmm10", "%xmm11",
43234a1e
L
3159 "%xmm12", "%xmm13", "%xmm14", "%xmm15",
3160 "%xmm16", "%xmm17", "%xmm18", "%xmm19",
3161 "%xmm20", "%xmm21", "%xmm22", "%xmm23",
3162 "%xmm24", "%xmm25", "%xmm26", "%xmm27",
3163 "%xmm28", "%xmm29", "%xmm30", "%xmm31"
b9733481
L
3164};
3165
3166static const char **names_ymm;
3167static const char *intel_names_ymm[] = {
3168 "ymm0", "ymm1", "ymm2", "ymm3",
3169 "ymm4", "ymm5", "ymm6", "ymm7",
3170 "ymm8", "ymm9", "ymm10", "ymm11",
43234a1e
L
3171 "ymm12", "ymm13", "ymm14", "ymm15",
3172 "ymm16", "ymm17", "ymm18", "ymm19",
3173 "ymm20", "ymm21", "ymm22", "ymm23",
3174 "ymm24", "ymm25", "ymm26", "ymm27",
3175 "ymm28", "ymm29", "ymm30", "ymm31"
b9733481
L
3176};
3177static const char *att_names_ymm[] = {
3178 "%ymm0", "%ymm1", "%ymm2", "%ymm3",
3179 "%ymm4", "%ymm5", "%ymm6", "%ymm7",
3180 "%ymm8", "%ymm9", "%ymm10", "%ymm11",
43234a1e
L
3181 "%ymm12", "%ymm13", "%ymm14", "%ymm15",
3182 "%ymm16", "%ymm17", "%ymm18", "%ymm19",
3183 "%ymm20", "%ymm21", "%ymm22", "%ymm23",
3184 "%ymm24", "%ymm25", "%ymm26", "%ymm27",
3185 "%ymm28", "%ymm29", "%ymm30", "%ymm31"
3186};
3187
3188static const char **names_zmm;
3189static const char *intel_names_zmm[] = {
3190 "zmm0", "zmm1", "zmm2", "zmm3",
3191 "zmm4", "zmm5", "zmm6", "zmm7",
3192 "zmm8", "zmm9", "zmm10", "zmm11",
3193 "zmm12", "zmm13", "zmm14", "zmm15",
3194 "zmm16", "zmm17", "zmm18", "zmm19",
3195 "zmm20", "zmm21", "zmm22", "zmm23",
3196 "zmm24", "zmm25", "zmm26", "zmm27",
3197 "zmm28", "zmm29", "zmm30", "zmm31"
3198};
3199static const char *att_names_zmm[] = {
3200 "%zmm0", "%zmm1", "%zmm2", "%zmm3",
3201 "%zmm4", "%zmm5", "%zmm6", "%zmm7",
3202 "%zmm8", "%zmm9", "%zmm10", "%zmm11",
3203 "%zmm12", "%zmm13", "%zmm14", "%zmm15",
3204 "%zmm16", "%zmm17", "%zmm18", "%zmm19",
3205 "%zmm20", "%zmm21", "%zmm22", "%zmm23",
3206 "%zmm24", "%zmm25", "%zmm26", "%zmm27",
3207 "%zmm28", "%zmm29", "%zmm30", "%zmm31"
3208};
3209
3210static const char **names_mask;
3211static const char *intel_names_mask[] = {
3212 "k0", "k1", "k2", "k3", "k4", "k5", "k6", "k7"
3213};
3214static const char *att_names_mask[] = {
3215 "%k0", "%k1", "%k2", "%k3", "%k4", "%k5", "%k6", "%k7"
3216};
3217
3218static const char *names_rounding[] =
3219{
3220 "{rn-sae}",
3221 "{rd-sae}",
3222 "{ru-sae}",
3223 "{rz-sae}"
b9733481
L
3224};
3225
1ceb70f8
L
3226static const struct dis386 reg_table[][8] = {
3227 /* REG_80 */
252b5132 3228 {
bf890a93
IT
3229 { "addA", { Ebh1, Ib }, 0 },
3230 { "orA", { Ebh1, Ib }, 0 },
3231 { "adcA", { Ebh1, Ib }, 0 },
3232 { "sbbA", { Ebh1, Ib }, 0 },
3233 { "andA", { Ebh1, Ib }, 0 },
3234 { "subA", { Ebh1, Ib }, 0 },
3235 { "xorA", { Ebh1, Ib }, 0 },
3236 { "cmpA", { Eb, Ib }, 0 },
252b5132 3237 },
1ceb70f8 3238 /* REG_81 */
252b5132 3239 {
bf890a93
IT
3240 { "addQ", { Evh1, Iv }, 0 },
3241 { "orQ", { Evh1, Iv }, 0 },
3242 { "adcQ", { Evh1, Iv }, 0 },
3243 { "sbbQ", { Evh1, Iv }, 0 },
3244 { "andQ", { Evh1, Iv }, 0 },
3245 { "subQ", { Evh1, Iv }, 0 },
3246 { "xorQ", { Evh1, Iv }, 0 },
3247 { "cmpQ", { Ev, Iv }, 0 },
252b5132 3248 },
7148c369 3249 /* REG_83 */
252b5132 3250 {
bf890a93
IT
3251 { "addQ", { Evh1, sIb }, 0 },
3252 { "orQ", { Evh1, sIb }, 0 },
3253 { "adcQ", { Evh1, sIb }, 0 },
3254 { "sbbQ", { Evh1, sIb }, 0 },
3255 { "andQ", { Evh1, sIb }, 0 },
3256 { "subQ", { Evh1, sIb }, 0 },
3257 { "xorQ", { Evh1, sIb }, 0 },
3258 { "cmpQ", { Ev, sIb }, 0 },
252b5132 3259 },
1ceb70f8 3260 /* REG_8F */
4e7d34a6 3261 {
bf890a93 3262 { "popU", { stackEv }, 0 },
c48244a5 3263 { XOP_8F_TABLE (XOP_09) },
592d1631
L
3264 { Bad_Opcode },
3265 { Bad_Opcode },
3266 { Bad_Opcode },
f88c9eb0 3267 { XOP_8F_TABLE (XOP_09) },
4e7d34a6 3268 },
1ceb70f8 3269 /* REG_C0 */
252b5132 3270 {
bf890a93
IT
3271 { "rolA", { Eb, Ib }, 0 },
3272 { "rorA", { Eb, Ib }, 0 },
3273 { "rclA", { Eb, Ib }, 0 },
3274 { "rcrA", { Eb, Ib }, 0 },
3275 { "shlA", { Eb, Ib }, 0 },
3276 { "shrA", { Eb, Ib }, 0 },
e4bdd679 3277 { "shlA", { Eb, Ib }, 0 },
bf890a93 3278 { "sarA", { Eb, Ib }, 0 },
252b5132 3279 },
1ceb70f8 3280 /* REG_C1 */
252b5132 3281 {
bf890a93
IT
3282 { "rolQ", { Ev, Ib }, 0 },
3283 { "rorQ", { Ev, Ib }, 0 },
3284 { "rclQ", { Ev, Ib }, 0 },
3285 { "rcrQ", { Ev, Ib }, 0 },
3286 { "shlQ", { Ev, Ib }, 0 },
3287 { "shrQ", { Ev, Ib }, 0 },
e4bdd679 3288 { "shlQ", { Ev, Ib }, 0 },
bf890a93 3289 { "sarQ", { Ev, Ib }, 0 },
252b5132 3290 },
1ceb70f8 3291 /* REG_C6 */
4e7d34a6 3292 {
bf890a93 3293 { "movA", { Ebh3, Ib }, 0 },
42164a71
L
3294 { Bad_Opcode },
3295 { Bad_Opcode },
3296 { Bad_Opcode },
3297 { Bad_Opcode },
3298 { Bad_Opcode },
3299 { Bad_Opcode },
3300 { MOD_TABLE (MOD_C6_REG_7) },
4e7d34a6 3301 },
1ceb70f8 3302 /* REG_C7 */
4e7d34a6 3303 {
bf890a93 3304 { "movQ", { Evh3, Iv }, 0 },
42164a71
L
3305 { Bad_Opcode },
3306 { Bad_Opcode },
3307 { Bad_Opcode },
3308 { Bad_Opcode },
3309 { Bad_Opcode },
3310 { Bad_Opcode },
3311 { MOD_TABLE (MOD_C7_REG_7) },
4e7d34a6 3312 },
1ceb70f8 3313 /* REG_D0 */
252b5132 3314 {
bf890a93
IT
3315 { "rolA", { Eb, I1 }, 0 },
3316 { "rorA", { Eb, I1 }, 0 },
3317 { "rclA", { Eb, I1 }, 0 },
3318 { "rcrA", { Eb, I1 }, 0 },
3319 { "shlA", { Eb, I1 }, 0 },
3320 { "shrA", { Eb, I1 }, 0 },
e4bdd679 3321 { "shlA", { Eb, I1 }, 0 },
bf890a93 3322 { "sarA", { Eb, I1 }, 0 },
252b5132 3323 },
1ceb70f8 3324 /* REG_D1 */
252b5132 3325 {
bf890a93
IT
3326 { "rolQ", { Ev, I1 }, 0 },
3327 { "rorQ", { Ev, I1 }, 0 },
3328 { "rclQ", { Ev, I1 }, 0 },
3329 { "rcrQ", { Ev, I1 }, 0 },
3330 { "shlQ", { Ev, I1 }, 0 },
3331 { "shrQ", { Ev, I1 }, 0 },
e4bdd679 3332 { "shlQ", { Ev, I1 }, 0 },
bf890a93 3333 { "sarQ", { Ev, I1 }, 0 },
252b5132 3334 },
1ceb70f8 3335 /* REG_D2 */
252b5132 3336 {
bf890a93
IT
3337 { "rolA", { Eb, CL }, 0 },
3338 { "rorA", { Eb, CL }, 0 },
3339 { "rclA", { Eb, CL }, 0 },
3340 { "rcrA", { Eb, CL }, 0 },
3341 { "shlA", { Eb, CL }, 0 },
3342 { "shrA", { Eb, CL }, 0 },
e4bdd679 3343 { "shlA", { Eb, CL }, 0 },
bf890a93 3344 { "sarA", { Eb, CL }, 0 },
252b5132 3345 },
1ceb70f8 3346 /* REG_D3 */
252b5132 3347 {
bf890a93
IT
3348 { "rolQ", { Ev, CL }, 0 },
3349 { "rorQ", { Ev, CL }, 0 },
3350 { "rclQ", { Ev, CL }, 0 },
3351 { "rcrQ", { Ev, CL }, 0 },
3352 { "shlQ", { Ev, CL }, 0 },
3353 { "shrQ", { Ev, CL }, 0 },
e4bdd679 3354 { "shlQ", { Ev, CL }, 0 },
bf890a93 3355 { "sarQ", { Ev, CL }, 0 },
252b5132 3356 },
1ceb70f8 3357 /* REG_F6 */
252b5132 3358 {
bf890a93 3359 { "testA", { Eb, Ib }, 0 },
7db2c588 3360 { "testA", { Eb, Ib }, 0 },
bf890a93
IT
3361 { "notA", { Ebh1 }, 0 },
3362 { "negA", { Ebh1 }, 0 },
3363 { "mulA", { Eb }, 0 }, /* Don't print the implicit %al register, */
3364 { "imulA", { Eb }, 0 }, /* to distinguish these opcodes from other */
3365 { "divA", { Eb }, 0 }, /* mul/imul opcodes. Do the same for div */
3366 { "idivA", { Eb }, 0 }, /* and idiv for consistency. */
252b5132 3367 },
1ceb70f8 3368 /* REG_F7 */
252b5132 3369 {
bf890a93 3370 { "testQ", { Ev, Iv }, 0 },
7db2c588 3371 { "testQ", { Ev, Iv }, 0 },
bf890a93
IT
3372 { "notQ", { Evh1 }, 0 },
3373 { "negQ", { Evh1 }, 0 },
3374 { "mulQ", { Ev }, 0 }, /* Don't print the implicit register. */
3375 { "imulQ", { Ev }, 0 },
3376 { "divQ", { Ev }, 0 },
3377 { "idivQ", { Ev }, 0 },
252b5132 3378 },
1ceb70f8 3379 /* REG_FE */
252b5132 3380 {
bf890a93
IT
3381 { "incA", { Ebh1 }, 0 },
3382 { "decA", { Ebh1 }, 0 },
252b5132 3383 },
1ceb70f8 3384 /* REG_FF */
252b5132 3385 {
bf890a93
IT
3386 { "incQ", { Evh1 }, 0 },
3387 { "decQ", { Evh1 }, 0 },
9fef80d6 3388 { "call{&|}", { NOTRACK, indirEv, BND }, 0 },
4a357820 3389 { MOD_TABLE (MOD_FF_REG_3) },
9fef80d6 3390 { "jmp{&|}", { NOTRACK, indirEv, BND }, 0 },
4a357820 3391 { MOD_TABLE (MOD_FF_REG_5) },
bf890a93 3392 { "pushU", { stackEv }, 0 },
592d1631 3393 { Bad_Opcode },
252b5132 3394 },
1ceb70f8 3395 /* REG_0F00 */
252b5132 3396 {
bf890a93
IT
3397 { "sldtD", { Sv }, 0 },
3398 { "strD", { Sv }, 0 },
3399 { "lldt", { Ew }, 0 },
3400 { "ltr", { Ew }, 0 },
3401 { "verr", { Ew }, 0 },
3402 { "verw", { Ew }, 0 },
592d1631
L
3403 { Bad_Opcode },
3404 { Bad_Opcode },
252b5132 3405 },
1ceb70f8 3406 /* REG_0F01 */
252b5132 3407 {
1ceb70f8
L
3408 { MOD_TABLE (MOD_0F01_REG_0) },
3409 { MOD_TABLE (MOD_0F01_REG_1) },
3410 { MOD_TABLE (MOD_0F01_REG_2) },
3411 { MOD_TABLE (MOD_0F01_REG_3) },
bf890a93 3412 { "smswD", { Sv }, 0 },
8eab4136 3413 { MOD_TABLE (MOD_0F01_REG_5) },
bf890a93 3414 { "lmsw", { Ew }, 0 },
1ceb70f8 3415 { MOD_TABLE (MOD_0F01_REG_7) },
252b5132 3416 },
b5b1fc4f 3417 /* REG_0F0D */
252b5132 3418 {
bf890a93
IT
3419 { "prefetch", { Mb }, 0 },
3420 { "prefetchw", { Mb }, 0 },
3421 { "prefetchwt1", { Mb }, 0 },
3422 { "prefetch", { Mb }, 0 },
3423 { "prefetch", { Mb }, 0 },
3424 { "prefetch", { Mb }, 0 },
3425 { "prefetch", { Mb }, 0 },
3426 { "prefetch", { Mb }, 0 },
252b5132 3427 },
1ceb70f8 3428 /* REG_0F18 */
252b5132 3429 {
1ceb70f8
L
3430 { MOD_TABLE (MOD_0F18_REG_0) },
3431 { MOD_TABLE (MOD_0F18_REG_1) },
3432 { MOD_TABLE (MOD_0F18_REG_2) },
3433 { MOD_TABLE (MOD_0F18_REG_3) },
d7189fa5
RM
3434 { MOD_TABLE (MOD_0F18_REG_4) },
3435 { MOD_TABLE (MOD_0F18_REG_5) },
3436 { MOD_TABLE (MOD_0F18_REG_6) },
3437 { MOD_TABLE (MOD_0F18_REG_7) },
252b5132 3438 },
f8687e93 3439 /* REG_0F1C_P_0_MOD_0 */
c48935d7
IT
3440 {
3441 { "cldemote", { Mb }, 0 },
3442 { "nopQ", { Ev }, 0 },
3443 { "nopQ", { Ev }, 0 },
3444 { "nopQ", { Ev }, 0 },
3445 { "nopQ", { Ev }, 0 },
3446 { "nopQ", { Ev }, 0 },
3447 { "nopQ", { Ev }, 0 },
3448 { "nopQ", { Ev }, 0 },
3449 },
f8687e93 3450 /* REG_0F1E_P_1_MOD_3 */
603555e5
L
3451 {
3452 { "nopQ", { Ev }, 0 },
3453 { "rdsspK", { Rdq }, PREFIX_OPCODE },
3454 { "nopQ", { Ev }, 0 },
3455 { "nopQ", { Ev }, 0 },
3456 { "nopQ", { Ev }, 0 },
3457 { "nopQ", { Ev }, 0 },
3458 { "nopQ", { Ev }, 0 },
f8687e93 3459 { RM_TABLE (RM_0F1E_P_1_MOD_3_REG_7) },
603555e5 3460 },
1ceb70f8 3461 /* REG_0F71 */
a6bd098c 3462 {
592d1631
L
3463 { Bad_Opcode },
3464 { Bad_Opcode },
1ceb70f8 3465 { MOD_TABLE (MOD_0F71_REG_2) },
592d1631 3466 { Bad_Opcode },
1ceb70f8 3467 { MOD_TABLE (MOD_0F71_REG_4) },
592d1631 3468 { Bad_Opcode },
1ceb70f8 3469 { MOD_TABLE (MOD_0F71_REG_6) },
a6bd098c 3470 },
1ceb70f8 3471 /* REG_0F72 */
a6bd098c 3472 {
592d1631
L
3473 { Bad_Opcode },
3474 { Bad_Opcode },
1ceb70f8 3475 { MOD_TABLE (MOD_0F72_REG_2) },
592d1631 3476 { Bad_Opcode },
1ceb70f8 3477 { MOD_TABLE (MOD_0F72_REG_4) },
592d1631 3478 { Bad_Opcode },
1ceb70f8 3479 { MOD_TABLE (MOD_0F72_REG_6) },
a6bd098c 3480 },
1ceb70f8 3481 /* REG_0F73 */
252b5132 3482 {
592d1631
L
3483 { Bad_Opcode },
3484 { Bad_Opcode },
1ceb70f8
L
3485 { MOD_TABLE (MOD_0F73_REG_2) },
3486 { MOD_TABLE (MOD_0F73_REG_3) },
592d1631
L
3487 { Bad_Opcode },
3488 { Bad_Opcode },
1ceb70f8
L
3489 { MOD_TABLE (MOD_0F73_REG_6) },
3490 { MOD_TABLE (MOD_0F73_REG_7) },
252b5132 3491 },
1ceb70f8 3492 /* REG_0FA6 */
252b5132 3493 {
bf890a93
IT
3494 { "montmul", { { OP_0f07, 0 } }, 0 },
3495 { "xsha1", { { OP_0f07, 0 } }, 0 },
3496 { "xsha256", { { OP_0f07, 0 } }, 0 },
4e7d34a6 3497 },
1ceb70f8 3498 /* REG_0FA7 */
4e7d34a6 3499 {
bf890a93
IT
3500 { "xstore-rng", { { OP_0f07, 0 } }, 0 },
3501 { "xcrypt-ecb", { { OP_0f07, 0 } }, 0 },
3502 { "xcrypt-cbc", { { OP_0f07, 0 } }, 0 },
3503 { "xcrypt-ctr", { { OP_0f07, 0 } }, 0 },
3504 { "xcrypt-cfb", { { OP_0f07, 0 } }, 0 },
3505 { "xcrypt-ofb", { { OP_0f07, 0 } }, 0 },
4e7d34a6 3506 },
1ceb70f8 3507 /* REG_0FAE */
4e7d34a6 3508 {
1ceb70f8
L
3509 { MOD_TABLE (MOD_0FAE_REG_0) },
3510 { MOD_TABLE (MOD_0FAE_REG_1) },
3511 { MOD_TABLE (MOD_0FAE_REG_2) },
3512 { MOD_TABLE (MOD_0FAE_REG_3) },
475a2301 3513 { MOD_TABLE (MOD_0FAE_REG_4) },
1ceb70f8
L
3514 { MOD_TABLE (MOD_0FAE_REG_5) },
3515 { MOD_TABLE (MOD_0FAE_REG_6) },
3516 { MOD_TABLE (MOD_0FAE_REG_7) },
252b5132 3517 },
1ceb70f8 3518 /* REG_0FBA */
252b5132 3519 {
592d1631
L
3520 { Bad_Opcode },
3521 { Bad_Opcode },
3522 { Bad_Opcode },
3523 { Bad_Opcode },
bf890a93
IT
3524 { "btQ", { Ev, Ib }, 0 },
3525 { "btsQ", { Evh1, Ib }, 0 },
3526 { "btrQ", { Evh1, Ib }, 0 },
3527 { "btcQ", { Evh1, Ib }, 0 },
c608c12e 3528 },
1ceb70f8 3529 /* REG_0FC7 */
c608c12e 3530 {
592d1631 3531 { Bad_Opcode },
bf890a93 3532 { "cmpxchg8b", { { CMPXCHG8B_Fixup, q_mode } }, 0 },
592d1631 3533 { Bad_Opcode },
963f3586
IT
3534 { MOD_TABLE (MOD_0FC7_REG_3) },
3535 { MOD_TABLE (MOD_0FC7_REG_4) },
3536 { MOD_TABLE (MOD_0FC7_REG_5) },
1ceb70f8
L
3537 { MOD_TABLE (MOD_0FC7_REG_6) },
3538 { MOD_TABLE (MOD_0FC7_REG_7) },
252b5132 3539 },
592a252b 3540 /* REG_VEX_0F71 */
c0f3af97 3541 {
592d1631
L
3542 { Bad_Opcode },
3543 { Bad_Opcode },
592a252b 3544 { MOD_TABLE (MOD_VEX_0F71_REG_2) },
592d1631 3545 { Bad_Opcode },
592a252b 3546 { MOD_TABLE (MOD_VEX_0F71_REG_4) },
592d1631 3547 { Bad_Opcode },
592a252b 3548 { MOD_TABLE (MOD_VEX_0F71_REG_6) },
c0f3af97 3549 },
592a252b 3550 /* REG_VEX_0F72 */
c0f3af97 3551 {
592d1631
L
3552 { Bad_Opcode },
3553 { Bad_Opcode },
592a252b 3554 { MOD_TABLE (MOD_VEX_0F72_REG_2) },
592d1631 3555 { Bad_Opcode },
592a252b 3556 { MOD_TABLE (MOD_VEX_0F72_REG_4) },
592d1631 3557 { Bad_Opcode },
592a252b 3558 { MOD_TABLE (MOD_VEX_0F72_REG_6) },
c0f3af97 3559 },
592a252b 3560 /* REG_VEX_0F73 */
c0f3af97 3561 {
592d1631
L
3562 { Bad_Opcode },
3563 { Bad_Opcode },
592a252b
L
3564 { MOD_TABLE (MOD_VEX_0F73_REG_2) },
3565 { MOD_TABLE (MOD_VEX_0F73_REG_3) },
592d1631
L
3566 { Bad_Opcode },
3567 { Bad_Opcode },
592a252b
L
3568 { MOD_TABLE (MOD_VEX_0F73_REG_6) },
3569 { MOD_TABLE (MOD_VEX_0F73_REG_7) },
c0f3af97 3570 },
592a252b 3571 /* REG_VEX_0FAE */
c0f3af97 3572 {
592d1631
L
3573 { Bad_Opcode },
3574 { Bad_Opcode },
592a252b
L
3575 { MOD_TABLE (MOD_VEX_0FAE_REG_2) },
3576 { MOD_TABLE (MOD_VEX_0FAE_REG_3) },
c0f3af97 3577 },
f12dc422
L
3578 /* REG_VEX_0F38F3 */
3579 {
3580 { Bad_Opcode },
3581 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_1) },
3582 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_2) },
3583 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_3) },
3584 },
f88c9eb0
SP
3585 /* REG_XOP_LWPCB */
3586 {
bf890a93
IT
3587 { "llwpcb", { { OP_LWPCB_E, 0 } }, 0 },
3588 { "slwpcb", { { OP_LWPCB_E, 0 } }, 0 },
f88c9eb0
SP
3589 },
3590 /* REG_XOP_LWP */
3591 {
c1dc7af5
JB
3592 { "lwpins", { { OP_LWP_E, 0 }, Ed, Id }, 0 },
3593 { "lwpval", { { OP_LWP_E, 0 }, Ed, Id }, 0 },
f88c9eb0 3594 },
2a2a0f38
QN
3595 /* REG_XOP_TBM_01 */
3596 {
3597 { Bad_Opcode },
c1dc7af5
JB
3598 { "blcfill", { { OP_LWP_E, 0 }, Edq }, 0 },
3599 { "blsfill", { { OP_LWP_E, 0 }, Edq }, 0 },
3600 { "blcs", { { OP_LWP_E, 0 }, Edq }, 0 },
3601 { "tzmsk", { { OP_LWP_E, 0 }, Edq }, 0 },
3602 { "blcic", { { OP_LWP_E, 0 }, Edq }, 0 },
3603 { "blsic", { { OP_LWP_E, 0 }, Edq }, 0 },
3604 { "t1mskc", { { OP_LWP_E, 0 }, Edq }, 0 },
2a2a0f38
QN
3605 },
3606 /* REG_XOP_TBM_02 */
3607 {
3608 { Bad_Opcode },
c1dc7af5 3609 { "blcmsk", { { OP_LWP_E, 0 }, Edq }, 0 },
2a2a0f38
QN
3610 { Bad_Opcode },
3611 { Bad_Opcode },
3612 { Bad_Opcode },
3613 { Bad_Opcode },
c1dc7af5 3614 { "blci", { { OP_LWP_E, 0 }, Edq }, 0 },
2a2a0f38 3615 },
ad692897
L
3616
3617#include "i386-dis-evex-reg.h"
4e7d34a6
L
3618};
3619
1ceb70f8
L
3620static const struct dis386 prefix_table[][4] = {
3621 /* PREFIX_90 */
252b5132 3622 {
bf890a93
IT
3623 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } }, 0 },
3624 { "pause", { XX }, 0 },
3625 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } }, 0 },
507bd325 3626 { NULL, { { NULL, 0 } }, PREFIX_IGNORED }
0f10071e 3627 },
4e7d34a6 3628
f8687e93 3629 /* PREFIX_0F01_REG_5_MOD_0 */
603555e5
L
3630 {
3631 { Bad_Opcode },
3632 { "rstorssp", { Mq }, PREFIX_OPCODE },
3633 },
3634
f8687e93 3635 /* PREFIX_0F01_REG_5_MOD_3_RM_0 */
603555e5
L
3636 {
3637 { Bad_Opcode },
2234eee6 3638 { "setssbsy", { Skip_MODRM }, PREFIX_OPCODE },
603555e5
L
3639 },
3640
f8687e93 3641 /* PREFIX_0F01_REG_5_MOD_3_RM_2 */
603555e5
L
3642 {
3643 { Bad_Opcode },
c2f76402 3644 { "saveprevssp", { Skip_MODRM }, PREFIX_OPCODE },
603555e5
L
3645 },
3646
267b8516
JB
3647 /* PREFIX_0F01_REG_7_MOD_3_RM_2 */
3648 {
3649 { "monitorx", { { OP_Monitor, 0 } }, 0 },
3650 },
3651
3652 /* PREFIX_0F01_REG_7_MOD_3_RM_3 */
3653 {
7abb8d81 3654 { "mwaitx", { { OP_Mwait, eBX_reg } }, 0 },
267b8516
JB
3655 },
3656
3233d7d0
IT
3657 /* PREFIX_0F09 */
3658 {
3659 { "wbinvd", { XX }, 0 },
3660 { "wbnoinvd", { XX }, 0 },
3661 },
3662
1ceb70f8 3663 /* PREFIX_0F10 */
cc0ec051 3664 {
507bd325
L
3665 { "movups", { XM, EXx }, PREFIX_OPCODE },
3666 { "movss", { XM, EXd }, PREFIX_OPCODE },
3667 { "movupd", { XM, EXx }, PREFIX_OPCODE },
3668 { "movsd", { XM, EXq }, PREFIX_OPCODE },
30d1c836 3669 },
4e7d34a6 3670
1ceb70f8 3671 /* PREFIX_0F11 */
30d1c836 3672 {
507bd325
L
3673 { "movups", { EXxS, XM }, PREFIX_OPCODE },
3674 { "movss", { EXdS, XM }, PREFIX_OPCODE },
3675 { "movupd", { EXxS, XM }, PREFIX_OPCODE },
3676 { "movsd", { EXqS, XM }, PREFIX_OPCODE },
4e7d34a6 3677 },
252b5132 3678
1ceb70f8 3679 /* PREFIX_0F12 */
c608c12e 3680 {
1ceb70f8 3681 { MOD_TABLE (MOD_0F12_PREFIX_0) },
507bd325
L
3682 { "movsldup", { XM, EXx }, PREFIX_OPCODE },
3683 { "movlpd", { XM, EXq }, PREFIX_OPCODE },
3684 { "movddup", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3685 },
4e7d34a6 3686
1ceb70f8 3687 /* PREFIX_0F16 */
c608c12e 3688 {
1ceb70f8 3689 { MOD_TABLE (MOD_0F16_PREFIX_0) },
507bd325
L
3690 { "movshdup", { XM, EXx }, PREFIX_OPCODE },
3691 { "movhpd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3692 },
4e7d34a6 3693
7e8b059b
L
3694 /* PREFIX_0F1A */
3695 {
3696 { MOD_TABLE (MOD_0F1A_PREFIX_0) },
bf890a93
IT
3697 { "bndcl", { Gbnd, Ev_bnd }, 0 },
3698 { "bndmov", { Gbnd, Ebnd }, 0 },
3699 { "bndcu", { Gbnd, Ev_bnd }, 0 },
7e8b059b
L
3700 },
3701
3702 /* PREFIX_0F1B */
3703 {
3704 { MOD_TABLE (MOD_0F1B_PREFIX_0) },
3705 { MOD_TABLE (MOD_0F1B_PREFIX_1) },
9f79e886 3706 { "bndmov", { EbndS, Gbnd }, 0 },
bf890a93 3707 { "bndcn", { Gbnd, Ev_bnd }, 0 },
7e8b059b
L
3708 },
3709
c48935d7
IT
3710 /* PREFIX_0F1C */
3711 {
3712 { MOD_TABLE (MOD_0F1C_PREFIX_0) },
3713 { "nopQ", { Ev }, PREFIX_OPCODE },
3714 { "nopQ", { Ev }, PREFIX_OPCODE },
3715 { "nopQ", { Ev }, PREFIX_OPCODE },
3716 },
3717
603555e5
L
3718 /* PREFIX_0F1E */
3719 {
3720 { "nopQ", { Ev }, PREFIX_OPCODE },
3721 { MOD_TABLE (MOD_0F1E_PREFIX_1) },
3722 { "nopQ", { Ev }, PREFIX_OPCODE },
3723 { "nopQ", { Ev }, PREFIX_OPCODE },
3724 },
3725
1ceb70f8 3726 /* PREFIX_0F2A */
c608c12e 3727 {
507bd325 3728 { "cvtpi2ps", { XM, EMCq }, PREFIX_OPCODE },
e1a1babd 3729 { "cvtsi2ss%LQ", { XM, Edq }, PREFIX_OPCODE },
507bd325 3730 { "cvtpi2pd", { XM, EMCq }, PREFIX_OPCODE },
e1a1babd 3731 { "cvtsi2sd%LQ", { XM, Edq }, 0 },
c608c12e 3732 },
4e7d34a6 3733
1ceb70f8 3734 /* PREFIX_0F2B */
c608c12e 3735 {
75c135a8
L
3736 { MOD_TABLE (MOD_0F2B_PREFIX_0) },
3737 { MOD_TABLE (MOD_0F2B_PREFIX_1) },
3738 { MOD_TABLE (MOD_0F2B_PREFIX_2) },
3739 { MOD_TABLE (MOD_0F2B_PREFIX_3) },
c608c12e 3740 },
4e7d34a6 3741
1ceb70f8 3742 /* PREFIX_0F2C */
c608c12e 3743 {
507bd325 3744 { "cvttps2pi", { MXC, EXq }, PREFIX_OPCODE },
e1a1babd 3745 { "cvttss2si", { Gdq, EXd }, PREFIX_OPCODE },
507bd325 3746 { "cvttpd2pi", { MXC, EXx }, PREFIX_OPCODE },
e1a1babd 3747 { "cvttsd2si", { Gdq, EXq }, PREFIX_OPCODE },
c608c12e 3748 },
4e7d34a6 3749
1ceb70f8 3750 /* PREFIX_0F2D */
c608c12e 3751 {
507bd325 3752 { "cvtps2pi", { MXC, EXq }, PREFIX_OPCODE },
e1a1babd 3753 { "cvtss2si", { Gdq, EXd }, PREFIX_OPCODE },
507bd325 3754 { "cvtpd2pi", { MXC, EXx }, PREFIX_OPCODE },
e1a1babd 3755 { "cvtsd2si", { Gdq, EXq }, PREFIX_OPCODE },
c608c12e 3756 },
4e7d34a6 3757
1ceb70f8 3758 /* PREFIX_0F2E */
c608c12e 3759 {
bf890a93 3760 { "ucomiss",{ XM, EXd }, 0 },
592d1631 3761 { Bad_Opcode },
bf890a93 3762 { "ucomisd",{ XM, EXq }, 0 },
c608c12e 3763 },
4e7d34a6 3764
1ceb70f8 3765 /* PREFIX_0F2F */
c608c12e 3766 {
bf890a93 3767 { "comiss", { XM, EXd }, 0 },
592d1631 3768 { Bad_Opcode },
bf890a93 3769 { "comisd", { XM, EXq }, 0 },
c608c12e 3770 },
4e7d34a6 3771
1ceb70f8 3772 /* PREFIX_0F51 */
c608c12e 3773 {
507bd325
L
3774 { "sqrtps", { XM, EXx }, PREFIX_OPCODE },
3775 { "sqrtss", { XM, EXd }, PREFIX_OPCODE },
3776 { "sqrtpd", { XM, EXx }, PREFIX_OPCODE },
3777 { "sqrtsd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3778 },
4e7d34a6 3779
1ceb70f8 3780 /* PREFIX_0F52 */
c608c12e 3781 {
507bd325
L
3782 { "rsqrtps",{ XM, EXx }, PREFIX_OPCODE },
3783 { "rsqrtss",{ XM, EXd }, PREFIX_OPCODE },
c608c12e 3784 },
4e7d34a6 3785
1ceb70f8 3786 /* PREFIX_0F53 */
c608c12e 3787 {
507bd325
L
3788 { "rcpps", { XM, EXx }, PREFIX_OPCODE },
3789 { "rcpss", { XM, EXd }, PREFIX_OPCODE },
c608c12e 3790 },
4e7d34a6 3791
1ceb70f8 3792 /* PREFIX_0F58 */
c608c12e 3793 {
507bd325
L
3794 { "addps", { XM, EXx }, PREFIX_OPCODE },
3795 { "addss", { XM, EXd }, PREFIX_OPCODE },
3796 { "addpd", { XM, EXx }, PREFIX_OPCODE },
3797 { "addsd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3798 },
4e7d34a6 3799
1ceb70f8 3800 /* PREFIX_0F59 */
c608c12e 3801 {
507bd325
L
3802 { "mulps", { XM, EXx }, PREFIX_OPCODE },
3803 { "mulss", { XM, EXd }, PREFIX_OPCODE },
3804 { "mulpd", { XM, EXx }, PREFIX_OPCODE },
3805 { "mulsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3806 },
4e7d34a6 3807
1ceb70f8 3808 /* PREFIX_0F5A */
041bd2e0 3809 {
507bd325
L
3810 { "cvtps2pd", { XM, EXq }, PREFIX_OPCODE },
3811 { "cvtss2sd", { XM, EXd }, PREFIX_OPCODE },
3812 { "cvtpd2ps", { XM, EXx }, PREFIX_OPCODE },
3813 { "cvtsd2ss", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3814 },
4e7d34a6 3815
1ceb70f8 3816 /* PREFIX_0F5B */
041bd2e0 3817 {
507bd325
L
3818 { "cvtdq2ps", { XM, EXx }, PREFIX_OPCODE },
3819 { "cvttps2dq", { XM, EXx }, PREFIX_OPCODE },
3820 { "cvtps2dq", { XM, EXx }, PREFIX_OPCODE },
041bd2e0 3821 },
4e7d34a6 3822
1ceb70f8 3823 /* PREFIX_0F5C */
041bd2e0 3824 {
507bd325
L
3825 { "subps", { XM, EXx }, PREFIX_OPCODE },
3826 { "subss", { XM, EXd }, PREFIX_OPCODE },
3827 { "subpd", { XM, EXx }, PREFIX_OPCODE },
3828 { "subsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3829 },
4e7d34a6 3830
1ceb70f8 3831 /* PREFIX_0F5D */
041bd2e0 3832 {
507bd325
L
3833 { "minps", { XM, EXx }, PREFIX_OPCODE },
3834 { "minss", { XM, EXd }, PREFIX_OPCODE },
3835 { "minpd", { XM, EXx }, PREFIX_OPCODE },
3836 { "minsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3837 },
4e7d34a6 3838
1ceb70f8 3839 /* PREFIX_0F5E */
041bd2e0 3840 {
507bd325
L
3841 { "divps", { XM, EXx }, PREFIX_OPCODE },
3842 { "divss", { XM, EXd }, PREFIX_OPCODE },
3843 { "divpd", { XM, EXx }, PREFIX_OPCODE },
3844 { "divsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3845 },
4e7d34a6 3846
1ceb70f8 3847 /* PREFIX_0F5F */
041bd2e0 3848 {
507bd325
L
3849 { "maxps", { XM, EXx }, PREFIX_OPCODE },
3850 { "maxss", { XM, EXd }, PREFIX_OPCODE },
3851 { "maxpd", { XM, EXx }, PREFIX_OPCODE },
3852 { "maxsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3853 },
4e7d34a6 3854
1ceb70f8 3855 /* PREFIX_0F60 */
041bd2e0 3856 {
507bd325 3857 { "punpcklbw",{ MX, EMd }, PREFIX_OPCODE },
592d1631 3858 { Bad_Opcode },
507bd325 3859 { "punpcklbw",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 3860 },
4e7d34a6 3861
1ceb70f8 3862 /* PREFIX_0F61 */
041bd2e0 3863 {
507bd325 3864 { "punpcklwd",{ MX, EMd }, PREFIX_OPCODE },
592d1631 3865 { Bad_Opcode },
507bd325 3866 { "punpcklwd",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 3867 },
4e7d34a6 3868
1ceb70f8 3869 /* PREFIX_0F62 */
041bd2e0 3870 {
507bd325 3871 { "punpckldq",{ MX, EMd }, PREFIX_OPCODE },
592d1631 3872 { Bad_Opcode },
507bd325 3873 { "punpckldq",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 3874 },
4e7d34a6 3875
1ceb70f8 3876 /* PREFIX_0F6C */
041bd2e0 3877 {
592d1631
L
3878 { Bad_Opcode },
3879 { Bad_Opcode },
507bd325 3880 { "punpcklqdq", { XM, EXx }, PREFIX_OPCODE },
0f17484f 3881 },
4e7d34a6 3882
1ceb70f8 3883 /* PREFIX_0F6D */
0f17484f 3884 {
592d1631
L
3885 { Bad_Opcode },
3886 { Bad_Opcode },
507bd325 3887 { "punpckhqdq", { XM, EXx }, PREFIX_OPCODE },
041bd2e0 3888 },
4e7d34a6 3889
1ceb70f8 3890 /* PREFIX_0F6F */
ca164297 3891 {
507bd325
L
3892 { "movq", { MX, EM }, PREFIX_OPCODE },
3893 { "movdqu", { XM, EXx }, PREFIX_OPCODE },
3894 { "movdqa", { XM, EXx }, PREFIX_OPCODE },
ca164297 3895 },
4e7d34a6 3896
1ceb70f8 3897 /* PREFIX_0F70 */
4e7d34a6 3898 {
507bd325
L
3899 { "pshufw", { MX, EM, Ib }, PREFIX_OPCODE },
3900 { "pshufhw",{ XM, EXx, Ib }, PREFIX_OPCODE },
3901 { "pshufd", { XM, EXx, Ib }, PREFIX_OPCODE },
3902 { "pshuflw",{ XM, EXx, Ib }, PREFIX_OPCODE },
4e7d34a6
L
3903 },
3904
92fddf8e
L
3905 /* PREFIX_0F73_REG_3 */
3906 {
592d1631
L
3907 { Bad_Opcode },
3908 { Bad_Opcode },
bf890a93 3909 { "psrldq", { XS, Ib }, 0 },
92fddf8e
L
3910 },
3911
3912 /* PREFIX_0F73_REG_7 */
3913 {
592d1631
L
3914 { Bad_Opcode },
3915 { Bad_Opcode },
bf890a93 3916 { "pslldq", { XS, Ib }, 0 },
92fddf8e
L
3917 },
3918
1ceb70f8 3919 /* PREFIX_0F78 */
4e7d34a6 3920 {
bf890a93 3921 {"vmread", { Em, Gm }, 0 },
592d1631 3922 { Bad_Opcode },
bf890a93
IT
3923 {"extrq", { XS, Ib, Ib }, 0 },
3924 {"insertq", { XM, XS, Ib, Ib }, 0 },
4e7d34a6
L
3925 },
3926
1ceb70f8 3927 /* PREFIX_0F79 */
4e7d34a6 3928 {
bf890a93 3929 {"vmwrite", { Gm, Em }, 0 },
592d1631 3930 { Bad_Opcode },
bf890a93
IT
3931 {"extrq", { XM, XS }, 0 },
3932 {"insertq", { XM, XS }, 0 },
4e7d34a6
L
3933 },
3934
1ceb70f8 3935 /* PREFIX_0F7C */
ca164297 3936 {
592d1631
L
3937 { Bad_Opcode },
3938 { Bad_Opcode },
507bd325
L
3939 { "haddpd", { XM, EXx }, PREFIX_OPCODE },
3940 { "haddps", { XM, EXx }, PREFIX_OPCODE },
ca164297 3941 },
4e7d34a6 3942
1ceb70f8 3943 /* PREFIX_0F7D */
ca164297 3944 {
592d1631
L
3945 { Bad_Opcode },
3946 { Bad_Opcode },
507bd325
L
3947 { "hsubpd", { XM, EXx }, PREFIX_OPCODE },
3948 { "hsubps", { XM, EXx }, PREFIX_OPCODE },
ca164297 3949 },
4e7d34a6 3950
1ceb70f8 3951 /* PREFIX_0F7E */
ca164297 3952 {
507bd325
L
3953 { "movK", { Edq, MX }, PREFIX_OPCODE },
3954 { "movq", { XM, EXq }, PREFIX_OPCODE },
3955 { "movK", { Edq, XM }, PREFIX_OPCODE },
ca164297 3956 },
4e7d34a6 3957
1ceb70f8 3958 /* PREFIX_0F7F */
ca164297 3959 {
507bd325
L
3960 { "movq", { EMS, MX }, PREFIX_OPCODE },
3961 { "movdqu", { EXxS, XM }, PREFIX_OPCODE },
3962 { "movdqa", { EXxS, XM }, PREFIX_OPCODE },
ca164297 3963 },
4e7d34a6 3964
f8687e93 3965 /* PREFIX_0FAE_REG_0_MOD_3 */
c7b8aa3a
L
3966 {
3967 { Bad_Opcode },
bf890a93 3968 { "rdfsbase", { Ev }, 0 },
c7b8aa3a
L
3969 },
3970
f8687e93 3971 /* PREFIX_0FAE_REG_1_MOD_3 */
c7b8aa3a
L
3972 {
3973 { Bad_Opcode },
bf890a93 3974 { "rdgsbase", { Ev }, 0 },
c7b8aa3a
L
3975 },
3976
f8687e93 3977 /* PREFIX_0FAE_REG_2_MOD_3 */
c7b8aa3a
L
3978 {
3979 { Bad_Opcode },
bf890a93 3980 { "wrfsbase", { Ev }, 0 },
c7b8aa3a
L
3981 },
3982
f8687e93 3983 /* PREFIX_0FAE_REG_3_MOD_3 */
c7b8aa3a
L
3984 {
3985 { Bad_Opcode },
bf890a93 3986 { "wrgsbase", { Ev }, 0 },
c7b8aa3a
L
3987 },
3988
f8687e93 3989 /* PREFIX_0FAE_REG_4_MOD_0 */
6b40c462
L
3990 {
3991 { "xsave", { FXSAVE }, 0 },
3992 { "ptwrite%LQ", { Edq }, 0 },
3993 },
3994
f8687e93 3995 /* PREFIX_0FAE_REG_4_MOD_3 */
6b40c462
L
3996 {
3997 { Bad_Opcode },
3998 { "ptwrite%LQ", { Edq }, 0 },
3999 },
4000
f8687e93 4001 /* PREFIX_0FAE_REG_5_MOD_0 */
603555e5
L
4002 {
4003 { "xrstor", { FXSAVE }, PREFIX_OPCODE },
2234eee6
L
4004 },
4005
f8687e93 4006 /* PREFIX_0FAE_REG_5_MOD_3 */
2234eee6
L
4007 {
4008 { "lfence", { Skip_MODRM }, 0 },
4009 { "incsspK", { Rdq }, PREFIX_OPCODE },
603555e5
L
4010 },
4011
f8687e93 4012 /* PREFIX_0FAE_REG_6_MOD_0 */
c5e7287a 4013 {
603555e5
L
4014 { "xsaveopt", { FXSAVE }, PREFIX_OPCODE },
4015 { "clrssbsy", { Mq }, PREFIX_OPCODE },
4016 { "clwb", { Mb }, PREFIX_OPCODE },
c5e7287a
IT
4017 },
4018
f8687e93 4019 /* PREFIX_0FAE_REG_6_MOD_3 */
de89d0a3 4020 {
f8687e93 4021 { RM_TABLE (RM_0FAE_REG_6_MOD_3_P_0) },
de89d0a3 4022 { "umonitor", { Eva }, PREFIX_OPCODE },
ae1d3843
L
4023 { "tpause", { Edq }, PREFIX_OPCODE },
4024 { "umwait", { Edq }, PREFIX_OPCODE },
de89d0a3
IT
4025 },
4026
f8687e93 4027 /* PREFIX_0FAE_REG_7_MOD_0 */
963f3586 4028 {
bf890a93 4029 { "clflush", { Mb }, 0 },
963f3586 4030 { Bad_Opcode },
bf890a93 4031 { "clflushopt", { Mb }, 0 },
963f3586
IT
4032 },
4033
1ceb70f8 4034 /* PREFIX_0FB8 */
ca164297 4035 {
592d1631 4036 { Bad_Opcode },
bf890a93 4037 { "popcntS", { Gv, Ev }, 0 },
ca164297 4038 },
4e7d34a6 4039
f12dc422
L
4040 /* PREFIX_0FBC */
4041 {
bf890a93
IT
4042 { "bsfS", { Gv, Ev }, 0 },
4043 { "tzcntS", { Gv, Ev }, 0 },
4044 { "bsfS", { Gv, Ev }, 0 },
f12dc422
L
4045 },
4046
1ceb70f8 4047 /* PREFIX_0FBD */
050dfa73 4048 {
bf890a93
IT
4049 { "bsrS", { Gv, Ev }, 0 },
4050 { "lzcntS", { Gv, Ev }, 0 },
4051 { "bsrS", { Gv, Ev }, 0 },
050dfa73
MM
4052 },
4053
1ceb70f8 4054 /* PREFIX_0FC2 */
050dfa73 4055 {
507bd325
L
4056 { "cmpps", { XM, EXx, CMP }, PREFIX_OPCODE },
4057 { "cmpss", { XM, EXd, CMP }, PREFIX_OPCODE },
4058 { "cmppd", { XM, EXx, CMP }, PREFIX_OPCODE },
4059 { "cmpsd", { XM, EXq, CMP }, PREFIX_OPCODE },
050dfa73 4060 },
246c51aa 4061
f8687e93 4062 /* PREFIX_0FC3_MOD_0 */
4ee52178 4063 {
e1a1babd 4064 { "movntiS", { Edq, Gdq }, PREFIX_OPCODE },
4ee52178
L
4065 },
4066
f8687e93 4067 /* PREFIX_0FC7_REG_6_MOD_0 */
92fddf8e 4068 {
bf890a93
IT
4069 { "vmptrld",{ Mq }, 0 },
4070 { "vmxon", { Mq }, 0 },
4071 { "vmclear",{ Mq }, 0 },
92fddf8e
L
4072 },
4073
f8687e93 4074 /* PREFIX_0FC7_REG_6_MOD_3 */
f24bcbaa
L
4075 {
4076 { "rdrand", { Ev }, 0 },
4077 { Bad_Opcode },
4078 { "rdrand", { Ev }, 0 }
4079 },
4080
f8687e93 4081 /* PREFIX_0FC7_REG_7_MOD_3 */
f24bcbaa
L
4082 {
4083 { "rdseed", { Ev }, 0 },
8bc52696 4084 { "rdpid", { Em }, 0 },
f24bcbaa
L
4085 { "rdseed", { Ev }, 0 },
4086 },
4087
1ceb70f8 4088 /* PREFIX_0FD0 */
050dfa73 4089 {
592d1631
L
4090 { Bad_Opcode },
4091 { Bad_Opcode },
bf890a93
IT
4092 { "addsubpd", { XM, EXx }, 0 },
4093 { "addsubps", { XM, EXx }, 0 },
246c51aa 4094 },
050dfa73 4095
1ceb70f8 4096 /* PREFIX_0FD6 */
050dfa73 4097 {
592d1631 4098 { Bad_Opcode },
bf890a93
IT
4099 { "movq2dq",{ XM, MS }, 0 },
4100 { "movq", { EXqS, XM }, 0 },
4101 { "movdq2q",{ MX, XS }, 0 },
050dfa73
MM
4102 },
4103
1ceb70f8 4104 /* PREFIX_0FE6 */
7918206c 4105 {
592d1631 4106 { Bad_Opcode },
507bd325
L
4107 { "cvtdq2pd", { XM, EXq }, PREFIX_OPCODE },
4108 { "cvttpd2dq", { XM, EXx }, PREFIX_OPCODE },
4109 { "cvtpd2dq", { XM, EXx }, PREFIX_OPCODE },
7918206c 4110 },
8b38ad71 4111
1ceb70f8 4112 /* PREFIX_0FE7 */
8b38ad71 4113 {
507bd325 4114 { "movntq", { Mq, MX }, PREFIX_OPCODE },
592d1631 4115 { Bad_Opcode },
75c135a8 4116 { MOD_TABLE (MOD_0FE7_PREFIX_2) },
4e7d34a6
L
4117 },
4118
1ceb70f8 4119 /* PREFIX_0FF0 */
4e7d34a6 4120 {
592d1631
L
4121 { Bad_Opcode },
4122 { Bad_Opcode },
4123 { Bad_Opcode },
1ceb70f8 4124 { MOD_TABLE (MOD_0FF0_PREFIX_3) },
4e7d34a6
L
4125 },
4126
1ceb70f8 4127 /* PREFIX_0FF7 */
4e7d34a6 4128 {
507bd325 4129 { "maskmovq", { MX, MS }, PREFIX_OPCODE },
592d1631 4130 { Bad_Opcode },
507bd325 4131 { "maskmovdqu", { XM, XS }, PREFIX_OPCODE },
8b38ad71 4132 },
42903f7f 4133
1ceb70f8 4134 /* PREFIX_0F3810 */
42903f7f 4135 {
592d1631
L
4136 { Bad_Opcode },
4137 { Bad_Opcode },
507bd325 4138 { "pblendvb", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4139 },
4140
1ceb70f8 4141 /* PREFIX_0F3814 */
42903f7f 4142 {
592d1631
L
4143 { Bad_Opcode },
4144 { Bad_Opcode },
507bd325 4145 { "blendvps", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4146 },
4147
1ceb70f8 4148 /* PREFIX_0F3815 */
42903f7f 4149 {
592d1631
L
4150 { Bad_Opcode },
4151 { Bad_Opcode },
507bd325 4152 { "blendvpd", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4153 },
4154
1ceb70f8 4155 /* PREFIX_0F3817 */
42903f7f 4156 {
592d1631
L
4157 { Bad_Opcode },
4158 { Bad_Opcode },
507bd325 4159 { "ptest", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4160 },
4161
1ceb70f8 4162 /* PREFIX_0F3820 */
42903f7f 4163 {
592d1631
L
4164 { Bad_Opcode },
4165 { Bad_Opcode },
507bd325 4166 { "pmovsxbw", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4167 },
4168
1ceb70f8 4169 /* PREFIX_0F3821 */
42903f7f 4170 {
592d1631
L
4171 { Bad_Opcode },
4172 { Bad_Opcode },
507bd325 4173 { "pmovsxbd", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4174 },
4175
1ceb70f8 4176 /* PREFIX_0F3822 */
42903f7f 4177 {
592d1631
L
4178 { Bad_Opcode },
4179 { Bad_Opcode },
507bd325 4180 { "pmovsxbq", { XM, EXw }, PREFIX_OPCODE },
42903f7f
L
4181 },
4182
1ceb70f8 4183 /* PREFIX_0F3823 */
42903f7f 4184 {
592d1631
L
4185 { Bad_Opcode },
4186 { Bad_Opcode },
507bd325 4187 { "pmovsxwd", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4188 },
4189
1ceb70f8 4190 /* PREFIX_0F3824 */
42903f7f 4191 {
592d1631
L
4192 { Bad_Opcode },
4193 { Bad_Opcode },
507bd325 4194 { "pmovsxwq", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4195 },
4196
1ceb70f8 4197 /* PREFIX_0F3825 */
42903f7f 4198 {
592d1631
L
4199 { Bad_Opcode },
4200 { Bad_Opcode },
507bd325 4201 { "pmovsxdq", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4202 },
4203
1ceb70f8 4204 /* PREFIX_0F3828 */
42903f7f 4205 {
592d1631
L
4206 { Bad_Opcode },
4207 { Bad_Opcode },
507bd325 4208 { "pmuldq", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4209 },
4210
1ceb70f8 4211 /* PREFIX_0F3829 */
42903f7f 4212 {
592d1631
L
4213 { Bad_Opcode },
4214 { Bad_Opcode },
507bd325 4215 { "pcmpeqq", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4216 },
4217
1ceb70f8 4218 /* PREFIX_0F382A */
42903f7f 4219 {
592d1631
L
4220 { Bad_Opcode },
4221 { Bad_Opcode },
75c135a8 4222 { MOD_TABLE (MOD_0F382A_PREFIX_2) },
42903f7f
L
4223 },
4224
1ceb70f8 4225 /* PREFIX_0F382B */
42903f7f 4226 {
592d1631
L
4227 { Bad_Opcode },
4228 { Bad_Opcode },
507bd325 4229 { "packusdw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4230 },
4231
1ceb70f8 4232 /* PREFIX_0F3830 */
42903f7f 4233 {
592d1631
L
4234 { Bad_Opcode },
4235 { Bad_Opcode },
507bd325 4236 { "pmovzxbw", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4237 },
4238
1ceb70f8 4239 /* PREFIX_0F3831 */
42903f7f 4240 {
592d1631
L
4241 { Bad_Opcode },
4242 { Bad_Opcode },
507bd325 4243 { "pmovzxbd", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4244 },
4245
1ceb70f8 4246 /* PREFIX_0F3832 */
42903f7f 4247 {
592d1631
L
4248 { Bad_Opcode },
4249 { Bad_Opcode },
507bd325 4250 { "pmovzxbq", { XM, EXw }, PREFIX_OPCODE },
42903f7f
L
4251 },
4252
1ceb70f8 4253 /* PREFIX_0F3833 */
42903f7f 4254 {
592d1631
L
4255 { Bad_Opcode },
4256 { Bad_Opcode },
507bd325 4257 { "pmovzxwd", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4258 },
4259
1ceb70f8 4260 /* PREFIX_0F3834 */
42903f7f 4261 {
592d1631
L
4262 { Bad_Opcode },
4263 { Bad_Opcode },
507bd325 4264 { "pmovzxwq", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4265 },
4266
1ceb70f8 4267 /* PREFIX_0F3835 */
42903f7f 4268 {
592d1631
L
4269 { Bad_Opcode },
4270 { Bad_Opcode },
507bd325 4271 { "pmovzxdq", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4272 },
4273
1ceb70f8 4274 /* PREFIX_0F3837 */
4e7d34a6 4275 {
592d1631
L
4276 { Bad_Opcode },
4277 { Bad_Opcode },
507bd325 4278 { "pcmpgtq", { XM, EXx }, PREFIX_OPCODE },
4e7d34a6
L
4279 },
4280
1ceb70f8 4281 /* PREFIX_0F3838 */
42903f7f 4282 {
592d1631
L
4283 { Bad_Opcode },
4284 { Bad_Opcode },
507bd325 4285 { "pminsb", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4286 },
4287
1ceb70f8 4288 /* PREFIX_0F3839 */
42903f7f 4289 {
592d1631
L
4290 { Bad_Opcode },
4291 { Bad_Opcode },
507bd325 4292 { "pminsd", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4293 },
4294
1ceb70f8 4295 /* PREFIX_0F383A */
42903f7f 4296 {
592d1631
L
4297 { Bad_Opcode },
4298 { Bad_Opcode },
507bd325 4299 { "pminuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4300 },
4301
1ceb70f8 4302 /* PREFIX_0F383B */
42903f7f 4303 {
592d1631
L
4304 { Bad_Opcode },
4305 { Bad_Opcode },
507bd325 4306 { "pminud", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4307 },
4308
1ceb70f8 4309 /* PREFIX_0F383C */
42903f7f 4310 {
592d1631
L
4311 { Bad_Opcode },
4312 { Bad_Opcode },
507bd325 4313 { "pmaxsb", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4314 },
4315
1ceb70f8 4316 /* PREFIX_0F383D */
42903f7f 4317 {
592d1631
L
4318 { Bad_Opcode },
4319 { Bad_Opcode },
507bd325 4320 { "pmaxsd", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4321 },
4322
1ceb70f8 4323 /* PREFIX_0F383E */
42903f7f 4324 {
592d1631
L
4325 { Bad_Opcode },
4326 { Bad_Opcode },
507bd325 4327 { "pmaxuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4328 },
4329
1ceb70f8 4330 /* PREFIX_0F383F */
42903f7f 4331 {
592d1631
L
4332 { Bad_Opcode },
4333 { Bad_Opcode },
507bd325 4334 { "pmaxud", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4335 },
4336
1ceb70f8 4337 /* PREFIX_0F3840 */
42903f7f 4338 {
592d1631
L
4339 { Bad_Opcode },
4340 { Bad_Opcode },
507bd325 4341 { "pmulld", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4342 },
4343
1ceb70f8 4344 /* PREFIX_0F3841 */
42903f7f 4345 {
592d1631
L
4346 { Bad_Opcode },
4347 { Bad_Opcode },
507bd325 4348 { "phminposuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4349 },
4350
f1f8f695
L
4351 /* PREFIX_0F3880 */
4352 {
592d1631
L
4353 { Bad_Opcode },
4354 { Bad_Opcode },
507bd325 4355 { "invept", { Gm, Mo }, PREFIX_OPCODE },
f1f8f695
L
4356 },
4357
4358 /* PREFIX_0F3881 */
4359 {
592d1631
L
4360 { Bad_Opcode },
4361 { Bad_Opcode },
507bd325 4362 { "invvpid", { Gm, Mo }, PREFIX_OPCODE },
f1f8f695
L
4363 },
4364
6c30d220
L
4365 /* PREFIX_0F3882 */
4366 {
4367 { Bad_Opcode },
4368 { Bad_Opcode },
507bd325 4369 { "invpcid", { Gm, M }, PREFIX_OPCODE },
6c30d220
L
4370 },
4371
a0046408
L
4372 /* PREFIX_0F38C8 */
4373 {
507bd325 4374 { "sha1nexte", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4375 },
4376
4377 /* PREFIX_0F38C9 */
4378 {
507bd325 4379 { "sha1msg1", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4380 },
4381
4382 /* PREFIX_0F38CA */
4383 {
507bd325 4384 { "sha1msg2", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4385 },
4386
4387 /* PREFIX_0F38CB */
4388 {
507bd325 4389 { "sha256rnds2", { XM, EXxmm, XMM0 }, PREFIX_OPCODE },
a0046408
L
4390 },
4391
4392 /* PREFIX_0F38CC */
4393 {
507bd325 4394 { "sha256msg1", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4395 },
4396
4397 /* PREFIX_0F38CD */
4398 {
507bd325 4399 { "sha256msg2", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4400 },
4401
48521003
IT
4402 /* PREFIX_0F38CF */
4403 {
4404 { Bad_Opcode },
4405 { Bad_Opcode },
4406 { "gf2p8mulb", { XM, EXxmm }, PREFIX_OPCODE },
4407 },
4408
c0f3af97
L
4409 /* PREFIX_0F38DB */
4410 {
592d1631
L
4411 { Bad_Opcode },
4412 { Bad_Opcode },
507bd325 4413 { "aesimc", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4414 },
4415
4416 /* PREFIX_0F38DC */
4417 {
592d1631
L
4418 { Bad_Opcode },
4419 { Bad_Opcode },
507bd325 4420 { "aesenc", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4421 },
4422
4423 /* PREFIX_0F38DD */
4424 {
592d1631
L
4425 { Bad_Opcode },
4426 { Bad_Opcode },
507bd325 4427 { "aesenclast", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4428 },
4429
4430 /* PREFIX_0F38DE */
4431 {
592d1631
L
4432 { Bad_Opcode },
4433 { Bad_Opcode },
507bd325 4434 { "aesdec", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4435 },
4436
4437 /* PREFIX_0F38DF */
4438 {
592d1631
L
4439 { Bad_Opcode },
4440 { Bad_Opcode },
507bd325 4441 { "aesdeclast", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4442 },
4443
1ceb70f8 4444 /* PREFIX_0F38F0 */
4e7d34a6 4445 {
507bd325 4446 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } }, PREFIX_OPCODE },
592d1631 4447 { Bad_Opcode },
507bd325
L
4448 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } }, PREFIX_OPCODE },
4449 { "crc32", { Gdq, { CRC32_Fixup, b_mode } }, PREFIX_OPCODE },
4e7d34a6
L
4450 },
4451
1ceb70f8 4452 /* PREFIX_0F38F1 */
4e7d34a6 4453 {
507bd325 4454 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv }, PREFIX_OPCODE },
592d1631 4455 { Bad_Opcode },
507bd325
L
4456 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv }, PREFIX_OPCODE },
4457 { "crc32", { Gdq, { CRC32_Fixup, v_mode } }, PREFIX_OPCODE },
4e7d34a6
L
4458 },
4459
603555e5 4460 /* PREFIX_0F38F5 */
e2e1fcde
L
4461 {
4462 { Bad_Opcode },
603555e5
L
4463 { Bad_Opcode },
4464 { MOD_TABLE (MOD_0F38F5_PREFIX_2) },
4465 },
4466
4467 /* PREFIX_0F38F6 */
4468 {
4469 { MOD_TABLE (MOD_0F38F6_PREFIX_0) },
507bd325
L
4470 { "adoxS", { Gdq, Edq}, PREFIX_OPCODE },
4471 { "adcxS", { Gdq, Edq}, PREFIX_OPCODE },
e2e1fcde
L
4472 { Bad_Opcode },
4473 },
4474
c0a30a9f
L
4475 /* PREFIX_0F38F8 */
4476 {
4477 { Bad_Opcode },
5d79adc4 4478 { MOD_TABLE (MOD_0F38F8_PREFIX_1) },
c0a30a9f 4479 { MOD_TABLE (MOD_0F38F8_PREFIX_2) },
5d79adc4 4480 { MOD_TABLE (MOD_0F38F8_PREFIX_3) },
c0a30a9f
L
4481 },
4482
4483 /* PREFIX_0F38F9 */
4484 {
4485 { MOD_TABLE (MOD_0F38F9_PREFIX_0) },
4486 },
4487
1ceb70f8 4488 /* PREFIX_0F3A08 */
42903f7f 4489 {
592d1631
L
4490 { Bad_Opcode },
4491 { Bad_Opcode },
507bd325 4492 { "roundps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4493 },
4494
1ceb70f8 4495 /* PREFIX_0F3A09 */
42903f7f 4496 {
592d1631
L
4497 { Bad_Opcode },
4498 { Bad_Opcode },
507bd325 4499 { "roundpd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4500 },
4501
1ceb70f8 4502 /* PREFIX_0F3A0A */
42903f7f 4503 {
592d1631
L
4504 { Bad_Opcode },
4505 { Bad_Opcode },
507bd325 4506 { "roundss", { XM, EXd, Ib }, PREFIX_OPCODE },
42903f7f
L
4507 },
4508
1ceb70f8 4509 /* PREFIX_0F3A0B */
42903f7f 4510 {
592d1631
L
4511 { Bad_Opcode },
4512 { Bad_Opcode },
507bd325 4513 { "roundsd", { XM, EXq, Ib }, PREFIX_OPCODE },
42903f7f
L
4514 },
4515
1ceb70f8 4516 /* PREFIX_0F3A0C */
42903f7f 4517 {
592d1631
L
4518 { Bad_Opcode },
4519 { Bad_Opcode },
507bd325 4520 { "blendps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4521 },
4522
1ceb70f8 4523 /* PREFIX_0F3A0D */
42903f7f 4524 {
592d1631
L
4525 { Bad_Opcode },
4526 { Bad_Opcode },
507bd325 4527 { "blendpd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4528 },
4529
1ceb70f8 4530 /* PREFIX_0F3A0E */
42903f7f 4531 {
592d1631
L
4532 { Bad_Opcode },
4533 { Bad_Opcode },
507bd325 4534 { "pblendw", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4535 },
4536
1ceb70f8 4537 /* PREFIX_0F3A14 */
42903f7f 4538 {
592d1631
L
4539 { Bad_Opcode },
4540 { Bad_Opcode },
507bd325 4541 { "pextrb", { Edqb, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4542 },
4543
1ceb70f8 4544 /* PREFIX_0F3A15 */
42903f7f 4545 {
592d1631
L
4546 { Bad_Opcode },
4547 { Bad_Opcode },
507bd325 4548 { "pextrw", { Edqw, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4549 },
4550
1ceb70f8 4551 /* PREFIX_0F3A16 */
42903f7f 4552 {
592d1631
L
4553 { Bad_Opcode },
4554 { Bad_Opcode },
507bd325 4555 { "pextrK", { Edq, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4556 },
4557
1ceb70f8 4558 /* PREFIX_0F3A17 */
42903f7f 4559 {
592d1631
L
4560 { Bad_Opcode },
4561 { Bad_Opcode },
507bd325 4562 { "extractps", { Edqd, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4563 },
4564
1ceb70f8 4565 /* PREFIX_0F3A20 */
42903f7f 4566 {
592d1631
L
4567 { Bad_Opcode },
4568 { Bad_Opcode },
507bd325 4569 { "pinsrb", { XM, Edqb, Ib }, PREFIX_OPCODE },
42903f7f
L
4570 },
4571
1ceb70f8 4572 /* PREFIX_0F3A21 */
42903f7f 4573 {
592d1631
L
4574 { Bad_Opcode },
4575 { Bad_Opcode },
507bd325 4576 { "insertps", { XM, EXd, Ib }, PREFIX_OPCODE },
42903f7f
L
4577 },
4578
1ceb70f8 4579 /* PREFIX_0F3A22 */
42903f7f 4580 {
592d1631
L
4581 { Bad_Opcode },
4582 { Bad_Opcode },
507bd325 4583 { "pinsrK", { XM, Edq, Ib }, PREFIX_OPCODE },
42903f7f
L
4584 },
4585
1ceb70f8 4586 /* PREFIX_0F3A40 */
42903f7f 4587 {
592d1631
L
4588 { Bad_Opcode },
4589 { Bad_Opcode },
507bd325 4590 { "dpps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4591 },
4592
1ceb70f8 4593 /* PREFIX_0F3A41 */
42903f7f 4594 {
592d1631
L
4595 { Bad_Opcode },
4596 { Bad_Opcode },
507bd325 4597 { "dppd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4598 },
4599
1ceb70f8 4600 /* PREFIX_0F3A42 */
42903f7f 4601 {
592d1631
L
4602 { Bad_Opcode },
4603 { Bad_Opcode },
507bd325 4604 { "mpsadbw", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f 4605 },
381d071f 4606
c0f3af97
L
4607 /* PREFIX_0F3A44 */
4608 {
592d1631
L
4609 { Bad_Opcode },
4610 { Bad_Opcode },
507bd325 4611 { "pclmulqdq", { XM, EXx, PCLMUL }, PREFIX_OPCODE },
c0f3af97
L
4612 },
4613
1ceb70f8 4614 /* PREFIX_0F3A60 */
381d071f 4615 {
592d1631
L
4616 { Bad_Opcode },
4617 { Bad_Opcode },
15c7c1d8 4618 { "pcmpestrm", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, PREFIX_OPCODE },
381d071f
L
4619 },
4620
1ceb70f8 4621 /* PREFIX_0F3A61 */
381d071f 4622 {
592d1631
L
4623 { Bad_Opcode },
4624 { Bad_Opcode },
15c7c1d8 4625 { "pcmpestri", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, PREFIX_OPCODE },
381d071f
L
4626 },
4627
1ceb70f8 4628 /* PREFIX_0F3A62 */
381d071f 4629 {
592d1631
L
4630 { Bad_Opcode },
4631 { Bad_Opcode },
507bd325 4632 { "pcmpistrm", { XM, EXx, Ib }, PREFIX_OPCODE },
381d071f
L
4633 },
4634
1ceb70f8 4635 /* PREFIX_0F3A63 */
381d071f 4636 {
592d1631
L
4637 { Bad_Opcode },
4638 { Bad_Opcode },
507bd325 4639 { "pcmpistri", { XM, EXx, Ib }, PREFIX_OPCODE },
381d071f 4640 },
09a2c6cf 4641
a0046408
L
4642 /* PREFIX_0F3ACC */
4643 {
507bd325 4644 { "sha1rnds4", { XM, EXxmm, Ib }, PREFIX_OPCODE },
a0046408
L
4645 },
4646
48521003
IT
4647 /* PREFIX_0F3ACE */
4648 {
4649 { Bad_Opcode },
4650 { Bad_Opcode },
4651 { "gf2p8affineqb", { XM, EXxmm, Ib }, PREFIX_OPCODE },
4652 },
4653
4654 /* PREFIX_0F3ACF */
4655 {
4656 { Bad_Opcode },
4657 { Bad_Opcode },
4658 { "gf2p8affineinvqb", { XM, EXxmm, Ib }, PREFIX_OPCODE },
4659 },
4660
c0f3af97 4661 /* PREFIX_0F3ADF */
09a2c6cf 4662 {
592d1631
L
4663 { Bad_Opcode },
4664 { Bad_Opcode },
507bd325 4665 { "aeskeygenassist", { XM, EXx, Ib }, PREFIX_OPCODE },
09a2c6cf
L
4666 },
4667
592a252b 4668 /* PREFIX_VEX_0F10 */
09a2c6cf 4669 {
ec6f095a
L
4670 { "vmovups", { XM, EXx }, 0 },
4671 { "vmovss", { XMVexScalar, VexScalar, EXdScalar }, 0 },
4672 { "vmovupd", { XM, EXx }, 0 },
4673 { "vmovsd", { XMVexScalar, VexScalar, EXqScalar }, 0 },
09a2c6cf
L
4674 },
4675
592a252b 4676 /* PREFIX_VEX_0F11 */
09a2c6cf 4677 {
ec6f095a
L
4678 { "vmovups", { EXxS, XM }, 0 },
4679 { "vmovss", { EXdVexScalarS, VexScalar, XMScalar }, 0 },
4680 { "vmovupd", { EXxS, XM }, 0 },
4681 { "vmovsd", { EXqVexScalarS, VexScalar, XMScalar }, 0 },
09a2c6cf
L
4682 },
4683
592a252b 4684 /* PREFIX_VEX_0F12 */
09a2c6cf 4685 {
592a252b 4686 { MOD_TABLE (MOD_VEX_0F12_PREFIX_0) },
ec6f095a 4687 { "vmovsldup", { XM, EXx }, 0 },
592a252b 4688 { VEX_LEN_TABLE (VEX_LEN_0F12_P_2) },
ec6f095a 4689 { "vmovddup", { XM, EXymmq }, 0 },
09a2c6cf
L
4690 },
4691
592a252b 4692 /* PREFIX_VEX_0F16 */
09a2c6cf 4693 {
592a252b 4694 { MOD_TABLE (MOD_VEX_0F16_PREFIX_0) },
ec6f095a 4695 { "vmovshdup", { XM, EXx }, 0 },
592a252b 4696 { VEX_LEN_TABLE (VEX_LEN_0F16_P_2) },
5f754f58 4697 },
7c52e0e8 4698
592a252b 4699 /* PREFIX_VEX_0F2A */
5f754f58 4700 {
592d1631 4701 { Bad_Opcode },
2b7bcc87 4702 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Edq }, 0 },
592d1631 4703 { Bad_Opcode },
2b7bcc87 4704 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Edq }, 0 },
5f754f58 4705 },
7c52e0e8 4706
592a252b 4707 /* PREFIX_VEX_0F2C */
5f754f58 4708 {
592d1631 4709 { Bad_Opcode },
2b7bcc87 4710 { "vcvttss2si", { Gdq, EXdScalar }, 0 },
592d1631 4711 { Bad_Opcode },
2b7bcc87 4712 { "vcvttsd2si", { Gdq, EXqScalar }, 0 },
5f754f58 4713 },
7c52e0e8 4714
592a252b 4715 /* PREFIX_VEX_0F2D */
7c52e0e8 4716 {
592d1631 4717 { Bad_Opcode },
2b7bcc87 4718 { "vcvtss2si", { Gdq, EXdScalar }, 0 },
592d1631 4719 { Bad_Opcode },
2b7bcc87 4720 { "vcvtsd2si", { Gdq, EXqScalar }, 0 },
7c52e0e8
L
4721 },
4722
592a252b 4723 /* PREFIX_VEX_0F2E */
7c52e0e8 4724 {
ec6f095a 4725 { "vucomiss", { XMScalar, EXdScalar }, 0 },
592d1631 4726 { Bad_Opcode },
ec6f095a 4727 { "vucomisd", { XMScalar, EXqScalar }, 0 },
7c52e0e8
L
4728 },
4729
592a252b 4730 /* PREFIX_VEX_0F2F */
7c52e0e8 4731 {
ec6f095a 4732 { "vcomiss", { XMScalar, EXdScalar }, 0 },
592d1631 4733 { Bad_Opcode },
ec6f095a 4734 { "vcomisd", { XMScalar, EXqScalar }, 0 },
7c52e0e8
L
4735 },
4736
43234a1e
L
4737 /* PREFIX_VEX_0F41 */
4738 {
4739 { VEX_LEN_TABLE (VEX_LEN_0F41_P_0) },
1ba585e8
IT
4740 { Bad_Opcode },
4741 { VEX_LEN_TABLE (VEX_LEN_0F41_P_2) },
43234a1e
L
4742 },
4743
4744 /* PREFIX_VEX_0F42 */
4745 {
4746 { VEX_LEN_TABLE (VEX_LEN_0F42_P_0) },
1ba585e8
IT
4747 { Bad_Opcode },
4748 { VEX_LEN_TABLE (VEX_LEN_0F42_P_2) },
43234a1e
L
4749 },
4750
4751 /* PREFIX_VEX_0F44 */
4752 {
4753 { VEX_LEN_TABLE (VEX_LEN_0F44_P_0) },
1ba585e8
IT
4754 { Bad_Opcode },
4755 { VEX_LEN_TABLE (VEX_LEN_0F44_P_2) },
43234a1e
L
4756 },
4757
4758 /* PREFIX_VEX_0F45 */
4759 {
4760 { VEX_LEN_TABLE (VEX_LEN_0F45_P_0) },
1ba585e8
IT
4761 { Bad_Opcode },
4762 { VEX_LEN_TABLE (VEX_LEN_0F45_P_2) },
43234a1e
L
4763 },
4764
4765 /* PREFIX_VEX_0F46 */
4766 {
4767 { VEX_LEN_TABLE (VEX_LEN_0F46_P_0) },
1ba585e8
IT
4768 { Bad_Opcode },
4769 { VEX_LEN_TABLE (VEX_LEN_0F46_P_2) },
43234a1e
L
4770 },
4771
4772 /* PREFIX_VEX_0F47 */
4773 {
4774 { VEX_LEN_TABLE (VEX_LEN_0F47_P_0) },
1ba585e8
IT
4775 { Bad_Opcode },
4776 { VEX_LEN_TABLE (VEX_LEN_0F47_P_2) },
43234a1e
L
4777 },
4778
1ba585e8 4779 /* PREFIX_VEX_0F4A */
43234a1e 4780 {
1ba585e8 4781 { VEX_LEN_TABLE (VEX_LEN_0F4A_P_0) },
43234a1e 4782 { Bad_Opcode },
1ba585e8
IT
4783 { VEX_LEN_TABLE (VEX_LEN_0F4A_P_2) },
4784 },
4785
4786 /* PREFIX_VEX_0F4B */
4787 {
4788 { VEX_LEN_TABLE (VEX_LEN_0F4B_P_0) },
43234a1e
L
4789 { Bad_Opcode },
4790 { VEX_LEN_TABLE (VEX_LEN_0F4B_P_2) },
4791 },
4792
592a252b 4793 /* PREFIX_VEX_0F51 */
7c52e0e8 4794 {
ec6f095a
L
4795 { "vsqrtps", { XM, EXx }, 0 },
4796 { "vsqrtss", { XMScalar, VexScalar, EXdScalar }, 0 },
4797 { "vsqrtpd", { XM, EXx }, 0 },
4798 { "vsqrtsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4799 },
4800
592a252b 4801 /* PREFIX_VEX_0F52 */
7c52e0e8 4802 {
ec6f095a
L
4803 { "vrsqrtps", { XM, EXx }, 0 },
4804 { "vrsqrtss", { XMScalar, VexScalar, EXdScalar }, 0 },
7c52e0e8
L
4805 },
4806
592a252b 4807 /* PREFIX_VEX_0F53 */
7c52e0e8 4808 {
ec6f095a
L
4809 { "vrcpps", { XM, EXx }, 0 },
4810 { "vrcpss", { XMScalar, VexScalar, EXdScalar }, 0 },
7c52e0e8
L
4811 },
4812
592a252b 4813 /* PREFIX_VEX_0F58 */
7c52e0e8 4814 {
ec6f095a
L
4815 { "vaddps", { XM, Vex, EXx }, 0 },
4816 { "vaddss", { XMScalar, VexScalar, EXdScalar }, 0 },
4817 { "vaddpd", { XM, Vex, EXx }, 0 },
4818 { "vaddsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4819 },
4820
592a252b 4821 /* PREFIX_VEX_0F59 */
7c52e0e8 4822 {
ec6f095a
L
4823 { "vmulps", { XM, Vex, EXx }, 0 },
4824 { "vmulss", { XMScalar, VexScalar, EXdScalar }, 0 },
4825 { "vmulpd", { XM, Vex, EXx }, 0 },
4826 { "vmulsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4827 },
4828
592a252b 4829 /* PREFIX_VEX_0F5A */
7c52e0e8 4830 {
ec6f095a
L
4831 { "vcvtps2pd", { XM, EXxmmq }, 0 },
4832 { "vcvtss2sd", { XMScalar, VexScalar, EXdScalar }, 0 },
4833 { "vcvtpd2ps%XY",{ XMM, EXx }, 0 },
4834 { "vcvtsd2ss", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4835 },
4836
592a252b 4837 /* PREFIX_VEX_0F5B */
7c52e0e8 4838 {
ec6f095a
L
4839 { "vcvtdq2ps", { XM, EXx }, 0 },
4840 { "vcvttps2dq", { XM, EXx }, 0 },
4841 { "vcvtps2dq", { XM, EXx }, 0 },
7c52e0e8
L
4842 },
4843
592a252b 4844 /* PREFIX_VEX_0F5C */
7c52e0e8 4845 {
ec6f095a
L
4846 { "vsubps", { XM, Vex, EXx }, 0 },
4847 { "vsubss", { XMScalar, VexScalar, EXdScalar }, 0 },
4848 { "vsubpd", { XM, Vex, EXx }, 0 },
4849 { "vsubsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4850 },
4851
592a252b 4852 /* PREFIX_VEX_0F5D */
7c52e0e8 4853 {
ec6f095a
L
4854 { "vminps", { XM, Vex, EXx }, 0 },
4855 { "vminss", { XMScalar, VexScalar, EXdScalar }, 0 },
4856 { "vminpd", { XM, Vex, EXx }, 0 },
4857 { "vminsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4858 },
4859
592a252b 4860 /* PREFIX_VEX_0F5E */
7c52e0e8 4861 {
ec6f095a
L
4862 { "vdivps", { XM, Vex, EXx }, 0 },
4863 { "vdivss", { XMScalar, VexScalar, EXdScalar }, 0 },
4864 { "vdivpd", { XM, Vex, EXx }, 0 },
4865 { "vdivsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4866 },
4867
592a252b 4868 /* PREFIX_VEX_0F5F */
7c52e0e8 4869 {
ec6f095a
L
4870 { "vmaxps", { XM, Vex, EXx }, 0 },
4871 { "vmaxss", { XMScalar, VexScalar, EXdScalar }, 0 },
4872 { "vmaxpd", { XM, Vex, EXx }, 0 },
4873 { "vmaxsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4874 },
4875
592a252b 4876 /* PREFIX_VEX_0F60 */
7c52e0e8 4877 {
592d1631
L
4878 { Bad_Opcode },
4879 { Bad_Opcode },
ec6f095a 4880 { "vpunpcklbw", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4881 },
4882
592a252b 4883 /* PREFIX_VEX_0F61 */
7c52e0e8 4884 {
592d1631
L
4885 { Bad_Opcode },
4886 { Bad_Opcode },
ec6f095a 4887 { "vpunpcklwd", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4888 },
4889
592a252b 4890 /* PREFIX_VEX_0F62 */
7c52e0e8 4891 {
592d1631
L
4892 { Bad_Opcode },
4893 { Bad_Opcode },
ec6f095a 4894 { "vpunpckldq", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4895 },
4896
592a252b 4897 /* PREFIX_VEX_0F63 */
7c52e0e8 4898 {
592d1631
L
4899 { Bad_Opcode },
4900 { Bad_Opcode },
ec6f095a 4901 { "vpacksswb", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4902 },
4903
592a252b 4904 /* PREFIX_VEX_0F64 */
7c52e0e8 4905 {
592d1631
L
4906 { Bad_Opcode },
4907 { Bad_Opcode },
ec6f095a 4908 { "vpcmpgtb", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4909 },
4910
592a252b 4911 /* PREFIX_VEX_0F65 */
7c52e0e8 4912 {
592d1631
L
4913 { Bad_Opcode },
4914 { Bad_Opcode },
ec6f095a 4915 { "vpcmpgtw", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4916 },
4917
592a252b 4918 /* PREFIX_VEX_0F66 */
7c52e0e8 4919 {
592d1631
L
4920 { Bad_Opcode },
4921 { Bad_Opcode },
ec6f095a 4922 { "vpcmpgtd", { XM, Vex, EXx }, 0 },
7c52e0e8 4923 },
6439fc28 4924
592a252b 4925 /* PREFIX_VEX_0F67 */
331d2d0d 4926 {
592d1631
L
4927 { Bad_Opcode },
4928 { Bad_Opcode },
ec6f095a 4929 { "vpackuswb", { XM, Vex, EXx }, 0 },
c0f3af97
L
4930 },
4931
592a252b 4932 /* PREFIX_VEX_0F68 */
c0f3af97 4933 {
592d1631
L
4934 { Bad_Opcode },
4935 { Bad_Opcode },
ec6f095a 4936 { "vpunpckhbw", { XM, Vex, EXx }, 0 },
c0f3af97
L
4937 },
4938
592a252b 4939 /* PREFIX_VEX_0F69 */
c0f3af97 4940 {
592d1631
L
4941 { Bad_Opcode },
4942 { Bad_Opcode },
ec6f095a 4943 { "vpunpckhwd", { XM, Vex, EXx }, 0 },
c0f3af97
L
4944 },
4945
592a252b 4946 /* PREFIX_VEX_0F6A */
c0f3af97 4947 {
592d1631
L
4948 { Bad_Opcode },
4949 { Bad_Opcode },
ec6f095a 4950 { "vpunpckhdq", { XM, Vex, EXx }, 0 },
c0f3af97
L
4951 },
4952
592a252b 4953 /* PREFIX_VEX_0F6B */
c0f3af97 4954 {
592d1631
L
4955 { Bad_Opcode },
4956 { Bad_Opcode },
ec6f095a 4957 { "vpackssdw", { XM, Vex, EXx }, 0 },
c0f3af97
L
4958 },
4959
592a252b 4960 /* PREFIX_VEX_0F6C */
c0f3af97 4961 {
592d1631
L
4962 { Bad_Opcode },
4963 { Bad_Opcode },
ec6f095a 4964 { "vpunpcklqdq", { XM, Vex, EXx }, 0 },
c0f3af97
L
4965 },
4966
592a252b 4967 /* PREFIX_VEX_0F6D */
c0f3af97 4968 {
592d1631
L
4969 { Bad_Opcode },
4970 { Bad_Opcode },
ec6f095a 4971 { "vpunpckhqdq", { XM, Vex, EXx }, 0 },
c0f3af97
L
4972 },
4973
592a252b 4974 /* PREFIX_VEX_0F6E */
c0f3af97 4975 {
592d1631
L
4976 { Bad_Opcode },
4977 { Bad_Opcode },
592a252b 4978 { VEX_LEN_TABLE (VEX_LEN_0F6E_P_2) },
c0f3af97
L
4979 },
4980
592a252b 4981 /* PREFIX_VEX_0F6F */
c0f3af97 4982 {
592d1631 4983 { Bad_Opcode },
ec6f095a
L
4984 { "vmovdqu", { XM, EXx }, 0 },
4985 { "vmovdqa", { XM, EXx }, 0 },
c0f3af97
L
4986 },
4987
592a252b 4988 /* PREFIX_VEX_0F70 */
c0f3af97 4989 {
592d1631 4990 { Bad_Opcode },
ec6f095a
L
4991 { "vpshufhw", { XM, EXx, Ib }, 0 },
4992 { "vpshufd", { XM, EXx, Ib }, 0 },
4993 { "vpshuflw", { XM, EXx, Ib }, 0 },
c0f3af97
L
4994 },
4995
592a252b 4996 /* PREFIX_VEX_0F71_REG_2 */
c0f3af97 4997 {
592d1631
L
4998 { Bad_Opcode },
4999 { Bad_Opcode },
ec6f095a 5000 { "vpsrlw", { Vex, XS, Ib }, 0 },
c0f3af97
L
5001 },
5002
592a252b 5003 /* PREFIX_VEX_0F71_REG_4 */
c0f3af97 5004 {
592d1631
L
5005 { Bad_Opcode },
5006 { Bad_Opcode },
ec6f095a 5007 { "vpsraw", { Vex, XS, Ib }, 0 },
c0f3af97
L
5008 },
5009
592a252b 5010 /* PREFIX_VEX_0F71_REG_6 */
c0f3af97 5011 {
592d1631
L
5012 { Bad_Opcode },
5013 { Bad_Opcode },
ec6f095a 5014 { "vpsllw", { Vex, XS, Ib }, 0 },
c0f3af97
L
5015 },
5016
592a252b 5017 /* PREFIX_VEX_0F72_REG_2 */
c0f3af97 5018 {
592d1631
L
5019 { Bad_Opcode },
5020 { Bad_Opcode },
ec6f095a 5021 { "vpsrld", { Vex, XS, Ib }, 0 },
c0f3af97
L
5022 },
5023
592a252b 5024 /* PREFIX_VEX_0F72_REG_4 */
c0f3af97 5025 {
592d1631
L
5026 { Bad_Opcode },
5027 { Bad_Opcode },
ec6f095a 5028 { "vpsrad", { Vex, XS, Ib }, 0 },
c0f3af97
L
5029 },
5030
592a252b 5031 /* PREFIX_VEX_0F72_REG_6 */
c0f3af97 5032 {
592d1631
L
5033 { Bad_Opcode },
5034 { Bad_Opcode },
ec6f095a 5035 { "vpslld", { Vex, XS, Ib }, 0 },
c0f3af97
L
5036 },
5037
592a252b 5038 /* PREFIX_VEX_0F73_REG_2 */
c0f3af97 5039 {
592d1631
L
5040 { Bad_Opcode },
5041 { Bad_Opcode },
ec6f095a 5042 { "vpsrlq", { Vex, XS, Ib }, 0 },
c0f3af97
L
5043 },
5044
592a252b 5045 /* PREFIX_VEX_0F73_REG_3 */
c0f3af97 5046 {
592d1631
L
5047 { Bad_Opcode },
5048 { Bad_Opcode },
ec6f095a 5049 { "vpsrldq", { Vex, XS, Ib }, 0 },
c0f3af97
L
5050 },
5051
592a252b 5052 /* PREFIX_VEX_0F73_REG_6 */
c0f3af97 5053 {
592d1631
L
5054 { Bad_Opcode },
5055 { Bad_Opcode },
ec6f095a 5056 { "vpsllq", { Vex, XS, Ib }, 0 },
c0f3af97
L
5057 },
5058
592a252b 5059 /* PREFIX_VEX_0F73_REG_7 */
c0f3af97 5060 {
592d1631
L
5061 { Bad_Opcode },
5062 { Bad_Opcode },
ec6f095a 5063 { "vpslldq", { Vex, XS, Ib }, 0 },
c0f3af97
L
5064 },
5065
592a252b 5066 /* PREFIX_VEX_0F74 */
c0f3af97 5067 {
592d1631
L
5068 { Bad_Opcode },
5069 { Bad_Opcode },
ec6f095a 5070 { "vpcmpeqb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5071 },
5072
592a252b 5073 /* PREFIX_VEX_0F75 */
c0f3af97 5074 {
592d1631
L
5075 { Bad_Opcode },
5076 { Bad_Opcode },
ec6f095a 5077 { "vpcmpeqw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5078 },
5079
592a252b 5080 /* PREFIX_VEX_0F76 */
c0f3af97 5081 {
592d1631
L
5082 { Bad_Opcode },
5083 { Bad_Opcode },
ec6f095a 5084 { "vpcmpeqd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5085 },
5086
592a252b 5087 /* PREFIX_VEX_0F77 */
c0f3af97 5088 {
ec6f095a 5089 { VEX_LEN_TABLE (VEX_LEN_0F77_P_0) },
c0f3af97
L
5090 },
5091
592a252b 5092 /* PREFIX_VEX_0F7C */
c0f3af97 5093 {
592d1631
L
5094 { Bad_Opcode },
5095 { Bad_Opcode },
ec6f095a
L
5096 { "vhaddpd", { XM, Vex, EXx }, 0 },
5097 { "vhaddps", { XM, Vex, EXx }, 0 },
c0f3af97
L
5098 },
5099
592a252b 5100 /* PREFIX_VEX_0F7D */
c0f3af97 5101 {
592d1631
L
5102 { Bad_Opcode },
5103 { Bad_Opcode },
ec6f095a
L
5104 { "vhsubpd", { XM, Vex, EXx }, 0 },
5105 { "vhsubps", { XM, Vex, EXx }, 0 },
c0f3af97
L
5106 },
5107
592a252b 5108 /* PREFIX_VEX_0F7E */
c0f3af97 5109 {
592d1631 5110 { Bad_Opcode },
592a252b
L
5111 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_1) },
5112 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_2) },
c0f3af97
L
5113 },
5114
592a252b 5115 /* PREFIX_VEX_0F7F */
c0f3af97 5116 {
592d1631 5117 { Bad_Opcode },
ec6f095a
L
5118 { "vmovdqu", { EXxS, XM }, 0 },
5119 { "vmovdqa", { EXxS, XM }, 0 },
c0f3af97
L
5120 },
5121
43234a1e
L
5122 /* PREFIX_VEX_0F90 */
5123 {
5124 { VEX_LEN_TABLE (VEX_LEN_0F90_P_0) },
1ba585e8
IT
5125 { Bad_Opcode },
5126 { VEX_LEN_TABLE (VEX_LEN_0F90_P_2) },
43234a1e
L
5127 },
5128
5129 /* PREFIX_VEX_0F91 */
5130 {
5131 { VEX_LEN_TABLE (VEX_LEN_0F91_P_0) },
1ba585e8
IT
5132 { Bad_Opcode },
5133 { VEX_LEN_TABLE (VEX_LEN_0F91_P_2) },
43234a1e
L
5134 },
5135
5136 /* PREFIX_VEX_0F92 */
5137 {
5138 { VEX_LEN_TABLE (VEX_LEN_0F92_P_0) },
1ba585e8 5139 { Bad_Opcode },
90a915bf 5140 { VEX_LEN_TABLE (VEX_LEN_0F92_P_2) },
1ba585e8 5141 { VEX_LEN_TABLE (VEX_LEN_0F92_P_3) },
43234a1e
L
5142 },
5143
5144 /* PREFIX_VEX_0F93 */
5145 {
5146 { VEX_LEN_TABLE (VEX_LEN_0F93_P_0) },
1ba585e8 5147 { Bad_Opcode },
90a915bf 5148 { VEX_LEN_TABLE (VEX_LEN_0F93_P_2) },
1ba585e8 5149 { VEX_LEN_TABLE (VEX_LEN_0F93_P_3) },
43234a1e
L
5150 },
5151
5152 /* PREFIX_VEX_0F98 */
5153 {
5154 { VEX_LEN_TABLE (VEX_LEN_0F98_P_0) },
1ba585e8
IT
5155 { Bad_Opcode },
5156 { VEX_LEN_TABLE (VEX_LEN_0F98_P_2) },
5157 },
5158
5159 /* PREFIX_VEX_0F99 */
5160 {
5161 { VEX_LEN_TABLE (VEX_LEN_0F99_P_0) },
5162 { Bad_Opcode },
5163 { VEX_LEN_TABLE (VEX_LEN_0F99_P_2) },
43234a1e
L
5164 },
5165
592a252b 5166 /* PREFIX_VEX_0FC2 */
c0f3af97 5167 {
ec6f095a
L
5168 { "vcmpps", { XM, Vex, EXx, VCMP }, 0 },
5169 { "vcmpss", { XMScalar, VexScalar, EXdScalar, VCMP }, 0 },
5170 { "vcmppd", { XM, Vex, EXx, VCMP }, 0 },
5171 { "vcmpsd", { XMScalar, VexScalar, EXqScalar, VCMP }, 0 },
c0f3af97
L
5172 },
5173
592a252b 5174 /* PREFIX_VEX_0FC4 */
c0f3af97 5175 {
592d1631
L
5176 { Bad_Opcode },
5177 { Bad_Opcode },
592a252b 5178 { VEX_LEN_TABLE (VEX_LEN_0FC4_P_2) },
c0f3af97
L
5179 },
5180
592a252b 5181 /* PREFIX_VEX_0FC5 */
c0f3af97 5182 {
592d1631
L
5183 { Bad_Opcode },
5184 { Bad_Opcode },
592a252b 5185 { VEX_LEN_TABLE (VEX_LEN_0FC5_P_2) },
c0f3af97
L
5186 },
5187
592a252b 5188 /* PREFIX_VEX_0FD0 */
c0f3af97 5189 {
592d1631
L
5190 { Bad_Opcode },
5191 { Bad_Opcode },
ec6f095a
L
5192 { "vaddsubpd", { XM, Vex, EXx }, 0 },
5193 { "vaddsubps", { XM, Vex, EXx }, 0 },
c0f3af97
L
5194 },
5195
592a252b 5196 /* PREFIX_VEX_0FD1 */
c0f3af97 5197 {
592d1631
L
5198 { Bad_Opcode },
5199 { Bad_Opcode },
ec6f095a 5200 { "vpsrlw", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5201 },
5202
592a252b 5203 /* PREFIX_VEX_0FD2 */
c0f3af97 5204 {
592d1631
L
5205 { Bad_Opcode },
5206 { Bad_Opcode },
ec6f095a 5207 { "vpsrld", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5208 },
5209
592a252b 5210 /* PREFIX_VEX_0FD3 */
c0f3af97 5211 {
592d1631
L
5212 { Bad_Opcode },
5213 { Bad_Opcode },
ec6f095a 5214 { "vpsrlq", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5215 },
5216
592a252b 5217 /* PREFIX_VEX_0FD4 */
c0f3af97 5218 {
592d1631
L
5219 { Bad_Opcode },
5220 { Bad_Opcode },
ec6f095a 5221 { "vpaddq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5222 },
5223
592a252b 5224 /* PREFIX_VEX_0FD5 */
c0f3af97 5225 {
592d1631
L
5226 { Bad_Opcode },
5227 { Bad_Opcode },
ec6f095a 5228 { "vpmullw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5229 },
5230
592a252b 5231 /* PREFIX_VEX_0FD6 */
c0f3af97 5232 {
592d1631
L
5233 { Bad_Opcode },
5234 { Bad_Opcode },
592a252b 5235 { VEX_LEN_TABLE (VEX_LEN_0FD6_P_2) },
c0f3af97
L
5236 },
5237
592a252b 5238 /* PREFIX_VEX_0FD7 */
c0f3af97 5239 {
592d1631
L
5240 { Bad_Opcode },
5241 { Bad_Opcode },
592a252b 5242 { MOD_TABLE (MOD_VEX_0FD7_PREFIX_2) },
c0f3af97
L
5243 },
5244
592a252b 5245 /* PREFIX_VEX_0FD8 */
c0f3af97 5246 {
592d1631
L
5247 { Bad_Opcode },
5248 { Bad_Opcode },
ec6f095a 5249 { "vpsubusb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5250 },
5251
592a252b 5252 /* PREFIX_VEX_0FD9 */
c0f3af97 5253 {
592d1631
L
5254 { Bad_Opcode },
5255 { Bad_Opcode },
ec6f095a 5256 { "vpsubusw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5257 },
5258
592a252b 5259 /* PREFIX_VEX_0FDA */
c0f3af97 5260 {
592d1631
L
5261 { Bad_Opcode },
5262 { Bad_Opcode },
ec6f095a 5263 { "vpminub", { XM, Vex, EXx }, 0 },
c0f3af97
L
5264 },
5265
592a252b 5266 /* PREFIX_VEX_0FDB */
c0f3af97 5267 {
592d1631
L
5268 { Bad_Opcode },
5269 { Bad_Opcode },
ec6f095a 5270 { "vpand", { XM, Vex, EXx }, 0 },
c0f3af97
L
5271 },
5272
592a252b 5273 /* PREFIX_VEX_0FDC */
c0f3af97 5274 {
592d1631
L
5275 { Bad_Opcode },
5276 { Bad_Opcode },
ec6f095a 5277 { "vpaddusb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5278 },
5279
592a252b 5280 /* PREFIX_VEX_0FDD */
c0f3af97 5281 {
592d1631
L
5282 { Bad_Opcode },
5283 { Bad_Opcode },
ec6f095a 5284 { "vpaddusw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5285 },
5286
592a252b 5287 /* PREFIX_VEX_0FDE */
c0f3af97 5288 {
592d1631
L
5289 { Bad_Opcode },
5290 { Bad_Opcode },
ec6f095a 5291 { "vpmaxub", { XM, Vex, EXx }, 0 },
c0f3af97
L
5292 },
5293
592a252b 5294 /* PREFIX_VEX_0FDF */
c0f3af97 5295 {
592d1631
L
5296 { Bad_Opcode },
5297 { Bad_Opcode },
ec6f095a 5298 { "vpandn", { XM, Vex, EXx }, 0 },
c0f3af97
L
5299 },
5300
592a252b 5301 /* PREFIX_VEX_0FE0 */
c0f3af97 5302 {
592d1631
L
5303 { Bad_Opcode },
5304 { Bad_Opcode },
ec6f095a 5305 { "vpavgb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5306 },
5307
592a252b 5308 /* PREFIX_VEX_0FE1 */
c0f3af97 5309 {
592d1631
L
5310 { Bad_Opcode },
5311 { Bad_Opcode },
ec6f095a 5312 { "vpsraw", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5313 },
5314
592a252b 5315 /* PREFIX_VEX_0FE2 */
c0f3af97 5316 {
592d1631
L
5317 { Bad_Opcode },
5318 { Bad_Opcode },
ec6f095a 5319 { "vpsrad", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5320 },
5321
592a252b 5322 /* PREFIX_VEX_0FE3 */
c0f3af97 5323 {
592d1631
L
5324 { Bad_Opcode },
5325 { Bad_Opcode },
ec6f095a 5326 { "vpavgw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5327 },
5328
592a252b 5329 /* PREFIX_VEX_0FE4 */
c0f3af97 5330 {
592d1631
L
5331 { Bad_Opcode },
5332 { Bad_Opcode },
ec6f095a 5333 { "vpmulhuw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5334 },
5335
592a252b 5336 /* PREFIX_VEX_0FE5 */
c0f3af97 5337 {
592d1631
L
5338 { Bad_Opcode },
5339 { Bad_Opcode },
ec6f095a 5340 { "vpmulhw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5341 },
5342
592a252b 5343 /* PREFIX_VEX_0FE6 */
c0f3af97 5344 {
592d1631 5345 { Bad_Opcode },
ec6f095a
L
5346 { "vcvtdq2pd", { XM, EXxmmq }, 0 },
5347 { "vcvttpd2dq%XY", { XMM, EXx }, 0 },
5348 { "vcvtpd2dq%XY", { XMM, EXx }, 0 },
c0f3af97
L
5349 },
5350
592a252b 5351 /* PREFIX_VEX_0FE7 */
c0f3af97 5352 {
592d1631
L
5353 { Bad_Opcode },
5354 { Bad_Opcode },
592a252b 5355 { MOD_TABLE (MOD_VEX_0FE7_PREFIX_2) },
c0f3af97
L
5356 },
5357
592a252b 5358 /* PREFIX_VEX_0FE8 */
c0f3af97 5359 {
592d1631
L
5360 { Bad_Opcode },
5361 { Bad_Opcode },
ec6f095a 5362 { "vpsubsb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5363 },
5364
592a252b 5365 /* PREFIX_VEX_0FE9 */
c0f3af97 5366 {
592d1631
L
5367 { Bad_Opcode },
5368 { Bad_Opcode },
ec6f095a 5369 { "vpsubsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5370 },
5371
592a252b 5372 /* PREFIX_VEX_0FEA */
c0f3af97 5373 {
592d1631
L
5374 { Bad_Opcode },
5375 { Bad_Opcode },
ec6f095a 5376 { "vpminsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5377 },
5378
592a252b 5379 /* PREFIX_VEX_0FEB */
c0f3af97 5380 {
592d1631
L
5381 { Bad_Opcode },
5382 { Bad_Opcode },
ec6f095a 5383 { "vpor", { XM, Vex, EXx }, 0 },
c0f3af97
L
5384 },
5385
592a252b 5386 /* PREFIX_VEX_0FEC */
c0f3af97 5387 {
592d1631
L
5388 { Bad_Opcode },
5389 { Bad_Opcode },
ec6f095a 5390 { "vpaddsb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5391 },
5392
592a252b 5393 /* PREFIX_VEX_0FED */
c0f3af97 5394 {
592d1631
L
5395 { Bad_Opcode },
5396 { Bad_Opcode },
ec6f095a 5397 { "vpaddsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5398 },
5399
592a252b 5400 /* PREFIX_VEX_0FEE */
c0f3af97 5401 {
592d1631
L
5402 { Bad_Opcode },
5403 { Bad_Opcode },
ec6f095a 5404 { "vpmaxsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5405 },
5406
592a252b 5407 /* PREFIX_VEX_0FEF */
c0f3af97 5408 {
592d1631
L
5409 { Bad_Opcode },
5410 { Bad_Opcode },
ec6f095a 5411 { "vpxor", { XM, Vex, EXx }, 0 },
c0f3af97
L
5412 },
5413
592a252b 5414 /* PREFIX_VEX_0FF0 */
c0f3af97 5415 {
592d1631
L
5416 { Bad_Opcode },
5417 { Bad_Opcode },
5418 { Bad_Opcode },
592a252b 5419 { MOD_TABLE (MOD_VEX_0FF0_PREFIX_3) },
c0f3af97
L
5420 },
5421
592a252b 5422 /* PREFIX_VEX_0FF1 */
c0f3af97 5423 {
592d1631
L
5424 { Bad_Opcode },
5425 { Bad_Opcode },
ec6f095a 5426 { "vpsllw", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5427 },
5428
592a252b 5429 /* PREFIX_VEX_0FF2 */
c0f3af97 5430 {
592d1631
L
5431 { Bad_Opcode },
5432 { Bad_Opcode },
ec6f095a 5433 { "vpslld", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5434 },
5435
592a252b 5436 /* PREFIX_VEX_0FF3 */
c0f3af97 5437 {
592d1631
L
5438 { Bad_Opcode },
5439 { Bad_Opcode },
ec6f095a 5440 { "vpsllq", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5441 },
5442
592a252b 5443 /* PREFIX_VEX_0FF4 */
c0f3af97 5444 {
592d1631
L
5445 { Bad_Opcode },
5446 { Bad_Opcode },
ec6f095a 5447 { "vpmuludq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5448 },
5449
592a252b 5450 /* PREFIX_VEX_0FF5 */
c0f3af97 5451 {
592d1631
L
5452 { Bad_Opcode },
5453 { Bad_Opcode },
ec6f095a 5454 { "vpmaddwd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5455 },
5456
592a252b 5457 /* PREFIX_VEX_0FF6 */
c0f3af97 5458 {
592d1631
L
5459 { Bad_Opcode },
5460 { Bad_Opcode },
ec6f095a 5461 { "vpsadbw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5462 },
5463
592a252b 5464 /* PREFIX_VEX_0FF7 */
c0f3af97 5465 {
592d1631
L
5466 { Bad_Opcode },
5467 { Bad_Opcode },
592a252b 5468 { VEX_LEN_TABLE (VEX_LEN_0FF7_P_2) },
c0f3af97
L
5469 },
5470
592a252b 5471 /* PREFIX_VEX_0FF8 */
c0f3af97 5472 {
592d1631
L
5473 { Bad_Opcode },
5474 { Bad_Opcode },
ec6f095a 5475 { "vpsubb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5476 },
5477
592a252b 5478 /* PREFIX_VEX_0FF9 */
c0f3af97 5479 {
592d1631
L
5480 { Bad_Opcode },
5481 { Bad_Opcode },
ec6f095a 5482 { "vpsubw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5483 },
5484
592a252b 5485 /* PREFIX_VEX_0FFA */
c0f3af97 5486 {
592d1631
L
5487 { Bad_Opcode },
5488 { Bad_Opcode },
ec6f095a 5489 { "vpsubd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5490 },
5491
592a252b 5492 /* PREFIX_VEX_0FFB */
c0f3af97 5493 {
592d1631
L
5494 { Bad_Opcode },
5495 { Bad_Opcode },
ec6f095a 5496 { "vpsubq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5497 },
5498
592a252b 5499 /* PREFIX_VEX_0FFC */
c0f3af97 5500 {
592d1631
L
5501 { Bad_Opcode },
5502 { Bad_Opcode },
ec6f095a 5503 { "vpaddb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5504 },
5505
592a252b 5506 /* PREFIX_VEX_0FFD */
c0f3af97 5507 {
592d1631
L
5508 { Bad_Opcode },
5509 { Bad_Opcode },
ec6f095a 5510 { "vpaddw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5511 },
5512
592a252b 5513 /* PREFIX_VEX_0FFE */
c0f3af97 5514 {
592d1631
L
5515 { Bad_Opcode },
5516 { Bad_Opcode },
ec6f095a 5517 { "vpaddd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5518 },
5519
592a252b 5520 /* PREFIX_VEX_0F3800 */
c0f3af97 5521 {
592d1631
L
5522 { Bad_Opcode },
5523 { Bad_Opcode },
ec6f095a 5524 { "vpshufb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5525 },
5526
592a252b 5527 /* PREFIX_VEX_0F3801 */
c0f3af97 5528 {
592d1631
L
5529 { Bad_Opcode },
5530 { Bad_Opcode },
ec6f095a 5531 { "vphaddw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5532 },
5533
592a252b 5534 /* PREFIX_VEX_0F3802 */
c0f3af97 5535 {
592d1631
L
5536 { Bad_Opcode },
5537 { Bad_Opcode },
ec6f095a 5538 { "vphaddd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5539 },
5540
592a252b 5541 /* PREFIX_VEX_0F3803 */
c0f3af97 5542 {
592d1631
L
5543 { Bad_Opcode },
5544 { Bad_Opcode },
ec6f095a 5545 { "vphaddsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5546 },
5547
592a252b 5548 /* PREFIX_VEX_0F3804 */
c0f3af97 5549 {
592d1631
L
5550 { Bad_Opcode },
5551 { Bad_Opcode },
ec6f095a 5552 { "vpmaddubsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5553 },
5554
592a252b 5555 /* PREFIX_VEX_0F3805 */
c0f3af97 5556 {
592d1631
L
5557 { Bad_Opcode },
5558 { Bad_Opcode },
ec6f095a 5559 { "vphsubw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5560 },
5561
592a252b 5562 /* PREFIX_VEX_0F3806 */
c0f3af97 5563 {
592d1631
L
5564 { Bad_Opcode },
5565 { Bad_Opcode },
ec6f095a 5566 { "vphsubd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5567 },
5568
592a252b 5569 /* PREFIX_VEX_0F3807 */
c0f3af97 5570 {
592d1631
L
5571 { Bad_Opcode },
5572 { Bad_Opcode },
ec6f095a 5573 { "vphsubsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5574 },
5575
592a252b 5576 /* PREFIX_VEX_0F3808 */
c0f3af97 5577 {
592d1631
L
5578 { Bad_Opcode },
5579 { Bad_Opcode },
ec6f095a 5580 { "vpsignb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5581 },
5582
592a252b 5583 /* PREFIX_VEX_0F3809 */
c0f3af97 5584 {
592d1631
L
5585 { Bad_Opcode },
5586 { Bad_Opcode },
ec6f095a 5587 { "vpsignw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5588 },
5589
592a252b 5590 /* PREFIX_VEX_0F380A */
c0f3af97 5591 {
592d1631
L
5592 { Bad_Opcode },
5593 { Bad_Opcode },
ec6f095a 5594 { "vpsignd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5595 },
5596
592a252b 5597 /* PREFIX_VEX_0F380B */
c0f3af97 5598 {
592d1631
L
5599 { Bad_Opcode },
5600 { Bad_Opcode },
ec6f095a 5601 { "vpmulhrsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5602 },
5603
592a252b 5604 /* PREFIX_VEX_0F380C */
c0f3af97 5605 {
592d1631
L
5606 { Bad_Opcode },
5607 { Bad_Opcode },
592a252b 5608 { VEX_W_TABLE (VEX_W_0F380C_P_2) },
c0f3af97
L
5609 },
5610
592a252b 5611 /* PREFIX_VEX_0F380D */
c0f3af97 5612 {
592d1631
L
5613 { Bad_Opcode },
5614 { Bad_Opcode },
592a252b 5615 { VEX_W_TABLE (VEX_W_0F380D_P_2) },
c0f3af97
L
5616 },
5617
592a252b 5618 /* PREFIX_VEX_0F380E */
c0f3af97 5619 {
592d1631
L
5620 { Bad_Opcode },
5621 { Bad_Opcode },
592a252b 5622 { VEX_W_TABLE (VEX_W_0F380E_P_2) },
c0f3af97
L
5623 },
5624
592a252b 5625 /* PREFIX_VEX_0F380F */
c0f3af97 5626 {
592d1631
L
5627 { Bad_Opcode },
5628 { Bad_Opcode },
592a252b 5629 { VEX_W_TABLE (VEX_W_0F380F_P_2) },
c0f3af97
L
5630 },
5631
592a252b 5632 /* PREFIX_VEX_0F3813 */
c7b8aa3a
L
5633 {
5634 { Bad_Opcode },
5635 { Bad_Opcode },
bf890a93 5636 { "vcvtph2ps", { XM, EXxmmq }, 0 },
c7b8aa3a
L
5637 },
5638
6c30d220
L
5639 /* PREFIX_VEX_0F3816 */
5640 {
5641 { Bad_Opcode },
5642 { Bad_Opcode },
5643 { VEX_LEN_TABLE (VEX_LEN_0F3816_P_2) },
5644 },
5645
592a252b 5646 /* PREFIX_VEX_0F3817 */
c0f3af97 5647 {
592d1631
L
5648 { Bad_Opcode },
5649 { Bad_Opcode },
ec6f095a 5650 { "vptest", { XM, EXx }, 0 },
c0f3af97
L
5651 },
5652
592a252b 5653 /* PREFIX_VEX_0F3818 */
c0f3af97 5654 {
592d1631
L
5655 { Bad_Opcode },
5656 { Bad_Opcode },
6c30d220 5657 { VEX_W_TABLE (VEX_W_0F3818_P_2) },
c0f3af97
L
5658 },
5659
592a252b 5660 /* PREFIX_VEX_0F3819 */
c0f3af97 5661 {
592d1631
L
5662 { Bad_Opcode },
5663 { Bad_Opcode },
6c30d220 5664 { VEX_LEN_TABLE (VEX_LEN_0F3819_P_2) },
c0f3af97
L
5665 },
5666
592a252b 5667 /* PREFIX_VEX_0F381A */
c0f3af97 5668 {
592d1631
L
5669 { Bad_Opcode },
5670 { Bad_Opcode },
592a252b 5671 { MOD_TABLE (MOD_VEX_0F381A_PREFIX_2) },
c0f3af97
L
5672 },
5673
592a252b 5674 /* PREFIX_VEX_0F381C */
c0f3af97 5675 {
592d1631
L
5676 { Bad_Opcode },
5677 { Bad_Opcode },
ec6f095a 5678 { "vpabsb", { XM, EXx }, 0 },
c0f3af97
L
5679 },
5680
592a252b 5681 /* PREFIX_VEX_0F381D */
c0f3af97 5682 {
592d1631
L
5683 { Bad_Opcode },
5684 { Bad_Opcode },
ec6f095a 5685 { "vpabsw", { XM, EXx }, 0 },
c0f3af97
L
5686 },
5687
592a252b 5688 /* PREFIX_VEX_0F381E */
c0f3af97 5689 {
592d1631
L
5690 { Bad_Opcode },
5691 { Bad_Opcode },
ec6f095a 5692 { "vpabsd", { XM, EXx }, 0 },
c0f3af97
L
5693 },
5694
592a252b 5695 /* PREFIX_VEX_0F3820 */
c0f3af97 5696 {
592d1631
L
5697 { Bad_Opcode },
5698 { Bad_Opcode },
ec6f095a 5699 { "vpmovsxbw", { XM, EXxmmq }, 0 },
c0f3af97
L
5700 },
5701
592a252b 5702 /* PREFIX_VEX_0F3821 */
c0f3af97 5703 {
592d1631
L
5704 { Bad_Opcode },
5705 { Bad_Opcode },
ec6f095a 5706 { "vpmovsxbd", { XM, EXxmmqd }, 0 },
c0f3af97
L
5707 },
5708
592a252b 5709 /* PREFIX_VEX_0F3822 */
c0f3af97 5710 {
592d1631
L
5711 { Bad_Opcode },
5712 { Bad_Opcode },
ec6f095a 5713 { "vpmovsxbq", { XM, EXxmmdw }, 0 },
c0f3af97
L
5714 },
5715
592a252b 5716 /* PREFIX_VEX_0F3823 */
c0f3af97 5717 {
592d1631
L
5718 { Bad_Opcode },
5719 { Bad_Opcode },
ec6f095a 5720 { "vpmovsxwd", { XM, EXxmmq }, 0 },
c0f3af97
L
5721 },
5722
592a252b 5723 /* PREFIX_VEX_0F3824 */
c0f3af97 5724 {
592d1631
L
5725 { Bad_Opcode },
5726 { Bad_Opcode },
ec6f095a 5727 { "vpmovsxwq", { XM, EXxmmqd }, 0 },
c0f3af97
L
5728 },
5729
592a252b 5730 /* PREFIX_VEX_0F3825 */
c0f3af97 5731 {
592d1631
L
5732 { Bad_Opcode },
5733 { Bad_Opcode },
ec6f095a 5734 { "vpmovsxdq", { XM, EXxmmq }, 0 },
c0f3af97
L
5735 },
5736
592a252b 5737 /* PREFIX_VEX_0F3828 */
c0f3af97 5738 {
592d1631
L
5739 { Bad_Opcode },
5740 { Bad_Opcode },
ec6f095a 5741 { "vpmuldq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5742 },
5743
592a252b 5744 /* PREFIX_VEX_0F3829 */
c0f3af97 5745 {
592d1631
L
5746 { Bad_Opcode },
5747 { Bad_Opcode },
ec6f095a 5748 { "vpcmpeqq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5749 },
5750
592a252b 5751 /* PREFIX_VEX_0F382A */
c0f3af97 5752 {
592d1631
L
5753 { Bad_Opcode },
5754 { Bad_Opcode },
592a252b 5755 { MOD_TABLE (MOD_VEX_0F382A_PREFIX_2) },
c0f3af97
L
5756 },
5757
592a252b 5758 /* PREFIX_VEX_0F382B */
c0f3af97 5759 {
592d1631
L
5760 { Bad_Opcode },
5761 { Bad_Opcode },
ec6f095a 5762 { "vpackusdw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5763 },
5764
592a252b 5765 /* PREFIX_VEX_0F382C */
c0f3af97 5766 {
592d1631
L
5767 { Bad_Opcode },
5768 { Bad_Opcode },
592a252b 5769 { MOD_TABLE (MOD_VEX_0F382C_PREFIX_2) },
c0f3af97
L
5770 },
5771
592a252b 5772 /* PREFIX_VEX_0F382D */
c0f3af97 5773 {
592d1631
L
5774 { Bad_Opcode },
5775 { Bad_Opcode },
592a252b 5776 { MOD_TABLE (MOD_VEX_0F382D_PREFIX_2) },
c0f3af97
L
5777 },
5778
592a252b 5779 /* PREFIX_VEX_0F382E */
c0f3af97 5780 {
592d1631
L
5781 { Bad_Opcode },
5782 { Bad_Opcode },
592a252b 5783 { MOD_TABLE (MOD_VEX_0F382E_PREFIX_2) },
c0f3af97
L
5784 },
5785
592a252b 5786 /* PREFIX_VEX_0F382F */
c0f3af97 5787 {
592d1631
L
5788 { Bad_Opcode },
5789 { Bad_Opcode },
592a252b 5790 { MOD_TABLE (MOD_VEX_0F382F_PREFIX_2) },
c0f3af97
L
5791 },
5792
592a252b 5793 /* PREFIX_VEX_0F3830 */
c0f3af97 5794 {
592d1631
L
5795 { Bad_Opcode },
5796 { Bad_Opcode },
ec6f095a 5797 { "vpmovzxbw", { XM, EXxmmq }, 0 },
c0f3af97
L
5798 },
5799
592a252b 5800 /* PREFIX_VEX_0F3831 */
c0f3af97 5801 {
592d1631
L
5802 { Bad_Opcode },
5803 { Bad_Opcode },
ec6f095a 5804 { "vpmovzxbd", { XM, EXxmmqd }, 0 },
c0f3af97
L
5805 },
5806
592a252b 5807 /* PREFIX_VEX_0F3832 */
c0f3af97 5808 {
592d1631
L
5809 { Bad_Opcode },
5810 { Bad_Opcode },
ec6f095a 5811 { "vpmovzxbq", { XM, EXxmmdw }, 0 },
c0f3af97
L
5812 },
5813
592a252b 5814 /* PREFIX_VEX_0F3833 */
c0f3af97 5815 {
592d1631
L
5816 { Bad_Opcode },
5817 { Bad_Opcode },
ec6f095a 5818 { "vpmovzxwd", { XM, EXxmmq }, 0 },
c0f3af97
L
5819 },
5820
592a252b 5821 /* PREFIX_VEX_0F3834 */
c0f3af97 5822 {
592d1631
L
5823 { Bad_Opcode },
5824 { Bad_Opcode },
ec6f095a 5825 { "vpmovzxwq", { XM, EXxmmqd }, 0 },
c0f3af97
L
5826 },
5827
592a252b 5828 /* PREFIX_VEX_0F3835 */
c0f3af97 5829 {
592d1631
L
5830 { Bad_Opcode },
5831 { Bad_Opcode },
ec6f095a 5832 { "vpmovzxdq", { XM, EXxmmq }, 0 },
6c30d220
L
5833 },
5834
5835 /* PREFIX_VEX_0F3836 */
5836 {
5837 { Bad_Opcode },
5838 { Bad_Opcode },
5839 { VEX_LEN_TABLE (VEX_LEN_0F3836_P_2) },
c0f3af97
L
5840 },
5841
592a252b 5842 /* PREFIX_VEX_0F3837 */
c0f3af97 5843 {
592d1631
L
5844 { Bad_Opcode },
5845 { Bad_Opcode },
ec6f095a 5846 { "vpcmpgtq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5847 },
5848
592a252b 5849 /* PREFIX_VEX_0F3838 */
c0f3af97 5850 {
592d1631
L
5851 { Bad_Opcode },
5852 { Bad_Opcode },
ec6f095a 5853 { "vpminsb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5854 },
5855
592a252b 5856 /* PREFIX_VEX_0F3839 */
c0f3af97 5857 {
592d1631
L
5858 { Bad_Opcode },
5859 { Bad_Opcode },
ec6f095a 5860 { "vpminsd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5861 },
5862
592a252b 5863 /* PREFIX_VEX_0F383A */
c0f3af97 5864 {
592d1631
L
5865 { Bad_Opcode },
5866 { Bad_Opcode },
ec6f095a 5867 { "vpminuw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5868 },
5869
592a252b 5870 /* PREFIX_VEX_0F383B */
c0f3af97 5871 {
592d1631
L
5872 { Bad_Opcode },
5873 { Bad_Opcode },
ec6f095a 5874 { "vpminud", { XM, Vex, EXx }, 0 },
c0f3af97
L
5875 },
5876
592a252b 5877 /* PREFIX_VEX_0F383C */
c0f3af97 5878 {
592d1631
L
5879 { Bad_Opcode },
5880 { Bad_Opcode },
ec6f095a 5881 { "vpmaxsb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5882 },
5883
592a252b 5884 /* PREFIX_VEX_0F383D */
c0f3af97 5885 {
592d1631
L
5886 { Bad_Opcode },
5887 { Bad_Opcode },
ec6f095a 5888 { "vpmaxsd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5889 },
5890
592a252b 5891 /* PREFIX_VEX_0F383E */
c0f3af97 5892 {
592d1631
L
5893 { Bad_Opcode },
5894 { Bad_Opcode },
ec6f095a 5895 { "vpmaxuw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5896 },
5897
592a252b 5898 /* PREFIX_VEX_0F383F */
c0f3af97 5899 {
592d1631
L
5900 { Bad_Opcode },
5901 { Bad_Opcode },
ec6f095a 5902 { "vpmaxud", { XM, Vex, EXx }, 0 },
c0f3af97
L
5903 },
5904
592a252b 5905 /* PREFIX_VEX_0F3840 */
c0f3af97 5906 {
592d1631
L
5907 { Bad_Opcode },
5908 { Bad_Opcode },
ec6f095a 5909 { "vpmulld", { XM, Vex, EXx }, 0 },
c0f3af97
L
5910 },
5911
592a252b 5912 /* PREFIX_VEX_0F3841 */
c0f3af97 5913 {
592d1631
L
5914 { Bad_Opcode },
5915 { Bad_Opcode },
592a252b 5916 { VEX_LEN_TABLE (VEX_LEN_0F3841_P_2) },
c0f3af97
L
5917 },
5918
6c30d220
L
5919 /* PREFIX_VEX_0F3845 */
5920 {
5921 { Bad_Opcode },
5922 { Bad_Opcode },
bf890a93 5923 { "vpsrlv%LW", { XM, Vex, EXx }, 0 },
6c30d220
L
5924 },
5925
5926 /* PREFIX_VEX_0F3846 */
5927 {
5928 { Bad_Opcode },
5929 { Bad_Opcode },
5930 { VEX_W_TABLE (VEX_W_0F3846_P_2) },
5931 },
5932
5933 /* PREFIX_VEX_0F3847 */
5934 {
5935 { Bad_Opcode },
5936 { Bad_Opcode },
bf890a93 5937 { "vpsllv%LW", { XM, Vex, EXx }, 0 },
6c30d220
L
5938 },
5939
5940 /* PREFIX_VEX_0F3858 */
5941 {
5942 { Bad_Opcode },
5943 { Bad_Opcode },
5944 { VEX_W_TABLE (VEX_W_0F3858_P_2) },
5945 },
5946
5947 /* PREFIX_VEX_0F3859 */
5948 {
5949 { Bad_Opcode },
5950 { Bad_Opcode },
5951 { VEX_W_TABLE (VEX_W_0F3859_P_2) },
5952 },
5953
5954 /* PREFIX_VEX_0F385A */
5955 {
5956 { Bad_Opcode },
5957 { Bad_Opcode },
5958 { MOD_TABLE (MOD_VEX_0F385A_PREFIX_2) },
5959 },
5960
5961 /* PREFIX_VEX_0F3878 */
5962 {
5963 { Bad_Opcode },
5964 { Bad_Opcode },
5965 { VEX_W_TABLE (VEX_W_0F3878_P_2) },
5966 },
5967
5968 /* PREFIX_VEX_0F3879 */
5969 {
5970 { Bad_Opcode },
5971 { Bad_Opcode },
5972 { VEX_W_TABLE (VEX_W_0F3879_P_2) },
5973 },
5974
5975 /* PREFIX_VEX_0F388C */
5976 {
5977 { Bad_Opcode },
5978 { Bad_Opcode },
f7002f42 5979 { MOD_TABLE (MOD_VEX_0F388C_PREFIX_2) },
6c30d220
L
5980 },
5981
5982 /* PREFIX_VEX_0F388E */
5983 {
5984 { Bad_Opcode },
5985 { Bad_Opcode },
f7002f42 5986 { MOD_TABLE (MOD_VEX_0F388E_PREFIX_2) },
6c30d220
L
5987 },
5988
5989 /* PREFIX_VEX_0F3890 */
5990 {
5991 { Bad_Opcode },
5992 { Bad_Opcode },
bf890a93 5993 { "vpgatherd%LW", { XM, MVexVSIBDWpX, Vex }, 0 },
6c30d220
L
5994 },
5995
5996 /* PREFIX_VEX_0F3891 */
5997 {
5998 { Bad_Opcode },
5999 { Bad_Opcode },
bf890a93 6000 { "vpgatherq%LW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ }, 0 },
6c30d220
L
6001 },
6002
6003 /* PREFIX_VEX_0F3892 */
6004 {
6005 { Bad_Opcode },
6006 { Bad_Opcode },
bf890a93 6007 { "vgatherdp%XW", { XM, MVexVSIBDWpX, Vex }, 0 },
6c30d220
L
6008 },
6009
6010 /* PREFIX_VEX_0F3893 */
6011 {
6012 { Bad_Opcode },
6013 { Bad_Opcode },
bf890a93 6014 { "vgatherqp%XW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ }, 0 },
6c30d220
L
6015 },
6016
592a252b 6017 /* PREFIX_VEX_0F3896 */
a5ff0eb2 6018 {
592d1631
L
6019 { Bad_Opcode },
6020 { Bad_Opcode },
bf890a93 6021 { "vfmaddsub132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6022 },
6023
592a252b 6024 /* PREFIX_VEX_0F3897 */
a5ff0eb2 6025 {
592d1631
L
6026 { Bad_Opcode },
6027 { Bad_Opcode },
bf890a93 6028 { "vfmsubadd132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6029 },
6030
592a252b 6031 /* PREFIX_VEX_0F3898 */
a5ff0eb2 6032 {
592d1631
L
6033 { Bad_Opcode },
6034 { Bad_Opcode },
bf890a93 6035 { "vfmadd132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6036 },
6037
592a252b 6038 /* PREFIX_VEX_0F3899 */
a5ff0eb2 6039 {
592d1631
L
6040 { Bad_Opcode },
6041 { Bad_Opcode },
bf890a93 6042 { "vfmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
a5ff0eb2
L
6043 },
6044
592a252b 6045 /* PREFIX_VEX_0F389A */
a5ff0eb2 6046 {
592d1631
L
6047 { Bad_Opcode },
6048 { Bad_Opcode },
bf890a93 6049 { "vfmsub132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6050 },
6051
592a252b 6052 /* PREFIX_VEX_0F389B */
c0f3af97 6053 {
592d1631
L
6054 { Bad_Opcode },
6055 { Bad_Opcode },
bf890a93 6056 { "vfmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6057 },
6058
592a252b 6059 /* PREFIX_VEX_0F389C */
c0f3af97 6060 {
592d1631
L
6061 { Bad_Opcode },
6062 { Bad_Opcode },
bf890a93 6063 { "vfnmadd132p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6064 },
6065
592a252b 6066 /* PREFIX_VEX_0F389D */
c0f3af97 6067 {
592d1631
L
6068 { Bad_Opcode },
6069 { Bad_Opcode },
bf890a93 6070 { "vfnmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6071 },
6072
592a252b 6073 /* PREFIX_VEX_0F389E */
c0f3af97 6074 {
592d1631
L
6075 { Bad_Opcode },
6076 { Bad_Opcode },
bf890a93 6077 { "vfnmsub132p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6078 },
6079
592a252b 6080 /* PREFIX_VEX_0F389F */
c0f3af97 6081 {
592d1631
L
6082 { Bad_Opcode },
6083 { Bad_Opcode },
bf890a93 6084 { "vfnmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6085 },
6086
592a252b 6087 /* PREFIX_VEX_0F38A6 */
c0f3af97 6088 {
592d1631
L
6089 { Bad_Opcode },
6090 { Bad_Opcode },
bf890a93 6091 { "vfmaddsub213p%XW", { XM, Vex, EXx }, 0 },
592d1631 6092 { Bad_Opcode },
c0f3af97
L
6093 },
6094
592a252b 6095 /* PREFIX_VEX_0F38A7 */
c0f3af97 6096 {
592d1631
L
6097 { Bad_Opcode },
6098 { Bad_Opcode },
bf890a93 6099 { "vfmsubadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6100 },
6101
592a252b 6102 /* PREFIX_VEX_0F38A8 */
c0f3af97 6103 {
592d1631
L
6104 { Bad_Opcode },
6105 { Bad_Opcode },
bf890a93 6106 { "vfmadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6107 },
6108
592a252b 6109 /* PREFIX_VEX_0F38A9 */
c0f3af97 6110 {
592d1631
L
6111 { Bad_Opcode },
6112 { Bad_Opcode },
bf890a93 6113 { "vfmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6114 },
6115
592a252b 6116 /* PREFIX_VEX_0F38AA */
c0f3af97 6117 {
592d1631
L
6118 { Bad_Opcode },
6119 { Bad_Opcode },
bf890a93 6120 { "vfmsub213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6121 },
6122
592a252b 6123 /* PREFIX_VEX_0F38AB */
c0f3af97 6124 {
592d1631
L
6125 { Bad_Opcode },
6126 { Bad_Opcode },
bf890a93 6127 { "vfmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6128 },
6129
592a252b 6130 /* PREFIX_VEX_0F38AC */
c0f3af97 6131 {
592d1631
L
6132 { Bad_Opcode },
6133 { Bad_Opcode },
bf890a93 6134 { "vfnmadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6135 },
6136
592a252b 6137 /* PREFIX_VEX_0F38AD */
c0f3af97 6138 {
592d1631
L
6139 { Bad_Opcode },
6140 { Bad_Opcode },
bf890a93 6141 { "vfnmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6142 },
6143
592a252b 6144 /* PREFIX_VEX_0F38AE */
c0f3af97 6145 {
592d1631
L
6146 { Bad_Opcode },
6147 { Bad_Opcode },
bf890a93 6148 { "vfnmsub213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6149 },
6150
592a252b 6151 /* PREFIX_VEX_0F38AF */
c0f3af97 6152 {
592d1631
L
6153 { Bad_Opcode },
6154 { Bad_Opcode },
bf890a93 6155 { "vfnmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6156 },
6157
592a252b 6158 /* PREFIX_VEX_0F38B6 */
c0f3af97 6159 {
592d1631
L
6160 { Bad_Opcode },
6161 { Bad_Opcode },
bf890a93 6162 { "vfmaddsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6163 },
6164
592a252b 6165 /* PREFIX_VEX_0F38B7 */
c0f3af97 6166 {
592d1631
L
6167 { Bad_Opcode },
6168 { Bad_Opcode },
bf890a93 6169 { "vfmsubadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6170 },
6171
592a252b 6172 /* PREFIX_VEX_0F38B8 */
c0f3af97 6173 {
592d1631
L
6174 { Bad_Opcode },
6175 { Bad_Opcode },
bf890a93 6176 { "vfmadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6177 },
6178
592a252b 6179 /* PREFIX_VEX_0F38B9 */
c0f3af97 6180 {
592d1631
L
6181 { Bad_Opcode },
6182 { Bad_Opcode },
bf890a93 6183 { "vfmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6184 },
6185
592a252b 6186 /* PREFIX_VEX_0F38BA */
c0f3af97 6187 {
592d1631
L
6188 { Bad_Opcode },
6189 { Bad_Opcode },
bf890a93 6190 { "vfmsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6191 },
6192
592a252b 6193 /* PREFIX_VEX_0F38BB */
c0f3af97 6194 {
592d1631
L
6195 { Bad_Opcode },
6196 { Bad_Opcode },
bf890a93 6197 { "vfmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6198 },
6199
592a252b 6200 /* PREFIX_VEX_0F38BC */
c0f3af97 6201 {
592d1631
L
6202 { Bad_Opcode },
6203 { Bad_Opcode },
bf890a93 6204 { "vfnmadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6205 },
6206
592a252b 6207 /* PREFIX_VEX_0F38BD */
c0f3af97 6208 {
592d1631
L
6209 { Bad_Opcode },
6210 { Bad_Opcode },
bf890a93 6211 { "vfnmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6212 },
6213
592a252b 6214 /* PREFIX_VEX_0F38BE */
c0f3af97 6215 {
592d1631
L
6216 { Bad_Opcode },
6217 { Bad_Opcode },
bf890a93 6218 { "vfnmsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6219 },
6220
592a252b 6221 /* PREFIX_VEX_0F38BF */
c0f3af97 6222 {
592d1631
L
6223 { Bad_Opcode },
6224 { Bad_Opcode },
bf890a93 6225 { "vfnmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6226 },
6227
48521003
IT
6228 /* PREFIX_VEX_0F38CF */
6229 {
6230 { Bad_Opcode },
6231 { Bad_Opcode },
6232 { VEX_W_TABLE (VEX_W_0F38CF_P_2) },
6233 },
6234
592a252b 6235 /* PREFIX_VEX_0F38DB */
c0f3af97 6236 {
592d1631
L
6237 { Bad_Opcode },
6238 { Bad_Opcode },
592a252b 6239 { VEX_LEN_TABLE (VEX_LEN_0F38DB_P_2) },
c0f3af97
L
6240 },
6241
592a252b 6242 /* PREFIX_VEX_0F38DC */
c0f3af97 6243 {
592d1631
L
6244 { Bad_Opcode },
6245 { Bad_Opcode },
8dcf1fad 6246 { "vaesenc", { XM, Vex, EXx }, 0 },
c0f3af97
L
6247 },
6248
592a252b 6249 /* PREFIX_VEX_0F38DD */
c0f3af97 6250 {
592d1631
L
6251 { Bad_Opcode },
6252 { Bad_Opcode },
8dcf1fad 6253 { "vaesenclast", { XM, Vex, EXx }, 0 },
c0f3af97
L
6254 },
6255
592a252b 6256 /* PREFIX_VEX_0F38DE */
c0f3af97 6257 {
592d1631
L
6258 { Bad_Opcode },
6259 { Bad_Opcode },
8dcf1fad 6260 { "vaesdec", { XM, Vex, EXx }, 0 },
c0f3af97
L
6261 },
6262
592a252b 6263 /* PREFIX_VEX_0F38DF */
c0f3af97 6264 {
592d1631
L
6265 { Bad_Opcode },
6266 { Bad_Opcode },
8dcf1fad 6267 { "vaesdeclast", { XM, Vex, EXx }, 0 },
c0f3af97
L
6268 },
6269
f12dc422
L
6270 /* PREFIX_VEX_0F38F2 */
6271 {
6272 { VEX_LEN_TABLE (VEX_LEN_0F38F2_P_0) },
6273 },
6274
6275 /* PREFIX_VEX_0F38F3_REG_1 */
6276 {
6277 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_1_P_0) },
6278 },
6279
6280 /* PREFIX_VEX_0F38F3_REG_2 */
6281 {
6282 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_2_P_0) },
6283 },
6284
6285 /* PREFIX_VEX_0F38F3_REG_3 */
6286 {
6287 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_3_P_0) },
6288 },
6289
6c30d220
L
6290 /* PREFIX_VEX_0F38F5 */
6291 {
6292 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_0) },
6293 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_1) },
6294 { Bad_Opcode },
6295 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_3) },
6296 },
6297
6298 /* PREFIX_VEX_0F38F6 */
6299 {
6300 { Bad_Opcode },
6301 { Bad_Opcode },
6302 { Bad_Opcode },
6303 { VEX_LEN_TABLE (VEX_LEN_0F38F6_P_3) },
6304 },
6305
f12dc422
L
6306 /* PREFIX_VEX_0F38F7 */
6307 {
6308 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_0) },
6c30d220
L
6309 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_1) },
6310 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_2) },
6311 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_3) },
6312 },
6313
6314 /* PREFIX_VEX_0F3A00 */
6315 {
6316 { Bad_Opcode },
6317 { Bad_Opcode },
6318 { VEX_LEN_TABLE (VEX_LEN_0F3A00_P_2) },
6319 },
6320
6321 /* PREFIX_VEX_0F3A01 */
6322 {
6323 { Bad_Opcode },
6324 { Bad_Opcode },
6325 { VEX_LEN_TABLE (VEX_LEN_0F3A01_P_2) },
6326 },
6327
6328 /* PREFIX_VEX_0F3A02 */
6329 {
6330 { Bad_Opcode },
6331 { Bad_Opcode },
6332 { VEX_W_TABLE (VEX_W_0F3A02_P_2) },
f12dc422
L
6333 },
6334
592a252b 6335 /* PREFIX_VEX_0F3A04 */
c0f3af97 6336 {
592d1631
L
6337 { Bad_Opcode },
6338 { Bad_Opcode },
592a252b 6339 { VEX_W_TABLE (VEX_W_0F3A04_P_2) },
c0f3af97
L
6340 },
6341
592a252b 6342 /* PREFIX_VEX_0F3A05 */
c0f3af97 6343 {
592d1631
L
6344 { Bad_Opcode },
6345 { Bad_Opcode },
592a252b 6346 { VEX_W_TABLE (VEX_W_0F3A05_P_2) },
c0f3af97
L
6347 },
6348
592a252b 6349 /* PREFIX_VEX_0F3A06 */
c0f3af97 6350 {
592d1631
L
6351 { Bad_Opcode },
6352 { Bad_Opcode },
592a252b 6353 { VEX_LEN_TABLE (VEX_LEN_0F3A06_P_2) },
c0f3af97
L
6354 },
6355
592a252b 6356 /* PREFIX_VEX_0F3A08 */
c0f3af97 6357 {
592d1631
L
6358 { Bad_Opcode },
6359 { Bad_Opcode },
ec6f095a 6360 { "vroundps", { XM, EXx, Ib }, 0 },
c0f3af97
L
6361 },
6362
592a252b 6363 /* PREFIX_VEX_0F3A09 */
c0f3af97 6364 {
592d1631
L
6365 { Bad_Opcode },
6366 { Bad_Opcode },
ec6f095a 6367 { "vroundpd", { XM, EXx, Ib }, 0 },
c0f3af97
L
6368 },
6369
592a252b 6370 /* PREFIX_VEX_0F3A0A */
c0f3af97 6371 {
592d1631
L
6372 { Bad_Opcode },
6373 { Bad_Opcode },
ec6f095a 6374 { "vroundss", { XMScalar, VexScalar, EXdScalar, Ib }, 0 },
0bfee649
L
6375 },
6376
592a252b 6377 /* PREFIX_VEX_0F3A0B */
0bfee649 6378 {
592d1631
L
6379 { Bad_Opcode },
6380 { Bad_Opcode },
ec6f095a 6381 { "vroundsd", { XMScalar, VexScalar, EXqScalar, Ib }, 0 },
0bfee649
L
6382 },
6383
592a252b 6384 /* PREFIX_VEX_0F3A0C */
0bfee649 6385 {
592d1631
L
6386 { Bad_Opcode },
6387 { Bad_Opcode },
ec6f095a 6388 { "vblendps", { XM, Vex, EXx, Ib }, 0 },
0bfee649
L
6389 },
6390
592a252b 6391 /* PREFIX_VEX_0F3A0D */
0bfee649 6392 {
592d1631
L
6393 { Bad_Opcode },
6394 { Bad_Opcode },
ec6f095a 6395 { "vblendpd", { XM, Vex, EXx, Ib }, 0 },
c0f3af97
L
6396 },
6397
592a252b 6398 /* PREFIX_VEX_0F3A0E */
0bfee649 6399 {
592d1631
L
6400 { Bad_Opcode },
6401 { Bad_Opcode },
ec6f095a 6402 { "vpblendw", { XM, Vex, EXx, Ib }, 0 },
0bfee649
L
6403 },
6404
592a252b 6405 /* PREFIX_VEX_0F3A0F */
0bfee649 6406 {
592d1631
L
6407 { Bad_Opcode },
6408 { Bad_Opcode },
ec6f095a 6409 { "vpalignr", { XM, Vex, EXx, Ib }, 0 },
0bfee649
L
6410 },
6411
592a252b 6412 /* PREFIX_VEX_0F3A14 */
0bfee649 6413 {
592d1631
L
6414 { Bad_Opcode },
6415 { Bad_Opcode },
592a252b 6416 { VEX_LEN_TABLE (VEX_LEN_0F3A14_P_2) },
0bfee649
L
6417 },
6418
592a252b 6419 /* PREFIX_VEX_0F3A15 */
0bfee649 6420 {
592d1631
L
6421 { Bad_Opcode },
6422 { Bad_Opcode },
592a252b 6423 { VEX_LEN_TABLE (VEX_LEN_0F3A15_P_2) },
0bfee649
L
6424 },
6425
592a252b 6426 /* PREFIX_VEX_0F3A16 */
c0f3af97 6427 {
592d1631
L
6428 { Bad_Opcode },
6429 { Bad_Opcode },
592a252b 6430 { VEX_LEN_TABLE (VEX_LEN_0F3A16_P_2) },
c0f3af97
L
6431 },
6432
592a252b 6433 /* PREFIX_VEX_0F3A17 */
c0f3af97 6434 {
592d1631
L
6435 { Bad_Opcode },
6436 { Bad_Opcode },
592a252b 6437 { VEX_LEN_TABLE (VEX_LEN_0F3A17_P_2) },
c0f3af97
L
6438 },
6439
592a252b 6440 /* PREFIX_VEX_0F3A18 */
c0f3af97 6441 {
592d1631
L
6442 { Bad_Opcode },
6443 { Bad_Opcode },
592a252b 6444 { VEX_LEN_TABLE (VEX_LEN_0F3A18_P_2) },
c0f3af97
L
6445 },
6446
592a252b 6447 /* PREFIX_VEX_0F3A19 */
c0f3af97 6448 {
592d1631
L
6449 { Bad_Opcode },
6450 { Bad_Opcode },
592a252b 6451 { VEX_LEN_TABLE (VEX_LEN_0F3A19_P_2) },
c0f3af97
L
6452 },
6453
592a252b 6454 /* PREFIX_VEX_0F3A1D */
c7b8aa3a
L
6455 {
6456 { Bad_Opcode },
6457 { Bad_Opcode },
bf890a93 6458 { "vcvtps2ph", { EXxmmq, XM, Ib }, 0 },
c7b8aa3a
L
6459 },
6460
592a252b 6461 /* PREFIX_VEX_0F3A20 */
c0f3af97 6462 {
592d1631
L
6463 { Bad_Opcode },
6464 { Bad_Opcode },
592a252b 6465 { VEX_LEN_TABLE (VEX_LEN_0F3A20_P_2) },
c0f3af97
L
6466 },
6467
592a252b 6468 /* PREFIX_VEX_0F3A21 */
c0f3af97 6469 {
592d1631
L
6470 { Bad_Opcode },
6471 { Bad_Opcode },
592a252b 6472 { VEX_LEN_TABLE (VEX_LEN_0F3A21_P_2) },
c0f3af97
L
6473 },
6474
592a252b 6475 /* PREFIX_VEX_0F3A22 */
0bfee649 6476 {
592d1631
L
6477 { Bad_Opcode },
6478 { Bad_Opcode },
592a252b 6479 { VEX_LEN_TABLE (VEX_LEN_0F3A22_P_2) },
0bfee649
L
6480 },
6481
43234a1e
L
6482 /* PREFIX_VEX_0F3A30 */
6483 {
6484 { Bad_Opcode },
6485 { Bad_Opcode },
6486 { VEX_LEN_TABLE (VEX_LEN_0F3A30_P_2) },
6487 },
6488
1ba585e8
IT
6489 /* PREFIX_VEX_0F3A31 */
6490 {
6491 { Bad_Opcode },
6492 { Bad_Opcode },
6493 { VEX_LEN_TABLE (VEX_LEN_0F3A31_P_2) },
6494 },
6495
43234a1e
L
6496 /* PREFIX_VEX_0F3A32 */
6497 {
6498 { Bad_Opcode },
6499 { Bad_Opcode },
6500 { VEX_LEN_TABLE (VEX_LEN_0F3A32_P_2) },
6501 },
6502
1ba585e8
IT
6503 /* PREFIX_VEX_0F3A33 */
6504 {
6505 { Bad_Opcode },
6506 { Bad_Opcode },
6507 { VEX_LEN_TABLE (VEX_LEN_0F3A33_P_2) },
6508 },
6509
6c30d220
L
6510 /* PREFIX_VEX_0F3A38 */
6511 {
6512 { Bad_Opcode },
6513 { Bad_Opcode },
6514 { VEX_LEN_TABLE (VEX_LEN_0F3A38_P_2) },
6515 },
6516
6517 /* PREFIX_VEX_0F3A39 */
6518 {
6519 { Bad_Opcode },
6520 { Bad_Opcode },
6521 { VEX_LEN_TABLE (VEX_LEN_0F3A39_P_2) },
6522 },
6523
592a252b 6524 /* PREFIX_VEX_0F3A40 */
c0f3af97 6525 {
592d1631
L
6526 { Bad_Opcode },
6527 { Bad_Opcode },
ec6f095a 6528 { "vdpps", { XM, Vex, EXx, Ib }, 0 },
c0f3af97
L
6529 },
6530
592a252b 6531 /* PREFIX_VEX_0F3A41 */
c0f3af97 6532 {
592d1631
L
6533 { Bad_Opcode },
6534 { Bad_Opcode },
592a252b 6535 { VEX_LEN_TABLE (VEX_LEN_0F3A41_P_2) },
c0f3af97
L
6536 },
6537
592a252b 6538 /* PREFIX_VEX_0F3A42 */
c0f3af97 6539 {
592d1631
L
6540 { Bad_Opcode },
6541 { Bad_Opcode },
ec6f095a 6542 { "vmpsadbw", { XM, Vex, EXx, Ib }, 0 },
c0f3af97
L
6543 },
6544
592a252b 6545 /* PREFIX_VEX_0F3A44 */
ce2f5b3c 6546 {
592d1631
L
6547 { Bad_Opcode },
6548 { Bad_Opcode },
ff1982d5 6549 { "vpclmulqdq", { XM, Vex, EXx, PCLMUL }, 0 },
ce2f5b3c
L
6550 },
6551
6c30d220
L
6552 /* PREFIX_VEX_0F3A46 */
6553 {
6554 { Bad_Opcode },
6555 { Bad_Opcode },
6556 { VEX_LEN_TABLE (VEX_LEN_0F3A46_P_2) },
6557 },
6558
592a252b 6559 /* PREFIX_VEX_0F3A48 */
a683cc34
SP
6560 {
6561 { Bad_Opcode },
6562 { Bad_Opcode },
592a252b 6563 { VEX_W_TABLE (VEX_W_0F3A48_P_2) },
a683cc34
SP
6564 },
6565
592a252b 6566 /* PREFIX_VEX_0F3A49 */
a683cc34
SP
6567 {
6568 { Bad_Opcode },
6569 { Bad_Opcode },
592a252b 6570 { VEX_W_TABLE (VEX_W_0F3A49_P_2) },
a683cc34
SP
6571 },
6572
592a252b 6573 /* PREFIX_VEX_0F3A4A */
c0f3af97 6574 {
592d1631
L
6575 { Bad_Opcode },
6576 { Bad_Opcode },
592a252b 6577 { VEX_W_TABLE (VEX_W_0F3A4A_P_2) },
c0f3af97
L
6578 },
6579
592a252b 6580 /* PREFIX_VEX_0F3A4B */
c0f3af97 6581 {
592d1631
L
6582 { Bad_Opcode },
6583 { Bad_Opcode },
592a252b 6584 { VEX_W_TABLE (VEX_W_0F3A4B_P_2) },
c0f3af97
L
6585 },
6586
592a252b 6587 /* PREFIX_VEX_0F3A4C */
c0f3af97 6588 {
592d1631
L
6589 { Bad_Opcode },
6590 { Bad_Opcode },
6c30d220 6591 { VEX_W_TABLE (VEX_W_0F3A4C_P_2) },
c0f3af97
L
6592 },
6593
592a252b 6594 /* PREFIX_VEX_0F3A5C */
922d8de8 6595 {
592d1631
L
6596 { Bad_Opcode },
6597 { Bad_Opcode },
3a2430e0 6598 { "vfmaddsubps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6599 },
6600
592a252b 6601 /* PREFIX_VEX_0F3A5D */
922d8de8 6602 {
592d1631
L
6603 { Bad_Opcode },
6604 { Bad_Opcode },
3a2430e0 6605 { "vfmaddsubpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6606 },
6607
592a252b 6608 /* PREFIX_VEX_0F3A5E */
922d8de8 6609 {
592d1631
L
6610 { Bad_Opcode },
6611 { Bad_Opcode },
3a2430e0 6612 { "vfmsubaddps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6613 },
6614
592a252b 6615 /* PREFIX_VEX_0F3A5F */
922d8de8 6616 {
592d1631
L
6617 { Bad_Opcode },
6618 { Bad_Opcode },
3a2430e0 6619 { "vfmsubaddpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6620 },
6621
592a252b 6622 /* PREFIX_VEX_0F3A60 */
c0f3af97 6623 {
592d1631
L
6624 { Bad_Opcode },
6625 { Bad_Opcode },
592a252b 6626 { VEX_LEN_TABLE (VEX_LEN_0F3A60_P_2) },
592d1631 6627 { Bad_Opcode },
c0f3af97
L
6628 },
6629
592a252b 6630 /* PREFIX_VEX_0F3A61 */
c0f3af97 6631 {
592d1631
L
6632 { Bad_Opcode },
6633 { Bad_Opcode },
592a252b 6634 { VEX_LEN_TABLE (VEX_LEN_0F3A61_P_2) },
c0f3af97
L
6635 },
6636
592a252b 6637 /* PREFIX_VEX_0F3A62 */
c0f3af97 6638 {
592d1631
L
6639 { Bad_Opcode },
6640 { Bad_Opcode },
592a252b 6641 { VEX_LEN_TABLE (VEX_LEN_0F3A62_P_2) },
c0f3af97
L
6642 },
6643
592a252b 6644 /* PREFIX_VEX_0F3A63 */
c0f3af97 6645 {
592d1631
L
6646 { Bad_Opcode },
6647 { Bad_Opcode },
592a252b 6648 { VEX_LEN_TABLE (VEX_LEN_0F3A63_P_2) },
c0f3af97 6649 },
a5ff0eb2 6650
592a252b 6651 /* PREFIX_VEX_0F3A68 */
922d8de8 6652 {
592d1631
L
6653 { Bad_Opcode },
6654 { Bad_Opcode },
3a2430e0 6655 { "vfmaddps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6656 },
6657
592a252b 6658 /* PREFIX_VEX_0F3A69 */
922d8de8 6659 {
592d1631
L
6660 { Bad_Opcode },
6661 { Bad_Opcode },
3a2430e0 6662 { "vfmaddpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6663 },
6664
592a252b 6665 /* PREFIX_VEX_0F3A6A */
922d8de8 6666 {
592d1631
L
6667 { Bad_Opcode },
6668 { Bad_Opcode },
592a252b 6669 { VEX_LEN_TABLE (VEX_LEN_0F3A6A_P_2) },
922d8de8
DR
6670 },
6671
592a252b 6672 /* PREFIX_VEX_0F3A6B */
922d8de8 6673 {
592d1631
L
6674 { Bad_Opcode },
6675 { Bad_Opcode },
592a252b 6676 { VEX_LEN_TABLE (VEX_LEN_0F3A6B_P_2) },
922d8de8
DR
6677 },
6678
592a252b 6679 /* PREFIX_VEX_0F3A6C */
922d8de8 6680 {
592d1631
L
6681 { Bad_Opcode },
6682 { Bad_Opcode },
3a2430e0 6683 { "vfmsubps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6684 },
6685
592a252b 6686 /* PREFIX_VEX_0F3A6D */
922d8de8 6687 {
592d1631
L
6688 { Bad_Opcode },
6689 { Bad_Opcode },
3a2430e0 6690 { "vfmsubpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6691 },
6692
592a252b 6693 /* PREFIX_VEX_0F3A6E */
922d8de8 6694 {
592d1631
L
6695 { Bad_Opcode },
6696 { Bad_Opcode },
592a252b 6697 { VEX_LEN_TABLE (VEX_LEN_0F3A6E_P_2) },
922d8de8
DR
6698 },
6699
592a252b 6700 /* PREFIX_VEX_0F3A6F */
922d8de8 6701 {
592d1631
L
6702 { Bad_Opcode },
6703 { Bad_Opcode },
592a252b 6704 { VEX_LEN_TABLE (VEX_LEN_0F3A6F_P_2) },
922d8de8
DR
6705 },
6706
592a252b 6707 /* PREFIX_VEX_0F3A78 */
922d8de8 6708 {
592d1631
L
6709 { Bad_Opcode },
6710 { Bad_Opcode },
3a2430e0 6711 { "vfnmaddps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6712 },
6713
592a252b 6714 /* PREFIX_VEX_0F3A79 */
922d8de8 6715 {
592d1631
L
6716 { Bad_Opcode },
6717 { Bad_Opcode },
3a2430e0 6718 { "vfnmaddpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6719 },
6720
592a252b 6721 /* PREFIX_VEX_0F3A7A */
922d8de8 6722 {
592d1631
L
6723 { Bad_Opcode },
6724 { Bad_Opcode },
592a252b 6725 { VEX_LEN_TABLE (VEX_LEN_0F3A7A_P_2) },
922d8de8
DR
6726 },
6727
592a252b 6728 /* PREFIX_VEX_0F3A7B */
922d8de8 6729 {
592d1631
L
6730 { Bad_Opcode },
6731 { Bad_Opcode },
592a252b 6732 { VEX_LEN_TABLE (VEX_LEN_0F3A7B_P_2) },
922d8de8
DR
6733 },
6734
592a252b 6735 /* PREFIX_VEX_0F3A7C */
922d8de8 6736 {
592d1631
L
6737 { Bad_Opcode },
6738 { Bad_Opcode },
3a2430e0 6739 { "vfnmsubps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
592d1631 6740 { Bad_Opcode },
922d8de8
DR
6741 },
6742
592a252b 6743 /* PREFIX_VEX_0F3A7D */
922d8de8 6744 {
592d1631
L
6745 { Bad_Opcode },
6746 { Bad_Opcode },
3a2430e0 6747 { "vfnmsubpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6748 },
6749
592a252b 6750 /* PREFIX_VEX_0F3A7E */
922d8de8 6751 {
592d1631
L
6752 { Bad_Opcode },
6753 { Bad_Opcode },
592a252b 6754 { VEX_LEN_TABLE (VEX_LEN_0F3A7E_P_2) },
922d8de8
DR
6755 },
6756
592a252b 6757 /* PREFIX_VEX_0F3A7F */
922d8de8 6758 {
592d1631
L
6759 { Bad_Opcode },
6760 { Bad_Opcode },
592a252b 6761 { VEX_LEN_TABLE (VEX_LEN_0F3A7F_P_2) },
922d8de8
DR
6762 },
6763
48521003
IT
6764 /* PREFIX_VEX_0F3ACE */
6765 {
6766 { Bad_Opcode },
6767 { Bad_Opcode },
6768 { VEX_W_TABLE (VEX_W_0F3ACE_P_2) },
6769 },
6770
6771 /* PREFIX_VEX_0F3ACF */
6772 {
6773 { Bad_Opcode },
6774 { Bad_Opcode },
6775 { VEX_W_TABLE (VEX_W_0F3ACF_P_2) },
6776 },
6777
592a252b 6778 /* PREFIX_VEX_0F3ADF */
a5ff0eb2 6779 {
592d1631
L
6780 { Bad_Opcode },
6781 { Bad_Opcode },
592a252b 6782 { VEX_LEN_TABLE (VEX_LEN_0F3ADF_P_2) },
a5ff0eb2 6783 },
6c30d220
L
6784
6785 /* PREFIX_VEX_0F3AF0 */
6786 {
6787 { Bad_Opcode },
6788 { Bad_Opcode },
6789 { Bad_Opcode },
6790 { VEX_LEN_TABLE (VEX_LEN_0F3AF0_P_3) },
6791 },
43234a1e 6792
ad692897 6793#include "i386-dis-evex-prefix.h"
c0f3af97
L
6794};
6795
6796static const struct dis386 x86_64_table[][2] = {
6797 /* X86_64_06 */
6798 {
bf890a93 6799 { "pushP", { es }, 0 },
c0f3af97
L
6800 },
6801
6802 /* X86_64_07 */
6803 {
bf890a93 6804 { "popP", { es }, 0 },
c0f3af97
L
6805 },
6806
6807 /* X86_64_0D */
6808 {
bf890a93 6809 { "pushP", { cs }, 0 },
c0f3af97
L
6810 },
6811
6812 /* X86_64_16 */
6813 {
bf890a93 6814 { "pushP", { ss }, 0 },
c0f3af97
L
6815 },
6816
6817 /* X86_64_17 */
6818 {
bf890a93 6819 { "popP", { ss }, 0 },
c0f3af97
L
6820 },
6821
6822 /* X86_64_1E */
6823 {
bf890a93 6824 { "pushP", { ds }, 0 },
c0f3af97
L
6825 },
6826
6827 /* X86_64_1F */
6828 {
bf890a93 6829 { "popP", { ds }, 0 },
c0f3af97
L
6830 },
6831
6832 /* X86_64_27 */
6833 {
bf890a93 6834 { "daa", { XX }, 0 },
c0f3af97
L
6835 },
6836
6837 /* X86_64_2F */
6838 {
bf890a93 6839 { "das", { XX }, 0 },
c0f3af97
L
6840 },
6841
6842 /* X86_64_37 */
6843 {
bf890a93 6844 { "aaa", { XX }, 0 },
c0f3af97
L
6845 },
6846
6847 /* X86_64_3F */
6848 {
bf890a93 6849 { "aas", { XX }, 0 },
c0f3af97
L
6850 },
6851
6852 /* X86_64_60 */
6853 {
bf890a93 6854 { "pushaP", { XX }, 0 },
c0f3af97
L
6855 },
6856
6857 /* X86_64_61 */
6858 {
bf890a93 6859 { "popaP", { XX }, 0 },
c0f3af97
L
6860 },
6861
6862 /* X86_64_62 */
6863 {
6864 { MOD_TABLE (MOD_62_32BIT) },
43234a1e 6865 { EVEX_TABLE (EVEX_0F) },
c0f3af97
L
6866 },
6867
6868 /* X86_64_63 */
6869 {
bf890a93
IT
6870 { "arpl", { Ew, Gw }, 0 },
6871 { "movs{lq|xd}", { Gv, Ed }, 0 },
c0f3af97
L
6872 },
6873
6874 /* X86_64_6D */
6875 {
bf890a93
IT
6876 { "ins{R|}", { Yzr, indirDX }, 0 },
6877 { "ins{G|}", { Yzr, indirDX }, 0 },
c0f3af97
L
6878 },
6879
6880 /* X86_64_6F */
6881 {
bf890a93
IT
6882 { "outs{R|}", { indirDXr, Xz }, 0 },
6883 { "outs{G|}", { indirDXr, Xz }, 0 },
c0f3af97
L
6884 },
6885
d039fef3 6886 /* X86_64_82 */
8b89fe14 6887 {
de194d85 6888 /* Opcode 0x82 is an alias of opcode 0x80 in 32-bit mode. */
d039fef3 6889 { REG_TABLE (REG_80) },
8b89fe14
L
6890 },
6891
c0f3af97
L
6892 /* X86_64_9A */
6893 {
bf890a93 6894 { "Jcall{T|}", { Ap }, 0 },
c0f3af97
L
6895 },
6896
6897 /* X86_64_C4 */
6898 {
6899 { MOD_TABLE (MOD_C4_32BIT) },
6900 { VEX_C4_TABLE (VEX_0F) },
6901 },
6902
6903 /* X86_64_C5 */
6904 {
6905 { MOD_TABLE (MOD_C5_32BIT) },
6906 { VEX_C5_TABLE (VEX_0F) },
6907 },
6908
6909 /* X86_64_CE */
6910 {
bf890a93 6911 { "into", { XX }, 0 },
c0f3af97
L
6912 },
6913
6914 /* X86_64_D4 */
6915 {
bf890a93 6916 { "aam", { Ib }, 0 },
c0f3af97
L
6917 },
6918
6919 /* X86_64_D5 */
6920 {
bf890a93 6921 { "aad", { Ib }, 0 },
c0f3af97
L
6922 },
6923
a72d2af2
L
6924 /* X86_64_E8 */
6925 {
6926 { "callP", { Jv, BND }, 0 },
5db04b09 6927 { "call@", { Jv, BND }, 0 }
a72d2af2
L
6928 },
6929
6930 /* X86_64_E9 */
6931 {
6932 { "jmpP", { Jv, BND }, 0 },
5db04b09 6933 { "jmp@", { Jv, BND }, 0 }
a72d2af2
L
6934 },
6935
c0f3af97
L
6936 /* X86_64_EA */
6937 {
bf890a93 6938 { "Jjmp{T|}", { Ap }, 0 },
c0f3af97
L
6939 },
6940
6941 /* X86_64_0F01_REG_0 */
6942 {
bf890a93
IT
6943 { "sgdt{Q|IQ}", { M }, 0 },
6944 { "sgdt", { M }, 0 },
c0f3af97
L
6945 },
6946
6947 /* X86_64_0F01_REG_1 */
6948 {
bf890a93
IT
6949 { "sidt{Q|IQ}", { M }, 0 },
6950 { "sidt", { M }, 0 },
c0f3af97
L
6951 },
6952
6953 /* X86_64_0F01_REG_2 */
6954 {
bf890a93
IT
6955 { "lgdt{Q|Q}", { M }, 0 },
6956 { "lgdt", { M }, 0 },
c0f3af97
L
6957 },
6958
6959 /* X86_64_0F01_REG_3 */
6960 {
bf890a93
IT
6961 { "lidt{Q|Q}", { M }, 0 },
6962 { "lidt", { M }, 0 },
c0f3af97
L
6963 },
6964};
6965
6966static const struct dis386 three_byte_table[][256] = {
c1e679ec
DR
6967
6968 /* THREE_BYTE_0F38 */
c0f3af97
L
6969 {
6970 /* 00 */
507bd325
L
6971 { "pshufb", { MX, EM }, PREFIX_OPCODE },
6972 { "phaddw", { MX, EM }, PREFIX_OPCODE },
6973 { "phaddd", { MX, EM }, PREFIX_OPCODE },
6974 { "phaddsw", { MX, EM }, PREFIX_OPCODE },
6975 { "pmaddubsw", { MX, EM }, PREFIX_OPCODE },
6976 { "phsubw", { MX, EM }, PREFIX_OPCODE },
6977 { "phsubd", { MX, EM }, PREFIX_OPCODE },
6978 { "phsubsw", { MX, EM }, PREFIX_OPCODE },
c0f3af97 6979 /* 08 */
507bd325
L
6980 { "psignb", { MX, EM }, PREFIX_OPCODE },
6981 { "psignw", { MX, EM }, PREFIX_OPCODE },
6982 { "psignd", { MX, EM }, PREFIX_OPCODE },
6983 { "pmulhrsw", { MX, EM }, PREFIX_OPCODE },
592d1631
L
6984 { Bad_Opcode },
6985 { Bad_Opcode },
6986 { Bad_Opcode },
6987 { Bad_Opcode },
f88c9eb0
SP
6988 /* 10 */
6989 { PREFIX_TABLE (PREFIX_0F3810) },
592d1631
L
6990 { Bad_Opcode },
6991 { Bad_Opcode },
6992 { Bad_Opcode },
f88c9eb0
SP
6993 { PREFIX_TABLE (PREFIX_0F3814) },
6994 { PREFIX_TABLE (PREFIX_0F3815) },
592d1631 6995 { Bad_Opcode },
f88c9eb0
SP
6996 { PREFIX_TABLE (PREFIX_0F3817) },
6997 /* 18 */
592d1631
L
6998 { Bad_Opcode },
6999 { Bad_Opcode },
7000 { Bad_Opcode },
7001 { Bad_Opcode },
507bd325
L
7002 { "pabsb", { MX, EM }, PREFIX_OPCODE },
7003 { "pabsw", { MX, EM }, PREFIX_OPCODE },
7004 { "pabsd", { MX, EM }, PREFIX_OPCODE },
592d1631 7005 { Bad_Opcode },
f88c9eb0
SP
7006 /* 20 */
7007 { PREFIX_TABLE (PREFIX_0F3820) },
7008 { PREFIX_TABLE (PREFIX_0F3821) },
7009 { PREFIX_TABLE (PREFIX_0F3822) },
7010 { PREFIX_TABLE (PREFIX_0F3823) },
7011 { PREFIX_TABLE (PREFIX_0F3824) },
7012 { PREFIX_TABLE (PREFIX_0F3825) },
592d1631
L
7013 { Bad_Opcode },
7014 { Bad_Opcode },
f88c9eb0
SP
7015 /* 28 */
7016 { PREFIX_TABLE (PREFIX_0F3828) },
7017 { PREFIX_TABLE (PREFIX_0F3829) },
7018 { PREFIX_TABLE (PREFIX_0F382A) },
7019 { PREFIX_TABLE (PREFIX_0F382B) },
592d1631
L
7020 { Bad_Opcode },
7021 { Bad_Opcode },
7022 { Bad_Opcode },
7023 { Bad_Opcode },
f88c9eb0
SP
7024 /* 30 */
7025 { PREFIX_TABLE (PREFIX_0F3830) },
7026 { PREFIX_TABLE (PREFIX_0F3831) },
7027 { PREFIX_TABLE (PREFIX_0F3832) },
7028 { PREFIX_TABLE (PREFIX_0F3833) },
7029 { PREFIX_TABLE (PREFIX_0F3834) },
7030 { PREFIX_TABLE (PREFIX_0F3835) },
592d1631 7031 { Bad_Opcode },
f88c9eb0
SP
7032 { PREFIX_TABLE (PREFIX_0F3837) },
7033 /* 38 */
7034 { PREFIX_TABLE (PREFIX_0F3838) },
7035 { PREFIX_TABLE (PREFIX_0F3839) },
7036 { PREFIX_TABLE (PREFIX_0F383A) },
7037 { PREFIX_TABLE (PREFIX_0F383B) },
7038 { PREFIX_TABLE (PREFIX_0F383C) },
7039 { PREFIX_TABLE (PREFIX_0F383D) },
7040 { PREFIX_TABLE (PREFIX_0F383E) },
7041 { PREFIX_TABLE (PREFIX_0F383F) },
7042 /* 40 */
7043 { PREFIX_TABLE (PREFIX_0F3840) },
7044 { PREFIX_TABLE (PREFIX_0F3841) },
592d1631
L
7045 { Bad_Opcode },
7046 { Bad_Opcode },
7047 { Bad_Opcode },
7048 { Bad_Opcode },
7049 { Bad_Opcode },
7050 { Bad_Opcode },
f88c9eb0 7051 /* 48 */
592d1631
L
7052 { Bad_Opcode },
7053 { Bad_Opcode },
7054 { Bad_Opcode },
7055 { Bad_Opcode },
7056 { Bad_Opcode },
7057 { Bad_Opcode },
7058 { Bad_Opcode },
7059 { Bad_Opcode },
f88c9eb0 7060 /* 50 */
592d1631
L
7061 { Bad_Opcode },
7062 { Bad_Opcode },
7063 { Bad_Opcode },
7064 { Bad_Opcode },
7065 { Bad_Opcode },
7066 { Bad_Opcode },
7067 { Bad_Opcode },
7068 { Bad_Opcode },
f88c9eb0 7069 /* 58 */
592d1631
L
7070 { Bad_Opcode },
7071 { Bad_Opcode },
7072 { Bad_Opcode },
7073 { Bad_Opcode },
7074 { Bad_Opcode },
7075 { Bad_Opcode },
7076 { Bad_Opcode },
7077 { Bad_Opcode },
f88c9eb0 7078 /* 60 */
592d1631
L
7079 { Bad_Opcode },
7080 { Bad_Opcode },
7081 { Bad_Opcode },
7082 { Bad_Opcode },
7083 { Bad_Opcode },
7084 { Bad_Opcode },
7085 { Bad_Opcode },
7086 { Bad_Opcode },
f88c9eb0 7087 /* 68 */
592d1631
L
7088 { Bad_Opcode },
7089 { Bad_Opcode },
7090 { Bad_Opcode },
7091 { Bad_Opcode },
7092 { Bad_Opcode },
7093 { Bad_Opcode },
7094 { Bad_Opcode },
7095 { Bad_Opcode },
f88c9eb0 7096 /* 70 */
592d1631
L
7097 { Bad_Opcode },
7098 { Bad_Opcode },
7099 { Bad_Opcode },
7100 { Bad_Opcode },
7101 { Bad_Opcode },
7102 { Bad_Opcode },
7103 { Bad_Opcode },
7104 { Bad_Opcode },
f88c9eb0 7105 /* 78 */
592d1631
L
7106 { Bad_Opcode },
7107 { Bad_Opcode },
7108 { Bad_Opcode },
7109 { Bad_Opcode },
7110 { Bad_Opcode },
7111 { Bad_Opcode },
7112 { Bad_Opcode },
7113 { Bad_Opcode },
f88c9eb0
SP
7114 /* 80 */
7115 { PREFIX_TABLE (PREFIX_0F3880) },
7116 { PREFIX_TABLE (PREFIX_0F3881) },
6c30d220 7117 { PREFIX_TABLE (PREFIX_0F3882) },
592d1631
L
7118 { Bad_Opcode },
7119 { Bad_Opcode },
7120 { Bad_Opcode },
7121 { Bad_Opcode },
7122 { Bad_Opcode },
f88c9eb0 7123 /* 88 */
592d1631
L
7124 { Bad_Opcode },
7125 { Bad_Opcode },
7126 { Bad_Opcode },
7127 { Bad_Opcode },
7128 { Bad_Opcode },
7129 { Bad_Opcode },
7130 { Bad_Opcode },
7131 { Bad_Opcode },
f88c9eb0 7132 /* 90 */
592d1631
L
7133 { Bad_Opcode },
7134 { Bad_Opcode },
7135 { Bad_Opcode },
7136 { Bad_Opcode },
7137 { Bad_Opcode },
7138 { Bad_Opcode },
7139 { Bad_Opcode },
7140 { Bad_Opcode },
f88c9eb0 7141 /* 98 */
592d1631
L
7142 { Bad_Opcode },
7143 { Bad_Opcode },
7144 { Bad_Opcode },
7145 { Bad_Opcode },
7146 { Bad_Opcode },
7147 { Bad_Opcode },
7148 { Bad_Opcode },
7149 { Bad_Opcode },
f88c9eb0 7150 /* a0 */
592d1631
L
7151 { Bad_Opcode },
7152 { Bad_Opcode },
7153 { Bad_Opcode },
7154 { Bad_Opcode },
7155 { Bad_Opcode },
7156 { Bad_Opcode },
7157 { Bad_Opcode },
7158 { Bad_Opcode },
f88c9eb0 7159 /* a8 */
592d1631
L
7160 { Bad_Opcode },
7161 { Bad_Opcode },
7162 { Bad_Opcode },
7163 { Bad_Opcode },
7164 { Bad_Opcode },
7165 { Bad_Opcode },
7166 { Bad_Opcode },
7167 { Bad_Opcode },
f88c9eb0 7168 /* b0 */
592d1631
L
7169 { Bad_Opcode },
7170 { Bad_Opcode },
7171 { Bad_Opcode },
7172 { Bad_Opcode },
7173 { Bad_Opcode },
7174 { Bad_Opcode },
7175 { Bad_Opcode },
7176 { Bad_Opcode },
f88c9eb0 7177 /* b8 */
592d1631
L
7178 { Bad_Opcode },
7179 { Bad_Opcode },
7180 { Bad_Opcode },
7181 { Bad_Opcode },
7182 { Bad_Opcode },
7183 { Bad_Opcode },
7184 { Bad_Opcode },
7185 { Bad_Opcode },
f88c9eb0 7186 /* c0 */
592d1631
L
7187 { Bad_Opcode },
7188 { Bad_Opcode },
7189 { Bad_Opcode },
7190 { Bad_Opcode },
7191 { Bad_Opcode },
7192 { Bad_Opcode },
7193 { Bad_Opcode },
7194 { Bad_Opcode },
f88c9eb0 7195 /* c8 */
a0046408
L
7196 { PREFIX_TABLE (PREFIX_0F38C8) },
7197 { PREFIX_TABLE (PREFIX_0F38C9) },
7198 { PREFIX_TABLE (PREFIX_0F38CA) },
7199 { PREFIX_TABLE (PREFIX_0F38CB) },
7200 { PREFIX_TABLE (PREFIX_0F38CC) },
7201 { PREFIX_TABLE (PREFIX_0F38CD) },
592d1631 7202 { Bad_Opcode },
48521003 7203 { PREFIX_TABLE (PREFIX_0F38CF) },
f88c9eb0 7204 /* d0 */
592d1631
L
7205 { Bad_Opcode },
7206 { Bad_Opcode },
7207 { Bad_Opcode },
7208 { Bad_Opcode },
7209 { Bad_Opcode },
7210 { Bad_Opcode },
7211 { Bad_Opcode },
7212 { Bad_Opcode },
f88c9eb0 7213 /* d8 */
592d1631
L
7214 { Bad_Opcode },
7215 { Bad_Opcode },
7216 { Bad_Opcode },
f88c9eb0
SP
7217 { PREFIX_TABLE (PREFIX_0F38DB) },
7218 { PREFIX_TABLE (PREFIX_0F38DC) },
7219 { PREFIX_TABLE (PREFIX_0F38DD) },
7220 { PREFIX_TABLE (PREFIX_0F38DE) },
7221 { PREFIX_TABLE (PREFIX_0F38DF) },
7222 /* e0 */
592d1631
L
7223 { Bad_Opcode },
7224 { Bad_Opcode },
7225 { Bad_Opcode },
7226 { Bad_Opcode },
7227 { Bad_Opcode },
7228 { Bad_Opcode },
7229 { Bad_Opcode },
7230 { Bad_Opcode },
f88c9eb0 7231 /* e8 */
592d1631
L
7232 { Bad_Opcode },
7233 { Bad_Opcode },
7234 { Bad_Opcode },
7235 { Bad_Opcode },
7236 { Bad_Opcode },
7237 { Bad_Opcode },
7238 { Bad_Opcode },
7239 { Bad_Opcode },
f88c9eb0
SP
7240 /* f0 */
7241 { PREFIX_TABLE (PREFIX_0F38F0) },
7242 { PREFIX_TABLE (PREFIX_0F38F1) },
592d1631
L
7243 { Bad_Opcode },
7244 { Bad_Opcode },
7245 { Bad_Opcode },
603555e5 7246 { PREFIX_TABLE (PREFIX_0F38F5) },
e2e1fcde 7247 { PREFIX_TABLE (PREFIX_0F38F6) },
592d1631 7248 { Bad_Opcode },
f88c9eb0 7249 /* f8 */
c0a30a9f
L
7250 { PREFIX_TABLE (PREFIX_0F38F8) },
7251 { PREFIX_TABLE (PREFIX_0F38F9) },
592d1631
L
7252 { Bad_Opcode },
7253 { Bad_Opcode },
7254 { Bad_Opcode },
7255 { Bad_Opcode },
7256 { Bad_Opcode },
7257 { Bad_Opcode },
f88c9eb0
SP
7258 },
7259 /* THREE_BYTE_0F3A */
7260 {
7261 /* 00 */
592d1631
L
7262 { Bad_Opcode },
7263 { Bad_Opcode },
7264 { Bad_Opcode },
7265 { Bad_Opcode },
7266 { Bad_Opcode },
7267 { Bad_Opcode },
7268 { Bad_Opcode },
7269 { Bad_Opcode },
f88c9eb0
SP
7270 /* 08 */
7271 { PREFIX_TABLE (PREFIX_0F3A08) },
7272 { PREFIX_TABLE (PREFIX_0F3A09) },
7273 { PREFIX_TABLE (PREFIX_0F3A0A) },
7274 { PREFIX_TABLE (PREFIX_0F3A0B) },
7275 { PREFIX_TABLE (PREFIX_0F3A0C) },
7276 { PREFIX_TABLE (PREFIX_0F3A0D) },
7277 { PREFIX_TABLE (PREFIX_0F3A0E) },
507bd325 7278 { "palignr", { MX, EM, Ib }, PREFIX_OPCODE },
f88c9eb0 7279 /* 10 */
592d1631
L
7280 { Bad_Opcode },
7281 { Bad_Opcode },
7282 { Bad_Opcode },
7283 { Bad_Opcode },
f88c9eb0
SP
7284 { PREFIX_TABLE (PREFIX_0F3A14) },
7285 { PREFIX_TABLE (PREFIX_0F3A15) },
7286 { PREFIX_TABLE (PREFIX_0F3A16) },
7287 { PREFIX_TABLE (PREFIX_0F3A17) },
7288 /* 18 */
592d1631
L
7289 { Bad_Opcode },
7290 { Bad_Opcode },
7291 { Bad_Opcode },
7292 { Bad_Opcode },
7293 { Bad_Opcode },
7294 { Bad_Opcode },
7295 { Bad_Opcode },
7296 { Bad_Opcode },
f88c9eb0
SP
7297 /* 20 */
7298 { PREFIX_TABLE (PREFIX_0F3A20) },
7299 { PREFIX_TABLE (PREFIX_0F3A21) },
7300 { PREFIX_TABLE (PREFIX_0F3A22) },
592d1631
L
7301 { Bad_Opcode },
7302 { Bad_Opcode },
7303 { Bad_Opcode },
7304 { Bad_Opcode },
7305 { Bad_Opcode },
f88c9eb0 7306 /* 28 */
592d1631
L
7307 { Bad_Opcode },
7308 { Bad_Opcode },
7309 { Bad_Opcode },
7310 { Bad_Opcode },
7311 { Bad_Opcode },
7312 { Bad_Opcode },
7313 { Bad_Opcode },
7314 { Bad_Opcode },
f88c9eb0 7315 /* 30 */
592d1631
L
7316 { Bad_Opcode },
7317 { Bad_Opcode },
7318 { Bad_Opcode },
7319 { Bad_Opcode },
7320 { Bad_Opcode },
7321 { Bad_Opcode },
7322 { Bad_Opcode },
7323 { Bad_Opcode },
f88c9eb0 7324 /* 38 */
592d1631
L
7325 { Bad_Opcode },
7326 { Bad_Opcode },
7327 { Bad_Opcode },
7328 { Bad_Opcode },
7329 { Bad_Opcode },
7330 { Bad_Opcode },
7331 { Bad_Opcode },
7332 { Bad_Opcode },
f88c9eb0
SP
7333 /* 40 */
7334 { PREFIX_TABLE (PREFIX_0F3A40) },
7335 { PREFIX_TABLE (PREFIX_0F3A41) },
7336 { PREFIX_TABLE (PREFIX_0F3A42) },
592d1631 7337 { Bad_Opcode },
f88c9eb0 7338 { PREFIX_TABLE (PREFIX_0F3A44) },
592d1631
L
7339 { Bad_Opcode },
7340 { Bad_Opcode },
7341 { Bad_Opcode },
f88c9eb0 7342 /* 48 */
592d1631
L
7343 { Bad_Opcode },
7344 { Bad_Opcode },
7345 { Bad_Opcode },
7346 { Bad_Opcode },
7347 { Bad_Opcode },
7348 { Bad_Opcode },
7349 { Bad_Opcode },
7350 { Bad_Opcode },
f88c9eb0 7351 /* 50 */
592d1631
L
7352 { Bad_Opcode },
7353 { Bad_Opcode },
7354 { Bad_Opcode },
7355 { Bad_Opcode },
7356 { Bad_Opcode },
7357 { Bad_Opcode },
7358 { Bad_Opcode },
7359 { Bad_Opcode },
f88c9eb0 7360 /* 58 */
592d1631
L
7361 { Bad_Opcode },
7362 { Bad_Opcode },
7363 { Bad_Opcode },
7364 { Bad_Opcode },
7365 { Bad_Opcode },
7366 { Bad_Opcode },
7367 { Bad_Opcode },
7368 { Bad_Opcode },
f88c9eb0
SP
7369 /* 60 */
7370 { PREFIX_TABLE (PREFIX_0F3A60) },
7371 { PREFIX_TABLE (PREFIX_0F3A61) },
7372 { PREFIX_TABLE (PREFIX_0F3A62) },
7373 { PREFIX_TABLE (PREFIX_0F3A63) },
592d1631
L
7374 { Bad_Opcode },
7375 { Bad_Opcode },
7376 { Bad_Opcode },
7377 { Bad_Opcode },
f88c9eb0 7378 /* 68 */
592d1631
L
7379 { Bad_Opcode },
7380 { Bad_Opcode },
7381 { Bad_Opcode },
7382 { Bad_Opcode },
7383 { Bad_Opcode },
7384 { Bad_Opcode },
7385 { Bad_Opcode },
7386 { Bad_Opcode },
f88c9eb0 7387 /* 70 */
592d1631
L
7388 { Bad_Opcode },
7389 { Bad_Opcode },
7390 { Bad_Opcode },
7391 { Bad_Opcode },
7392 { Bad_Opcode },
7393 { Bad_Opcode },
7394 { Bad_Opcode },
7395 { Bad_Opcode },
f88c9eb0 7396 /* 78 */
592d1631
L
7397 { Bad_Opcode },
7398 { Bad_Opcode },
7399 { Bad_Opcode },
7400 { Bad_Opcode },
7401 { Bad_Opcode },
7402 { Bad_Opcode },
7403 { Bad_Opcode },
7404 { Bad_Opcode },
f88c9eb0 7405 /* 80 */
592d1631
L
7406 { Bad_Opcode },
7407 { Bad_Opcode },
7408 { Bad_Opcode },
7409 { Bad_Opcode },
7410 { Bad_Opcode },
7411 { Bad_Opcode },
7412 { Bad_Opcode },
7413 { Bad_Opcode },
f88c9eb0 7414 /* 88 */
592d1631
L
7415 { Bad_Opcode },
7416 { Bad_Opcode },
7417 { Bad_Opcode },
7418 { Bad_Opcode },
7419 { Bad_Opcode },
7420 { Bad_Opcode },
7421 { Bad_Opcode },
7422 { Bad_Opcode },
f88c9eb0 7423 /* 90 */
592d1631
L
7424 { Bad_Opcode },
7425 { Bad_Opcode },
7426 { Bad_Opcode },
7427 { Bad_Opcode },
7428 { Bad_Opcode },
7429 { Bad_Opcode },
7430 { Bad_Opcode },
7431 { Bad_Opcode },
f88c9eb0 7432 /* 98 */
592d1631
L
7433 { Bad_Opcode },
7434 { Bad_Opcode },
7435 { Bad_Opcode },
7436 { Bad_Opcode },
7437 { Bad_Opcode },
7438 { Bad_Opcode },
7439 { Bad_Opcode },
7440 { Bad_Opcode },
f88c9eb0 7441 /* a0 */
592d1631
L
7442 { Bad_Opcode },
7443 { Bad_Opcode },
7444 { Bad_Opcode },
7445 { Bad_Opcode },
7446 { Bad_Opcode },
7447 { Bad_Opcode },
7448 { Bad_Opcode },
7449 { Bad_Opcode },
f88c9eb0 7450 /* a8 */
592d1631
L
7451 { Bad_Opcode },
7452 { Bad_Opcode },
7453 { Bad_Opcode },
7454 { Bad_Opcode },
7455 { Bad_Opcode },
7456 { Bad_Opcode },
7457 { Bad_Opcode },
7458 { Bad_Opcode },
f88c9eb0 7459 /* b0 */
592d1631
L
7460 { Bad_Opcode },
7461 { Bad_Opcode },
7462 { Bad_Opcode },
7463 { Bad_Opcode },
7464 { Bad_Opcode },
7465 { Bad_Opcode },
7466 { Bad_Opcode },
7467 { Bad_Opcode },
f88c9eb0 7468 /* b8 */
592d1631
L
7469 { Bad_Opcode },
7470 { Bad_Opcode },
7471 { Bad_Opcode },
7472 { Bad_Opcode },
7473 { Bad_Opcode },
7474 { Bad_Opcode },
7475 { Bad_Opcode },
7476 { Bad_Opcode },
f88c9eb0 7477 /* c0 */
592d1631
L
7478 { Bad_Opcode },
7479 { Bad_Opcode },
7480 { Bad_Opcode },
7481 { Bad_Opcode },
7482 { Bad_Opcode },
7483 { Bad_Opcode },
7484 { Bad_Opcode },
7485 { Bad_Opcode },
f88c9eb0 7486 /* c8 */
592d1631
L
7487 { Bad_Opcode },
7488 { Bad_Opcode },
7489 { Bad_Opcode },
7490 { Bad_Opcode },
a0046408 7491 { PREFIX_TABLE (PREFIX_0F3ACC) },
592d1631 7492 { Bad_Opcode },
48521003
IT
7493 { PREFIX_TABLE (PREFIX_0F3ACE) },
7494 { PREFIX_TABLE (PREFIX_0F3ACF) },
f88c9eb0 7495 /* d0 */
592d1631
L
7496 { Bad_Opcode },
7497 { Bad_Opcode },
7498 { Bad_Opcode },
7499 { Bad_Opcode },
7500 { Bad_Opcode },
7501 { Bad_Opcode },
7502 { Bad_Opcode },
7503 { Bad_Opcode },
f88c9eb0 7504 /* d8 */
592d1631
L
7505 { Bad_Opcode },
7506 { Bad_Opcode },
7507 { Bad_Opcode },
7508 { Bad_Opcode },
7509 { Bad_Opcode },
7510 { Bad_Opcode },
7511 { Bad_Opcode },
f88c9eb0
SP
7512 { PREFIX_TABLE (PREFIX_0F3ADF) },
7513 /* e0 */
592d1631
L
7514 { Bad_Opcode },
7515 { Bad_Opcode },
7516 { Bad_Opcode },
7517 { Bad_Opcode },
7518 { Bad_Opcode },
592d1631
L
7519 { Bad_Opcode },
7520 { Bad_Opcode },
7521 { Bad_Opcode },
85f10a01 7522 /* e8 */
592d1631
L
7523 { Bad_Opcode },
7524 { Bad_Opcode },
7525 { Bad_Opcode },
7526 { Bad_Opcode },
7527 { Bad_Opcode },
7528 { Bad_Opcode },
7529 { Bad_Opcode },
7530 { Bad_Opcode },
85f10a01 7531 /* f0 */
592d1631
L
7532 { Bad_Opcode },
7533 { Bad_Opcode },
7534 { Bad_Opcode },
7535 { Bad_Opcode },
7536 { Bad_Opcode },
7537 { Bad_Opcode },
7538 { Bad_Opcode },
7539 { Bad_Opcode },
85f10a01 7540 /* f8 */
592d1631
L
7541 { Bad_Opcode },
7542 { Bad_Opcode },
7543 { Bad_Opcode },
7544 { Bad_Opcode },
7545 { Bad_Opcode },
7546 { Bad_Opcode },
7547 { Bad_Opcode },
7548 { Bad_Opcode },
85f10a01 7549 },
f88c9eb0
SP
7550};
7551
7552static const struct dis386 xop_table[][256] = {
5dd85c99 7553 /* XOP_08 */
85f10a01
MM
7554 {
7555 /* 00 */
592d1631
L
7556 { Bad_Opcode },
7557 { Bad_Opcode },
7558 { Bad_Opcode },
7559 { Bad_Opcode },
7560 { Bad_Opcode },
7561 { Bad_Opcode },
7562 { Bad_Opcode },
7563 { Bad_Opcode },
85f10a01 7564 /* 08 */
592d1631
L
7565 { Bad_Opcode },
7566 { Bad_Opcode },
7567 { Bad_Opcode },
7568 { Bad_Opcode },
7569 { Bad_Opcode },
7570 { Bad_Opcode },
7571 { Bad_Opcode },
7572 { Bad_Opcode },
85f10a01 7573 /* 10 */
3929df09 7574 { Bad_Opcode },
592d1631
L
7575 { Bad_Opcode },
7576 { Bad_Opcode },
7577 { Bad_Opcode },
7578 { Bad_Opcode },
7579 { Bad_Opcode },
7580 { Bad_Opcode },
7581 { Bad_Opcode },
85f10a01 7582 /* 18 */
592d1631
L
7583 { Bad_Opcode },
7584 { Bad_Opcode },
7585 { Bad_Opcode },
7586 { Bad_Opcode },
7587 { Bad_Opcode },
7588 { Bad_Opcode },
7589 { Bad_Opcode },
7590 { Bad_Opcode },
85f10a01 7591 /* 20 */
592d1631
L
7592 { Bad_Opcode },
7593 { Bad_Opcode },
7594 { Bad_Opcode },
7595 { Bad_Opcode },
7596 { Bad_Opcode },
7597 { Bad_Opcode },
7598 { Bad_Opcode },
7599 { Bad_Opcode },
85f10a01 7600 /* 28 */
592d1631
L
7601 { Bad_Opcode },
7602 { Bad_Opcode },
7603 { Bad_Opcode },
7604 { Bad_Opcode },
7605 { Bad_Opcode },
7606 { Bad_Opcode },
7607 { Bad_Opcode },
7608 { Bad_Opcode },
c0f3af97 7609 /* 30 */
592d1631
L
7610 { Bad_Opcode },
7611 { Bad_Opcode },
7612 { Bad_Opcode },
7613 { Bad_Opcode },
7614 { Bad_Opcode },
7615 { Bad_Opcode },
7616 { Bad_Opcode },
7617 { Bad_Opcode },
c0f3af97 7618 /* 38 */
592d1631
L
7619 { Bad_Opcode },
7620 { Bad_Opcode },
7621 { Bad_Opcode },
7622 { Bad_Opcode },
7623 { Bad_Opcode },
7624 { Bad_Opcode },
7625 { Bad_Opcode },
7626 { Bad_Opcode },
c0f3af97 7627 /* 40 */
592d1631
L
7628 { Bad_Opcode },
7629 { Bad_Opcode },
7630 { Bad_Opcode },
7631 { Bad_Opcode },
7632 { Bad_Opcode },
7633 { Bad_Opcode },
7634 { Bad_Opcode },
7635 { Bad_Opcode },
85f10a01 7636 /* 48 */
592d1631
L
7637 { Bad_Opcode },
7638 { Bad_Opcode },
7639 { Bad_Opcode },
7640 { Bad_Opcode },
7641 { Bad_Opcode },
7642 { Bad_Opcode },
7643 { Bad_Opcode },
7644 { Bad_Opcode },
c0f3af97 7645 /* 50 */
592d1631
L
7646 { Bad_Opcode },
7647 { Bad_Opcode },
7648 { Bad_Opcode },
7649 { Bad_Opcode },
7650 { Bad_Opcode },
7651 { Bad_Opcode },
7652 { Bad_Opcode },
7653 { Bad_Opcode },
85f10a01 7654 /* 58 */
592d1631
L
7655 { Bad_Opcode },
7656 { Bad_Opcode },
7657 { Bad_Opcode },
7658 { Bad_Opcode },
7659 { Bad_Opcode },
7660 { Bad_Opcode },
7661 { Bad_Opcode },
7662 { Bad_Opcode },
c1e679ec 7663 /* 60 */
592d1631
L
7664 { Bad_Opcode },
7665 { Bad_Opcode },
7666 { Bad_Opcode },
7667 { Bad_Opcode },
7668 { Bad_Opcode },
7669 { Bad_Opcode },
7670 { Bad_Opcode },
7671 { Bad_Opcode },
c0f3af97 7672 /* 68 */
592d1631
L
7673 { Bad_Opcode },
7674 { Bad_Opcode },
7675 { Bad_Opcode },
7676 { Bad_Opcode },
7677 { Bad_Opcode },
7678 { Bad_Opcode },
7679 { Bad_Opcode },
7680 { Bad_Opcode },
85f10a01 7681 /* 70 */
592d1631
L
7682 { Bad_Opcode },
7683 { Bad_Opcode },
7684 { Bad_Opcode },
7685 { Bad_Opcode },
7686 { Bad_Opcode },
7687 { Bad_Opcode },
7688 { Bad_Opcode },
7689 { Bad_Opcode },
85f10a01 7690 /* 78 */
592d1631
L
7691 { Bad_Opcode },
7692 { Bad_Opcode },
7693 { Bad_Opcode },
7694 { Bad_Opcode },
7695 { Bad_Opcode },
7696 { Bad_Opcode },
7697 { Bad_Opcode },
7698 { Bad_Opcode },
85f10a01 7699 /* 80 */
592d1631
L
7700 { Bad_Opcode },
7701 { Bad_Opcode },
7702 { Bad_Opcode },
7703 { Bad_Opcode },
7704 { Bad_Opcode },
3a2430e0
JB
7705 { "vpmacssww", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7706 { "vpmacsswd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7707 { "vpmacssdql", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
5dd85c99 7708 /* 88 */
592d1631
L
7709 { Bad_Opcode },
7710 { Bad_Opcode },
7711 { Bad_Opcode },
7712 { Bad_Opcode },
7713 { Bad_Opcode },
7714 { Bad_Opcode },
3a2430e0
JB
7715 { "vpmacssdd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7716 { "vpmacssdqh", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
5dd85c99 7717 /* 90 */
592d1631
L
7718 { Bad_Opcode },
7719 { Bad_Opcode },
7720 { Bad_Opcode },
7721 { Bad_Opcode },
7722 { Bad_Opcode },
3a2430e0
JB
7723 { "vpmacsww", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7724 { "vpmacswd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7725 { "vpmacsdql", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
5dd85c99 7726 /* 98 */
592d1631
L
7727 { Bad_Opcode },
7728 { Bad_Opcode },
7729 { Bad_Opcode },
7730 { Bad_Opcode },
7731 { Bad_Opcode },
7732 { Bad_Opcode },
3a2430e0
JB
7733 { "vpmacsdd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7734 { "vpmacsdqh", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
5dd85c99 7735 /* a0 */
592d1631
L
7736 { Bad_Opcode },
7737 { Bad_Opcode },
3a2430e0
JB
7738 { "vpcmov", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7739 { "vpperm", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
592d1631
L
7740 { Bad_Opcode },
7741 { Bad_Opcode },
3a2430e0 7742 { "vpmadcsswd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
592d1631 7743 { Bad_Opcode },
5dd85c99 7744 /* a8 */
592d1631
L
7745 { Bad_Opcode },
7746 { Bad_Opcode },
7747 { Bad_Opcode },
7748 { Bad_Opcode },
7749 { Bad_Opcode },
7750 { Bad_Opcode },
7751 { Bad_Opcode },
7752 { Bad_Opcode },
5dd85c99 7753 /* b0 */
592d1631
L
7754 { Bad_Opcode },
7755 { Bad_Opcode },
7756 { Bad_Opcode },
7757 { Bad_Opcode },
7758 { Bad_Opcode },
7759 { Bad_Opcode },
3a2430e0 7760 { "vpmadcswd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
592d1631 7761 { Bad_Opcode },
5dd85c99 7762 /* b8 */
592d1631
L
7763 { Bad_Opcode },
7764 { Bad_Opcode },
7765 { Bad_Opcode },
7766 { Bad_Opcode },
7767 { Bad_Opcode },
7768 { Bad_Opcode },
7769 { Bad_Opcode },
7770 { Bad_Opcode },
5dd85c99 7771 /* c0 */
bf890a93
IT
7772 { "vprotb", { XM, Vex_2src_1, Ib }, 0 },
7773 { "vprotw", { XM, Vex_2src_1, Ib }, 0 },
7774 { "vprotd", { XM, Vex_2src_1, Ib }, 0 },
7775 { "vprotq", { XM, Vex_2src_1, Ib }, 0 },
592d1631
L
7776 { Bad_Opcode },
7777 { Bad_Opcode },
7778 { Bad_Opcode },
7779 { Bad_Opcode },
5dd85c99 7780 /* c8 */
592d1631
L
7781 { Bad_Opcode },
7782 { Bad_Opcode },
7783 { Bad_Opcode },
7784 { Bad_Opcode },
ff688e1f
L
7785 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CC) },
7786 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CD) },
7787 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CE) },
7788 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CF) },
5dd85c99 7789 /* d0 */
592d1631
L
7790 { Bad_Opcode },
7791 { Bad_Opcode },
7792 { Bad_Opcode },
7793 { Bad_Opcode },
7794 { Bad_Opcode },
7795 { Bad_Opcode },
7796 { Bad_Opcode },
7797 { Bad_Opcode },
5dd85c99 7798 /* d8 */
592d1631
L
7799 { Bad_Opcode },
7800 { Bad_Opcode },
7801 { Bad_Opcode },
7802 { Bad_Opcode },
7803 { Bad_Opcode },
7804 { Bad_Opcode },
7805 { Bad_Opcode },
7806 { Bad_Opcode },
5dd85c99 7807 /* e0 */
592d1631
L
7808 { Bad_Opcode },
7809 { Bad_Opcode },
7810 { Bad_Opcode },
7811 { Bad_Opcode },
7812 { Bad_Opcode },
7813 { Bad_Opcode },
7814 { Bad_Opcode },
7815 { Bad_Opcode },
5dd85c99 7816 /* e8 */
592d1631
L
7817 { Bad_Opcode },
7818 { Bad_Opcode },
7819 { Bad_Opcode },
7820 { Bad_Opcode },
ff688e1f
L
7821 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EC) },
7822 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_ED) },
7823 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EE) },
7824 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EF) },
5dd85c99 7825 /* f0 */
592d1631
L
7826 { Bad_Opcode },
7827 { Bad_Opcode },
7828 { Bad_Opcode },
7829 { Bad_Opcode },
7830 { Bad_Opcode },
7831 { Bad_Opcode },
7832 { Bad_Opcode },
7833 { Bad_Opcode },
5dd85c99 7834 /* f8 */
592d1631
L
7835 { Bad_Opcode },
7836 { Bad_Opcode },
7837 { Bad_Opcode },
7838 { Bad_Opcode },
7839 { Bad_Opcode },
7840 { Bad_Opcode },
7841 { Bad_Opcode },
7842 { Bad_Opcode },
5dd85c99
SP
7843 },
7844 /* XOP_09 */
7845 {
7846 /* 00 */
592d1631 7847 { Bad_Opcode },
2a2a0f38
QN
7848 { REG_TABLE (REG_XOP_TBM_01) },
7849 { REG_TABLE (REG_XOP_TBM_02) },
592d1631
L
7850 { Bad_Opcode },
7851 { Bad_Opcode },
7852 { Bad_Opcode },
7853 { Bad_Opcode },
7854 { Bad_Opcode },
5dd85c99 7855 /* 08 */
592d1631
L
7856 { Bad_Opcode },
7857 { Bad_Opcode },
7858 { Bad_Opcode },
7859 { Bad_Opcode },
7860 { Bad_Opcode },
7861 { Bad_Opcode },
7862 { Bad_Opcode },
7863 { Bad_Opcode },
5dd85c99 7864 /* 10 */
592d1631
L
7865 { Bad_Opcode },
7866 { Bad_Opcode },
5dd85c99 7867 { REG_TABLE (REG_XOP_LWPCB) },
592d1631
L
7868 { Bad_Opcode },
7869 { Bad_Opcode },
7870 { Bad_Opcode },
7871 { Bad_Opcode },
7872 { Bad_Opcode },
5dd85c99 7873 /* 18 */
592d1631
L
7874 { Bad_Opcode },
7875 { Bad_Opcode },
7876 { Bad_Opcode },
7877 { Bad_Opcode },
7878 { Bad_Opcode },
7879 { Bad_Opcode },
7880 { Bad_Opcode },
7881 { Bad_Opcode },
5dd85c99 7882 /* 20 */
592d1631
L
7883 { Bad_Opcode },
7884 { Bad_Opcode },
7885 { Bad_Opcode },
7886 { Bad_Opcode },
7887 { Bad_Opcode },
7888 { Bad_Opcode },
7889 { Bad_Opcode },
7890 { Bad_Opcode },
5dd85c99 7891 /* 28 */
592d1631
L
7892 { Bad_Opcode },
7893 { Bad_Opcode },
7894 { Bad_Opcode },
7895 { Bad_Opcode },
7896 { Bad_Opcode },
7897 { Bad_Opcode },
7898 { Bad_Opcode },
7899 { Bad_Opcode },
5dd85c99 7900 /* 30 */
592d1631
L
7901 { Bad_Opcode },
7902 { Bad_Opcode },
7903 { Bad_Opcode },
7904 { Bad_Opcode },
7905 { Bad_Opcode },
7906 { Bad_Opcode },
7907 { Bad_Opcode },
7908 { Bad_Opcode },
5dd85c99 7909 /* 38 */
592d1631
L
7910 { Bad_Opcode },
7911 { Bad_Opcode },
7912 { Bad_Opcode },
7913 { Bad_Opcode },
7914 { Bad_Opcode },
7915 { Bad_Opcode },
7916 { Bad_Opcode },
7917 { Bad_Opcode },
5dd85c99 7918 /* 40 */
592d1631
L
7919 { Bad_Opcode },
7920 { Bad_Opcode },
7921 { Bad_Opcode },
7922 { Bad_Opcode },
7923 { Bad_Opcode },
7924 { Bad_Opcode },
7925 { Bad_Opcode },
7926 { Bad_Opcode },
5dd85c99 7927 /* 48 */
592d1631
L
7928 { Bad_Opcode },
7929 { Bad_Opcode },
7930 { Bad_Opcode },
7931 { Bad_Opcode },
7932 { Bad_Opcode },
7933 { Bad_Opcode },
7934 { Bad_Opcode },
7935 { Bad_Opcode },
5dd85c99 7936 /* 50 */
592d1631
L
7937 { Bad_Opcode },
7938 { Bad_Opcode },
7939 { Bad_Opcode },
7940 { Bad_Opcode },
7941 { Bad_Opcode },
7942 { Bad_Opcode },
7943 { Bad_Opcode },
7944 { Bad_Opcode },
5dd85c99 7945 /* 58 */
592d1631
L
7946 { Bad_Opcode },
7947 { Bad_Opcode },
7948 { Bad_Opcode },
7949 { Bad_Opcode },
7950 { Bad_Opcode },
7951 { Bad_Opcode },
7952 { Bad_Opcode },
7953 { Bad_Opcode },
5dd85c99 7954 /* 60 */
592d1631
L
7955 { Bad_Opcode },
7956 { Bad_Opcode },
7957 { Bad_Opcode },
7958 { Bad_Opcode },
7959 { Bad_Opcode },
7960 { Bad_Opcode },
7961 { Bad_Opcode },
7962 { Bad_Opcode },
5dd85c99 7963 /* 68 */
592d1631
L
7964 { Bad_Opcode },
7965 { Bad_Opcode },
7966 { Bad_Opcode },
7967 { Bad_Opcode },
7968 { Bad_Opcode },
7969 { Bad_Opcode },
7970 { Bad_Opcode },
7971 { Bad_Opcode },
5dd85c99 7972 /* 70 */
592d1631
L
7973 { Bad_Opcode },
7974 { Bad_Opcode },
7975 { Bad_Opcode },
7976 { Bad_Opcode },
7977 { Bad_Opcode },
7978 { Bad_Opcode },
7979 { Bad_Opcode },
7980 { Bad_Opcode },
5dd85c99 7981 /* 78 */
592d1631
L
7982 { Bad_Opcode },
7983 { Bad_Opcode },
7984 { Bad_Opcode },
7985 { Bad_Opcode },
7986 { Bad_Opcode },
7987 { Bad_Opcode },
7988 { Bad_Opcode },
7989 { Bad_Opcode },
5dd85c99 7990 /* 80 */
592a252b
L
7991 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_80) },
7992 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_81) },
bf890a93
IT
7993 { "vfrczss", { XM, EXd }, 0 },
7994 { "vfrczsd", { XM, EXq }, 0 },
592d1631
L
7995 { Bad_Opcode },
7996 { Bad_Opcode },
7997 { Bad_Opcode },
7998 { Bad_Opcode },
5dd85c99 7999 /* 88 */
592d1631
L
8000 { Bad_Opcode },
8001 { Bad_Opcode },
8002 { Bad_Opcode },
8003 { Bad_Opcode },
8004 { Bad_Opcode },
8005 { Bad_Opcode },
8006 { Bad_Opcode },
8007 { Bad_Opcode },
5dd85c99 8008 /* 90 */
bf890a93
IT
8009 { "vprotb", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8010 { "vprotw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8011 { "vprotd", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8012 { "vprotq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8013 { "vpshlb", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8014 { "vpshlw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8015 { "vpshld", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8016 { "vpshlq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
5dd85c99 8017 /* 98 */
bf890a93
IT
8018 { "vpshab", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8019 { "vpshaw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8020 { "vpshad", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8021 { "vpshaq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
592d1631
L
8022 { Bad_Opcode },
8023 { Bad_Opcode },
8024 { Bad_Opcode },
8025 { Bad_Opcode },
5dd85c99 8026 /* a0 */
592d1631
L
8027 { Bad_Opcode },
8028 { Bad_Opcode },
8029 { Bad_Opcode },
8030 { Bad_Opcode },
8031 { Bad_Opcode },
8032 { Bad_Opcode },
8033 { Bad_Opcode },
8034 { Bad_Opcode },
5dd85c99 8035 /* a8 */
592d1631
L
8036 { Bad_Opcode },
8037 { Bad_Opcode },
8038 { Bad_Opcode },
8039 { Bad_Opcode },
8040 { Bad_Opcode },
8041 { Bad_Opcode },
8042 { Bad_Opcode },
8043 { Bad_Opcode },
5dd85c99 8044 /* b0 */
592d1631
L
8045 { Bad_Opcode },
8046 { Bad_Opcode },
8047 { Bad_Opcode },
8048 { Bad_Opcode },
8049 { Bad_Opcode },
8050 { Bad_Opcode },
8051 { Bad_Opcode },
8052 { Bad_Opcode },
5dd85c99 8053 /* b8 */
592d1631
L
8054 { Bad_Opcode },
8055 { Bad_Opcode },
8056 { Bad_Opcode },
8057 { Bad_Opcode },
8058 { Bad_Opcode },
8059 { Bad_Opcode },
8060 { Bad_Opcode },
8061 { Bad_Opcode },
5dd85c99 8062 /* c0 */
592d1631 8063 { Bad_Opcode },
bf890a93
IT
8064 { "vphaddbw", { XM, EXxmm }, 0 },
8065 { "vphaddbd", { XM, EXxmm }, 0 },
8066 { "vphaddbq", { XM, EXxmm }, 0 },
592d1631
L
8067 { Bad_Opcode },
8068 { Bad_Opcode },
bf890a93
IT
8069 { "vphaddwd", { XM, EXxmm }, 0 },
8070 { "vphaddwq", { XM, EXxmm }, 0 },
5dd85c99 8071 /* c8 */
592d1631
L
8072 { Bad_Opcode },
8073 { Bad_Opcode },
8074 { Bad_Opcode },
bf890a93 8075 { "vphadddq", { XM, EXxmm }, 0 },
592d1631
L
8076 { Bad_Opcode },
8077 { Bad_Opcode },
8078 { Bad_Opcode },
8079 { Bad_Opcode },
5dd85c99 8080 /* d0 */
592d1631 8081 { Bad_Opcode },
bf890a93
IT
8082 { "vphaddubw", { XM, EXxmm }, 0 },
8083 { "vphaddubd", { XM, EXxmm }, 0 },
8084 { "vphaddubq", { XM, EXxmm }, 0 },
592d1631
L
8085 { Bad_Opcode },
8086 { Bad_Opcode },
bf890a93
IT
8087 { "vphadduwd", { XM, EXxmm }, 0 },
8088 { "vphadduwq", { XM, EXxmm }, 0 },
5dd85c99 8089 /* d8 */
592d1631
L
8090 { Bad_Opcode },
8091 { Bad_Opcode },
8092 { Bad_Opcode },
bf890a93 8093 { "vphaddudq", { XM, EXxmm }, 0 },
592d1631
L
8094 { Bad_Opcode },
8095 { Bad_Opcode },
8096 { Bad_Opcode },
8097 { Bad_Opcode },
5dd85c99 8098 /* e0 */
592d1631 8099 { Bad_Opcode },
bf890a93
IT
8100 { "vphsubbw", { XM, EXxmm }, 0 },
8101 { "vphsubwd", { XM, EXxmm }, 0 },
8102 { "vphsubdq", { XM, EXxmm }, 0 },
592d1631
L
8103 { Bad_Opcode },
8104 { Bad_Opcode },
8105 { Bad_Opcode },
8106 { Bad_Opcode },
4e7d34a6 8107 /* e8 */
592d1631
L
8108 { Bad_Opcode },
8109 { Bad_Opcode },
8110 { Bad_Opcode },
8111 { Bad_Opcode },
8112 { Bad_Opcode },
8113 { Bad_Opcode },
8114 { Bad_Opcode },
8115 { Bad_Opcode },
4e7d34a6 8116 /* f0 */
592d1631
L
8117 { Bad_Opcode },
8118 { Bad_Opcode },
8119 { Bad_Opcode },
8120 { Bad_Opcode },
8121 { Bad_Opcode },
8122 { Bad_Opcode },
8123 { Bad_Opcode },
8124 { Bad_Opcode },
4e7d34a6 8125 /* f8 */
592d1631
L
8126 { Bad_Opcode },
8127 { Bad_Opcode },
8128 { Bad_Opcode },
8129 { Bad_Opcode },
8130 { Bad_Opcode },
8131 { Bad_Opcode },
8132 { Bad_Opcode },
8133 { Bad_Opcode },
4e7d34a6 8134 },
f88c9eb0 8135 /* XOP_0A */
4e7d34a6
L
8136 {
8137 /* 00 */
592d1631
L
8138 { Bad_Opcode },
8139 { Bad_Opcode },
8140 { Bad_Opcode },
8141 { Bad_Opcode },
8142 { Bad_Opcode },
8143 { Bad_Opcode },
8144 { Bad_Opcode },
8145 { Bad_Opcode },
4e7d34a6 8146 /* 08 */
592d1631
L
8147 { Bad_Opcode },
8148 { Bad_Opcode },
8149 { Bad_Opcode },
8150 { Bad_Opcode },
8151 { Bad_Opcode },
8152 { Bad_Opcode },
8153 { Bad_Opcode },
8154 { Bad_Opcode },
4e7d34a6 8155 /* 10 */
c1dc7af5 8156 { "bextrS", { Gdq, Edq, Id }, 0 },
592d1631 8157 { Bad_Opcode },
f88c9eb0 8158 { REG_TABLE (REG_XOP_LWP) },
592d1631
L
8159 { Bad_Opcode },
8160 { Bad_Opcode },
8161 { Bad_Opcode },
8162 { Bad_Opcode },
8163 { Bad_Opcode },
4e7d34a6 8164 /* 18 */
592d1631
L
8165 { Bad_Opcode },
8166 { Bad_Opcode },
8167 { Bad_Opcode },
8168 { Bad_Opcode },
8169 { Bad_Opcode },
8170 { Bad_Opcode },
8171 { Bad_Opcode },
8172 { Bad_Opcode },
4e7d34a6 8173 /* 20 */
592d1631
L
8174 { Bad_Opcode },
8175 { Bad_Opcode },
8176 { Bad_Opcode },
8177 { Bad_Opcode },
8178 { Bad_Opcode },
8179 { Bad_Opcode },
8180 { Bad_Opcode },
8181 { Bad_Opcode },
4e7d34a6 8182 /* 28 */
592d1631
L
8183 { Bad_Opcode },
8184 { Bad_Opcode },
8185 { Bad_Opcode },
8186 { Bad_Opcode },
8187 { Bad_Opcode },
8188 { Bad_Opcode },
8189 { Bad_Opcode },
8190 { Bad_Opcode },
4e7d34a6 8191 /* 30 */
592d1631
L
8192 { Bad_Opcode },
8193 { Bad_Opcode },
8194 { Bad_Opcode },
8195 { Bad_Opcode },
8196 { Bad_Opcode },
8197 { Bad_Opcode },
8198 { Bad_Opcode },
8199 { Bad_Opcode },
c0f3af97 8200 /* 38 */
592d1631
L
8201 { Bad_Opcode },
8202 { Bad_Opcode },
8203 { Bad_Opcode },
8204 { Bad_Opcode },
8205 { Bad_Opcode },
8206 { Bad_Opcode },
8207 { Bad_Opcode },
8208 { Bad_Opcode },
c0f3af97 8209 /* 40 */
592d1631
L
8210 { Bad_Opcode },
8211 { Bad_Opcode },
8212 { Bad_Opcode },
8213 { Bad_Opcode },
8214 { Bad_Opcode },
8215 { Bad_Opcode },
8216 { Bad_Opcode },
8217 { Bad_Opcode },
c1e679ec 8218 /* 48 */
592d1631
L
8219 { Bad_Opcode },
8220 { Bad_Opcode },
8221 { Bad_Opcode },
8222 { Bad_Opcode },
8223 { Bad_Opcode },
8224 { Bad_Opcode },
8225 { Bad_Opcode },
8226 { Bad_Opcode },
c1e679ec 8227 /* 50 */
592d1631
L
8228 { Bad_Opcode },
8229 { Bad_Opcode },
8230 { Bad_Opcode },
8231 { Bad_Opcode },
8232 { Bad_Opcode },
8233 { Bad_Opcode },
8234 { Bad_Opcode },
8235 { Bad_Opcode },
4e7d34a6 8236 /* 58 */
592d1631
L
8237 { Bad_Opcode },
8238 { Bad_Opcode },
8239 { Bad_Opcode },
8240 { Bad_Opcode },
8241 { Bad_Opcode },
8242 { Bad_Opcode },
8243 { Bad_Opcode },
8244 { Bad_Opcode },
4e7d34a6 8245 /* 60 */
592d1631
L
8246 { Bad_Opcode },
8247 { Bad_Opcode },
8248 { Bad_Opcode },
8249 { Bad_Opcode },
8250 { Bad_Opcode },
8251 { Bad_Opcode },
8252 { Bad_Opcode },
8253 { Bad_Opcode },
4e7d34a6 8254 /* 68 */
592d1631
L
8255 { Bad_Opcode },
8256 { Bad_Opcode },
8257 { Bad_Opcode },
8258 { Bad_Opcode },
8259 { Bad_Opcode },
8260 { Bad_Opcode },
8261 { Bad_Opcode },
8262 { Bad_Opcode },
4e7d34a6 8263 /* 70 */
592d1631
L
8264 { Bad_Opcode },
8265 { Bad_Opcode },
8266 { Bad_Opcode },
8267 { Bad_Opcode },
8268 { Bad_Opcode },
8269 { Bad_Opcode },
8270 { Bad_Opcode },
8271 { Bad_Opcode },
4e7d34a6 8272 /* 78 */
592d1631
L
8273 { Bad_Opcode },
8274 { Bad_Opcode },
8275 { Bad_Opcode },
8276 { Bad_Opcode },
8277 { Bad_Opcode },
8278 { Bad_Opcode },
8279 { Bad_Opcode },
8280 { Bad_Opcode },
4e7d34a6 8281 /* 80 */
592d1631
L
8282 { Bad_Opcode },
8283 { Bad_Opcode },
8284 { Bad_Opcode },
8285 { Bad_Opcode },
8286 { Bad_Opcode },
8287 { Bad_Opcode },
8288 { Bad_Opcode },
8289 { Bad_Opcode },
4e7d34a6 8290 /* 88 */
592d1631
L
8291 { Bad_Opcode },
8292 { Bad_Opcode },
8293 { Bad_Opcode },
8294 { Bad_Opcode },
8295 { Bad_Opcode },
8296 { Bad_Opcode },
8297 { Bad_Opcode },
8298 { Bad_Opcode },
4e7d34a6 8299 /* 90 */
592d1631
L
8300 { Bad_Opcode },
8301 { Bad_Opcode },
8302 { Bad_Opcode },
8303 { Bad_Opcode },
8304 { Bad_Opcode },
8305 { Bad_Opcode },
8306 { Bad_Opcode },
8307 { Bad_Opcode },
4e7d34a6 8308 /* 98 */
592d1631
L
8309 { Bad_Opcode },
8310 { Bad_Opcode },
8311 { Bad_Opcode },
8312 { Bad_Opcode },
8313 { Bad_Opcode },
8314 { Bad_Opcode },
8315 { Bad_Opcode },
8316 { Bad_Opcode },
4e7d34a6 8317 /* a0 */
592d1631
L
8318 { Bad_Opcode },
8319 { Bad_Opcode },
8320 { Bad_Opcode },
8321 { Bad_Opcode },
8322 { Bad_Opcode },
8323 { Bad_Opcode },
8324 { Bad_Opcode },
8325 { Bad_Opcode },
4e7d34a6 8326 /* a8 */
592d1631
L
8327 { Bad_Opcode },
8328 { Bad_Opcode },
8329 { Bad_Opcode },
8330 { Bad_Opcode },
8331 { Bad_Opcode },
8332 { Bad_Opcode },
8333 { Bad_Opcode },
8334 { Bad_Opcode },
d5d7db8e 8335 /* b0 */
592d1631
L
8336 { Bad_Opcode },
8337 { Bad_Opcode },
8338 { Bad_Opcode },
8339 { Bad_Opcode },
8340 { Bad_Opcode },
8341 { Bad_Opcode },
8342 { Bad_Opcode },
8343 { Bad_Opcode },
85f10a01 8344 /* b8 */
592d1631
L
8345 { Bad_Opcode },
8346 { Bad_Opcode },
8347 { Bad_Opcode },
8348 { Bad_Opcode },
8349 { Bad_Opcode },
8350 { Bad_Opcode },
8351 { Bad_Opcode },
8352 { Bad_Opcode },
85f10a01 8353 /* c0 */
592d1631
L
8354 { Bad_Opcode },
8355 { Bad_Opcode },
8356 { Bad_Opcode },
8357 { Bad_Opcode },
8358 { Bad_Opcode },
8359 { Bad_Opcode },
8360 { Bad_Opcode },
8361 { Bad_Opcode },
85f10a01 8362 /* c8 */
592d1631
L
8363 { Bad_Opcode },
8364 { Bad_Opcode },
8365 { Bad_Opcode },
8366 { Bad_Opcode },
8367 { Bad_Opcode },
8368 { Bad_Opcode },
8369 { Bad_Opcode },
8370 { Bad_Opcode },
85f10a01 8371 /* d0 */
592d1631
L
8372 { Bad_Opcode },
8373 { Bad_Opcode },
8374 { Bad_Opcode },
8375 { Bad_Opcode },
8376 { Bad_Opcode },
8377 { Bad_Opcode },
8378 { Bad_Opcode },
8379 { Bad_Opcode },
85f10a01 8380 /* d8 */
592d1631
L
8381 { Bad_Opcode },
8382 { Bad_Opcode },
8383 { Bad_Opcode },
8384 { Bad_Opcode },
8385 { Bad_Opcode },
8386 { Bad_Opcode },
8387 { Bad_Opcode },
8388 { Bad_Opcode },
85f10a01 8389 /* e0 */
592d1631
L
8390 { Bad_Opcode },
8391 { Bad_Opcode },
8392 { Bad_Opcode },
8393 { Bad_Opcode },
8394 { Bad_Opcode },
8395 { Bad_Opcode },
8396 { Bad_Opcode },
8397 { Bad_Opcode },
85f10a01 8398 /* e8 */
592d1631
L
8399 { Bad_Opcode },
8400 { Bad_Opcode },
8401 { Bad_Opcode },
8402 { Bad_Opcode },
8403 { Bad_Opcode },
8404 { Bad_Opcode },
8405 { Bad_Opcode },
8406 { Bad_Opcode },
85f10a01 8407 /* f0 */
592d1631
L
8408 { Bad_Opcode },
8409 { Bad_Opcode },
8410 { Bad_Opcode },
8411 { Bad_Opcode },
8412 { Bad_Opcode },
8413 { Bad_Opcode },
8414 { Bad_Opcode },
8415 { Bad_Opcode },
85f10a01 8416 /* f8 */
592d1631
L
8417 { Bad_Opcode },
8418 { Bad_Opcode },
8419 { Bad_Opcode },
8420 { Bad_Opcode },
8421 { Bad_Opcode },
8422 { Bad_Opcode },
8423 { Bad_Opcode },
8424 { Bad_Opcode },
85f10a01 8425 },
c0f3af97
L
8426};
8427
8428static const struct dis386 vex_table[][256] = {
8429 /* VEX_0F */
85f10a01
MM
8430 {
8431 /* 00 */
592d1631
L
8432 { Bad_Opcode },
8433 { Bad_Opcode },
8434 { Bad_Opcode },
8435 { Bad_Opcode },
8436 { Bad_Opcode },
8437 { Bad_Opcode },
8438 { Bad_Opcode },
8439 { Bad_Opcode },
85f10a01 8440 /* 08 */
592d1631
L
8441 { Bad_Opcode },
8442 { Bad_Opcode },
8443 { Bad_Opcode },
8444 { Bad_Opcode },
8445 { Bad_Opcode },
8446 { Bad_Opcode },
8447 { Bad_Opcode },
8448 { Bad_Opcode },
c0f3af97 8449 /* 10 */
592a252b
L
8450 { PREFIX_TABLE (PREFIX_VEX_0F10) },
8451 { PREFIX_TABLE (PREFIX_VEX_0F11) },
8452 { PREFIX_TABLE (PREFIX_VEX_0F12) },
8453 { MOD_TABLE (MOD_VEX_0F13) },
ec6f095a
L
8454 { "vunpcklpX", { XM, Vex, EXx }, 0 },
8455 { "vunpckhpX", { XM, Vex, EXx }, 0 },
592a252b
L
8456 { PREFIX_TABLE (PREFIX_VEX_0F16) },
8457 { MOD_TABLE (MOD_VEX_0F17) },
c0f3af97 8458 /* 18 */
592d1631
L
8459 { Bad_Opcode },
8460 { Bad_Opcode },
8461 { Bad_Opcode },
8462 { Bad_Opcode },
8463 { Bad_Opcode },
8464 { Bad_Opcode },
8465 { Bad_Opcode },
8466 { Bad_Opcode },
c0f3af97 8467 /* 20 */
592d1631
L
8468 { Bad_Opcode },
8469 { Bad_Opcode },
8470 { Bad_Opcode },
8471 { Bad_Opcode },
8472 { Bad_Opcode },
8473 { Bad_Opcode },
8474 { Bad_Opcode },
8475 { Bad_Opcode },
c0f3af97 8476 /* 28 */
ec6f095a
L
8477 { "vmovapX", { XM, EXx }, 0 },
8478 { "vmovapX", { EXxS, XM }, 0 },
592a252b
L
8479 { PREFIX_TABLE (PREFIX_VEX_0F2A) },
8480 { MOD_TABLE (MOD_VEX_0F2B) },
8481 { PREFIX_TABLE (PREFIX_VEX_0F2C) },
8482 { PREFIX_TABLE (PREFIX_VEX_0F2D) },
8483 { PREFIX_TABLE (PREFIX_VEX_0F2E) },
8484 { PREFIX_TABLE (PREFIX_VEX_0F2F) },
85f10a01 8485 /* 30 */
592d1631
L
8486 { Bad_Opcode },
8487 { Bad_Opcode },
8488 { Bad_Opcode },
8489 { Bad_Opcode },
8490 { Bad_Opcode },
8491 { Bad_Opcode },
8492 { Bad_Opcode },
8493 { Bad_Opcode },
4e7d34a6 8494 /* 38 */
592d1631
L
8495 { Bad_Opcode },
8496 { Bad_Opcode },
8497 { Bad_Opcode },
8498 { Bad_Opcode },
8499 { Bad_Opcode },
8500 { Bad_Opcode },
8501 { Bad_Opcode },
8502 { Bad_Opcode },
d5d7db8e 8503 /* 40 */
592d1631 8504 { Bad_Opcode },
43234a1e
L
8505 { PREFIX_TABLE (PREFIX_VEX_0F41) },
8506 { PREFIX_TABLE (PREFIX_VEX_0F42) },
592d1631 8507 { Bad_Opcode },
43234a1e
L
8508 { PREFIX_TABLE (PREFIX_VEX_0F44) },
8509 { PREFIX_TABLE (PREFIX_VEX_0F45) },
8510 { PREFIX_TABLE (PREFIX_VEX_0F46) },
8511 { PREFIX_TABLE (PREFIX_VEX_0F47) },
85f10a01 8512 /* 48 */
592d1631
L
8513 { Bad_Opcode },
8514 { Bad_Opcode },
1ba585e8 8515 { PREFIX_TABLE (PREFIX_VEX_0F4A) },
43234a1e 8516 { PREFIX_TABLE (PREFIX_VEX_0F4B) },
592d1631
L
8517 { Bad_Opcode },
8518 { Bad_Opcode },
8519 { Bad_Opcode },
8520 { Bad_Opcode },
d5d7db8e 8521 /* 50 */
592a252b
L
8522 { MOD_TABLE (MOD_VEX_0F50) },
8523 { PREFIX_TABLE (PREFIX_VEX_0F51) },
8524 { PREFIX_TABLE (PREFIX_VEX_0F52) },
8525 { PREFIX_TABLE (PREFIX_VEX_0F53) },
bf890a93
IT
8526 { "vandpX", { XM, Vex, EXx }, 0 },
8527 { "vandnpX", { XM, Vex, EXx }, 0 },
8528 { "vorpX", { XM, Vex, EXx }, 0 },
8529 { "vxorpX", { XM, Vex, EXx }, 0 },
c0f3af97 8530 /* 58 */
592a252b
L
8531 { PREFIX_TABLE (PREFIX_VEX_0F58) },
8532 { PREFIX_TABLE (PREFIX_VEX_0F59) },
8533 { PREFIX_TABLE (PREFIX_VEX_0F5A) },
8534 { PREFIX_TABLE (PREFIX_VEX_0F5B) },
8535 { PREFIX_TABLE (PREFIX_VEX_0F5C) },
8536 { PREFIX_TABLE (PREFIX_VEX_0F5D) },
8537 { PREFIX_TABLE (PREFIX_VEX_0F5E) },
8538 { PREFIX_TABLE (PREFIX_VEX_0F5F) },
c0f3af97 8539 /* 60 */
592a252b
L
8540 { PREFIX_TABLE (PREFIX_VEX_0F60) },
8541 { PREFIX_TABLE (PREFIX_VEX_0F61) },
8542 { PREFIX_TABLE (PREFIX_VEX_0F62) },
8543 { PREFIX_TABLE (PREFIX_VEX_0F63) },
8544 { PREFIX_TABLE (PREFIX_VEX_0F64) },
8545 { PREFIX_TABLE (PREFIX_VEX_0F65) },
8546 { PREFIX_TABLE (PREFIX_VEX_0F66) },
8547 { PREFIX_TABLE (PREFIX_VEX_0F67) },
c0f3af97 8548 /* 68 */
592a252b
L
8549 { PREFIX_TABLE (PREFIX_VEX_0F68) },
8550 { PREFIX_TABLE (PREFIX_VEX_0F69) },
8551 { PREFIX_TABLE (PREFIX_VEX_0F6A) },
8552 { PREFIX_TABLE (PREFIX_VEX_0F6B) },
8553 { PREFIX_TABLE (PREFIX_VEX_0F6C) },
8554 { PREFIX_TABLE (PREFIX_VEX_0F6D) },
8555 { PREFIX_TABLE (PREFIX_VEX_0F6E) },
8556 { PREFIX_TABLE (PREFIX_VEX_0F6F) },
c0f3af97 8557 /* 70 */
592a252b
L
8558 { PREFIX_TABLE (PREFIX_VEX_0F70) },
8559 { REG_TABLE (REG_VEX_0F71) },
8560 { REG_TABLE (REG_VEX_0F72) },
8561 { REG_TABLE (REG_VEX_0F73) },
8562 { PREFIX_TABLE (PREFIX_VEX_0F74) },
8563 { PREFIX_TABLE (PREFIX_VEX_0F75) },
8564 { PREFIX_TABLE (PREFIX_VEX_0F76) },
8565 { PREFIX_TABLE (PREFIX_VEX_0F77) },
c0f3af97 8566 /* 78 */
592d1631
L
8567 { Bad_Opcode },
8568 { Bad_Opcode },
8569 { Bad_Opcode },
8570 { Bad_Opcode },
592a252b
L
8571 { PREFIX_TABLE (PREFIX_VEX_0F7C) },
8572 { PREFIX_TABLE (PREFIX_VEX_0F7D) },
8573 { PREFIX_TABLE (PREFIX_VEX_0F7E) },
8574 { PREFIX_TABLE (PREFIX_VEX_0F7F) },
c0f3af97 8575 /* 80 */
592d1631
L
8576 { Bad_Opcode },
8577 { Bad_Opcode },
8578 { Bad_Opcode },
8579 { Bad_Opcode },
8580 { Bad_Opcode },
8581 { Bad_Opcode },
8582 { Bad_Opcode },
8583 { Bad_Opcode },
c0f3af97 8584 /* 88 */
592d1631
L
8585 { Bad_Opcode },
8586 { Bad_Opcode },
8587 { Bad_Opcode },
8588 { Bad_Opcode },
8589 { Bad_Opcode },
8590 { Bad_Opcode },
8591 { Bad_Opcode },
8592 { Bad_Opcode },
c0f3af97 8593 /* 90 */
43234a1e
L
8594 { PREFIX_TABLE (PREFIX_VEX_0F90) },
8595 { PREFIX_TABLE (PREFIX_VEX_0F91) },
8596 { PREFIX_TABLE (PREFIX_VEX_0F92) },
8597 { PREFIX_TABLE (PREFIX_VEX_0F93) },
592d1631
L
8598 { Bad_Opcode },
8599 { Bad_Opcode },
8600 { Bad_Opcode },
8601 { Bad_Opcode },
c0f3af97 8602 /* 98 */
43234a1e 8603 { PREFIX_TABLE (PREFIX_VEX_0F98) },
1ba585e8 8604 { PREFIX_TABLE (PREFIX_VEX_0F99) },
592d1631
L
8605 { Bad_Opcode },
8606 { Bad_Opcode },
8607 { Bad_Opcode },
8608 { Bad_Opcode },
8609 { Bad_Opcode },
8610 { Bad_Opcode },
c0f3af97 8611 /* a0 */
592d1631
L
8612 { Bad_Opcode },
8613 { Bad_Opcode },
8614 { Bad_Opcode },
8615 { Bad_Opcode },
8616 { Bad_Opcode },
8617 { Bad_Opcode },
8618 { Bad_Opcode },
8619 { Bad_Opcode },
c0f3af97 8620 /* a8 */
592d1631
L
8621 { Bad_Opcode },
8622 { Bad_Opcode },
8623 { Bad_Opcode },
8624 { Bad_Opcode },
8625 { Bad_Opcode },
8626 { Bad_Opcode },
592a252b 8627 { REG_TABLE (REG_VEX_0FAE) },
592d1631 8628 { Bad_Opcode },
c0f3af97 8629 /* b0 */
592d1631
L
8630 { Bad_Opcode },
8631 { Bad_Opcode },
8632 { Bad_Opcode },
8633 { Bad_Opcode },
8634 { Bad_Opcode },
8635 { Bad_Opcode },
8636 { Bad_Opcode },
8637 { Bad_Opcode },
c0f3af97 8638 /* b8 */
592d1631
L
8639 { Bad_Opcode },
8640 { Bad_Opcode },
8641 { Bad_Opcode },
8642 { Bad_Opcode },
8643 { Bad_Opcode },
8644 { Bad_Opcode },
8645 { Bad_Opcode },
8646 { Bad_Opcode },
c0f3af97 8647 /* c0 */
592d1631
L
8648 { Bad_Opcode },
8649 { Bad_Opcode },
592a252b 8650 { PREFIX_TABLE (PREFIX_VEX_0FC2) },
592d1631 8651 { Bad_Opcode },
592a252b
L
8652 { PREFIX_TABLE (PREFIX_VEX_0FC4) },
8653 { PREFIX_TABLE (PREFIX_VEX_0FC5) },
bf890a93 8654 { "vshufpX", { XM, Vex, EXx, Ib }, 0 },
592d1631 8655 { Bad_Opcode },
c0f3af97 8656 /* c8 */
592d1631
L
8657 { Bad_Opcode },
8658 { Bad_Opcode },
8659 { Bad_Opcode },
8660 { Bad_Opcode },
8661 { Bad_Opcode },
8662 { Bad_Opcode },
8663 { Bad_Opcode },
8664 { Bad_Opcode },
c0f3af97 8665 /* d0 */
592a252b
L
8666 { PREFIX_TABLE (PREFIX_VEX_0FD0) },
8667 { PREFIX_TABLE (PREFIX_VEX_0FD1) },
8668 { PREFIX_TABLE (PREFIX_VEX_0FD2) },
8669 { PREFIX_TABLE (PREFIX_VEX_0FD3) },
8670 { PREFIX_TABLE (PREFIX_VEX_0FD4) },
8671 { PREFIX_TABLE (PREFIX_VEX_0FD5) },
8672 { PREFIX_TABLE (PREFIX_VEX_0FD6) },
8673 { PREFIX_TABLE (PREFIX_VEX_0FD7) },
c0f3af97 8674 /* d8 */
592a252b
L
8675 { PREFIX_TABLE (PREFIX_VEX_0FD8) },
8676 { PREFIX_TABLE (PREFIX_VEX_0FD9) },
8677 { PREFIX_TABLE (PREFIX_VEX_0FDA) },
8678 { PREFIX_TABLE (PREFIX_VEX_0FDB) },
8679 { PREFIX_TABLE (PREFIX_VEX_0FDC) },
8680 { PREFIX_TABLE (PREFIX_VEX_0FDD) },
8681 { PREFIX_TABLE (PREFIX_VEX_0FDE) },
8682 { PREFIX_TABLE (PREFIX_VEX_0FDF) },
c0f3af97 8683 /* e0 */
592a252b
L
8684 { PREFIX_TABLE (PREFIX_VEX_0FE0) },
8685 { PREFIX_TABLE (PREFIX_VEX_0FE1) },
8686 { PREFIX_TABLE (PREFIX_VEX_0FE2) },
8687 { PREFIX_TABLE (PREFIX_VEX_0FE3) },
8688 { PREFIX_TABLE (PREFIX_VEX_0FE4) },
8689 { PREFIX_TABLE (PREFIX_VEX_0FE5) },
8690 { PREFIX_TABLE (PREFIX_VEX_0FE6) },
8691 { PREFIX_TABLE (PREFIX_VEX_0FE7) },
c0f3af97 8692 /* e8 */
592a252b
L
8693 { PREFIX_TABLE (PREFIX_VEX_0FE8) },
8694 { PREFIX_TABLE (PREFIX_VEX_0FE9) },
8695 { PREFIX_TABLE (PREFIX_VEX_0FEA) },
8696 { PREFIX_TABLE (PREFIX_VEX_0FEB) },
8697 { PREFIX_TABLE (PREFIX_VEX_0FEC) },
8698 { PREFIX_TABLE (PREFIX_VEX_0FED) },
8699 { PREFIX_TABLE (PREFIX_VEX_0FEE) },
8700 { PREFIX_TABLE (PREFIX_VEX_0FEF) },
c0f3af97 8701 /* f0 */
592a252b
L
8702 { PREFIX_TABLE (PREFIX_VEX_0FF0) },
8703 { PREFIX_TABLE (PREFIX_VEX_0FF1) },
8704 { PREFIX_TABLE (PREFIX_VEX_0FF2) },
8705 { PREFIX_TABLE (PREFIX_VEX_0FF3) },
8706 { PREFIX_TABLE (PREFIX_VEX_0FF4) },
8707 { PREFIX_TABLE (PREFIX_VEX_0FF5) },
8708 { PREFIX_TABLE (PREFIX_VEX_0FF6) },
8709 { PREFIX_TABLE (PREFIX_VEX_0FF7) },
c0f3af97 8710 /* f8 */
592a252b
L
8711 { PREFIX_TABLE (PREFIX_VEX_0FF8) },
8712 { PREFIX_TABLE (PREFIX_VEX_0FF9) },
8713 { PREFIX_TABLE (PREFIX_VEX_0FFA) },
8714 { PREFIX_TABLE (PREFIX_VEX_0FFB) },
8715 { PREFIX_TABLE (PREFIX_VEX_0FFC) },
8716 { PREFIX_TABLE (PREFIX_VEX_0FFD) },
8717 { PREFIX_TABLE (PREFIX_VEX_0FFE) },
592d1631 8718 { Bad_Opcode },
c0f3af97
L
8719 },
8720 /* VEX_0F38 */
8721 {
8722 /* 00 */
592a252b
L
8723 { PREFIX_TABLE (PREFIX_VEX_0F3800) },
8724 { PREFIX_TABLE (PREFIX_VEX_0F3801) },
8725 { PREFIX_TABLE (PREFIX_VEX_0F3802) },
8726 { PREFIX_TABLE (PREFIX_VEX_0F3803) },
8727 { PREFIX_TABLE (PREFIX_VEX_0F3804) },
8728 { PREFIX_TABLE (PREFIX_VEX_0F3805) },
8729 { PREFIX_TABLE (PREFIX_VEX_0F3806) },
8730 { PREFIX_TABLE (PREFIX_VEX_0F3807) },
c0f3af97 8731 /* 08 */
592a252b
L
8732 { PREFIX_TABLE (PREFIX_VEX_0F3808) },
8733 { PREFIX_TABLE (PREFIX_VEX_0F3809) },
8734 { PREFIX_TABLE (PREFIX_VEX_0F380A) },
8735 { PREFIX_TABLE (PREFIX_VEX_0F380B) },
8736 { PREFIX_TABLE (PREFIX_VEX_0F380C) },
8737 { PREFIX_TABLE (PREFIX_VEX_0F380D) },
8738 { PREFIX_TABLE (PREFIX_VEX_0F380E) },
8739 { PREFIX_TABLE (PREFIX_VEX_0F380F) },
c0f3af97 8740 /* 10 */
592d1631
L
8741 { Bad_Opcode },
8742 { Bad_Opcode },
8743 { Bad_Opcode },
592a252b 8744 { PREFIX_TABLE (PREFIX_VEX_0F3813) },
592d1631
L
8745 { Bad_Opcode },
8746 { Bad_Opcode },
6c30d220 8747 { PREFIX_TABLE (PREFIX_VEX_0F3816) },
592a252b 8748 { PREFIX_TABLE (PREFIX_VEX_0F3817) },
c0f3af97 8749 /* 18 */
592a252b
L
8750 { PREFIX_TABLE (PREFIX_VEX_0F3818) },
8751 { PREFIX_TABLE (PREFIX_VEX_0F3819) },
8752 { PREFIX_TABLE (PREFIX_VEX_0F381A) },
592d1631 8753 { Bad_Opcode },
592a252b
L
8754 { PREFIX_TABLE (PREFIX_VEX_0F381C) },
8755 { PREFIX_TABLE (PREFIX_VEX_0F381D) },
8756 { PREFIX_TABLE (PREFIX_VEX_0F381E) },
592d1631 8757 { Bad_Opcode },
c0f3af97 8758 /* 20 */
592a252b
L
8759 { PREFIX_TABLE (PREFIX_VEX_0F3820) },
8760 { PREFIX_TABLE (PREFIX_VEX_0F3821) },
8761 { PREFIX_TABLE (PREFIX_VEX_0F3822) },
8762 { PREFIX_TABLE (PREFIX_VEX_0F3823) },
8763 { PREFIX_TABLE (PREFIX_VEX_0F3824) },
8764 { PREFIX_TABLE (PREFIX_VEX_0F3825) },
592d1631
L
8765 { Bad_Opcode },
8766 { Bad_Opcode },
c0f3af97 8767 /* 28 */
592a252b
L
8768 { PREFIX_TABLE (PREFIX_VEX_0F3828) },
8769 { PREFIX_TABLE (PREFIX_VEX_0F3829) },
8770 { PREFIX_TABLE (PREFIX_VEX_0F382A) },
8771 { PREFIX_TABLE (PREFIX_VEX_0F382B) },
8772 { PREFIX_TABLE (PREFIX_VEX_0F382C) },
8773 { PREFIX_TABLE (PREFIX_VEX_0F382D) },
8774 { PREFIX_TABLE (PREFIX_VEX_0F382E) },
8775 { PREFIX_TABLE (PREFIX_VEX_0F382F) },
c0f3af97 8776 /* 30 */
592a252b
L
8777 { PREFIX_TABLE (PREFIX_VEX_0F3830) },
8778 { PREFIX_TABLE (PREFIX_VEX_0F3831) },
8779 { PREFIX_TABLE (PREFIX_VEX_0F3832) },
8780 { PREFIX_TABLE (PREFIX_VEX_0F3833) },
8781 { PREFIX_TABLE (PREFIX_VEX_0F3834) },
8782 { PREFIX_TABLE (PREFIX_VEX_0F3835) },
6c30d220 8783 { PREFIX_TABLE (PREFIX_VEX_0F3836) },
592a252b 8784 { PREFIX_TABLE (PREFIX_VEX_0F3837) },
c0f3af97 8785 /* 38 */
592a252b
L
8786 { PREFIX_TABLE (PREFIX_VEX_0F3838) },
8787 { PREFIX_TABLE (PREFIX_VEX_0F3839) },
8788 { PREFIX_TABLE (PREFIX_VEX_0F383A) },
8789 { PREFIX_TABLE (PREFIX_VEX_0F383B) },
8790 { PREFIX_TABLE (PREFIX_VEX_0F383C) },
8791 { PREFIX_TABLE (PREFIX_VEX_0F383D) },
8792 { PREFIX_TABLE (PREFIX_VEX_0F383E) },
8793 { PREFIX_TABLE (PREFIX_VEX_0F383F) },
c0f3af97 8794 /* 40 */
592a252b
L
8795 { PREFIX_TABLE (PREFIX_VEX_0F3840) },
8796 { PREFIX_TABLE (PREFIX_VEX_0F3841) },
592d1631
L
8797 { Bad_Opcode },
8798 { Bad_Opcode },
8799 { Bad_Opcode },
6c30d220
L
8800 { PREFIX_TABLE (PREFIX_VEX_0F3845) },
8801 { PREFIX_TABLE (PREFIX_VEX_0F3846) },
8802 { PREFIX_TABLE (PREFIX_VEX_0F3847) },
c0f3af97 8803 /* 48 */
592d1631
L
8804 { Bad_Opcode },
8805 { Bad_Opcode },
8806 { Bad_Opcode },
8807 { Bad_Opcode },
8808 { Bad_Opcode },
8809 { Bad_Opcode },
8810 { Bad_Opcode },
8811 { Bad_Opcode },
c0f3af97 8812 /* 50 */
592d1631
L
8813 { Bad_Opcode },
8814 { Bad_Opcode },
8815 { Bad_Opcode },
8816 { Bad_Opcode },
8817 { Bad_Opcode },
8818 { Bad_Opcode },
8819 { Bad_Opcode },
8820 { Bad_Opcode },
c0f3af97 8821 /* 58 */
6c30d220
L
8822 { PREFIX_TABLE (PREFIX_VEX_0F3858) },
8823 { PREFIX_TABLE (PREFIX_VEX_0F3859) },
8824 { PREFIX_TABLE (PREFIX_VEX_0F385A) },
592d1631
L
8825 { Bad_Opcode },
8826 { Bad_Opcode },
8827 { Bad_Opcode },
8828 { Bad_Opcode },
8829 { Bad_Opcode },
c0f3af97 8830 /* 60 */
592d1631
L
8831 { Bad_Opcode },
8832 { Bad_Opcode },
8833 { Bad_Opcode },
8834 { Bad_Opcode },
8835 { Bad_Opcode },
8836 { Bad_Opcode },
8837 { Bad_Opcode },
8838 { Bad_Opcode },
c0f3af97 8839 /* 68 */
592d1631
L
8840 { Bad_Opcode },
8841 { Bad_Opcode },
8842 { Bad_Opcode },
8843 { Bad_Opcode },
8844 { Bad_Opcode },
8845 { Bad_Opcode },
8846 { Bad_Opcode },
8847 { Bad_Opcode },
c0f3af97 8848 /* 70 */
592d1631
L
8849 { Bad_Opcode },
8850 { Bad_Opcode },
8851 { Bad_Opcode },
8852 { Bad_Opcode },
8853 { Bad_Opcode },
8854 { Bad_Opcode },
8855 { Bad_Opcode },
8856 { Bad_Opcode },
c0f3af97 8857 /* 78 */
6c30d220
L
8858 { PREFIX_TABLE (PREFIX_VEX_0F3878) },
8859 { PREFIX_TABLE (PREFIX_VEX_0F3879) },
592d1631
L
8860 { Bad_Opcode },
8861 { Bad_Opcode },
8862 { Bad_Opcode },
8863 { Bad_Opcode },
8864 { Bad_Opcode },
8865 { Bad_Opcode },
c0f3af97 8866 /* 80 */
592d1631
L
8867 { Bad_Opcode },
8868 { Bad_Opcode },
8869 { Bad_Opcode },
8870 { Bad_Opcode },
8871 { Bad_Opcode },
8872 { Bad_Opcode },
8873 { Bad_Opcode },
8874 { Bad_Opcode },
c0f3af97 8875 /* 88 */
592d1631
L
8876 { Bad_Opcode },
8877 { Bad_Opcode },
8878 { Bad_Opcode },
8879 { Bad_Opcode },
6c30d220 8880 { PREFIX_TABLE (PREFIX_VEX_0F388C) },
592d1631 8881 { Bad_Opcode },
6c30d220 8882 { PREFIX_TABLE (PREFIX_VEX_0F388E) },
592d1631 8883 { Bad_Opcode },
c0f3af97 8884 /* 90 */
6c30d220
L
8885 { PREFIX_TABLE (PREFIX_VEX_0F3890) },
8886 { PREFIX_TABLE (PREFIX_VEX_0F3891) },
8887 { PREFIX_TABLE (PREFIX_VEX_0F3892) },
8888 { PREFIX_TABLE (PREFIX_VEX_0F3893) },
592d1631
L
8889 { Bad_Opcode },
8890 { Bad_Opcode },
592a252b
L
8891 { PREFIX_TABLE (PREFIX_VEX_0F3896) },
8892 { PREFIX_TABLE (PREFIX_VEX_0F3897) },
c0f3af97 8893 /* 98 */
592a252b
L
8894 { PREFIX_TABLE (PREFIX_VEX_0F3898) },
8895 { PREFIX_TABLE (PREFIX_VEX_0F3899) },
8896 { PREFIX_TABLE (PREFIX_VEX_0F389A) },
8897 { PREFIX_TABLE (PREFIX_VEX_0F389B) },
8898 { PREFIX_TABLE (PREFIX_VEX_0F389C) },
8899 { PREFIX_TABLE (PREFIX_VEX_0F389D) },
8900 { PREFIX_TABLE (PREFIX_VEX_0F389E) },
8901 { PREFIX_TABLE (PREFIX_VEX_0F389F) },
c0f3af97 8902 /* a0 */
592d1631
L
8903 { Bad_Opcode },
8904 { Bad_Opcode },
8905 { Bad_Opcode },
8906 { Bad_Opcode },
8907 { Bad_Opcode },
8908 { Bad_Opcode },
592a252b
L
8909 { PREFIX_TABLE (PREFIX_VEX_0F38A6) },
8910 { PREFIX_TABLE (PREFIX_VEX_0F38A7) },
c0f3af97 8911 /* a8 */
592a252b
L
8912 { PREFIX_TABLE (PREFIX_VEX_0F38A8) },
8913 { PREFIX_TABLE (PREFIX_VEX_0F38A9) },
8914 { PREFIX_TABLE (PREFIX_VEX_0F38AA) },
8915 { PREFIX_TABLE (PREFIX_VEX_0F38AB) },
8916 { PREFIX_TABLE (PREFIX_VEX_0F38AC) },
8917 { PREFIX_TABLE (PREFIX_VEX_0F38AD) },
8918 { PREFIX_TABLE (PREFIX_VEX_0F38AE) },
8919 { PREFIX_TABLE (PREFIX_VEX_0F38AF) },
c0f3af97 8920 /* b0 */
592d1631
L
8921 { Bad_Opcode },
8922 { Bad_Opcode },
8923 { Bad_Opcode },
8924 { Bad_Opcode },
8925 { Bad_Opcode },
8926 { Bad_Opcode },
592a252b
L
8927 { PREFIX_TABLE (PREFIX_VEX_0F38B6) },
8928 { PREFIX_TABLE (PREFIX_VEX_0F38B7) },
c0f3af97 8929 /* b8 */
592a252b
L
8930 { PREFIX_TABLE (PREFIX_VEX_0F38B8) },
8931 { PREFIX_TABLE (PREFIX_VEX_0F38B9) },
8932 { PREFIX_TABLE (PREFIX_VEX_0F38BA) },
8933 { PREFIX_TABLE (PREFIX_VEX_0F38BB) },
8934 { PREFIX_TABLE (PREFIX_VEX_0F38BC) },
8935 { PREFIX_TABLE (PREFIX_VEX_0F38BD) },
8936 { PREFIX_TABLE (PREFIX_VEX_0F38BE) },
8937 { PREFIX_TABLE (PREFIX_VEX_0F38BF) },
c0f3af97 8938 /* c0 */
592d1631
L
8939 { Bad_Opcode },
8940 { Bad_Opcode },
8941 { Bad_Opcode },
8942 { Bad_Opcode },
8943 { Bad_Opcode },
8944 { Bad_Opcode },
8945 { Bad_Opcode },
8946 { Bad_Opcode },
c0f3af97 8947 /* c8 */
592d1631
L
8948 { Bad_Opcode },
8949 { Bad_Opcode },
8950 { Bad_Opcode },
8951 { Bad_Opcode },
8952 { Bad_Opcode },
8953 { Bad_Opcode },
8954 { Bad_Opcode },
48521003 8955 { PREFIX_TABLE (PREFIX_VEX_0F38CF) },
c0f3af97 8956 /* d0 */
592d1631
L
8957 { Bad_Opcode },
8958 { Bad_Opcode },
8959 { Bad_Opcode },
8960 { Bad_Opcode },
8961 { Bad_Opcode },
8962 { Bad_Opcode },
8963 { Bad_Opcode },
8964 { Bad_Opcode },
c0f3af97 8965 /* d8 */
592d1631
L
8966 { Bad_Opcode },
8967 { Bad_Opcode },
8968 { Bad_Opcode },
592a252b
L
8969 { PREFIX_TABLE (PREFIX_VEX_0F38DB) },
8970 { PREFIX_TABLE (PREFIX_VEX_0F38DC) },
8971 { PREFIX_TABLE (PREFIX_VEX_0F38DD) },
8972 { PREFIX_TABLE (PREFIX_VEX_0F38DE) },
8973 { PREFIX_TABLE (PREFIX_VEX_0F38DF) },
c0f3af97 8974 /* e0 */
592d1631
L
8975 { Bad_Opcode },
8976 { Bad_Opcode },
8977 { Bad_Opcode },
8978 { Bad_Opcode },
8979 { Bad_Opcode },
8980 { Bad_Opcode },
8981 { Bad_Opcode },
8982 { Bad_Opcode },
c0f3af97 8983 /* e8 */
592d1631
L
8984 { Bad_Opcode },
8985 { Bad_Opcode },
8986 { Bad_Opcode },
8987 { Bad_Opcode },
8988 { Bad_Opcode },
8989 { Bad_Opcode },
8990 { Bad_Opcode },
8991 { Bad_Opcode },
c0f3af97 8992 /* f0 */
592d1631
L
8993 { Bad_Opcode },
8994 { Bad_Opcode },
f12dc422
L
8995 { PREFIX_TABLE (PREFIX_VEX_0F38F2) },
8996 { REG_TABLE (REG_VEX_0F38F3) },
592d1631 8997 { Bad_Opcode },
6c30d220
L
8998 { PREFIX_TABLE (PREFIX_VEX_0F38F5) },
8999 { PREFIX_TABLE (PREFIX_VEX_0F38F6) },
f12dc422 9000 { PREFIX_TABLE (PREFIX_VEX_0F38F7) },
c0f3af97 9001 /* f8 */
592d1631
L
9002 { Bad_Opcode },
9003 { Bad_Opcode },
9004 { Bad_Opcode },
9005 { Bad_Opcode },
9006 { Bad_Opcode },
9007 { Bad_Opcode },
9008 { Bad_Opcode },
9009 { Bad_Opcode },
c0f3af97
L
9010 },
9011 /* VEX_0F3A */
9012 {
9013 /* 00 */
6c30d220
L
9014 { PREFIX_TABLE (PREFIX_VEX_0F3A00) },
9015 { PREFIX_TABLE (PREFIX_VEX_0F3A01) },
9016 { PREFIX_TABLE (PREFIX_VEX_0F3A02) },
592d1631 9017 { Bad_Opcode },
592a252b
L
9018 { PREFIX_TABLE (PREFIX_VEX_0F3A04) },
9019 { PREFIX_TABLE (PREFIX_VEX_0F3A05) },
9020 { PREFIX_TABLE (PREFIX_VEX_0F3A06) },
592d1631 9021 { Bad_Opcode },
c0f3af97 9022 /* 08 */
592a252b
L
9023 { PREFIX_TABLE (PREFIX_VEX_0F3A08) },
9024 { PREFIX_TABLE (PREFIX_VEX_0F3A09) },
9025 { PREFIX_TABLE (PREFIX_VEX_0F3A0A) },
9026 { PREFIX_TABLE (PREFIX_VEX_0F3A0B) },
9027 { PREFIX_TABLE (PREFIX_VEX_0F3A0C) },
9028 { PREFIX_TABLE (PREFIX_VEX_0F3A0D) },
9029 { PREFIX_TABLE (PREFIX_VEX_0F3A0E) },
9030 { PREFIX_TABLE (PREFIX_VEX_0F3A0F) },
c0f3af97 9031 /* 10 */
592d1631
L
9032 { Bad_Opcode },
9033 { Bad_Opcode },
9034 { Bad_Opcode },
9035 { Bad_Opcode },
592a252b
L
9036 { PREFIX_TABLE (PREFIX_VEX_0F3A14) },
9037 { PREFIX_TABLE (PREFIX_VEX_0F3A15) },
9038 { PREFIX_TABLE (PREFIX_VEX_0F3A16) },
9039 { PREFIX_TABLE (PREFIX_VEX_0F3A17) },
c0f3af97 9040 /* 18 */
592a252b
L
9041 { PREFIX_TABLE (PREFIX_VEX_0F3A18) },
9042 { PREFIX_TABLE (PREFIX_VEX_0F3A19) },
592d1631
L
9043 { Bad_Opcode },
9044 { Bad_Opcode },
9045 { Bad_Opcode },
592a252b 9046 { PREFIX_TABLE (PREFIX_VEX_0F3A1D) },
592d1631
L
9047 { Bad_Opcode },
9048 { Bad_Opcode },
c0f3af97 9049 /* 20 */
592a252b
L
9050 { PREFIX_TABLE (PREFIX_VEX_0F3A20) },
9051 { PREFIX_TABLE (PREFIX_VEX_0F3A21) },
9052 { PREFIX_TABLE (PREFIX_VEX_0F3A22) },
592d1631
L
9053 { Bad_Opcode },
9054 { Bad_Opcode },
9055 { Bad_Opcode },
9056 { Bad_Opcode },
9057 { Bad_Opcode },
c0f3af97 9058 /* 28 */
592d1631
L
9059 { Bad_Opcode },
9060 { Bad_Opcode },
9061 { Bad_Opcode },
9062 { Bad_Opcode },
9063 { Bad_Opcode },
9064 { Bad_Opcode },
9065 { Bad_Opcode },
9066 { Bad_Opcode },
c0f3af97 9067 /* 30 */
43234a1e 9068 { PREFIX_TABLE (PREFIX_VEX_0F3A30) },
1ba585e8 9069 { PREFIX_TABLE (PREFIX_VEX_0F3A31) },
43234a1e 9070 { PREFIX_TABLE (PREFIX_VEX_0F3A32) },
1ba585e8 9071 { PREFIX_TABLE (PREFIX_VEX_0F3A33) },
592d1631
L
9072 { Bad_Opcode },
9073 { Bad_Opcode },
9074 { Bad_Opcode },
9075 { Bad_Opcode },
c0f3af97 9076 /* 38 */
6c30d220
L
9077 { PREFIX_TABLE (PREFIX_VEX_0F3A38) },
9078 { PREFIX_TABLE (PREFIX_VEX_0F3A39) },
592d1631
L
9079 { Bad_Opcode },
9080 { Bad_Opcode },
9081 { Bad_Opcode },
9082 { Bad_Opcode },
9083 { Bad_Opcode },
9084 { Bad_Opcode },
c0f3af97 9085 /* 40 */
592a252b
L
9086 { PREFIX_TABLE (PREFIX_VEX_0F3A40) },
9087 { PREFIX_TABLE (PREFIX_VEX_0F3A41) },
9088 { PREFIX_TABLE (PREFIX_VEX_0F3A42) },
592d1631 9089 { Bad_Opcode },
592a252b 9090 { PREFIX_TABLE (PREFIX_VEX_0F3A44) },
592d1631 9091 { Bad_Opcode },
6c30d220 9092 { PREFIX_TABLE (PREFIX_VEX_0F3A46) },
592d1631 9093 { Bad_Opcode },
c0f3af97 9094 /* 48 */
592a252b
L
9095 { PREFIX_TABLE (PREFIX_VEX_0F3A48) },
9096 { PREFIX_TABLE (PREFIX_VEX_0F3A49) },
9097 { PREFIX_TABLE (PREFIX_VEX_0F3A4A) },
9098 { PREFIX_TABLE (PREFIX_VEX_0F3A4B) },
9099 { PREFIX_TABLE (PREFIX_VEX_0F3A4C) },
592d1631
L
9100 { Bad_Opcode },
9101 { Bad_Opcode },
9102 { Bad_Opcode },
c0f3af97 9103 /* 50 */
592d1631
L
9104 { Bad_Opcode },
9105 { Bad_Opcode },
9106 { Bad_Opcode },
9107 { Bad_Opcode },
9108 { Bad_Opcode },
9109 { Bad_Opcode },
9110 { Bad_Opcode },
9111 { Bad_Opcode },
c0f3af97 9112 /* 58 */
592d1631
L
9113 { Bad_Opcode },
9114 { Bad_Opcode },
9115 { Bad_Opcode },
9116 { Bad_Opcode },
592a252b
L
9117 { PREFIX_TABLE (PREFIX_VEX_0F3A5C) },
9118 { PREFIX_TABLE (PREFIX_VEX_0F3A5D) },
9119 { PREFIX_TABLE (PREFIX_VEX_0F3A5E) },
9120 { PREFIX_TABLE (PREFIX_VEX_0F3A5F) },
c0f3af97 9121 /* 60 */
592a252b
L
9122 { PREFIX_TABLE (PREFIX_VEX_0F3A60) },
9123 { PREFIX_TABLE (PREFIX_VEX_0F3A61) },
9124 { PREFIX_TABLE (PREFIX_VEX_0F3A62) },
9125 { PREFIX_TABLE (PREFIX_VEX_0F3A63) },
592d1631
L
9126 { Bad_Opcode },
9127 { Bad_Opcode },
9128 { Bad_Opcode },
9129 { Bad_Opcode },
c0f3af97 9130 /* 68 */
592a252b
L
9131 { PREFIX_TABLE (PREFIX_VEX_0F3A68) },
9132 { PREFIX_TABLE (PREFIX_VEX_0F3A69) },
9133 { PREFIX_TABLE (PREFIX_VEX_0F3A6A) },
9134 { PREFIX_TABLE (PREFIX_VEX_0F3A6B) },
9135 { PREFIX_TABLE (PREFIX_VEX_0F3A6C) },
9136 { PREFIX_TABLE (PREFIX_VEX_0F3A6D) },
9137 { PREFIX_TABLE (PREFIX_VEX_0F3A6E) },
9138 { PREFIX_TABLE (PREFIX_VEX_0F3A6F) },
c0f3af97 9139 /* 70 */
592d1631
L
9140 { Bad_Opcode },
9141 { Bad_Opcode },
9142 { Bad_Opcode },
9143 { Bad_Opcode },
9144 { Bad_Opcode },
9145 { Bad_Opcode },
9146 { Bad_Opcode },
9147 { Bad_Opcode },
c0f3af97 9148 /* 78 */
592a252b
L
9149 { PREFIX_TABLE (PREFIX_VEX_0F3A78) },
9150 { PREFIX_TABLE (PREFIX_VEX_0F3A79) },
9151 { PREFIX_TABLE (PREFIX_VEX_0F3A7A) },
9152 { PREFIX_TABLE (PREFIX_VEX_0F3A7B) },
9153 { PREFIX_TABLE (PREFIX_VEX_0F3A7C) },
9154 { PREFIX_TABLE (PREFIX_VEX_0F3A7D) },
9155 { PREFIX_TABLE (PREFIX_VEX_0F3A7E) },
9156 { PREFIX_TABLE (PREFIX_VEX_0F3A7F) },
c0f3af97 9157 /* 80 */
592d1631
L
9158 { Bad_Opcode },
9159 { Bad_Opcode },
9160 { Bad_Opcode },
9161 { Bad_Opcode },
9162 { Bad_Opcode },
9163 { Bad_Opcode },
9164 { Bad_Opcode },
9165 { Bad_Opcode },
c0f3af97 9166 /* 88 */
592d1631
L
9167 { Bad_Opcode },
9168 { Bad_Opcode },
9169 { Bad_Opcode },
9170 { Bad_Opcode },
9171 { Bad_Opcode },
9172 { Bad_Opcode },
9173 { Bad_Opcode },
9174 { Bad_Opcode },
c0f3af97 9175 /* 90 */
592d1631
L
9176 { Bad_Opcode },
9177 { Bad_Opcode },
9178 { Bad_Opcode },
9179 { Bad_Opcode },
9180 { Bad_Opcode },
9181 { Bad_Opcode },
9182 { Bad_Opcode },
9183 { Bad_Opcode },
c0f3af97 9184 /* 98 */
592d1631
L
9185 { Bad_Opcode },
9186 { Bad_Opcode },
9187 { Bad_Opcode },
9188 { Bad_Opcode },
9189 { Bad_Opcode },
9190 { Bad_Opcode },
9191 { Bad_Opcode },
9192 { Bad_Opcode },
c0f3af97 9193 /* a0 */
592d1631
L
9194 { Bad_Opcode },
9195 { Bad_Opcode },
9196 { Bad_Opcode },
9197 { Bad_Opcode },
9198 { Bad_Opcode },
9199 { Bad_Opcode },
9200 { Bad_Opcode },
9201 { Bad_Opcode },
c0f3af97 9202 /* a8 */
592d1631
L
9203 { Bad_Opcode },
9204 { Bad_Opcode },
9205 { Bad_Opcode },
9206 { Bad_Opcode },
9207 { Bad_Opcode },
9208 { Bad_Opcode },
9209 { Bad_Opcode },
9210 { Bad_Opcode },
c0f3af97 9211 /* b0 */
592d1631
L
9212 { Bad_Opcode },
9213 { Bad_Opcode },
9214 { Bad_Opcode },
9215 { Bad_Opcode },
9216 { Bad_Opcode },
9217 { Bad_Opcode },
9218 { Bad_Opcode },
9219 { Bad_Opcode },
c0f3af97 9220 /* b8 */
592d1631
L
9221 { Bad_Opcode },
9222 { Bad_Opcode },
9223 { Bad_Opcode },
9224 { Bad_Opcode },
9225 { Bad_Opcode },
9226 { Bad_Opcode },
9227 { Bad_Opcode },
9228 { Bad_Opcode },
c0f3af97 9229 /* c0 */
592d1631
L
9230 { Bad_Opcode },
9231 { Bad_Opcode },
9232 { Bad_Opcode },
9233 { Bad_Opcode },
9234 { Bad_Opcode },
9235 { Bad_Opcode },
9236 { Bad_Opcode },
9237 { Bad_Opcode },
c0f3af97 9238 /* c8 */
592d1631
L
9239 { Bad_Opcode },
9240 { Bad_Opcode },
9241 { Bad_Opcode },
9242 { Bad_Opcode },
9243 { Bad_Opcode },
9244 { Bad_Opcode },
48521003
IT
9245 { PREFIX_TABLE(PREFIX_VEX_0F3ACE) },
9246 { PREFIX_TABLE(PREFIX_VEX_0F3ACF) },
c0f3af97 9247 /* d0 */
592d1631
L
9248 { Bad_Opcode },
9249 { Bad_Opcode },
9250 { Bad_Opcode },
9251 { Bad_Opcode },
9252 { Bad_Opcode },
9253 { Bad_Opcode },
9254 { Bad_Opcode },
9255 { Bad_Opcode },
c0f3af97 9256 /* d8 */
592d1631
L
9257 { Bad_Opcode },
9258 { Bad_Opcode },
9259 { Bad_Opcode },
9260 { Bad_Opcode },
9261 { Bad_Opcode },
9262 { Bad_Opcode },
9263 { Bad_Opcode },
592a252b 9264 { PREFIX_TABLE (PREFIX_VEX_0F3ADF) },
c0f3af97 9265 /* e0 */
592d1631
L
9266 { Bad_Opcode },
9267 { Bad_Opcode },
9268 { Bad_Opcode },
9269 { Bad_Opcode },
9270 { Bad_Opcode },
9271 { Bad_Opcode },
9272 { Bad_Opcode },
9273 { Bad_Opcode },
c0f3af97 9274 /* e8 */
592d1631
L
9275 { Bad_Opcode },
9276 { Bad_Opcode },
9277 { Bad_Opcode },
9278 { Bad_Opcode },
9279 { Bad_Opcode },
9280 { Bad_Opcode },
9281 { Bad_Opcode },
9282 { Bad_Opcode },
c0f3af97 9283 /* f0 */
6c30d220 9284 { PREFIX_TABLE (PREFIX_VEX_0F3AF0) },
592d1631
L
9285 { Bad_Opcode },
9286 { Bad_Opcode },
9287 { Bad_Opcode },
9288 { Bad_Opcode },
9289 { Bad_Opcode },
9290 { Bad_Opcode },
9291 { Bad_Opcode },
c0f3af97 9292 /* f8 */
592d1631
L
9293 { Bad_Opcode },
9294 { Bad_Opcode },
9295 { Bad_Opcode },
9296 { Bad_Opcode },
9297 { Bad_Opcode },
9298 { Bad_Opcode },
9299 { Bad_Opcode },
9300 { Bad_Opcode },
c0f3af97
L
9301 },
9302};
9303
43234a1e 9304#include "i386-dis-evex.h"
ad692897 9305
c0f3af97 9306static const struct dis386 vex_len_table[][2] = {
592a252b 9307 /* VEX_LEN_0F12_P_0_M_0 */
c0f3af97 9308 {
ec6f095a 9309 { "vmovlps", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9310 },
9311
592a252b 9312 /* VEX_LEN_0F12_P_0_M_1 */
c0f3af97 9313 {
ec6f095a 9314 { "vmovhlps", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9315 },
9316
592a252b 9317 /* VEX_LEN_0F12_P_2 */
c0f3af97 9318 {
ec6f095a 9319 { "vmovlpd", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9320 },
9321
592a252b 9322 /* VEX_LEN_0F13_M_0 */
c0f3af97 9323 {
ec6f095a 9324 { "vmovlpX", { EXq, XM }, 0 },
c0f3af97
L
9325 },
9326
592a252b 9327 /* VEX_LEN_0F16_P_0_M_0 */
c0f3af97 9328 {
ec6f095a 9329 { "vmovhps", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9330 },
9331
592a252b 9332 /* VEX_LEN_0F16_P_0_M_1 */
c0f3af97 9333 {
ec6f095a 9334 { "vmovlhps", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9335 },
9336
592a252b 9337 /* VEX_LEN_0F16_P_2 */
c0f3af97 9338 {
ec6f095a 9339 { "vmovhpd", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9340 },
9341
592a252b 9342 /* VEX_LEN_0F17_M_0 */
c0f3af97 9343 {
ec6f095a 9344 { "vmovhpX", { EXq, XM }, 0 },
c0f3af97
L
9345 },
9346
43234a1e
L
9347 /* VEX_LEN_0F41_P_0 */
9348 {
9349 { Bad_Opcode },
9350 { VEX_W_TABLE (VEX_W_0F41_P_0_LEN_1) },
9351 },
1ba585e8
IT
9352 /* VEX_LEN_0F41_P_2 */
9353 {
9354 { Bad_Opcode },
9355 { VEX_W_TABLE (VEX_W_0F41_P_2_LEN_1) },
9356 },
43234a1e
L
9357 /* VEX_LEN_0F42_P_0 */
9358 {
9359 { Bad_Opcode },
9360 { VEX_W_TABLE (VEX_W_0F42_P_0_LEN_1) },
9361 },
1ba585e8
IT
9362 /* VEX_LEN_0F42_P_2 */
9363 {
9364 { Bad_Opcode },
9365 { VEX_W_TABLE (VEX_W_0F42_P_2_LEN_1) },
9366 },
43234a1e
L
9367 /* VEX_LEN_0F44_P_0 */
9368 {
9369 { VEX_W_TABLE (VEX_W_0F44_P_0_LEN_0) },
9370 },
1ba585e8
IT
9371 /* VEX_LEN_0F44_P_2 */
9372 {
9373 { VEX_W_TABLE (VEX_W_0F44_P_2_LEN_0) },
9374 },
43234a1e
L
9375 /* VEX_LEN_0F45_P_0 */
9376 {
9377 { Bad_Opcode },
9378 { VEX_W_TABLE (VEX_W_0F45_P_0_LEN_1) },
9379 },
1ba585e8
IT
9380 /* VEX_LEN_0F45_P_2 */
9381 {
9382 { Bad_Opcode },
9383 { VEX_W_TABLE (VEX_W_0F45_P_2_LEN_1) },
9384 },
43234a1e
L
9385 /* VEX_LEN_0F46_P_0 */
9386 {
9387 { Bad_Opcode },
9388 { VEX_W_TABLE (VEX_W_0F46_P_0_LEN_1) },
9389 },
1ba585e8
IT
9390 /* VEX_LEN_0F46_P_2 */
9391 {
9392 { Bad_Opcode },
9393 { VEX_W_TABLE (VEX_W_0F46_P_2_LEN_1) },
9394 },
43234a1e
L
9395 /* VEX_LEN_0F47_P_0 */
9396 {
9397 { Bad_Opcode },
9398 { VEX_W_TABLE (VEX_W_0F47_P_0_LEN_1) },
9399 },
1ba585e8
IT
9400 /* VEX_LEN_0F47_P_2 */
9401 {
9402 { Bad_Opcode },
9403 { VEX_W_TABLE (VEX_W_0F47_P_2_LEN_1) },
9404 },
9405 /* VEX_LEN_0F4A_P_0 */
9406 {
9407 { Bad_Opcode },
9408 { VEX_W_TABLE (VEX_W_0F4A_P_0_LEN_1) },
9409 },
9410 /* VEX_LEN_0F4A_P_2 */
9411 {
9412 { Bad_Opcode },
9413 { VEX_W_TABLE (VEX_W_0F4A_P_2_LEN_1) },
9414 },
9415 /* VEX_LEN_0F4B_P_0 */
9416 {
9417 { Bad_Opcode },
9418 { VEX_W_TABLE (VEX_W_0F4B_P_0_LEN_1) },
9419 },
43234a1e
L
9420 /* VEX_LEN_0F4B_P_2 */
9421 {
9422 { Bad_Opcode },
9423 { VEX_W_TABLE (VEX_W_0F4B_P_2_LEN_1) },
9424 },
9425
ec6f095a 9426 /* VEX_LEN_0F6E_P_2 */
c0f3af97 9427 {
ec6f095a 9428 { "vmovK", { XMScalar, Edq }, 0 },
c0f3af97
L
9429 },
9430
ec6f095a 9431 /* VEX_LEN_0F77_P_1 */
c0f3af97 9432 {
ec6f095a
L
9433 { "vzeroupper", { XX }, 0 },
9434 { "vzeroall", { XX }, 0 },
c0f3af97
L
9435 },
9436
ec6f095a 9437 /* VEX_LEN_0F7E_P_1 */
c0f3af97 9438 {
ec6f095a 9439 { "vmovq", { XMScalar, EXqScalar }, 0 },
c0f3af97
L
9440 },
9441
ec6f095a 9442 /* VEX_LEN_0F7E_P_2 */
c0f3af97 9443 {
ec6f095a 9444 { "vmovK", { Edq, XMScalar }, 0 },
c0f3af97
L
9445 },
9446
ec6f095a 9447 /* VEX_LEN_0F90_P_0 */
c0f3af97 9448 {
ec6f095a 9449 { VEX_W_TABLE (VEX_W_0F90_P_0_LEN_0) },
c0f3af97
L
9450 },
9451
ec6f095a 9452 /* VEX_LEN_0F90_P_2 */
c0f3af97 9453 {
ec6f095a 9454 { VEX_W_TABLE (VEX_W_0F90_P_2_LEN_0) },
c0f3af97
L
9455 },
9456
ec6f095a 9457 /* VEX_LEN_0F91_P_0 */
c0f3af97 9458 {
ec6f095a 9459 { VEX_W_TABLE (VEX_W_0F91_P_0_LEN_0) },
c0f3af97
L
9460 },
9461
ec6f095a 9462 /* VEX_LEN_0F91_P_2 */
c0f3af97 9463 {
ec6f095a 9464 { VEX_W_TABLE (VEX_W_0F91_P_2_LEN_0) },
c0f3af97
L
9465 },
9466
ec6f095a 9467 /* VEX_LEN_0F92_P_0 */
c0f3af97 9468 {
ec6f095a 9469 { VEX_W_TABLE (VEX_W_0F92_P_0_LEN_0) },
c0f3af97
L
9470 },
9471
ec6f095a 9472 /* VEX_LEN_0F92_P_2 */
c0f3af97 9473 {
ec6f095a 9474 { VEX_W_TABLE (VEX_W_0F92_P_2_LEN_0) },
c0f3af97
L
9475 },
9476
ec6f095a 9477 /* VEX_LEN_0F92_P_3 */
c0f3af97 9478 {
58a211d2 9479 { MOD_TABLE (MOD_VEX_0F92_P_3_LEN_0) },
c0f3af97
L
9480 },
9481
ec6f095a 9482 /* VEX_LEN_0F93_P_0 */
c0f3af97 9483 {
ec6f095a 9484 { VEX_W_TABLE (VEX_W_0F93_P_0_LEN_0) },
c0f3af97
L
9485 },
9486
ec6f095a 9487 /* VEX_LEN_0F93_P_2 */
c0f3af97 9488 {
ec6f095a 9489 { VEX_W_TABLE (VEX_W_0F93_P_2_LEN_0) },
c0f3af97
L
9490 },
9491
ec6f095a 9492 /* VEX_LEN_0F93_P_3 */
c0f3af97 9493 {
58a211d2 9494 { MOD_TABLE (MOD_VEX_0F93_P_3_LEN_0) },
c0f3af97
L
9495 },
9496
ec6f095a 9497 /* VEX_LEN_0F98_P_0 */
43234a1e
L
9498 {
9499 { VEX_W_TABLE (VEX_W_0F98_P_0_LEN_0) },
9500 },
9501
1ba585e8
IT
9502 /* VEX_LEN_0F98_P_2 */
9503 {
9504 { VEX_W_TABLE (VEX_W_0F98_P_2_LEN_0) },
9505 },
9506
9507 /* VEX_LEN_0F99_P_0 */
9508 {
9509 { VEX_W_TABLE (VEX_W_0F99_P_0_LEN_0) },
9510 },
9511
9512 /* VEX_LEN_0F99_P_2 */
9513 {
9514 { VEX_W_TABLE (VEX_W_0F99_P_2_LEN_0) },
9515 },
9516
6c30d220 9517 /* VEX_LEN_0FAE_R_2_M_0 */
c0f3af97 9518 {
ec6f095a 9519 { "vldmxcsr", { Md }, 0 },
c0f3af97
L
9520 },
9521
6c30d220 9522 /* VEX_LEN_0FAE_R_3_M_0 */
c0f3af97 9523 {
ec6f095a 9524 { "vstmxcsr", { Md }, 0 },
c0f3af97
L
9525 },
9526
6c30d220 9527 /* VEX_LEN_0FC4_P_2 */
c0f3af97 9528 {
b50c9f31 9529 { "vpinsrw", { XM, Vex128, Edqw, Ib }, 0 },
c0f3af97
L
9530 },
9531
6c30d220 9532 /* VEX_LEN_0FC5_P_2 */
c0f3af97 9533 {
b50c9f31 9534 { "vpextrw", { Gdq, XS, Ib }, 0 },
c0f3af97
L
9535 },
9536
6c30d220 9537 /* VEX_LEN_0FD6_P_2 */
c0f3af97 9538 {
ec6f095a 9539 { "vmovq", { EXqScalarS, XMScalar }, 0 },
c0f3af97
L
9540 },
9541
6c30d220 9542 /* VEX_LEN_0FF7_P_2 */
c0f3af97 9543 {
ec6f095a 9544 { "vmaskmovdqu", { XM, XS }, 0 },
c0f3af97
L
9545 },
9546
6c30d220 9547 /* VEX_LEN_0F3816_P_2 */
c0f3af97 9548 {
6c30d220
L
9549 { Bad_Opcode },
9550 { VEX_W_TABLE (VEX_W_0F3816_P_2) },
c0f3af97
L
9551 },
9552
6c30d220 9553 /* VEX_LEN_0F3819_P_2 */
c0f3af97 9554 {
6c30d220
L
9555 { Bad_Opcode },
9556 { VEX_W_TABLE (VEX_W_0F3819_P_2) },
c0f3af97
L
9557 },
9558
6c30d220 9559 /* VEX_LEN_0F381A_P_2_M_0 */
c0f3af97 9560 {
6c30d220
L
9561 { Bad_Opcode },
9562 { VEX_W_TABLE (VEX_W_0F381A_P_2_M_0) },
c0f3af97
L
9563 },
9564
6c30d220 9565 /* VEX_LEN_0F3836_P_2 */
c0f3af97 9566 {
6c30d220
L
9567 { Bad_Opcode },
9568 { VEX_W_TABLE (VEX_W_0F3836_P_2) },
c0f3af97
L
9569 },
9570
592a252b 9571 /* VEX_LEN_0F3841_P_2 */
c0f3af97 9572 {
ec6f095a 9573 { "vphminposuw", { XM, EXx }, 0 },
c0f3af97
L
9574 },
9575
6c30d220
L
9576 /* VEX_LEN_0F385A_P_2_M_0 */
9577 {
9578 { Bad_Opcode },
9579 { VEX_W_TABLE (VEX_W_0F385A_P_2_M_0) },
9580 },
9581
592a252b 9582 /* VEX_LEN_0F38DB_P_2 */
a5ff0eb2 9583 {
ec6f095a 9584 { "vaesimc", { XM, EXx }, 0 },
a5ff0eb2
L
9585 },
9586
f12dc422
L
9587 /* VEX_LEN_0F38F2_P_0 */
9588 {
bf890a93 9589 { "andnS", { Gdq, VexGdq, Edq }, 0 },
f12dc422
L
9590 },
9591
9592 /* VEX_LEN_0F38F3_R_1_P_0 */
9593 {
bf890a93 9594 { "blsrS", { VexGdq, Edq }, 0 },
f12dc422
L
9595 },
9596
9597 /* VEX_LEN_0F38F3_R_2_P_0 */
9598 {
bf890a93 9599 { "blsmskS", { VexGdq, Edq }, 0 },
f12dc422
L
9600 },
9601
9602 /* VEX_LEN_0F38F3_R_3_P_0 */
9603 {
bf890a93 9604 { "blsiS", { VexGdq, Edq }, 0 },
f12dc422
L
9605 },
9606
6c30d220
L
9607 /* VEX_LEN_0F38F5_P_0 */
9608 {
bf890a93 9609 { "bzhiS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
9610 },
9611
9612 /* VEX_LEN_0F38F5_P_1 */
9613 {
bf890a93 9614 { "pextS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
9615 },
9616
9617 /* VEX_LEN_0F38F5_P_3 */
9618 {
bf890a93 9619 { "pdepS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
9620 },
9621
9622 /* VEX_LEN_0F38F6_P_3 */
9623 {
bf890a93 9624 { "mulxS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
9625 },
9626
f12dc422
L
9627 /* VEX_LEN_0F38F7_P_0 */
9628 {
bf890a93 9629 { "bextrS", { Gdq, Edq, VexGdq }, 0 },
f12dc422
L
9630 },
9631
6c30d220
L
9632 /* VEX_LEN_0F38F7_P_1 */
9633 {
bf890a93 9634 { "sarxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
9635 },
9636
9637 /* VEX_LEN_0F38F7_P_2 */
9638 {
bf890a93 9639 { "shlxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
9640 },
9641
9642 /* VEX_LEN_0F38F7_P_3 */
9643 {
bf890a93 9644 { "shrxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
9645 },
9646
9647 /* VEX_LEN_0F3A00_P_2 */
9648 {
9649 { Bad_Opcode },
9650 { VEX_W_TABLE (VEX_W_0F3A00_P_2) },
9651 },
9652
9653 /* VEX_LEN_0F3A01_P_2 */
9654 {
9655 { Bad_Opcode },
9656 { VEX_W_TABLE (VEX_W_0F3A01_P_2) },
9657 },
9658
592a252b 9659 /* VEX_LEN_0F3A06_P_2 */
c0f3af97 9660 {
592d1631 9661 { Bad_Opcode },
592a252b 9662 { VEX_W_TABLE (VEX_W_0F3A06_P_2) },
c0f3af97
L
9663 },
9664
592a252b 9665 /* VEX_LEN_0F3A14_P_2 */
c0f3af97 9666 {
b50c9f31 9667 { "vpextrb", { Edqb, XM, Ib }, 0 },
c0f3af97
L
9668 },
9669
592a252b 9670 /* VEX_LEN_0F3A15_P_2 */
c0f3af97 9671 {
b50c9f31 9672 { "vpextrw", { Edqw, XM, Ib }, 0 },
c0f3af97
L
9673 },
9674
592a252b 9675 /* VEX_LEN_0F3A16_P_2 */
c0f3af97 9676 {
bf890a93 9677 { "vpextrK", { Edq, XM, Ib }, 0 },
c0f3af97
L
9678 },
9679
592a252b 9680 /* VEX_LEN_0F3A17_P_2 */
c0f3af97 9681 {
bf890a93 9682 { "vextractps", { Edqd, XM, Ib }, 0 },
c0f3af97
L
9683 },
9684
592a252b 9685 /* VEX_LEN_0F3A18_P_2 */
c0f3af97 9686 {
592d1631 9687 { Bad_Opcode },
592a252b 9688 { VEX_W_TABLE (VEX_W_0F3A18_P_2) },
c0f3af97
L
9689 },
9690
592a252b 9691 /* VEX_LEN_0F3A19_P_2 */
c0f3af97 9692 {
592d1631 9693 { Bad_Opcode },
592a252b 9694 { VEX_W_TABLE (VEX_W_0F3A19_P_2) },
c0f3af97
L
9695 },
9696
592a252b 9697 /* VEX_LEN_0F3A20_P_2 */
c0f3af97 9698 {
b50c9f31 9699 { "vpinsrb", { XM, Vex128, Edqb, Ib }, 0 },
c0f3af97
L
9700 },
9701
592a252b 9702 /* VEX_LEN_0F3A21_P_2 */
c0f3af97 9703 {
ec6f095a 9704 { "vinsertps", { XM, Vex128, EXd, Ib }, 0 },
c0f3af97
L
9705 },
9706
592a252b 9707 /* VEX_LEN_0F3A22_P_2 */
c0f3af97 9708 {
bf890a93 9709 { "vpinsrK", { XM, Vex128, Edq, Ib }, 0 },
c0f3af97
L
9710 },
9711
43234a1e
L
9712 /* VEX_LEN_0F3A30_P_2 */
9713 {
9714 { VEX_W_TABLE (VEX_W_0F3A30_P_2_LEN_0) },
9715 },
9716
1ba585e8
IT
9717 /* VEX_LEN_0F3A31_P_2 */
9718 {
9719 { VEX_W_TABLE (VEX_W_0F3A31_P_2_LEN_0) },
9720 },
9721
43234a1e
L
9722 /* VEX_LEN_0F3A32_P_2 */
9723 {
9724 { VEX_W_TABLE (VEX_W_0F3A32_P_2_LEN_0) },
9725 },
9726
1ba585e8
IT
9727 /* VEX_LEN_0F3A33_P_2 */
9728 {
9729 { VEX_W_TABLE (VEX_W_0F3A33_P_2_LEN_0) },
9730 },
9731
6c30d220 9732 /* VEX_LEN_0F3A38_P_2 */
c0f3af97 9733 {
6c30d220
L
9734 { Bad_Opcode },
9735 { VEX_W_TABLE (VEX_W_0F3A38_P_2) },
c0f3af97
L
9736 },
9737
6c30d220 9738 /* VEX_LEN_0F3A39_P_2 */
c0f3af97 9739 {
6c30d220
L
9740 { Bad_Opcode },
9741 { VEX_W_TABLE (VEX_W_0F3A39_P_2) },
9742 },
9743
9744 /* VEX_LEN_0F3A41_P_2 */
9745 {
ec6f095a 9746 { "vdppd", { XM, Vex128, EXx, Ib }, 0 },
c0f3af97
L
9747 },
9748
6c30d220 9749 /* VEX_LEN_0F3A46_P_2 */
c0f3af97 9750 {
6c30d220
L
9751 { Bad_Opcode },
9752 { VEX_W_TABLE (VEX_W_0F3A46_P_2) },
c0f3af97
L
9753 },
9754
592a252b 9755 /* VEX_LEN_0F3A60_P_2 */
c0f3af97 9756 {
15c7c1d8 9757 { "vpcmpestrm", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, 0 },
c0f3af97
L
9758 },
9759
592a252b 9760 /* VEX_LEN_0F3A61_P_2 */
c0f3af97 9761 {
15c7c1d8 9762 { "vpcmpestri", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, 0 },
c0f3af97
L
9763 },
9764
592a252b 9765 /* VEX_LEN_0F3A62_P_2 */
c0f3af97 9766 {
ec6f095a 9767 { "vpcmpistrm", { XM, EXx, Ib }, 0 },
c0f3af97
L
9768 },
9769
592a252b 9770 /* VEX_LEN_0F3A63_P_2 */
c0f3af97 9771 {
ec6f095a 9772 { "vpcmpistri", { XM, EXx, Ib }, 0 },
c0f3af97
L
9773 },
9774
592a252b 9775 /* VEX_LEN_0F3A6A_P_2 */
922d8de8 9776 {
3a2430e0 9777 { "vfmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 },
922d8de8
DR
9778 },
9779
592a252b 9780 /* VEX_LEN_0F3A6B_P_2 */
922d8de8 9781 {
3a2430e0 9782 { "vfmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 },
922d8de8
DR
9783 },
9784
592a252b 9785 /* VEX_LEN_0F3A6E_P_2 */
922d8de8 9786 {
3a2430e0 9787 { "vfmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 },
922d8de8
DR
9788 },
9789
592a252b 9790 /* VEX_LEN_0F3A6F_P_2 */
922d8de8 9791 {
3a2430e0 9792 { "vfmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 },
922d8de8
DR
9793 },
9794
592a252b 9795 /* VEX_LEN_0F3A7A_P_2 */
922d8de8 9796 {
3a2430e0 9797 { "vfnmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 },
922d8de8
DR
9798 },
9799
592a252b 9800 /* VEX_LEN_0F3A7B_P_2 */
922d8de8 9801 {
3a2430e0 9802 { "vfnmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 },
922d8de8
DR
9803 },
9804
592a252b 9805 /* VEX_LEN_0F3A7E_P_2 */
922d8de8 9806 {
3a2430e0 9807 { "vfnmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 },
922d8de8
DR
9808 },
9809
592a252b 9810 /* VEX_LEN_0F3A7F_P_2 */
922d8de8 9811 {
3a2430e0 9812 { "vfnmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 },
922d8de8
DR
9813 },
9814
592a252b 9815 /* VEX_LEN_0F3ADF_P_2 */
a5ff0eb2 9816 {
ec6f095a 9817 { "vaeskeygenassist", { XM, EXx, Ib }, 0 },
a5ff0eb2 9818 },
4c807e72 9819
6c30d220
L
9820 /* VEX_LEN_0F3AF0_P_3 */
9821 {
bf890a93 9822 { "rorxS", { Gdq, Edq, Ib }, 0 },
6c30d220
L
9823 },
9824
ff688e1f
L
9825 /* VEX_LEN_0FXOP_08_CC */
9826 {
be92cb14 9827 { "vpcomb", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9828 },
9829
9830 /* VEX_LEN_0FXOP_08_CD */
9831 {
be92cb14 9832 { "vpcomw", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9833 },
9834
9835 /* VEX_LEN_0FXOP_08_CE */
9836 {
be92cb14 9837 { "vpcomd", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9838 },
9839
9840 /* VEX_LEN_0FXOP_08_CF */
9841 {
be92cb14 9842 { "vpcomq", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9843 },
9844
9845 /* VEX_LEN_0FXOP_08_EC */
9846 {
be92cb14 9847 { "vpcomub", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9848 },
9849
9850 /* VEX_LEN_0FXOP_08_ED */
9851 {
be92cb14 9852 { "vpcomuw", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9853 },
9854
9855 /* VEX_LEN_0FXOP_08_EE */
9856 {
be92cb14 9857 { "vpcomud", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9858 },
9859
9860 /* VEX_LEN_0FXOP_08_EF */
9861 {
be92cb14 9862 { "vpcomuq", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9863 },
9864
592a252b 9865 /* VEX_LEN_0FXOP_09_80 */
5dd85c99 9866 {
bf890a93
IT
9867 { "vfrczps", { XM, EXxmm }, 0 },
9868 { "vfrczps", { XM, EXymmq }, 0 },
5dd85c99 9869 },
4c807e72 9870
592a252b 9871 /* VEX_LEN_0FXOP_09_81 */
5dd85c99 9872 {
bf890a93
IT
9873 { "vfrczpd", { XM, EXxmm }, 0 },
9874 { "vfrczpd", { XM, EXymmq }, 0 },
5dd85c99 9875 },
331d2d0d
L
9876};
9877
ad692897 9878#include "i386-dis-evex-len.h"
04e2a182 9879
9e30b8e0 9880static const struct dis386 vex_w_table[][2] = {
43234a1e
L
9881 {
9882 /* VEX_W_0F41_P_0_LEN_1 */
ab4e4ed5
AF
9883 { MOD_TABLE (MOD_VEX_W_0_0F41_P_0_LEN_1) },
9884 { MOD_TABLE (MOD_VEX_W_1_0F41_P_0_LEN_1) },
1ba585e8
IT
9885 },
9886 {
9887 /* VEX_W_0F41_P_2_LEN_1 */
ab4e4ed5
AF
9888 { MOD_TABLE (MOD_VEX_W_0_0F41_P_2_LEN_1) },
9889 { MOD_TABLE (MOD_VEX_W_1_0F41_P_2_LEN_1) }
43234a1e
L
9890 },
9891 {
9892 /* VEX_W_0F42_P_0_LEN_1 */
ab4e4ed5
AF
9893 { MOD_TABLE (MOD_VEX_W_0_0F42_P_0_LEN_1) },
9894 { MOD_TABLE (MOD_VEX_W_1_0F42_P_0_LEN_1) },
1ba585e8
IT
9895 },
9896 {
9897 /* VEX_W_0F42_P_2_LEN_1 */
ab4e4ed5
AF
9898 { MOD_TABLE (MOD_VEX_W_0_0F42_P_2_LEN_1) },
9899 { MOD_TABLE (MOD_VEX_W_1_0F42_P_2_LEN_1) },
43234a1e
L
9900 },
9901 {
9902 /* VEX_W_0F44_P_0_LEN_0 */
ab4e4ed5
AF
9903 { MOD_TABLE (MOD_VEX_W_0_0F44_P_0_LEN_1) },
9904 { MOD_TABLE (MOD_VEX_W_1_0F44_P_0_LEN_1) },
1ba585e8
IT
9905 },
9906 {
9907 /* VEX_W_0F44_P_2_LEN_0 */
ab4e4ed5
AF
9908 { MOD_TABLE (MOD_VEX_W_0_0F44_P_2_LEN_1) },
9909 { MOD_TABLE (MOD_VEX_W_1_0F44_P_2_LEN_1) },
43234a1e
L
9910 },
9911 {
ec6f095a
L
9912 /* VEX_W_0F45_P_0_LEN_1 */
9913 { MOD_TABLE (MOD_VEX_W_0_0F45_P_0_LEN_1) },
9914 { MOD_TABLE (MOD_VEX_W_1_0F45_P_0_LEN_1) },
9e30b8e0
L
9915 },
9916 {
ec6f095a
L
9917 /* VEX_W_0F45_P_2_LEN_1 */
9918 { MOD_TABLE (MOD_VEX_W_0_0F45_P_2_LEN_1) },
9919 { MOD_TABLE (MOD_VEX_W_1_0F45_P_2_LEN_1) },
9e30b8e0
L
9920 },
9921 {
ec6f095a
L
9922 /* VEX_W_0F46_P_0_LEN_1 */
9923 { MOD_TABLE (MOD_VEX_W_0_0F46_P_0_LEN_1) },
9924 { MOD_TABLE (MOD_VEX_W_1_0F46_P_0_LEN_1) },
9e30b8e0
L
9925 },
9926 {
ec6f095a
L
9927 /* VEX_W_0F46_P_2_LEN_1 */
9928 { MOD_TABLE (MOD_VEX_W_0_0F46_P_2_LEN_1) },
9929 { MOD_TABLE (MOD_VEX_W_1_0F46_P_2_LEN_1) },
9e30b8e0
L
9930 },
9931 {
ec6f095a
L
9932 /* VEX_W_0F47_P_0_LEN_1 */
9933 { MOD_TABLE (MOD_VEX_W_0_0F47_P_0_LEN_1) },
9934 { MOD_TABLE (MOD_VEX_W_1_0F47_P_0_LEN_1) },
9e30b8e0
L
9935 },
9936 {
ec6f095a
L
9937 /* VEX_W_0F47_P_2_LEN_1 */
9938 { MOD_TABLE (MOD_VEX_W_0_0F47_P_2_LEN_1) },
9939 { MOD_TABLE (MOD_VEX_W_1_0F47_P_2_LEN_1) },
9e30b8e0
L
9940 },
9941 {
ec6f095a
L
9942 /* VEX_W_0F4A_P_0_LEN_1 */
9943 { MOD_TABLE (MOD_VEX_W_0_0F4A_P_0_LEN_1) },
9944 { MOD_TABLE (MOD_VEX_W_1_0F4A_P_0_LEN_1) },
9e30b8e0
L
9945 },
9946 {
ec6f095a
L
9947 /* VEX_W_0F4A_P_2_LEN_1 */
9948 { MOD_TABLE (MOD_VEX_W_0_0F4A_P_2_LEN_1) },
9949 { MOD_TABLE (MOD_VEX_W_1_0F4A_P_2_LEN_1) },
9e30b8e0
L
9950 },
9951 {
ec6f095a
L
9952 /* VEX_W_0F4B_P_0_LEN_1 */
9953 { MOD_TABLE (MOD_VEX_W_0_0F4B_P_0_LEN_1) },
9954 { MOD_TABLE (MOD_VEX_W_1_0F4B_P_0_LEN_1) },
9e30b8e0
L
9955 },
9956 {
ec6f095a
L
9957 /* VEX_W_0F4B_P_2_LEN_1 */
9958 { MOD_TABLE (MOD_VEX_W_0_0F4B_P_2_LEN_1) },
9e30b8e0
L
9959 },
9960 {
ec6f095a
L
9961 /* VEX_W_0F90_P_0_LEN_0 */
9962 { "kmovw", { MaskG, MaskE }, 0 },
9963 { "kmovq", { MaskG, MaskE }, 0 },
9e30b8e0
L
9964 },
9965 {
ec6f095a
L
9966 /* VEX_W_0F90_P_2_LEN_0 */
9967 { "kmovb", { MaskG, MaskBDE }, 0 },
9968 { "kmovd", { MaskG, MaskBDE }, 0 },
9e30b8e0
L
9969 },
9970 {
ec6f095a
L
9971 /* VEX_W_0F91_P_0_LEN_0 */
9972 { MOD_TABLE (MOD_VEX_W_0_0F91_P_0_LEN_0) },
9973 { MOD_TABLE (MOD_VEX_W_1_0F91_P_0_LEN_0) },
9e30b8e0
L
9974 },
9975 {
ec6f095a
L
9976 /* VEX_W_0F91_P_2_LEN_0 */
9977 { MOD_TABLE (MOD_VEX_W_0_0F91_P_2_LEN_0) },
9978 { MOD_TABLE (MOD_VEX_W_1_0F91_P_2_LEN_0) },
9e30b8e0
L
9979 },
9980 {
ec6f095a
L
9981 /* VEX_W_0F92_P_0_LEN_0 */
9982 { MOD_TABLE (MOD_VEX_W_0_0F92_P_0_LEN_0) },
9e30b8e0
L
9983 },
9984 {
ec6f095a
L
9985 /* VEX_W_0F92_P_2_LEN_0 */
9986 { MOD_TABLE (MOD_VEX_W_0_0F92_P_2_LEN_0) },
9e30b8e0 9987 },
9e30b8e0 9988 {
ec6f095a
L
9989 /* VEX_W_0F93_P_0_LEN_0 */
9990 { MOD_TABLE (MOD_VEX_W_0_0F93_P_0_LEN_0) },
9e30b8e0
L
9991 },
9992 {
ec6f095a
L
9993 /* VEX_W_0F93_P_2_LEN_0 */
9994 { MOD_TABLE (MOD_VEX_W_0_0F93_P_2_LEN_0) },
9e30b8e0 9995 },
9e30b8e0 9996 {
ec6f095a
L
9997 /* VEX_W_0F98_P_0_LEN_0 */
9998 { MOD_TABLE (MOD_VEX_W_0_0F98_P_0_LEN_0) },
9999 { MOD_TABLE (MOD_VEX_W_1_0F98_P_0_LEN_0) },
9e30b8e0
L
10000 },
10001 {
ec6f095a
L
10002 /* VEX_W_0F98_P_2_LEN_0 */
10003 { MOD_TABLE (MOD_VEX_W_0_0F98_P_2_LEN_0) },
10004 { MOD_TABLE (MOD_VEX_W_1_0F98_P_2_LEN_0) },
9e30b8e0
L
10005 },
10006 {
ec6f095a
L
10007 /* VEX_W_0F99_P_0_LEN_0 */
10008 { MOD_TABLE (MOD_VEX_W_0_0F99_P_0_LEN_0) },
10009 { MOD_TABLE (MOD_VEX_W_1_0F99_P_0_LEN_0) },
9e30b8e0
L
10010 },
10011 {
ec6f095a
L
10012 /* VEX_W_0F99_P_2_LEN_0 */
10013 { MOD_TABLE (MOD_VEX_W_0_0F99_P_2_LEN_0) },
10014 { MOD_TABLE (MOD_VEX_W_1_0F99_P_2_LEN_0) },
9e30b8e0 10015 },
9e30b8e0 10016 {
592a252b 10017 /* VEX_W_0F380C_P_2 */
bf890a93 10018 { "vpermilps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10019 },
10020 {
592a252b 10021 /* VEX_W_0F380D_P_2 */
bf890a93 10022 { "vpermilpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10023 },
10024 {
592a252b 10025 /* VEX_W_0F380E_P_2 */
bf890a93 10026 { "vtestps", { XM, EXx }, 0 },
9e30b8e0
L
10027 },
10028 {
592a252b 10029 /* VEX_W_0F380F_P_2 */
bf890a93 10030 { "vtestpd", { XM, EXx }, 0 },
9e30b8e0 10031 },
6c30d220
L
10032 {
10033 /* VEX_W_0F3816_P_2 */
bf890a93 10034 { "vpermps", { XM, Vex, EXx }, 0 },
6c30d220 10035 },
bcf2684f 10036 {
6c30d220 10037 /* VEX_W_0F3818_P_2 */
bf890a93 10038 { "vbroadcastss", { XM, EXxmm_md }, 0 },
bcf2684f 10039 },
9e30b8e0 10040 {
6c30d220 10041 /* VEX_W_0F3819_P_2 */
bf890a93 10042 { "vbroadcastsd", { XM, EXxmm_mq }, 0 },
9e30b8e0
L
10043 },
10044 {
592a252b 10045 /* VEX_W_0F381A_P_2_M_0 */
bf890a93 10046 { "vbroadcastf128", { XM, Mxmm }, 0 },
9e30b8e0 10047 },
53aa04a0 10048 {
592a252b 10049 /* VEX_W_0F382C_P_2_M_0 */
bf890a93 10050 { "vmaskmovps", { XM, Vex, Mx }, 0 },
53aa04a0
L
10051 },
10052 {
592a252b 10053 /* VEX_W_0F382D_P_2_M_0 */
bf890a93 10054 { "vmaskmovpd", { XM, Vex, Mx }, 0 },
53aa04a0
L
10055 },
10056 {
592a252b 10057 /* VEX_W_0F382E_P_2_M_0 */
bf890a93 10058 { "vmaskmovps", { Mx, Vex, XM }, 0 },
53aa04a0
L
10059 },
10060 {
592a252b 10061 /* VEX_W_0F382F_P_2_M_0 */
bf890a93 10062 { "vmaskmovpd", { Mx, Vex, XM }, 0 },
53aa04a0 10063 },
6c30d220
L
10064 {
10065 /* VEX_W_0F3836_P_2 */
bf890a93 10066 { "vpermd", { XM, Vex, EXx }, 0 },
9e30b8e0 10067 },
6c30d220
L
10068 {
10069 /* VEX_W_0F3846_P_2 */
bf890a93 10070 { "vpsravd", { XM, Vex, EXx }, 0 },
6c30d220
L
10071 },
10072 {
10073 /* VEX_W_0F3858_P_2 */
bf890a93 10074 { "vpbroadcastd", { XM, EXxmm_md }, 0 },
6c30d220
L
10075 },
10076 {
10077 /* VEX_W_0F3859_P_2 */
bf890a93 10078 { "vpbroadcastq", { XM, EXxmm_mq }, 0 },
6c30d220
L
10079 },
10080 {
10081 /* VEX_W_0F385A_P_2_M_0 */
bf890a93 10082 { "vbroadcasti128", { XM, Mxmm }, 0 },
6c30d220
L
10083 },
10084 {
10085 /* VEX_W_0F3878_P_2 */
bf890a93 10086 { "vpbroadcastb", { XM, EXxmm_mb }, 0 },
6c30d220
L
10087 },
10088 {
10089 /* VEX_W_0F3879_P_2 */
bf890a93 10090 { "vpbroadcastw", { XM, EXxmm_mw }, 0 },
6c30d220 10091 },
48521003
IT
10092 {
10093 /* VEX_W_0F38CF_P_2 */
10094 { "vgf2p8mulb", { XM, Vex, EXx }, 0 },
10095 },
6c30d220
L
10096 {
10097 /* VEX_W_0F3A00_P_2 */
10098 { Bad_Opcode },
bf890a93 10099 { "vpermq", { XM, EXx, Ib }, 0 },
6c30d220
L
10100 },
10101 {
10102 /* VEX_W_0F3A01_P_2 */
10103 { Bad_Opcode },
bf890a93 10104 { "vpermpd", { XM, EXx, Ib }, 0 },
6c30d220
L
10105 },
10106 {
10107 /* VEX_W_0F3A02_P_2 */
bf890a93 10108 { "vpblendd", { XM, Vex, EXx, Ib }, 0 },
6c30d220 10109 },
9e30b8e0 10110 {
592a252b 10111 /* VEX_W_0F3A04_P_2 */
bf890a93 10112 { "vpermilps", { XM, EXx, Ib }, 0 },
9e30b8e0
L
10113 },
10114 {
592a252b 10115 /* VEX_W_0F3A05_P_2 */
bf890a93 10116 { "vpermilpd", { XM, EXx, Ib }, 0 },
9e30b8e0
L
10117 },
10118 {
592a252b 10119 /* VEX_W_0F3A06_P_2 */
bf890a93 10120 { "vperm2f128", { XM, Vex256, EXx, Ib }, 0 },
9e30b8e0 10121 },
9e30b8e0 10122 {
592a252b 10123 /* VEX_W_0F3A18_P_2 */
bf890a93 10124 { "vinsertf128", { XM, Vex256, EXxmm, Ib }, 0 },
9e30b8e0
L
10125 },
10126 {
592a252b 10127 /* VEX_W_0F3A19_P_2 */
bf890a93 10128 { "vextractf128", { EXxmm, XM, Ib }, 0 },
9e30b8e0 10129 },
43234a1e 10130 {
1ba585e8 10131 /* VEX_W_0F3A30_P_2_LEN_0 */
ab4e4ed5
AF
10132 { MOD_TABLE (MOD_VEX_W_0_0F3A30_P_2_LEN_0) },
10133 { MOD_TABLE (MOD_VEX_W_1_0F3A30_P_2_LEN_0) },
43234a1e
L
10134 },
10135 {
1ba585e8 10136 /* VEX_W_0F3A31_P_2_LEN_0 */
ab4e4ed5
AF
10137 { MOD_TABLE (MOD_VEX_W_0_0F3A31_P_2_LEN_0) },
10138 { MOD_TABLE (MOD_VEX_W_1_0F3A31_P_2_LEN_0) },
1ba585e8
IT
10139 },
10140 {
10141 /* VEX_W_0F3A32_P_2_LEN_0 */
ab4e4ed5
AF
10142 { MOD_TABLE (MOD_VEX_W_0_0F3A32_P_2_LEN_0) },
10143 { MOD_TABLE (MOD_VEX_W_1_0F3A32_P_2_LEN_0) },
43234a1e 10144 },
1ba585e8
IT
10145 {
10146 /* VEX_W_0F3A33_P_2_LEN_0 */
ab4e4ed5
AF
10147 { MOD_TABLE (MOD_VEX_W_0_0F3A33_P_2_LEN_0) },
10148 { MOD_TABLE (MOD_VEX_W_1_0F3A33_P_2_LEN_0) },
1ba585e8 10149 },
6c30d220
L
10150 {
10151 /* VEX_W_0F3A38_P_2 */
bf890a93 10152 { "vinserti128", { XM, Vex256, EXxmm, Ib }, 0 },
6c30d220
L
10153 },
10154 {
10155 /* VEX_W_0F3A39_P_2 */
bf890a93 10156 { "vextracti128", { EXxmm, XM, Ib }, 0 },
6c30d220 10157 },
6c30d220
L
10158 {
10159 /* VEX_W_0F3A46_P_2 */
bf890a93 10160 { "vperm2i128", { XM, Vex256, EXx, Ib }, 0 },
6c30d220 10161 },
a683cc34 10162 {
592a252b 10163 /* VEX_W_0F3A48_P_2 */
bf890a93
IT
10164 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
10165 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
a683cc34
SP
10166 },
10167 {
592a252b 10168 /* VEX_W_0F3A49_P_2 */
bf890a93
IT
10169 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
10170 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
a683cc34 10171 },
9e30b8e0 10172 {
592a252b 10173 /* VEX_W_0F3A4A_P_2 */
bf890a93 10174 { "vblendvps", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0
L
10175 },
10176 {
592a252b 10177 /* VEX_W_0F3A4B_P_2 */
bf890a93 10178 { "vblendvpd", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0
L
10179 },
10180 {
592a252b 10181 /* VEX_W_0F3A4C_P_2 */
bf890a93 10182 { "vpblendvb", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0 10183 },
48521003
IT
10184 {
10185 /* VEX_W_0F3ACE_P_2 */
10186 { Bad_Opcode },
10187 { "vgf2p8affineqb", { XM, Vex, EXx, Ib }, 0 },
10188 },
10189 {
10190 /* VEX_W_0F3ACF_P_2 */
10191 { Bad_Opcode },
10192 { "vgf2p8affineinvqb", { XM, Vex, EXx, Ib }, 0 },
10193 },
ad692897
L
10194
10195#include "i386-dis-evex-w.h"
9e30b8e0
L
10196};
10197
10198static const struct dis386 mod_table[][2] = {
10199 {
10200 /* MOD_8D */
bf890a93 10201 { "leaS", { Gv, M }, 0 },
9e30b8e0 10202 },
42164a71
L
10203 {
10204 /* MOD_C6_REG_7 */
10205 { Bad_Opcode },
10206 { RM_TABLE (RM_C6_REG_7) },
10207 },
10208 {
10209 /* MOD_C7_REG_7 */
10210 { Bad_Opcode },
10211 { RM_TABLE (RM_C7_REG_7) },
10212 },
4a357820
MZ
10213 {
10214 /* MOD_FF_REG_3 */
a72d2af2 10215 { "Jcall^", { indirEp }, 0 },
4a357820
MZ
10216 },
10217 {
10218 /* MOD_FF_REG_5 */
a72d2af2 10219 { "Jjmp^", { indirEp }, 0 },
4a357820 10220 },
9e30b8e0
L
10221 {
10222 /* MOD_0F01_REG_0 */
10223 { X86_64_TABLE (X86_64_0F01_REG_0) },
10224 { RM_TABLE (RM_0F01_REG_0) },
10225 },
10226 {
10227 /* MOD_0F01_REG_1 */
10228 { X86_64_TABLE (X86_64_0F01_REG_1) },
10229 { RM_TABLE (RM_0F01_REG_1) },
10230 },
10231 {
10232 /* MOD_0F01_REG_2 */
10233 { X86_64_TABLE (X86_64_0F01_REG_2) },
10234 { RM_TABLE (RM_0F01_REG_2) },
10235 },
10236 {
10237 /* MOD_0F01_REG_3 */
10238 { X86_64_TABLE (X86_64_0F01_REG_3) },
10239 { RM_TABLE (RM_0F01_REG_3) },
10240 },
8eab4136
L
10241 {
10242 /* MOD_0F01_REG_5 */
f8687e93
JB
10243 { PREFIX_TABLE (PREFIX_0F01_REG_5_MOD_0) },
10244 { RM_TABLE (RM_0F01_REG_5_MOD_3) },
8eab4136 10245 },
9e30b8e0
L
10246 {
10247 /* MOD_0F01_REG_7 */
bf890a93 10248 { "invlpg", { Mb }, 0 },
f8687e93 10249 { RM_TABLE (RM_0F01_REG_7_MOD_3) },
9e30b8e0
L
10250 },
10251 {
10252 /* MOD_0F12_PREFIX_0 */
507bd325
L
10253 { "movlps", { XM, EXq }, PREFIX_OPCODE },
10254 { "movhlps", { XM, EXq }, PREFIX_OPCODE },
9e30b8e0
L
10255 },
10256 {
10257 /* MOD_0F13 */
507bd325 10258 { "movlpX", { EXq, XM }, PREFIX_OPCODE },
9e30b8e0
L
10259 },
10260 {
10261 /* MOD_0F16_PREFIX_0 */
bf890a93
IT
10262 { "movhps", { XM, EXq }, 0 },
10263 { "movlhps", { XM, EXq }, 0 },
9e30b8e0
L
10264 },
10265 {
10266 /* MOD_0F17 */
507bd325 10267 { "movhpX", { EXq, XM }, PREFIX_OPCODE },
9e30b8e0
L
10268 },
10269 {
10270 /* MOD_0F18_REG_0 */
bf890a93 10271 { "prefetchnta", { Mb }, 0 },
9e30b8e0
L
10272 },
10273 {
10274 /* MOD_0F18_REG_1 */
bf890a93 10275 { "prefetcht0", { Mb }, 0 },
9e30b8e0
L
10276 },
10277 {
10278 /* MOD_0F18_REG_2 */
bf890a93 10279 { "prefetcht1", { Mb }, 0 },
9e30b8e0
L
10280 },
10281 {
10282 /* MOD_0F18_REG_3 */
bf890a93 10283 { "prefetcht2", { Mb }, 0 },
9e30b8e0 10284 },
d7189fa5
RM
10285 {
10286 /* MOD_0F18_REG_4 */
bf890a93 10287 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
10288 },
10289 {
10290 /* MOD_0F18_REG_5 */
bf890a93 10291 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
10292 },
10293 {
10294 /* MOD_0F18_REG_6 */
bf890a93 10295 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
10296 },
10297 {
10298 /* MOD_0F18_REG_7 */
bf890a93 10299 { "nop/reserved", { Mb }, 0 },
d7189fa5 10300 },
7e8b059b
L
10301 {
10302 /* MOD_0F1A_PREFIX_0 */
d276ec69 10303 { "bndldx", { Gbnd, Mv_bnd }, 0 },
bf890a93 10304 { "nopQ", { Ev }, 0 },
7e8b059b
L
10305 },
10306 {
10307 /* MOD_0F1B_PREFIX_0 */
d276ec69 10308 { "bndstx", { Mv_bnd, Gbnd }, 0 },
bf890a93 10309 { "nopQ", { Ev }, 0 },
7e8b059b
L
10310 },
10311 {
10312 /* MOD_0F1B_PREFIX_1 */
d276ec69 10313 { "bndmk", { Gbnd, Mv_bnd }, 0 },
bf890a93 10314 { "nopQ", { Ev }, 0 },
7e8b059b 10315 },
c48935d7
IT
10316 {
10317 /* MOD_0F1C_PREFIX_0 */
f8687e93 10318 { REG_TABLE (REG_0F1C_P_0_MOD_0) },
c48935d7
IT
10319 { "nopQ", { Ev }, 0 },
10320 },
603555e5
L
10321 {
10322 /* MOD_0F1E_PREFIX_1 */
10323 { "nopQ", { Ev }, 0 },
f8687e93 10324 { REG_TABLE (REG_0F1E_P_1_MOD_3) },
603555e5 10325 },
b844680a 10326 {
92fddf8e 10327 /* MOD_0F24 */
7bb15c6f 10328 { Bad_Opcode },
bf890a93 10329 { "movL", { Rd, Td }, 0 },
b844680a
L
10330 },
10331 {
92fddf8e 10332 /* MOD_0F26 */
592d1631 10333 { Bad_Opcode },
bf890a93 10334 { "movL", { Td, Rd }, 0 },
b844680a 10335 },
75c135a8
L
10336 {
10337 /* MOD_0F2B_PREFIX_0 */
507bd325 10338 {"movntps", { Mx, XM }, PREFIX_OPCODE },
75c135a8
L
10339 },
10340 {
10341 /* MOD_0F2B_PREFIX_1 */
507bd325 10342 {"movntss", { Md, XM }, PREFIX_OPCODE },
75c135a8
L
10343 },
10344 {
10345 /* MOD_0F2B_PREFIX_2 */
507bd325 10346 {"movntpd", { Mx, XM }, PREFIX_OPCODE },
75c135a8
L
10347 },
10348 {
10349 /* MOD_0F2B_PREFIX_3 */
507bd325 10350 {"movntsd", { Mq, XM }, PREFIX_OPCODE },
75c135a8
L
10351 },
10352 {
10353 /* MOD_0F51 */
592d1631 10354 { Bad_Opcode },
507bd325 10355 { "movmskpX", { Gdq, XS }, PREFIX_OPCODE },
75c135a8 10356 },
b844680a 10357 {
1ceb70f8 10358 /* MOD_0F71_REG_2 */
592d1631 10359 { Bad_Opcode },
bf890a93 10360 { "psrlw", { MS, Ib }, 0 },
b844680a
L
10361 },
10362 {
1ceb70f8 10363 /* MOD_0F71_REG_4 */
592d1631 10364 { Bad_Opcode },
bf890a93 10365 { "psraw", { MS, Ib }, 0 },
b844680a
L
10366 },
10367 {
1ceb70f8 10368 /* MOD_0F71_REG_6 */
592d1631 10369 { Bad_Opcode },
bf890a93 10370 { "psllw", { MS, Ib }, 0 },
b844680a
L
10371 },
10372 {
1ceb70f8 10373 /* MOD_0F72_REG_2 */
592d1631 10374 { Bad_Opcode },
bf890a93 10375 { "psrld", { MS, Ib }, 0 },
b844680a
L
10376 },
10377 {
1ceb70f8 10378 /* MOD_0F72_REG_4 */
592d1631 10379 { Bad_Opcode },
bf890a93 10380 { "psrad", { MS, Ib }, 0 },
b844680a
L
10381 },
10382 {
1ceb70f8 10383 /* MOD_0F72_REG_6 */
592d1631 10384 { Bad_Opcode },
bf890a93 10385 { "pslld", { MS, Ib }, 0 },
b844680a
L
10386 },
10387 {
1ceb70f8 10388 /* MOD_0F73_REG_2 */
592d1631 10389 { Bad_Opcode },
bf890a93 10390 { "psrlq", { MS, Ib }, 0 },
b844680a
L
10391 },
10392 {
1ceb70f8 10393 /* MOD_0F73_REG_3 */
592d1631 10394 { Bad_Opcode },
c0f3af97
L
10395 { PREFIX_TABLE (PREFIX_0F73_REG_3) },
10396 },
10397 {
10398 /* MOD_0F73_REG_6 */
592d1631 10399 { Bad_Opcode },
bf890a93 10400 { "psllq", { MS, Ib }, 0 },
c0f3af97
L
10401 },
10402 {
10403 /* MOD_0F73_REG_7 */
592d1631 10404 { Bad_Opcode },
c0f3af97
L
10405 { PREFIX_TABLE (PREFIX_0F73_REG_7) },
10406 },
10407 {
10408 /* MOD_0FAE_REG_0 */
bf890a93 10409 { "fxsave", { FXSAVE }, 0 },
f8687e93 10410 { PREFIX_TABLE (PREFIX_0FAE_REG_0_MOD_3) },
c0f3af97
L
10411 },
10412 {
10413 /* MOD_0FAE_REG_1 */
bf890a93 10414 { "fxrstor", { FXSAVE }, 0 },
f8687e93 10415 { PREFIX_TABLE (PREFIX_0FAE_REG_1_MOD_3) },
c0f3af97
L
10416 },
10417 {
10418 /* MOD_0FAE_REG_2 */
bf890a93 10419 { "ldmxcsr", { Md }, 0 },
f8687e93 10420 { PREFIX_TABLE (PREFIX_0FAE_REG_2_MOD_3) },
c0f3af97
L
10421 },
10422 {
10423 /* MOD_0FAE_REG_3 */
bf890a93 10424 { "stmxcsr", { Md }, 0 },
f8687e93 10425 { PREFIX_TABLE (PREFIX_0FAE_REG_3_MOD_3) },
c0f3af97
L
10426 },
10427 {
10428 /* MOD_0FAE_REG_4 */
f8687e93
JB
10429 { PREFIX_TABLE (PREFIX_0FAE_REG_4_MOD_0) },
10430 { PREFIX_TABLE (PREFIX_0FAE_REG_4_MOD_3) },
c0f3af97
L
10431 },
10432 {
10433 /* MOD_0FAE_REG_5 */
f8687e93
JB
10434 { PREFIX_TABLE (PREFIX_0FAE_REG_5_MOD_0) },
10435 { PREFIX_TABLE (PREFIX_0FAE_REG_5_MOD_3) },
c0f3af97
L
10436 },
10437 {
10438 /* MOD_0FAE_REG_6 */
f8687e93
JB
10439 { PREFIX_TABLE (PREFIX_0FAE_REG_6_MOD_0) },
10440 { PREFIX_TABLE (PREFIX_0FAE_REG_6_MOD_3) },
c0f3af97
L
10441 },
10442 {
10443 /* MOD_0FAE_REG_7 */
f8687e93
JB
10444 { PREFIX_TABLE (PREFIX_0FAE_REG_7_MOD_0) },
10445 { RM_TABLE (RM_0FAE_REG_7_MOD_3) },
c0f3af97
L
10446 },
10447 {
10448 /* MOD_0FB2 */
bf890a93 10449 { "lssS", { Gv, Mp }, 0 },
c0f3af97
L
10450 },
10451 {
10452 /* MOD_0FB4 */
bf890a93 10453 { "lfsS", { Gv, Mp }, 0 },
c0f3af97
L
10454 },
10455 {
10456 /* MOD_0FB5 */
bf890a93 10457 { "lgsS", { Gv, Mp }, 0 },
c0f3af97 10458 },
a8484f96
L
10459 {
10460 /* MOD_0FC3 */
f8687e93 10461 { PREFIX_TABLE (PREFIX_0FC3_MOD_0) },
a8484f96 10462 },
963f3586
IT
10463 {
10464 /* MOD_0FC7_REG_3 */
a8484f96 10465 { "xrstors", { FXSAVE }, 0 },
963f3586
IT
10466 },
10467 {
10468 /* MOD_0FC7_REG_4 */
bf890a93 10469 { "xsavec", { FXSAVE }, 0 },
963f3586
IT
10470 },
10471 {
10472 /* MOD_0FC7_REG_5 */
bf890a93 10473 { "xsaves", { FXSAVE }, 0 },
963f3586 10474 },
c0f3af97
L
10475 {
10476 /* MOD_0FC7_REG_6 */
f8687e93
JB
10477 { PREFIX_TABLE (PREFIX_0FC7_REG_6_MOD_0) },
10478 { PREFIX_TABLE (PREFIX_0FC7_REG_6_MOD_3) }
c0f3af97
L
10479 },
10480 {
10481 /* MOD_0FC7_REG_7 */
bf890a93 10482 { "vmptrst", { Mq }, 0 },
f8687e93 10483 { PREFIX_TABLE (PREFIX_0FC7_REG_7_MOD_3) }
c0f3af97
L
10484 },
10485 {
10486 /* MOD_0FD7 */
592d1631 10487 { Bad_Opcode },
bf890a93 10488 { "pmovmskb", { Gdq, MS }, 0 },
c0f3af97
L
10489 },
10490 {
10491 /* MOD_0FE7_PREFIX_2 */
bf890a93 10492 { "movntdq", { Mx, XM }, 0 },
c0f3af97
L
10493 },
10494 {
10495 /* MOD_0FF0_PREFIX_3 */
bf890a93 10496 { "lddqu", { XM, M }, 0 },
c0f3af97
L
10497 },
10498 {
10499 /* MOD_0F382A_PREFIX_2 */
bf890a93 10500 { "movntdqa", { XM, Mx }, 0 },
c0f3af97 10501 },
603555e5
L
10502 {
10503 /* MOD_0F38F5_PREFIX_2 */
10504 { "wrussK", { M, Gdq }, PREFIX_OPCODE },
10505 },
10506 {
10507 /* MOD_0F38F6_PREFIX_0 */
10508 { "wrssK", { M, Gdq }, PREFIX_OPCODE },
10509 },
5d79adc4
L
10510 {
10511 /* MOD_0F38F8_PREFIX_1 */
10512 { "enqcmds", { Gva, M }, PREFIX_OPCODE },
10513 },
c0a30a9f
L
10514 {
10515 /* MOD_0F38F8_PREFIX_2 */
10516 { "movdir64b", { Gva, M }, PREFIX_OPCODE },
10517 },
5d79adc4
L
10518 {
10519 /* MOD_0F38F8_PREFIX_3 */
10520 { "enqcmd", { Gva, M }, PREFIX_OPCODE },
10521 },
c0a30a9f
L
10522 {
10523 /* MOD_0F38F9_PREFIX_0 */
10524 { "movdiri", { Em, Gv }, PREFIX_OPCODE },
10525 },
c0f3af97
L
10526 {
10527 /* MOD_62_32BIT */
bf890a93 10528 { "bound{S|}", { Gv, Ma }, 0 },
43234a1e 10529 { EVEX_TABLE (EVEX_0F) },
c0f3af97
L
10530 },
10531 {
10532 /* MOD_C4_32BIT */
bf890a93 10533 { "lesS", { Gv, Mp }, 0 },
c0f3af97
L
10534 { VEX_C4_TABLE (VEX_0F) },
10535 },
10536 {
10537 /* MOD_C5_32BIT */
bf890a93 10538 { "ldsS", { Gv, Mp }, 0 },
c0f3af97
L
10539 { VEX_C5_TABLE (VEX_0F) },
10540 },
10541 {
592a252b
L
10542 /* MOD_VEX_0F12_PREFIX_0 */
10543 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_0) },
10544 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_1) },
c0f3af97
L
10545 },
10546 {
592a252b
L
10547 /* MOD_VEX_0F13 */
10548 { VEX_LEN_TABLE (VEX_LEN_0F13_M_0) },
c0f3af97
L
10549 },
10550 {
592a252b
L
10551 /* MOD_VEX_0F16_PREFIX_0 */
10552 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_0) },
10553 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_1) },
c0f3af97
L
10554 },
10555 {
592a252b
L
10556 /* MOD_VEX_0F17 */
10557 { VEX_LEN_TABLE (VEX_LEN_0F17_M_0) },
c0f3af97
L
10558 },
10559 {
592a252b 10560 /* MOD_VEX_0F2B */
ec6f095a 10561 { "vmovntpX", { Mx, XM }, 0 },
c0f3af97 10562 },
ab4e4ed5
AF
10563 {
10564 /* MOD_VEX_W_0_0F41_P_0_LEN_1 */
10565 { Bad_Opcode },
10566 { "kandw", { MaskG, MaskVex, MaskR }, 0 },
10567 },
10568 {
10569 /* MOD_VEX_W_1_0F41_P_0_LEN_1 */
10570 { Bad_Opcode },
10571 { "kandq", { MaskG, MaskVex, MaskR }, 0 },
10572 },
10573 {
10574 /* MOD_VEX_W_0_0F41_P_2_LEN_1 */
10575 { Bad_Opcode },
10576 { "kandb", { MaskG, MaskVex, MaskR }, 0 },
10577 },
10578 {
10579 /* MOD_VEX_W_1_0F41_P_2_LEN_1 */
10580 { Bad_Opcode },
10581 { "kandd", { MaskG, MaskVex, MaskR }, 0 },
10582 },
10583 {
10584 /* MOD_VEX_W_0_0F42_P_0_LEN_1 */
10585 { Bad_Opcode },
10586 { "kandnw", { MaskG, MaskVex, MaskR }, 0 },
10587 },
10588 {
10589 /* MOD_VEX_W_1_0F42_P_0_LEN_1 */
10590 { Bad_Opcode },
10591 { "kandnq", { MaskG, MaskVex, MaskR }, 0 },
10592 },
10593 {
10594 /* MOD_VEX_W_0_0F42_P_2_LEN_1 */
10595 { Bad_Opcode },
10596 { "kandnb", { MaskG, MaskVex, MaskR }, 0 },
10597 },
10598 {
10599 /* MOD_VEX_W_1_0F42_P_2_LEN_1 */
10600 { Bad_Opcode },
10601 { "kandnd", { MaskG, MaskVex, MaskR }, 0 },
10602 },
10603 {
10604 /* MOD_VEX_W_0_0F44_P_0_LEN_0 */
10605 { Bad_Opcode },
10606 { "knotw", { MaskG, MaskR }, 0 },
10607 },
10608 {
10609 /* MOD_VEX_W_1_0F44_P_0_LEN_0 */
10610 { Bad_Opcode },
10611 { "knotq", { MaskG, MaskR }, 0 },
10612 },
10613 {
10614 /* MOD_VEX_W_0_0F44_P_2_LEN_0 */
10615 { Bad_Opcode },
10616 { "knotb", { MaskG, MaskR }, 0 },
10617 },
10618 {
10619 /* MOD_VEX_W_1_0F44_P_2_LEN_0 */
10620 { Bad_Opcode },
10621 { "knotd", { MaskG, MaskR }, 0 },
10622 },
10623 {
10624 /* MOD_VEX_W_0_0F45_P_0_LEN_1 */
10625 { Bad_Opcode },
10626 { "korw", { MaskG, MaskVex, MaskR }, 0 },
10627 },
10628 {
10629 /* MOD_VEX_W_1_0F45_P_0_LEN_1 */
10630 { Bad_Opcode },
10631 { "korq", { MaskG, MaskVex, MaskR }, 0 },
10632 },
10633 {
10634 /* MOD_VEX_W_0_0F45_P_2_LEN_1 */
10635 { Bad_Opcode },
10636 { "korb", { MaskG, MaskVex, MaskR }, 0 },
10637 },
10638 {
10639 /* MOD_VEX_W_1_0F45_P_2_LEN_1 */
10640 { Bad_Opcode },
10641 { "kord", { MaskG, MaskVex, MaskR }, 0 },
10642 },
10643 {
10644 /* MOD_VEX_W_0_0F46_P_0_LEN_1 */
10645 { Bad_Opcode },
10646 { "kxnorw", { MaskG, MaskVex, MaskR }, 0 },
10647 },
10648 {
10649 /* MOD_VEX_W_1_0F46_P_0_LEN_1 */
10650 { Bad_Opcode },
10651 { "kxnorq", { MaskG, MaskVex, MaskR }, 0 },
10652 },
10653 {
10654 /* MOD_VEX_W_0_0F46_P_2_LEN_1 */
10655 { Bad_Opcode },
10656 { "kxnorb", { MaskG, MaskVex, MaskR }, 0 },
10657 },
10658 {
10659 /* MOD_VEX_W_1_0F46_P_2_LEN_1 */
10660 { Bad_Opcode },
10661 { "kxnord", { MaskG, MaskVex, MaskR }, 0 },
10662 },
10663 {
10664 /* MOD_VEX_W_0_0F47_P_0_LEN_1 */
10665 { Bad_Opcode },
10666 { "kxorw", { MaskG, MaskVex, MaskR }, 0 },
10667 },
10668 {
10669 /* MOD_VEX_W_1_0F47_P_0_LEN_1 */
10670 { Bad_Opcode },
10671 { "kxorq", { MaskG, MaskVex, MaskR }, 0 },
10672 },
10673 {
10674 /* MOD_VEX_W_0_0F47_P_2_LEN_1 */
10675 { Bad_Opcode },
10676 { "kxorb", { MaskG, MaskVex, MaskR }, 0 },
10677 },
10678 {
10679 /* MOD_VEX_W_1_0F47_P_2_LEN_1 */
10680 { Bad_Opcode },
10681 { "kxord", { MaskG, MaskVex, MaskR }, 0 },
10682 },
10683 {
10684 /* MOD_VEX_W_0_0F4A_P_0_LEN_1 */
10685 { Bad_Opcode },
10686 { "kaddw", { MaskG, MaskVex, MaskR }, 0 },
10687 },
10688 {
10689 /* MOD_VEX_W_1_0F4A_P_0_LEN_1 */
10690 { Bad_Opcode },
10691 { "kaddq", { MaskG, MaskVex, MaskR }, 0 },
10692 },
10693 {
10694 /* MOD_VEX_W_0_0F4A_P_2_LEN_1 */
10695 { Bad_Opcode },
10696 { "kaddb", { MaskG, MaskVex, MaskR }, 0 },
10697 },
10698 {
10699 /* MOD_VEX_W_1_0F4A_P_2_LEN_1 */
10700 { Bad_Opcode },
10701 { "kaddd", { MaskG, MaskVex, MaskR }, 0 },
10702 },
10703 {
10704 /* MOD_VEX_W_0_0F4B_P_0_LEN_1 */
10705 { Bad_Opcode },
10706 { "kunpckwd", { MaskG, MaskVex, MaskR }, 0 },
10707 },
10708 {
10709 /* MOD_VEX_W_1_0F4B_P_0_LEN_1 */
10710 { Bad_Opcode },
10711 { "kunpckdq", { MaskG, MaskVex, MaskR }, 0 },
10712 },
10713 {
10714 /* MOD_VEX_W_0_0F4B_P_2_LEN_1 */
10715 { Bad_Opcode },
10716 { "kunpckbw", { MaskG, MaskVex, MaskR }, 0 },
10717 },
c0f3af97 10718 {
592a252b 10719 /* MOD_VEX_0F50 */
592d1631 10720 { Bad_Opcode },
ec6f095a 10721 { "vmovmskpX", { Gdq, XS }, 0 },
c0f3af97
L
10722 },
10723 {
592a252b 10724 /* MOD_VEX_0F71_REG_2 */
592d1631 10725 { Bad_Opcode },
592a252b 10726 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_2) },
b844680a
L
10727 },
10728 {
592a252b 10729 /* MOD_VEX_0F71_REG_4 */
592d1631 10730 { Bad_Opcode },
592a252b 10731 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_4) },
b844680a
L
10732 },
10733 {
592a252b 10734 /* MOD_VEX_0F71_REG_6 */
592d1631 10735 { Bad_Opcode },
592a252b 10736 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_6) },
b844680a
L
10737 },
10738 {
592a252b 10739 /* MOD_VEX_0F72_REG_2 */
592d1631 10740 { Bad_Opcode },
592a252b 10741 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_2) },
b844680a 10742 },
d8faab4e 10743 {
592a252b 10744 /* MOD_VEX_0F72_REG_4 */
592d1631 10745 { Bad_Opcode },
592a252b 10746 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_4) },
d8faab4e
L
10747 },
10748 {
592a252b 10749 /* MOD_VEX_0F72_REG_6 */
592d1631 10750 { Bad_Opcode },
592a252b 10751 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_6) },
d8faab4e 10752 },
876d4bfa 10753 {
592a252b 10754 /* MOD_VEX_0F73_REG_2 */
592d1631 10755 { Bad_Opcode },
592a252b 10756 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_2) },
876d4bfa
L
10757 },
10758 {
592a252b 10759 /* MOD_VEX_0F73_REG_3 */
592d1631 10760 { Bad_Opcode },
592a252b 10761 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_3) },
475a2301
L
10762 },
10763 {
592a252b 10764 /* MOD_VEX_0F73_REG_6 */
592d1631 10765 { Bad_Opcode },
592a252b 10766 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_6) },
876d4bfa
L
10767 },
10768 {
592a252b 10769 /* MOD_VEX_0F73_REG_7 */
592d1631 10770 { Bad_Opcode },
592a252b 10771 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_7) },
876d4bfa 10772 },
ab4e4ed5
AF
10773 {
10774 /* MOD_VEX_W_0_0F91_P_0_LEN_0 */
10775 { "kmovw", { Ew, MaskG }, 0 },
10776 { Bad_Opcode },
10777 },
10778 {
10779 /* MOD_VEX_W_0_0F91_P_0_LEN_0 */
10780 { "kmovq", { Eq, MaskG }, 0 },
10781 { Bad_Opcode },
10782 },
10783 {
10784 /* MOD_VEX_W_0_0F91_P_2_LEN_0 */
10785 { "kmovb", { Eb, MaskG }, 0 },
10786 { Bad_Opcode },
10787 },
10788 {
10789 /* MOD_VEX_W_0_0F91_P_2_LEN_0 */
10790 { "kmovd", { Ed, MaskG }, 0 },
10791 { Bad_Opcode },
10792 },
10793 {
10794 /* MOD_VEX_W_0_0F92_P_0_LEN_0 */
10795 { Bad_Opcode },
10796 { "kmovw", { MaskG, Rdq }, 0 },
10797 },
10798 {
10799 /* MOD_VEX_W_0_0F92_P_2_LEN_0 */
10800 { Bad_Opcode },
10801 { "kmovb", { MaskG, Rdq }, 0 },
10802 },
10803 {
58a211d2 10804 /* MOD_VEX_0F92_P_3_LEN_0 */
ab4e4ed5 10805 { Bad_Opcode },
58a211d2 10806 { "kmovK", { MaskG, Rdq }, 0 },
ab4e4ed5
AF
10807 },
10808 {
10809 /* MOD_VEX_W_0_0F93_P_0_LEN_0 */
10810 { Bad_Opcode },
10811 { "kmovw", { Gdq, MaskR }, 0 },
10812 },
10813 {
10814 /* MOD_VEX_W_0_0F93_P_2_LEN_0 */
10815 { Bad_Opcode },
10816 { "kmovb", { Gdq, MaskR }, 0 },
10817 },
10818 {
58a211d2 10819 /* MOD_VEX_0F93_P_3_LEN_0 */
ab4e4ed5 10820 { Bad_Opcode },
58a211d2 10821 { "kmovK", { Gdq, MaskR }, 0 },
ab4e4ed5
AF
10822 },
10823 {
10824 /* MOD_VEX_W_0_0F98_P_0_LEN_0 */
10825 { Bad_Opcode },
10826 { "kortestw", { MaskG, MaskR }, 0 },
10827 },
10828 {
10829 /* MOD_VEX_W_1_0F98_P_0_LEN_0 */
10830 { Bad_Opcode },
10831 { "kortestq", { MaskG, MaskR }, 0 },
10832 },
10833 {
10834 /* MOD_VEX_W_0_0F98_P_2_LEN_0 */
10835 { Bad_Opcode },
10836 { "kortestb", { MaskG, MaskR }, 0 },
10837 },
10838 {
10839 /* MOD_VEX_W_1_0F98_P_2_LEN_0 */
10840 { Bad_Opcode },
10841 { "kortestd", { MaskG, MaskR }, 0 },
10842 },
10843 {
10844 /* MOD_VEX_W_0_0F99_P_0_LEN_0 */
10845 { Bad_Opcode },
10846 { "ktestw", { MaskG, MaskR }, 0 },
10847 },
10848 {
10849 /* MOD_VEX_W_1_0F99_P_0_LEN_0 */
10850 { Bad_Opcode },
10851 { "ktestq", { MaskG, MaskR }, 0 },
10852 },
10853 {
10854 /* MOD_VEX_W_0_0F99_P_2_LEN_0 */
10855 { Bad_Opcode },
10856 { "ktestb", { MaskG, MaskR }, 0 },
10857 },
10858 {
10859 /* MOD_VEX_W_1_0F99_P_2_LEN_0 */
10860 { Bad_Opcode },
10861 { "ktestd", { MaskG, MaskR }, 0 },
10862 },
876d4bfa 10863 {
592a252b
L
10864 /* MOD_VEX_0FAE_REG_2 */
10865 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_2_M_0) },
876d4bfa 10866 },
bbedc832 10867 {
592a252b
L
10868 /* MOD_VEX_0FAE_REG_3 */
10869 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_3_M_0) },
bbedc832 10870 },
144c41d9 10871 {
592a252b 10872 /* MOD_VEX_0FD7_PREFIX_2 */
592d1631 10873 { Bad_Opcode },
ec6f095a 10874 { "vpmovmskb", { Gdq, XS }, 0 },
144c41d9 10875 },
1afd85e3 10876 {
592a252b 10877 /* MOD_VEX_0FE7_PREFIX_2 */
ec6f095a 10878 { "vmovntdq", { Mx, XM }, 0 },
1afd85e3
L
10879 },
10880 {
592a252b 10881 /* MOD_VEX_0FF0_PREFIX_3 */
ec6f095a 10882 { "vlddqu", { XM, M }, 0 },
92fddf8e 10883 },
75c135a8 10884 {
592a252b
L
10885 /* MOD_VEX_0F381A_PREFIX_2 */
10886 { VEX_LEN_TABLE (VEX_LEN_0F381A_P_2_M_0) },
75c135a8 10887 },
1afd85e3 10888 {
592a252b 10889 /* MOD_VEX_0F382A_PREFIX_2 */
ec6f095a 10890 { "vmovntdqa", { XM, Mx }, 0 },
1afd85e3 10891 },
75c135a8 10892 {
592a252b
L
10893 /* MOD_VEX_0F382C_PREFIX_2 */
10894 { VEX_W_TABLE (VEX_W_0F382C_P_2_M_0) },
75c135a8 10895 },
1afd85e3 10896 {
592a252b
L
10897 /* MOD_VEX_0F382D_PREFIX_2 */
10898 { VEX_W_TABLE (VEX_W_0F382D_P_2_M_0) },
1afd85e3
L
10899 },
10900 {
592a252b
L
10901 /* MOD_VEX_0F382E_PREFIX_2 */
10902 { VEX_W_TABLE (VEX_W_0F382E_P_2_M_0) },
1afd85e3
L
10903 },
10904 {
592a252b
L
10905 /* MOD_VEX_0F382F_PREFIX_2 */
10906 { VEX_W_TABLE (VEX_W_0F382F_P_2_M_0) },
1afd85e3 10907 },
6c30d220
L
10908 {
10909 /* MOD_VEX_0F385A_PREFIX_2 */
10910 { VEX_LEN_TABLE (VEX_LEN_0F385A_P_2_M_0) },
10911 },
10912 {
10913 /* MOD_VEX_0F388C_PREFIX_2 */
bf890a93 10914 { "vpmaskmov%LW", { XM, Vex, Mx }, 0 },
6c30d220
L
10915 },
10916 {
10917 /* MOD_VEX_0F388E_PREFIX_2 */
bf890a93 10918 { "vpmaskmov%LW", { Mx, Vex, XM }, 0 },
6c30d220 10919 },
ab4e4ed5
AF
10920 {
10921 /* MOD_VEX_W_0_0F3A30_P_2_LEN_0 */
10922 { Bad_Opcode },
10923 { "kshiftrb", { MaskG, MaskR, Ib }, 0 },
10924 },
10925 {
10926 /* MOD_VEX_W_1_0F3A30_P_2_LEN_0 */
10927 { Bad_Opcode },
10928 { "kshiftrw", { MaskG, MaskR, Ib }, 0 },
10929 },
10930 {
10931 /* MOD_VEX_W_0_0F3A31_P_2_LEN_0 */
10932 { Bad_Opcode },
10933 { "kshiftrd", { MaskG, MaskR, Ib }, 0 },
10934 },
10935 {
10936 /* MOD_VEX_W_1_0F3A31_P_2_LEN_0 */
10937 { Bad_Opcode },
10938 { "kshiftrq", { MaskG, MaskR, Ib }, 0 },
10939 },
10940 {
10941 /* MOD_VEX_W_0_0F3A32_P_2_LEN_0 */
10942 { Bad_Opcode },
10943 { "kshiftlb", { MaskG, MaskR, Ib }, 0 },
10944 },
10945 {
10946 /* MOD_VEX_W_1_0F3A32_P_2_LEN_0 */
10947 { Bad_Opcode },
10948 { "kshiftlw", { MaskG, MaskR, Ib }, 0 },
10949 },
10950 {
10951 /* MOD_VEX_W_0_0F3A33_P_2_LEN_0 */
10952 { Bad_Opcode },
10953 { "kshiftld", { MaskG, MaskR, Ib }, 0 },
10954 },
10955 {
10956 /* MOD_VEX_W_1_0F3A33_P_2_LEN_0 */
10957 { Bad_Opcode },
10958 { "kshiftlq", { MaskG, MaskR, Ib }, 0 },
10959 },
ad692897
L
10960
10961#include "i386-dis-evex-mod.h"
b844680a
L
10962};
10963
1ceb70f8 10964static const struct dis386 rm_table[][8] = {
42164a71
L
10965 {
10966 /* RM_C6_REG_7 */
bf890a93 10967 { "xabort", { Skip_MODRM, Ib }, 0 },
42164a71
L
10968 },
10969 {
10970 /* RM_C7_REG_7 */
bf890a93 10971 { "xbeginT", { Skip_MODRM, Jv }, 0 },
42164a71 10972 },
b844680a 10973 {
1ceb70f8 10974 /* RM_0F01_REG_0 */
a4e78aa5 10975 { "enclv", { Skip_MODRM }, 0 },
bf890a93
IT
10976 { "vmcall", { Skip_MODRM }, 0 },
10977 { "vmlaunch", { Skip_MODRM }, 0 },
10978 { "vmresume", { Skip_MODRM }, 0 },
10979 { "vmxoff", { Skip_MODRM }, 0 },
be3a8dca 10980 { "pconfig", { Skip_MODRM }, 0 },
b844680a
L
10981 },
10982 {
1ceb70f8 10983 /* RM_0F01_REG_1 */
bf890a93
IT
10984 { "monitor", { { OP_Monitor, 0 } }, 0 },
10985 { "mwait", { { OP_Mwait, 0 } }, 0 },
10986 { "clac", { Skip_MODRM }, 0 },
10987 { "stac", { Skip_MODRM }, 0 },
2cf200a4
IT
10988 { Bad_Opcode },
10989 { Bad_Opcode },
10990 { Bad_Opcode },
bf890a93 10991 { "encls", { Skip_MODRM }, 0 },
b844680a 10992 },
475a2301
L
10993 {
10994 /* RM_0F01_REG_2 */
bf890a93
IT
10995 { "xgetbv", { Skip_MODRM }, 0 },
10996 { "xsetbv", { Skip_MODRM }, 0 },
8729a6f6
L
10997 { Bad_Opcode },
10998 { Bad_Opcode },
bf890a93
IT
10999 { "vmfunc", { Skip_MODRM }, 0 },
11000 { "xend", { Skip_MODRM }, 0 },
11001 { "xtest", { Skip_MODRM }, 0 },
11002 { "enclu", { Skip_MODRM }, 0 },
475a2301 11003 },
b844680a 11004 {
1ceb70f8 11005 /* RM_0F01_REG_3 */
bf890a93
IT
11006 { "vmrun", { Skip_MODRM }, 0 },
11007 { "vmmcall", { Skip_MODRM }, 0 },
11008 { "vmload", { Skip_MODRM }, 0 },
11009 { "vmsave", { Skip_MODRM }, 0 },
11010 { "stgi", { Skip_MODRM }, 0 },
11011 { "clgi", { Skip_MODRM }, 0 },
11012 { "skinit", { Skip_MODRM }, 0 },
11013 { "invlpga", { Skip_MODRM }, 0 },
4e7d34a6 11014 },
8eab4136 11015 {
f8687e93
JB
11016 /* RM_0F01_REG_5_MOD_3 */
11017 { PREFIX_TABLE (PREFIX_0F01_REG_5_MOD_3_RM_0) },
8eab4136 11018 { Bad_Opcode },
f8687e93 11019 { PREFIX_TABLE (PREFIX_0F01_REG_5_MOD_3_RM_2) },
8eab4136
L
11020 { Bad_Opcode },
11021 { Bad_Opcode },
11022 { Bad_Opcode },
11023 { "rdpkru", { Skip_MODRM }, 0 },
11024 { "wrpkru", { Skip_MODRM }, 0 },
11025 },
4e7d34a6 11026 {
f8687e93 11027 /* RM_0F01_REG_7_MOD_3 */
bf890a93
IT
11028 { "swapgs", { Skip_MODRM }, 0 },
11029 { "rdtscp", { Skip_MODRM }, 0 },
267b8516
JB
11030 { PREFIX_TABLE (PREFIX_0F01_REG_7_MOD_3_RM_2) },
11031 { PREFIX_TABLE (PREFIX_0F01_REG_7_MOD_3_RM_3) },
bf890a93 11032 { "clzero", { Skip_MODRM }, 0 },
b844680a 11033 },
603555e5 11034 {
f8687e93 11035 /* RM_0F1E_P_1_MOD_3_REG_7 */
603555e5
L
11036 { "nopQ", { Ev }, 0 },
11037 { "nopQ", { Ev }, 0 },
11038 { "endbr64", { Skip_MODRM }, PREFIX_OPCODE },
11039 { "endbr32", { Skip_MODRM }, PREFIX_OPCODE },
11040 { "nopQ", { Ev }, 0 },
11041 { "nopQ", { Ev }, 0 },
11042 { "nopQ", { Ev }, 0 },
11043 { "nopQ", { Ev }, 0 },
11044 },
b844680a 11045 {
f8687e93 11046 /* RM_0FAE_REG_6_MOD_3 */
bf890a93 11047 { "mfence", { Skip_MODRM }, 0 },
b844680a 11048 },
bbedc832 11049 {
f8687e93 11050 /* RM_0FAE_REG_7_MOD_3 */
b5cefcca
L
11051 { "sfence", { Skip_MODRM }, 0 },
11052
144c41d9 11053 },
b844680a
L
11054};
11055
c608c12e
AM
11056#define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")
11057
f16cd0d5
L
11058/* We use the high bit to indicate different name for the same
11059 prefix. */
f16cd0d5 11060#define REP_PREFIX (0xf3 | 0x100)
42164a71
L
11061#define XACQUIRE_PREFIX (0xf2 | 0x200)
11062#define XRELEASE_PREFIX (0xf3 | 0x400)
7e8b059b 11063#define BND_PREFIX (0xf2 | 0x400)
04ef582a 11064#define NOTRACK_PREFIX (0x3e | 0x100)
f16cd0d5
L
11065
11066static int
26ca5450 11067ckprefix (void)
252b5132 11068{
f16cd0d5 11069 int newrex, i, length;
52b15da3 11070 rex = 0;
c0f3af97 11071 rex_ignored = 0;
252b5132 11072 prefixes = 0;
7d421014 11073 used_prefixes = 0;
52b15da3 11074 rex_used = 0;
f16cd0d5
L
11075 last_lock_prefix = -1;
11076 last_repz_prefix = -1;
11077 last_repnz_prefix = -1;
11078 last_data_prefix = -1;
11079 last_addr_prefix = -1;
11080 last_rex_prefix = -1;
11081 last_seg_prefix = -1;
d9949a36 11082 fwait_prefix = -1;
285ca992 11083 active_seg_prefix = 0;
f310f33d
L
11084 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
11085 all_prefixes[i] = 0;
11086 i = 0;
f16cd0d5
L
11087 length = 0;
11088 /* The maximum instruction length is 15bytes. */
11089 while (length < MAX_CODE_LENGTH - 1)
252b5132
RH
11090 {
11091 FETCH_DATA (the_info, codep + 1);
52b15da3 11092 newrex = 0;
252b5132
RH
11093 switch (*codep)
11094 {
52b15da3
JH
11095 /* REX prefixes family. */
11096 case 0x40:
11097 case 0x41:
11098 case 0x42:
11099 case 0x43:
11100 case 0x44:
11101 case 0x45:
11102 case 0x46:
11103 case 0x47:
11104 case 0x48:
11105 case 0x49:
11106 case 0x4a:
11107 case 0x4b:
11108 case 0x4c:
11109 case 0x4d:
11110 case 0x4e:
11111 case 0x4f:
f16cd0d5
L
11112 if (address_mode == mode_64bit)
11113 newrex = *codep;
11114 else
11115 return 1;
11116 last_rex_prefix = i;
52b15da3 11117 break;
252b5132
RH
11118 case 0xf3:
11119 prefixes |= PREFIX_REPZ;
f16cd0d5 11120 last_repz_prefix = i;
252b5132
RH
11121 break;
11122 case 0xf2:
11123 prefixes |= PREFIX_REPNZ;
f16cd0d5 11124 last_repnz_prefix = i;
252b5132
RH
11125 break;
11126 case 0xf0:
11127 prefixes |= PREFIX_LOCK;
f16cd0d5 11128 last_lock_prefix = i;
252b5132
RH
11129 break;
11130 case 0x2e:
11131 prefixes |= PREFIX_CS;
f16cd0d5 11132 last_seg_prefix = i;
285ca992 11133 active_seg_prefix = PREFIX_CS;
252b5132
RH
11134 break;
11135 case 0x36:
11136 prefixes |= PREFIX_SS;
f16cd0d5 11137 last_seg_prefix = i;
285ca992 11138 active_seg_prefix = PREFIX_SS;
252b5132
RH
11139 break;
11140 case 0x3e:
11141 prefixes |= PREFIX_DS;
f16cd0d5 11142 last_seg_prefix = i;
285ca992 11143 active_seg_prefix = PREFIX_DS;
252b5132
RH
11144 break;
11145 case 0x26:
11146 prefixes |= PREFIX_ES;
f16cd0d5 11147 last_seg_prefix = i;
285ca992 11148 active_seg_prefix = PREFIX_ES;
252b5132
RH
11149 break;
11150 case 0x64:
11151 prefixes |= PREFIX_FS;
f16cd0d5 11152 last_seg_prefix = i;
285ca992 11153 active_seg_prefix = PREFIX_FS;
252b5132
RH
11154 break;
11155 case 0x65:
11156 prefixes |= PREFIX_GS;
f16cd0d5 11157 last_seg_prefix = i;
285ca992 11158 active_seg_prefix = PREFIX_GS;
252b5132
RH
11159 break;
11160 case 0x66:
11161 prefixes |= PREFIX_DATA;
f16cd0d5 11162 last_data_prefix = i;
252b5132
RH
11163 break;
11164 case 0x67:
11165 prefixes |= PREFIX_ADDR;
f16cd0d5 11166 last_addr_prefix = i;
252b5132 11167 break;
5076851f 11168 case FWAIT_OPCODE:
252b5132
RH
11169 /* fwait is really an instruction. If there are prefixes
11170 before the fwait, they belong to the fwait, *not* to the
11171 following instruction. */
d9949a36 11172 fwait_prefix = i;
3e7d61b2 11173 if (prefixes || rex)
252b5132
RH
11174 {
11175 prefixes |= PREFIX_FWAIT;
11176 codep++;
6c067bbb
RM
11177 /* This ensures that the previous REX prefixes are noticed
11178 as unused prefixes, as in the return case below. */
11179 rex_used = rex;
f16cd0d5 11180 return 1;
252b5132
RH
11181 }
11182 prefixes = PREFIX_FWAIT;
11183 break;
11184 default:
f16cd0d5 11185 return 1;
252b5132 11186 }
52b15da3
JH
11187 /* Rex is ignored when followed by another prefix. */
11188 if (rex)
11189 {
3e7d61b2 11190 rex_used = rex;
f16cd0d5 11191 return 1;
52b15da3 11192 }
f16cd0d5 11193 if (*codep != FWAIT_OPCODE)
4e9ac44a 11194 all_prefixes[i++] = *codep;
52b15da3 11195 rex = newrex;
252b5132 11196 codep++;
f16cd0d5
L
11197 length++;
11198 }
11199 return 0;
11200}
11201
7d421014
ILT
11202/* Return the name of the prefix byte PREF, or NULL if PREF is not a
11203 prefix byte. */
11204
11205static const char *
26ca5450 11206prefix_name (int pref, int sizeflag)
7d421014 11207{
0003779b
L
11208 static const char *rexes [16] =
11209 {
11210 "rex", /* 0x40 */
11211 "rex.B", /* 0x41 */
11212 "rex.X", /* 0x42 */
11213 "rex.XB", /* 0x43 */
11214 "rex.R", /* 0x44 */
11215 "rex.RB", /* 0x45 */
11216 "rex.RX", /* 0x46 */
11217 "rex.RXB", /* 0x47 */
11218 "rex.W", /* 0x48 */
11219 "rex.WB", /* 0x49 */
11220 "rex.WX", /* 0x4a */
11221 "rex.WXB", /* 0x4b */
11222 "rex.WR", /* 0x4c */
11223 "rex.WRB", /* 0x4d */
11224 "rex.WRX", /* 0x4e */
11225 "rex.WRXB", /* 0x4f */
11226 };
11227
7d421014
ILT
11228 switch (pref)
11229 {
52b15da3
JH
11230 /* REX prefixes family. */
11231 case 0x40:
52b15da3 11232 case 0x41:
52b15da3 11233 case 0x42:
52b15da3 11234 case 0x43:
52b15da3 11235 case 0x44:
52b15da3 11236 case 0x45:
52b15da3 11237 case 0x46:
52b15da3 11238 case 0x47:
52b15da3 11239 case 0x48:
52b15da3 11240 case 0x49:
52b15da3 11241 case 0x4a:
52b15da3 11242 case 0x4b:
52b15da3 11243 case 0x4c:
52b15da3 11244 case 0x4d:
52b15da3 11245 case 0x4e:
52b15da3 11246 case 0x4f:
0003779b 11247 return rexes [pref - 0x40];
7d421014
ILT
11248 case 0xf3:
11249 return "repz";
11250 case 0xf2:
11251 return "repnz";
11252 case 0xf0:
11253 return "lock";
11254 case 0x2e:
11255 return "cs";
11256 case 0x36:
11257 return "ss";
11258 case 0x3e:
11259 return "ds";
11260 case 0x26:
11261 return "es";
11262 case 0x64:
11263 return "fs";
11264 case 0x65:
11265 return "gs";
11266 case 0x66:
11267 return (sizeflag & DFLAG) ? "data16" : "data32";
11268 case 0x67:
cb712a9e 11269 if (address_mode == mode_64bit)
db6eb5be 11270 return (sizeflag & AFLAG) ? "addr32" : "addr64";
c1a64871 11271 else
2888cb7a 11272 return (sizeflag & AFLAG) ? "addr16" : "addr32";
7d421014
ILT
11273 case FWAIT_OPCODE:
11274 return "fwait";
f16cd0d5
L
11275 case REP_PREFIX:
11276 return "rep";
42164a71
L
11277 case XACQUIRE_PREFIX:
11278 return "xacquire";
11279 case XRELEASE_PREFIX:
11280 return "xrelease";
7e8b059b
L
11281 case BND_PREFIX:
11282 return "bnd";
04ef582a
L
11283 case NOTRACK_PREFIX:
11284 return "notrack";
7d421014
ILT
11285 default:
11286 return NULL;
11287 }
11288}
11289
ce518a5f
L
11290static char op_out[MAX_OPERANDS][100];
11291static int op_ad, op_index[MAX_OPERANDS];
1d9f512f 11292static int two_source_ops;
ce518a5f
L
11293static bfd_vma op_address[MAX_OPERANDS];
11294static bfd_vma op_riprel[MAX_OPERANDS];
52b15da3 11295static bfd_vma start_pc;
ce518a5f 11296
252b5132
RH
11297/*
11298 * On the 386's of 1988, the maximum length of an instruction is 15 bytes.
11299 * (see topic "Redundant prefixes" in the "Differences from 8086"
11300 * section of the "Virtual 8086 Mode" chapter.)
11301 * 'pc' should be the address of this instruction, it will
11302 * be used to print the target address if this is a relative jump or call
11303 * The function returns the length of this instruction in bytes.
11304 */
11305
252b5132 11306static char intel_syntax;
9d141669 11307static char intel_mnemonic = !SYSV386_COMPAT;
252b5132
RH
11308static char open_char;
11309static char close_char;
11310static char separator_char;
11311static char scale_char;
11312
5db04b09
L
11313enum x86_64_isa
11314{
11315 amd64 = 0,
11316 intel64
11317};
11318
11319static enum x86_64_isa isa64;
11320
e396998b
AM
11321/* Here for backwards compatibility. When gdb stops using
11322 print_insn_i386_att and print_insn_i386_intel these functions can
11323 disappear, and print_insn_i386 be merged into print_insn. */
252b5132 11324int
26ca5450 11325print_insn_i386_att (bfd_vma pc, disassemble_info *info)
252b5132
RH
11326{
11327 intel_syntax = 0;
e396998b
AM
11328
11329 return print_insn (pc, info);
252b5132
RH
11330}
11331
11332int
26ca5450 11333print_insn_i386_intel (bfd_vma pc, disassemble_info *info)
252b5132
RH
11334{
11335 intel_syntax = 1;
e396998b
AM
11336
11337 return print_insn (pc, info);
252b5132
RH
11338}
11339
e396998b 11340int
26ca5450 11341print_insn_i386 (bfd_vma pc, disassemble_info *info)
e396998b
AM
11342{
11343 intel_syntax = -1;
11344
11345 return print_insn (pc, info);
11346}
11347
f59a29b9
L
11348void
11349print_i386_disassembler_options (FILE *stream)
11350{
11351 fprintf (stream, _("\n\
11352The following i386/x86-64 specific disassembler options are supported for use\n\
11353with the -M switch (multiple options should be separated by commas):\n"));
11354
11355 fprintf (stream, _(" x86-64 Disassemble in 64bit mode\n"));
11356 fprintf (stream, _(" i386 Disassemble in 32bit mode\n"));
11357 fprintf (stream, _(" i8086 Disassemble in 16bit mode\n"));
11358 fprintf (stream, _(" att Display instruction in AT&T syntax\n"));
11359 fprintf (stream, _(" intel Display instruction in Intel syntax\n"));
9d141669
L
11360 fprintf (stream, _(" att-mnemonic\n"
11361 " Display instruction in AT&T mnemonic\n"));
11362 fprintf (stream, _(" intel-mnemonic\n"
11363 " Display instruction in Intel mnemonic\n"));
f59a29b9
L
11364 fprintf (stream, _(" addr64 Assume 64bit address size\n"));
11365 fprintf (stream, _(" addr32 Assume 32bit address size\n"));
11366 fprintf (stream, _(" addr16 Assume 16bit address size\n"));
11367 fprintf (stream, _(" data32 Assume 32bit data size\n"));
11368 fprintf (stream, _(" data16 Assume 16bit data size\n"));
11369 fprintf (stream, _(" suffix Always display instruction suffix in AT&T syntax\n"));
5db04b09
L
11370 fprintf (stream, _(" amd64 Display instruction in AMD64 ISA\n"));
11371 fprintf (stream, _(" intel64 Display instruction in Intel64 ISA\n"));
f59a29b9
L
11372}
11373
592d1631 11374/* Bad opcode. */
bf890a93 11375static const struct dis386 bad_opcode = { "(bad)", { XX }, 0 };
592d1631 11376
b844680a
L
11377/* Get a pointer to struct dis386 with a valid name. */
11378
11379static const struct dis386 *
8bb15339 11380get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
b844680a 11381{
91d6fa6a 11382 int vindex, vex_table_index;
b844680a
L
11383
11384 if (dp->name != NULL)
11385 return dp;
11386
11387 switch (dp->op[0].bytemode)
11388 {
1ceb70f8
L
11389 case USE_REG_TABLE:
11390 dp = &reg_table[dp->op[1].bytemode][modrm.reg];
11391 break;
11392
11393 case USE_MOD_TABLE:
91d6fa6a
NC
11394 vindex = modrm.mod == 0x3 ? 1 : 0;
11395 dp = &mod_table[dp->op[1].bytemode][vindex];
1ceb70f8
L
11396 break;
11397
11398 case USE_RM_TABLE:
11399 dp = &rm_table[dp->op[1].bytemode][modrm.rm];
b844680a
L
11400 break;
11401
4e7d34a6 11402 case USE_PREFIX_TABLE:
c0f3af97 11403 if (need_vex)
b844680a 11404 {
c0f3af97
L
11405 /* The prefix in VEX is implicit. */
11406 switch (vex.prefix)
11407 {
11408 case 0:
91d6fa6a 11409 vindex = 0;
c0f3af97
L
11410 break;
11411 case REPE_PREFIX_OPCODE:
91d6fa6a 11412 vindex = 1;
c0f3af97
L
11413 break;
11414 case DATA_PREFIX_OPCODE:
91d6fa6a 11415 vindex = 2;
c0f3af97
L
11416 break;
11417 case REPNE_PREFIX_OPCODE:
91d6fa6a 11418 vindex = 3;
c0f3af97
L
11419 break;
11420 default:
11421 abort ();
11422 break;
11423 }
b844680a 11424 }
7bb15c6f 11425 else
b844680a 11426 {
285ca992
L
11427 int last_prefix = -1;
11428 int prefix = 0;
91d6fa6a 11429 vindex = 0;
285ca992
L
11430 /* We check PREFIX_REPNZ and PREFIX_REPZ before PREFIX_DATA.
11431 When there are multiple PREFIX_REPNZ and PREFIX_REPZ, the
11432 last one wins. */
11433 if ((prefixes & (PREFIX_REPZ | PREFIX_REPNZ)) != 0)
b844680a 11434 {
285ca992 11435 if (last_repz_prefix > last_repnz_prefix)
c0f3af97 11436 {
285ca992
L
11437 vindex = 1;
11438 prefix = PREFIX_REPZ;
11439 last_prefix = last_repz_prefix;
c0f3af97
L
11440 }
11441 else
b844680a 11442 {
285ca992
L
11443 vindex = 3;
11444 prefix = PREFIX_REPNZ;
11445 last_prefix = last_repnz_prefix;
b844680a 11446 }
285ca992 11447
507bd325
L
11448 /* Check if prefix should be ignored. */
11449 if ((((prefix_table[dp->op[1].bytemode][vindex].prefix_requirement
11450 & PREFIX_IGNORED) >> PREFIX_IGNORED_SHIFT)
11451 & prefix) != 0)
285ca992
L
11452 vindex = 0;
11453 }
11454
11455 if (vindex == 0 && (prefixes & PREFIX_DATA) != 0)
11456 {
11457 vindex = 2;
11458 prefix = PREFIX_DATA;
11459 last_prefix = last_data_prefix;
11460 }
11461
11462 if (vindex != 0)
11463 {
11464 used_prefixes |= prefix;
11465 all_prefixes[last_prefix] = 0;
b844680a
L
11466 }
11467 }
91d6fa6a 11468 dp = &prefix_table[dp->op[1].bytemode][vindex];
b844680a
L
11469 break;
11470
4e7d34a6 11471 case USE_X86_64_TABLE:
91d6fa6a
NC
11472 vindex = address_mode == mode_64bit ? 1 : 0;
11473 dp = &x86_64_table[dp->op[1].bytemode][vindex];
b844680a
L
11474 break;
11475
4e7d34a6 11476 case USE_3BYTE_TABLE:
8bb15339 11477 FETCH_DATA (info, codep + 2);
91d6fa6a
NC
11478 vindex = *codep++;
11479 dp = &three_byte_table[dp->op[1].bytemode][vindex];
285ca992 11480 end_codep = codep;
8bb15339
L
11481 modrm.mod = (*codep >> 6) & 3;
11482 modrm.reg = (*codep >> 3) & 7;
11483 modrm.rm = *codep & 7;
11484 break;
11485
c0f3af97
L
11486 case USE_VEX_LEN_TABLE:
11487 if (!need_vex)
11488 abort ();
11489
11490 switch (vex.length)
11491 {
11492 case 128:
91d6fa6a 11493 vindex = 0;
c0f3af97
L
11494 break;
11495 case 256:
91d6fa6a 11496 vindex = 1;
c0f3af97
L
11497 break;
11498 default:
11499 abort ();
11500 break;
11501 }
11502
91d6fa6a 11503 dp = &vex_len_table[dp->op[1].bytemode][vindex];
c0f3af97
L
11504 break;
11505
04e2a182
L
11506 case USE_EVEX_LEN_TABLE:
11507 if (!vex.evex)
11508 abort ();
11509
11510 switch (vex.length)
11511 {
11512 case 128:
11513 vindex = 0;
11514 break;
11515 case 256:
11516 vindex = 1;
11517 break;
11518 case 512:
11519 vindex = 2;
11520 break;
11521 default:
11522 abort ();
11523 break;
11524 }
11525
11526 dp = &evex_len_table[dp->op[1].bytemode][vindex];
11527 break;
11528
f88c9eb0
SP
11529 case USE_XOP_8F_TABLE:
11530 FETCH_DATA (info, codep + 3);
11531 /* All bits in the REX prefix are ignored. */
11532 rex_ignored = rex;
11533 rex = ~(*codep >> 5) & 0x7;
11534
11535 /* VEX_TABLE_INDEX is the mmmmm part of the XOP byte 1 "RCB.mmmmm". */
11536 switch ((*codep & 0x1f))
11537 {
11538 default:
f07af43e
L
11539 dp = &bad_opcode;
11540 return dp;
5dd85c99
SP
11541 case 0x8:
11542 vex_table_index = XOP_08;
11543 break;
f88c9eb0
SP
11544 case 0x9:
11545 vex_table_index = XOP_09;
11546 break;
11547 case 0xa:
11548 vex_table_index = XOP_0A;
11549 break;
11550 }
11551 codep++;
11552 vex.w = *codep & 0x80;
11553 if (vex.w && address_mode == mode_64bit)
11554 rex |= REX_W;
11555
11556 vex.register_specifier = (~(*codep >> 3)) & 0xf;
abfcb414 11557 if (address_mode != mode_64bit)
f07af43e 11558 {
abfcb414
AP
11559 /* In 16/32-bit mode REX_B is silently ignored. */
11560 rex &= ~REX_B;
f07af43e 11561 }
f88c9eb0
SP
11562
11563 vex.length = (*codep & 0x4) ? 256 : 128;
11564 switch ((*codep & 0x3))
11565 {
11566 case 0:
f88c9eb0
SP
11567 break;
11568 case 1:
11569 vex.prefix = DATA_PREFIX_OPCODE;
11570 break;
11571 case 2:
11572 vex.prefix = REPE_PREFIX_OPCODE;
11573 break;
11574 case 3:
11575 vex.prefix = REPNE_PREFIX_OPCODE;
11576 break;
11577 }
11578 need_vex = 1;
11579 need_vex_reg = 1;
11580 codep++;
91d6fa6a
NC
11581 vindex = *codep++;
11582 dp = &xop_table[vex_table_index][vindex];
c48244a5 11583
285ca992 11584 end_codep = codep;
c48244a5
SP
11585 FETCH_DATA (info, codep + 1);
11586 modrm.mod = (*codep >> 6) & 3;
11587 modrm.reg = (*codep >> 3) & 7;
11588 modrm.rm = *codep & 7;
f88c9eb0
SP
11589 break;
11590
c0f3af97 11591 case USE_VEX_C4_TABLE:
43234a1e 11592 /* VEX prefix. */
c0f3af97
L
11593 FETCH_DATA (info, codep + 3);
11594 /* All bits in the REX prefix are ignored. */
11595 rex_ignored = rex;
11596 rex = ~(*codep >> 5) & 0x7;
11597 switch ((*codep & 0x1f))
11598 {
11599 default:
f07af43e
L
11600 dp = &bad_opcode;
11601 return dp;
c0f3af97 11602 case 0x1:
f88c9eb0 11603 vex_table_index = VEX_0F;
c0f3af97
L
11604 break;
11605 case 0x2:
f88c9eb0 11606 vex_table_index = VEX_0F38;
c0f3af97
L
11607 break;
11608 case 0x3:
f88c9eb0 11609 vex_table_index = VEX_0F3A;
c0f3af97
L
11610 break;
11611 }
11612 codep++;
11613 vex.w = *codep & 0x80;
9889cbb1 11614 if (address_mode == mode_64bit)
f07af43e 11615 {
9889cbb1
L
11616 if (vex.w)
11617 rex |= REX_W;
9889cbb1
L
11618 }
11619 else
11620 {
11621 /* For the 3-byte VEX prefix in 32-bit mode, the REX_B bit
11622 is ignored, other REX bits are 0 and the highest bit in
5f847646 11623 VEX.vvvv is also ignored (but we mustn't clear it here). */
9889cbb1 11624 rex = 0;
f07af43e 11625 }
5f847646 11626 vex.register_specifier = (~(*codep >> 3)) & 0xf;
c0f3af97
L
11627 vex.length = (*codep & 0x4) ? 256 : 128;
11628 switch ((*codep & 0x3))
11629 {
11630 case 0:
c0f3af97
L
11631 break;
11632 case 1:
11633 vex.prefix = DATA_PREFIX_OPCODE;
11634 break;
11635 case 2:
11636 vex.prefix = REPE_PREFIX_OPCODE;
11637 break;
11638 case 3:
11639 vex.prefix = REPNE_PREFIX_OPCODE;
11640 break;
11641 }
11642 need_vex = 1;
11643 need_vex_reg = 1;
11644 codep++;
91d6fa6a
NC
11645 vindex = *codep++;
11646 dp = &vex_table[vex_table_index][vindex];
285ca992 11647 end_codep = codep;
53c4d625
JB
11648 /* There is no MODRM byte for VEX0F 77. */
11649 if (vex_table_index != VEX_0F || vindex != 0x77)
c0f3af97
L
11650 {
11651 FETCH_DATA (info, codep + 1);
11652 modrm.mod = (*codep >> 6) & 3;
11653 modrm.reg = (*codep >> 3) & 7;
11654 modrm.rm = *codep & 7;
11655 }
11656 break;
11657
11658 case USE_VEX_C5_TABLE:
43234a1e 11659 /* VEX prefix. */
c0f3af97
L
11660 FETCH_DATA (info, codep + 2);
11661 /* All bits in the REX prefix are ignored. */
11662 rex_ignored = rex;
11663 rex = (*codep & 0x80) ? 0 : REX_R;
11664
9889cbb1
L
11665 /* For the 2-byte VEX prefix in 32-bit mode, the highest bit in
11666 VEX.vvvv is 1. */
c0f3af97 11667 vex.register_specifier = (~(*codep >> 3)) & 0xf;
c0f3af97
L
11668 vex.length = (*codep & 0x4) ? 256 : 128;
11669 switch ((*codep & 0x3))
11670 {
11671 case 0:
c0f3af97
L
11672 break;
11673 case 1:
11674 vex.prefix = DATA_PREFIX_OPCODE;
11675 break;
11676 case 2:
11677 vex.prefix = REPE_PREFIX_OPCODE;
11678 break;
11679 case 3:
11680 vex.prefix = REPNE_PREFIX_OPCODE;
11681 break;
11682 }
11683 need_vex = 1;
11684 need_vex_reg = 1;
11685 codep++;
91d6fa6a
NC
11686 vindex = *codep++;
11687 dp = &vex_table[dp->op[1].bytemode][vindex];
285ca992 11688 end_codep = codep;
53c4d625
JB
11689 /* There is no MODRM byte for VEX 77. */
11690 if (vindex != 0x77)
c0f3af97
L
11691 {
11692 FETCH_DATA (info, codep + 1);
11693 modrm.mod = (*codep >> 6) & 3;
11694 modrm.reg = (*codep >> 3) & 7;
11695 modrm.rm = *codep & 7;
11696 }
11697 break;
11698
9e30b8e0
L
11699 case USE_VEX_W_TABLE:
11700 if (!need_vex)
11701 abort ();
11702
11703 dp = &vex_w_table[dp->op[1].bytemode][vex.w ? 1 : 0];
11704 break;
11705
43234a1e
L
11706 case USE_EVEX_TABLE:
11707 two_source_ops = 0;
11708 /* EVEX prefix. */
11709 vex.evex = 1;
11710 FETCH_DATA (info, codep + 4);
11711 /* All bits in the REX prefix are ignored. */
11712 rex_ignored = rex;
11713 /* The first byte after 0x62. */
11714 rex = ~(*codep >> 5) & 0x7;
11715 vex.r = *codep & 0x10;
11716 switch ((*codep & 0xf))
11717 {
11718 default:
11719 return &bad_opcode;
11720 case 0x1:
11721 vex_table_index = EVEX_0F;
11722 break;
11723 case 0x2:
11724 vex_table_index = EVEX_0F38;
11725 break;
11726 case 0x3:
11727 vex_table_index = EVEX_0F3A;
11728 break;
11729 }
11730
11731 /* The second byte after 0x62. */
11732 codep++;
11733 vex.w = *codep & 0x80;
11734 if (vex.w && address_mode == mode_64bit)
11735 rex |= REX_W;
11736
11737 vex.register_specifier = (~(*codep >> 3)) & 0xf;
43234a1e
L
11738
11739 /* The U bit. */
11740 if (!(*codep & 0x4))
11741 return &bad_opcode;
11742
11743 switch ((*codep & 0x3))
11744 {
11745 case 0:
43234a1e
L
11746 break;
11747 case 1:
11748 vex.prefix = DATA_PREFIX_OPCODE;
11749 break;
11750 case 2:
11751 vex.prefix = REPE_PREFIX_OPCODE;
11752 break;
11753 case 3:
11754 vex.prefix = REPNE_PREFIX_OPCODE;
11755 break;
11756 }
11757
11758 /* The third byte after 0x62. */
11759 codep++;
11760
11761 /* Remember the static rounding bits. */
11762 vex.ll = (*codep >> 5) & 3;
11763 vex.b = (*codep & 0x10) != 0;
11764
11765 vex.v = *codep & 0x8;
11766 vex.mask_register_specifier = *codep & 0x7;
11767 vex.zeroing = *codep & 0x80;
11768
5f847646
JB
11769 if (address_mode != mode_64bit)
11770 {
11771 /* In 16/32-bit mode silently ignore following bits. */
11772 rex &= ~REX_B;
11773 vex.r = 1;
11774 vex.v = 1;
11775 }
11776
43234a1e
L
11777 need_vex = 1;
11778 need_vex_reg = 1;
11779 codep++;
11780 vindex = *codep++;
11781 dp = &evex_table[vex_table_index][vindex];
285ca992 11782 end_codep = codep;
43234a1e
L
11783 FETCH_DATA (info, codep + 1);
11784 modrm.mod = (*codep >> 6) & 3;
11785 modrm.reg = (*codep >> 3) & 7;
11786 modrm.rm = *codep & 7;
11787
11788 /* Set vector length. */
11789 if (modrm.mod == 3 && vex.b)
11790 vex.length = 512;
11791 else
11792 {
11793 switch (vex.ll)
11794 {
11795 case 0x0:
11796 vex.length = 128;
11797 break;
11798 case 0x1:
11799 vex.length = 256;
11800 break;
11801 case 0x2:
11802 vex.length = 512;
11803 break;
11804 default:
11805 return &bad_opcode;
11806 }
11807 }
11808 break;
11809
592d1631
L
11810 case 0:
11811 dp = &bad_opcode;
11812 break;
11813
b844680a 11814 default:
d34b5006 11815 abort ();
b844680a
L
11816 }
11817
11818 if (dp->name != NULL)
11819 return dp;
11820 else
8bb15339 11821 return get_valid_dis386 (dp, info);
b844680a
L
11822}
11823
dfc8cf43 11824static void
55cf16e1 11825get_sib (disassemble_info *info, int sizeflag)
dfc8cf43
L
11826{
11827 /* If modrm.mod == 3, operand must be register. */
11828 if (need_modrm
55cf16e1 11829 && ((sizeflag & AFLAG) || address_mode == mode_64bit)
dfc8cf43
L
11830 && modrm.mod != 3
11831 && modrm.rm == 4)
11832 {
11833 FETCH_DATA (info, codep + 2);
11834 sib.index = (codep [1] >> 3) & 7;
11835 sib.scale = (codep [1] >> 6) & 3;
11836 sib.base = codep [1] & 7;
11837 }
11838}
11839
e396998b 11840static int
26ca5450 11841print_insn (bfd_vma pc, disassemble_info *info)
252b5132 11842{
2da11e11 11843 const struct dis386 *dp;
252b5132 11844 int i;
ce518a5f 11845 char *op_txt[MAX_OPERANDS];
252b5132 11846 int needcomma;
df18fdba 11847 int sizeflag, orig_sizeflag;
e396998b 11848 const char *p;
252b5132 11849 struct dis_private priv;
f16cd0d5 11850 int prefix_length;
252b5132 11851
d7921315
L
11852 priv.orig_sizeflag = AFLAG | DFLAG;
11853 if ((info->mach & bfd_mach_i386_i386) != 0)
cb712a9e 11854 address_mode = mode_32bit;
2da11e11 11855 else if (info->mach == bfd_mach_i386_i8086)
d7921315
L
11856 {
11857 address_mode = mode_16bit;
11858 priv.orig_sizeflag = 0;
11859 }
2da11e11 11860 else
d7921315
L
11861 address_mode = mode_64bit;
11862
11863 if (intel_syntax == (char) -1)
11864 intel_syntax = (info->mach & bfd_mach_i386_intel_syntax) != 0;
e396998b
AM
11865
11866 for (p = info->disassembler_options; p != NULL; )
11867 {
5db04b09
L
11868 if (CONST_STRNEQ (p, "amd64"))
11869 isa64 = amd64;
11870 else if (CONST_STRNEQ (p, "intel64"))
11871 isa64 = intel64;
11872 else if (CONST_STRNEQ (p, "x86-64"))
e396998b 11873 {
cb712a9e 11874 address_mode = mode_64bit;
e396998b
AM
11875 priv.orig_sizeflag = AFLAG | DFLAG;
11876 }
0112cd26 11877 else if (CONST_STRNEQ (p, "i386"))
e396998b 11878 {
cb712a9e 11879 address_mode = mode_32bit;
e396998b
AM
11880 priv.orig_sizeflag = AFLAG | DFLAG;
11881 }
0112cd26 11882 else if (CONST_STRNEQ (p, "i8086"))
e396998b 11883 {
cb712a9e 11884 address_mode = mode_16bit;
e396998b
AM
11885 priv.orig_sizeflag = 0;
11886 }
0112cd26 11887 else if (CONST_STRNEQ (p, "intel"))
e396998b
AM
11888 {
11889 intel_syntax = 1;
9d141669
L
11890 if (CONST_STRNEQ (p + 5, "-mnemonic"))
11891 intel_mnemonic = 1;
e396998b 11892 }
0112cd26 11893 else if (CONST_STRNEQ (p, "att"))
e396998b
AM
11894 {
11895 intel_syntax = 0;
9d141669
L
11896 if (CONST_STRNEQ (p + 3, "-mnemonic"))
11897 intel_mnemonic = 0;
e396998b 11898 }
0112cd26 11899 else if (CONST_STRNEQ (p, "addr"))
e396998b 11900 {
f59a29b9
L
11901 if (address_mode == mode_64bit)
11902 {
11903 if (p[4] == '3' && p[5] == '2')
11904 priv.orig_sizeflag &= ~AFLAG;
11905 else if (p[4] == '6' && p[5] == '4')
11906 priv.orig_sizeflag |= AFLAG;
11907 }
11908 else
11909 {
11910 if (p[4] == '1' && p[5] == '6')
11911 priv.orig_sizeflag &= ~AFLAG;
11912 else if (p[4] == '3' && p[5] == '2')
11913 priv.orig_sizeflag |= AFLAG;
11914 }
e396998b 11915 }
0112cd26 11916 else if (CONST_STRNEQ (p, "data"))
e396998b
AM
11917 {
11918 if (p[4] == '1' && p[5] == '6')
11919 priv.orig_sizeflag &= ~DFLAG;
11920 else if (p[4] == '3' && p[5] == '2')
11921 priv.orig_sizeflag |= DFLAG;
11922 }
0112cd26 11923 else if (CONST_STRNEQ (p, "suffix"))
e396998b
AM
11924 priv.orig_sizeflag |= SUFFIX_ALWAYS;
11925
11926 p = strchr (p, ',');
11927 if (p != NULL)
11928 p++;
11929 }
11930
c0f92bf9
L
11931 if (address_mode == mode_64bit && sizeof (bfd_vma) < 8)
11932 {
11933 (*info->fprintf_func) (info->stream,
11934 _("64-bit address is disabled"));
11935 return -1;
11936 }
11937
e396998b
AM
11938 if (intel_syntax)
11939 {
11940 names64 = intel_names64;
11941 names32 = intel_names32;
11942 names16 = intel_names16;
11943 names8 = intel_names8;
11944 names8rex = intel_names8rex;
11945 names_seg = intel_names_seg;
b9733481 11946 names_mm = intel_names_mm;
7e8b059b 11947 names_bnd = intel_names_bnd;
b9733481
L
11948 names_xmm = intel_names_xmm;
11949 names_ymm = intel_names_ymm;
43234a1e 11950 names_zmm = intel_names_zmm;
db51cc60
L
11951 index64 = intel_index64;
11952 index32 = intel_index32;
43234a1e 11953 names_mask = intel_names_mask;
e396998b
AM
11954 index16 = intel_index16;
11955 open_char = '[';
11956 close_char = ']';
11957 separator_char = '+';
11958 scale_char = '*';
11959 }
11960 else
11961 {
11962 names64 = att_names64;
11963 names32 = att_names32;
11964 names16 = att_names16;
11965 names8 = att_names8;
11966 names8rex = att_names8rex;
11967 names_seg = att_names_seg;
b9733481 11968 names_mm = att_names_mm;
7e8b059b 11969 names_bnd = att_names_bnd;
b9733481
L
11970 names_xmm = att_names_xmm;
11971 names_ymm = att_names_ymm;
43234a1e 11972 names_zmm = att_names_zmm;
db51cc60
L
11973 index64 = att_index64;
11974 index32 = att_index32;
43234a1e 11975 names_mask = att_names_mask;
e396998b
AM
11976 index16 = att_index16;
11977 open_char = '(';
11978 close_char = ')';
11979 separator_char = ',';
11980 scale_char = ',';
11981 }
2da11e11 11982
4fe53c98 11983 /* The output looks better if we put 7 bytes on a line, since that
8a9036a4
L
11984 puts most long word instructions on a single line. Use 8 bytes
11985 for Intel L1OM. */
d7921315 11986 if ((info->mach & bfd_mach_l1om) != 0)
8a9036a4
L
11987 info->bytes_per_line = 8;
11988 else
11989 info->bytes_per_line = 7;
252b5132 11990
26ca5450 11991 info->private_data = &priv;
252b5132
RH
11992 priv.max_fetched = priv.the_buffer;
11993 priv.insn_start = pc;
252b5132
RH
11994
11995 obuf[0] = 0;
ce518a5f
L
11996 for (i = 0; i < MAX_OPERANDS; ++i)
11997 {
11998 op_out[i][0] = 0;
11999 op_index[i] = -1;
12000 }
252b5132
RH
12001
12002 the_info = info;
12003 start_pc = pc;
e396998b
AM
12004 start_codep = priv.the_buffer;
12005 codep = priv.the_buffer;
252b5132 12006
8df14d78 12007 if (OPCODES_SIGSETJMP (priv.bailout) != 0)
5076851f 12008 {
7d421014
ILT
12009 const char *name;
12010
5076851f 12011 /* Getting here means we tried for data but didn't get it. That
e396998b
AM
12012 means we have an incomplete instruction of some sort. Just
12013 print the first byte as a prefix or a .byte pseudo-op. */
12014 if (codep > priv.the_buffer)
5076851f 12015 {
e396998b 12016 name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
7d421014
ILT
12017 if (name != NULL)
12018 (*info->fprintf_func) (info->stream, "%s", name);
12019 else
5076851f 12020 {
7d421014
ILT
12021 /* Just print the first byte as a .byte instruction. */
12022 (*info->fprintf_func) (info->stream, ".byte 0x%x",
e396998b 12023 (unsigned int) priv.the_buffer[0]);
5076851f 12024 }
5076851f 12025
7d421014 12026 return 1;
5076851f
ILT
12027 }
12028
12029 return -1;
12030 }
12031
52b15da3 12032 obufp = obuf;
f16cd0d5
L
12033 sizeflag = priv.orig_sizeflag;
12034
12035 if (!ckprefix () || rex_used)
12036 {
12037 /* Too many prefixes or unused REX prefixes. */
12038 for (i = 0;
f6dd4781 12039 i < (int) ARRAY_SIZE (all_prefixes) && all_prefixes[i];
f16cd0d5 12040 i++)
de882298 12041 (*info->fprintf_func) (info->stream, "%s%s",
6c067bbb 12042 i == 0 ? "" : " ",
f16cd0d5 12043 prefix_name (all_prefixes[i], sizeflag));
de882298 12044 return i;
f16cd0d5 12045 }
252b5132
RH
12046
12047 insn_codep = codep;
12048
12049 FETCH_DATA (info, codep + 1);
12050 two_source_ops = (*codep == 0x62) || (*codep == 0xc8);
12051
3e7d61b2 12052 if (((prefixes & PREFIX_FWAIT)
f16cd0d5 12053 && ((*codep < 0xd8) || (*codep > 0xdf))))
252b5132 12054 {
86a80a50 12055 /* Handle prefixes before fwait. */
d9949a36 12056 for (i = 0; i < fwait_prefix && all_prefixes[i];
86a80a50
L
12057 i++)
12058 (*info->fprintf_func) (info->stream, "%s ",
12059 prefix_name (all_prefixes[i], sizeflag));
f16cd0d5 12060 (*info->fprintf_func) (info->stream, "fwait");
86a80a50 12061 return i + 1;
252b5132
RH
12062 }
12063
252b5132
RH
12064 if (*codep == 0x0f)
12065 {
eec0f4ca 12066 unsigned char threebyte;
5f40e14d
JS
12067
12068 codep++;
12069 FETCH_DATA (info, codep + 1);
12070 threebyte = *codep;
eec0f4ca 12071 dp = &dis386_twobyte[threebyte];
252b5132 12072 need_modrm = twobyte_has_modrm[*codep];
eec0f4ca 12073 codep++;
252b5132
RH
12074 }
12075 else
12076 {
6439fc28 12077 dp = &dis386[*codep];
252b5132 12078 need_modrm = onebyte_has_modrm[*codep];
eec0f4ca 12079 codep++;
252b5132 12080 }
246c51aa 12081
df18fdba
L
12082 /* Save sizeflag for printing the extra prefixes later before updating
12083 it for mnemonic and operand processing. The prefix names depend
12084 only on the address mode. */
12085 orig_sizeflag = sizeflag;
c608c12e 12086 if (prefixes & PREFIX_ADDR)
df18fdba 12087 sizeflag ^= AFLAG;
b844680a 12088 if ((prefixes & PREFIX_DATA))
df18fdba 12089 sizeflag ^= DFLAG;
3ffd33cf 12090
285ca992 12091 end_codep = codep;
8bb15339 12092 if (need_modrm)
252b5132
RH
12093 {
12094 FETCH_DATA (info, codep + 1);
7967e09e
L
12095 modrm.mod = (*codep >> 6) & 3;
12096 modrm.reg = (*codep >> 3) & 7;
12097 modrm.rm = *codep & 7;
252b5132
RH
12098 }
12099
42d5f9c6
MS
12100 need_vex = 0;
12101 need_vex_reg = 0;
12102 vex_w_done = 0;
caf0678c 12103 memset (&vex, 0, sizeof (vex));
55b126d4 12104
ce518a5f 12105 if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE)
252b5132 12106 {
55cf16e1 12107 get_sib (info, sizeflag);
252b5132
RH
12108 dofloat (sizeflag);
12109 }
12110 else
12111 {
8bb15339 12112 dp = get_valid_dis386 (dp, info);
b844680a 12113 if (dp != NULL && putop (dp->name, sizeflag) == 0)
6c067bbb 12114 {
55cf16e1 12115 get_sib (info, sizeflag);
ce518a5f
L
12116 for (i = 0; i < MAX_OPERANDS; ++i)
12117 {
246c51aa 12118 obufp = op_out[i];
ce518a5f
L
12119 op_ad = MAX_OPERANDS - 1 - i;
12120 if (dp->op[i].rtn)
12121 (*dp->op[i].rtn) (dp->op[i].bytemode, sizeflag);
43234a1e
L
12122 /* For EVEX instruction after the last operand masking
12123 should be printed. */
12124 if (i == 0 && vex.evex)
12125 {
12126 /* Don't print {%k0}. */
12127 if (vex.mask_register_specifier)
12128 {
12129 oappend ("{");
12130 oappend (names_mask[vex.mask_register_specifier]);
12131 oappend ("}");
12132 }
12133 if (vex.zeroing)
12134 oappend ("{z}");
12135 }
ce518a5f 12136 }
6439fc28 12137 }
252b5132
RH
12138 }
12139
63c6fc6c
L
12140 /* If VEX.vvvv and EVEX.vvvv are unused, they must be all 1s, which
12141 are all 0s in inverted form. */
12142 if (need_vex && vex.register_specifier != 0)
12143 {
12144 (*info->fprintf_func) (info->stream, "(bad)");
12145 return end_codep - priv.the_buffer;
12146 }
12147
d869730d 12148 /* Check if the REX prefix is used. */
e2e6193d 12149 if (rex_ignored == 0 && (rex ^ rex_used) == 0 && last_rex_prefix >= 0)
f16cd0d5
L
12150 all_prefixes[last_rex_prefix] = 0;
12151
5e6718e4 12152 /* Check if the SEG prefix is used. */
f16cd0d5
L
12153 if ((prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS | PREFIX_ES
12154 | PREFIX_FS | PREFIX_GS)) != 0
285ca992 12155 && (used_prefixes & active_seg_prefix) != 0)
f16cd0d5
L
12156 all_prefixes[last_seg_prefix] = 0;
12157
5e6718e4 12158 /* Check if the ADDR prefix is used. */
f16cd0d5
L
12159 if ((prefixes & PREFIX_ADDR) != 0
12160 && (used_prefixes & PREFIX_ADDR) != 0)
12161 all_prefixes[last_addr_prefix] = 0;
12162
df18fdba
L
12163 /* Check if the DATA prefix is used. */
12164 if ((prefixes & PREFIX_DATA) != 0
12165 && (used_prefixes & PREFIX_DATA) != 0)
12166 all_prefixes[last_data_prefix] = 0;
f16cd0d5 12167
df18fdba 12168 /* Print the extra prefixes. */
f16cd0d5 12169 prefix_length = 0;
f310f33d 12170 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
f16cd0d5
L
12171 if (all_prefixes[i])
12172 {
12173 const char *name;
df18fdba 12174 name = prefix_name (all_prefixes[i], orig_sizeflag);
f16cd0d5
L
12175 if (name == NULL)
12176 abort ();
12177 prefix_length += strlen (name) + 1;
12178 (*info->fprintf_func) (info->stream, "%s ", name);
12179 }
b844680a 12180
285ca992
L
12181 /* If the mandatory PREFIX_REPZ/PREFIX_REPNZ/PREFIX_DATA prefix is
12182 unused, opcode is invalid. Since the PREFIX_DATA prefix may be
12183 used by putop and MMX/SSE operand and may be overriden by the
12184 PREFIX_REPZ/PREFIX_REPNZ fix, we check the PREFIX_DATA prefix
12185 separately. */
3888916d 12186 if (dp->prefix_requirement == PREFIX_OPCODE
285ca992
L
12187 && dp != &bad_opcode
12188 && (((prefixes
12189 & (PREFIX_REPZ | PREFIX_REPNZ)) != 0
12190 && (used_prefixes
12191 & (PREFIX_REPZ | PREFIX_REPNZ)) == 0)
12192 || ((((prefixes
12193 & (PREFIX_REPZ | PREFIX_REPNZ | PREFIX_DATA))
12194 == PREFIX_DATA)
12195 && (used_prefixes & PREFIX_DATA) == 0))))
12196 {
12197 (*info->fprintf_func) (info->stream, "(bad)");
12198 return end_codep - priv.the_buffer;
12199 }
12200
f16cd0d5
L
12201 /* Check maximum code length. */
12202 if ((codep - start_codep) > MAX_CODE_LENGTH)
12203 {
12204 (*info->fprintf_func) (info->stream, "(bad)");
12205 return MAX_CODE_LENGTH;
12206 }
b844680a 12207
ea397f5b 12208 obufp = mnemonicendp;
f16cd0d5 12209 for (i = strlen (obuf) + prefix_length; i < 6; i++)
252b5132
RH
12210 oappend (" ");
12211 oappend (" ");
12212 (*info->fprintf_func) (info->stream, "%s", obuf);
12213
12214 /* The enter and bound instructions are printed with operands in the same
12215 order as the intel book; everything else is printed in reverse order. */
2da11e11 12216 if (intel_syntax || two_source_ops)
252b5132 12217 {
185b1163
L
12218 bfd_vma riprel;
12219
ce518a5f 12220 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 12221 op_txt[i] = op_out[i];
246c51aa 12222
3a8547d2
JB
12223 if (intel_syntax && dp && dp->op[2].rtn == OP_Rounding
12224 && dp->op[3].rtn == OP_E && dp->op[4].rtn == NULL)
12225 {
12226 op_txt[2] = op_out[3];
12227 op_txt[3] = op_out[2];
12228 }
12229
ce518a5f
L
12230 for (i = 0; i < (MAX_OPERANDS >> 1); ++i)
12231 {
6c067bbb
RM
12232 op_ad = op_index[i];
12233 op_index[i] = op_index[MAX_OPERANDS - 1 - i];
12234 op_index[MAX_OPERANDS - 1 - i] = op_ad;
185b1163
L
12235 riprel = op_riprel[i];
12236 op_riprel[i] = op_riprel [MAX_OPERANDS - 1 - i];
12237 op_riprel[MAX_OPERANDS - 1 - i] = riprel;
ce518a5f 12238 }
252b5132
RH
12239 }
12240 else
12241 {
ce518a5f 12242 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 12243 op_txt[MAX_OPERANDS - 1 - i] = op_out[i];
050dfa73
MM
12244 }
12245
ce518a5f
L
12246 needcomma = 0;
12247 for (i = 0; i < MAX_OPERANDS; ++i)
12248 if (*op_txt[i])
12249 {
12250 if (needcomma)
12251 (*info->fprintf_func) (info->stream, ",");
12252 if (op_index[i] != -1 && !op_riprel[i])
12253 (*info->print_address_func) ((bfd_vma) op_address[op_index[i]], info);
12254 else
12255 (*info->fprintf_func) (info->stream, "%s", op_txt[i]);
12256 needcomma = 1;
12257 }
050dfa73 12258
ce518a5f 12259 for (i = 0; i < MAX_OPERANDS; i++)
52b15da3
JH
12260 if (op_index[i] != -1 && op_riprel[i])
12261 {
12262 (*info->fprintf_func) (info->stream, " # ");
4fd7268a 12263 (*info->print_address_func) ((bfd_vma) (start_pc + (codep - start_codep)
52b15da3 12264 + op_address[op_index[i]]), info);
185b1163 12265 break;
52b15da3 12266 }
e396998b 12267 return codep - priv.the_buffer;
252b5132
RH
12268}
12269
6439fc28 12270static const char *float_mem[] = {
252b5132 12271 /* d8 */
7c52e0e8
L
12272 "fadd{s|}",
12273 "fmul{s|}",
12274 "fcom{s|}",
12275 "fcomp{s|}",
12276 "fsub{s|}",
12277 "fsubr{s|}",
12278 "fdiv{s|}",
12279 "fdivr{s|}",
db6eb5be 12280 /* d9 */
7c52e0e8 12281 "fld{s|}",
252b5132 12282 "(bad)",
7c52e0e8
L
12283 "fst{s|}",
12284 "fstp{s|}",
9306ca4a 12285 "fldenvIC",
252b5132 12286 "fldcw",
9306ca4a 12287 "fNstenvIC",
252b5132
RH
12288 "fNstcw",
12289 /* da */
7c52e0e8
L
12290 "fiadd{l|}",
12291 "fimul{l|}",
12292 "ficom{l|}",
12293 "ficomp{l|}",
12294 "fisub{l|}",
12295 "fisubr{l|}",
12296 "fidiv{l|}",
12297 "fidivr{l|}",
252b5132 12298 /* db */
7c52e0e8
L
12299 "fild{l|}",
12300 "fisttp{l|}",
12301 "fist{l|}",
12302 "fistp{l|}",
252b5132 12303 "(bad)",
6439fc28 12304 "fld{t||t|}",
252b5132 12305 "(bad)",
6439fc28 12306 "fstp{t||t|}",
252b5132 12307 /* dc */
7c52e0e8
L
12308 "fadd{l|}",
12309 "fmul{l|}",
12310 "fcom{l|}",
12311 "fcomp{l|}",
12312 "fsub{l|}",
12313 "fsubr{l|}",
12314 "fdiv{l|}",
12315 "fdivr{l|}",
252b5132 12316 /* dd */
7c52e0e8
L
12317 "fld{l|}",
12318 "fisttp{ll|}",
12319 "fst{l||}",
12320 "fstp{l|}",
9306ca4a 12321 "frstorIC",
252b5132 12322 "(bad)",
9306ca4a 12323 "fNsaveIC",
252b5132
RH
12324 "fNstsw",
12325 /* de */
ac465521
JB
12326 "fiadd{s|}",
12327 "fimul{s|}",
12328 "ficom{s|}",
12329 "ficomp{s|}",
12330 "fisub{s|}",
12331 "fisubr{s|}",
12332 "fidiv{s|}",
12333 "fidivr{s|}",
252b5132 12334 /* df */
ac465521
JB
12335 "fild{s|}",
12336 "fisttp{s|}",
12337 "fist{s|}",
12338 "fistp{s|}",
252b5132 12339 "fbld",
7c52e0e8 12340 "fild{ll|}",
252b5132 12341 "fbstp",
7c52e0e8 12342 "fistp{ll|}",
1d9f512f
AM
12343};
12344
12345static const unsigned char float_mem_mode[] = {
12346 /* d8 */
12347 d_mode,
12348 d_mode,
12349 d_mode,
12350 d_mode,
12351 d_mode,
12352 d_mode,
12353 d_mode,
12354 d_mode,
12355 /* d9 */
12356 d_mode,
12357 0,
12358 d_mode,
12359 d_mode,
12360 0,
12361 w_mode,
12362 0,
12363 w_mode,
12364 /* da */
12365 d_mode,
12366 d_mode,
12367 d_mode,
12368 d_mode,
12369 d_mode,
12370 d_mode,
12371 d_mode,
12372 d_mode,
12373 /* db */
12374 d_mode,
12375 d_mode,
12376 d_mode,
12377 d_mode,
12378 0,
9306ca4a 12379 t_mode,
1d9f512f 12380 0,
9306ca4a 12381 t_mode,
1d9f512f
AM
12382 /* dc */
12383 q_mode,
12384 q_mode,
12385 q_mode,
12386 q_mode,
12387 q_mode,
12388 q_mode,
12389 q_mode,
12390 q_mode,
12391 /* dd */
12392 q_mode,
12393 q_mode,
12394 q_mode,
12395 q_mode,
12396 0,
12397 0,
12398 0,
12399 w_mode,
12400 /* de */
12401 w_mode,
12402 w_mode,
12403 w_mode,
12404 w_mode,
12405 w_mode,
12406 w_mode,
12407 w_mode,
12408 w_mode,
12409 /* df */
12410 w_mode,
12411 w_mode,
12412 w_mode,
12413 w_mode,
9306ca4a 12414 t_mode,
1d9f512f 12415 q_mode,
9306ca4a 12416 t_mode,
1d9f512f 12417 q_mode
252b5132
RH
12418};
12419
ce518a5f
L
12420#define ST { OP_ST, 0 }
12421#define STi { OP_STi, 0 }
252b5132 12422
48c97fa1
L
12423#define FGRPd9_2 NULL, { { NULL, 1 } }, 0
12424#define FGRPd9_4 NULL, { { NULL, 2 } }, 0
12425#define FGRPd9_5 NULL, { { NULL, 3 } }, 0
12426#define FGRPd9_6 NULL, { { NULL, 4 } }, 0
12427#define FGRPd9_7 NULL, { { NULL, 5 } }, 0
12428#define FGRPda_5 NULL, { { NULL, 6 } }, 0
12429#define FGRPdb_4 NULL, { { NULL, 7 } }, 0
12430#define FGRPde_3 NULL, { { NULL, 8 } }, 0
12431#define FGRPdf_4 NULL, { { NULL, 9 } }, 0
252b5132 12432
2da11e11 12433static const struct dis386 float_reg[][8] = {
252b5132
RH
12434 /* d8 */
12435 {
bf890a93
IT
12436 { "fadd", { ST, STi }, 0 },
12437 { "fmul", { ST, STi }, 0 },
12438 { "fcom", { STi }, 0 },
12439 { "fcomp", { STi }, 0 },
12440 { "fsub", { ST, STi }, 0 },
12441 { "fsubr", { ST, STi }, 0 },
12442 { "fdiv", { ST, STi }, 0 },
12443 { "fdivr", { ST, STi }, 0 },
252b5132
RH
12444 },
12445 /* d9 */
12446 {
bf890a93
IT
12447 { "fld", { STi }, 0 },
12448 { "fxch", { STi }, 0 },
252b5132 12449 { FGRPd9_2 },
592d1631 12450 { Bad_Opcode },
252b5132
RH
12451 { FGRPd9_4 },
12452 { FGRPd9_5 },
12453 { FGRPd9_6 },
12454 { FGRPd9_7 },
12455 },
12456 /* da */
12457 {
bf890a93
IT
12458 { "fcmovb", { ST, STi }, 0 },
12459 { "fcmove", { ST, STi }, 0 },
12460 { "fcmovbe",{ ST, STi }, 0 },
12461 { "fcmovu", { ST, STi }, 0 },
592d1631 12462 { Bad_Opcode },
252b5132 12463 { FGRPda_5 },
592d1631
L
12464 { Bad_Opcode },
12465 { Bad_Opcode },
252b5132
RH
12466 },
12467 /* db */
12468 {
bf890a93
IT
12469 { "fcmovnb",{ ST, STi }, 0 },
12470 { "fcmovne",{ ST, STi }, 0 },
12471 { "fcmovnbe",{ ST, STi }, 0 },
12472 { "fcmovnu",{ ST, STi }, 0 },
252b5132 12473 { FGRPdb_4 },
bf890a93
IT
12474 { "fucomi", { ST, STi }, 0 },
12475 { "fcomi", { ST, STi }, 0 },
592d1631 12476 { Bad_Opcode },
252b5132
RH
12477 },
12478 /* dc */
12479 {
bf890a93
IT
12480 { "fadd", { STi, ST }, 0 },
12481 { "fmul", { STi, ST }, 0 },
592d1631
L
12482 { Bad_Opcode },
12483 { Bad_Opcode },
d53e6b98
JB
12484 { "fsub{!M|r}", { STi, ST }, 0 },
12485 { "fsub{M|}", { STi, ST }, 0 },
12486 { "fdiv{!M|r}", { STi, ST }, 0 },
12487 { "fdiv{M|}", { STi, ST }, 0 },
252b5132
RH
12488 },
12489 /* dd */
12490 {
bf890a93 12491 { "ffree", { STi }, 0 },
592d1631 12492 { Bad_Opcode },
bf890a93
IT
12493 { "fst", { STi }, 0 },
12494 { "fstp", { STi }, 0 },
12495 { "fucom", { STi }, 0 },
12496 { "fucomp", { STi }, 0 },
592d1631
L
12497 { Bad_Opcode },
12498 { Bad_Opcode },
252b5132
RH
12499 },
12500 /* de */
12501 {
bf890a93
IT
12502 { "faddp", { STi, ST }, 0 },
12503 { "fmulp", { STi, ST }, 0 },
592d1631 12504 { Bad_Opcode },
252b5132 12505 { FGRPde_3 },
d53e6b98
JB
12506 { "fsub{!M|r}p", { STi, ST }, 0 },
12507 { "fsub{M|}p", { STi, ST }, 0 },
12508 { "fdiv{!M|r}p", { STi, ST }, 0 },
12509 { "fdiv{M|}p", { STi, ST }, 0 },
252b5132
RH
12510 },
12511 /* df */
12512 {
bf890a93 12513 { "ffreep", { STi }, 0 },
592d1631
L
12514 { Bad_Opcode },
12515 { Bad_Opcode },
12516 { Bad_Opcode },
252b5132 12517 { FGRPdf_4 },
bf890a93
IT
12518 { "fucomip", { ST, STi }, 0 },
12519 { "fcomip", { ST, STi }, 0 },
592d1631 12520 { Bad_Opcode },
252b5132
RH
12521 },
12522};
12523
252b5132 12524static char *fgrps[][8] = {
48c97fa1
L
12525 /* Bad opcode 0 */
12526 {
12527 "(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12528 },
12529
12530 /* d9_2 1 */
252b5132
RH
12531 {
12532 "fnop","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12533 },
12534
48c97fa1 12535 /* d9_4 2 */
252b5132
RH
12536 {
12537 "fchs","fabs","(bad)","(bad)","ftst","fxam","(bad)","(bad)",
12538 },
12539
48c97fa1 12540 /* d9_5 3 */
252b5132
RH
12541 {
12542 "fld1","fldl2t","fldl2e","fldpi","fldlg2","fldln2","fldz","(bad)",
12543 },
12544
48c97fa1 12545 /* d9_6 4 */
252b5132
RH
12546 {
12547 "f2xm1","fyl2x","fptan","fpatan","fxtract","fprem1","fdecstp","fincstp",
12548 },
12549
48c97fa1 12550 /* d9_7 5 */
252b5132
RH
12551 {
12552 "fprem","fyl2xp1","fsqrt","fsincos","frndint","fscale","fsin","fcos",
12553 },
12554
48c97fa1 12555 /* da_5 6 */
252b5132
RH
12556 {
12557 "(bad)","fucompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12558 },
12559
48c97fa1 12560 /* db_4 7 */
252b5132 12561 {
309d3373
JB
12562 "fNeni(8087 only)","fNdisi(8087 only)","fNclex","fNinit",
12563 "fNsetpm(287 only)","frstpm(287 only)","(bad)","(bad)",
252b5132
RH
12564 },
12565
48c97fa1 12566 /* de_3 8 */
252b5132
RH
12567 {
12568 "(bad)","fcompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12569 },
12570
48c97fa1 12571 /* df_4 9 */
252b5132
RH
12572 {
12573 "fNstsw","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12574 },
12575};
12576
b6169b20
L
12577static void
12578swap_operand (void)
12579{
12580 mnemonicendp[0] = '.';
12581 mnemonicendp[1] = 's';
12582 mnemonicendp += 2;
12583}
12584
b844680a
L
12585static void
12586OP_Skip_MODRM (int bytemode ATTRIBUTE_UNUSED,
12587 int sizeflag ATTRIBUTE_UNUSED)
12588{
12589 /* Skip mod/rm byte. */
12590 MODRM_CHECK;
12591 codep++;
12592}
12593
252b5132 12594static void
26ca5450 12595dofloat (int sizeflag)
252b5132 12596{
2da11e11 12597 const struct dis386 *dp;
252b5132
RH
12598 unsigned char floatop;
12599
12600 floatop = codep[-1];
12601
7967e09e 12602 if (modrm.mod != 3)
252b5132 12603 {
7967e09e 12604 int fp_indx = (floatop - 0xd8) * 8 + modrm.reg;
1d9f512f
AM
12605
12606 putop (float_mem[fp_indx], sizeflag);
ce518a5f 12607 obufp = op_out[0];
6e50d963 12608 op_ad = 2;
1d9f512f 12609 OP_E (float_mem_mode[fp_indx], sizeflag);
252b5132
RH
12610 return;
12611 }
6608db57 12612 /* Skip mod/rm byte. */
4bba6815 12613 MODRM_CHECK;
252b5132
RH
12614 codep++;
12615
7967e09e 12616 dp = &float_reg[floatop - 0xd8][modrm.reg];
252b5132
RH
12617 if (dp->name == NULL)
12618 {
7967e09e 12619 putop (fgrps[dp->op[0].bytemode][modrm.rm], sizeflag);
252b5132 12620
6608db57 12621 /* Instruction fnstsw is only one with strange arg. */
252b5132 12622 if (floatop == 0xdf && codep[-1] == 0xe0)
ce518a5f 12623 strcpy (op_out[0], names16[0]);
252b5132
RH
12624 }
12625 else
12626 {
12627 putop (dp->name, sizeflag);
12628
ce518a5f 12629 obufp = op_out[0];
6e50d963 12630 op_ad = 2;
ce518a5f
L
12631 if (dp->op[0].rtn)
12632 (*dp->op[0].rtn) (dp->op[0].bytemode, sizeflag);
6e50d963 12633
ce518a5f 12634 obufp = op_out[1];
6e50d963 12635 op_ad = 1;
ce518a5f
L
12636 if (dp->op[1].rtn)
12637 (*dp->op[1].rtn) (dp->op[1].bytemode, sizeflag);
252b5132
RH
12638 }
12639}
12640
9ce09ba2
RM
12641/* Like oappend (below), but S is a string starting with '%'.
12642 In Intel syntax, the '%' is elided. */
12643static void
12644oappend_maybe_intel (const char *s)
12645{
12646 oappend (s + intel_syntax);
12647}
12648
252b5132 12649static void
26ca5450 12650OP_ST (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 12651{
9ce09ba2 12652 oappend_maybe_intel ("%st");
252b5132
RH
12653}
12654
252b5132 12655static void
26ca5450 12656OP_STi (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 12657{
7967e09e 12658 sprintf (scratchbuf, "%%st(%d)", modrm.rm);
9ce09ba2 12659 oappend_maybe_intel (scratchbuf);
252b5132
RH
12660}
12661
6608db57 12662/* Capital letters in template are macros. */
6439fc28 12663static int
d3ce72d0 12664putop (const char *in_template, int sizeflag)
252b5132 12665{
2da11e11 12666 const char *p;
9306ca4a 12667 int alt = 0;
9d141669 12668 int cond = 1;
98b528ac
L
12669 unsigned int l = 0, len = 1;
12670 char last[4];
12671
12672#define SAVE_LAST(c) \
12673 if (l < len && l < sizeof (last)) \
12674 last[l++] = c; \
12675 else \
12676 abort ();
252b5132 12677
d3ce72d0 12678 for (p = in_template; *p; p++)
252b5132
RH
12679 {
12680 switch (*p)
12681 {
12682 default:
12683 *obufp++ = *p;
12684 break;
98b528ac
L
12685 case '%':
12686 len++;
12687 break;
9d141669
L
12688 case '!':
12689 cond = 0;
12690 break;
6439fc28 12691 case '{':
6439fc28 12692 if (intel_syntax)
6439fc28
AM
12693 {
12694 while (*++p != '|')
7c52e0e8
L
12695 if (*p == '}' || *p == '\0')
12696 abort ();
6439fc28 12697 }
9306ca4a
JB
12698 /* Fall through. */
12699 case 'I':
12700 alt = 1;
12701 continue;
6439fc28
AM
12702 case '|':
12703 while (*++p != '}')
12704 {
12705 if (*p == '\0')
12706 abort ();
12707 }
12708 break;
12709 case '}':
12710 break;
252b5132 12711 case 'A':
db6eb5be
AM
12712 if (intel_syntax)
12713 break;
7967e09e 12714 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
252b5132
RH
12715 *obufp++ = 'b';
12716 break;
12717 case 'B':
4b06377f
L
12718 if (l == 0 && len == 1)
12719 {
12720case_B:
12721 if (intel_syntax)
12722 break;
12723 if (sizeflag & SUFFIX_ALWAYS)
12724 *obufp++ = 'b';
12725 }
12726 else
12727 {
12728 if (l != 1
12729 || len != 2
12730 || last[0] != 'L')
12731 {
12732 SAVE_LAST (*p);
12733 break;
12734 }
12735
12736 if (address_mode == mode_64bit
12737 && !(prefixes & PREFIX_ADDR))
12738 {
12739 *obufp++ = 'a';
12740 *obufp++ = 'b';
12741 *obufp++ = 's';
12742 }
12743
12744 goto case_B;
12745 }
252b5132 12746 break;
9306ca4a
JB
12747 case 'C':
12748 if (intel_syntax && !alt)
12749 break;
12750 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
12751 {
12752 if (sizeflag & DFLAG)
12753 *obufp++ = intel_syntax ? 'd' : 'l';
12754 else
12755 *obufp++ = intel_syntax ? 'w' : 's';
12756 used_prefixes |= (prefixes & PREFIX_DATA);
12757 }
12758 break;
ed7841b3
JB
12759 case 'D':
12760 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
12761 break;
161a04f6 12762 USED_REX (REX_W);
7967e09e 12763 if (modrm.mod == 3)
ed7841b3 12764 {
161a04f6 12765 if (rex & REX_W)
ed7841b3 12766 *obufp++ = 'q';
ed7841b3 12767 else
f16cd0d5
L
12768 {
12769 if (sizeflag & DFLAG)
12770 *obufp++ = intel_syntax ? 'd' : 'l';
12771 else
12772 *obufp++ = 'w';
12773 used_prefixes |= (prefixes & PREFIX_DATA);
12774 }
ed7841b3
JB
12775 }
12776 else
12777 *obufp++ = 'w';
12778 break;
252b5132 12779 case 'E': /* For jcxz/jecxz */
cb712a9e 12780 if (address_mode == mode_64bit)
c1a64871
JH
12781 {
12782 if (sizeflag & AFLAG)
12783 *obufp++ = 'r';
12784 else
12785 *obufp++ = 'e';
12786 }
12787 else
12788 if (sizeflag & AFLAG)
12789 *obufp++ = 'e';
3ffd33cf
AM
12790 used_prefixes |= (prefixes & PREFIX_ADDR);
12791 break;
12792 case 'F':
db6eb5be
AM
12793 if (intel_syntax)
12794 break;
e396998b 12795 if ((prefixes & PREFIX_ADDR) || (sizeflag & SUFFIX_ALWAYS))
3ffd33cf
AM
12796 {
12797 if (sizeflag & AFLAG)
cb712a9e 12798 *obufp++ = address_mode == mode_64bit ? 'q' : 'l';
3ffd33cf 12799 else
cb712a9e 12800 *obufp++ = address_mode == mode_64bit ? 'l' : 'w';
3ffd33cf
AM
12801 used_prefixes |= (prefixes & PREFIX_ADDR);
12802 }
252b5132 12803 break;
52fd6d94
JB
12804 case 'G':
12805 if (intel_syntax || (obufp[-1] != 's' && !(sizeflag & SUFFIX_ALWAYS)))
12806 break;
161a04f6 12807 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
12808 *obufp++ = 'l';
12809 else
12810 *obufp++ = 'w';
161a04f6 12811 if (!(rex & REX_W))
52fd6d94
JB
12812 used_prefixes |= (prefixes & PREFIX_DATA);
12813 break;
5dd0794d 12814 case 'H':
db6eb5be
AM
12815 if (intel_syntax)
12816 break;
5dd0794d
AM
12817 if ((prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_CS
12818 || (prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_DS)
12819 {
12820 used_prefixes |= prefixes & (PREFIX_CS | PREFIX_DS);
12821 *obufp++ = ',';
12822 *obufp++ = 'p';
12823 if (prefixes & PREFIX_DS)
12824 *obufp++ = 't';
12825 else
12826 *obufp++ = 'n';
12827 }
12828 break;
9306ca4a
JB
12829 case 'J':
12830 if (intel_syntax)
12831 break;
12832 *obufp++ = 'l';
12833 break;
42903f7f
L
12834 case 'K':
12835 USED_REX (REX_W);
12836 if (rex & REX_W)
12837 *obufp++ = 'q';
12838 else
12839 *obufp++ = 'd';
12840 break;
6dd5059a 12841 case 'Z':
04d824a4
JB
12842 if (l != 0 || len != 1)
12843 {
12844 if (l != 1 || len != 2 || last[0] != 'X')
12845 {
12846 SAVE_LAST (*p);
12847 break;
12848 }
12849 if (!need_vex || !vex.evex)
12850 abort ();
12851 if (intel_syntax
12852 || ((modrm.mod == 3 || vex.b) && !(sizeflag & SUFFIX_ALWAYS)))
12853 break;
12854 switch (vex.length)
12855 {
12856 case 128:
12857 *obufp++ = 'x';
12858 break;
12859 case 256:
12860 *obufp++ = 'y';
12861 break;
12862 case 512:
12863 *obufp++ = 'z';
12864 break;
12865 default:
12866 abort ();
12867 }
12868 break;
12869 }
6dd5059a
L
12870 if (intel_syntax)
12871 break;
12872 if (address_mode == mode_64bit && (sizeflag & SUFFIX_ALWAYS))
12873 {
12874 *obufp++ = 'q';
12875 break;
12876 }
12877 /* Fall through. */
98b528ac 12878 goto case_L;
252b5132 12879 case 'L':
98b528ac
L
12880 if (l != 0 || len != 1)
12881 {
12882 SAVE_LAST (*p);
12883 break;
12884 }
12885case_L:
db6eb5be
AM
12886 if (intel_syntax)
12887 break;
252b5132
RH
12888 if (sizeflag & SUFFIX_ALWAYS)
12889 *obufp++ = 'l';
252b5132 12890 break;
9d141669
L
12891 case 'M':
12892 if (intel_mnemonic != cond)
12893 *obufp++ = 'r';
12894 break;
252b5132
RH
12895 case 'N':
12896 if ((prefixes & PREFIX_FWAIT) == 0)
12897 *obufp++ = 'n';
7d421014
ILT
12898 else
12899 used_prefixes |= PREFIX_FWAIT;
252b5132 12900 break;
52b15da3 12901 case 'O':
161a04f6
L
12902 USED_REX (REX_W);
12903 if (rex & REX_W)
6439fc28 12904 *obufp++ = 'o';
a35ca55a
JB
12905 else if (intel_syntax && (sizeflag & DFLAG))
12906 *obufp++ = 'q';
52b15da3
JH
12907 else
12908 *obufp++ = 'd';
161a04f6 12909 if (!(rex & REX_W))
a35ca55a 12910 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 12911 break;
07f5af7d
L
12912 case '&':
12913 if (!intel_syntax
12914 && address_mode == mode_64bit
12915 && isa64 == intel64)
12916 {
12917 *obufp++ = 'q';
12918 break;
12919 }
12920 /* Fall through. */
6439fc28 12921 case 'T':
d9e3625e
L
12922 if (!intel_syntax
12923 && address_mode == mode_64bit
7bb15c6f 12924 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
12925 {
12926 *obufp++ = 'q';
12927 break;
12928 }
6608db57 12929 /* Fall through. */
4b4c407a 12930 goto case_P;
252b5132 12931 case 'P':
4b4c407a 12932 if (l == 0 && len == 1)
d9e3625e 12933 {
4b4c407a
L
12934case_P:
12935 if (intel_syntax)
d9e3625e 12936 {
4b4c407a
L
12937 if ((rex & REX_W) == 0
12938 && (prefixes & PREFIX_DATA))
12939 {
12940 if ((sizeflag & DFLAG) == 0)
12941 *obufp++ = 'w';
12942 used_prefixes |= (prefixes & PREFIX_DATA);
12943 }
12944 break;
12945 }
12946 if ((prefixes & PREFIX_DATA)
12947 || (rex & REX_W)
12948 || (sizeflag & SUFFIX_ALWAYS))
12949 {
12950 USED_REX (REX_W);
12951 if (rex & REX_W)
12952 *obufp++ = 'q';
12953 else
12954 {
12955 if (sizeflag & DFLAG)
12956 *obufp++ = 'l';
12957 else
12958 *obufp++ = 'w';
12959 used_prefixes |= (prefixes & PREFIX_DATA);
12960 }
d9e3625e 12961 }
d9e3625e 12962 }
4b4c407a 12963 else
252b5132 12964 {
4b4c407a
L
12965 if (l != 1 || len != 2 || last[0] != 'L')
12966 {
12967 SAVE_LAST (*p);
12968 break;
12969 }
12970
12971 if ((prefixes & PREFIX_DATA)
12972 || (rex & REX_W)
12973 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 12974 {
4b4c407a
L
12975 USED_REX (REX_W);
12976 if (rex & REX_W)
12977 *obufp++ = 'q';
12978 else
12979 {
12980 if (sizeflag & DFLAG)
12981 *obufp++ = intel_syntax ? 'd' : 'l';
12982 else
12983 *obufp++ = 'w';
12984 used_prefixes |= (prefixes & PREFIX_DATA);
12985 }
52b15da3 12986 }
252b5132
RH
12987 }
12988 break;
6439fc28 12989 case 'U':
db6eb5be
AM
12990 if (intel_syntax)
12991 break;
7bb15c6f 12992 if (address_mode == mode_64bit
6c067bbb 12993 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28 12994 {
7967e09e 12995 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
1a114b12 12996 *obufp++ = 'q';
6439fc28
AM
12997 break;
12998 }
6608db57 12999 /* Fall through. */
98b528ac 13000 goto case_Q;
252b5132 13001 case 'Q':
98b528ac 13002 if (l == 0 && len == 1)
252b5132 13003 {
98b528ac
L
13004case_Q:
13005 if (intel_syntax && !alt)
13006 break;
13007 USED_REX (REX_W);
13008 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 13009 {
98b528ac
L
13010 if (rex & REX_W)
13011 *obufp++ = 'q';
52b15da3 13012 else
98b528ac
L
13013 {
13014 if (sizeflag & DFLAG)
13015 *obufp++ = intel_syntax ? 'd' : 'l';
13016 else
13017 *obufp++ = 'w';
f16cd0d5 13018 used_prefixes |= (prefixes & PREFIX_DATA);
98b528ac 13019 }
52b15da3 13020 }
98b528ac
L
13021 }
13022 else
13023 {
13024 if (l != 1 || len != 2 || last[0] != 'L')
13025 {
13026 SAVE_LAST (*p);
13027 break;
13028 }
13029 if (intel_syntax
13030 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
13031 break;
13032 if ((rex & REX_W))
13033 {
13034 USED_REX (REX_W);
13035 *obufp++ = 'q';
13036 }
13037 else
13038 *obufp++ = 'l';
252b5132
RH
13039 }
13040 break;
13041 case 'R':
161a04f6
L
13042 USED_REX (REX_W);
13043 if (rex & REX_W)
a35ca55a
JB
13044 *obufp++ = 'q';
13045 else if (sizeflag & DFLAG)
c608c12e 13046 {
a35ca55a 13047 if (intel_syntax)
c608c12e 13048 *obufp++ = 'd';
c608c12e 13049 else
a35ca55a 13050 *obufp++ = 'l';
c608c12e 13051 }
252b5132 13052 else
a35ca55a
JB
13053 *obufp++ = 'w';
13054 if (intel_syntax && !p[1]
161a04f6 13055 && ((rex & REX_W) || (sizeflag & DFLAG)))
a35ca55a 13056 *obufp++ = 'e';
161a04f6 13057 if (!(rex & REX_W))
52b15da3 13058 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132 13059 break;
1a114b12 13060 case 'V':
4b06377f 13061 if (l == 0 && len == 1)
1a114b12 13062 {
4b06377f
L
13063 if (intel_syntax)
13064 break;
7bb15c6f 13065 if (address_mode == mode_64bit
6c067bbb 13066 && ((sizeflag & DFLAG) || (rex & REX_W)))
4b06377f
L
13067 {
13068 if (sizeflag & SUFFIX_ALWAYS)
13069 *obufp++ = 'q';
13070 break;
13071 }
13072 }
13073 else
13074 {
13075 if (l != 1
13076 || len != 2
13077 || last[0] != 'L')
13078 {
13079 SAVE_LAST (*p);
13080 break;
13081 }
13082
13083 if (rex & REX_W)
13084 {
13085 *obufp++ = 'a';
13086 *obufp++ = 'b';
13087 *obufp++ = 's';
13088 }
1a114b12
JB
13089 }
13090 /* Fall through. */
4b06377f 13091 goto case_S;
252b5132 13092 case 'S':
4b06377f 13093 if (l == 0 && len == 1)
252b5132 13094 {
4b06377f
L
13095case_S:
13096 if (intel_syntax)
13097 break;
13098 if (sizeflag & SUFFIX_ALWAYS)
52b15da3 13099 {
4b06377f
L
13100 if (rex & REX_W)
13101 *obufp++ = 'q';
52b15da3 13102 else
4b06377f
L
13103 {
13104 if (sizeflag & DFLAG)
13105 *obufp++ = 'l';
13106 else
13107 *obufp++ = 'w';
13108 used_prefixes |= (prefixes & PREFIX_DATA);
13109 }
13110 }
13111 }
13112 else
13113 {
13114 if (l != 1
13115 || len != 2
13116 || last[0] != 'L')
13117 {
13118 SAVE_LAST (*p);
13119 break;
52b15da3 13120 }
4b06377f
L
13121
13122 if (address_mode == mode_64bit
13123 && !(prefixes & PREFIX_ADDR))
13124 {
13125 *obufp++ = 'a';
13126 *obufp++ = 'b';
13127 *obufp++ = 's';
13128 }
13129
13130 goto case_S;
252b5132 13131 }
252b5132 13132 break;
041bd2e0 13133 case 'X':
c0f3af97
L
13134 if (l != 0 || len != 1)
13135 {
13136 SAVE_LAST (*p);
13137 break;
13138 }
13139 if (need_vex && vex.prefix)
13140 {
13141 if (vex.prefix == DATA_PREFIX_OPCODE)
13142 *obufp++ = 'd';
13143 else
13144 *obufp++ = 's';
13145 }
041bd2e0 13146 else
f16cd0d5
L
13147 {
13148 if (prefixes & PREFIX_DATA)
13149 *obufp++ = 'd';
13150 else
13151 *obufp++ = 's';
13152 used_prefixes |= (prefixes & PREFIX_DATA);
13153 }
041bd2e0 13154 break;
76f227a5 13155 case 'Y':
c0f3af97 13156 if (l == 0 && len == 1)
9646c87b 13157 abort ();
c0f3af97
L
13158 else
13159 {
13160 if (l != 1 || len != 2 || last[0] != 'X')
13161 {
13162 SAVE_LAST (*p);
13163 break;
13164 }
13165 if (!need_vex)
13166 abort ();
13167 if (intel_syntax
04d824a4 13168 || ((modrm.mod == 3 || vex.b) && !(sizeflag & SUFFIX_ALWAYS)))
c0f3af97
L
13169 break;
13170 switch (vex.length)
13171 {
13172 case 128:
13173 *obufp++ = 'x';
13174 break;
13175 case 256:
13176 *obufp++ = 'y';
13177 break;
04d824a4
JB
13178 case 512:
13179 if (!vex.evex)
c0f3af97 13180 default:
04d824a4 13181 abort ();
c0f3af97 13182 }
76f227a5
JH
13183 }
13184 break;
252b5132 13185 case 'W':
0bfee649 13186 if (l == 0 && len == 1)
a35ca55a 13187 {
0bfee649
L
13188 /* operand size flag for cwtl, cbtw */
13189 USED_REX (REX_W);
13190 if (rex & REX_W)
13191 {
13192 if (intel_syntax)
13193 *obufp++ = 'd';
13194 else
13195 *obufp++ = 'l';
13196 }
13197 else if (sizeflag & DFLAG)
13198 *obufp++ = 'w';
a35ca55a 13199 else
0bfee649
L
13200 *obufp++ = 'b';
13201 if (!(rex & REX_W))
13202 used_prefixes |= (prefixes & PREFIX_DATA);
a35ca55a 13203 }
252b5132 13204 else
0bfee649 13205 {
6c30d220
L
13206 if (l != 1
13207 || len != 2
13208 || (last[0] != 'X'
13209 && last[0] != 'L'))
0bfee649
L
13210 {
13211 SAVE_LAST (*p);
13212 break;
13213 }
13214 if (!need_vex)
13215 abort ();
6c30d220
L
13216 if (last[0] == 'X')
13217 *obufp++ = vex.w ? 'd': 's';
13218 else
13219 *obufp++ = vex.w ? 'q': 'd';
0bfee649 13220 }
252b5132 13221 break;
a72d2af2
L
13222 case '^':
13223 if (intel_syntax)
13224 break;
13225 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
13226 {
13227 if (sizeflag & DFLAG)
13228 *obufp++ = 'l';
13229 else
13230 *obufp++ = 'w';
13231 used_prefixes |= (prefixes & PREFIX_DATA);
13232 }
13233 break;
5db04b09
L
13234 case '@':
13235 if (intel_syntax)
13236 break;
13237 if (address_mode == mode_64bit
13238 && (isa64 == intel64
13239 || ((sizeflag & DFLAG) || (rex & REX_W))))
13240 *obufp++ = 'q';
13241 else if ((prefixes & PREFIX_DATA))
13242 {
13243 if (!(sizeflag & DFLAG))
13244 *obufp++ = 'w';
13245 used_prefixes |= (prefixes & PREFIX_DATA);
13246 }
13247 break;
252b5132 13248 }
9306ca4a 13249 alt = 0;
252b5132
RH
13250 }
13251 *obufp = 0;
ea397f5b 13252 mnemonicendp = obufp;
6439fc28 13253 return 0;
252b5132
RH
13254}
13255
13256static void
26ca5450 13257oappend (const char *s)
252b5132 13258{
ea397f5b 13259 obufp = stpcpy (obufp, s);
252b5132
RH
13260}
13261
13262static void
26ca5450 13263append_seg (void)
252b5132 13264{
285ca992
L
13265 /* Only print the active segment register. */
13266 if (!active_seg_prefix)
13267 return;
13268
13269 used_prefixes |= active_seg_prefix;
13270 switch (active_seg_prefix)
7d421014 13271 {
285ca992 13272 case PREFIX_CS:
9ce09ba2 13273 oappend_maybe_intel ("%cs:");
285ca992
L
13274 break;
13275 case PREFIX_DS:
9ce09ba2 13276 oappend_maybe_intel ("%ds:");
285ca992
L
13277 break;
13278 case PREFIX_SS:
9ce09ba2 13279 oappend_maybe_intel ("%ss:");
285ca992
L
13280 break;
13281 case PREFIX_ES:
9ce09ba2 13282 oappend_maybe_intel ("%es:");
285ca992
L
13283 break;
13284 case PREFIX_FS:
9ce09ba2 13285 oappend_maybe_intel ("%fs:");
285ca992
L
13286 break;
13287 case PREFIX_GS:
9ce09ba2 13288 oappend_maybe_intel ("%gs:");
285ca992
L
13289 break;
13290 default:
13291 break;
7d421014 13292 }
252b5132
RH
13293}
13294
13295static void
26ca5450 13296OP_indirE (int bytemode, int sizeflag)
252b5132
RH
13297{
13298 if (!intel_syntax)
13299 oappend ("*");
13300 OP_E (bytemode, sizeflag);
13301}
13302
52b15da3 13303static void
26ca5450 13304print_operand_value (char *buf, int hex, bfd_vma disp)
52b15da3 13305{
cb712a9e 13306 if (address_mode == mode_64bit)
52b15da3
JH
13307 {
13308 if (hex)
13309 {
13310 char tmp[30];
13311 int i;
13312 buf[0] = '0';
13313 buf[1] = 'x';
13314 sprintf_vma (tmp, disp);
6608db57 13315 for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++);
52b15da3
JH
13316 strcpy (buf + 2, tmp + i);
13317 }
13318 else
13319 {
13320 bfd_signed_vma v = disp;
13321 char tmp[30];
13322 int i;
13323 if (v < 0)
13324 {
13325 *(buf++) = '-';
13326 v = -disp;
6608db57 13327 /* Check for possible overflow on 0x8000000000000000. */
52b15da3
JH
13328 if (v < 0)
13329 {
13330 strcpy (buf, "9223372036854775808");
13331 return;
13332 }
13333 }
13334 if (!v)
13335 {
13336 strcpy (buf, "0");
13337 return;
13338 }
13339
13340 i = 0;
13341 tmp[29] = 0;
13342 while (v)
13343 {
6608db57 13344 tmp[28 - i] = (v % 10) + '0';
52b15da3
JH
13345 v /= 10;
13346 i++;
13347 }
13348 strcpy (buf, tmp + 29 - i);
13349 }
13350 }
13351 else
13352 {
13353 if (hex)
13354 sprintf (buf, "0x%x", (unsigned int) disp);
13355 else
13356 sprintf (buf, "%d", (int) disp);
13357 }
13358}
13359
5d669648
L
13360/* Put DISP in BUF as signed hex number. */
13361
13362static void
13363print_displacement (char *buf, bfd_vma disp)
13364{
13365 bfd_signed_vma val = disp;
13366 char tmp[30];
13367 int i, j = 0;
13368
13369 if (val < 0)
13370 {
13371 buf[j++] = '-';
13372 val = -disp;
13373
13374 /* Check for possible overflow. */
13375 if (val < 0)
13376 {
13377 switch (address_mode)
13378 {
13379 case mode_64bit:
13380 strcpy (buf + j, "0x8000000000000000");
13381 break;
13382 case mode_32bit:
13383 strcpy (buf + j, "0x80000000");
13384 break;
13385 case mode_16bit:
13386 strcpy (buf + j, "0x8000");
13387 break;
13388 }
13389 return;
13390 }
13391 }
13392
13393 buf[j++] = '0';
13394 buf[j++] = 'x';
13395
0af1713e 13396 sprintf_vma (tmp, (bfd_vma) val);
5d669648
L
13397 for (i = 0; tmp[i] == '0'; i++)
13398 continue;
13399 if (tmp[i] == '\0')
13400 i--;
13401 strcpy (buf + j, tmp + i);
13402}
13403
3f31e633
JB
13404static void
13405intel_operand_size (int bytemode, int sizeflag)
13406{
43234a1e
L
13407 if (vex.evex
13408 && vex.b
13409 && (bytemode == x_mode
13410 || bytemode == evex_half_bcst_xmmq_mode))
13411 {
13412 if (vex.w)
13413 oappend ("QWORD PTR ");
13414 else
13415 oappend ("DWORD PTR ");
13416 return;
13417 }
3f31e633
JB
13418 switch (bytemode)
13419 {
13420 case b_mode:
b6169b20 13421 case b_swap_mode:
42903f7f 13422 case dqb_mode:
1ba585e8 13423 case db_mode:
3f31e633
JB
13424 oappend ("BYTE PTR ");
13425 break;
13426 case w_mode:
1ba585e8 13427 case dw_mode:
3f31e633
JB
13428 case dqw_mode:
13429 oappend ("WORD PTR ");
13430 break;
07f5af7d
L
13431 case indir_v_mode:
13432 if (address_mode == mode_64bit && isa64 == intel64)
13433 {
13434 oappend ("QWORD PTR ");
13435 break;
13436 }
1a0670f3 13437 /* Fall through. */
1a114b12 13438 case stack_v_mode:
7bb15c6f 13439 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
3f31e633
JB
13440 {
13441 oappend ("QWORD PTR ");
3f31e633
JB
13442 break;
13443 }
1a0670f3 13444 /* Fall through. */
3f31e633 13445 case v_mode:
b6169b20 13446 case v_swap_mode:
3f31e633 13447 case dq_mode:
161a04f6
L
13448 USED_REX (REX_W);
13449 if (rex & REX_W)
3f31e633 13450 oappend ("QWORD PTR ");
3f31e633 13451 else
f16cd0d5
L
13452 {
13453 if ((sizeflag & DFLAG) || bytemode == dq_mode)
13454 oappend ("DWORD PTR ");
13455 else
13456 oappend ("WORD PTR ");
13457 used_prefixes |= (prefixes & PREFIX_DATA);
13458 }
3f31e633 13459 break;
52fd6d94 13460 case z_mode:
161a04f6 13461 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
13462 *obufp++ = 'D';
13463 oappend ("WORD PTR ");
161a04f6 13464 if (!(rex & REX_W))
52fd6d94
JB
13465 used_prefixes |= (prefixes & PREFIX_DATA);
13466 break;
34b772a6
JB
13467 case a_mode:
13468 if (sizeflag & DFLAG)
13469 oappend ("QWORD PTR ");
13470 else
13471 oappend ("DWORD PTR ");
13472 used_prefixes |= (prefixes & PREFIX_DATA);
13473 break;
3f31e633 13474 case d_mode:
539f890d
L
13475 case d_scalar_mode:
13476 case d_scalar_swap_mode:
fa99fab2 13477 case d_swap_mode:
42903f7f 13478 case dqd_mode:
3f31e633
JB
13479 oappend ("DWORD PTR ");
13480 break;
13481 case q_mode:
539f890d
L
13482 case q_scalar_mode:
13483 case q_scalar_swap_mode:
b6169b20 13484 case q_swap_mode:
3f31e633
JB
13485 oappend ("QWORD PTR ");
13486 break;
13487 case m_mode:
cb712a9e 13488 if (address_mode == mode_64bit)
3f31e633
JB
13489 oappend ("QWORD PTR ");
13490 else
13491 oappend ("DWORD PTR ");
13492 break;
13493 case f_mode:
13494 if (sizeflag & DFLAG)
13495 oappend ("FWORD PTR ");
13496 else
13497 oappend ("DWORD PTR ");
13498 used_prefixes |= (prefixes & PREFIX_DATA);
13499 break;
13500 case t_mode:
13501 oappend ("TBYTE PTR ");
13502 break;
13503 case x_mode:
b6169b20 13504 case x_swap_mode:
43234a1e
L
13505 case evex_x_gscat_mode:
13506 case evex_x_nobcst_mode:
53467f57
IT
13507 case b_scalar_mode:
13508 case w_scalar_mode:
c0f3af97
L
13509 if (need_vex)
13510 {
13511 switch (vex.length)
13512 {
13513 case 128:
13514 oappend ("XMMWORD PTR ");
13515 break;
13516 case 256:
13517 oappend ("YMMWORD PTR ");
13518 break;
43234a1e
L
13519 case 512:
13520 oappend ("ZMMWORD PTR ");
13521 break;
c0f3af97
L
13522 default:
13523 abort ();
13524 }
13525 }
13526 else
13527 oappend ("XMMWORD PTR ");
13528 break;
13529 case xmm_mode:
3f31e633
JB
13530 oappend ("XMMWORD PTR ");
13531 break;
43234a1e
L
13532 case ymm_mode:
13533 oappend ("YMMWORD PTR ");
13534 break;
c0f3af97 13535 case xmmq_mode:
43234a1e 13536 case evex_half_bcst_xmmq_mode:
c0f3af97
L
13537 if (!need_vex)
13538 abort ();
13539
13540 switch (vex.length)
13541 {
13542 case 128:
13543 oappend ("QWORD PTR ");
13544 break;
13545 case 256:
13546 oappend ("XMMWORD PTR ");
13547 break;
43234a1e
L
13548 case 512:
13549 oappend ("YMMWORD PTR ");
13550 break;
c0f3af97
L
13551 default:
13552 abort ();
13553 }
13554 break;
6c30d220
L
13555 case xmm_mb_mode:
13556 if (!need_vex)
13557 abort ();
13558
13559 switch (vex.length)
13560 {
13561 case 128:
13562 case 256:
43234a1e 13563 case 512:
6c30d220
L
13564 oappend ("BYTE PTR ");
13565 break;
13566 default:
13567 abort ();
13568 }
13569 break;
13570 case xmm_mw_mode:
13571 if (!need_vex)
13572 abort ();
13573
13574 switch (vex.length)
13575 {
13576 case 128:
13577 case 256:
43234a1e 13578 case 512:
6c30d220
L
13579 oappend ("WORD PTR ");
13580 break;
13581 default:
13582 abort ();
13583 }
13584 break;
13585 case xmm_md_mode:
13586 if (!need_vex)
13587 abort ();
13588
13589 switch (vex.length)
13590 {
13591 case 128:
13592 case 256:
43234a1e 13593 case 512:
6c30d220
L
13594 oappend ("DWORD PTR ");
13595 break;
13596 default:
13597 abort ();
13598 }
13599 break;
13600 case xmm_mq_mode:
13601 if (!need_vex)
13602 abort ();
13603
13604 switch (vex.length)
13605 {
13606 case 128:
13607 case 256:
43234a1e 13608 case 512:
6c30d220
L
13609 oappend ("QWORD PTR ");
13610 break;
13611 default:
13612 abort ();
13613 }
13614 break;
13615 case xmmdw_mode:
13616 if (!need_vex)
13617 abort ();
13618
13619 switch (vex.length)
13620 {
13621 case 128:
13622 oappend ("WORD PTR ");
13623 break;
13624 case 256:
13625 oappend ("DWORD PTR ");
13626 break;
43234a1e
L
13627 case 512:
13628 oappend ("QWORD PTR ");
13629 break;
6c30d220
L
13630 default:
13631 abort ();
13632 }
13633 break;
13634 case xmmqd_mode:
13635 if (!need_vex)
13636 abort ();
13637
13638 switch (vex.length)
13639 {
13640 case 128:
13641 oappend ("DWORD PTR ");
13642 break;
13643 case 256:
13644 oappend ("QWORD PTR ");
13645 break;
43234a1e
L
13646 case 512:
13647 oappend ("XMMWORD PTR ");
13648 break;
6c30d220
L
13649 default:
13650 abort ();
13651 }
13652 break;
c0f3af97
L
13653 case ymmq_mode:
13654 if (!need_vex)
13655 abort ();
13656
13657 switch (vex.length)
13658 {
13659 case 128:
13660 oappend ("QWORD PTR ");
13661 break;
13662 case 256:
13663 oappend ("YMMWORD PTR ");
13664 break;
43234a1e
L
13665 case 512:
13666 oappend ("ZMMWORD PTR ");
13667 break;
c0f3af97
L
13668 default:
13669 abort ();
13670 }
13671 break;
6c30d220
L
13672 case ymmxmm_mode:
13673 if (!need_vex)
13674 abort ();
13675
13676 switch (vex.length)
13677 {
13678 case 128:
13679 case 256:
13680 oappend ("XMMWORD PTR ");
13681 break;
13682 default:
13683 abort ();
13684 }
13685 break;
fb9c77c7
L
13686 case o_mode:
13687 oappend ("OWORD PTR ");
13688 break;
43234a1e 13689 case xmm_mdq_mode:
0bfee649 13690 case vex_w_dq_mode:
1c480963 13691 case vex_scalar_w_dq_mode:
0bfee649
L
13692 if (!need_vex)
13693 abort ();
13694
13695 if (vex.w)
13696 oappend ("QWORD PTR ");
13697 else
13698 oappend ("DWORD PTR ");
13699 break;
43234a1e
L
13700 case vex_vsib_d_w_dq_mode:
13701 case vex_vsib_q_w_dq_mode:
13702 if (!need_vex)
13703 abort ();
13704
13705 if (!vex.evex)
13706 {
13707 if (vex.w)
13708 oappend ("QWORD PTR ");
13709 else
13710 oappend ("DWORD PTR ");
13711 }
13712 else
13713 {
b28d1bda
IT
13714 switch (vex.length)
13715 {
13716 case 128:
13717 oappend ("XMMWORD PTR ");
13718 break;
13719 case 256:
13720 oappend ("YMMWORD PTR ");
13721 break;
13722 case 512:
13723 oappend ("ZMMWORD PTR ");
13724 break;
13725 default:
13726 abort ();
13727 }
43234a1e
L
13728 }
13729 break;
5fc35d96
IT
13730 case vex_vsib_q_w_d_mode:
13731 case vex_vsib_d_w_d_mode:
b28d1bda 13732 if (!need_vex || !vex.evex)
5fc35d96
IT
13733 abort ();
13734
b28d1bda
IT
13735 switch (vex.length)
13736 {
13737 case 128:
13738 oappend ("QWORD PTR ");
13739 break;
13740 case 256:
13741 oappend ("XMMWORD PTR ");
13742 break;
13743 case 512:
13744 oappend ("YMMWORD PTR ");
13745 break;
13746 default:
13747 abort ();
13748 }
5fc35d96
IT
13749
13750 break;
1ba585e8
IT
13751 case mask_bd_mode:
13752 if (!need_vex || vex.length != 128)
13753 abort ();
13754 if (vex.w)
13755 oappend ("DWORD PTR ");
13756 else
13757 oappend ("BYTE PTR ");
13758 break;
43234a1e
L
13759 case mask_mode:
13760 if (!need_vex)
13761 abort ();
1ba585e8
IT
13762 if (vex.w)
13763 oappend ("QWORD PTR ");
13764 else
13765 oappend ("WORD PTR ");
43234a1e 13766 break;
6c75cc62 13767 case v_bnd_mode:
d276ec69 13768 case v_bndmk_mode:
3f31e633
JB
13769 default:
13770 break;
13771 }
13772}
13773
252b5132 13774static void
c0f3af97 13775OP_E_register (int bytemode, int sizeflag)
252b5132 13776{
c0f3af97
L
13777 int reg = modrm.rm;
13778 const char **names;
252b5132 13779
c0f3af97
L
13780 USED_REX (REX_B);
13781 if ((rex & REX_B))
13782 reg += 8;
252b5132 13783
b6169b20 13784 if ((sizeflag & SUFFIX_ALWAYS)
1ba585e8 13785 && (bytemode == b_swap_mode
9f79e886 13786 || bytemode == bnd_swap_mode
60227d64 13787 || bytemode == v_swap_mode))
b6169b20
L
13788 swap_operand ();
13789
c0f3af97 13790 switch (bytemode)
252b5132 13791 {
c0f3af97 13792 case b_mode:
b6169b20 13793 case b_swap_mode:
c0f3af97
L
13794 USED_REX (0);
13795 if (rex)
13796 names = names8rex;
13797 else
13798 names = names8;
13799 break;
13800 case w_mode:
13801 names = names16;
13802 break;
13803 case d_mode:
1ba585e8
IT
13804 case dw_mode:
13805 case db_mode:
c0f3af97
L
13806 names = names32;
13807 break;
13808 case q_mode:
13809 names = names64;
13810 break;
13811 case m_mode:
6c75cc62 13812 case v_bnd_mode:
c0f3af97
L
13813 names = address_mode == mode_64bit ? names64 : names32;
13814 break;
7e8b059b 13815 case bnd_mode:
9f79e886 13816 case bnd_swap_mode:
0d96e4df
L
13817 if (reg > 0x3)
13818 {
13819 oappend ("(bad)");
13820 return;
13821 }
7e8b059b
L
13822 names = names_bnd;
13823 break;
07f5af7d
L
13824 case indir_v_mode:
13825 if (address_mode == mode_64bit && isa64 == intel64)
13826 {
13827 names = names64;
13828 break;
13829 }
1a0670f3 13830 /* Fall through. */
c0f3af97 13831 case stack_v_mode:
7bb15c6f 13832 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
252b5132 13833 {
c0f3af97 13834 names = names64;
252b5132 13835 break;
252b5132 13836 }
c0f3af97 13837 bytemode = v_mode;
1a0670f3 13838 /* Fall through. */
c0f3af97 13839 case v_mode:
b6169b20 13840 case v_swap_mode:
c0f3af97
L
13841 case dq_mode:
13842 case dqb_mode:
13843 case dqd_mode:
13844 case dqw_mode:
13845 USED_REX (REX_W);
13846 if (rex & REX_W)
13847 names = names64;
c0f3af97 13848 else
f16cd0d5 13849 {
7bb15c6f 13850 if ((sizeflag & DFLAG)
f16cd0d5
L
13851 || (bytemode != v_mode
13852 && bytemode != v_swap_mode))
13853 names = names32;
13854 else
13855 names = names16;
13856 used_prefixes |= (prefixes & PREFIX_DATA);
13857 }
c0f3af97 13858 break;
de89d0a3
IT
13859 case va_mode:
13860 names = (address_mode == mode_64bit
13861 ? names64 : names32);
13862 if (!(prefixes & PREFIX_ADDR))
aa178437
IT
13863 names = (address_mode == mode_16bit
13864 ? names16 : names);
de89d0a3
IT
13865 else
13866 {
13867 /* Remove "addr16/addr32". */
13868 all_prefixes[last_addr_prefix] = 0;
13869 names = (address_mode != mode_32bit
13870 ? names32 : names16);
13871 used_prefixes |= PREFIX_ADDR;
13872 }
13873 break;
1ba585e8 13874 case mask_bd_mode:
43234a1e 13875 case mask_mode:
9889cbb1
L
13876 if (reg > 0x7)
13877 {
13878 oappend ("(bad)");
13879 return;
13880 }
43234a1e
L
13881 names = names_mask;
13882 break;
c0f3af97
L
13883 case 0:
13884 return;
13885 default:
13886 oappend (INTERNAL_DISASSEMBLER_ERROR);
252b5132
RH
13887 return;
13888 }
c0f3af97
L
13889 oappend (names[reg]);
13890}
13891
13892static void
c1e679ec 13893OP_E_memory (int bytemode, int sizeflag)
c0f3af97
L
13894{
13895 bfd_vma disp = 0;
13896 int add = (rex & REX_B) ? 8 : 0;
13897 int riprel = 0;
43234a1e
L
13898 int shift;
13899
13900 if (vex.evex)
13901 {
13902 /* In EVEX, if operand doesn't allow broadcast, vex.b should be 0. */
13903 if (vex.b
13904 && bytemode != x_mode
90a915bf 13905 && bytemode != xmmq_mode
43234a1e
L
13906 && bytemode != evex_half_bcst_xmmq_mode)
13907 {
13908 BadOp ();
13909 return;
13910 }
13911 switch (bytemode)
13912 {
1ba585e8
IT
13913 case dqw_mode:
13914 case dw_mode:
1ba585e8
IT
13915 shift = 1;
13916 break;
13917 case dqb_mode:
13918 case db_mode:
13919 shift = 0;
13920 break;
b50c9f31
JB
13921 case dq_mode:
13922 if (address_mode != mode_64bit)
13923 {
13924 shift = 2;
13925 break;
13926 }
13927 /* fall through */
43234a1e 13928 case vex_vsib_d_w_dq_mode:
5fc35d96 13929 case vex_vsib_d_w_d_mode:
eaa9d1ad 13930 case vex_vsib_q_w_dq_mode:
5fc35d96 13931 case vex_vsib_q_w_d_mode:
43234a1e
L
13932 case evex_x_gscat_mode:
13933 case xmm_mdq_mode:
13934 shift = vex.w ? 3 : 2;
13935 break;
43234a1e
L
13936 case x_mode:
13937 case evex_half_bcst_xmmq_mode:
90a915bf 13938 case xmmq_mode:
43234a1e
L
13939 if (vex.b)
13940 {
13941 shift = vex.w ? 3 : 2;
13942 break;
13943 }
1a0670f3 13944 /* Fall through. */
43234a1e
L
13945 case xmmqd_mode:
13946 case xmmdw_mode:
43234a1e
L
13947 case ymmq_mode:
13948 case evex_x_nobcst_mode:
13949 case x_swap_mode:
13950 switch (vex.length)
13951 {
13952 case 128:
13953 shift = 4;
13954 break;
13955 case 256:
13956 shift = 5;
13957 break;
13958 case 512:
13959 shift = 6;
13960 break;
13961 default:
13962 abort ();
13963 }
13964 break;
13965 case ymm_mode:
13966 shift = 5;
13967 break;
13968 case xmm_mode:
13969 shift = 4;
13970 break;
13971 case xmm_mq_mode:
13972 case q_mode:
13973 case q_scalar_mode:
13974 case q_swap_mode:
13975 case q_scalar_swap_mode:
13976 shift = 3;
13977 break;
13978 case dqd_mode:
13979 case xmm_md_mode:
13980 case d_mode:
13981 case d_scalar_mode:
13982 case d_swap_mode:
13983 case d_scalar_swap_mode:
13984 shift = 2;
13985 break;
5074ad8a 13986 case w_scalar_mode:
43234a1e
L
13987 case xmm_mw_mode:
13988 shift = 1;
13989 break;
5074ad8a 13990 case b_scalar_mode:
43234a1e
L
13991 case xmm_mb_mode:
13992 shift = 0;
13993 break;
13994 default:
13995 abort ();
13996 }
13997 /* Make necessary corrections to shift for modes that need it.
13998 For these modes we currently have shift 4, 5 or 6 depending on
13999 vex.length (it corresponds to xmmword, ymmword or zmmword
14000 operand). We might want to make it 3, 4 or 5 (e.g. for
14001 xmmq_mode). In case of broadcast enabled the corrections
14002 aren't needed, as element size is always 32 or 64 bits. */
90a915bf
IT
14003 if (!vex.b
14004 && (bytemode == xmmq_mode
14005 || bytemode == evex_half_bcst_xmmq_mode))
43234a1e
L
14006 shift -= 1;
14007 else if (bytemode == xmmqd_mode)
14008 shift -= 2;
14009 else if (bytemode == xmmdw_mode)
14010 shift -= 3;
b28d1bda
IT
14011 else if (bytemode == ymmq_mode && vex.length == 128)
14012 shift -= 1;
43234a1e
L
14013 }
14014 else
14015 shift = 0;
252b5132 14016
c0f3af97 14017 USED_REX (REX_B);
3f31e633
JB
14018 if (intel_syntax)
14019 intel_operand_size (bytemode, sizeflag);
252b5132
RH
14020 append_seg ();
14021
5d669648 14022 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132 14023 {
5d669648
L
14024 /* 32/64 bit address mode */
14025 int havedisp;
252b5132
RH
14026 int havesib;
14027 int havebase;
0f7da397 14028 int haveindex;
20afcfb7 14029 int needindex;
1bc60e56 14030 int needaddr32;
82c18208 14031 int base, rbase;
91d6fa6a 14032 int vindex = 0;
252b5132 14033 int scale = 0;
7e8b059b
L
14034 int addr32flag = !((sizeflag & AFLAG)
14035 || bytemode == v_bnd_mode
d276ec69 14036 || bytemode == v_bndmk_mode
9f79e886
JB
14037 || bytemode == bnd_mode
14038 || bytemode == bnd_swap_mode);
6c30d220
L
14039 const char **indexes64 = names64;
14040 const char **indexes32 = names32;
252b5132
RH
14041
14042 havesib = 0;
14043 havebase = 1;
0f7da397 14044 haveindex = 0;
7967e09e 14045 base = modrm.rm;
252b5132
RH
14046
14047 if (base == 4)
14048 {
14049 havesib = 1;
dfc8cf43 14050 vindex = sib.index;
161a04f6
L
14051 USED_REX (REX_X);
14052 if (rex & REX_X)
91d6fa6a 14053 vindex += 8;
6c30d220
L
14054 switch (bytemode)
14055 {
14056 case vex_vsib_d_w_dq_mode:
5fc35d96 14057 case vex_vsib_d_w_d_mode:
6c30d220 14058 case vex_vsib_q_w_dq_mode:
5fc35d96 14059 case vex_vsib_q_w_d_mode:
6c30d220
L
14060 if (!need_vex)
14061 abort ();
43234a1e
L
14062 if (vex.evex)
14063 {
14064 if (!vex.v)
14065 vindex += 16;
14066 }
6c30d220
L
14067
14068 haveindex = 1;
14069 switch (vex.length)
14070 {
14071 case 128:
7bb15c6f 14072 indexes64 = indexes32 = names_xmm;
6c30d220
L
14073 break;
14074 case 256:
5fc35d96
IT
14075 if (!vex.w
14076 || bytemode == vex_vsib_q_w_dq_mode
14077 || bytemode == vex_vsib_q_w_d_mode)
7bb15c6f 14078 indexes64 = indexes32 = names_ymm;
6c30d220 14079 else
7bb15c6f 14080 indexes64 = indexes32 = names_xmm;
6c30d220 14081 break;
43234a1e 14082 case 512:
5fc35d96
IT
14083 if (!vex.w
14084 || bytemode == vex_vsib_q_w_dq_mode
14085 || bytemode == vex_vsib_q_w_d_mode)
43234a1e
L
14086 indexes64 = indexes32 = names_zmm;
14087 else
14088 indexes64 = indexes32 = names_ymm;
14089 break;
6c30d220
L
14090 default:
14091 abort ();
14092 }
14093 break;
14094 default:
14095 haveindex = vindex != 4;
14096 break;
14097 }
14098 scale = sib.scale;
14099 base = sib.base;
252b5132
RH
14100 codep++;
14101 }
82c18208 14102 rbase = base + add;
252b5132 14103
7967e09e 14104 switch (modrm.mod)
252b5132
RH
14105 {
14106 case 0:
82c18208 14107 if (base == 5)
252b5132
RH
14108 {
14109 havebase = 0;
cb712a9e 14110 if (address_mode == mode_64bit && !havesib)
52b15da3
JH
14111 riprel = 1;
14112 disp = get32s ();
d276ec69
JB
14113 if (riprel && bytemode == v_bndmk_mode)
14114 {
14115 oappend ("(bad)");
14116 return;
14117 }
252b5132
RH
14118 }
14119 break;
14120 case 1:
14121 FETCH_DATA (the_info, codep + 1);
14122 disp = *codep++;
14123 if ((disp & 0x80) != 0)
14124 disp -= 0x100;
43234a1e
L
14125 if (vex.evex && shift > 0)
14126 disp <<= shift;
252b5132
RH
14127 break;
14128 case 2:
52b15da3 14129 disp = get32s ();
252b5132
RH
14130 break;
14131 }
14132
1bc60e56
L
14133 needindex = 0;
14134 needaddr32 = 0;
14135 if (havesib
14136 && !havebase
14137 && !haveindex
14138 && address_mode != mode_16bit)
14139 {
14140 if (address_mode == mode_64bit)
14141 {
14142 /* Display eiz instead of addr32. */
14143 needindex = addr32flag;
14144 needaddr32 = 1;
14145 }
14146 else
14147 {
14148 /* In 32-bit mode, we need index register to tell [offset]
14149 from [eiz*1 + offset]. */
14150 needindex = 1;
14151 }
14152 }
14153
20afcfb7
L
14154 havedisp = (havebase
14155 || needindex
14156 || (havesib && (haveindex || scale != 0)));
5d669648 14157
252b5132 14158 if (!intel_syntax)
82c18208 14159 if (modrm.mod != 0 || base == 5)
db6eb5be 14160 {
5d669648
L
14161 if (havedisp || riprel)
14162 print_displacement (scratchbuf, disp);
14163 else
14164 print_operand_value (scratchbuf, 1, disp);
db6eb5be 14165 oappend (scratchbuf);
52b15da3
JH
14166 if (riprel)
14167 {
14168 set_op (disp, 1);
28596323 14169 oappend (!addr32flag ? "(%rip)" : "(%eip)");
52b15da3 14170 }
db6eb5be 14171 }
2da11e11 14172
c1dc7af5 14173 if ((havebase || haveindex || needindex || needaddr32 || riprel)
7e8b059b 14174 && (bytemode != v_bnd_mode)
d276ec69 14175 && (bytemode != v_bndmk_mode)
9f79e886
JB
14176 && (bytemode != bnd_mode)
14177 && (bytemode != bnd_swap_mode))
87767711
JB
14178 used_prefixes |= PREFIX_ADDR;
14179
5d669648 14180 if (havedisp || (intel_syntax && riprel))
252b5132 14181 {
252b5132 14182 *obufp++ = open_char;
52b15da3 14183 if (intel_syntax && riprel)
185b1163
L
14184 {
14185 set_op (disp, 1);
28596323 14186 oappend (!addr32flag ? "rip" : "eip");
185b1163 14187 }
db6eb5be 14188 *obufp = '\0';
252b5132 14189 if (havebase)
7e8b059b 14190 oappend (address_mode == mode_64bit && !addr32flag
82c18208 14191 ? names64[rbase] : names32[rbase]);
252b5132
RH
14192 if (havesib)
14193 {
db51cc60
L
14194 /* ESP/RSP won't allow index. If base isn't ESP/RSP,
14195 print index to tell base + index from base. */
14196 if (scale != 0
20afcfb7 14197 || needindex
db51cc60
L
14198 || haveindex
14199 || (havebase && base != ESP_REG_NUM))
252b5132 14200 {
9306ca4a 14201 if (!intel_syntax || havebase)
db6eb5be 14202 {
9306ca4a
JB
14203 *obufp++ = separator_char;
14204 *obufp = '\0';
db6eb5be 14205 }
db51cc60 14206 if (haveindex)
7e8b059b 14207 oappend (address_mode == mode_64bit && !addr32flag
6c30d220 14208 ? indexes64[vindex] : indexes32[vindex]);
db51cc60 14209 else
7e8b059b 14210 oappend (address_mode == mode_64bit && !addr32flag
db51cc60
L
14211 ? index64 : index32);
14212
db6eb5be
AM
14213 *obufp++ = scale_char;
14214 *obufp = '\0';
14215 sprintf (scratchbuf, "%d", 1 << scale);
14216 oappend (scratchbuf);
14217 }
252b5132 14218 }
185b1163 14219 if (intel_syntax
82c18208 14220 && (disp || modrm.mod != 0 || base == 5))
3d456fa1 14221 {
db51cc60 14222 if (!havedisp || (bfd_signed_vma) disp >= 0)
3d456fa1
JB
14223 {
14224 *obufp++ = '+';
14225 *obufp = '\0';
14226 }
05203043 14227 else if (modrm.mod != 1 && disp != -disp)
3d456fa1
JB
14228 {
14229 *obufp++ = '-';
14230 *obufp = '\0';
14231 disp = - (bfd_signed_vma) disp;
14232 }
14233
db51cc60
L
14234 if (havedisp)
14235 print_displacement (scratchbuf, disp);
14236 else
14237 print_operand_value (scratchbuf, 1, disp);
3d456fa1
JB
14238 oappend (scratchbuf);
14239 }
252b5132
RH
14240
14241 *obufp++ = close_char;
db6eb5be 14242 *obufp = '\0';
252b5132
RH
14243 }
14244 else if (intel_syntax)
db6eb5be 14245 {
82c18208 14246 if (modrm.mod != 0 || base == 5)
db6eb5be 14247 {
285ca992 14248 if (!active_seg_prefix)
252b5132 14249 {
d708bcba 14250 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
14251 oappend (":");
14252 }
52b15da3 14253 print_operand_value (scratchbuf, 1, disp);
db6eb5be
AM
14254 oappend (scratchbuf);
14255 }
14256 }
252b5132
RH
14257 }
14258 else
f16cd0d5
L
14259 {
14260 /* 16 bit address mode */
14261 used_prefixes |= prefixes & PREFIX_ADDR;
7967e09e 14262 switch (modrm.mod)
252b5132
RH
14263 {
14264 case 0:
7967e09e 14265 if (modrm.rm == 6)
252b5132
RH
14266 {
14267 disp = get16 ();
14268 if ((disp & 0x8000) != 0)
14269 disp -= 0x10000;
14270 }
14271 break;
14272 case 1:
14273 FETCH_DATA (the_info, codep + 1);
14274 disp = *codep++;
14275 if ((disp & 0x80) != 0)
14276 disp -= 0x100;
65f3ed04
JB
14277 if (vex.evex && shift > 0)
14278 disp <<= shift;
252b5132
RH
14279 break;
14280 case 2:
14281 disp = get16 ();
14282 if ((disp & 0x8000) != 0)
14283 disp -= 0x10000;
14284 break;
14285 }
14286
14287 if (!intel_syntax)
7967e09e 14288 if (modrm.mod != 0 || modrm.rm == 6)
db6eb5be 14289 {
5d669648 14290 print_displacement (scratchbuf, disp);
db6eb5be
AM
14291 oappend (scratchbuf);
14292 }
252b5132 14293
7967e09e 14294 if (modrm.mod != 0 || modrm.rm != 6)
252b5132
RH
14295 {
14296 *obufp++ = open_char;
db6eb5be 14297 *obufp = '\0';
7967e09e 14298 oappend (index16[modrm.rm]);
5d669648
L
14299 if (intel_syntax
14300 && (disp || modrm.mod != 0 || modrm.rm == 6))
3d456fa1 14301 {
5d669648 14302 if ((bfd_signed_vma) disp >= 0)
3d456fa1
JB
14303 {
14304 *obufp++ = '+';
14305 *obufp = '\0';
14306 }
7967e09e 14307 else if (modrm.mod != 1)
3d456fa1
JB
14308 {
14309 *obufp++ = '-';
14310 *obufp = '\0';
14311 disp = - (bfd_signed_vma) disp;
14312 }
14313
5d669648 14314 print_displacement (scratchbuf, disp);
3d456fa1
JB
14315 oappend (scratchbuf);
14316 }
14317
db6eb5be
AM
14318 *obufp++ = close_char;
14319 *obufp = '\0';
252b5132 14320 }
3d456fa1
JB
14321 else if (intel_syntax)
14322 {
285ca992 14323 if (!active_seg_prefix)
3d456fa1
JB
14324 {
14325 oappend (names_seg[ds_reg - es_reg]);
14326 oappend (":");
14327 }
14328 print_operand_value (scratchbuf, 1, disp & 0xffff);
14329 oappend (scratchbuf);
14330 }
252b5132 14331 }
43234a1e
L
14332 if (vex.evex && vex.b
14333 && (bytemode == x_mode
90a915bf 14334 || bytemode == xmmq_mode
43234a1e
L
14335 || bytemode == evex_half_bcst_xmmq_mode))
14336 {
90a915bf
IT
14337 if (vex.w
14338 || bytemode == xmmq_mode
14339 || bytemode == evex_half_bcst_xmmq_mode)
b28d1bda
IT
14340 {
14341 switch (vex.length)
14342 {
14343 case 128:
14344 oappend ("{1to2}");
14345 break;
14346 case 256:
14347 oappend ("{1to4}");
14348 break;
14349 case 512:
14350 oappend ("{1to8}");
14351 break;
14352 default:
14353 abort ();
14354 }
14355 }
43234a1e 14356 else
b28d1bda
IT
14357 {
14358 switch (vex.length)
14359 {
14360 case 128:
14361 oappend ("{1to4}");
14362 break;
14363 case 256:
14364 oappend ("{1to8}");
14365 break;
14366 case 512:
14367 oappend ("{1to16}");
14368 break;
14369 default:
14370 abort ();
14371 }
14372 }
43234a1e 14373 }
252b5132
RH
14374}
14375
c0f3af97 14376static void
8b3f93e7 14377OP_E (int bytemode, int sizeflag)
c0f3af97
L
14378{
14379 /* Skip mod/rm byte. */
14380 MODRM_CHECK;
14381 codep++;
14382
14383 if (modrm.mod == 3)
14384 OP_E_register (bytemode, sizeflag);
14385 else
c1e679ec 14386 OP_E_memory (bytemode, sizeflag);
c0f3af97
L
14387}
14388
252b5132 14389static void
26ca5450 14390OP_G (int bytemode, int sizeflag)
252b5132 14391{
52b15da3 14392 int add = 0;
c0a30a9f 14393 const char **names;
161a04f6
L
14394 USED_REX (REX_R);
14395 if (rex & REX_R)
52b15da3 14396 add += 8;
252b5132
RH
14397 switch (bytemode)
14398 {
14399 case b_mode:
52b15da3
JH
14400 USED_REX (0);
14401 if (rex)
7967e09e 14402 oappend (names8rex[modrm.reg + add]);
52b15da3 14403 else
7967e09e 14404 oappend (names8[modrm.reg + add]);
252b5132
RH
14405 break;
14406 case w_mode:
7967e09e 14407 oappend (names16[modrm.reg + add]);
252b5132
RH
14408 break;
14409 case d_mode:
1ba585e8
IT
14410 case db_mode:
14411 case dw_mode:
7967e09e 14412 oappend (names32[modrm.reg + add]);
52b15da3
JH
14413 break;
14414 case q_mode:
7967e09e 14415 oappend (names64[modrm.reg + add]);
252b5132 14416 break;
7e8b059b 14417 case bnd_mode:
0d96e4df
L
14418 if (modrm.reg > 0x3)
14419 {
14420 oappend ("(bad)");
14421 return;
14422 }
7e8b059b
L
14423 oappend (names_bnd[modrm.reg]);
14424 break;
252b5132 14425 case v_mode:
9306ca4a 14426 case dq_mode:
42903f7f
L
14427 case dqb_mode:
14428 case dqd_mode:
9306ca4a 14429 case dqw_mode:
161a04f6
L
14430 USED_REX (REX_W);
14431 if (rex & REX_W)
7967e09e 14432 oappend (names64[modrm.reg + add]);
252b5132 14433 else
f16cd0d5
L
14434 {
14435 if ((sizeflag & DFLAG) || bytemode != v_mode)
14436 oappend (names32[modrm.reg + add]);
14437 else
14438 oappend (names16[modrm.reg + add]);
14439 used_prefixes |= (prefixes & PREFIX_DATA);
14440 }
252b5132 14441 break;
c0a30a9f
L
14442 case va_mode:
14443 names = (address_mode == mode_64bit
14444 ? names64 : names32);
14445 if (!(prefixes & PREFIX_ADDR))
14446 {
14447 if (address_mode == mode_16bit)
14448 names = names16;
14449 }
14450 else
14451 {
14452 /* Remove "addr16/addr32". */
14453 all_prefixes[last_addr_prefix] = 0;
14454 names = (address_mode != mode_32bit
14455 ? names32 : names16);
14456 used_prefixes |= PREFIX_ADDR;
14457 }
14458 oappend (names[modrm.reg + add]);
14459 break;
90700ea2 14460 case m_mode:
cb712a9e 14461 if (address_mode == mode_64bit)
7967e09e 14462 oappend (names64[modrm.reg + add]);
90700ea2 14463 else
7967e09e 14464 oappend (names32[modrm.reg + add]);
90700ea2 14465 break;
1ba585e8 14466 case mask_bd_mode:
43234a1e 14467 case mask_mode:
9889cbb1
L
14468 if ((modrm.reg + add) > 0x7)
14469 {
14470 oappend ("(bad)");
14471 return;
14472 }
43234a1e
L
14473 oappend (names_mask[modrm.reg + add]);
14474 break;
252b5132
RH
14475 default:
14476 oappend (INTERNAL_DISASSEMBLER_ERROR);
14477 break;
14478 }
14479}
14480
52b15da3 14481static bfd_vma
26ca5450 14482get64 (void)
52b15da3 14483{
5dd0794d 14484 bfd_vma x;
52b15da3 14485#ifdef BFD64
5dd0794d
AM
14486 unsigned int a;
14487 unsigned int b;
14488
52b15da3
JH
14489 FETCH_DATA (the_info, codep + 8);
14490 a = *codep++ & 0xff;
14491 a |= (*codep++ & 0xff) << 8;
14492 a |= (*codep++ & 0xff) << 16;
070fe95d 14493 a |= (*codep++ & 0xffu) << 24;
5dd0794d 14494 b = *codep++ & 0xff;
52b15da3
JH
14495 b |= (*codep++ & 0xff) << 8;
14496 b |= (*codep++ & 0xff) << 16;
070fe95d 14497 b |= (*codep++ & 0xffu) << 24;
52b15da3
JH
14498 x = a + ((bfd_vma) b << 32);
14499#else
6608db57 14500 abort ();
5dd0794d 14501 x = 0;
52b15da3
JH
14502#endif
14503 return x;
14504}
14505
14506static bfd_signed_vma
26ca5450 14507get32 (void)
252b5132 14508{
52b15da3 14509 bfd_signed_vma x = 0;
252b5132
RH
14510
14511 FETCH_DATA (the_info, codep + 4);
52b15da3
JH
14512 x = *codep++ & (bfd_signed_vma) 0xff;
14513 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
14514 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
14515 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
14516 return x;
14517}
14518
14519static bfd_signed_vma
26ca5450 14520get32s (void)
52b15da3
JH
14521{
14522 bfd_signed_vma x = 0;
14523
14524 FETCH_DATA (the_info, codep + 4);
14525 x = *codep++ & (bfd_signed_vma) 0xff;
14526 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
14527 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
14528 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
14529
14530 x = (x ^ ((bfd_signed_vma) 1 << 31)) - ((bfd_signed_vma) 1 << 31);
14531
252b5132
RH
14532 return x;
14533}
14534
14535static int
26ca5450 14536get16 (void)
252b5132
RH
14537{
14538 int x = 0;
14539
14540 FETCH_DATA (the_info, codep + 2);
14541 x = *codep++ & 0xff;
14542 x |= (*codep++ & 0xff) << 8;
14543 return x;
14544}
14545
14546static void
26ca5450 14547set_op (bfd_vma op, int riprel)
252b5132
RH
14548{
14549 op_index[op_ad] = op_ad;
cb712a9e 14550 if (address_mode == mode_64bit)
7081ff04
AJ
14551 {
14552 op_address[op_ad] = op;
14553 op_riprel[op_ad] = riprel;
14554 }
14555 else
14556 {
14557 /* Mask to get a 32-bit address. */
14558 op_address[op_ad] = op & 0xffffffff;
14559 op_riprel[op_ad] = riprel & 0xffffffff;
14560 }
252b5132
RH
14561}
14562
14563static void
26ca5450 14564OP_REG (int code, int sizeflag)
252b5132 14565{
2da11e11 14566 const char *s;
9b60702d 14567 int add;
de882298
RM
14568
14569 switch (code)
14570 {
14571 case es_reg: case ss_reg: case cs_reg:
14572 case ds_reg: case fs_reg: case gs_reg:
14573 oappend (names_seg[code - es_reg]);
14574 return;
14575 }
14576
161a04f6
L
14577 USED_REX (REX_B);
14578 if (rex & REX_B)
52b15da3 14579 add = 8;
9b60702d
L
14580 else
14581 add = 0;
52b15da3
JH
14582
14583 switch (code)
14584 {
52b15da3
JH
14585 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
14586 case sp_reg: case bp_reg: case si_reg: case di_reg:
14587 s = names16[code - ax_reg + add];
14588 break;
52b15da3
JH
14589 case al_reg: case ah_reg: case cl_reg: case ch_reg:
14590 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
14591 USED_REX (0);
14592 if (rex)
14593 s = names8rex[code - al_reg + add];
14594 else
14595 s = names8[code - al_reg];
14596 break;
6439fc28
AM
14597 case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg:
14598 case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg:
7bb15c6f 14599 if (address_mode == mode_64bit
6c067bbb 14600 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
14601 {
14602 s = names64[code - rAX_reg + add];
14603 break;
14604 }
14605 code += eAX_reg - rAX_reg;
6608db57 14606 /* Fall through. */
52b15da3
JH
14607 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
14608 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
14609 USED_REX (REX_W);
14610 if (rex & REX_W)
52b15da3 14611 s = names64[code - eAX_reg + add];
52b15da3 14612 else
f16cd0d5
L
14613 {
14614 if (sizeflag & DFLAG)
14615 s = names32[code - eAX_reg + add];
14616 else
14617 s = names16[code - eAX_reg + add];
14618 used_prefixes |= (prefixes & PREFIX_DATA);
14619 }
52b15da3 14620 break;
52b15da3
JH
14621 default:
14622 s = INTERNAL_DISASSEMBLER_ERROR;
14623 break;
14624 }
14625 oappend (s);
14626}
14627
14628static void
26ca5450 14629OP_IMREG (int code, int sizeflag)
52b15da3
JH
14630{
14631 const char *s;
252b5132
RH
14632
14633 switch (code)
14634 {
14635 case indir_dx_reg:
d708bcba 14636 if (intel_syntax)
52fd6d94 14637 s = "dx";
d708bcba 14638 else
db6eb5be 14639 s = "(%dx)";
252b5132
RH
14640 break;
14641 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
14642 case sp_reg: case bp_reg: case si_reg: case di_reg:
14643 s = names16[code - ax_reg];
14644 break;
14645 case es_reg: case ss_reg: case cs_reg:
14646 case ds_reg: case fs_reg: case gs_reg:
14647 s = names_seg[code - es_reg];
14648 break;
14649 case al_reg: case ah_reg: case cl_reg: case ch_reg:
14650 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
52b15da3
JH
14651 USED_REX (0);
14652 if (rex)
14653 s = names8rex[code - al_reg];
14654 else
14655 s = names8[code - al_reg];
252b5132
RH
14656 break;
14657 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
14658 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
14659 USED_REX (REX_W);
14660 if (rex & REX_W)
52b15da3 14661 s = names64[code - eAX_reg];
252b5132 14662 else
f16cd0d5
L
14663 {
14664 if (sizeflag & DFLAG)
14665 s = names32[code - eAX_reg];
14666 else
14667 s = names16[code - eAX_reg];
14668 used_prefixes |= (prefixes & PREFIX_DATA);
14669 }
252b5132 14670 break;
52fd6d94 14671 case z_mode_ax_reg:
161a04f6 14672 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
14673 s = *names32;
14674 else
14675 s = *names16;
161a04f6 14676 if (!(rex & REX_W))
52fd6d94
JB
14677 used_prefixes |= (prefixes & PREFIX_DATA);
14678 break;
252b5132
RH
14679 default:
14680 s = INTERNAL_DISASSEMBLER_ERROR;
14681 break;
14682 }
14683 oappend (s);
14684}
14685
14686static void
26ca5450 14687OP_I (int bytemode, int sizeflag)
252b5132 14688{
52b15da3
JH
14689 bfd_signed_vma op;
14690 bfd_signed_vma mask = -1;
252b5132
RH
14691
14692 switch (bytemode)
14693 {
14694 case b_mode:
14695 FETCH_DATA (the_info, codep + 1);
52b15da3
JH
14696 op = *codep++;
14697 mask = 0xff;
14698 break;
252b5132 14699 case v_mode:
161a04f6
L
14700 USED_REX (REX_W);
14701 if (rex & REX_W)
52b15da3 14702 op = get32s ();
252b5132 14703 else
52b15da3 14704 {
f16cd0d5
L
14705 if (sizeflag & DFLAG)
14706 {
14707 op = get32 ();
14708 mask = 0xffffffff;
14709 }
14710 else
14711 {
14712 op = get16 ();
14713 mask = 0xfffff;
14714 }
14715 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 14716 }
252b5132 14717 break;
c1dc7af5
JB
14718 case d_mode:
14719 mask = 0xffffffff;
14720 op = get32 ();
14721 break;
252b5132 14722 case w_mode:
52b15da3 14723 mask = 0xfffff;
252b5132
RH
14724 op = get16 ();
14725 break;
9306ca4a
JB
14726 case const_1_mode:
14727 if (intel_syntax)
6c067bbb 14728 oappend ("1");
9306ca4a 14729 return;
252b5132
RH
14730 default:
14731 oappend (INTERNAL_DISASSEMBLER_ERROR);
14732 return;
14733 }
14734
52b15da3
JH
14735 op &= mask;
14736 scratchbuf[0] = '$';
d708bcba 14737 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 14738 oappend_maybe_intel (scratchbuf);
52b15da3
JH
14739 scratchbuf[0] = '\0';
14740}
14741
14742static void
26ca5450 14743OP_I64 (int bytemode, int sizeflag)
52b15da3 14744{
a280ab8e 14745 if (bytemode != v_mode || address_mode != mode_64bit || !(rex & REX_W))
6439fc28
AM
14746 {
14747 OP_I (bytemode, sizeflag);
14748 return;
14749 }
14750
a280ab8e 14751 USED_REX (REX_W);
52b15da3 14752
52b15da3 14753 scratchbuf[0] = '$';
a280ab8e 14754 print_operand_value (scratchbuf + 1, 1, get64 ());
9ce09ba2 14755 oappend_maybe_intel (scratchbuf);
252b5132
RH
14756 scratchbuf[0] = '\0';
14757}
14758
14759static void
26ca5450 14760OP_sI (int bytemode, int sizeflag)
252b5132 14761{
52b15da3 14762 bfd_signed_vma op;
252b5132
RH
14763
14764 switch (bytemode)
14765 {
14766 case b_mode:
e3949f17 14767 case b_T_mode:
252b5132
RH
14768 FETCH_DATA (the_info, codep + 1);
14769 op = *codep++;
14770 if ((op & 0x80) != 0)
14771 op -= 0x100;
e3949f17
L
14772 if (bytemode == b_T_mode)
14773 {
14774 if (address_mode != mode_64bit
7bb15c6f 14775 || !((sizeflag & DFLAG) || (rex & REX_W)))
e3949f17 14776 {
6c067bbb
RM
14777 /* The operand-size prefix is overridden by a REX prefix. */
14778 if ((sizeflag & DFLAG) || (rex & REX_W))
e3949f17
L
14779 op &= 0xffffffff;
14780 else
14781 op &= 0xffff;
14782 }
14783 }
14784 else
14785 {
14786 if (!(rex & REX_W))
14787 {
14788 if (sizeflag & DFLAG)
14789 op &= 0xffffffff;
14790 else
14791 op &= 0xffff;
14792 }
14793 }
252b5132
RH
14794 break;
14795 case v_mode:
7bb15c6f
RM
14796 /* The operand-size prefix is overridden by a REX prefix. */
14797 if ((sizeflag & DFLAG) || (rex & REX_W))
52b15da3 14798 op = get32s ();
252b5132 14799 else
d9e3625e 14800 op = get16 ();
252b5132
RH
14801 break;
14802 default:
14803 oappend (INTERNAL_DISASSEMBLER_ERROR);
14804 return;
14805 }
52b15da3
JH
14806
14807 scratchbuf[0] = '$';
14808 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 14809 oappend_maybe_intel (scratchbuf);
252b5132
RH
14810}
14811
14812static void
26ca5450 14813OP_J (int bytemode, int sizeflag)
252b5132 14814{
52b15da3 14815 bfd_vma disp;
7081ff04 14816 bfd_vma mask = -1;
65ca155d 14817 bfd_vma segment = 0;
252b5132
RH
14818
14819 switch (bytemode)
14820 {
14821 case b_mode:
14822 FETCH_DATA (the_info, codep + 1);
14823 disp = *codep++;
14824 if ((disp & 0x80) != 0)
14825 disp -= 0x100;
14826 break;
14827 case v_mode:
5db04b09
L
14828 if (isa64 == amd64)
14829 USED_REX (REX_W);
14830 if ((sizeflag & DFLAG)
14831 || (address_mode == mode_64bit
14832 && (isa64 != amd64 || (rex & REX_W))))
52b15da3 14833 disp = get32s ();
252b5132
RH
14834 else
14835 {
14836 disp = get16 ();
206717e8
L
14837 if ((disp & 0x8000) != 0)
14838 disp -= 0x10000;
65ca155d
L
14839 /* In 16bit mode, address is wrapped around at 64k within
14840 the same segment. Otherwise, a data16 prefix on a jump
14841 instruction means that the pc is masked to 16 bits after
14842 the displacement is added! */
14843 mask = 0xffff;
14844 if ((prefixes & PREFIX_DATA) == 0)
4fd7268a 14845 segment = ((start_pc + (codep - start_codep))
65ca155d 14846 & ~((bfd_vma) 0xffff));
252b5132 14847 }
5db04b09
L
14848 if (address_mode != mode_64bit
14849 || (isa64 == amd64 && !(rex & REX_W)))
f16cd0d5 14850 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132
RH
14851 break;
14852 default:
14853 oappend (INTERNAL_DISASSEMBLER_ERROR);
14854 return;
14855 }
42d5f9c6 14856 disp = ((start_pc + (codep - start_codep) + disp) & mask) | segment;
52b15da3
JH
14857 set_op (disp, 0);
14858 print_operand_value (scratchbuf, 1, disp);
252b5132
RH
14859 oappend (scratchbuf);
14860}
14861
252b5132 14862static void
ed7841b3 14863OP_SEG (int bytemode, int sizeflag)
252b5132 14864{
ed7841b3 14865 if (bytemode == w_mode)
7967e09e 14866 oappend (names_seg[modrm.reg]);
ed7841b3 14867 else
7967e09e 14868 OP_E (modrm.mod == 3 ? bytemode : w_mode, sizeflag);
252b5132
RH
14869}
14870
14871static void
26ca5450 14872OP_DIR (int dummy ATTRIBUTE_UNUSED, int sizeflag)
252b5132
RH
14873{
14874 int seg, offset;
14875
c608c12e 14876 if (sizeflag & DFLAG)
252b5132 14877 {
c608c12e
AM
14878 offset = get32 ();
14879 seg = get16 ();
252b5132 14880 }
c608c12e
AM
14881 else
14882 {
14883 offset = get16 ();
14884 seg = get16 ();
14885 }
7d421014 14886 used_prefixes |= (prefixes & PREFIX_DATA);
d708bcba 14887 if (intel_syntax)
3f31e633 14888 sprintf (scratchbuf, "0x%x:0x%x", seg, offset);
d708bcba
AM
14889 else
14890 sprintf (scratchbuf, "$0x%x,$0x%x", seg, offset);
c608c12e 14891 oappend (scratchbuf);
252b5132
RH
14892}
14893
252b5132 14894static void
3f31e633 14895OP_OFF (int bytemode, int sizeflag)
252b5132 14896{
52b15da3 14897 bfd_vma off;
252b5132 14898
3f31e633
JB
14899 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
14900 intel_operand_size (bytemode, sizeflag);
252b5132
RH
14901 append_seg ();
14902
cb712a9e 14903 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132
RH
14904 off = get32 ();
14905 else
14906 off = get16 ();
14907
14908 if (intel_syntax)
14909 {
285ca992 14910 if (!active_seg_prefix)
252b5132 14911 {
d708bcba 14912 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
14913 oappend (":");
14914 }
14915 }
52b15da3
JH
14916 print_operand_value (scratchbuf, 1, off);
14917 oappend (scratchbuf);
14918}
6439fc28 14919
52b15da3 14920static void
3f31e633 14921OP_OFF64 (int bytemode, int sizeflag)
52b15da3
JH
14922{
14923 bfd_vma off;
14924
539e75ad
L
14925 if (address_mode != mode_64bit
14926 || (prefixes & PREFIX_ADDR))
6439fc28
AM
14927 {
14928 OP_OFF (bytemode, sizeflag);
14929 return;
14930 }
14931
3f31e633
JB
14932 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
14933 intel_operand_size (bytemode, sizeflag);
52b15da3
JH
14934 append_seg ();
14935
6608db57 14936 off = get64 ();
52b15da3
JH
14937
14938 if (intel_syntax)
14939 {
285ca992 14940 if (!active_seg_prefix)
52b15da3 14941 {
d708bcba 14942 oappend (names_seg[ds_reg - es_reg]);
52b15da3
JH
14943 oappend (":");
14944 }
14945 }
14946 print_operand_value (scratchbuf, 1, off);
252b5132
RH
14947 oappend (scratchbuf);
14948}
14949
14950static void
26ca5450 14951ptr_reg (int code, int sizeflag)
252b5132 14952{
2da11e11 14953 const char *s;
d708bcba 14954
1d9f512f 14955 *obufp++ = open_char;
20f0a1fc 14956 used_prefixes |= (prefixes & PREFIX_ADDR);
cb712a9e 14957 if (address_mode == mode_64bit)
c1a64871
JH
14958 {
14959 if (!(sizeflag & AFLAG))
db6eb5be 14960 s = names32[code - eAX_reg];
c1a64871 14961 else
db6eb5be 14962 s = names64[code - eAX_reg];
c1a64871 14963 }
52b15da3 14964 else if (sizeflag & AFLAG)
252b5132
RH
14965 s = names32[code - eAX_reg];
14966 else
14967 s = names16[code - eAX_reg];
14968 oappend (s);
1d9f512f
AM
14969 *obufp++ = close_char;
14970 *obufp = 0;
252b5132
RH
14971}
14972
14973static void
26ca5450 14974OP_ESreg (int code, int sizeflag)
252b5132 14975{
9306ca4a 14976 if (intel_syntax)
52fd6d94
JB
14977 {
14978 switch (codep[-1])
14979 {
14980 case 0x6d: /* insw/insl */
14981 intel_operand_size (z_mode, sizeflag);
14982 break;
14983 case 0xa5: /* movsw/movsl/movsq */
14984 case 0xa7: /* cmpsw/cmpsl/cmpsq */
14985 case 0xab: /* stosw/stosl */
14986 case 0xaf: /* scasw/scasl */
14987 intel_operand_size (v_mode, sizeflag);
14988 break;
14989 default:
14990 intel_operand_size (b_mode, sizeflag);
14991 }
14992 }
9ce09ba2 14993 oappend_maybe_intel ("%es:");
252b5132
RH
14994 ptr_reg (code, sizeflag);
14995}
14996
14997static void
26ca5450 14998OP_DSreg (int code, int sizeflag)
252b5132 14999{
9306ca4a 15000 if (intel_syntax)
52fd6d94
JB
15001 {
15002 switch (codep[-1])
15003 {
15004 case 0x6f: /* outsw/outsl */
15005 intel_operand_size (z_mode, sizeflag);
15006 break;
15007 case 0xa5: /* movsw/movsl/movsq */
15008 case 0xa7: /* cmpsw/cmpsl/cmpsq */
15009 case 0xad: /* lodsw/lodsl/lodsq */
15010 intel_operand_size (v_mode, sizeflag);
15011 break;
15012 default:
15013 intel_operand_size (b_mode, sizeflag);
15014 }
15015 }
285ca992
L
15016 /* Set active_seg_prefix to PREFIX_DS if it is unset so that the
15017 default segment register DS is printed. */
15018 if (!active_seg_prefix)
15019 active_seg_prefix = PREFIX_DS;
6608db57 15020 append_seg ();
252b5132
RH
15021 ptr_reg (code, sizeflag);
15022}
15023
252b5132 15024static void
26ca5450 15025OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15026{
9b60702d 15027 int add;
161a04f6 15028 if (rex & REX_R)
c4a530c5 15029 {
161a04f6 15030 USED_REX (REX_R);
c4a530c5
JB
15031 add = 8;
15032 }
cb712a9e 15033 else if (address_mode != mode_64bit && (prefixes & PREFIX_LOCK))
c4a530c5 15034 {
f16cd0d5 15035 all_prefixes[last_lock_prefix] = 0;
c4a530c5
JB
15036 used_prefixes |= PREFIX_LOCK;
15037 add = 8;
15038 }
9b60702d
L
15039 else
15040 add = 0;
7967e09e 15041 sprintf (scratchbuf, "%%cr%d", modrm.reg + add);
9ce09ba2 15042 oappend_maybe_intel (scratchbuf);
252b5132
RH
15043}
15044
252b5132 15045static void
26ca5450 15046OP_D (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15047{
9b60702d 15048 int add;
161a04f6
L
15049 USED_REX (REX_R);
15050 if (rex & REX_R)
52b15da3 15051 add = 8;
9b60702d
L
15052 else
15053 add = 0;
d708bcba 15054 if (intel_syntax)
7967e09e 15055 sprintf (scratchbuf, "db%d", modrm.reg + add);
d708bcba 15056 else
7967e09e 15057 sprintf (scratchbuf, "%%db%d", modrm.reg + add);
252b5132
RH
15058 oappend (scratchbuf);
15059}
15060
252b5132 15061static void
26ca5450 15062OP_T (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15063{
7967e09e 15064 sprintf (scratchbuf, "%%tr%d", modrm.reg);
9ce09ba2 15065 oappend_maybe_intel (scratchbuf);
252b5132
RH
15066}
15067
15068static void
6f74c397 15069OP_R (int bytemode, int sizeflag)
252b5132 15070{
68f34464
L
15071 /* Skip mod/rm byte. */
15072 MODRM_CHECK;
15073 codep++;
15074 OP_E_register (bytemode, sizeflag);
252b5132
RH
15075}
15076
15077static void
26ca5450 15078OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15079{
b9733481
L
15080 int reg = modrm.reg;
15081 const char **names;
15082
041bd2e0
JH
15083 used_prefixes |= (prefixes & PREFIX_DATA);
15084 if (prefixes & PREFIX_DATA)
20f0a1fc 15085 {
b9733481 15086 names = names_xmm;
161a04f6
L
15087 USED_REX (REX_R);
15088 if (rex & REX_R)
b9733481 15089 reg += 8;
20f0a1fc 15090 }
041bd2e0 15091 else
b9733481
L
15092 names = names_mm;
15093 oappend (names[reg]);
252b5132
RH
15094}
15095
c608c12e 15096static void
c0f3af97 15097OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
c608c12e 15098{
b9733481
L
15099 int reg = modrm.reg;
15100 const char **names;
15101
161a04f6
L
15102 USED_REX (REX_R);
15103 if (rex & REX_R)
b9733481 15104 reg += 8;
43234a1e
L
15105 if (vex.evex)
15106 {
15107 if (!vex.r)
15108 reg += 16;
15109 }
15110
539f890d
L
15111 if (need_vex
15112 && bytemode != xmm_mode
43234a1e
L
15113 && bytemode != xmmq_mode
15114 && bytemode != evex_half_bcst_xmmq_mode
15115 && bytemode != ymm_mode
539f890d 15116 && bytemode != scalar_mode)
c0f3af97
L
15117 {
15118 switch (vex.length)
15119 {
15120 case 128:
b9733481 15121 names = names_xmm;
c0f3af97
L
15122 break;
15123 case 256:
5fc35d96
IT
15124 if (vex.w
15125 || (bytemode != vex_vsib_q_w_dq_mode
15126 && bytemode != vex_vsib_q_w_d_mode))
6c30d220
L
15127 names = names_ymm;
15128 else
15129 names = names_xmm;
c0f3af97 15130 break;
43234a1e
L
15131 case 512:
15132 names = names_zmm;
15133 break;
c0f3af97
L
15134 default:
15135 abort ();
15136 }
15137 }
43234a1e
L
15138 else if (bytemode == xmmq_mode
15139 || bytemode == evex_half_bcst_xmmq_mode)
15140 {
15141 switch (vex.length)
15142 {
15143 case 128:
15144 case 256:
15145 names = names_xmm;
15146 break;
15147 case 512:
15148 names = names_ymm;
15149 break;
15150 default:
15151 abort ();
15152 }
15153 }
15154 else if (bytemode == ymm_mode)
15155 names = names_ymm;
c0f3af97 15156 else
b9733481
L
15157 names = names_xmm;
15158 oappend (names[reg]);
c608c12e
AM
15159}
15160
252b5132 15161static void
26ca5450 15162OP_EM (int bytemode, int sizeflag)
252b5132 15163{
b9733481
L
15164 int reg;
15165 const char **names;
15166
7967e09e 15167 if (modrm.mod != 3)
252b5132 15168 {
b6169b20
L
15169 if (intel_syntax
15170 && (bytemode == v_mode || bytemode == v_swap_mode))
9306ca4a
JB
15171 {
15172 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
15173 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 15174 }
252b5132
RH
15175 OP_E (bytemode, sizeflag);
15176 return;
15177 }
15178
b6169b20
L
15179 if ((sizeflag & SUFFIX_ALWAYS) && bytemode == v_swap_mode)
15180 swap_operand ();
15181
6608db57 15182 /* Skip mod/rm byte. */
4bba6815 15183 MODRM_CHECK;
252b5132 15184 codep++;
041bd2e0 15185 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 15186 reg = modrm.rm;
041bd2e0 15187 if (prefixes & PREFIX_DATA)
20f0a1fc 15188 {
b9733481 15189 names = names_xmm;
161a04f6
L
15190 USED_REX (REX_B);
15191 if (rex & REX_B)
b9733481 15192 reg += 8;
20f0a1fc 15193 }
041bd2e0 15194 else
b9733481
L
15195 names = names_mm;
15196 oappend (names[reg]);
252b5132
RH
15197}
15198
246c51aa
L
15199/* cvt* are the only instructions in sse2 which have
15200 both SSE and MMX operands and also have 0x66 prefix
15201 in their opcode. 0x66 was originally used to differentiate
15202 between SSE and MMX instruction(operands). So we have to handle the
4d9567e0
MM
15203 cvt* separately using OP_EMC and OP_MXC */
15204static void
15205OP_EMC (int bytemode, int sizeflag)
15206{
7967e09e 15207 if (modrm.mod != 3)
4d9567e0
MM
15208 {
15209 if (intel_syntax && bytemode == v_mode)
15210 {
15211 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
15212 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 15213 }
4d9567e0
MM
15214 OP_E (bytemode, sizeflag);
15215 return;
15216 }
246c51aa 15217
4d9567e0
MM
15218 /* Skip mod/rm byte. */
15219 MODRM_CHECK;
15220 codep++;
15221 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 15222 oappend (names_mm[modrm.rm]);
4d9567e0
MM
15223}
15224
15225static void
15226OP_MXC (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15227{
15228 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 15229 oappend (names_mm[modrm.reg]);
4d9567e0
MM
15230}
15231
c608c12e 15232static void
26ca5450 15233OP_EX (int bytemode, int sizeflag)
c608c12e 15234{
b9733481
L
15235 int reg;
15236 const char **names;
d6f574e0
L
15237
15238 /* Skip mod/rm byte. */
15239 MODRM_CHECK;
15240 codep++;
15241
7967e09e 15242 if (modrm.mod != 3)
c608c12e 15243 {
c1e679ec 15244 OP_E_memory (bytemode, sizeflag);
c608c12e
AM
15245 return;
15246 }
d6f574e0 15247
b9733481 15248 reg = modrm.rm;
161a04f6
L
15249 USED_REX (REX_B);
15250 if (rex & REX_B)
b9733481 15251 reg += 8;
43234a1e
L
15252 if (vex.evex)
15253 {
15254 USED_REX (REX_X);
15255 if ((rex & REX_X))
15256 reg += 16;
15257 }
c608c12e 15258
b6169b20 15259 if ((sizeflag & SUFFIX_ALWAYS)
fa99fab2
L
15260 && (bytemode == x_swap_mode
15261 || bytemode == d_swap_mode
7bb15c6f 15262 || bytemode == d_scalar_swap_mode
539f890d
L
15263 || bytemode == q_swap_mode
15264 || bytemode == q_scalar_swap_mode))
b6169b20
L
15265 swap_operand ();
15266
c0f3af97
L
15267 if (need_vex
15268 && bytemode != xmm_mode
6c30d220
L
15269 && bytemode != xmmdw_mode
15270 && bytemode != xmmqd_mode
15271 && bytemode != xmm_mb_mode
15272 && bytemode != xmm_mw_mode
15273 && bytemode != xmm_md_mode
15274 && bytemode != xmm_mq_mode
43234a1e 15275 && bytemode != xmm_mdq_mode
539f890d 15276 && bytemode != xmmq_mode
43234a1e
L
15277 && bytemode != evex_half_bcst_xmmq_mode
15278 && bytemode != ymm_mode
539f890d 15279 && bytemode != d_scalar_mode
7bb15c6f 15280 && bytemode != d_scalar_swap_mode
539f890d 15281 && bytemode != q_scalar_mode
1c480963
L
15282 && bytemode != q_scalar_swap_mode
15283 && bytemode != vex_scalar_w_dq_mode)
c0f3af97
L
15284 {
15285 switch (vex.length)
15286 {
15287 case 128:
b9733481 15288 names = names_xmm;
c0f3af97
L
15289 break;
15290 case 256:
b9733481 15291 names = names_ymm;
c0f3af97 15292 break;
43234a1e
L
15293 case 512:
15294 names = names_zmm;
15295 break;
c0f3af97
L
15296 default:
15297 abort ();
15298 }
15299 }
43234a1e
L
15300 else if (bytemode == xmmq_mode
15301 || bytemode == evex_half_bcst_xmmq_mode)
15302 {
15303 switch (vex.length)
15304 {
15305 case 128:
15306 case 256:
15307 names = names_xmm;
15308 break;
15309 case 512:
15310 names = names_ymm;
15311 break;
15312 default:
15313 abort ();
15314 }
15315 }
15316 else if (bytemode == ymm_mode)
15317 names = names_ymm;
c0f3af97 15318 else
b9733481
L
15319 names = names_xmm;
15320 oappend (names[reg]);
c608c12e
AM
15321}
15322
252b5132 15323static void
26ca5450 15324OP_MS (int bytemode, int sizeflag)
252b5132 15325{
7967e09e 15326 if (modrm.mod == 3)
2da11e11
AM
15327 OP_EM (bytemode, sizeflag);
15328 else
6608db57 15329 BadOp ();
252b5132
RH
15330}
15331
992aaec9 15332static void
26ca5450 15333OP_XS (int bytemode, int sizeflag)
992aaec9 15334{
7967e09e 15335 if (modrm.mod == 3)
992aaec9
AM
15336 OP_EX (bytemode, sizeflag);
15337 else
6608db57 15338 BadOp ();
992aaec9
AM
15339}
15340
cc0ec051
AM
15341static void
15342OP_M (int bytemode, int sizeflag)
15343{
7967e09e 15344 if (modrm.mod == 3)
75413a22
L
15345 /* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */
15346 BadOp ();
cc0ec051
AM
15347 else
15348 OP_E (bytemode, sizeflag);
15349}
15350
15351static void
15352OP_0f07 (int bytemode, int sizeflag)
15353{
7967e09e 15354 if (modrm.mod != 3 || modrm.rm != 0)
cc0ec051
AM
15355 BadOp ();
15356 else
15357 OP_E (bytemode, sizeflag);
15358}
15359
46e883c5 15360/* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
246c51aa 15361 32bit mode and "xchg %rax,%rax" in 64bit mode. */
46e883c5 15362
cc0ec051 15363static void
46e883c5 15364NOP_Fixup1 (int bytemode, int sizeflag)
cc0ec051 15365{
8b38ad71
L
15366 if ((prefixes & PREFIX_DATA) != 0
15367 || (rex != 0
15368 && rex != 0x48
15369 && address_mode == mode_64bit))
46e883c5
L
15370 OP_REG (bytemode, sizeflag);
15371 else
15372 strcpy (obuf, "nop");
15373}
15374
15375static void
15376NOP_Fixup2 (int bytemode, int sizeflag)
15377{
8b38ad71
L
15378 if ((prefixes & PREFIX_DATA) != 0
15379 || (rex != 0
15380 && rex != 0x48
15381 && address_mode == mode_64bit))
46e883c5 15382 OP_IMREG (bytemode, sizeflag);
cc0ec051
AM
15383}
15384
84037f8c 15385static const char *const Suffix3DNow[] = {
252b5132
RH
15386/* 00 */ NULL, NULL, NULL, NULL,
15387/* 04 */ NULL, NULL, NULL, NULL,
15388/* 08 */ NULL, NULL, NULL, NULL,
9e525108 15389/* 0C */ "pi2fw", "pi2fd", NULL, NULL,
252b5132
RH
15390/* 10 */ NULL, NULL, NULL, NULL,
15391/* 14 */ NULL, NULL, NULL, NULL,
15392/* 18 */ NULL, NULL, NULL, NULL,
9e525108 15393/* 1C */ "pf2iw", "pf2id", NULL, NULL,
252b5132
RH
15394/* 20 */ NULL, NULL, NULL, NULL,
15395/* 24 */ NULL, NULL, NULL, NULL,
15396/* 28 */ NULL, NULL, NULL, NULL,
15397/* 2C */ NULL, NULL, NULL, NULL,
15398/* 30 */ NULL, NULL, NULL, NULL,
15399/* 34 */ NULL, NULL, NULL, NULL,
15400/* 38 */ NULL, NULL, NULL, NULL,
15401/* 3C */ NULL, NULL, NULL, NULL,
15402/* 40 */ NULL, NULL, NULL, NULL,
15403/* 44 */ NULL, NULL, NULL, NULL,
15404/* 48 */ NULL, NULL, NULL, NULL,
15405/* 4C */ NULL, NULL, NULL, NULL,
15406/* 50 */ NULL, NULL, NULL, NULL,
15407/* 54 */ NULL, NULL, NULL, NULL,
15408/* 58 */ NULL, NULL, NULL, NULL,
15409/* 5C */ NULL, NULL, NULL, NULL,
15410/* 60 */ NULL, NULL, NULL, NULL,
15411/* 64 */ NULL, NULL, NULL, NULL,
15412/* 68 */ NULL, NULL, NULL, NULL,
15413/* 6C */ NULL, NULL, NULL, NULL,
15414/* 70 */ NULL, NULL, NULL, NULL,
15415/* 74 */ NULL, NULL, NULL, NULL,
15416/* 78 */ NULL, NULL, NULL, NULL,
15417/* 7C */ NULL, NULL, NULL, NULL,
15418/* 80 */ NULL, NULL, NULL, NULL,
15419/* 84 */ NULL, NULL, NULL, NULL,
9e525108
AM
15420/* 88 */ NULL, NULL, "pfnacc", NULL,
15421/* 8C */ NULL, NULL, "pfpnacc", NULL,
252b5132
RH
15422/* 90 */ "pfcmpge", NULL, NULL, NULL,
15423/* 94 */ "pfmin", NULL, "pfrcp", "pfrsqrt",
15424/* 98 */ NULL, NULL, "pfsub", NULL,
15425/* 9C */ NULL, NULL, "pfadd", NULL,
15426/* A0 */ "pfcmpgt", NULL, NULL, NULL,
15427/* A4 */ "pfmax", NULL, "pfrcpit1", "pfrsqit1",
15428/* A8 */ NULL, NULL, "pfsubr", NULL,
15429/* AC */ NULL, NULL, "pfacc", NULL,
15430/* B0 */ "pfcmpeq", NULL, NULL, NULL,
9beff690 15431/* B4 */ "pfmul", NULL, "pfrcpit2", "pmulhrw",
9e525108 15432/* B8 */ NULL, NULL, NULL, "pswapd",
252b5132
RH
15433/* BC */ NULL, NULL, NULL, "pavgusb",
15434/* C0 */ NULL, NULL, NULL, NULL,
15435/* C4 */ NULL, NULL, NULL, NULL,
15436/* C8 */ NULL, NULL, NULL, NULL,
15437/* CC */ NULL, NULL, NULL, NULL,
15438/* D0 */ NULL, NULL, NULL, NULL,
15439/* D4 */ NULL, NULL, NULL, NULL,
15440/* D8 */ NULL, NULL, NULL, NULL,
15441/* DC */ NULL, NULL, NULL, NULL,
15442/* E0 */ NULL, NULL, NULL, NULL,
15443/* E4 */ NULL, NULL, NULL, NULL,
15444/* E8 */ NULL, NULL, NULL, NULL,
15445/* EC */ NULL, NULL, NULL, NULL,
15446/* F0 */ NULL, NULL, NULL, NULL,
15447/* F4 */ NULL, NULL, NULL, NULL,
15448/* F8 */ NULL, NULL, NULL, NULL,
15449/* FC */ NULL, NULL, NULL, NULL,
15450};
15451
15452static void
26ca5450 15453OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132
RH
15454{
15455 const char *mnemonic;
15456
15457 FETCH_DATA (the_info, codep + 1);
15458 /* AMD 3DNow! instructions are specified by an opcode suffix in the
15459 place where an 8-bit immediate would normally go. ie. the last
15460 byte of the instruction. */
ea397f5b 15461 obufp = mnemonicendp;
c608c12e 15462 mnemonic = Suffix3DNow[*codep++ & 0xff];
252b5132 15463 if (mnemonic)
2da11e11 15464 oappend (mnemonic);
252b5132
RH
15465 else
15466 {
15467 /* Since a variable sized modrm/sib chunk is between the start
15468 of the opcode (0x0f0f) and the opcode suffix, we need to do
15469 all the modrm processing first, and don't know until now that
15470 we have a bad opcode. This necessitates some cleaning up. */
ce518a5f
L
15471 op_out[0][0] = '\0';
15472 op_out[1][0] = '\0';
6608db57 15473 BadOp ();
252b5132 15474 }
ea397f5b 15475 mnemonicendp = obufp;
252b5132 15476}
c608c12e 15477
ea397f5b
L
15478static struct op simd_cmp_op[] =
15479{
15480 { STRING_COMMA_LEN ("eq") },
15481 { STRING_COMMA_LEN ("lt") },
15482 { STRING_COMMA_LEN ("le") },
15483 { STRING_COMMA_LEN ("unord") },
15484 { STRING_COMMA_LEN ("neq") },
15485 { STRING_COMMA_LEN ("nlt") },
15486 { STRING_COMMA_LEN ("nle") },
15487 { STRING_COMMA_LEN ("ord") }
c608c12e
AM
15488};
15489
15490static void
ad19981d 15491CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
c608c12e
AM
15492{
15493 unsigned int cmp_type;
15494
15495 FETCH_DATA (the_info, codep + 1);
15496 cmp_type = *codep++ & 0xff;
c0f3af97 15497 if (cmp_type < ARRAY_SIZE (simd_cmp_op))
c608c12e 15498 {
ad19981d 15499 char suffix [3];
ea397f5b 15500 char *p = mnemonicendp - 2;
ad19981d
L
15501 suffix[0] = p[0];
15502 suffix[1] = p[1];
15503 suffix[2] = '\0';
ea397f5b
L
15504 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
15505 mnemonicendp += simd_cmp_op[cmp_type].len;
c608c12e
AM
15506 }
15507 else
15508 {
ad19981d
L
15509 /* We have a reserved extension byte. Output it directly. */
15510 scratchbuf[0] = '$';
15511 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 15512 oappend_maybe_intel (scratchbuf);
ad19981d 15513 scratchbuf[0] = '\0';
c608c12e
AM
15514 }
15515}
15516
9916071f 15517static void
7abb8d81 15518OP_Mwait (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
9916071f 15519{
7abb8d81 15520 /* mwait %eax,%ecx / mwaitx %eax,%ecx,%ebx */
b844680a
L
15521 if (!intel_syntax)
15522 {
081e283f
JB
15523 strcpy (op_out[0], names32[0]);
15524 strcpy (op_out[1], names32[1]);
7abb8d81 15525 if (bytemode == eBX_reg)
081e283f 15526 strcpy (op_out[2], names32[3]);
b844680a
L
15527 two_source_ops = 1;
15528 }
15529 /* Skip mod/rm byte. */
15530 MODRM_CHECK;
15531 codep++;
15532}
15533
15534static void
15535OP_Monitor (int bytemode ATTRIBUTE_UNUSED,
15536 int sizeflag ATTRIBUTE_UNUSED)
ca164297 15537{
081e283f 15538 /* monitor %{e,r,}ax,%ecx,%edx" */
b844680a 15539 if (!intel_syntax)
ca164297 15540 {
cb712a9e
L
15541 const char **names = (address_mode == mode_64bit
15542 ? names64 : names32);
1d9f512f 15543
081e283f 15544 if (prefixes & PREFIX_ADDR)
ca164297 15545 {
b844680a 15546 /* Remove "addr16/addr32". */
f16cd0d5 15547 all_prefixes[last_addr_prefix] = 0;
081e283f
JB
15548 names = (address_mode != mode_32bit
15549 ? names32 : names16);
b844680a 15550 used_prefixes |= PREFIX_ADDR;
ca164297 15551 }
081e283f
JB
15552 else if (address_mode == mode_16bit)
15553 names = names16;
15554 strcpy (op_out[0], names[0]);
15555 strcpy (op_out[1], names32[1]);
15556 strcpy (op_out[2], names32[2]);
b844680a 15557 two_source_ops = 1;
ca164297 15558 }
b844680a
L
15559 /* Skip mod/rm byte. */
15560 MODRM_CHECK;
15561 codep++;
30123838
JB
15562}
15563
6608db57
KH
15564static void
15565BadOp (void)
2da11e11 15566{
6608db57
KH
15567 /* Throw away prefixes and 1st. opcode byte. */
15568 codep = insn_codep + 1;
2da11e11
AM
15569 oappend ("(bad)");
15570}
4cc91dba 15571
35c52694
L
15572static void
15573REP_Fixup (int bytemode, int sizeflag)
15574{
15575 /* The 0xf3 prefix should be displayed as "rep" for ins, outs, movs,
15576 lods and stos. */
35c52694 15577 if (prefixes & PREFIX_REPZ)
f16cd0d5 15578 all_prefixes[last_repz_prefix] = REP_PREFIX;
35c52694
L
15579
15580 switch (bytemode)
15581 {
15582 case al_reg:
15583 case eAX_reg:
15584 case indir_dx_reg:
15585 OP_IMREG (bytemode, sizeflag);
15586 break;
15587 case eDI_reg:
15588 OP_ESreg (bytemode, sizeflag);
15589 break;
15590 case eSI_reg:
15591 OP_DSreg (bytemode, sizeflag);
15592 break;
15593 default:
15594 abort ();
15595 break;
15596 }
15597}
f5804c90 15598
7e8b059b
L
15599/* For BND-prefixed instructions 0xF2 prefix should be displayed as
15600 "bnd". */
15601
15602static void
15603BND_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15604{
15605 if (prefixes & PREFIX_REPNZ)
15606 all_prefixes[last_repnz_prefix] = BND_PREFIX;
15607}
15608
04ef582a
L
15609/* For NOTRACK-prefixed instructions, 0x3E prefix should be displayed as
15610 "notrack". */
15611
15612static void
15613NOTRACK_Fixup (int bytemode ATTRIBUTE_UNUSED,
15614 int sizeflag ATTRIBUTE_UNUSED)
15615{
9fef80d6 15616 if (active_seg_prefix == PREFIX_DS
04ef582a
L
15617 && (address_mode != mode_64bit || last_data_prefix < 0))
15618 {
4e9ac44a 15619 /* NOTRACK prefix is only valid on indirect branch instructions.
9fef80d6 15620 NB: DATA prefix is unsupported for Intel64. */
04ef582a
L
15621 active_seg_prefix = 0;
15622 all_prefixes[last_seg_prefix] = NOTRACK_PREFIX;
15623 }
15624}
15625
42164a71
L
15626/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
15627 "xacquire"/"xrelease" for memory operand if there is a LOCK prefix.
15628 */
15629
15630static void
15631HLE_Fixup1 (int bytemode, int sizeflag)
15632{
15633 if (modrm.mod != 3
15634 && (prefixes & PREFIX_LOCK) != 0)
15635 {
15636 if (prefixes & PREFIX_REPZ)
15637 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15638 if (prefixes & PREFIX_REPNZ)
15639 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
15640 }
15641
15642 OP_E (bytemode, sizeflag);
15643}
15644
15645/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
15646 "xacquire"/"xrelease" for memory operand. No check for LOCK prefix.
15647 */
15648
15649static void
15650HLE_Fixup2 (int bytemode, int sizeflag)
15651{
15652 if (modrm.mod != 3)
15653 {
15654 if (prefixes & PREFIX_REPZ)
15655 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15656 if (prefixes & PREFIX_REPNZ)
15657 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
15658 }
15659
15660 OP_E (bytemode, sizeflag);
15661}
15662
15663/* Similar to OP_E. But the 0xf3 prefixes should be displayed as
15664 "xrelease" for memory operand. No check for LOCK prefix. */
15665
15666static void
15667HLE_Fixup3 (int bytemode, int sizeflag)
15668{
15669 if (modrm.mod != 3
15670 && last_repz_prefix > last_repnz_prefix
15671 && (prefixes & PREFIX_REPZ) != 0)
15672 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15673
15674 OP_E (bytemode, sizeflag);
15675}
15676
f5804c90
L
15677static void
15678CMPXCHG8B_Fixup (int bytemode, int sizeflag)
15679{
161a04f6
L
15680 USED_REX (REX_W);
15681 if (rex & REX_W)
f5804c90
L
15682 {
15683 /* Change cmpxchg8b to cmpxchg16b. */
ea397f5b
L
15684 char *p = mnemonicendp - 2;
15685 mnemonicendp = stpcpy (p, "16b");
fb9c77c7 15686 bytemode = o_mode;
f5804c90 15687 }
42164a71
L
15688 else if ((prefixes & PREFIX_LOCK) != 0)
15689 {
15690 if (prefixes & PREFIX_REPZ)
15691 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15692 if (prefixes & PREFIX_REPNZ)
15693 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
15694 }
15695
f5804c90
L
15696 OP_M (bytemode, sizeflag);
15697}
42903f7f
L
15698
15699static void
15700XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED)
15701{
b9733481
L
15702 const char **names;
15703
c0f3af97
L
15704 if (need_vex)
15705 {
15706 switch (vex.length)
15707 {
15708 case 128:
b9733481 15709 names = names_xmm;
c0f3af97
L
15710 break;
15711 case 256:
b9733481 15712 names = names_ymm;
c0f3af97
L
15713 break;
15714 default:
15715 abort ();
15716 }
15717 }
15718 else
b9733481
L
15719 names = names_xmm;
15720 oappend (names[reg]);
42903f7f 15721}
381d071f
L
15722
15723static void
15724CRC32_Fixup (int bytemode, int sizeflag)
15725{
15726 /* Add proper suffix to "crc32". */
ea397f5b 15727 char *p = mnemonicendp;
381d071f
L
15728
15729 switch (bytemode)
15730 {
15731 case b_mode:
20592a94 15732 if (intel_syntax)
ea397f5b 15733 goto skip;
20592a94 15734
381d071f
L
15735 *p++ = 'b';
15736 break;
15737 case v_mode:
20592a94 15738 if (intel_syntax)
ea397f5b 15739 goto skip;
20592a94 15740
381d071f
L
15741 USED_REX (REX_W);
15742 if (rex & REX_W)
15743 *p++ = 'q';
7bb15c6f 15744 else
f16cd0d5
L
15745 {
15746 if (sizeflag & DFLAG)
15747 *p++ = 'l';
15748 else
15749 *p++ = 'w';
15750 used_prefixes |= (prefixes & PREFIX_DATA);
15751 }
381d071f
L
15752 break;
15753 default:
15754 oappend (INTERNAL_DISASSEMBLER_ERROR);
15755 break;
15756 }
ea397f5b 15757 mnemonicendp = p;
381d071f
L
15758 *p = '\0';
15759
ea397f5b 15760skip:
381d071f
L
15761 if (modrm.mod == 3)
15762 {
15763 int add;
15764
15765 /* Skip mod/rm byte. */
15766 MODRM_CHECK;
15767 codep++;
15768
15769 USED_REX (REX_B);
15770 add = (rex & REX_B) ? 8 : 0;
15771 if (bytemode == b_mode)
15772 {
15773 USED_REX (0);
15774 if (rex)
15775 oappend (names8rex[modrm.rm + add]);
15776 else
15777 oappend (names8[modrm.rm + add]);
15778 }
15779 else
15780 {
15781 USED_REX (REX_W);
15782 if (rex & REX_W)
15783 oappend (names64[modrm.rm + add]);
15784 else if ((prefixes & PREFIX_DATA))
15785 oappend (names16[modrm.rm + add]);
15786 else
15787 oappend (names32[modrm.rm + add]);
15788 }
15789 }
15790 else
9344ff29 15791 OP_E (bytemode, sizeflag);
381d071f 15792}
85f10a01 15793
eacc9c89
L
15794static void
15795FXSAVE_Fixup (int bytemode, int sizeflag)
15796{
15797 /* Add proper suffix to "fxsave" and "fxrstor". */
15798 USED_REX (REX_W);
15799 if (rex & REX_W)
15800 {
15801 char *p = mnemonicendp;
15802 *p++ = '6';
15803 *p++ = '4';
15804 *p = '\0';
15805 mnemonicendp = p;
15806 }
15807 OP_M (bytemode, sizeflag);
15808}
15809
15c7c1d8
JB
15810static void
15811PCMPESTR_Fixup (int bytemode, int sizeflag)
15812{
15813 /* Add proper suffix to "{,v}pcmpestr{i,m}". */
15814 if (!intel_syntax)
15815 {
15816 char *p = mnemonicendp;
15817
15818 USED_REX (REX_W);
15819 if (rex & REX_W)
15820 *p++ = 'q';
15821 else if (sizeflag & SUFFIX_ALWAYS)
15822 *p++ = 'l';
15823
15824 *p = '\0';
15825 mnemonicendp = p;
15826 }
15827
15828 OP_EX (bytemode, sizeflag);
15829}
15830
c0f3af97
L
15831/* Display the destination register operand for instructions with
15832 VEX. */
15833
15834static void
15835OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
15836{
539f890d 15837 int reg;
b9733481
L
15838 const char **names;
15839
c0f3af97
L
15840 if (!need_vex)
15841 abort ();
15842
15843 if (!need_vex_reg)
15844 return;
15845
539f890d 15846 reg = vex.register_specifier;
63c6fc6c 15847 vex.register_specifier = 0;
5f847646
JB
15848 if (address_mode != mode_64bit)
15849 reg &= 7;
15850 else if (vex.evex && !vex.v)
15851 reg += 16;
43234a1e 15852
539f890d
L
15853 if (bytemode == vex_scalar_mode)
15854 {
15855 oappend (names_xmm[reg]);
15856 return;
15857 }
15858
c0f3af97
L
15859 switch (vex.length)
15860 {
15861 case 128:
15862 switch (bytemode)
15863 {
15864 case vex_mode:
15865 case vex128_mode:
6c30d220 15866 case vex_vsib_q_w_dq_mode:
5fc35d96 15867 case vex_vsib_q_w_d_mode:
cb21baef
L
15868 names = names_xmm;
15869 break;
15870 case dq_mode:
390a6789 15871 if (rex & REX_W)
cb21baef
L
15872 names = names64;
15873 else
15874 names = names32;
c0f3af97 15875 break;
1ba585e8 15876 case mask_bd_mode:
43234a1e 15877 case mask_mode:
9889cbb1
L
15878 if (reg > 0x7)
15879 {
15880 oappend ("(bad)");
15881 return;
15882 }
43234a1e
L
15883 names = names_mask;
15884 break;
c0f3af97
L
15885 default:
15886 abort ();
15887 return;
15888 }
c0f3af97
L
15889 break;
15890 case 256:
15891 switch (bytemode)
15892 {
15893 case vex_mode:
15894 case vex256_mode:
6c30d220
L
15895 names = names_ymm;
15896 break;
15897 case vex_vsib_q_w_dq_mode:
5fc35d96 15898 case vex_vsib_q_w_d_mode:
6c30d220 15899 names = vex.w ? names_ymm : names_xmm;
c0f3af97 15900 break;
1ba585e8 15901 case mask_bd_mode:
43234a1e 15902 case mask_mode:
9889cbb1
L
15903 if (reg > 0x7)
15904 {
15905 oappend ("(bad)");
15906 return;
15907 }
43234a1e
L
15908 names = names_mask;
15909 break;
c0f3af97 15910 default:
a37a2806
NC
15911 /* See PR binutils/20893 for a reproducer. */
15912 oappend ("(bad)");
c0f3af97
L
15913 return;
15914 }
c0f3af97 15915 break;
43234a1e
L
15916 case 512:
15917 names = names_zmm;
15918 break;
c0f3af97
L
15919 default:
15920 abort ();
15921 break;
15922 }
539f890d 15923 oappend (names[reg]);
c0f3af97
L
15924}
15925
922d8de8
DR
15926/* Get the VEX immediate byte without moving codep. */
15927
15928static unsigned char
ccc5981b 15929get_vex_imm8 (int sizeflag, int opnum)
922d8de8
DR
15930{
15931 int bytes_before_imm = 0;
15932
922d8de8
DR
15933 if (modrm.mod != 3)
15934 {
15935 /* There are SIB/displacement bytes. */
15936 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
6c067bbb 15937 {
922d8de8 15938 /* 32/64 bit address mode */
6c067bbb 15939 int base = modrm.rm;
922d8de8
DR
15940
15941 /* Check SIB byte. */
6c067bbb
RM
15942 if (base == 4)
15943 {
15944 FETCH_DATA (the_info, codep + 1);
15945 base = *codep & 7;
15946 /* When decoding the third source, don't increase
15947 bytes_before_imm as this has already been incremented
15948 by one in OP_E_memory while decoding the second
15949 source operand. */
15950 if (opnum == 0)
15951 bytes_before_imm++;
15952 }
15953
15954 /* Don't increase bytes_before_imm when decoding the third source,
15955 it has already been incremented by OP_E_memory while decoding
15956 the second source operand. */
15957 if (opnum == 0)
15958 {
15959 switch (modrm.mod)
15960 {
15961 case 0:
15962 /* When modrm.rm == 5 or modrm.rm == 4 and base in
15963 SIB == 5, there is a 4 byte displacement. */
15964 if (base != 5)
15965 /* No displacement. */
15966 break;
1a0670f3 15967 /* Fall through. */
6c067bbb
RM
15968 case 2:
15969 /* 4 byte displacement. */
15970 bytes_before_imm += 4;
15971 break;
15972 case 1:
15973 /* 1 byte displacement. */
15974 bytes_before_imm++;
15975 break;
15976 }
15977 }
15978 }
922d8de8 15979 else
02e647f9
SP
15980 {
15981 /* 16 bit address mode */
6c067bbb
RM
15982 /* Don't increase bytes_before_imm when decoding the third source,
15983 it has already been incremented by OP_E_memory while decoding
15984 the second source operand. */
15985 if (opnum == 0)
15986 {
02e647f9
SP
15987 switch (modrm.mod)
15988 {
15989 case 0:
15990 /* When modrm.rm == 6, there is a 2 byte displacement. */
15991 if (modrm.rm != 6)
15992 /* No displacement. */
15993 break;
1a0670f3 15994 /* Fall through. */
02e647f9
SP
15995 case 2:
15996 /* 2 byte displacement. */
15997 bytes_before_imm += 2;
15998 break;
15999 case 1:
16000 /* 1 byte displacement: when decoding the third source,
16001 don't increase bytes_before_imm as this has already
16002 been incremented by one in OP_E_memory while decoding
16003 the second source operand. */
16004 if (opnum == 0)
16005 bytes_before_imm++;
ccc5981b 16006
02e647f9
SP
16007 break;
16008 }
922d8de8
DR
16009 }
16010 }
16011 }
16012
16013 FETCH_DATA (the_info, codep + bytes_before_imm + 1);
16014 return codep [bytes_before_imm];
16015}
16016
16017static void
16018OP_EX_VexReg (int bytemode, int sizeflag, int reg)
16019{
b9733481
L
16020 const char **names;
16021
922d8de8
DR
16022 if (reg == -1 && modrm.mod != 3)
16023 {
16024 OP_E_memory (bytemode, sizeflag);
16025 return;
16026 }
16027 else
16028 {
16029 if (reg == -1)
16030 {
16031 reg = modrm.rm;
16032 USED_REX (REX_B);
16033 if (rex & REX_B)
16034 reg += 8;
16035 }
5f847646
JB
16036 if (address_mode != mode_64bit)
16037 reg &= 7;
922d8de8
DR
16038 }
16039
16040 switch (vex.length)
16041 {
16042 case 128:
b9733481 16043 names = names_xmm;
922d8de8
DR
16044 break;
16045 case 256:
b9733481 16046 names = names_ymm;
922d8de8
DR
16047 break;
16048 default:
16049 abort ();
16050 }
b9733481 16051 oappend (names[reg]);
922d8de8
DR
16052}
16053
a683cc34
SP
16054static void
16055OP_EX_VexImmW (int bytemode, int sizeflag)
16056{
16057 int reg = -1;
16058 static unsigned char vex_imm8;
16059
16060 if (vex_w_done == 0)
16061 {
16062 vex_w_done = 1;
16063
16064 /* Skip mod/rm byte. */
16065 MODRM_CHECK;
16066 codep++;
16067
16068 vex_imm8 = get_vex_imm8 (sizeflag, 0);
16069
16070 if (vex.w)
16071 reg = vex_imm8 >> 4;
16072
16073 OP_EX_VexReg (bytemode, sizeflag, reg);
16074 }
16075 else if (vex_w_done == 1)
16076 {
16077 vex_w_done = 2;
16078
16079 if (!vex.w)
16080 reg = vex_imm8 >> 4;
16081
16082 OP_EX_VexReg (bytemode, sizeflag, reg);
16083 }
16084 else
16085 {
16086 /* Output the imm8 directly. */
16087 scratchbuf[0] = '$';
16088 print_operand_value (scratchbuf + 1, 1, vex_imm8 & 0xf);
9ce09ba2 16089 oappend_maybe_intel (scratchbuf);
a683cc34
SP
16090 scratchbuf[0] = '\0';
16091 codep++;
16092 }
16093}
16094
5dd85c99
SP
16095static void
16096OP_Vex_2src (int bytemode, int sizeflag)
16097{
16098 if (modrm.mod == 3)
16099 {
b9733481 16100 int reg = modrm.rm;
5dd85c99 16101 USED_REX (REX_B);
b9733481
L
16102 if (rex & REX_B)
16103 reg += 8;
16104 oappend (names_xmm[reg]);
5dd85c99
SP
16105 }
16106 else
16107 {
16108 if (intel_syntax
16109 && (bytemode == v_mode || bytemode == v_swap_mode))
16110 {
16111 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
16112 used_prefixes |= (prefixes & PREFIX_DATA);
16113 }
16114 OP_E (bytemode, sizeflag);
16115 }
16116}
16117
16118static void
16119OP_Vex_2src_1 (int bytemode, int sizeflag)
16120{
16121 if (modrm.mod == 3)
16122 {
16123 /* Skip mod/rm byte. */
16124 MODRM_CHECK;
16125 codep++;
16126 }
16127
16128 if (vex.w)
5f847646
JB
16129 {
16130 unsigned int reg = vex.register_specifier;
63c6fc6c 16131 vex.register_specifier = 0;
5f847646
JB
16132
16133 if (address_mode != mode_64bit)
16134 reg &= 7;
16135 oappend (names_xmm[reg]);
16136 }
5dd85c99
SP
16137 else
16138 OP_Vex_2src (bytemode, sizeflag);
16139}
16140
16141static void
16142OP_Vex_2src_2 (int bytemode, int sizeflag)
16143{
16144 if (vex.w)
16145 OP_Vex_2src (bytemode, sizeflag);
16146 else
5f847646
JB
16147 {
16148 unsigned int reg = vex.register_specifier;
63c6fc6c 16149 vex.register_specifier = 0;
5f847646
JB
16150
16151 if (address_mode != mode_64bit)
16152 reg &= 7;
16153 oappend (names_xmm[reg]);
16154 }
5dd85c99
SP
16155}
16156
922d8de8
DR
16157static void
16158OP_EX_VexW (int bytemode, int sizeflag)
16159{
16160 int reg = -1;
16161
16162 if (!vex_w_done)
16163 {
41effecb
SP
16164 /* Skip mod/rm byte. */
16165 MODRM_CHECK;
16166 codep++;
16167
922d8de8 16168 if (vex.w)
ccc5981b 16169 reg = get_vex_imm8 (sizeflag, 0) >> 4;
922d8de8
DR
16170 }
16171 else
16172 {
16173 if (!vex.w)
ccc5981b 16174 reg = get_vex_imm8 (sizeflag, 1) >> 4;
922d8de8
DR
16175 }
16176
16177 OP_EX_VexReg (bytemode, sizeflag, reg);
922d8de8 16178
3a2430e0
JB
16179 if (vex_w_done)
16180 codep++;
16181 vex_w_done = 1;
922d8de8
DR
16182}
16183
c0f3af97
L
16184static void
16185OP_REG_VexI4 (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16186{
16187 int reg;
b9733481
L
16188 const char **names;
16189
c0f3af97
L
16190 FETCH_DATA (the_info, codep + 1);
16191 reg = *codep++;
16192
16193 if (bytemode != x_mode)
16194 abort ();
16195
c0f3af97 16196 reg >>= 4;
5f847646
JB
16197 if (address_mode != mode_64bit)
16198 reg &= 7;
dae39acc 16199
c0f3af97
L
16200 switch (vex.length)
16201 {
16202 case 128:
b9733481 16203 names = names_xmm;
c0f3af97
L
16204 break;
16205 case 256:
b9733481 16206 names = names_ymm;
c0f3af97
L
16207 break;
16208 default:
16209 abort ();
16210 }
b9733481 16211 oappend (names[reg]);
c0f3af97
L
16212}
16213
922d8de8
DR
16214static void
16215OP_XMM_VexW (int bytemode, int sizeflag)
16216{
16217 /* Turn off the REX.W bit since it is used for swapping operands
16218 now. */
16219 rex &= ~REX_W;
16220 OP_XMM (bytemode, sizeflag);
16221}
16222
c0f3af97
L
16223static void
16224OP_EX_Vex (int bytemode, int sizeflag)
16225{
16226 if (modrm.mod != 3)
63c6fc6c 16227 need_vex_reg = 0;
c0f3af97
L
16228 OP_EX (bytemode, sizeflag);
16229}
16230
16231static void
16232OP_XMM_Vex (int bytemode, int sizeflag)
16233{
16234 if (modrm.mod != 3)
63c6fc6c 16235 need_vex_reg = 0;
c0f3af97
L
16236 OP_XMM (bytemode, sizeflag);
16237}
16238
ea397f5b
L
16239static struct op vex_cmp_op[] =
16240{
16241 { STRING_COMMA_LEN ("eq") },
16242 { STRING_COMMA_LEN ("lt") },
16243 { STRING_COMMA_LEN ("le") },
16244 { STRING_COMMA_LEN ("unord") },
16245 { STRING_COMMA_LEN ("neq") },
16246 { STRING_COMMA_LEN ("nlt") },
16247 { STRING_COMMA_LEN ("nle") },
16248 { STRING_COMMA_LEN ("ord") },
16249 { STRING_COMMA_LEN ("eq_uq") },
16250 { STRING_COMMA_LEN ("nge") },
16251 { STRING_COMMA_LEN ("ngt") },
16252 { STRING_COMMA_LEN ("false") },
16253 { STRING_COMMA_LEN ("neq_oq") },
16254 { STRING_COMMA_LEN ("ge") },
16255 { STRING_COMMA_LEN ("gt") },
16256 { STRING_COMMA_LEN ("true") },
16257 { STRING_COMMA_LEN ("eq_os") },
16258 { STRING_COMMA_LEN ("lt_oq") },
16259 { STRING_COMMA_LEN ("le_oq") },
16260 { STRING_COMMA_LEN ("unord_s") },
16261 { STRING_COMMA_LEN ("neq_us") },
16262 { STRING_COMMA_LEN ("nlt_uq") },
16263 { STRING_COMMA_LEN ("nle_uq") },
16264 { STRING_COMMA_LEN ("ord_s") },
16265 { STRING_COMMA_LEN ("eq_us") },
16266 { STRING_COMMA_LEN ("nge_uq") },
16267 { STRING_COMMA_LEN ("ngt_uq") },
16268 { STRING_COMMA_LEN ("false_os") },
16269 { STRING_COMMA_LEN ("neq_os") },
16270 { STRING_COMMA_LEN ("ge_oq") },
16271 { STRING_COMMA_LEN ("gt_oq") },
16272 { STRING_COMMA_LEN ("true_us") },
c0f3af97
L
16273};
16274
16275static void
16276VCMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16277{
16278 unsigned int cmp_type;
16279
16280 FETCH_DATA (the_info, codep + 1);
16281 cmp_type = *codep++ & 0xff;
16282 if (cmp_type < ARRAY_SIZE (vex_cmp_op))
16283 {
16284 char suffix [3];
ea397f5b 16285 char *p = mnemonicendp - 2;
c0f3af97
L
16286 suffix[0] = p[0];
16287 suffix[1] = p[1];
16288 suffix[2] = '\0';
ea397f5b
L
16289 sprintf (p, "%s%s", vex_cmp_op[cmp_type].name, suffix);
16290 mnemonicendp += vex_cmp_op[cmp_type].len;
c0f3af97
L
16291 }
16292 else
16293 {
16294 /* We have a reserved extension byte. Output it directly. */
16295 scratchbuf[0] = '$';
16296 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 16297 oappend_maybe_intel (scratchbuf);
c0f3af97
L
16298 scratchbuf[0] = '\0';
16299 }
16300}
16301
43234a1e
L
16302static void
16303VPCMP_Fixup (int bytemode ATTRIBUTE_UNUSED,
16304 int sizeflag ATTRIBUTE_UNUSED)
16305{
16306 unsigned int cmp_type;
16307
16308 if (!vex.evex)
16309 abort ();
16310
16311 FETCH_DATA (the_info, codep + 1);
16312 cmp_type = *codep++ & 0xff;
16313 /* There are aliases for immediates 0, 1, 2, 4, 5, 6.
16314 If it's the case, print suffix, otherwise - print the immediate. */
16315 if (cmp_type < ARRAY_SIZE (simd_cmp_op)
16316 && cmp_type != 3
16317 && cmp_type != 7)
16318 {
16319 char suffix [3];
16320 char *p = mnemonicendp - 2;
16321
16322 /* vpcmp* can have both one- and two-lettered suffix. */
16323 if (p[0] == 'p')
16324 {
16325 p++;
16326 suffix[0] = p[0];
16327 suffix[1] = '\0';
16328 }
16329 else
16330 {
16331 suffix[0] = p[0];
16332 suffix[1] = p[1];
16333 suffix[2] = '\0';
16334 }
16335
16336 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
16337 mnemonicendp += simd_cmp_op[cmp_type].len;
16338 }
be92cb14
JB
16339 else
16340 {
16341 /* We have a reserved extension byte. Output it directly. */
16342 scratchbuf[0] = '$';
16343 print_operand_value (scratchbuf + 1, 1, cmp_type);
16344 oappend_maybe_intel (scratchbuf);
16345 scratchbuf[0] = '\0';
16346 }
16347}
16348
16349static const struct op xop_cmp_op[] =
16350{
16351 { STRING_COMMA_LEN ("lt") },
16352 { STRING_COMMA_LEN ("le") },
16353 { STRING_COMMA_LEN ("gt") },
16354 { STRING_COMMA_LEN ("ge") },
16355 { STRING_COMMA_LEN ("eq") },
16356 { STRING_COMMA_LEN ("neq") },
16357 { STRING_COMMA_LEN ("false") },
16358 { STRING_COMMA_LEN ("true") }
16359};
16360
16361static void
16362VPCOM_Fixup (int bytemode ATTRIBUTE_UNUSED,
16363 int sizeflag ATTRIBUTE_UNUSED)
16364{
16365 unsigned int cmp_type;
16366
16367 FETCH_DATA (the_info, codep + 1);
16368 cmp_type = *codep++ & 0xff;
16369 if (cmp_type < ARRAY_SIZE (xop_cmp_op))
16370 {
16371 char suffix[3];
16372 char *p = mnemonicendp - 2;
16373
16374 /* vpcom* can have both one- and two-lettered suffix. */
16375 if (p[0] == 'm')
16376 {
16377 p++;
16378 suffix[0] = p[0];
16379 suffix[1] = '\0';
16380 }
16381 else
16382 {
16383 suffix[0] = p[0];
16384 suffix[1] = p[1];
16385 suffix[2] = '\0';
16386 }
16387
16388 sprintf (p, "%s%s", xop_cmp_op[cmp_type].name, suffix);
16389 mnemonicendp += xop_cmp_op[cmp_type].len;
16390 }
43234a1e
L
16391 else
16392 {
16393 /* We have a reserved extension byte. Output it directly. */
16394 scratchbuf[0] = '$';
16395 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 16396 oappend_maybe_intel (scratchbuf);
43234a1e
L
16397 scratchbuf[0] = '\0';
16398 }
16399}
16400
ea397f5b
L
16401static const struct op pclmul_op[] =
16402{
16403 { STRING_COMMA_LEN ("lql") },
16404 { STRING_COMMA_LEN ("hql") },
16405 { STRING_COMMA_LEN ("lqh") },
16406 { STRING_COMMA_LEN ("hqh") }
c0f3af97
L
16407};
16408
16409static void
16410PCLMUL_Fixup (int bytemode ATTRIBUTE_UNUSED,
16411 int sizeflag ATTRIBUTE_UNUSED)
16412{
16413 unsigned int pclmul_type;
16414
16415 FETCH_DATA (the_info, codep + 1);
16416 pclmul_type = *codep++ & 0xff;
16417 switch (pclmul_type)
16418 {
16419 case 0x10:
16420 pclmul_type = 2;
16421 break;
16422 case 0x11:
16423 pclmul_type = 3;
16424 break;
16425 default:
16426 break;
7bb15c6f 16427 }
c0f3af97
L
16428 if (pclmul_type < ARRAY_SIZE (pclmul_op))
16429 {
16430 char suffix [4];
ea397f5b 16431 char *p = mnemonicendp - 3;
c0f3af97
L
16432 suffix[0] = p[0];
16433 suffix[1] = p[1];
16434 suffix[2] = p[2];
16435 suffix[3] = '\0';
ea397f5b
L
16436 sprintf (p, "%s%s", pclmul_op[pclmul_type].name, suffix);
16437 mnemonicendp += pclmul_op[pclmul_type].len;
c0f3af97
L
16438 }
16439 else
16440 {
16441 /* We have a reserved extension byte. Output it directly. */
16442 scratchbuf[0] = '$';
16443 print_operand_value (scratchbuf + 1, 1, pclmul_type);
9ce09ba2 16444 oappend_maybe_intel (scratchbuf);
c0f3af97
L
16445 scratchbuf[0] = '\0';
16446 }
16447}
16448
f1f8f695
L
16449static void
16450MOVBE_Fixup (int bytemode, int sizeflag)
16451{
16452 /* Add proper suffix to "movbe". */
ea397f5b 16453 char *p = mnemonicendp;
f1f8f695
L
16454
16455 switch (bytemode)
16456 {
16457 case v_mode:
16458 if (intel_syntax)
ea397f5b 16459 goto skip;
f1f8f695
L
16460
16461 USED_REX (REX_W);
16462 if (sizeflag & SUFFIX_ALWAYS)
16463 {
16464 if (rex & REX_W)
16465 *p++ = 'q';
f1f8f695 16466 else
f16cd0d5
L
16467 {
16468 if (sizeflag & DFLAG)
16469 *p++ = 'l';
16470 else
16471 *p++ = 'w';
16472 used_prefixes |= (prefixes & PREFIX_DATA);
16473 }
f1f8f695 16474 }
f1f8f695
L
16475 break;
16476 default:
16477 oappend (INTERNAL_DISASSEMBLER_ERROR);
16478 break;
16479 }
ea397f5b 16480 mnemonicendp = p;
f1f8f695
L
16481 *p = '\0';
16482
ea397f5b 16483skip:
f1f8f695
L
16484 OP_M (bytemode, sizeflag);
16485}
f88c9eb0
SP
16486
16487static void
16488OP_LWPCB_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16489{
16490 int reg;
16491 const char **names;
16492
16493 /* Skip mod/rm byte. */
16494 MODRM_CHECK;
16495 codep++;
16496
390a6789 16497 if (rex & REX_W)
f88c9eb0 16498 names = names64;
f88c9eb0 16499 else
ce7d077e 16500 names = names32;
f88c9eb0
SP
16501
16502 reg = modrm.rm;
16503 USED_REX (REX_B);
16504 if (rex & REX_B)
16505 reg += 8;
16506
16507 oappend (names[reg]);
16508}
16509
16510static void
16511OP_LWP_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16512{
16513 const char **names;
5f847646 16514 unsigned int reg = vex.register_specifier;
63c6fc6c 16515 vex.register_specifier = 0;
f88c9eb0 16516
390a6789 16517 if (rex & REX_W)
f88c9eb0 16518 names = names64;
f88c9eb0 16519 else
ce7d077e 16520 names = names32;
f88c9eb0 16521
5f847646
JB
16522 if (address_mode != mode_64bit)
16523 reg &= 7;
16524 oappend (names[reg]);
f88c9eb0 16525}
43234a1e
L
16526
16527static void
16528OP_Mask (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16529{
16530 if (!vex.evex
1ba585e8 16531 || (bytemode != mask_mode && bytemode != mask_bd_mode))
43234a1e
L
16532 abort ();
16533
16534 USED_REX (REX_R);
16535 if ((rex & REX_R) != 0 || !vex.r)
16536 {
16537 BadOp ();
16538 return;
16539 }
16540
16541 oappend (names_mask [modrm.reg]);
16542}
16543
16544static void
16545OP_Rounding (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16546{
16547 if (!vex.evex
16548 || (bytemode != evex_rounding_mode
70df6fc9 16549 && bytemode != evex_rounding_64_mode
43234a1e
L
16550 && bytemode != evex_sae_mode))
16551 abort ();
16552 if (modrm.mod == 3 && vex.b)
16553 switch (bytemode)
16554 {
70df6fc9
L
16555 case evex_rounding_64_mode:
16556 if (address_mode != mode_64bit)
16557 {
16558 oappend ("(bad)");
16559 break;
16560 }
16561 /* Fall through. */
43234a1e
L
16562 case evex_rounding_mode:
16563 oappend (names_rounding[vex.ll]);
16564 break;
16565 case evex_sae_mode:
16566 oappend ("{sae}");
16567 break;
16568 default:
16569 break;
16570 }
16571}
This page took 2.347785 seconds and 4 git commands to generate.