Change arm_objfile_data_key to use type-safe registry
[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);
9916071f 104static void OP_Mwaitx (int, int);
46e883c5
L
105static void NOP_Fixup1 (int, int);
106static void NOP_Fixup2 (int, int);
26ca5450 107static void OP_3DNowSuffix (int, int);
ad19981d 108static void CMP_Fixup (int, int);
26ca5450 109static void BadOp (void);
35c52694 110static void REP_Fixup (int, int);
7e8b059b 111static void BND_Fixup (int, int);
04ef582a 112static void NOTRACK_Fixup (int, int);
42164a71
L
113static void HLE_Fixup1 (int, int);
114static void HLE_Fixup2 (int, int);
115static void HLE_Fixup3 (int, int);
f5804c90 116static void CMPXCHG8B_Fixup (int, int);
42903f7f 117static void XMM_Fixup (int, int);
381d071f 118static void CRC32_Fixup (int, int);
eacc9c89 119static void FXSAVE_Fixup (int, int);
15c7c1d8 120static void PCMPESTR_Fixup (int, int);
f88c9eb0
SP
121static void OP_LWPCB_E (int, int);
122static void OP_LWP_E (int, int);
5dd85c99
SP
123static void OP_Vex_2src_1 (int, int);
124static void OP_Vex_2src_2 (int, int);
c1e679ec 125
f1f8f695 126static void MOVBE_Fixup (int, int);
252b5132 127
43234a1e
L
128static void OP_Mask (int, int);
129
6608db57 130struct dis_private {
252b5132
RH
131 /* Points to first byte not fetched. */
132 bfd_byte *max_fetched;
0b1cf022 133 bfd_byte the_buffer[MAX_MNEM_SIZE];
252b5132 134 bfd_vma insn_start;
e396998b 135 int orig_sizeflag;
8df14d78 136 OPCODES_SIGJMP_BUF bailout;
252b5132
RH
137};
138
cb712a9e
L
139enum address_mode
140{
141 mode_16bit,
142 mode_32bit,
143 mode_64bit
144};
145
146enum address_mode address_mode;
52b15da3 147
5076851f
ILT
148/* Flags for the prefixes for the current instruction. See below. */
149static int prefixes;
150
52b15da3
JH
151/* REX prefix the current instruction. See below. */
152static int rex;
153/* Bits of REX we've already used. */
154static int rex_used;
d869730d 155/* REX bits in original REX prefix ignored. */
c0f3af97 156static int rex_ignored;
52b15da3
JH
157/* Mark parts used in the REX prefix. When we are testing for
158 empty prefix (for 8bit register REX extension), just mask it
159 out. Otherwise test for REX bit is excuse for existence of REX
160 only in case value is nonzero. */
161#define USED_REX(value) \
162 { \
163 if (value) \
161a04f6
L
164 { \
165 if ((rex & value)) \
166 rex_used |= (value) | REX_OPCODE; \
167 } \
52b15da3 168 else \
161a04f6 169 rex_used |= REX_OPCODE; \
52b15da3
JH
170 }
171
7d421014
ILT
172/* Flags for prefixes which we somehow handled when printing the
173 current instruction. */
174static int used_prefixes;
175
5076851f
ILT
176/* Flags stored in PREFIXES. */
177#define PREFIX_REPZ 1
178#define PREFIX_REPNZ 2
179#define PREFIX_LOCK 4
180#define PREFIX_CS 8
181#define PREFIX_SS 0x10
182#define PREFIX_DS 0x20
183#define PREFIX_ES 0x40
184#define PREFIX_FS 0x80
185#define PREFIX_GS 0x100
186#define PREFIX_DATA 0x200
187#define PREFIX_ADDR 0x400
188#define PREFIX_FWAIT 0x800
189
252b5132
RH
190/* Make sure that bytes from INFO->PRIVATE_DATA->BUFFER (inclusive)
191 to ADDR (exclusive) are valid. Returns 1 for success, longjmps
192 on error. */
193#define FETCH_DATA(info, addr) \
6608db57 194 ((addr) <= ((struct dis_private *) (info->private_data))->max_fetched \
252b5132
RH
195 ? 1 : fetch_data ((info), (addr)))
196
197static int
26ca5450 198fetch_data (struct disassemble_info *info, bfd_byte *addr)
252b5132
RH
199{
200 int status;
6608db57 201 struct dis_private *priv = (struct dis_private *) info->private_data;
252b5132
RH
202 bfd_vma start = priv->insn_start + (priv->max_fetched - priv->the_buffer);
203
0b1cf022 204 if (addr <= priv->the_buffer + MAX_MNEM_SIZE)
272c9217
JB
205 status = (*info->read_memory_func) (start,
206 priv->max_fetched,
207 addr - priv->max_fetched,
208 info);
209 else
210 status = -1;
252b5132
RH
211 if (status != 0)
212 {
7d421014 213 /* If we did manage to read at least one byte, then
db6eb5be
AM
214 print_insn_i386 will do something sensible. Otherwise, print
215 an error. We do that here because this is where we know
216 STATUS. */
7d421014 217 if (priv->max_fetched == priv->the_buffer)
5076851f 218 (*info->memory_error_func) (status, start, info);
8df14d78 219 OPCODES_SIGLONGJMP (priv->bailout, 1);
252b5132
RH
220 }
221 else
222 priv->max_fetched = addr;
223 return 1;
224}
225
bf890a93 226/* Possible values for prefix requirement. */
507bd325
L
227#define PREFIX_IGNORED_SHIFT 16
228#define PREFIX_IGNORED_REPZ (PREFIX_REPZ << PREFIX_IGNORED_SHIFT)
229#define PREFIX_IGNORED_REPNZ (PREFIX_REPNZ << PREFIX_IGNORED_SHIFT)
230#define PREFIX_IGNORED_DATA (PREFIX_DATA << PREFIX_IGNORED_SHIFT)
231#define PREFIX_IGNORED_ADDR (PREFIX_ADDR << PREFIX_IGNORED_SHIFT)
232#define PREFIX_IGNORED_LOCK (PREFIX_LOCK << PREFIX_IGNORED_SHIFT)
233
234/* Opcode prefixes. */
235#define PREFIX_OPCODE (PREFIX_REPZ \
236 | PREFIX_REPNZ \
237 | PREFIX_DATA)
238
239/* Prefixes ignored. */
240#define PREFIX_IGNORED (PREFIX_IGNORED_REPZ \
241 | PREFIX_IGNORED_REPNZ \
242 | PREFIX_IGNORED_DATA)
bf890a93 243
ce518a5f 244#define XX { NULL, 0 }
507bd325 245#define Bad_Opcode NULL, { { NULL, 0 } }, 0
ce518a5f
L
246
247#define Eb { OP_E, b_mode }
7e8b059b 248#define Ebnd { OP_E, bnd_mode }
b6169b20 249#define EbS { OP_E, b_swap_mode }
9f79e886 250#define EbndS { OP_E, bnd_swap_mode }
ce518a5f 251#define Ev { OP_E, v_mode }
de89d0a3 252#define Eva { OP_E, va_mode }
7e8b059b 253#define Ev_bnd { OP_E, v_bnd_mode }
b6169b20 254#define EvS { OP_E, v_swap_mode }
ce518a5f
L
255#define Ed { OP_E, d_mode }
256#define Edq { OP_E, dq_mode }
257#define Edqw { OP_E, dqw_mode }
42903f7f 258#define Edqb { OP_E, dqb_mode }
1ba585e8
IT
259#define Edb { OP_E, db_mode }
260#define Edw { OP_E, dw_mode }
42903f7f 261#define Edqd { OP_E, dqd_mode }
09335d05 262#define Eq { OP_E, q_mode }
07f5af7d 263#define indirEv { OP_indirE, indir_v_mode }
ce518a5f
L
264#define indirEp { OP_indirE, f_mode }
265#define stackEv { OP_E, stack_v_mode }
266#define Em { OP_E, m_mode }
267#define Ew { OP_E, w_mode }
268#define M { OP_M, 0 } /* lea, lgdt, etc. */
34b772a6 269#define Ma { OP_M, a_mode }
b844680a 270#define Mb { OP_M, b_mode }
d9a5e5e5 271#define Md { OP_M, d_mode }
f1f8f695 272#define Mo { OP_M, o_mode }
ce518a5f
L
273#define Mp { OP_M, f_mode } /* 32 or 48 bit memory operand for LDS, LES etc */
274#define Mq { OP_M, q_mode }
d276ec69 275#define Mv_bnd { OP_M, v_bndmk_mode }
4ee52178 276#define Mx { OP_M, x_mode }
c0f3af97 277#define Mxmm { OP_M, xmm_mode }
ce518a5f 278#define Gb { OP_G, b_mode }
7e8b059b 279#define Gbnd { OP_G, bnd_mode }
ce518a5f
L
280#define Gv { OP_G, v_mode }
281#define Gd { OP_G, d_mode }
282#define Gdq { OP_G, dq_mode }
283#define Gm { OP_G, m_mode }
c0a30a9f 284#define Gva { OP_G, va_mode }
ce518a5f 285#define Gw { OP_G, w_mode }
6f74c397 286#define Rd { OP_R, d_mode }
43234a1e 287#define Rdq { OP_R, dq_mode }
6f74c397 288#define Rm { OP_R, m_mode }
ce518a5f
L
289#define Ib { OP_I, b_mode }
290#define sIb { OP_sI, b_mode } /* sign extened byte */
e3949f17 291#define sIbT { OP_sI, b_T_mode } /* sign extened byte like 'T' */
ce518a5f 292#define Iv { OP_I, v_mode }
7bb15c6f 293#define sIv { OP_sI, v_mode }
ce518a5f 294#define Iv64 { OP_I64, v_mode }
c1dc7af5 295#define Id { OP_I, d_mode }
ce518a5f
L
296#define Iw { OP_I, w_mode }
297#define I1 { OP_I, const_1_mode }
298#define Jb { OP_J, b_mode }
299#define Jv { OP_J, v_mode }
300#define Cm { OP_C, m_mode }
301#define Dm { OP_D, m_mode }
302#define Td { OP_T, d_mode }
b844680a 303#define Skip_MODRM { OP_Skip_MODRM, 0 }
ce518a5f
L
304
305#define RMeAX { OP_REG, eAX_reg }
306#define RMeBX { OP_REG, eBX_reg }
307#define RMeCX { OP_REG, eCX_reg }
308#define RMeDX { OP_REG, eDX_reg }
309#define RMeSP { OP_REG, eSP_reg }
310#define RMeBP { OP_REG, eBP_reg }
311#define RMeSI { OP_REG, eSI_reg }
312#define RMeDI { OP_REG, eDI_reg }
313#define RMrAX { OP_REG, rAX_reg }
314#define RMrBX { OP_REG, rBX_reg }
315#define RMrCX { OP_REG, rCX_reg }
316#define RMrDX { OP_REG, rDX_reg }
317#define RMrSP { OP_REG, rSP_reg }
318#define RMrBP { OP_REG, rBP_reg }
319#define RMrSI { OP_REG, rSI_reg }
320#define RMrDI { OP_REG, rDI_reg }
321#define RMAL { OP_REG, al_reg }
ce518a5f
L
322#define RMCL { OP_REG, cl_reg }
323#define RMDL { OP_REG, dl_reg }
324#define RMBL { OP_REG, bl_reg }
325#define RMAH { OP_REG, ah_reg }
326#define RMCH { OP_REG, ch_reg }
327#define RMDH { OP_REG, dh_reg }
328#define RMBH { OP_REG, bh_reg }
329#define RMAX { OP_REG, ax_reg }
330#define RMDX { OP_REG, dx_reg }
331
332#define eAX { OP_IMREG, eAX_reg }
333#define eBX { OP_IMREG, eBX_reg }
334#define eCX { OP_IMREG, eCX_reg }
335#define eDX { OP_IMREG, eDX_reg }
336#define eSP { OP_IMREG, eSP_reg }
337#define eBP { OP_IMREG, eBP_reg }
338#define eSI { OP_IMREG, eSI_reg }
339#define eDI { OP_IMREG, eDI_reg }
340#define AL { OP_IMREG, al_reg }
341#define CL { OP_IMREG, cl_reg }
342#define DL { OP_IMREG, dl_reg }
343#define BL { OP_IMREG, bl_reg }
344#define AH { OP_IMREG, ah_reg }
345#define CH { OP_IMREG, ch_reg }
346#define DH { OP_IMREG, dh_reg }
347#define BH { OP_IMREG, bh_reg }
348#define AX { OP_IMREG, ax_reg }
349#define DX { OP_IMREG, dx_reg }
350#define zAX { OP_IMREG, z_mode_ax_reg }
351#define indirDX { OP_IMREG, indir_dx_reg }
352
353#define Sw { OP_SEG, w_mode }
354#define Sv { OP_SEG, v_mode }
355#define Ap { OP_DIR, 0 }
356#define Ob { OP_OFF64, b_mode }
357#define Ov { OP_OFF64, v_mode }
358#define Xb { OP_DSreg, eSI_reg }
359#define Xv { OP_DSreg, eSI_reg }
360#define Xz { OP_DSreg, eSI_reg }
361#define Yb { OP_ESreg, eDI_reg }
362#define Yv { OP_ESreg, eDI_reg }
363#define DSBX { OP_DSreg, eBX_reg }
364
365#define es { OP_REG, es_reg }
366#define ss { OP_REG, ss_reg }
367#define cs { OP_REG, cs_reg }
368#define ds { OP_REG, ds_reg }
369#define fs { OP_REG, fs_reg }
370#define gs { OP_REG, gs_reg }
371
372#define MX { OP_MMX, 0 }
373#define XM { OP_XMM, 0 }
539f890d 374#define XMScalar { OP_XMM, scalar_mode }
6c30d220 375#define XMGatherQ { OP_XMM, vex_vsib_q_w_dq_mode }
c0f3af97 376#define XMM { OP_XMM, xmm_mode }
43234a1e 377#define XMxmmq { OP_XMM, xmmq_mode }
ce518a5f 378#define EM { OP_EM, v_mode }
b6169b20 379#define EMS { OP_EM, v_swap_mode }
09a2c6cf 380#define EMd { OP_EM, d_mode }
14051056 381#define EMx { OP_EM, x_mode }
53467f57 382#define EXbScalar { OP_EX, b_scalar_mode }
8976381e 383#define EXw { OP_EX, w_mode }
53467f57 384#define EXwScalar { OP_EX, w_scalar_mode }
09a2c6cf 385#define EXd { OP_EX, d_mode }
539f890d 386#define EXdScalar { OP_EX, d_scalar_mode }
fa99fab2 387#define EXdS { OP_EX, d_swap_mode }
43234a1e 388#define EXdScalarS { OP_EX, d_scalar_swap_mode }
09a2c6cf 389#define EXq { OP_EX, q_mode }
539f890d
L
390#define EXqScalar { OP_EX, q_scalar_mode }
391#define EXqScalarS { OP_EX, q_scalar_swap_mode }
b6169b20 392#define EXqS { OP_EX, q_swap_mode }
09a2c6cf 393#define EXx { OP_EX, x_mode }
b6169b20 394#define EXxS { OP_EX, x_swap_mode }
c0f3af97 395#define EXxmm { OP_EX, xmm_mode }
43234a1e 396#define EXymm { OP_EX, ymm_mode }
c0f3af97 397#define EXxmmq { OP_EX, xmmq_mode }
43234a1e 398#define EXEvexHalfBcstXmmq { OP_EX, evex_half_bcst_xmmq_mode }
6c30d220
L
399#define EXxmm_mb { OP_EX, xmm_mb_mode }
400#define EXxmm_mw { OP_EX, xmm_mw_mode }
401#define EXxmm_md { OP_EX, xmm_md_mode }
402#define EXxmm_mq { OP_EX, xmm_mq_mode }
43234a1e 403#define EXxmm_mdq { OP_EX, xmm_mdq_mode }
6c30d220
L
404#define EXxmmdw { OP_EX, xmmdw_mode }
405#define EXxmmqd { OP_EX, xmmqd_mode }
c0f3af97 406#define EXymmq { OP_EX, ymmq_mode }
0bfee649 407#define EXVexWdq { OP_EX, vex_w_dq_mode }
1c480963 408#define EXVexWdqScalar { OP_EX, vex_scalar_w_dq_mode }
43234a1e
L
409#define EXEvexXGscat { OP_EX, evex_x_gscat_mode }
410#define EXEvexXNoBcst { OP_EX, evex_x_nobcst_mode }
ce518a5f
L
411#define MS { OP_MS, v_mode }
412#define XS { OP_XS, v_mode }
09335d05 413#define EMCq { OP_EMC, q_mode }
ce518a5f 414#define MXC { OP_MXC, 0 }
ce518a5f 415#define OPSUF { OP_3DNowSuffix, 0 }
ad19981d 416#define CMP { CMP_Fixup, 0 }
42903f7f 417#define XMM0 { XMM_Fixup, 0 }
eacc9c89 418#define FXSAVE { FXSAVE_Fixup, 0 }
5dd85c99
SP
419#define Vex_2src_1 { OP_Vex_2src_1, 0 }
420#define Vex_2src_2 { OP_Vex_2src_2, 0 }
252b5132 421
c0f3af97 422#define Vex { OP_VEX, vex_mode }
539f890d 423#define VexScalar { OP_VEX, vex_scalar_mode }
6c30d220 424#define VexGatherQ { OP_VEX, vex_vsib_q_w_dq_mode }
c0f3af97
L
425#define Vex128 { OP_VEX, vex128_mode }
426#define Vex256 { OP_VEX, vex256_mode }
cb21baef 427#define VexGdq { OP_VEX, dq_mode }
c0f3af97 428#define EXdVex { OP_EX_Vex, d_mode }
fa99fab2 429#define EXdVexS { OP_EX_Vex, d_swap_mode }
539f890d 430#define EXdVexScalarS { OP_EX_Vex, d_scalar_swap_mode }
c0f3af97 431#define EXqVex { OP_EX_Vex, q_mode }
fa99fab2 432#define EXqVexS { OP_EX_Vex, q_swap_mode }
539f890d 433#define EXqVexScalarS { OP_EX_Vex, q_scalar_swap_mode }
922d8de8
DR
434#define EXVexW { OP_EX_VexW, x_mode }
435#define EXdVexW { OP_EX_VexW, d_mode }
436#define EXqVexW { OP_EX_VexW, q_mode }
a683cc34 437#define EXVexImmW { OP_EX_VexImmW, x_mode }
c0f3af97 438#define XMVex { OP_XMM_Vex, 0 }
539f890d 439#define XMVexScalar { OP_XMM_Vex, scalar_mode }
922d8de8 440#define XMVexW { OP_XMM_VexW, 0 }
c0f3af97
L
441#define XMVexI4 { OP_REG_VexI4, x_mode }
442#define PCLMUL { PCLMUL_Fixup, 0 }
c0f3af97 443#define VCMP { VCMP_Fixup, 0 }
43234a1e 444#define VPCMP { VPCMP_Fixup, 0 }
be92cb14 445#define VPCOM { VPCOM_Fixup, 0 }
43234a1e
L
446
447#define EXxEVexR { OP_Rounding, evex_rounding_mode }
70df6fc9 448#define EXxEVexR64 { OP_Rounding, evex_rounding_64_mode }
43234a1e
L
449#define EXxEVexS { OP_Rounding, evex_sae_mode }
450
451#define XMask { OP_Mask, mask_mode }
452#define MaskG { OP_G, mask_mode }
453#define MaskE { OP_E, mask_mode }
1ba585e8 454#define MaskBDE { OP_E, mask_bd_mode }
43234a1e
L
455#define MaskR { OP_R, mask_mode }
456#define MaskVex { OP_VEX, mask_mode }
c0f3af97 457
6c30d220 458#define MVexVSIBDWpX { OP_M, vex_vsib_d_w_dq_mode }
5fc35d96 459#define MVexVSIBDQWpX { OP_M, vex_vsib_d_w_d_mode }
6c30d220 460#define MVexVSIBQWpX { OP_M, vex_vsib_q_w_dq_mode }
5fc35d96 461#define MVexVSIBQDWpX { OP_M, vex_vsib_q_w_d_mode }
6c30d220 462
35c52694 463/* Used handle "rep" prefix for string instructions. */
ce518a5f
L
464#define Xbr { REP_Fixup, eSI_reg }
465#define Xvr { REP_Fixup, eSI_reg }
466#define Ybr { REP_Fixup, eDI_reg }
467#define Yvr { REP_Fixup, eDI_reg }
468#define Yzr { REP_Fixup, eDI_reg }
469#define indirDXr { REP_Fixup, indir_dx_reg }
470#define ALr { REP_Fixup, al_reg }
471#define eAXr { REP_Fixup, eAX_reg }
472
42164a71
L
473/* Used handle HLE prefix for lockable instructions. */
474#define Ebh1 { HLE_Fixup1, b_mode }
475#define Evh1 { HLE_Fixup1, v_mode }
476#define Ebh2 { HLE_Fixup2, b_mode }
477#define Evh2 { HLE_Fixup2, v_mode }
478#define Ebh3 { HLE_Fixup3, b_mode }
479#define Evh3 { HLE_Fixup3, v_mode }
480
7e8b059b 481#define BND { BND_Fixup, 0 }
04ef582a 482#define NOTRACK { NOTRACK_Fixup, 0 }
7e8b059b 483
ce518a5f
L
484#define cond_jump_flag { NULL, cond_jump_mode }
485#define loop_jcxz_flag { NULL, loop_jcxz_mode }
3ffd33cf 486
252b5132 487/* bits in sizeflag */
252b5132 488#define SUFFIX_ALWAYS 4
252b5132
RH
489#define AFLAG 2
490#define DFLAG 1
491
51e7da1b
L
492enum
493{
494 /* byte operand */
495 b_mode = 1,
496 /* byte operand with operand swapped */
3873ba12 497 b_swap_mode,
e3949f17
L
498 /* byte operand, sign extend like 'T' suffix */
499 b_T_mode,
51e7da1b 500 /* operand size depends on prefixes */
3873ba12 501 v_mode,
51e7da1b 502 /* operand size depends on prefixes with operand swapped */
3873ba12 503 v_swap_mode,
de89d0a3
IT
504 /* operand size depends on address prefix */
505 va_mode,
51e7da1b 506 /* word operand */
3873ba12 507 w_mode,
51e7da1b 508 /* double word operand */
3873ba12 509 d_mode,
51e7da1b 510 /* double word operand with operand swapped */
3873ba12 511 d_swap_mode,
51e7da1b 512 /* quad word operand */
3873ba12 513 q_mode,
51e7da1b 514 /* quad word operand with operand swapped */
3873ba12 515 q_swap_mode,
51e7da1b 516 /* ten-byte operand */
3873ba12 517 t_mode,
43234a1e
L
518 /* 16-byte XMM, 32-byte YMM or 64-byte ZMM operand. In EVEX with
519 broadcast enabled. */
3873ba12 520 x_mode,
43234a1e
L
521 /* Similar to x_mode, but with different EVEX mem shifts. */
522 evex_x_gscat_mode,
523 /* Similar to x_mode, but with disabled broadcast. */
524 evex_x_nobcst_mode,
525 /* Similar to x_mode, but with operands swapped and disabled broadcast
526 in EVEX. */
3873ba12 527 x_swap_mode,
51e7da1b 528 /* 16-byte XMM operand */
3873ba12 529 xmm_mode,
43234a1e
L
530 /* XMM, XMM or YMM register operand, or quad word, xmmword or ymmword
531 memory operand (depending on vector length). Broadcast isn't
532 allowed. */
3873ba12 533 xmmq_mode,
43234a1e
L
534 /* Same as xmmq_mode, but broadcast is allowed. */
535 evex_half_bcst_xmmq_mode,
6c30d220
L
536 /* XMM register or byte memory operand */
537 xmm_mb_mode,
538 /* XMM register or word memory operand */
539 xmm_mw_mode,
540 /* XMM register or double word memory operand */
541 xmm_md_mode,
542 /* XMM register or quad word memory operand */
543 xmm_mq_mode,
43234a1e
L
544 /* XMM register or double/quad word memory operand, depending on
545 VEX.W. */
546 xmm_mdq_mode,
547 /* 16-byte XMM, word, double word or quad word operand. */
6c30d220 548 xmmdw_mode,
43234a1e 549 /* 16-byte XMM, double word, quad word operand or xmm word operand. */
6c30d220 550 xmmqd_mode,
43234a1e
L
551 /* 32-byte YMM operand */
552 ymm_mode,
553 /* quad word, ymmword or zmmword memory operand. */
3873ba12 554 ymmq_mode,
6c30d220
L
555 /* 32-byte YMM or 16-byte word operand */
556 ymmxmm_mode,
51e7da1b 557 /* d_mode in 32bit, q_mode in 64bit mode. */
3873ba12 558 m_mode,
51e7da1b 559 /* pair of v_mode operands */
3873ba12
L
560 a_mode,
561 cond_jump_mode,
562 loop_jcxz_mode,
7e8b059b 563 v_bnd_mode,
d276ec69
JB
564 /* like v_bnd_mode in 32bit, no RIP-rel in 64bit mode. */
565 v_bndmk_mode,
51e7da1b 566 /* operand size depends on REX prefixes. */
3873ba12 567 dq_mode,
51e7da1b 568 /* registers like dq_mode, memory like w_mode. */
3873ba12 569 dqw_mode,
9f79e886 570 /* bounds operand */
7e8b059b 571 bnd_mode,
9f79e886
JB
572 /* bounds operand with operand swapped */
573 bnd_swap_mode,
51e7da1b 574 /* 4- or 6-byte pointer operand */
3873ba12
L
575 f_mode,
576 const_1_mode,
07f5af7d
L
577 /* v_mode for indirect branch opcodes. */
578 indir_v_mode,
51e7da1b 579 /* v_mode for stack-related opcodes. */
3873ba12 580 stack_v_mode,
51e7da1b 581 /* non-quad operand size depends on prefixes */
3873ba12 582 z_mode,
51e7da1b 583 /* 16-byte operand */
3873ba12 584 o_mode,
51e7da1b 585 /* registers like dq_mode, memory like b_mode. */
3873ba12 586 dqb_mode,
1ba585e8
IT
587 /* registers like d_mode, memory like b_mode. */
588 db_mode,
589 /* registers like d_mode, memory like w_mode. */
590 dw_mode,
51e7da1b 591 /* registers like dq_mode, memory like d_mode. */
3873ba12 592 dqd_mode,
51e7da1b 593 /* normal vex mode */
3873ba12 594 vex_mode,
51e7da1b 595 /* 128bit vex mode */
3873ba12 596 vex128_mode,
51e7da1b 597 /* 256bit vex mode */
3873ba12 598 vex256_mode,
51e7da1b 599 /* operand size depends on the VEX.W bit. */
3873ba12 600 vex_w_dq_mode,
d55ee72f 601
6c30d220
L
602 /* Similar to vex_w_dq_mode, with VSIB dword indices. */
603 vex_vsib_d_w_dq_mode,
5fc35d96
IT
604 /* Similar to vex_vsib_d_w_dq_mode, with smaller memory. */
605 vex_vsib_d_w_d_mode,
6c30d220
L
606 /* Similar to vex_w_dq_mode, with VSIB qword indices. */
607 vex_vsib_q_w_dq_mode,
5fc35d96
IT
608 /* Similar to vex_vsib_q_w_dq_mode, with smaller memory. */
609 vex_vsib_q_w_d_mode,
6c30d220 610
539f890d
L
611 /* scalar, ignore vector length. */
612 scalar_mode,
53467f57
IT
613 /* like b_mode, ignore vector length. */
614 b_scalar_mode,
615 /* like w_mode, ignore vector length. */
616 w_scalar_mode,
539f890d
L
617 /* like d_mode, ignore vector length. */
618 d_scalar_mode,
619 /* like d_swap_mode, ignore vector length. */
620 d_scalar_swap_mode,
621 /* like q_mode, ignore vector length. */
622 q_scalar_mode,
623 /* like q_swap_mode, ignore vector length. */
624 q_scalar_swap_mode,
625 /* like vex_mode, ignore vector length. */
626 vex_scalar_mode,
1c480963
L
627 /* like vex_w_dq_mode, ignore vector length. */
628 vex_scalar_w_dq_mode,
539f890d 629
43234a1e
L
630 /* Static rounding. */
631 evex_rounding_mode,
70df6fc9
L
632 /* Static rounding, 64-bit mode only. */
633 evex_rounding_64_mode,
43234a1e
L
634 /* Supress all exceptions. */
635 evex_sae_mode,
636
637 /* Mask register operand. */
638 mask_mode,
1ba585e8
IT
639 /* Mask register operand. */
640 mask_bd_mode,
43234a1e 641
3873ba12
L
642 es_reg,
643 cs_reg,
644 ss_reg,
645 ds_reg,
646 fs_reg,
647 gs_reg,
d55ee72f 648
3873ba12
L
649 eAX_reg,
650 eCX_reg,
651 eDX_reg,
652 eBX_reg,
653 eSP_reg,
654 eBP_reg,
655 eSI_reg,
656 eDI_reg,
d55ee72f 657
3873ba12
L
658 al_reg,
659 cl_reg,
660 dl_reg,
661 bl_reg,
662 ah_reg,
663 ch_reg,
664 dh_reg,
665 bh_reg,
d55ee72f 666
3873ba12
L
667 ax_reg,
668 cx_reg,
669 dx_reg,
670 bx_reg,
671 sp_reg,
672 bp_reg,
673 si_reg,
674 di_reg,
d55ee72f 675
3873ba12
L
676 rAX_reg,
677 rCX_reg,
678 rDX_reg,
679 rBX_reg,
680 rSP_reg,
681 rBP_reg,
682 rSI_reg,
683 rDI_reg,
d55ee72f 684
3873ba12
L
685 z_mode_ax_reg,
686 indir_dx_reg
51e7da1b 687};
252b5132 688
51e7da1b
L
689enum
690{
691 FLOATCODE = 1,
3873ba12
L
692 USE_REG_TABLE,
693 USE_MOD_TABLE,
694 USE_RM_TABLE,
695 USE_PREFIX_TABLE,
696 USE_X86_64_TABLE,
697 USE_3BYTE_TABLE,
f88c9eb0 698 USE_XOP_8F_TABLE,
3873ba12
L
699 USE_VEX_C4_TABLE,
700 USE_VEX_C5_TABLE,
9e30b8e0 701 USE_VEX_LEN_TABLE,
43234a1e 702 USE_VEX_W_TABLE,
04e2a182
L
703 USE_EVEX_TABLE,
704 USE_EVEX_LEN_TABLE
51e7da1b 705};
6439fc28 706
bf890a93 707#define FLOAT NULL, { { NULL, FLOATCODE } }, 0
4efba78c 708
bf890a93
IT
709#define DIS386(T, I) NULL, { { NULL, (T)}, { NULL, (I) } }, 0
710#define DIS386_PREFIX(T, I, P) NULL, { { NULL, (T)}, { NULL, (I) } }, P
1ceb70f8
L
711#define REG_TABLE(I) DIS386 (USE_REG_TABLE, (I))
712#define MOD_TABLE(I) DIS386 (USE_MOD_TABLE, (I))
713#define RM_TABLE(I) DIS386 (USE_RM_TABLE, (I))
714#define PREFIX_TABLE(I) DIS386 (USE_PREFIX_TABLE, (I))
4e7d34a6
L
715#define X86_64_TABLE(I) DIS386 (USE_X86_64_TABLE, (I))
716#define THREE_BYTE_TABLE(I) DIS386 (USE_3BYTE_TABLE, (I))
bf890a93 717#define THREE_BYTE_TABLE_PREFIX(I, P) DIS386_PREFIX (USE_3BYTE_TABLE, (I), P)
f88c9eb0 718#define XOP_8F_TABLE(I) DIS386 (USE_XOP_8F_TABLE, (I))
c0f3af97
L
719#define VEX_C4_TABLE(I) DIS386 (USE_VEX_C4_TABLE, (I))
720#define VEX_C5_TABLE(I) DIS386 (USE_VEX_C5_TABLE, (I))
721#define VEX_LEN_TABLE(I) DIS386 (USE_VEX_LEN_TABLE, (I))
9e30b8e0 722#define VEX_W_TABLE(I) DIS386 (USE_VEX_W_TABLE, (I))
43234a1e 723#define EVEX_TABLE(I) DIS386 (USE_EVEX_TABLE, (I))
04e2a182 724#define EVEX_LEN_TABLE(I) DIS386 (USE_EVEX_LEN_TABLE, (I))
1ceb70f8 725
51e7da1b
L
726enum
727{
728 REG_80 = 0,
3873ba12 729 REG_81,
7148c369 730 REG_83,
3873ba12
L
731 REG_8F,
732 REG_C0,
733 REG_C1,
734 REG_C6,
735 REG_C7,
736 REG_D0,
737 REG_D1,
738 REG_D2,
739 REG_D3,
740 REG_F6,
741 REG_F7,
742 REG_FE,
743 REG_FF,
744 REG_0F00,
745 REG_0F01,
746 REG_0F0D,
747 REG_0F18,
c48935d7 748 REG_0F1C_MOD_0,
603555e5 749 REG_0F1E_MOD_3,
3873ba12
L
750 REG_0F71,
751 REG_0F72,
752 REG_0F73,
753 REG_0FA6,
754 REG_0FA7,
755 REG_0FAE,
756 REG_0FBA,
757 REG_0FC7,
592a252b
L
758 REG_VEX_0F71,
759 REG_VEX_0F72,
760 REG_VEX_0F73,
761 REG_VEX_0FAE,
f12dc422 762 REG_VEX_0F38F3,
f88c9eb0 763 REG_XOP_LWPCB,
2a2a0f38
QN
764 REG_XOP_LWP,
765 REG_XOP_TBM_01,
43234a1e
L
766 REG_XOP_TBM_02,
767
1ba585e8 768 REG_EVEX_0F71,
43234a1e
L
769 REG_EVEX_0F72,
770 REG_EVEX_0F73,
771 REG_EVEX_0F38C6,
772 REG_EVEX_0F38C7
51e7da1b 773};
1ceb70f8 774
51e7da1b
L
775enum
776{
777 MOD_8D = 0,
42164a71
L
778 MOD_C6_REG_7,
779 MOD_C7_REG_7,
4a357820
MZ
780 MOD_FF_REG_3,
781 MOD_FF_REG_5,
3873ba12
L
782 MOD_0F01_REG_0,
783 MOD_0F01_REG_1,
784 MOD_0F01_REG_2,
785 MOD_0F01_REG_3,
8eab4136 786 MOD_0F01_REG_5,
3873ba12
L
787 MOD_0F01_REG_7,
788 MOD_0F12_PREFIX_0,
789 MOD_0F13,
790 MOD_0F16_PREFIX_0,
791 MOD_0F17,
792 MOD_0F18_REG_0,
793 MOD_0F18_REG_1,
794 MOD_0F18_REG_2,
795 MOD_0F18_REG_3,
d7189fa5
RM
796 MOD_0F18_REG_4,
797 MOD_0F18_REG_5,
798 MOD_0F18_REG_6,
799 MOD_0F18_REG_7,
7e8b059b
L
800 MOD_0F1A_PREFIX_0,
801 MOD_0F1B_PREFIX_0,
802 MOD_0F1B_PREFIX_1,
c48935d7 803 MOD_0F1C_PREFIX_0,
603555e5 804 MOD_0F1E_PREFIX_1,
3873ba12
L
805 MOD_0F24,
806 MOD_0F26,
807 MOD_0F2B_PREFIX_0,
808 MOD_0F2B_PREFIX_1,
809 MOD_0F2B_PREFIX_2,
810 MOD_0F2B_PREFIX_3,
811 MOD_0F51,
812 MOD_0F71_REG_2,
813 MOD_0F71_REG_4,
814 MOD_0F71_REG_6,
815 MOD_0F72_REG_2,
816 MOD_0F72_REG_4,
817 MOD_0F72_REG_6,
818 MOD_0F73_REG_2,
819 MOD_0F73_REG_3,
820 MOD_0F73_REG_6,
821 MOD_0F73_REG_7,
822 MOD_0FAE_REG_0,
823 MOD_0FAE_REG_1,
824 MOD_0FAE_REG_2,
825 MOD_0FAE_REG_3,
826 MOD_0FAE_REG_4,
827 MOD_0FAE_REG_5,
828 MOD_0FAE_REG_6,
829 MOD_0FAE_REG_7,
830 MOD_0FB2,
831 MOD_0FB4,
832 MOD_0FB5,
a8484f96 833 MOD_0FC3,
963f3586
IT
834 MOD_0FC7_REG_3,
835 MOD_0FC7_REG_4,
836 MOD_0FC7_REG_5,
3873ba12
L
837 MOD_0FC7_REG_6,
838 MOD_0FC7_REG_7,
839 MOD_0FD7,
840 MOD_0FE7_PREFIX_2,
841 MOD_0FF0_PREFIX_3,
842 MOD_0F382A_PREFIX_2,
603555e5
L
843 MOD_0F38F5_PREFIX_2,
844 MOD_0F38F6_PREFIX_0,
5d79adc4 845 MOD_0F38F8_PREFIX_1,
c0a30a9f 846 MOD_0F38F8_PREFIX_2,
5d79adc4 847 MOD_0F38F8_PREFIX_3,
c0a30a9f 848 MOD_0F38F9_PREFIX_0,
3873ba12
L
849 MOD_62_32BIT,
850 MOD_C4_32BIT,
851 MOD_C5_32BIT,
592a252b
L
852 MOD_VEX_0F12_PREFIX_0,
853 MOD_VEX_0F13,
854 MOD_VEX_0F16_PREFIX_0,
855 MOD_VEX_0F17,
856 MOD_VEX_0F2B,
ab4e4ed5
AF
857 MOD_VEX_W_0_0F41_P_0_LEN_1,
858 MOD_VEX_W_1_0F41_P_0_LEN_1,
859 MOD_VEX_W_0_0F41_P_2_LEN_1,
860 MOD_VEX_W_1_0F41_P_2_LEN_1,
861 MOD_VEX_W_0_0F42_P_0_LEN_1,
862 MOD_VEX_W_1_0F42_P_0_LEN_1,
863 MOD_VEX_W_0_0F42_P_2_LEN_1,
864 MOD_VEX_W_1_0F42_P_2_LEN_1,
865 MOD_VEX_W_0_0F44_P_0_LEN_1,
866 MOD_VEX_W_1_0F44_P_0_LEN_1,
867 MOD_VEX_W_0_0F44_P_2_LEN_1,
868 MOD_VEX_W_1_0F44_P_2_LEN_1,
869 MOD_VEX_W_0_0F45_P_0_LEN_1,
870 MOD_VEX_W_1_0F45_P_0_LEN_1,
871 MOD_VEX_W_0_0F45_P_2_LEN_1,
872 MOD_VEX_W_1_0F45_P_2_LEN_1,
873 MOD_VEX_W_0_0F46_P_0_LEN_1,
874 MOD_VEX_W_1_0F46_P_0_LEN_1,
875 MOD_VEX_W_0_0F46_P_2_LEN_1,
876 MOD_VEX_W_1_0F46_P_2_LEN_1,
877 MOD_VEX_W_0_0F47_P_0_LEN_1,
878 MOD_VEX_W_1_0F47_P_0_LEN_1,
879 MOD_VEX_W_0_0F47_P_2_LEN_1,
880 MOD_VEX_W_1_0F47_P_2_LEN_1,
881 MOD_VEX_W_0_0F4A_P_0_LEN_1,
882 MOD_VEX_W_1_0F4A_P_0_LEN_1,
883 MOD_VEX_W_0_0F4A_P_2_LEN_1,
884 MOD_VEX_W_1_0F4A_P_2_LEN_1,
885 MOD_VEX_W_0_0F4B_P_0_LEN_1,
886 MOD_VEX_W_1_0F4B_P_0_LEN_1,
887 MOD_VEX_W_0_0F4B_P_2_LEN_1,
592a252b
L
888 MOD_VEX_0F50,
889 MOD_VEX_0F71_REG_2,
890 MOD_VEX_0F71_REG_4,
891 MOD_VEX_0F71_REG_6,
892 MOD_VEX_0F72_REG_2,
893 MOD_VEX_0F72_REG_4,
894 MOD_VEX_0F72_REG_6,
895 MOD_VEX_0F73_REG_2,
896 MOD_VEX_0F73_REG_3,
897 MOD_VEX_0F73_REG_6,
898 MOD_VEX_0F73_REG_7,
ab4e4ed5
AF
899 MOD_VEX_W_0_0F91_P_0_LEN_0,
900 MOD_VEX_W_1_0F91_P_0_LEN_0,
901 MOD_VEX_W_0_0F91_P_2_LEN_0,
902 MOD_VEX_W_1_0F91_P_2_LEN_0,
903 MOD_VEX_W_0_0F92_P_0_LEN_0,
904 MOD_VEX_W_0_0F92_P_2_LEN_0,
58a211d2 905 MOD_VEX_0F92_P_3_LEN_0,
ab4e4ed5
AF
906 MOD_VEX_W_0_0F93_P_0_LEN_0,
907 MOD_VEX_W_0_0F93_P_2_LEN_0,
58a211d2 908 MOD_VEX_0F93_P_3_LEN_0,
ab4e4ed5
AF
909 MOD_VEX_W_0_0F98_P_0_LEN_0,
910 MOD_VEX_W_1_0F98_P_0_LEN_0,
911 MOD_VEX_W_0_0F98_P_2_LEN_0,
912 MOD_VEX_W_1_0F98_P_2_LEN_0,
913 MOD_VEX_W_0_0F99_P_0_LEN_0,
914 MOD_VEX_W_1_0F99_P_0_LEN_0,
915 MOD_VEX_W_0_0F99_P_2_LEN_0,
916 MOD_VEX_W_1_0F99_P_2_LEN_0,
592a252b
L
917 MOD_VEX_0FAE_REG_2,
918 MOD_VEX_0FAE_REG_3,
919 MOD_VEX_0FD7_PREFIX_2,
920 MOD_VEX_0FE7_PREFIX_2,
921 MOD_VEX_0FF0_PREFIX_3,
592a252b
L
922 MOD_VEX_0F381A_PREFIX_2,
923 MOD_VEX_0F382A_PREFIX_2,
924 MOD_VEX_0F382C_PREFIX_2,
925 MOD_VEX_0F382D_PREFIX_2,
926 MOD_VEX_0F382E_PREFIX_2,
6c30d220
L
927 MOD_VEX_0F382F_PREFIX_2,
928 MOD_VEX_0F385A_PREFIX_2,
929 MOD_VEX_0F388C_PREFIX_2,
930 MOD_VEX_0F388E_PREFIX_2,
ab4e4ed5
AF
931 MOD_VEX_W_0_0F3A30_P_2_LEN_0,
932 MOD_VEX_W_1_0F3A30_P_2_LEN_0,
933 MOD_VEX_W_0_0F3A31_P_2_LEN_0,
934 MOD_VEX_W_1_0F3A31_P_2_LEN_0,
935 MOD_VEX_W_0_0F3A32_P_2_LEN_0,
936 MOD_VEX_W_1_0F3A32_P_2_LEN_0,
937 MOD_VEX_W_0_0F3A33_P_2_LEN_0,
938 MOD_VEX_W_1_0F3A33_P_2_LEN_0,
43234a1e
L
939
940 MOD_EVEX_0F10_PREFIX_1,
941 MOD_EVEX_0F10_PREFIX_3,
942 MOD_EVEX_0F11_PREFIX_1,
943 MOD_EVEX_0F11_PREFIX_3,
944 MOD_EVEX_0F12_PREFIX_0,
945 MOD_EVEX_0F16_PREFIX_0,
946 MOD_EVEX_0F38C6_REG_1,
947 MOD_EVEX_0F38C6_REG_2,
948 MOD_EVEX_0F38C6_REG_5,
949 MOD_EVEX_0F38C6_REG_6,
950 MOD_EVEX_0F38C7_REG_1,
951 MOD_EVEX_0F38C7_REG_2,
952 MOD_EVEX_0F38C7_REG_5,
953 MOD_EVEX_0F38C7_REG_6
51e7da1b 954};
1ceb70f8 955
51e7da1b
L
956enum
957{
42164a71
L
958 RM_C6_REG_7 = 0,
959 RM_C7_REG_7,
960 RM_0F01_REG_0,
3873ba12
L
961 RM_0F01_REG_1,
962 RM_0F01_REG_2,
963 RM_0F01_REG_3,
8eab4136 964 RM_0F01_REG_5,
3873ba12 965 RM_0F01_REG_7,
603555e5 966 RM_0F1E_MOD_3_REG_7,
3873ba12
L
967 RM_0FAE_REG_6,
968 RM_0FAE_REG_7
51e7da1b 969};
1ceb70f8 970
51e7da1b
L
971enum
972{
973 PREFIX_90 = 0,
603555e5 974 PREFIX_MOD_0_0F01_REG_5,
2234eee6 975 PREFIX_MOD_3_0F01_REG_5_RM_0,
603555e5 976 PREFIX_MOD_3_0F01_REG_5_RM_2,
3233d7d0 977 PREFIX_0F09,
3873ba12
L
978 PREFIX_0F10,
979 PREFIX_0F11,
980 PREFIX_0F12,
981 PREFIX_0F16,
7e8b059b
L
982 PREFIX_0F1A,
983 PREFIX_0F1B,
c48935d7 984 PREFIX_0F1C,
603555e5 985 PREFIX_0F1E,
3873ba12
L
986 PREFIX_0F2A,
987 PREFIX_0F2B,
988 PREFIX_0F2C,
989 PREFIX_0F2D,
990 PREFIX_0F2E,
991 PREFIX_0F2F,
992 PREFIX_0F51,
993 PREFIX_0F52,
994 PREFIX_0F53,
995 PREFIX_0F58,
996 PREFIX_0F59,
997 PREFIX_0F5A,
998 PREFIX_0F5B,
999 PREFIX_0F5C,
1000 PREFIX_0F5D,
1001 PREFIX_0F5E,
1002 PREFIX_0F5F,
1003 PREFIX_0F60,
1004 PREFIX_0F61,
1005 PREFIX_0F62,
1006 PREFIX_0F6C,
1007 PREFIX_0F6D,
1008 PREFIX_0F6F,
1009 PREFIX_0F70,
1010 PREFIX_0F73_REG_3,
1011 PREFIX_0F73_REG_7,
1012 PREFIX_0F78,
1013 PREFIX_0F79,
1014 PREFIX_0F7C,
1015 PREFIX_0F7D,
1016 PREFIX_0F7E,
1017 PREFIX_0F7F,
c7b8aa3a
L
1018 PREFIX_0FAE_REG_0,
1019 PREFIX_0FAE_REG_1,
1020 PREFIX_0FAE_REG_2,
1021 PREFIX_0FAE_REG_3,
6b40c462
L
1022 PREFIX_MOD_0_0FAE_REG_4,
1023 PREFIX_MOD_3_0FAE_REG_4,
603555e5 1024 PREFIX_MOD_0_0FAE_REG_5,
2234eee6 1025 PREFIX_MOD_3_0FAE_REG_5,
de89d0a3
IT
1026 PREFIX_MOD_0_0FAE_REG_6,
1027 PREFIX_MOD_1_0FAE_REG_6,
963f3586 1028 PREFIX_0FAE_REG_7,
3873ba12 1029 PREFIX_0FB8,
f12dc422 1030 PREFIX_0FBC,
3873ba12
L
1031 PREFIX_0FBD,
1032 PREFIX_0FC2,
a8484f96 1033 PREFIX_MOD_0_0FC3,
f24bcbaa
L
1034 PREFIX_MOD_0_0FC7_REG_6,
1035 PREFIX_MOD_3_0FC7_REG_6,
1036 PREFIX_MOD_3_0FC7_REG_7,
3873ba12
L
1037 PREFIX_0FD0,
1038 PREFIX_0FD6,
1039 PREFIX_0FE6,
1040 PREFIX_0FE7,
1041 PREFIX_0FF0,
1042 PREFIX_0FF7,
1043 PREFIX_0F3810,
1044 PREFIX_0F3814,
1045 PREFIX_0F3815,
1046 PREFIX_0F3817,
1047 PREFIX_0F3820,
1048 PREFIX_0F3821,
1049 PREFIX_0F3822,
1050 PREFIX_0F3823,
1051 PREFIX_0F3824,
1052 PREFIX_0F3825,
1053 PREFIX_0F3828,
1054 PREFIX_0F3829,
1055 PREFIX_0F382A,
1056 PREFIX_0F382B,
1057 PREFIX_0F3830,
1058 PREFIX_0F3831,
1059 PREFIX_0F3832,
1060 PREFIX_0F3833,
1061 PREFIX_0F3834,
1062 PREFIX_0F3835,
1063 PREFIX_0F3837,
1064 PREFIX_0F3838,
1065 PREFIX_0F3839,
1066 PREFIX_0F383A,
1067 PREFIX_0F383B,
1068 PREFIX_0F383C,
1069 PREFIX_0F383D,
1070 PREFIX_0F383E,
1071 PREFIX_0F383F,
1072 PREFIX_0F3840,
1073 PREFIX_0F3841,
1074 PREFIX_0F3880,
1075 PREFIX_0F3881,
6c30d220 1076 PREFIX_0F3882,
a0046408
L
1077 PREFIX_0F38C8,
1078 PREFIX_0F38C9,
1079 PREFIX_0F38CA,
1080 PREFIX_0F38CB,
1081 PREFIX_0F38CC,
1082 PREFIX_0F38CD,
48521003 1083 PREFIX_0F38CF,
3873ba12
L
1084 PREFIX_0F38DB,
1085 PREFIX_0F38DC,
1086 PREFIX_0F38DD,
1087 PREFIX_0F38DE,
1088 PREFIX_0F38DF,
1089 PREFIX_0F38F0,
1090 PREFIX_0F38F1,
603555e5 1091 PREFIX_0F38F5,
e2e1fcde 1092 PREFIX_0F38F6,
c0a30a9f
L
1093 PREFIX_0F38F8,
1094 PREFIX_0F38F9,
3873ba12
L
1095 PREFIX_0F3A08,
1096 PREFIX_0F3A09,
1097 PREFIX_0F3A0A,
1098 PREFIX_0F3A0B,
1099 PREFIX_0F3A0C,
1100 PREFIX_0F3A0D,
1101 PREFIX_0F3A0E,
1102 PREFIX_0F3A14,
1103 PREFIX_0F3A15,
1104 PREFIX_0F3A16,
1105 PREFIX_0F3A17,
1106 PREFIX_0F3A20,
1107 PREFIX_0F3A21,
1108 PREFIX_0F3A22,
1109 PREFIX_0F3A40,
1110 PREFIX_0F3A41,
1111 PREFIX_0F3A42,
1112 PREFIX_0F3A44,
1113 PREFIX_0F3A60,
1114 PREFIX_0F3A61,
1115 PREFIX_0F3A62,
1116 PREFIX_0F3A63,
a0046408 1117 PREFIX_0F3ACC,
48521003
IT
1118 PREFIX_0F3ACE,
1119 PREFIX_0F3ACF,
3873ba12 1120 PREFIX_0F3ADF,
592a252b
L
1121 PREFIX_VEX_0F10,
1122 PREFIX_VEX_0F11,
1123 PREFIX_VEX_0F12,
1124 PREFIX_VEX_0F16,
1125 PREFIX_VEX_0F2A,
1126 PREFIX_VEX_0F2C,
1127 PREFIX_VEX_0F2D,
1128 PREFIX_VEX_0F2E,
1129 PREFIX_VEX_0F2F,
43234a1e
L
1130 PREFIX_VEX_0F41,
1131 PREFIX_VEX_0F42,
1132 PREFIX_VEX_0F44,
1133 PREFIX_VEX_0F45,
1134 PREFIX_VEX_0F46,
1135 PREFIX_VEX_0F47,
1ba585e8 1136 PREFIX_VEX_0F4A,
43234a1e 1137 PREFIX_VEX_0F4B,
592a252b
L
1138 PREFIX_VEX_0F51,
1139 PREFIX_VEX_0F52,
1140 PREFIX_VEX_0F53,
1141 PREFIX_VEX_0F58,
1142 PREFIX_VEX_0F59,
1143 PREFIX_VEX_0F5A,
1144 PREFIX_VEX_0F5B,
1145 PREFIX_VEX_0F5C,
1146 PREFIX_VEX_0F5D,
1147 PREFIX_VEX_0F5E,
1148 PREFIX_VEX_0F5F,
1149 PREFIX_VEX_0F60,
1150 PREFIX_VEX_0F61,
1151 PREFIX_VEX_0F62,
1152 PREFIX_VEX_0F63,
1153 PREFIX_VEX_0F64,
1154 PREFIX_VEX_0F65,
1155 PREFIX_VEX_0F66,
1156 PREFIX_VEX_0F67,
1157 PREFIX_VEX_0F68,
1158 PREFIX_VEX_0F69,
1159 PREFIX_VEX_0F6A,
1160 PREFIX_VEX_0F6B,
1161 PREFIX_VEX_0F6C,
1162 PREFIX_VEX_0F6D,
1163 PREFIX_VEX_0F6E,
1164 PREFIX_VEX_0F6F,
1165 PREFIX_VEX_0F70,
1166 PREFIX_VEX_0F71_REG_2,
1167 PREFIX_VEX_0F71_REG_4,
1168 PREFIX_VEX_0F71_REG_6,
1169 PREFIX_VEX_0F72_REG_2,
1170 PREFIX_VEX_0F72_REG_4,
1171 PREFIX_VEX_0F72_REG_6,
1172 PREFIX_VEX_0F73_REG_2,
1173 PREFIX_VEX_0F73_REG_3,
1174 PREFIX_VEX_0F73_REG_6,
1175 PREFIX_VEX_0F73_REG_7,
1176 PREFIX_VEX_0F74,
1177 PREFIX_VEX_0F75,
1178 PREFIX_VEX_0F76,
1179 PREFIX_VEX_0F77,
1180 PREFIX_VEX_0F7C,
1181 PREFIX_VEX_0F7D,
1182 PREFIX_VEX_0F7E,
1183 PREFIX_VEX_0F7F,
43234a1e
L
1184 PREFIX_VEX_0F90,
1185 PREFIX_VEX_0F91,
1186 PREFIX_VEX_0F92,
1187 PREFIX_VEX_0F93,
1188 PREFIX_VEX_0F98,
1ba585e8 1189 PREFIX_VEX_0F99,
592a252b
L
1190 PREFIX_VEX_0FC2,
1191 PREFIX_VEX_0FC4,
1192 PREFIX_VEX_0FC5,
1193 PREFIX_VEX_0FD0,
1194 PREFIX_VEX_0FD1,
1195 PREFIX_VEX_0FD2,
1196 PREFIX_VEX_0FD3,
1197 PREFIX_VEX_0FD4,
1198 PREFIX_VEX_0FD5,
1199 PREFIX_VEX_0FD6,
1200 PREFIX_VEX_0FD7,
1201 PREFIX_VEX_0FD8,
1202 PREFIX_VEX_0FD9,
1203 PREFIX_VEX_0FDA,
1204 PREFIX_VEX_0FDB,
1205 PREFIX_VEX_0FDC,
1206 PREFIX_VEX_0FDD,
1207 PREFIX_VEX_0FDE,
1208 PREFIX_VEX_0FDF,
1209 PREFIX_VEX_0FE0,
1210 PREFIX_VEX_0FE1,
1211 PREFIX_VEX_0FE2,
1212 PREFIX_VEX_0FE3,
1213 PREFIX_VEX_0FE4,
1214 PREFIX_VEX_0FE5,
1215 PREFIX_VEX_0FE6,
1216 PREFIX_VEX_0FE7,
1217 PREFIX_VEX_0FE8,
1218 PREFIX_VEX_0FE9,
1219 PREFIX_VEX_0FEA,
1220 PREFIX_VEX_0FEB,
1221 PREFIX_VEX_0FEC,
1222 PREFIX_VEX_0FED,
1223 PREFIX_VEX_0FEE,
1224 PREFIX_VEX_0FEF,
1225 PREFIX_VEX_0FF0,
1226 PREFIX_VEX_0FF1,
1227 PREFIX_VEX_0FF2,
1228 PREFIX_VEX_0FF3,
1229 PREFIX_VEX_0FF4,
1230 PREFIX_VEX_0FF5,
1231 PREFIX_VEX_0FF6,
1232 PREFIX_VEX_0FF7,
1233 PREFIX_VEX_0FF8,
1234 PREFIX_VEX_0FF9,
1235 PREFIX_VEX_0FFA,
1236 PREFIX_VEX_0FFB,
1237 PREFIX_VEX_0FFC,
1238 PREFIX_VEX_0FFD,
1239 PREFIX_VEX_0FFE,
1240 PREFIX_VEX_0F3800,
1241 PREFIX_VEX_0F3801,
1242 PREFIX_VEX_0F3802,
1243 PREFIX_VEX_0F3803,
1244 PREFIX_VEX_0F3804,
1245 PREFIX_VEX_0F3805,
1246 PREFIX_VEX_0F3806,
1247 PREFIX_VEX_0F3807,
1248 PREFIX_VEX_0F3808,
1249 PREFIX_VEX_0F3809,
1250 PREFIX_VEX_0F380A,
1251 PREFIX_VEX_0F380B,
1252 PREFIX_VEX_0F380C,
1253 PREFIX_VEX_0F380D,
1254 PREFIX_VEX_0F380E,
1255 PREFIX_VEX_0F380F,
1256 PREFIX_VEX_0F3813,
6c30d220 1257 PREFIX_VEX_0F3816,
592a252b
L
1258 PREFIX_VEX_0F3817,
1259 PREFIX_VEX_0F3818,
1260 PREFIX_VEX_0F3819,
1261 PREFIX_VEX_0F381A,
1262 PREFIX_VEX_0F381C,
1263 PREFIX_VEX_0F381D,
1264 PREFIX_VEX_0F381E,
1265 PREFIX_VEX_0F3820,
1266 PREFIX_VEX_0F3821,
1267 PREFIX_VEX_0F3822,
1268 PREFIX_VEX_0F3823,
1269 PREFIX_VEX_0F3824,
1270 PREFIX_VEX_0F3825,
1271 PREFIX_VEX_0F3828,
1272 PREFIX_VEX_0F3829,
1273 PREFIX_VEX_0F382A,
1274 PREFIX_VEX_0F382B,
1275 PREFIX_VEX_0F382C,
1276 PREFIX_VEX_0F382D,
1277 PREFIX_VEX_0F382E,
1278 PREFIX_VEX_0F382F,
1279 PREFIX_VEX_0F3830,
1280 PREFIX_VEX_0F3831,
1281 PREFIX_VEX_0F3832,
1282 PREFIX_VEX_0F3833,
1283 PREFIX_VEX_0F3834,
1284 PREFIX_VEX_0F3835,
6c30d220 1285 PREFIX_VEX_0F3836,
592a252b
L
1286 PREFIX_VEX_0F3837,
1287 PREFIX_VEX_0F3838,
1288 PREFIX_VEX_0F3839,
1289 PREFIX_VEX_0F383A,
1290 PREFIX_VEX_0F383B,
1291 PREFIX_VEX_0F383C,
1292 PREFIX_VEX_0F383D,
1293 PREFIX_VEX_0F383E,
1294 PREFIX_VEX_0F383F,
1295 PREFIX_VEX_0F3840,
1296 PREFIX_VEX_0F3841,
6c30d220
L
1297 PREFIX_VEX_0F3845,
1298 PREFIX_VEX_0F3846,
1299 PREFIX_VEX_0F3847,
1300 PREFIX_VEX_0F3858,
1301 PREFIX_VEX_0F3859,
1302 PREFIX_VEX_0F385A,
1303 PREFIX_VEX_0F3878,
1304 PREFIX_VEX_0F3879,
1305 PREFIX_VEX_0F388C,
1306 PREFIX_VEX_0F388E,
1307 PREFIX_VEX_0F3890,
1308 PREFIX_VEX_0F3891,
1309 PREFIX_VEX_0F3892,
1310 PREFIX_VEX_0F3893,
592a252b
L
1311 PREFIX_VEX_0F3896,
1312 PREFIX_VEX_0F3897,
1313 PREFIX_VEX_0F3898,
1314 PREFIX_VEX_0F3899,
1315 PREFIX_VEX_0F389A,
1316 PREFIX_VEX_0F389B,
1317 PREFIX_VEX_0F389C,
1318 PREFIX_VEX_0F389D,
1319 PREFIX_VEX_0F389E,
1320 PREFIX_VEX_0F389F,
1321 PREFIX_VEX_0F38A6,
1322 PREFIX_VEX_0F38A7,
1323 PREFIX_VEX_0F38A8,
1324 PREFIX_VEX_0F38A9,
1325 PREFIX_VEX_0F38AA,
1326 PREFIX_VEX_0F38AB,
1327 PREFIX_VEX_0F38AC,
1328 PREFIX_VEX_0F38AD,
1329 PREFIX_VEX_0F38AE,
1330 PREFIX_VEX_0F38AF,
1331 PREFIX_VEX_0F38B6,
1332 PREFIX_VEX_0F38B7,
1333 PREFIX_VEX_0F38B8,
1334 PREFIX_VEX_0F38B9,
1335 PREFIX_VEX_0F38BA,
1336 PREFIX_VEX_0F38BB,
1337 PREFIX_VEX_0F38BC,
1338 PREFIX_VEX_0F38BD,
1339 PREFIX_VEX_0F38BE,
1340 PREFIX_VEX_0F38BF,
48521003 1341 PREFIX_VEX_0F38CF,
592a252b
L
1342 PREFIX_VEX_0F38DB,
1343 PREFIX_VEX_0F38DC,
1344 PREFIX_VEX_0F38DD,
1345 PREFIX_VEX_0F38DE,
1346 PREFIX_VEX_0F38DF,
f12dc422
L
1347 PREFIX_VEX_0F38F2,
1348 PREFIX_VEX_0F38F3_REG_1,
1349 PREFIX_VEX_0F38F3_REG_2,
1350 PREFIX_VEX_0F38F3_REG_3,
6c30d220
L
1351 PREFIX_VEX_0F38F5,
1352 PREFIX_VEX_0F38F6,
f12dc422 1353 PREFIX_VEX_0F38F7,
6c30d220
L
1354 PREFIX_VEX_0F3A00,
1355 PREFIX_VEX_0F3A01,
1356 PREFIX_VEX_0F3A02,
592a252b
L
1357 PREFIX_VEX_0F3A04,
1358 PREFIX_VEX_0F3A05,
1359 PREFIX_VEX_0F3A06,
1360 PREFIX_VEX_0F3A08,
1361 PREFIX_VEX_0F3A09,
1362 PREFIX_VEX_0F3A0A,
1363 PREFIX_VEX_0F3A0B,
1364 PREFIX_VEX_0F3A0C,
1365 PREFIX_VEX_0F3A0D,
1366 PREFIX_VEX_0F3A0E,
1367 PREFIX_VEX_0F3A0F,
1368 PREFIX_VEX_0F3A14,
1369 PREFIX_VEX_0F3A15,
1370 PREFIX_VEX_0F3A16,
1371 PREFIX_VEX_0F3A17,
1372 PREFIX_VEX_0F3A18,
1373 PREFIX_VEX_0F3A19,
1374 PREFIX_VEX_0F3A1D,
1375 PREFIX_VEX_0F3A20,
1376 PREFIX_VEX_0F3A21,
1377 PREFIX_VEX_0F3A22,
43234a1e 1378 PREFIX_VEX_0F3A30,
1ba585e8 1379 PREFIX_VEX_0F3A31,
43234a1e 1380 PREFIX_VEX_0F3A32,
1ba585e8 1381 PREFIX_VEX_0F3A33,
6c30d220
L
1382 PREFIX_VEX_0F3A38,
1383 PREFIX_VEX_0F3A39,
592a252b
L
1384 PREFIX_VEX_0F3A40,
1385 PREFIX_VEX_0F3A41,
1386 PREFIX_VEX_0F3A42,
1387 PREFIX_VEX_0F3A44,
6c30d220 1388 PREFIX_VEX_0F3A46,
592a252b
L
1389 PREFIX_VEX_0F3A48,
1390 PREFIX_VEX_0F3A49,
1391 PREFIX_VEX_0F3A4A,
1392 PREFIX_VEX_0F3A4B,
1393 PREFIX_VEX_0F3A4C,
1394 PREFIX_VEX_0F3A5C,
1395 PREFIX_VEX_0F3A5D,
1396 PREFIX_VEX_0F3A5E,
1397 PREFIX_VEX_0F3A5F,
1398 PREFIX_VEX_0F3A60,
1399 PREFIX_VEX_0F3A61,
1400 PREFIX_VEX_0F3A62,
1401 PREFIX_VEX_0F3A63,
1402 PREFIX_VEX_0F3A68,
1403 PREFIX_VEX_0F3A69,
1404 PREFIX_VEX_0F3A6A,
1405 PREFIX_VEX_0F3A6B,
1406 PREFIX_VEX_0F3A6C,
1407 PREFIX_VEX_0F3A6D,
1408 PREFIX_VEX_0F3A6E,
1409 PREFIX_VEX_0F3A6F,
1410 PREFIX_VEX_0F3A78,
1411 PREFIX_VEX_0F3A79,
1412 PREFIX_VEX_0F3A7A,
1413 PREFIX_VEX_0F3A7B,
1414 PREFIX_VEX_0F3A7C,
1415 PREFIX_VEX_0F3A7D,
1416 PREFIX_VEX_0F3A7E,
1417 PREFIX_VEX_0F3A7F,
48521003
IT
1418 PREFIX_VEX_0F3ACE,
1419 PREFIX_VEX_0F3ACF,
6c30d220 1420 PREFIX_VEX_0F3ADF,
43234a1e
L
1421 PREFIX_VEX_0F3AF0,
1422
1423 PREFIX_EVEX_0F10,
1424 PREFIX_EVEX_0F11,
1425 PREFIX_EVEX_0F12,
1426 PREFIX_EVEX_0F13,
1427 PREFIX_EVEX_0F14,
1428 PREFIX_EVEX_0F15,
1429 PREFIX_EVEX_0F16,
1430 PREFIX_EVEX_0F17,
1431 PREFIX_EVEX_0F28,
1432 PREFIX_EVEX_0F29,
1433 PREFIX_EVEX_0F2A,
1434 PREFIX_EVEX_0F2B,
1435 PREFIX_EVEX_0F2C,
1436 PREFIX_EVEX_0F2D,
1437 PREFIX_EVEX_0F2E,
1438 PREFIX_EVEX_0F2F,
1439 PREFIX_EVEX_0F51,
90a915bf
IT
1440 PREFIX_EVEX_0F54,
1441 PREFIX_EVEX_0F55,
1442 PREFIX_EVEX_0F56,
1443 PREFIX_EVEX_0F57,
43234a1e
L
1444 PREFIX_EVEX_0F58,
1445 PREFIX_EVEX_0F59,
1446 PREFIX_EVEX_0F5A,
1447 PREFIX_EVEX_0F5B,
1448 PREFIX_EVEX_0F5C,
1449 PREFIX_EVEX_0F5D,
1450 PREFIX_EVEX_0F5E,
1451 PREFIX_EVEX_0F5F,
1ba585e8
IT
1452 PREFIX_EVEX_0F60,
1453 PREFIX_EVEX_0F61,
43234a1e 1454 PREFIX_EVEX_0F62,
1ba585e8
IT
1455 PREFIX_EVEX_0F63,
1456 PREFIX_EVEX_0F64,
1457 PREFIX_EVEX_0F65,
43234a1e 1458 PREFIX_EVEX_0F66,
1ba585e8
IT
1459 PREFIX_EVEX_0F67,
1460 PREFIX_EVEX_0F68,
1461 PREFIX_EVEX_0F69,
43234a1e 1462 PREFIX_EVEX_0F6A,
1ba585e8 1463 PREFIX_EVEX_0F6B,
43234a1e
L
1464 PREFIX_EVEX_0F6C,
1465 PREFIX_EVEX_0F6D,
1466 PREFIX_EVEX_0F6E,
1467 PREFIX_EVEX_0F6F,
1468 PREFIX_EVEX_0F70,
1ba585e8
IT
1469 PREFIX_EVEX_0F71_REG_2,
1470 PREFIX_EVEX_0F71_REG_4,
1471 PREFIX_EVEX_0F71_REG_6,
43234a1e
L
1472 PREFIX_EVEX_0F72_REG_0,
1473 PREFIX_EVEX_0F72_REG_1,
1474 PREFIX_EVEX_0F72_REG_2,
1475 PREFIX_EVEX_0F72_REG_4,
1476 PREFIX_EVEX_0F72_REG_6,
1477 PREFIX_EVEX_0F73_REG_2,
1ba585e8 1478 PREFIX_EVEX_0F73_REG_3,
43234a1e 1479 PREFIX_EVEX_0F73_REG_6,
1ba585e8
IT
1480 PREFIX_EVEX_0F73_REG_7,
1481 PREFIX_EVEX_0F74,
1482 PREFIX_EVEX_0F75,
43234a1e
L
1483 PREFIX_EVEX_0F76,
1484 PREFIX_EVEX_0F78,
1485 PREFIX_EVEX_0F79,
1486 PREFIX_EVEX_0F7A,
1487 PREFIX_EVEX_0F7B,
1488 PREFIX_EVEX_0F7E,
1489 PREFIX_EVEX_0F7F,
1490 PREFIX_EVEX_0FC2,
1ba585e8
IT
1491 PREFIX_EVEX_0FC4,
1492 PREFIX_EVEX_0FC5,
43234a1e 1493 PREFIX_EVEX_0FC6,
1ba585e8 1494 PREFIX_EVEX_0FD1,
43234a1e
L
1495 PREFIX_EVEX_0FD2,
1496 PREFIX_EVEX_0FD3,
1497 PREFIX_EVEX_0FD4,
1ba585e8 1498 PREFIX_EVEX_0FD5,
43234a1e 1499 PREFIX_EVEX_0FD6,
1ba585e8
IT
1500 PREFIX_EVEX_0FD8,
1501 PREFIX_EVEX_0FD9,
1502 PREFIX_EVEX_0FDA,
43234a1e 1503 PREFIX_EVEX_0FDB,
1ba585e8
IT
1504 PREFIX_EVEX_0FDC,
1505 PREFIX_EVEX_0FDD,
1506 PREFIX_EVEX_0FDE,
43234a1e 1507 PREFIX_EVEX_0FDF,
1ba585e8
IT
1508 PREFIX_EVEX_0FE0,
1509 PREFIX_EVEX_0FE1,
43234a1e 1510 PREFIX_EVEX_0FE2,
1ba585e8
IT
1511 PREFIX_EVEX_0FE3,
1512 PREFIX_EVEX_0FE4,
1513 PREFIX_EVEX_0FE5,
43234a1e
L
1514 PREFIX_EVEX_0FE6,
1515 PREFIX_EVEX_0FE7,
1ba585e8
IT
1516 PREFIX_EVEX_0FE8,
1517 PREFIX_EVEX_0FE9,
1518 PREFIX_EVEX_0FEA,
43234a1e 1519 PREFIX_EVEX_0FEB,
1ba585e8
IT
1520 PREFIX_EVEX_0FEC,
1521 PREFIX_EVEX_0FED,
1522 PREFIX_EVEX_0FEE,
43234a1e 1523 PREFIX_EVEX_0FEF,
1ba585e8 1524 PREFIX_EVEX_0FF1,
43234a1e
L
1525 PREFIX_EVEX_0FF2,
1526 PREFIX_EVEX_0FF3,
1527 PREFIX_EVEX_0FF4,
1ba585e8
IT
1528 PREFIX_EVEX_0FF5,
1529 PREFIX_EVEX_0FF6,
1530 PREFIX_EVEX_0FF8,
1531 PREFIX_EVEX_0FF9,
43234a1e
L
1532 PREFIX_EVEX_0FFA,
1533 PREFIX_EVEX_0FFB,
1ba585e8
IT
1534 PREFIX_EVEX_0FFC,
1535 PREFIX_EVEX_0FFD,
43234a1e 1536 PREFIX_EVEX_0FFE,
1ba585e8
IT
1537 PREFIX_EVEX_0F3800,
1538 PREFIX_EVEX_0F3804,
1539 PREFIX_EVEX_0F380B,
43234a1e
L
1540 PREFIX_EVEX_0F380C,
1541 PREFIX_EVEX_0F380D,
1ba585e8 1542 PREFIX_EVEX_0F3810,
43234a1e
L
1543 PREFIX_EVEX_0F3811,
1544 PREFIX_EVEX_0F3812,
1545 PREFIX_EVEX_0F3813,
1546 PREFIX_EVEX_0F3814,
1547 PREFIX_EVEX_0F3815,
1548 PREFIX_EVEX_0F3816,
1549 PREFIX_EVEX_0F3818,
1550 PREFIX_EVEX_0F3819,
1551 PREFIX_EVEX_0F381A,
1552 PREFIX_EVEX_0F381B,
1ba585e8
IT
1553 PREFIX_EVEX_0F381C,
1554 PREFIX_EVEX_0F381D,
43234a1e
L
1555 PREFIX_EVEX_0F381E,
1556 PREFIX_EVEX_0F381F,
1ba585e8 1557 PREFIX_EVEX_0F3820,
43234a1e
L
1558 PREFIX_EVEX_0F3821,
1559 PREFIX_EVEX_0F3822,
1560 PREFIX_EVEX_0F3823,
1561 PREFIX_EVEX_0F3824,
1562 PREFIX_EVEX_0F3825,
1ba585e8 1563 PREFIX_EVEX_0F3826,
43234a1e
L
1564 PREFIX_EVEX_0F3827,
1565 PREFIX_EVEX_0F3828,
1566 PREFIX_EVEX_0F3829,
1567 PREFIX_EVEX_0F382A,
1ba585e8 1568 PREFIX_EVEX_0F382B,
43234a1e
L
1569 PREFIX_EVEX_0F382C,
1570 PREFIX_EVEX_0F382D,
1ba585e8 1571 PREFIX_EVEX_0F3830,
43234a1e
L
1572 PREFIX_EVEX_0F3831,
1573 PREFIX_EVEX_0F3832,
1574 PREFIX_EVEX_0F3833,
1575 PREFIX_EVEX_0F3834,
1576 PREFIX_EVEX_0F3835,
1577 PREFIX_EVEX_0F3836,
1578 PREFIX_EVEX_0F3837,
1ba585e8 1579 PREFIX_EVEX_0F3838,
43234a1e
L
1580 PREFIX_EVEX_0F3839,
1581 PREFIX_EVEX_0F383A,
1582 PREFIX_EVEX_0F383B,
1ba585e8 1583 PREFIX_EVEX_0F383C,
43234a1e 1584 PREFIX_EVEX_0F383D,
1ba585e8 1585 PREFIX_EVEX_0F383E,
43234a1e
L
1586 PREFIX_EVEX_0F383F,
1587 PREFIX_EVEX_0F3840,
1588 PREFIX_EVEX_0F3842,
1589 PREFIX_EVEX_0F3843,
1590 PREFIX_EVEX_0F3844,
1591 PREFIX_EVEX_0F3845,
1592 PREFIX_EVEX_0F3846,
1593 PREFIX_EVEX_0F3847,
1594 PREFIX_EVEX_0F384C,
1595 PREFIX_EVEX_0F384D,
1596 PREFIX_EVEX_0F384E,
1597 PREFIX_EVEX_0F384F,
8cfcb765
IT
1598 PREFIX_EVEX_0F3850,
1599 PREFIX_EVEX_0F3851,
47acf0bd
IT
1600 PREFIX_EVEX_0F3852,
1601 PREFIX_EVEX_0F3853,
ee6872be 1602 PREFIX_EVEX_0F3854,
620214f7 1603 PREFIX_EVEX_0F3855,
43234a1e
L
1604 PREFIX_EVEX_0F3858,
1605 PREFIX_EVEX_0F3859,
1606 PREFIX_EVEX_0F385A,
1607 PREFIX_EVEX_0F385B,
53467f57
IT
1608 PREFIX_EVEX_0F3862,
1609 PREFIX_EVEX_0F3863,
43234a1e
L
1610 PREFIX_EVEX_0F3864,
1611 PREFIX_EVEX_0F3865,
1ba585e8 1612 PREFIX_EVEX_0F3866,
9186c494 1613 PREFIX_EVEX_0F3868,
53467f57
IT
1614 PREFIX_EVEX_0F3870,
1615 PREFIX_EVEX_0F3871,
1616 PREFIX_EVEX_0F3872,
1617 PREFIX_EVEX_0F3873,
1ba585e8 1618 PREFIX_EVEX_0F3875,
43234a1e
L
1619 PREFIX_EVEX_0F3876,
1620 PREFIX_EVEX_0F3877,
1ba585e8
IT
1621 PREFIX_EVEX_0F3878,
1622 PREFIX_EVEX_0F3879,
1623 PREFIX_EVEX_0F387A,
1624 PREFIX_EVEX_0F387B,
43234a1e 1625 PREFIX_EVEX_0F387C,
1ba585e8 1626 PREFIX_EVEX_0F387D,
43234a1e
L
1627 PREFIX_EVEX_0F387E,
1628 PREFIX_EVEX_0F387F,
14f195c9 1629 PREFIX_EVEX_0F3883,
43234a1e
L
1630 PREFIX_EVEX_0F3888,
1631 PREFIX_EVEX_0F3889,
1632 PREFIX_EVEX_0F388A,
1633 PREFIX_EVEX_0F388B,
1ba585e8 1634 PREFIX_EVEX_0F388D,
ee6872be 1635 PREFIX_EVEX_0F388F,
43234a1e
L
1636 PREFIX_EVEX_0F3890,
1637 PREFIX_EVEX_0F3891,
1638 PREFIX_EVEX_0F3892,
1639 PREFIX_EVEX_0F3893,
1640 PREFIX_EVEX_0F3896,
1641 PREFIX_EVEX_0F3897,
1642 PREFIX_EVEX_0F3898,
1643 PREFIX_EVEX_0F3899,
1644 PREFIX_EVEX_0F389A,
1645 PREFIX_EVEX_0F389B,
1646 PREFIX_EVEX_0F389C,
1647 PREFIX_EVEX_0F389D,
1648 PREFIX_EVEX_0F389E,
1649 PREFIX_EVEX_0F389F,
1650 PREFIX_EVEX_0F38A0,
1651 PREFIX_EVEX_0F38A1,
1652 PREFIX_EVEX_0F38A2,
1653 PREFIX_EVEX_0F38A3,
1654 PREFIX_EVEX_0F38A6,
1655 PREFIX_EVEX_0F38A7,
1656 PREFIX_EVEX_0F38A8,
1657 PREFIX_EVEX_0F38A9,
1658 PREFIX_EVEX_0F38AA,
1659 PREFIX_EVEX_0F38AB,
1660 PREFIX_EVEX_0F38AC,
1661 PREFIX_EVEX_0F38AD,
1662 PREFIX_EVEX_0F38AE,
1663 PREFIX_EVEX_0F38AF,
2cc1b5aa
IT
1664 PREFIX_EVEX_0F38B4,
1665 PREFIX_EVEX_0F38B5,
43234a1e
L
1666 PREFIX_EVEX_0F38B6,
1667 PREFIX_EVEX_0F38B7,
1668 PREFIX_EVEX_0F38B8,
1669 PREFIX_EVEX_0F38B9,
1670 PREFIX_EVEX_0F38BA,
1671 PREFIX_EVEX_0F38BB,
1672 PREFIX_EVEX_0F38BC,
1673 PREFIX_EVEX_0F38BD,
1674 PREFIX_EVEX_0F38BE,
1675 PREFIX_EVEX_0F38BF,
1676 PREFIX_EVEX_0F38C4,
1677 PREFIX_EVEX_0F38C6_REG_1,
1678 PREFIX_EVEX_0F38C6_REG_2,
1679 PREFIX_EVEX_0F38C6_REG_5,
1680 PREFIX_EVEX_0F38C6_REG_6,
1681 PREFIX_EVEX_0F38C7_REG_1,
1682 PREFIX_EVEX_0F38C7_REG_2,
1683 PREFIX_EVEX_0F38C7_REG_5,
1684 PREFIX_EVEX_0F38C7_REG_6,
1685 PREFIX_EVEX_0F38C8,
1686 PREFIX_EVEX_0F38CA,
1687 PREFIX_EVEX_0F38CB,
1688 PREFIX_EVEX_0F38CC,
1689 PREFIX_EVEX_0F38CD,
48521003 1690 PREFIX_EVEX_0F38CF,
8dcf1fad
IT
1691 PREFIX_EVEX_0F38DC,
1692 PREFIX_EVEX_0F38DD,
1693 PREFIX_EVEX_0F38DE,
1694 PREFIX_EVEX_0F38DF,
43234a1e
L
1695
1696 PREFIX_EVEX_0F3A00,
1697 PREFIX_EVEX_0F3A01,
1698 PREFIX_EVEX_0F3A03,
1699 PREFIX_EVEX_0F3A04,
1700 PREFIX_EVEX_0F3A05,
1701 PREFIX_EVEX_0F3A08,
1702 PREFIX_EVEX_0F3A09,
1703 PREFIX_EVEX_0F3A0A,
1704 PREFIX_EVEX_0F3A0B,
1ba585e8
IT
1705 PREFIX_EVEX_0F3A0F,
1706 PREFIX_EVEX_0F3A14,
1707 PREFIX_EVEX_0F3A15,
90a915bf 1708 PREFIX_EVEX_0F3A16,
43234a1e
L
1709 PREFIX_EVEX_0F3A17,
1710 PREFIX_EVEX_0F3A18,
1711 PREFIX_EVEX_0F3A19,
1712 PREFIX_EVEX_0F3A1A,
1713 PREFIX_EVEX_0F3A1B,
1714 PREFIX_EVEX_0F3A1D,
1715 PREFIX_EVEX_0F3A1E,
1716 PREFIX_EVEX_0F3A1F,
1ba585e8 1717 PREFIX_EVEX_0F3A20,
43234a1e 1718 PREFIX_EVEX_0F3A21,
90a915bf 1719 PREFIX_EVEX_0F3A22,
43234a1e
L
1720 PREFIX_EVEX_0F3A23,
1721 PREFIX_EVEX_0F3A25,
1722 PREFIX_EVEX_0F3A26,
1723 PREFIX_EVEX_0F3A27,
1724 PREFIX_EVEX_0F3A38,
1725 PREFIX_EVEX_0F3A39,
1726 PREFIX_EVEX_0F3A3A,
1727 PREFIX_EVEX_0F3A3B,
1ba585e8
IT
1728 PREFIX_EVEX_0F3A3E,
1729 PREFIX_EVEX_0F3A3F,
1730 PREFIX_EVEX_0F3A42,
43234a1e 1731 PREFIX_EVEX_0F3A43,
ff1982d5 1732 PREFIX_EVEX_0F3A44,
90a915bf
IT
1733 PREFIX_EVEX_0F3A50,
1734 PREFIX_EVEX_0F3A51,
43234a1e 1735 PREFIX_EVEX_0F3A54,
90a915bf
IT
1736 PREFIX_EVEX_0F3A55,
1737 PREFIX_EVEX_0F3A56,
1738 PREFIX_EVEX_0F3A57,
1739 PREFIX_EVEX_0F3A66,
53467f57
IT
1740 PREFIX_EVEX_0F3A67,
1741 PREFIX_EVEX_0F3A70,
1742 PREFIX_EVEX_0F3A71,
1743 PREFIX_EVEX_0F3A72,
48521003
IT
1744 PREFIX_EVEX_0F3A73,
1745 PREFIX_EVEX_0F3ACE,
1746 PREFIX_EVEX_0F3ACF
51e7da1b 1747};
4e7d34a6 1748
51e7da1b
L
1749enum
1750{
1751 X86_64_06 = 0,
3873ba12
L
1752 X86_64_07,
1753 X86_64_0D,
1754 X86_64_16,
1755 X86_64_17,
1756 X86_64_1E,
1757 X86_64_1F,
1758 X86_64_27,
1759 X86_64_2F,
1760 X86_64_37,
1761 X86_64_3F,
1762 X86_64_60,
1763 X86_64_61,
1764 X86_64_62,
1765 X86_64_63,
1766 X86_64_6D,
1767 X86_64_6F,
d039fef3 1768 X86_64_82,
3873ba12
L
1769 X86_64_9A,
1770 X86_64_C4,
1771 X86_64_C5,
1772 X86_64_CE,
1773 X86_64_D4,
1774 X86_64_D5,
a72d2af2
L
1775 X86_64_E8,
1776 X86_64_E9,
3873ba12
L
1777 X86_64_EA,
1778 X86_64_0F01_REG_0,
1779 X86_64_0F01_REG_1,
1780 X86_64_0F01_REG_2,
1781 X86_64_0F01_REG_3
51e7da1b 1782};
4e7d34a6 1783
51e7da1b
L
1784enum
1785{
1786 THREE_BYTE_0F38 = 0,
1f334aeb 1787 THREE_BYTE_0F3A
51e7da1b 1788};
4e7d34a6 1789
f88c9eb0
SP
1790enum
1791{
5dd85c99
SP
1792 XOP_08 = 0,
1793 XOP_09,
f88c9eb0
SP
1794 XOP_0A
1795};
1796
51e7da1b
L
1797enum
1798{
1799 VEX_0F = 0,
3873ba12
L
1800 VEX_0F38,
1801 VEX_0F3A
51e7da1b 1802};
c0f3af97 1803
43234a1e
L
1804enum
1805{
1806 EVEX_0F = 0,
1807 EVEX_0F38,
1808 EVEX_0F3A
1809};
1810
51e7da1b
L
1811enum
1812{
ec6f095a 1813 VEX_LEN_0F12_P_0_M_0 = 0,
592a252b
L
1814 VEX_LEN_0F12_P_0_M_1,
1815 VEX_LEN_0F12_P_2,
1816 VEX_LEN_0F13_M_0,
1817 VEX_LEN_0F16_P_0_M_0,
1818 VEX_LEN_0F16_P_0_M_1,
1819 VEX_LEN_0F16_P_2,
1820 VEX_LEN_0F17_M_0,
43234a1e 1821 VEX_LEN_0F41_P_0,
1ba585e8 1822 VEX_LEN_0F41_P_2,
43234a1e 1823 VEX_LEN_0F42_P_0,
1ba585e8 1824 VEX_LEN_0F42_P_2,
43234a1e 1825 VEX_LEN_0F44_P_0,
1ba585e8 1826 VEX_LEN_0F44_P_2,
43234a1e 1827 VEX_LEN_0F45_P_0,
1ba585e8 1828 VEX_LEN_0F45_P_2,
43234a1e 1829 VEX_LEN_0F46_P_0,
1ba585e8 1830 VEX_LEN_0F46_P_2,
43234a1e 1831 VEX_LEN_0F47_P_0,
1ba585e8
IT
1832 VEX_LEN_0F47_P_2,
1833 VEX_LEN_0F4A_P_0,
1834 VEX_LEN_0F4A_P_2,
1835 VEX_LEN_0F4B_P_0,
43234a1e 1836 VEX_LEN_0F4B_P_2,
592a252b 1837 VEX_LEN_0F6E_P_2,
ec6f095a 1838 VEX_LEN_0F77_P_0,
592a252b
L
1839 VEX_LEN_0F7E_P_1,
1840 VEX_LEN_0F7E_P_2,
43234a1e 1841 VEX_LEN_0F90_P_0,
1ba585e8 1842 VEX_LEN_0F90_P_2,
43234a1e 1843 VEX_LEN_0F91_P_0,
1ba585e8 1844 VEX_LEN_0F91_P_2,
43234a1e 1845 VEX_LEN_0F92_P_0,
90a915bf 1846 VEX_LEN_0F92_P_2,
1ba585e8 1847 VEX_LEN_0F92_P_3,
43234a1e 1848 VEX_LEN_0F93_P_0,
90a915bf 1849 VEX_LEN_0F93_P_2,
1ba585e8 1850 VEX_LEN_0F93_P_3,
43234a1e 1851 VEX_LEN_0F98_P_0,
1ba585e8
IT
1852 VEX_LEN_0F98_P_2,
1853 VEX_LEN_0F99_P_0,
1854 VEX_LEN_0F99_P_2,
592a252b
L
1855 VEX_LEN_0FAE_R_2_M_0,
1856 VEX_LEN_0FAE_R_3_M_0,
592a252b
L
1857 VEX_LEN_0FC4_P_2,
1858 VEX_LEN_0FC5_P_2,
592a252b 1859 VEX_LEN_0FD6_P_2,
592a252b 1860 VEX_LEN_0FF7_P_2,
6c30d220
L
1861 VEX_LEN_0F3816_P_2,
1862 VEX_LEN_0F3819_P_2,
592a252b 1863 VEX_LEN_0F381A_P_2_M_0,
6c30d220 1864 VEX_LEN_0F3836_P_2,
592a252b 1865 VEX_LEN_0F3841_P_2,
6c30d220 1866 VEX_LEN_0F385A_P_2_M_0,
592a252b 1867 VEX_LEN_0F38DB_P_2,
f12dc422
L
1868 VEX_LEN_0F38F2_P_0,
1869 VEX_LEN_0F38F3_R_1_P_0,
1870 VEX_LEN_0F38F3_R_2_P_0,
1871 VEX_LEN_0F38F3_R_3_P_0,
6c30d220
L
1872 VEX_LEN_0F38F5_P_0,
1873 VEX_LEN_0F38F5_P_1,
1874 VEX_LEN_0F38F5_P_3,
1875 VEX_LEN_0F38F6_P_3,
f12dc422 1876 VEX_LEN_0F38F7_P_0,
6c30d220
L
1877 VEX_LEN_0F38F7_P_1,
1878 VEX_LEN_0F38F7_P_2,
1879 VEX_LEN_0F38F7_P_3,
1880 VEX_LEN_0F3A00_P_2,
1881 VEX_LEN_0F3A01_P_2,
592a252b 1882 VEX_LEN_0F3A06_P_2,
592a252b
L
1883 VEX_LEN_0F3A14_P_2,
1884 VEX_LEN_0F3A15_P_2,
1885 VEX_LEN_0F3A16_P_2,
1886 VEX_LEN_0F3A17_P_2,
1887 VEX_LEN_0F3A18_P_2,
1888 VEX_LEN_0F3A19_P_2,
1889 VEX_LEN_0F3A20_P_2,
1890 VEX_LEN_0F3A21_P_2,
1891 VEX_LEN_0F3A22_P_2,
43234a1e 1892 VEX_LEN_0F3A30_P_2,
1ba585e8 1893 VEX_LEN_0F3A31_P_2,
43234a1e 1894 VEX_LEN_0F3A32_P_2,
1ba585e8 1895 VEX_LEN_0F3A33_P_2,
6c30d220
L
1896 VEX_LEN_0F3A38_P_2,
1897 VEX_LEN_0F3A39_P_2,
592a252b 1898 VEX_LEN_0F3A41_P_2,
6c30d220 1899 VEX_LEN_0F3A46_P_2,
592a252b
L
1900 VEX_LEN_0F3A60_P_2,
1901 VEX_LEN_0F3A61_P_2,
1902 VEX_LEN_0F3A62_P_2,
1903 VEX_LEN_0F3A63_P_2,
1904 VEX_LEN_0F3A6A_P_2,
1905 VEX_LEN_0F3A6B_P_2,
1906 VEX_LEN_0F3A6E_P_2,
1907 VEX_LEN_0F3A6F_P_2,
1908 VEX_LEN_0F3A7A_P_2,
1909 VEX_LEN_0F3A7B_P_2,
1910 VEX_LEN_0F3A7E_P_2,
1911 VEX_LEN_0F3A7F_P_2,
1912 VEX_LEN_0F3ADF_P_2,
6c30d220 1913 VEX_LEN_0F3AF0_P_3,
ff688e1f
L
1914 VEX_LEN_0FXOP_08_CC,
1915 VEX_LEN_0FXOP_08_CD,
1916 VEX_LEN_0FXOP_08_CE,
1917 VEX_LEN_0FXOP_08_CF,
1918 VEX_LEN_0FXOP_08_EC,
1919 VEX_LEN_0FXOP_08_ED,
1920 VEX_LEN_0FXOP_08_EE,
1921 VEX_LEN_0FXOP_08_EF,
592a252b
L
1922 VEX_LEN_0FXOP_09_80,
1923 VEX_LEN_0FXOP_09_81
51e7da1b 1924};
c0f3af97 1925
04e2a182
L
1926enum
1927{
1928 EVEX_LEN_0F6E_P_2 = 0,
1929 EVEX_LEN_0F7E_P_1,
1930 EVEX_LEN_0F7E_P_2,
12efd68d 1931 EVEX_LEN_0FD6_P_2,
f0a6222e
L
1932 EVEX_LEN_0F3819_P_2_W_0,
1933 EVEX_LEN_0F3819_P_2_W_1,
1934 EVEX_LEN_0F381A_P_2_W_0,
1935 EVEX_LEN_0F381A_P_2_W_1,
1936 EVEX_LEN_0F381B_P_2_W_0,
1937 EVEX_LEN_0F381B_P_2_W_1,
1938 EVEX_LEN_0F385A_P_2_W_0,
1939 EVEX_LEN_0F385A_P_2_W_1,
1940 EVEX_LEN_0F385B_P_2_W_0,
1941 EVEX_LEN_0F385B_P_2_W_1,
12efd68d
L
1942 EVEX_LEN_0F3A18_P_2_W_0,
1943 EVEX_LEN_0F3A18_P_2_W_1,
1944 EVEX_LEN_0F3A19_P_2_W_0,
1945 EVEX_LEN_0F3A19_P_2_W_1,
1946 EVEX_LEN_0F3A1A_P_2_W_0,
1947 EVEX_LEN_0F3A1A_P_2_W_1,
1948 EVEX_LEN_0F3A1B_P_2_W_0,
6e1c90b7
L
1949 EVEX_LEN_0F3A1B_P_2_W_1,
1950 EVEX_LEN_0F3A23_P_2_W_0,
1951 EVEX_LEN_0F3A23_P_2_W_1,
1952 EVEX_LEN_0F3A38_P_2_W_0,
1953 EVEX_LEN_0F3A38_P_2_W_1,
1954 EVEX_LEN_0F3A39_P_2_W_0,
1955 EVEX_LEN_0F3A39_P_2_W_1,
1956 EVEX_LEN_0F3A3A_P_2_W_0,
1957 EVEX_LEN_0F3A3A_P_2_W_1,
1958 EVEX_LEN_0F3A3B_P_2_W_0,
1959 EVEX_LEN_0F3A3B_P_2_W_1,
1960 EVEX_LEN_0F3A43_P_2_W_0,
1961 EVEX_LEN_0F3A43_P_2_W_1
04e2a182
L
1962};
1963
9e30b8e0
L
1964enum
1965{
ec6f095a 1966 VEX_W_0F41_P_0_LEN_1 = 0,
1ba585e8 1967 VEX_W_0F41_P_2_LEN_1,
43234a1e 1968 VEX_W_0F42_P_0_LEN_1,
1ba585e8 1969 VEX_W_0F42_P_2_LEN_1,
43234a1e 1970 VEX_W_0F44_P_0_LEN_0,
1ba585e8 1971 VEX_W_0F44_P_2_LEN_0,
43234a1e 1972 VEX_W_0F45_P_0_LEN_1,
1ba585e8 1973 VEX_W_0F45_P_2_LEN_1,
43234a1e 1974 VEX_W_0F46_P_0_LEN_1,
1ba585e8 1975 VEX_W_0F46_P_2_LEN_1,
43234a1e 1976 VEX_W_0F47_P_0_LEN_1,
1ba585e8
IT
1977 VEX_W_0F47_P_2_LEN_1,
1978 VEX_W_0F4A_P_0_LEN_1,
1979 VEX_W_0F4A_P_2_LEN_1,
1980 VEX_W_0F4B_P_0_LEN_1,
43234a1e 1981 VEX_W_0F4B_P_2_LEN_1,
43234a1e 1982 VEX_W_0F90_P_0_LEN_0,
1ba585e8 1983 VEX_W_0F90_P_2_LEN_0,
43234a1e 1984 VEX_W_0F91_P_0_LEN_0,
1ba585e8 1985 VEX_W_0F91_P_2_LEN_0,
43234a1e 1986 VEX_W_0F92_P_0_LEN_0,
90a915bf 1987 VEX_W_0F92_P_2_LEN_0,
43234a1e 1988 VEX_W_0F93_P_0_LEN_0,
90a915bf 1989 VEX_W_0F93_P_2_LEN_0,
43234a1e 1990 VEX_W_0F98_P_0_LEN_0,
1ba585e8
IT
1991 VEX_W_0F98_P_2_LEN_0,
1992 VEX_W_0F99_P_0_LEN_0,
1993 VEX_W_0F99_P_2_LEN_0,
592a252b
L
1994 VEX_W_0F380C_P_2,
1995 VEX_W_0F380D_P_2,
1996 VEX_W_0F380E_P_2,
1997 VEX_W_0F380F_P_2,
6c30d220 1998 VEX_W_0F3816_P_2,
6c30d220
L
1999 VEX_W_0F3818_P_2,
2000 VEX_W_0F3819_P_2,
592a252b 2001 VEX_W_0F381A_P_2_M_0,
592a252b
L
2002 VEX_W_0F382C_P_2_M_0,
2003 VEX_W_0F382D_P_2_M_0,
2004 VEX_W_0F382E_P_2_M_0,
2005 VEX_W_0F382F_P_2_M_0,
6c30d220 2006 VEX_W_0F3836_P_2,
6c30d220
L
2007 VEX_W_0F3846_P_2,
2008 VEX_W_0F3858_P_2,
2009 VEX_W_0F3859_P_2,
2010 VEX_W_0F385A_P_2_M_0,
2011 VEX_W_0F3878_P_2,
2012 VEX_W_0F3879_P_2,
48521003 2013 VEX_W_0F38CF_P_2,
6c30d220
L
2014 VEX_W_0F3A00_P_2,
2015 VEX_W_0F3A01_P_2,
2016 VEX_W_0F3A02_P_2,
592a252b
L
2017 VEX_W_0F3A04_P_2,
2018 VEX_W_0F3A05_P_2,
2019 VEX_W_0F3A06_P_2,
592a252b
L
2020 VEX_W_0F3A18_P_2,
2021 VEX_W_0F3A19_P_2,
43234a1e 2022 VEX_W_0F3A30_P_2_LEN_0,
1ba585e8 2023 VEX_W_0F3A31_P_2_LEN_0,
43234a1e 2024 VEX_W_0F3A32_P_2_LEN_0,
1ba585e8 2025 VEX_W_0F3A33_P_2_LEN_0,
6c30d220
L
2026 VEX_W_0F3A38_P_2,
2027 VEX_W_0F3A39_P_2,
6c30d220 2028 VEX_W_0F3A46_P_2,
592a252b
L
2029 VEX_W_0F3A48_P_2,
2030 VEX_W_0F3A49_P_2,
2031 VEX_W_0F3A4A_P_2,
2032 VEX_W_0F3A4B_P_2,
2033 VEX_W_0F3A4C_P_2,
48521003
IT
2034 VEX_W_0F3ACE_P_2,
2035 VEX_W_0F3ACF_P_2,
43234a1e
L
2036
2037 EVEX_W_0F10_P_0,
2038 EVEX_W_0F10_P_1_M_0,
2039 EVEX_W_0F10_P_1_M_1,
2040 EVEX_W_0F10_P_2,
2041 EVEX_W_0F10_P_3_M_0,
2042 EVEX_W_0F10_P_3_M_1,
2043 EVEX_W_0F11_P_0,
2044 EVEX_W_0F11_P_1_M_0,
2045 EVEX_W_0F11_P_1_M_1,
2046 EVEX_W_0F11_P_2,
2047 EVEX_W_0F11_P_3_M_0,
2048 EVEX_W_0F11_P_3_M_1,
2049 EVEX_W_0F12_P_0_M_0,
2050 EVEX_W_0F12_P_0_M_1,
2051 EVEX_W_0F12_P_1,
2052 EVEX_W_0F12_P_2,
2053 EVEX_W_0F12_P_3,
2054 EVEX_W_0F13_P_0,
2055 EVEX_W_0F13_P_2,
2056 EVEX_W_0F14_P_0,
2057 EVEX_W_0F14_P_2,
2058 EVEX_W_0F15_P_0,
2059 EVEX_W_0F15_P_2,
2060 EVEX_W_0F16_P_0_M_0,
2061 EVEX_W_0F16_P_0_M_1,
2062 EVEX_W_0F16_P_1,
2063 EVEX_W_0F16_P_2,
2064 EVEX_W_0F17_P_0,
2065 EVEX_W_0F17_P_2,
2066 EVEX_W_0F28_P_0,
2067 EVEX_W_0F28_P_2,
2068 EVEX_W_0F29_P_0,
2069 EVEX_W_0F29_P_2,
43234a1e
L
2070 EVEX_W_0F2A_P_3,
2071 EVEX_W_0F2B_P_0,
2072 EVEX_W_0F2B_P_2,
2073 EVEX_W_0F2E_P_0,
2074 EVEX_W_0F2E_P_2,
2075 EVEX_W_0F2F_P_0,
2076 EVEX_W_0F2F_P_2,
2077 EVEX_W_0F51_P_0,
2078 EVEX_W_0F51_P_1,
2079 EVEX_W_0F51_P_2,
2080 EVEX_W_0F51_P_3,
90a915bf
IT
2081 EVEX_W_0F54_P_0,
2082 EVEX_W_0F54_P_2,
2083 EVEX_W_0F55_P_0,
2084 EVEX_W_0F55_P_2,
2085 EVEX_W_0F56_P_0,
2086 EVEX_W_0F56_P_2,
2087 EVEX_W_0F57_P_0,
2088 EVEX_W_0F57_P_2,
43234a1e
L
2089 EVEX_W_0F58_P_0,
2090 EVEX_W_0F58_P_1,
2091 EVEX_W_0F58_P_2,
2092 EVEX_W_0F58_P_3,
2093 EVEX_W_0F59_P_0,
2094 EVEX_W_0F59_P_1,
2095 EVEX_W_0F59_P_2,
2096 EVEX_W_0F59_P_3,
2097 EVEX_W_0F5A_P_0,
2098 EVEX_W_0F5A_P_1,
2099 EVEX_W_0F5A_P_2,
2100 EVEX_W_0F5A_P_3,
2101 EVEX_W_0F5B_P_0,
2102 EVEX_W_0F5B_P_1,
2103 EVEX_W_0F5B_P_2,
2104 EVEX_W_0F5C_P_0,
2105 EVEX_W_0F5C_P_1,
2106 EVEX_W_0F5C_P_2,
2107 EVEX_W_0F5C_P_3,
2108 EVEX_W_0F5D_P_0,
2109 EVEX_W_0F5D_P_1,
2110 EVEX_W_0F5D_P_2,
2111 EVEX_W_0F5D_P_3,
2112 EVEX_W_0F5E_P_0,
2113 EVEX_W_0F5E_P_1,
2114 EVEX_W_0F5E_P_2,
2115 EVEX_W_0F5E_P_3,
2116 EVEX_W_0F5F_P_0,
2117 EVEX_W_0F5F_P_1,
2118 EVEX_W_0F5F_P_2,
2119 EVEX_W_0F5F_P_3,
2120 EVEX_W_0F62_P_2,
2121 EVEX_W_0F66_P_2,
2122 EVEX_W_0F6A_P_2,
1ba585e8 2123 EVEX_W_0F6B_P_2,
43234a1e
L
2124 EVEX_W_0F6C_P_2,
2125 EVEX_W_0F6D_P_2,
43234a1e
L
2126 EVEX_W_0F6F_P_1,
2127 EVEX_W_0F6F_P_2,
1ba585e8 2128 EVEX_W_0F6F_P_3,
43234a1e
L
2129 EVEX_W_0F70_P_2,
2130 EVEX_W_0F72_R_2_P_2,
2131 EVEX_W_0F72_R_6_P_2,
2132 EVEX_W_0F73_R_2_P_2,
2133 EVEX_W_0F73_R_6_P_2,
2134 EVEX_W_0F76_P_2,
2135 EVEX_W_0F78_P_0,
90a915bf 2136 EVEX_W_0F78_P_2,
43234a1e 2137 EVEX_W_0F79_P_0,
90a915bf 2138 EVEX_W_0F79_P_2,
43234a1e 2139 EVEX_W_0F7A_P_1,
90a915bf 2140 EVEX_W_0F7A_P_2,
43234a1e 2141 EVEX_W_0F7A_P_3,
90a915bf 2142 EVEX_W_0F7B_P_2,
43234a1e
L
2143 EVEX_W_0F7B_P_3,
2144 EVEX_W_0F7E_P_1,
43234a1e
L
2145 EVEX_W_0F7F_P_1,
2146 EVEX_W_0F7F_P_2,
1ba585e8 2147 EVEX_W_0F7F_P_3,
43234a1e
L
2148 EVEX_W_0FC2_P_0,
2149 EVEX_W_0FC2_P_1,
2150 EVEX_W_0FC2_P_2,
2151 EVEX_W_0FC2_P_3,
2152 EVEX_W_0FC6_P_0,
2153 EVEX_W_0FC6_P_2,
2154 EVEX_W_0FD2_P_2,
2155 EVEX_W_0FD3_P_2,
2156 EVEX_W_0FD4_P_2,
2157 EVEX_W_0FD6_P_2,
2158 EVEX_W_0FE6_P_1,
2159 EVEX_W_0FE6_P_2,
2160 EVEX_W_0FE6_P_3,
2161 EVEX_W_0FE7_P_2,
2162 EVEX_W_0FF2_P_2,
2163 EVEX_W_0FF3_P_2,
2164 EVEX_W_0FF4_P_2,
2165 EVEX_W_0FFA_P_2,
2166 EVEX_W_0FFB_P_2,
2167 EVEX_W_0FFE_P_2,
2168 EVEX_W_0F380C_P_2,
2169 EVEX_W_0F380D_P_2,
1ba585e8
IT
2170 EVEX_W_0F3810_P_1,
2171 EVEX_W_0F3810_P_2,
43234a1e 2172 EVEX_W_0F3811_P_1,
1ba585e8 2173 EVEX_W_0F3811_P_2,
43234a1e 2174 EVEX_W_0F3812_P_1,
1ba585e8 2175 EVEX_W_0F3812_P_2,
43234a1e
L
2176 EVEX_W_0F3813_P_1,
2177 EVEX_W_0F3813_P_2,
2178 EVEX_W_0F3814_P_1,
2179 EVEX_W_0F3815_P_1,
2180 EVEX_W_0F3818_P_2,
2181 EVEX_W_0F3819_P_2,
2182 EVEX_W_0F381A_P_2,
2183 EVEX_W_0F381B_P_2,
2184 EVEX_W_0F381E_P_2,
2185 EVEX_W_0F381F_P_2,
1ba585e8 2186 EVEX_W_0F3820_P_1,
43234a1e
L
2187 EVEX_W_0F3821_P_1,
2188 EVEX_W_0F3822_P_1,
2189 EVEX_W_0F3823_P_1,
2190 EVEX_W_0F3824_P_1,
2191 EVEX_W_0F3825_P_1,
2192 EVEX_W_0F3825_P_2,
1ba585e8
IT
2193 EVEX_W_0F3826_P_1,
2194 EVEX_W_0F3826_P_2,
2195 EVEX_W_0F3828_P_1,
43234a1e 2196 EVEX_W_0F3828_P_2,
1ba585e8 2197 EVEX_W_0F3829_P_1,
43234a1e
L
2198 EVEX_W_0F3829_P_2,
2199 EVEX_W_0F382A_P_1,
2200 EVEX_W_0F382A_P_2,
1ba585e8
IT
2201 EVEX_W_0F382B_P_2,
2202 EVEX_W_0F3830_P_1,
43234a1e
L
2203 EVEX_W_0F3831_P_1,
2204 EVEX_W_0F3832_P_1,
2205 EVEX_W_0F3833_P_1,
2206 EVEX_W_0F3834_P_1,
2207 EVEX_W_0F3835_P_1,
2208 EVEX_W_0F3835_P_2,
2209 EVEX_W_0F3837_P_2,
90a915bf
IT
2210 EVEX_W_0F3838_P_1,
2211 EVEX_W_0F3839_P_1,
43234a1e
L
2212 EVEX_W_0F383A_P_1,
2213 EVEX_W_0F3840_P_2,
d6aab7a1 2214 EVEX_W_0F3852_P_1,
ee6872be 2215 EVEX_W_0F3854_P_2,
620214f7 2216 EVEX_W_0F3855_P_2,
43234a1e
L
2217 EVEX_W_0F3858_P_2,
2218 EVEX_W_0F3859_P_2,
2219 EVEX_W_0F385A_P_2,
2220 EVEX_W_0F385B_P_2,
53467f57
IT
2221 EVEX_W_0F3862_P_2,
2222 EVEX_W_0F3863_P_2,
1ba585e8 2223 EVEX_W_0F3866_P_2,
9186c494 2224 EVEX_W_0F3868_P_3,
53467f57
IT
2225 EVEX_W_0F3870_P_2,
2226 EVEX_W_0F3871_P_2,
d6aab7a1 2227 EVEX_W_0F3872_P_1,
53467f57 2228 EVEX_W_0F3872_P_2,
d6aab7a1 2229 EVEX_W_0F3872_P_3,
53467f57 2230 EVEX_W_0F3873_P_2,
1ba585e8
IT
2231 EVEX_W_0F3875_P_2,
2232 EVEX_W_0F3878_P_2,
2233 EVEX_W_0F3879_P_2,
2234 EVEX_W_0F387A_P_2,
2235 EVEX_W_0F387B_P_2,
2236 EVEX_W_0F387D_P_2,
14f195c9 2237 EVEX_W_0F3883_P_2,
1ba585e8 2238 EVEX_W_0F388D_P_2,
43234a1e
L
2239 EVEX_W_0F3891_P_2,
2240 EVEX_W_0F3893_P_2,
2241 EVEX_W_0F38A1_P_2,
2242 EVEX_W_0F38A3_P_2,
2243 EVEX_W_0F38C7_R_1_P_2,
2244 EVEX_W_0F38C7_R_2_P_2,
2245 EVEX_W_0F38C7_R_5_P_2,
2246 EVEX_W_0F38C7_R_6_P_2,
2247
2248 EVEX_W_0F3A00_P_2,
2249 EVEX_W_0F3A01_P_2,
2250 EVEX_W_0F3A04_P_2,
2251 EVEX_W_0F3A05_P_2,
2252 EVEX_W_0F3A08_P_2,
2253 EVEX_W_0F3A09_P_2,
2254 EVEX_W_0F3A0A_P_2,
2255 EVEX_W_0F3A0B_P_2,
2256 EVEX_W_0F3A18_P_2,
2257 EVEX_W_0F3A19_P_2,
2258 EVEX_W_0F3A1A_P_2,
2259 EVEX_W_0F3A1B_P_2,
2260 EVEX_W_0F3A1D_P_2,
2261 EVEX_W_0F3A21_P_2,
2262 EVEX_W_0F3A23_P_2,
2263 EVEX_W_0F3A38_P_2,
2264 EVEX_W_0F3A39_P_2,
2265 EVEX_W_0F3A3A_P_2,
2266 EVEX_W_0F3A3B_P_2,
1ba585e8
IT
2267 EVEX_W_0F3A3E_P_2,
2268 EVEX_W_0F3A3F_P_2,
2269 EVEX_W_0F3A42_P_2,
90a915bf
IT
2270 EVEX_W_0F3A43_P_2,
2271 EVEX_W_0F3A50_P_2,
2272 EVEX_W_0F3A51_P_2,
2273 EVEX_W_0F3A56_P_2,
2274 EVEX_W_0F3A57_P_2,
2275 EVEX_W_0F3A66_P_2,
53467f57
IT
2276 EVEX_W_0F3A67_P_2,
2277 EVEX_W_0F3A70_P_2,
2278 EVEX_W_0F3A71_P_2,
2279 EVEX_W_0F3A72_P_2,
48521003
IT
2280 EVEX_W_0F3A73_P_2,
2281 EVEX_W_0F3ACE_P_2,
2282 EVEX_W_0F3ACF_P_2
9e30b8e0
L
2283};
2284
26ca5450 2285typedef void (*op_rtn) (int bytemode, int sizeflag);
252b5132
RH
2286
2287struct dis386 {
2da11e11 2288 const char *name;
ce518a5f
L
2289 struct
2290 {
2291 op_rtn rtn;
2292 int bytemode;
2293 } op[MAX_OPERANDS];
bf890a93 2294 unsigned int prefix_requirement;
252b5132
RH
2295};
2296
2297/* Upper case letters in the instruction names here are macros.
2298 'A' => print 'b' if no register operands or suffix_always is true
2299 'B' => print 'b' if suffix_always is true
9306ca4a 2300 'C' => print 's' or 'l' ('w' or 'd' in Intel mode) depending on operand
98b528ac 2301 size prefix
ed7841b3 2302 'D' => print 'w' if no register operands or 'w', 'l' or 'q', if
98b528ac 2303 suffix_always is true
252b5132 2304 'E' => print 'e' if 32-bit form of jcxz
3ffd33cf 2305 'F' => print 'w' or 'l' depending on address size prefix (loop insns)
52fd6d94 2306 'G' => print 'w' or 'l' depending on operand size prefix (i/o insns)
5dd0794d 2307 'H' => print ",pt" or ",pn" branch hint
9306ca4a 2308 'I' => honor following macro letter even in Intel mode (implemented only
98b528ac 2309 for some of the macro letters)
9306ca4a 2310 'J' => print 'l'
42903f7f 2311 'K' => print 'd' or 'q' if rex prefix is present.
252b5132 2312 'L' => print 'l' if suffix_always is true
9d141669 2313 'M' => print 'r' if intel_mnemonic is false.
252b5132 2314 'N' => print 'n' if instruction has no wait "prefix"
a35ca55a 2315 'O' => print 'd' or 'o' (or 'q' in Intel mode)
52b15da3 2316 'P' => print 'w', 'l' or 'q' if instruction has an operand size prefix,
98b528ac
L
2317 or suffix_always is true. print 'q' if rex prefix is present.
2318 'Q' => print 'w', 'l' or 'q' for memory operand or suffix_always
2319 is true
a35ca55a 2320 'R' => print 'w', 'l' or 'q' ('d' for 'l' and 'e' in Intel mode)
52b15da3 2321 'S' => print 'w', 'l' or 'q' if suffix_always is true
a72d2af2
L
2322 'T' => print 'q' in 64bit mode if instruction has no operand size
2323 prefix and behave as 'P' otherwise
2324 'U' => print 'q' in 64bit mode if instruction has no operand size
2325 prefix and behave as 'Q' otherwise
2326 'V' => print 'q' in 64bit mode if instruction has no operand size
2327 prefix and behave as 'S' otherwise
a35ca55a 2328 'W' => print 'b', 'w' or 'l' ('d' in Intel mode)
9306ca4a 2329 'X' => print 's', 'd' depending on data16 prefix (for XMM)
9646c87b 2330 'Y' unused.
6dd5059a 2331 'Z' => print 'q' in 64bit mode and behave as 'L' otherwise
9d141669 2332 '!' => change condition from true to false or from false to true.
98b528ac 2333 '%' => add 1 upper case letter to the macro.
a72d2af2
L
2334 '^' => print 'w' or 'l' depending on operand size prefix or
2335 suffix_always is true (lcall/ljmp).
5db04b09
L
2336 '@' => print 'q' for Intel64 ISA, 'w' or 'q' for AMD64 ISA depending
2337 on operand size prefix.
07f5af7d
L
2338 '&' => print 'q' in 64bit mode for Intel64 ISA or if instruction
2339 has no operand size prefix for AMD64 ISA, behave as 'P'
2340 otherwise
98b528ac
L
2341
2342 2 upper case letter macros:
04d824a4
JB
2343 "XY" => print 'x' or 'y' if suffix_always is true or no register
2344 operands and no broadcast.
2345 "XZ" => print 'x', 'y', or 'z' if suffix_always is true or no
2346 register operands and no broadcast.
4b06377f
L
2347 "XW" => print 's', 'd' depending on the VEX.W bit (for FMA)
2348 "LQ" => print 'l' ('d' in Intel mode) or 'q' for memory operand
98b528ac 2349 or suffix_always is true
4b06377f
L
2350 "LB" => print "abs" in 64bit mode and behave as 'B' otherwise
2351 "LS" => print "abs" in 64bit mode and behave as 'S' otherwise
2352 "LV" => print "abs" for 64bit operand and behave as 'S' otherwise
6c30d220 2353 "LW" => print 'd', 'q' depending on the VEX.W bit
4b4c407a
L
2354 "LP" => print 'w' or 'l' ('d' in Intel mode) if instruction has
2355 an operand size prefix, or suffix_always is true. print
2356 'q' if rex prefix is present.
52b15da3 2357
6439fc28
AM
2358 Many of the above letters print nothing in Intel mode. See "putop"
2359 for the details.
52b15da3 2360
6439fc28 2361 Braces '{' and '}', and vertical bars '|', indicate alternative
7c52e0e8 2362 mnemonic strings for AT&T and Intel. */
252b5132 2363
6439fc28 2364static const struct dis386 dis386[] = {
252b5132 2365 /* 00 */
bf890a93
IT
2366 { "addB", { Ebh1, Gb }, 0 },
2367 { "addS", { Evh1, Gv }, 0 },
2368 { "addB", { Gb, EbS }, 0 },
2369 { "addS", { Gv, EvS }, 0 },
2370 { "addB", { AL, Ib }, 0 },
2371 { "addS", { eAX, Iv }, 0 },
4e7d34a6
L
2372 { X86_64_TABLE (X86_64_06) },
2373 { X86_64_TABLE (X86_64_07) },
252b5132 2374 /* 08 */
bf890a93
IT
2375 { "orB", { Ebh1, Gb }, 0 },
2376 { "orS", { Evh1, Gv }, 0 },
2377 { "orB", { Gb, EbS }, 0 },
2378 { "orS", { Gv, EvS }, 0 },
2379 { "orB", { AL, Ib }, 0 },
2380 { "orS", { eAX, Iv }, 0 },
4e7d34a6 2381 { X86_64_TABLE (X86_64_0D) },
592d1631 2382 { Bad_Opcode }, /* 0x0f extended opcode escape */
252b5132 2383 /* 10 */
bf890a93
IT
2384 { "adcB", { Ebh1, Gb }, 0 },
2385 { "adcS", { Evh1, Gv }, 0 },
2386 { "adcB", { Gb, EbS }, 0 },
2387 { "adcS", { Gv, EvS }, 0 },
2388 { "adcB", { AL, Ib }, 0 },
2389 { "adcS", { eAX, Iv }, 0 },
4e7d34a6
L
2390 { X86_64_TABLE (X86_64_16) },
2391 { X86_64_TABLE (X86_64_17) },
252b5132 2392 /* 18 */
bf890a93
IT
2393 { "sbbB", { Ebh1, Gb }, 0 },
2394 { "sbbS", { Evh1, Gv }, 0 },
2395 { "sbbB", { Gb, EbS }, 0 },
2396 { "sbbS", { Gv, EvS }, 0 },
2397 { "sbbB", { AL, Ib }, 0 },
2398 { "sbbS", { eAX, Iv }, 0 },
4e7d34a6
L
2399 { X86_64_TABLE (X86_64_1E) },
2400 { X86_64_TABLE (X86_64_1F) },
252b5132 2401 /* 20 */
bf890a93
IT
2402 { "andB", { Ebh1, Gb }, 0 },
2403 { "andS", { Evh1, Gv }, 0 },
2404 { "andB", { Gb, EbS }, 0 },
2405 { "andS", { Gv, EvS }, 0 },
2406 { "andB", { AL, Ib }, 0 },
2407 { "andS", { eAX, Iv }, 0 },
592d1631 2408 { Bad_Opcode }, /* SEG ES prefix */
4e7d34a6 2409 { X86_64_TABLE (X86_64_27) },
252b5132 2410 /* 28 */
bf890a93
IT
2411 { "subB", { Ebh1, Gb }, 0 },
2412 { "subS", { Evh1, Gv }, 0 },
2413 { "subB", { Gb, EbS }, 0 },
2414 { "subS", { Gv, EvS }, 0 },
2415 { "subB", { AL, Ib }, 0 },
2416 { "subS", { eAX, Iv }, 0 },
592d1631 2417 { Bad_Opcode }, /* SEG CS prefix */
4e7d34a6 2418 { X86_64_TABLE (X86_64_2F) },
252b5132 2419 /* 30 */
bf890a93
IT
2420 { "xorB", { Ebh1, Gb }, 0 },
2421 { "xorS", { Evh1, Gv }, 0 },
2422 { "xorB", { Gb, EbS }, 0 },
2423 { "xorS", { Gv, EvS }, 0 },
2424 { "xorB", { AL, Ib }, 0 },
2425 { "xorS", { eAX, Iv }, 0 },
592d1631 2426 { Bad_Opcode }, /* SEG SS prefix */
4e7d34a6 2427 { X86_64_TABLE (X86_64_37) },
252b5132 2428 /* 38 */
bf890a93
IT
2429 { "cmpB", { Eb, Gb }, 0 },
2430 { "cmpS", { Ev, Gv }, 0 },
2431 { "cmpB", { Gb, EbS }, 0 },
2432 { "cmpS", { Gv, EvS }, 0 },
2433 { "cmpB", { AL, Ib }, 0 },
2434 { "cmpS", { eAX, Iv }, 0 },
592d1631 2435 { Bad_Opcode }, /* SEG DS prefix */
4e7d34a6 2436 { X86_64_TABLE (X86_64_3F) },
252b5132 2437 /* 40 */
bf890a93
IT
2438 { "inc{S|}", { RMeAX }, 0 },
2439 { "inc{S|}", { RMeCX }, 0 },
2440 { "inc{S|}", { RMeDX }, 0 },
2441 { "inc{S|}", { RMeBX }, 0 },
2442 { "inc{S|}", { RMeSP }, 0 },
2443 { "inc{S|}", { RMeBP }, 0 },
2444 { "inc{S|}", { RMeSI }, 0 },
2445 { "inc{S|}", { RMeDI }, 0 },
252b5132 2446 /* 48 */
bf890a93
IT
2447 { "dec{S|}", { RMeAX }, 0 },
2448 { "dec{S|}", { RMeCX }, 0 },
2449 { "dec{S|}", { RMeDX }, 0 },
2450 { "dec{S|}", { RMeBX }, 0 },
2451 { "dec{S|}", { RMeSP }, 0 },
2452 { "dec{S|}", { RMeBP }, 0 },
2453 { "dec{S|}", { RMeSI }, 0 },
2454 { "dec{S|}", { RMeDI }, 0 },
252b5132 2455 /* 50 */
bf890a93
IT
2456 { "pushV", { RMrAX }, 0 },
2457 { "pushV", { RMrCX }, 0 },
2458 { "pushV", { RMrDX }, 0 },
2459 { "pushV", { RMrBX }, 0 },
2460 { "pushV", { RMrSP }, 0 },
2461 { "pushV", { RMrBP }, 0 },
2462 { "pushV", { RMrSI }, 0 },
2463 { "pushV", { RMrDI }, 0 },
252b5132 2464 /* 58 */
bf890a93
IT
2465 { "popV", { RMrAX }, 0 },
2466 { "popV", { RMrCX }, 0 },
2467 { "popV", { RMrDX }, 0 },
2468 { "popV", { RMrBX }, 0 },
2469 { "popV", { RMrSP }, 0 },
2470 { "popV", { RMrBP }, 0 },
2471 { "popV", { RMrSI }, 0 },
2472 { "popV", { RMrDI }, 0 },
252b5132 2473 /* 60 */
4e7d34a6
L
2474 { X86_64_TABLE (X86_64_60) },
2475 { X86_64_TABLE (X86_64_61) },
2476 { X86_64_TABLE (X86_64_62) },
2477 { X86_64_TABLE (X86_64_63) },
592d1631
L
2478 { Bad_Opcode }, /* seg fs */
2479 { Bad_Opcode }, /* seg gs */
2480 { Bad_Opcode }, /* op size prefix */
2481 { Bad_Opcode }, /* adr size prefix */
252b5132 2482 /* 68 */
bf890a93
IT
2483 { "pushT", { sIv }, 0 },
2484 { "imulS", { Gv, Ev, Iv }, 0 },
2485 { "pushT", { sIbT }, 0 },
2486 { "imulS", { Gv, Ev, sIb }, 0 },
2487 { "ins{b|}", { Ybr, indirDX }, 0 },
4e7d34a6 2488 { X86_64_TABLE (X86_64_6D) },
bf890a93 2489 { "outs{b|}", { indirDXr, Xb }, 0 },
4e7d34a6 2490 { X86_64_TABLE (X86_64_6F) },
252b5132 2491 /* 70 */
bf890a93
IT
2492 { "joH", { Jb, BND, cond_jump_flag }, 0 },
2493 { "jnoH", { Jb, BND, cond_jump_flag }, 0 },
2494 { "jbH", { Jb, BND, cond_jump_flag }, 0 },
2495 { "jaeH", { Jb, BND, cond_jump_flag }, 0 },
2496 { "jeH", { Jb, BND, cond_jump_flag }, 0 },
2497 { "jneH", { Jb, BND, cond_jump_flag }, 0 },
2498 { "jbeH", { Jb, BND, cond_jump_flag }, 0 },
2499 { "jaH", { Jb, BND, cond_jump_flag }, 0 },
252b5132 2500 /* 78 */
bf890a93
IT
2501 { "jsH", { Jb, BND, cond_jump_flag }, 0 },
2502 { "jnsH", { Jb, BND, cond_jump_flag }, 0 },
2503 { "jpH", { Jb, BND, cond_jump_flag }, 0 },
2504 { "jnpH", { Jb, BND, cond_jump_flag }, 0 },
2505 { "jlH", { Jb, BND, cond_jump_flag }, 0 },
2506 { "jgeH", { Jb, BND, cond_jump_flag }, 0 },
2507 { "jleH", { Jb, BND, cond_jump_flag }, 0 },
2508 { "jgH", { Jb, BND, cond_jump_flag }, 0 },
252b5132 2509 /* 80 */
1ceb70f8
L
2510 { REG_TABLE (REG_80) },
2511 { REG_TABLE (REG_81) },
d039fef3 2512 { X86_64_TABLE (X86_64_82) },
7148c369 2513 { REG_TABLE (REG_83) },
bf890a93
IT
2514 { "testB", { Eb, Gb }, 0 },
2515 { "testS", { Ev, Gv }, 0 },
2516 { "xchgB", { Ebh2, Gb }, 0 },
2517 { "xchgS", { Evh2, Gv }, 0 },
252b5132 2518 /* 88 */
bf890a93
IT
2519 { "movB", { Ebh3, Gb }, 0 },
2520 { "movS", { Evh3, Gv }, 0 },
2521 { "movB", { Gb, EbS }, 0 },
2522 { "movS", { Gv, EvS }, 0 },
2523 { "movD", { Sv, Sw }, 0 },
1ceb70f8 2524 { MOD_TABLE (MOD_8D) },
bf890a93 2525 { "movD", { Sw, Sv }, 0 },
1ceb70f8 2526 { REG_TABLE (REG_8F) },
252b5132 2527 /* 90 */
1ceb70f8 2528 { PREFIX_TABLE (PREFIX_90) },
bf890a93
IT
2529 { "xchgS", { RMeCX, eAX }, 0 },
2530 { "xchgS", { RMeDX, eAX }, 0 },
2531 { "xchgS", { RMeBX, eAX }, 0 },
2532 { "xchgS", { RMeSP, eAX }, 0 },
2533 { "xchgS", { RMeBP, eAX }, 0 },
2534 { "xchgS", { RMeSI, eAX }, 0 },
2535 { "xchgS", { RMeDI, eAX }, 0 },
252b5132 2536 /* 98 */
bf890a93
IT
2537 { "cW{t|}R", { XX }, 0 },
2538 { "cR{t|}O", { XX }, 0 },
4e7d34a6 2539 { X86_64_TABLE (X86_64_9A) },
592d1631 2540 { Bad_Opcode }, /* fwait */
bf890a93
IT
2541 { "pushfT", { XX }, 0 },
2542 { "popfT", { XX }, 0 },
2543 { "sahf", { XX }, 0 },
2544 { "lahf", { XX }, 0 },
252b5132 2545 /* a0 */
bf890a93
IT
2546 { "mov%LB", { AL, Ob }, 0 },
2547 { "mov%LS", { eAX, Ov }, 0 },
2548 { "mov%LB", { Ob, AL }, 0 },
2549 { "mov%LS", { Ov, eAX }, 0 },
2550 { "movs{b|}", { Ybr, Xb }, 0 },
2551 { "movs{R|}", { Yvr, Xv }, 0 },
2552 { "cmps{b|}", { Xb, Yb }, 0 },
2553 { "cmps{R|}", { Xv, Yv }, 0 },
252b5132 2554 /* a8 */
bf890a93
IT
2555 { "testB", { AL, Ib }, 0 },
2556 { "testS", { eAX, Iv }, 0 },
2557 { "stosB", { Ybr, AL }, 0 },
2558 { "stosS", { Yvr, eAX }, 0 },
2559 { "lodsB", { ALr, Xb }, 0 },
2560 { "lodsS", { eAXr, Xv }, 0 },
2561 { "scasB", { AL, Yb }, 0 },
2562 { "scasS", { eAX, Yv }, 0 },
252b5132 2563 /* b0 */
bf890a93
IT
2564 { "movB", { RMAL, Ib }, 0 },
2565 { "movB", { RMCL, Ib }, 0 },
2566 { "movB", { RMDL, Ib }, 0 },
2567 { "movB", { RMBL, Ib }, 0 },
2568 { "movB", { RMAH, Ib }, 0 },
2569 { "movB", { RMCH, Ib }, 0 },
2570 { "movB", { RMDH, Ib }, 0 },
2571 { "movB", { RMBH, Ib }, 0 },
252b5132 2572 /* b8 */
bf890a93
IT
2573 { "mov%LV", { RMeAX, Iv64 }, 0 },
2574 { "mov%LV", { RMeCX, Iv64 }, 0 },
2575 { "mov%LV", { RMeDX, Iv64 }, 0 },
2576 { "mov%LV", { RMeBX, Iv64 }, 0 },
2577 { "mov%LV", { RMeSP, Iv64 }, 0 },
2578 { "mov%LV", { RMeBP, Iv64 }, 0 },
2579 { "mov%LV", { RMeSI, Iv64 }, 0 },
2580 { "mov%LV", { RMeDI, Iv64 }, 0 },
252b5132 2581 /* c0 */
1ceb70f8
L
2582 { REG_TABLE (REG_C0) },
2583 { REG_TABLE (REG_C1) },
bf890a93
IT
2584 { "retT", { Iw, BND }, 0 },
2585 { "retT", { BND }, 0 },
4e7d34a6
L
2586 { X86_64_TABLE (X86_64_C4) },
2587 { X86_64_TABLE (X86_64_C5) },
1ceb70f8
L
2588 { REG_TABLE (REG_C6) },
2589 { REG_TABLE (REG_C7) },
252b5132 2590 /* c8 */
bf890a93
IT
2591 { "enterT", { Iw, Ib }, 0 },
2592 { "leaveT", { XX }, 0 },
2593 { "Jret{|f}P", { Iw }, 0 },
2594 { "Jret{|f}P", { XX }, 0 },
2595 { "int3", { XX }, 0 },
2596 { "int", { Ib }, 0 },
4e7d34a6 2597 { X86_64_TABLE (X86_64_CE) },
bf890a93 2598 { "iret%LP", { XX }, 0 },
252b5132 2599 /* d0 */
1ceb70f8
L
2600 { REG_TABLE (REG_D0) },
2601 { REG_TABLE (REG_D1) },
2602 { REG_TABLE (REG_D2) },
2603 { REG_TABLE (REG_D3) },
4e7d34a6
L
2604 { X86_64_TABLE (X86_64_D4) },
2605 { X86_64_TABLE (X86_64_D5) },
592d1631 2606 { Bad_Opcode },
bf890a93 2607 { "xlat", { DSBX }, 0 },
252b5132
RH
2608 /* d8 */
2609 { FLOAT },
2610 { FLOAT },
2611 { FLOAT },
2612 { FLOAT },
2613 { FLOAT },
2614 { FLOAT },
2615 { FLOAT },
2616 { FLOAT },
2617 /* e0 */
bf890a93
IT
2618 { "loopneFH", { Jb, XX, loop_jcxz_flag }, 0 },
2619 { "loopeFH", { Jb, XX, loop_jcxz_flag }, 0 },
2620 { "loopFH", { Jb, XX, loop_jcxz_flag }, 0 },
2621 { "jEcxzH", { Jb, XX, loop_jcxz_flag }, 0 },
2622 { "inB", { AL, Ib }, 0 },
2623 { "inG", { zAX, Ib }, 0 },
2624 { "outB", { Ib, AL }, 0 },
2625 { "outG", { Ib, zAX }, 0 },
252b5132 2626 /* e8 */
a72d2af2
L
2627 { X86_64_TABLE (X86_64_E8) },
2628 { X86_64_TABLE (X86_64_E9) },
4e7d34a6 2629 { X86_64_TABLE (X86_64_EA) },
bf890a93
IT
2630 { "jmp", { Jb, BND }, 0 },
2631 { "inB", { AL, indirDX }, 0 },
2632 { "inG", { zAX, indirDX }, 0 },
2633 { "outB", { indirDX, AL }, 0 },
2634 { "outG", { indirDX, zAX }, 0 },
252b5132 2635 /* f0 */
592d1631 2636 { Bad_Opcode }, /* lock prefix */
bf890a93 2637 { "icebp", { XX }, 0 },
592d1631
L
2638 { Bad_Opcode }, /* repne */
2639 { Bad_Opcode }, /* repz */
bf890a93
IT
2640 { "hlt", { XX }, 0 },
2641 { "cmc", { XX }, 0 },
1ceb70f8
L
2642 { REG_TABLE (REG_F6) },
2643 { REG_TABLE (REG_F7) },
252b5132 2644 /* f8 */
bf890a93
IT
2645 { "clc", { XX }, 0 },
2646 { "stc", { XX }, 0 },
2647 { "cli", { XX }, 0 },
2648 { "sti", { XX }, 0 },
2649 { "cld", { XX }, 0 },
2650 { "std", { XX }, 0 },
1ceb70f8
L
2651 { REG_TABLE (REG_FE) },
2652 { REG_TABLE (REG_FF) },
252b5132
RH
2653};
2654
6439fc28 2655static const struct dis386 dis386_twobyte[] = {
252b5132 2656 /* 00 */
1ceb70f8
L
2657 { REG_TABLE (REG_0F00 ) },
2658 { REG_TABLE (REG_0F01 ) },
bf890a93
IT
2659 { "larS", { Gv, Ew }, 0 },
2660 { "lslS", { Gv, Ew }, 0 },
592d1631 2661 { Bad_Opcode },
bf890a93
IT
2662 { "syscall", { XX }, 0 },
2663 { "clts", { XX }, 0 },
2664 { "sysret%LP", { XX }, 0 },
252b5132 2665 /* 08 */
bf890a93 2666 { "invd", { XX }, 0 },
3233d7d0 2667 { PREFIX_TABLE (PREFIX_0F09) },
592d1631 2668 { Bad_Opcode },
bf890a93 2669 { "ud2", { XX }, 0 },
592d1631 2670 { Bad_Opcode },
b5b1fc4f 2671 { REG_TABLE (REG_0F0D) },
bf890a93
IT
2672 { "femms", { XX }, 0 },
2673 { "", { MX, EM, OPSUF }, 0 }, /* See OP_3DNowSuffix. */
252b5132 2674 /* 10 */
1ceb70f8
L
2675 { PREFIX_TABLE (PREFIX_0F10) },
2676 { PREFIX_TABLE (PREFIX_0F11) },
2677 { PREFIX_TABLE (PREFIX_0F12) },
2678 { MOD_TABLE (MOD_0F13) },
507bd325
L
2679 { "unpcklpX", { XM, EXx }, PREFIX_OPCODE },
2680 { "unpckhpX", { XM, EXx }, PREFIX_OPCODE },
1ceb70f8
L
2681 { PREFIX_TABLE (PREFIX_0F16) },
2682 { MOD_TABLE (MOD_0F17) },
252b5132 2683 /* 18 */
1ceb70f8 2684 { REG_TABLE (REG_0F18) },
bf890a93 2685 { "nopQ", { Ev }, 0 },
7e8b059b
L
2686 { PREFIX_TABLE (PREFIX_0F1A) },
2687 { PREFIX_TABLE (PREFIX_0F1B) },
c48935d7 2688 { PREFIX_TABLE (PREFIX_0F1C) },
bf890a93 2689 { "nopQ", { Ev }, 0 },
603555e5 2690 { PREFIX_TABLE (PREFIX_0F1E) },
bf890a93 2691 { "nopQ", { Ev }, 0 },
252b5132 2692 /* 20 */
bf890a93
IT
2693 { "movZ", { Rm, Cm }, 0 },
2694 { "movZ", { Rm, Dm }, 0 },
2695 { "movZ", { Cm, Rm }, 0 },
2696 { "movZ", { Dm, Rm }, 0 },
1ceb70f8 2697 { MOD_TABLE (MOD_0F24) },
592d1631 2698 { Bad_Opcode },
1ceb70f8 2699 { MOD_TABLE (MOD_0F26) },
592d1631 2700 { Bad_Opcode },
252b5132 2701 /* 28 */
507bd325
L
2702 { "movapX", { XM, EXx }, PREFIX_OPCODE },
2703 { "movapX", { EXxS, XM }, PREFIX_OPCODE },
1ceb70f8
L
2704 { PREFIX_TABLE (PREFIX_0F2A) },
2705 { PREFIX_TABLE (PREFIX_0F2B) },
2706 { PREFIX_TABLE (PREFIX_0F2C) },
2707 { PREFIX_TABLE (PREFIX_0F2D) },
2708 { PREFIX_TABLE (PREFIX_0F2E) },
2709 { PREFIX_TABLE (PREFIX_0F2F) },
252b5132 2710 /* 30 */
bf890a93
IT
2711 { "wrmsr", { XX }, 0 },
2712 { "rdtsc", { XX }, 0 },
2713 { "rdmsr", { XX }, 0 },
2714 { "rdpmc", { XX }, 0 },
2715 { "sysenter", { XX }, 0 },
2716 { "sysexit", { XX }, 0 },
592d1631 2717 { Bad_Opcode },
bf890a93 2718 { "getsec", { XX }, 0 },
252b5132 2719 /* 38 */
507bd325 2720 { THREE_BYTE_TABLE_PREFIX (THREE_BYTE_0F38, PREFIX_OPCODE) },
592d1631 2721 { Bad_Opcode },
507bd325 2722 { THREE_BYTE_TABLE_PREFIX (THREE_BYTE_0F3A, PREFIX_OPCODE) },
592d1631
L
2723 { Bad_Opcode },
2724 { Bad_Opcode },
2725 { Bad_Opcode },
2726 { Bad_Opcode },
2727 { Bad_Opcode },
252b5132 2728 /* 40 */
bf890a93
IT
2729 { "cmovoS", { Gv, Ev }, 0 },
2730 { "cmovnoS", { Gv, Ev }, 0 },
2731 { "cmovbS", { Gv, Ev }, 0 },
2732 { "cmovaeS", { Gv, Ev }, 0 },
2733 { "cmoveS", { Gv, Ev }, 0 },
2734 { "cmovneS", { Gv, Ev }, 0 },
2735 { "cmovbeS", { Gv, Ev }, 0 },
2736 { "cmovaS", { Gv, Ev }, 0 },
252b5132 2737 /* 48 */
bf890a93
IT
2738 { "cmovsS", { Gv, Ev }, 0 },
2739 { "cmovnsS", { Gv, Ev }, 0 },
2740 { "cmovpS", { Gv, Ev }, 0 },
2741 { "cmovnpS", { Gv, Ev }, 0 },
2742 { "cmovlS", { Gv, Ev }, 0 },
2743 { "cmovgeS", { Gv, Ev }, 0 },
2744 { "cmovleS", { Gv, Ev }, 0 },
2745 { "cmovgS", { Gv, Ev }, 0 },
252b5132 2746 /* 50 */
75c135a8 2747 { MOD_TABLE (MOD_0F51) },
1ceb70f8
L
2748 { PREFIX_TABLE (PREFIX_0F51) },
2749 { PREFIX_TABLE (PREFIX_0F52) },
2750 { PREFIX_TABLE (PREFIX_0F53) },
507bd325
L
2751 { "andpX", { XM, EXx }, PREFIX_OPCODE },
2752 { "andnpX", { XM, EXx }, PREFIX_OPCODE },
2753 { "orpX", { XM, EXx }, PREFIX_OPCODE },
2754 { "xorpX", { XM, EXx }, PREFIX_OPCODE },
252b5132 2755 /* 58 */
1ceb70f8
L
2756 { PREFIX_TABLE (PREFIX_0F58) },
2757 { PREFIX_TABLE (PREFIX_0F59) },
2758 { PREFIX_TABLE (PREFIX_0F5A) },
2759 { PREFIX_TABLE (PREFIX_0F5B) },
2760 { PREFIX_TABLE (PREFIX_0F5C) },
2761 { PREFIX_TABLE (PREFIX_0F5D) },
2762 { PREFIX_TABLE (PREFIX_0F5E) },
2763 { PREFIX_TABLE (PREFIX_0F5F) },
252b5132 2764 /* 60 */
1ceb70f8
L
2765 { PREFIX_TABLE (PREFIX_0F60) },
2766 { PREFIX_TABLE (PREFIX_0F61) },
2767 { PREFIX_TABLE (PREFIX_0F62) },
507bd325
L
2768 { "packsswb", { MX, EM }, PREFIX_OPCODE },
2769 { "pcmpgtb", { MX, EM }, PREFIX_OPCODE },
2770 { "pcmpgtw", { MX, EM }, PREFIX_OPCODE },
2771 { "pcmpgtd", { MX, EM }, PREFIX_OPCODE },
2772 { "packuswb", { MX, EM }, PREFIX_OPCODE },
252b5132 2773 /* 68 */
507bd325
L
2774 { "punpckhbw", { MX, EM }, PREFIX_OPCODE },
2775 { "punpckhwd", { MX, EM }, PREFIX_OPCODE },
2776 { "punpckhdq", { MX, EM }, PREFIX_OPCODE },
2777 { "packssdw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8
L
2778 { PREFIX_TABLE (PREFIX_0F6C) },
2779 { PREFIX_TABLE (PREFIX_0F6D) },
507bd325 2780 { "movK", { MX, Edq }, PREFIX_OPCODE },
1ceb70f8 2781 { PREFIX_TABLE (PREFIX_0F6F) },
252b5132 2782 /* 70 */
1ceb70f8
L
2783 { PREFIX_TABLE (PREFIX_0F70) },
2784 { REG_TABLE (REG_0F71) },
2785 { REG_TABLE (REG_0F72) },
2786 { REG_TABLE (REG_0F73) },
507bd325
L
2787 { "pcmpeqb", { MX, EM }, PREFIX_OPCODE },
2788 { "pcmpeqw", { MX, EM }, PREFIX_OPCODE },
2789 { "pcmpeqd", { MX, EM }, PREFIX_OPCODE },
2790 { "emms", { XX }, PREFIX_OPCODE },
252b5132 2791 /* 78 */
1ceb70f8
L
2792 { PREFIX_TABLE (PREFIX_0F78) },
2793 { PREFIX_TABLE (PREFIX_0F79) },
1f334aeb 2794 { Bad_Opcode },
592d1631 2795 { Bad_Opcode },
1ceb70f8
L
2796 { PREFIX_TABLE (PREFIX_0F7C) },
2797 { PREFIX_TABLE (PREFIX_0F7D) },
2798 { PREFIX_TABLE (PREFIX_0F7E) },
2799 { PREFIX_TABLE (PREFIX_0F7F) },
252b5132 2800 /* 80 */
bf890a93
IT
2801 { "joH", { Jv, BND, cond_jump_flag }, 0 },
2802 { "jnoH", { Jv, BND, cond_jump_flag }, 0 },
2803 { "jbH", { Jv, BND, cond_jump_flag }, 0 },
2804 { "jaeH", { Jv, BND, cond_jump_flag }, 0 },
2805 { "jeH", { Jv, BND, cond_jump_flag }, 0 },
2806 { "jneH", { Jv, BND, cond_jump_flag }, 0 },
2807 { "jbeH", { Jv, BND, cond_jump_flag }, 0 },
2808 { "jaH", { Jv, BND, cond_jump_flag }, 0 },
252b5132 2809 /* 88 */
bf890a93
IT
2810 { "jsH", { Jv, BND, cond_jump_flag }, 0 },
2811 { "jnsH", { Jv, BND, cond_jump_flag }, 0 },
2812 { "jpH", { Jv, BND, cond_jump_flag }, 0 },
2813 { "jnpH", { Jv, BND, cond_jump_flag }, 0 },
2814 { "jlH", { Jv, BND, cond_jump_flag }, 0 },
2815 { "jgeH", { Jv, BND, cond_jump_flag }, 0 },
2816 { "jleH", { Jv, BND, cond_jump_flag }, 0 },
2817 { "jgH", { Jv, BND, cond_jump_flag }, 0 },
252b5132 2818 /* 90 */
bf890a93
IT
2819 { "seto", { Eb }, 0 },
2820 { "setno", { Eb }, 0 },
2821 { "setb", { Eb }, 0 },
2822 { "setae", { Eb }, 0 },
2823 { "sete", { Eb }, 0 },
2824 { "setne", { Eb }, 0 },
2825 { "setbe", { Eb }, 0 },
2826 { "seta", { Eb }, 0 },
252b5132 2827 /* 98 */
bf890a93
IT
2828 { "sets", { Eb }, 0 },
2829 { "setns", { Eb }, 0 },
2830 { "setp", { Eb }, 0 },
2831 { "setnp", { Eb }, 0 },
2832 { "setl", { Eb }, 0 },
2833 { "setge", { Eb }, 0 },
2834 { "setle", { Eb }, 0 },
2835 { "setg", { Eb }, 0 },
252b5132 2836 /* a0 */
bf890a93
IT
2837 { "pushT", { fs }, 0 },
2838 { "popT", { fs }, 0 },
2839 { "cpuid", { XX }, 0 },
2840 { "btS", { Ev, Gv }, 0 },
2841 { "shldS", { Ev, Gv, Ib }, 0 },
2842 { "shldS", { Ev, Gv, CL }, 0 },
1ceb70f8
L
2843 { REG_TABLE (REG_0FA6) },
2844 { REG_TABLE (REG_0FA7) },
252b5132 2845 /* a8 */
bf890a93
IT
2846 { "pushT", { gs }, 0 },
2847 { "popT", { gs }, 0 },
2848 { "rsm", { XX }, 0 },
2849 { "btsS", { Evh1, Gv }, 0 },
2850 { "shrdS", { Ev, Gv, Ib }, 0 },
2851 { "shrdS", { Ev, Gv, CL }, 0 },
1ceb70f8 2852 { REG_TABLE (REG_0FAE) },
bf890a93 2853 { "imulS", { Gv, Ev }, 0 },
252b5132 2854 /* b0 */
bf890a93
IT
2855 { "cmpxchgB", { Ebh1, Gb }, 0 },
2856 { "cmpxchgS", { Evh1, Gv }, 0 },
1ceb70f8 2857 { MOD_TABLE (MOD_0FB2) },
bf890a93 2858 { "btrS", { Evh1, Gv }, 0 },
1ceb70f8
L
2859 { MOD_TABLE (MOD_0FB4) },
2860 { MOD_TABLE (MOD_0FB5) },
bf890a93
IT
2861 { "movz{bR|x}", { Gv, Eb }, 0 },
2862 { "movz{wR|x}", { Gv, Ew }, 0 }, /* yes, there really is movzww ! */
252b5132 2863 /* b8 */
1ceb70f8 2864 { PREFIX_TABLE (PREFIX_0FB8) },
66f1eba0 2865 { "ud1S", { Gv, Ev }, 0 },
1ceb70f8 2866 { REG_TABLE (REG_0FBA) },
bf890a93 2867 { "btcS", { Evh1, Gv }, 0 },
f12dc422 2868 { PREFIX_TABLE (PREFIX_0FBC) },
1ceb70f8 2869 { PREFIX_TABLE (PREFIX_0FBD) },
bf890a93
IT
2870 { "movs{bR|x}", { Gv, Eb }, 0 },
2871 { "movs{wR|x}", { Gv, Ew }, 0 }, /* yes, there really is movsww ! */
252b5132 2872 /* c0 */
bf890a93
IT
2873 { "xaddB", { Ebh1, Gb }, 0 },
2874 { "xaddS", { Evh1, Gv }, 0 },
1ceb70f8 2875 { PREFIX_TABLE (PREFIX_0FC2) },
a8484f96 2876 { MOD_TABLE (MOD_0FC3) },
507bd325
L
2877 { "pinsrw", { MX, Edqw, Ib }, PREFIX_OPCODE },
2878 { "pextrw", { Gdq, MS, Ib }, PREFIX_OPCODE },
2879 { "shufpX", { XM, EXx, Ib }, PREFIX_OPCODE },
1ceb70f8 2880 { REG_TABLE (REG_0FC7) },
252b5132 2881 /* c8 */
bf890a93
IT
2882 { "bswap", { RMeAX }, 0 },
2883 { "bswap", { RMeCX }, 0 },
2884 { "bswap", { RMeDX }, 0 },
2885 { "bswap", { RMeBX }, 0 },
2886 { "bswap", { RMeSP }, 0 },
2887 { "bswap", { RMeBP }, 0 },
2888 { "bswap", { RMeSI }, 0 },
2889 { "bswap", { RMeDI }, 0 },
252b5132 2890 /* d0 */
1ceb70f8 2891 { PREFIX_TABLE (PREFIX_0FD0) },
507bd325
L
2892 { "psrlw", { MX, EM }, PREFIX_OPCODE },
2893 { "psrld", { MX, EM }, PREFIX_OPCODE },
2894 { "psrlq", { MX, EM }, PREFIX_OPCODE },
2895 { "paddq", { MX, EM }, PREFIX_OPCODE },
2896 { "pmullw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8 2897 { PREFIX_TABLE (PREFIX_0FD6) },
75c135a8 2898 { MOD_TABLE (MOD_0FD7) },
252b5132 2899 /* d8 */
507bd325
L
2900 { "psubusb", { MX, EM }, PREFIX_OPCODE },
2901 { "psubusw", { MX, EM }, PREFIX_OPCODE },
2902 { "pminub", { MX, EM }, PREFIX_OPCODE },
2903 { "pand", { MX, EM }, PREFIX_OPCODE },
2904 { "paddusb", { MX, EM }, PREFIX_OPCODE },
2905 { "paddusw", { MX, EM }, PREFIX_OPCODE },
2906 { "pmaxub", { MX, EM }, PREFIX_OPCODE },
2907 { "pandn", { MX, EM }, PREFIX_OPCODE },
252b5132 2908 /* e0 */
507bd325
L
2909 { "pavgb", { MX, EM }, PREFIX_OPCODE },
2910 { "psraw", { MX, EM }, PREFIX_OPCODE },
2911 { "psrad", { MX, EM }, PREFIX_OPCODE },
2912 { "pavgw", { MX, EM }, PREFIX_OPCODE },
2913 { "pmulhuw", { MX, EM }, PREFIX_OPCODE },
2914 { "pmulhw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8
L
2915 { PREFIX_TABLE (PREFIX_0FE6) },
2916 { PREFIX_TABLE (PREFIX_0FE7) },
252b5132 2917 /* e8 */
507bd325
L
2918 { "psubsb", { MX, EM }, PREFIX_OPCODE },
2919 { "psubsw", { MX, EM }, PREFIX_OPCODE },
2920 { "pminsw", { MX, EM }, PREFIX_OPCODE },
2921 { "por", { MX, EM }, PREFIX_OPCODE },
2922 { "paddsb", { MX, EM }, PREFIX_OPCODE },
2923 { "paddsw", { MX, EM }, PREFIX_OPCODE },
2924 { "pmaxsw", { MX, EM }, PREFIX_OPCODE },
2925 { "pxor", { MX, EM }, PREFIX_OPCODE },
252b5132 2926 /* f0 */
1ceb70f8 2927 { PREFIX_TABLE (PREFIX_0FF0) },
507bd325
L
2928 { "psllw", { MX, EM }, PREFIX_OPCODE },
2929 { "pslld", { MX, EM }, PREFIX_OPCODE },
2930 { "psllq", { MX, EM }, PREFIX_OPCODE },
2931 { "pmuludq", { MX, EM }, PREFIX_OPCODE },
2932 { "pmaddwd", { MX, EM }, PREFIX_OPCODE },
2933 { "psadbw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8 2934 { PREFIX_TABLE (PREFIX_0FF7) },
252b5132 2935 /* f8 */
507bd325
L
2936 { "psubb", { MX, EM }, PREFIX_OPCODE },
2937 { "psubw", { MX, EM }, PREFIX_OPCODE },
2938 { "psubd", { MX, EM }, PREFIX_OPCODE },
2939 { "psubq", { MX, EM }, PREFIX_OPCODE },
2940 { "paddb", { MX, EM }, PREFIX_OPCODE },
2941 { "paddw", { MX, EM }, PREFIX_OPCODE },
2942 { "paddd", { MX, EM }, PREFIX_OPCODE },
66f1eba0 2943 { "ud0S", { Gv, Ev }, 0 },
252b5132
RH
2944};
2945
2946static const unsigned char onebyte_has_modrm[256] = {
c608c12e
AM
2947 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2948 /* ------------------------------- */
2949 /* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 00 */
2950 /* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 10 */
2951 /* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 20 */
2952 /* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 30 */
2953 /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40 */
2954 /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50 */
2955 /* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, /* 60 */
2956 /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70 */
2957 /* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 80 */
2958 /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 90 */
2959 /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* a0 */
2960 /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* b0 */
2961 /* c0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* c0 */
2962 /* d0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* d0 */
2963 /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* e0 */
2964 /* f0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1 /* f0 */
2965 /* ------------------------------- */
2966 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
252b5132
RH
2967};
2968
2969static const unsigned char twobyte_has_modrm[256] = {
c608c12e
AM
2970 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2971 /* ------------------------------- */
252b5132 2972 /* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */
b5b1fc4f 2973 /* 10 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1f */
85f10a01 2974 /* 20 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 2f */
331d2d0d 2975 /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
252b5132 2976 /* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */
4bba6815
AM
2977 /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */
2978 /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */
85f10a01 2979 /* 70 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 7f */
252b5132
RH
2980 /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
2981 /* 90 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9f */
30d1c836 2982 /* a0 */ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1, /* af */
66f1eba0 2983 /* b0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* bf */
252b5132 2984 /* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */
ca164297 2985 /* d0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
4bba6815 2986 /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
66f1eba0 2987 /* f0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 /* ff */
c608c12e
AM
2988 /* ------------------------------- */
2989 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2990};
2991
252b5132
RH
2992static char obuf[100];
2993static char *obufp;
ea397f5b 2994static char *mnemonicendp;
252b5132
RH
2995static char scratchbuf[100];
2996static unsigned char *start_codep;
2997static unsigned char *insn_codep;
2998static unsigned char *codep;
285ca992 2999static unsigned char *end_codep;
f16cd0d5
L
3000static int last_lock_prefix;
3001static int last_repz_prefix;
3002static int last_repnz_prefix;
3003static int last_data_prefix;
3004static int last_addr_prefix;
3005static int last_rex_prefix;
3006static int last_seg_prefix;
d9949a36 3007static int fwait_prefix;
285ca992
L
3008/* The active segment register prefix. */
3009static int active_seg_prefix;
f16cd0d5
L
3010#define MAX_CODE_LENGTH 15
3011/* We can up to 14 prefixes since the maximum instruction length is
3012 15bytes. */
3013static int all_prefixes[MAX_CODE_LENGTH - 1];
252b5132 3014static disassemble_info *the_info;
7967e09e
L
3015static struct
3016 {
3017 int mod;
7967e09e 3018 int reg;
484c222e 3019 int rm;
7967e09e
L
3020 }
3021modrm;
4bba6815 3022static unsigned char need_modrm;
dfc8cf43
L
3023static struct
3024 {
3025 int scale;
3026 int index;
3027 int base;
3028 }
3029sib;
c0f3af97
L
3030static struct
3031 {
3032 int register_specifier;
3033 int length;
3034 int prefix;
3035 int w;
43234a1e
L
3036 int evex;
3037 int r;
3038 int v;
3039 int mask_register_specifier;
3040 int zeroing;
3041 int ll;
3042 int b;
c0f3af97
L
3043 }
3044vex;
3045static unsigned char need_vex;
3046static unsigned char need_vex_reg;
dae39acc 3047static unsigned char vex_w_done;
252b5132 3048
ea397f5b
L
3049struct op
3050 {
3051 const char *name;
3052 unsigned int len;
3053 };
3054
4bba6815
AM
3055/* If we are accessing mod/rm/reg without need_modrm set, then the
3056 values are stale. Hitting this abort likely indicates that you
3057 need to update onebyte_has_modrm or twobyte_has_modrm. */
3058#define MODRM_CHECK if (!need_modrm) abort ()
3059
d708bcba
AM
3060static const char **names64;
3061static const char **names32;
3062static const char **names16;
3063static const char **names8;
3064static const char **names8rex;
3065static const char **names_seg;
db51cc60
L
3066static const char *index64;
3067static const char *index32;
d708bcba 3068static const char **index16;
7e8b059b 3069static const char **names_bnd;
d708bcba
AM
3070
3071static const char *intel_names64[] = {
3072 "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
3073 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
3074};
3075static const char *intel_names32[] = {
3076 "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
3077 "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"
3078};
3079static const char *intel_names16[] = {
3080 "ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
3081 "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
3082};
3083static const char *intel_names8[] = {
3084 "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh",
3085};
3086static const char *intel_names8rex[] = {
3087 "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
3088 "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"
3089};
3090static const char *intel_names_seg[] = {
3091 "es", "cs", "ss", "ds", "fs", "gs", "?", "?",
3092};
db51cc60
L
3093static const char *intel_index64 = "riz";
3094static const char *intel_index32 = "eiz";
d708bcba
AM
3095static const char *intel_index16[] = {
3096 "bx+si", "bx+di", "bp+si", "bp+di", "si", "di", "bp", "bx"
3097};
3098
3099static const char *att_names64[] = {
3100 "%rax", "%rcx", "%rdx", "%rbx", "%rsp", "%rbp", "%rsi", "%rdi",
52b15da3
JH
3101 "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
3102};
d708bcba
AM
3103static const char *att_names32[] = {
3104 "%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi",
52b15da3 3105 "%r8d", "%r9d", "%r10d", "%r11d", "%r12d", "%r13d", "%r14d", "%r15d"
252b5132 3106};
d708bcba
AM
3107static const char *att_names16[] = {
3108 "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di",
52b15da3 3109 "%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w"
252b5132 3110};
d708bcba
AM
3111static const char *att_names8[] = {
3112 "%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh",
252b5132 3113};
d708bcba
AM
3114static const char *att_names8rex[] = {
3115 "%al", "%cl", "%dl", "%bl", "%spl", "%bpl", "%sil", "%dil",
52b15da3
JH
3116 "%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b"
3117};
d708bcba
AM
3118static const char *att_names_seg[] = {
3119 "%es", "%cs", "%ss", "%ds", "%fs", "%gs", "%?", "%?",
252b5132 3120};
db51cc60
L
3121static const char *att_index64 = "%riz";
3122static const char *att_index32 = "%eiz";
d708bcba
AM
3123static const char *att_index16[] = {
3124 "%bx,%si", "%bx,%di", "%bp,%si", "%bp,%di", "%si", "%di", "%bp", "%bx"
252b5132
RH
3125};
3126
b9733481
L
3127static const char **names_mm;
3128static const char *intel_names_mm[] = {
3129 "mm0", "mm1", "mm2", "mm3",
3130 "mm4", "mm5", "mm6", "mm7"
3131};
3132static const char *att_names_mm[] = {
3133 "%mm0", "%mm1", "%mm2", "%mm3",
3134 "%mm4", "%mm5", "%mm6", "%mm7"
3135};
3136
7e8b059b
L
3137static const char *intel_names_bnd[] = {
3138 "bnd0", "bnd1", "bnd2", "bnd3"
3139};
3140
3141static const char *att_names_bnd[] = {
3142 "%bnd0", "%bnd1", "%bnd2", "%bnd3"
3143};
3144
b9733481
L
3145static const char **names_xmm;
3146static const char *intel_names_xmm[] = {
3147 "xmm0", "xmm1", "xmm2", "xmm3",
3148 "xmm4", "xmm5", "xmm6", "xmm7",
3149 "xmm8", "xmm9", "xmm10", "xmm11",
43234a1e
L
3150 "xmm12", "xmm13", "xmm14", "xmm15",
3151 "xmm16", "xmm17", "xmm18", "xmm19",
3152 "xmm20", "xmm21", "xmm22", "xmm23",
3153 "xmm24", "xmm25", "xmm26", "xmm27",
3154 "xmm28", "xmm29", "xmm30", "xmm31"
b9733481
L
3155};
3156static const char *att_names_xmm[] = {
3157 "%xmm0", "%xmm1", "%xmm2", "%xmm3",
3158 "%xmm4", "%xmm5", "%xmm6", "%xmm7",
3159 "%xmm8", "%xmm9", "%xmm10", "%xmm11",
43234a1e
L
3160 "%xmm12", "%xmm13", "%xmm14", "%xmm15",
3161 "%xmm16", "%xmm17", "%xmm18", "%xmm19",
3162 "%xmm20", "%xmm21", "%xmm22", "%xmm23",
3163 "%xmm24", "%xmm25", "%xmm26", "%xmm27",
3164 "%xmm28", "%xmm29", "%xmm30", "%xmm31"
b9733481
L
3165};
3166
3167static const char **names_ymm;
3168static const char *intel_names_ymm[] = {
3169 "ymm0", "ymm1", "ymm2", "ymm3",
3170 "ymm4", "ymm5", "ymm6", "ymm7",
3171 "ymm8", "ymm9", "ymm10", "ymm11",
43234a1e
L
3172 "ymm12", "ymm13", "ymm14", "ymm15",
3173 "ymm16", "ymm17", "ymm18", "ymm19",
3174 "ymm20", "ymm21", "ymm22", "ymm23",
3175 "ymm24", "ymm25", "ymm26", "ymm27",
3176 "ymm28", "ymm29", "ymm30", "ymm31"
b9733481
L
3177};
3178static const char *att_names_ymm[] = {
3179 "%ymm0", "%ymm1", "%ymm2", "%ymm3",
3180 "%ymm4", "%ymm5", "%ymm6", "%ymm7",
3181 "%ymm8", "%ymm9", "%ymm10", "%ymm11",
43234a1e
L
3182 "%ymm12", "%ymm13", "%ymm14", "%ymm15",
3183 "%ymm16", "%ymm17", "%ymm18", "%ymm19",
3184 "%ymm20", "%ymm21", "%ymm22", "%ymm23",
3185 "%ymm24", "%ymm25", "%ymm26", "%ymm27",
3186 "%ymm28", "%ymm29", "%ymm30", "%ymm31"
3187};
3188
3189static const char **names_zmm;
3190static const char *intel_names_zmm[] = {
3191 "zmm0", "zmm1", "zmm2", "zmm3",
3192 "zmm4", "zmm5", "zmm6", "zmm7",
3193 "zmm8", "zmm9", "zmm10", "zmm11",
3194 "zmm12", "zmm13", "zmm14", "zmm15",
3195 "zmm16", "zmm17", "zmm18", "zmm19",
3196 "zmm20", "zmm21", "zmm22", "zmm23",
3197 "zmm24", "zmm25", "zmm26", "zmm27",
3198 "zmm28", "zmm29", "zmm30", "zmm31"
3199};
3200static const char *att_names_zmm[] = {
3201 "%zmm0", "%zmm1", "%zmm2", "%zmm3",
3202 "%zmm4", "%zmm5", "%zmm6", "%zmm7",
3203 "%zmm8", "%zmm9", "%zmm10", "%zmm11",
3204 "%zmm12", "%zmm13", "%zmm14", "%zmm15",
3205 "%zmm16", "%zmm17", "%zmm18", "%zmm19",
3206 "%zmm20", "%zmm21", "%zmm22", "%zmm23",
3207 "%zmm24", "%zmm25", "%zmm26", "%zmm27",
3208 "%zmm28", "%zmm29", "%zmm30", "%zmm31"
3209};
3210
3211static const char **names_mask;
3212static const char *intel_names_mask[] = {
3213 "k0", "k1", "k2", "k3", "k4", "k5", "k6", "k7"
3214};
3215static const char *att_names_mask[] = {
3216 "%k0", "%k1", "%k2", "%k3", "%k4", "%k5", "%k6", "%k7"
3217};
3218
3219static const char *names_rounding[] =
3220{
3221 "{rn-sae}",
3222 "{rd-sae}",
3223 "{ru-sae}",
3224 "{rz-sae}"
b9733481
L
3225};
3226
1ceb70f8
L
3227static const struct dis386 reg_table[][8] = {
3228 /* REG_80 */
252b5132 3229 {
bf890a93
IT
3230 { "addA", { Ebh1, Ib }, 0 },
3231 { "orA", { Ebh1, Ib }, 0 },
3232 { "adcA", { Ebh1, Ib }, 0 },
3233 { "sbbA", { Ebh1, Ib }, 0 },
3234 { "andA", { Ebh1, Ib }, 0 },
3235 { "subA", { Ebh1, Ib }, 0 },
3236 { "xorA", { Ebh1, Ib }, 0 },
3237 { "cmpA", { Eb, Ib }, 0 },
252b5132 3238 },
1ceb70f8 3239 /* REG_81 */
252b5132 3240 {
bf890a93
IT
3241 { "addQ", { Evh1, Iv }, 0 },
3242 { "orQ", { Evh1, Iv }, 0 },
3243 { "adcQ", { Evh1, Iv }, 0 },
3244 { "sbbQ", { Evh1, Iv }, 0 },
3245 { "andQ", { Evh1, Iv }, 0 },
3246 { "subQ", { Evh1, Iv }, 0 },
3247 { "xorQ", { Evh1, Iv }, 0 },
3248 { "cmpQ", { Ev, Iv }, 0 },
252b5132 3249 },
7148c369 3250 /* REG_83 */
252b5132 3251 {
bf890a93
IT
3252 { "addQ", { Evh1, sIb }, 0 },
3253 { "orQ", { Evh1, sIb }, 0 },
3254 { "adcQ", { Evh1, sIb }, 0 },
3255 { "sbbQ", { Evh1, sIb }, 0 },
3256 { "andQ", { Evh1, sIb }, 0 },
3257 { "subQ", { Evh1, sIb }, 0 },
3258 { "xorQ", { Evh1, sIb }, 0 },
3259 { "cmpQ", { Ev, sIb }, 0 },
252b5132 3260 },
1ceb70f8 3261 /* REG_8F */
4e7d34a6 3262 {
bf890a93 3263 { "popU", { stackEv }, 0 },
c48244a5 3264 { XOP_8F_TABLE (XOP_09) },
592d1631
L
3265 { Bad_Opcode },
3266 { Bad_Opcode },
3267 { Bad_Opcode },
f88c9eb0 3268 { XOP_8F_TABLE (XOP_09) },
4e7d34a6 3269 },
1ceb70f8 3270 /* REG_C0 */
252b5132 3271 {
bf890a93
IT
3272 { "rolA", { Eb, Ib }, 0 },
3273 { "rorA", { Eb, Ib }, 0 },
3274 { "rclA", { Eb, Ib }, 0 },
3275 { "rcrA", { Eb, Ib }, 0 },
3276 { "shlA", { Eb, Ib }, 0 },
3277 { "shrA", { Eb, Ib }, 0 },
e4bdd679 3278 { "shlA", { Eb, Ib }, 0 },
bf890a93 3279 { "sarA", { Eb, Ib }, 0 },
252b5132 3280 },
1ceb70f8 3281 /* REG_C1 */
252b5132 3282 {
bf890a93
IT
3283 { "rolQ", { Ev, Ib }, 0 },
3284 { "rorQ", { Ev, Ib }, 0 },
3285 { "rclQ", { Ev, Ib }, 0 },
3286 { "rcrQ", { Ev, Ib }, 0 },
3287 { "shlQ", { Ev, Ib }, 0 },
3288 { "shrQ", { Ev, Ib }, 0 },
e4bdd679 3289 { "shlQ", { Ev, Ib }, 0 },
bf890a93 3290 { "sarQ", { Ev, Ib }, 0 },
252b5132 3291 },
1ceb70f8 3292 /* REG_C6 */
4e7d34a6 3293 {
bf890a93 3294 { "movA", { Ebh3, Ib }, 0 },
42164a71
L
3295 { Bad_Opcode },
3296 { Bad_Opcode },
3297 { Bad_Opcode },
3298 { Bad_Opcode },
3299 { Bad_Opcode },
3300 { Bad_Opcode },
3301 { MOD_TABLE (MOD_C6_REG_7) },
4e7d34a6 3302 },
1ceb70f8 3303 /* REG_C7 */
4e7d34a6 3304 {
bf890a93 3305 { "movQ", { Evh3, Iv }, 0 },
42164a71
L
3306 { Bad_Opcode },
3307 { Bad_Opcode },
3308 { Bad_Opcode },
3309 { Bad_Opcode },
3310 { Bad_Opcode },
3311 { Bad_Opcode },
3312 { MOD_TABLE (MOD_C7_REG_7) },
4e7d34a6 3313 },
1ceb70f8 3314 /* REG_D0 */
252b5132 3315 {
bf890a93
IT
3316 { "rolA", { Eb, I1 }, 0 },
3317 { "rorA", { Eb, I1 }, 0 },
3318 { "rclA", { Eb, I1 }, 0 },
3319 { "rcrA", { Eb, I1 }, 0 },
3320 { "shlA", { Eb, I1 }, 0 },
3321 { "shrA", { Eb, I1 }, 0 },
e4bdd679 3322 { "shlA", { Eb, I1 }, 0 },
bf890a93 3323 { "sarA", { Eb, I1 }, 0 },
252b5132 3324 },
1ceb70f8 3325 /* REG_D1 */
252b5132 3326 {
bf890a93
IT
3327 { "rolQ", { Ev, I1 }, 0 },
3328 { "rorQ", { Ev, I1 }, 0 },
3329 { "rclQ", { Ev, I1 }, 0 },
3330 { "rcrQ", { Ev, I1 }, 0 },
3331 { "shlQ", { Ev, I1 }, 0 },
3332 { "shrQ", { Ev, I1 }, 0 },
e4bdd679 3333 { "shlQ", { Ev, I1 }, 0 },
bf890a93 3334 { "sarQ", { Ev, I1 }, 0 },
252b5132 3335 },
1ceb70f8 3336 /* REG_D2 */
252b5132 3337 {
bf890a93
IT
3338 { "rolA", { Eb, CL }, 0 },
3339 { "rorA", { Eb, CL }, 0 },
3340 { "rclA", { Eb, CL }, 0 },
3341 { "rcrA", { Eb, CL }, 0 },
3342 { "shlA", { Eb, CL }, 0 },
3343 { "shrA", { Eb, CL }, 0 },
e4bdd679 3344 { "shlA", { Eb, CL }, 0 },
bf890a93 3345 { "sarA", { Eb, CL }, 0 },
252b5132 3346 },
1ceb70f8 3347 /* REG_D3 */
252b5132 3348 {
bf890a93
IT
3349 { "rolQ", { Ev, CL }, 0 },
3350 { "rorQ", { Ev, CL }, 0 },
3351 { "rclQ", { Ev, CL }, 0 },
3352 { "rcrQ", { Ev, CL }, 0 },
3353 { "shlQ", { Ev, CL }, 0 },
3354 { "shrQ", { Ev, CL }, 0 },
e4bdd679 3355 { "shlQ", { Ev, CL }, 0 },
bf890a93 3356 { "sarQ", { Ev, CL }, 0 },
252b5132 3357 },
1ceb70f8 3358 /* REG_F6 */
252b5132 3359 {
bf890a93 3360 { "testA", { Eb, Ib }, 0 },
7db2c588 3361 { "testA", { Eb, Ib }, 0 },
bf890a93
IT
3362 { "notA", { Ebh1 }, 0 },
3363 { "negA", { Ebh1 }, 0 },
3364 { "mulA", { Eb }, 0 }, /* Don't print the implicit %al register, */
3365 { "imulA", { Eb }, 0 }, /* to distinguish these opcodes from other */
3366 { "divA", { Eb }, 0 }, /* mul/imul opcodes. Do the same for div */
3367 { "idivA", { Eb }, 0 }, /* and idiv for consistency. */
252b5132 3368 },
1ceb70f8 3369 /* REG_F7 */
252b5132 3370 {
bf890a93 3371 { "testQ", { Ev, Iv }, 0 },
7db2c588 3372 { "testQ", { Ev, Iv }, 0 },
bf890a93
IT
3373 { "notQ", { Evh1 }, 0 },
3374 { "negQ", { Evh1 }, 0 },
3375 { "mulQ", { Ev }, 0 }, /* Don't print the implicit register. */
3376 { "imulQ", { Ev }, 0 },
3377 { "divQ", { Ev }, 0 },
3378 { "idivQ", { Ev }, 0 },
252b5132 3379 },
1ceb70f8 3380 /* REG_FE */
252b5132 3381 {
bf890a93
IT
3382 { "incA", { Ebh1 }, 0 },
3383 { "decA", { Ebh1 }, 0 },
252b5132 3384 },
1ceb70f8 3385 /* REG_FF */
252b5132 3386 {
bf890a93
IT
3387 { "incQ", { Evh1 }, 0 },
3388 { "decQ", { Evh1 }, 0 },
9fef80d6 3389 { "call{&|}", { NOTRACK, indirEv, BND }, 0 },
4a357820 3390 { MOD_TABLE (MOD_FF_REG_3) },
9fef80d6 3391 { "jmp{&|}", { NOTRACK, indirEv, BND }, 0 },
4a357820 3392 { MOD_TABLE (MOD_FF_REG_5) },
bf890a93 3393 { "pushU", { stackEv }, 0 },
592d1631 3394 { Bad_Opcode },
252b5132 3395 },
1ceb70f8 3396 /* REG_0F00 */
252b5132 3397 {
bf890a93
IT
3398 { "sldtD", { Sv }, 0 },
3399 { "strD", { Sv }, 0 },
3400 { "lldt", { Ew }, 0 },
3401 { "ltr", { Ew }, 0 },
3402 { "verr", { Ew }, 0 },
3403 { "verw", { Ew }, 0 },
592d1631
L
3404 { Bad_Opcode },
3405 { Bad_Opcode },
252b5132 3406 },
1ceb70f8 3407 /* REG_0F01 */
252b5132 3408 {
1ceb70f8
L
3409 { MOD_TABLE (MOD_0F01_REG_0) },
3410 { MOD_TABLE (MOD_0F01_REG_1) },
3411 { MOD_TABLE (MOD_0F01_REG_2) },
3412 { MOD_TABLE (MOD_0F01_REG_3) },
bf890a93 3413 { "smswD", { Sv }, 0 },
8eab4136 3414 { MOD_TABLE (MOD_0F01_REG_5) },
bf890a93 3415 { "lmsw", { Ew }, 0 },
1ceb70f8 3416 { MOD_TABLE (MOD_0F01_REG_7) },
252b5132 3417 },
b5b1fc4f 3418 /* REG_0F0D */
252b5132 3419 {
bf890a93
IT
3420 { "prefetch", { Mb }, 0 },
3421 { "prefetchw", { Mb }, 0 },
3422 { "prefetchwt1", { Mb }, 0 },
3423 { "prefetch", { Mb }, 0 },
3424 { "prefetch", { Mb }, 0 },
3425 { "prefetch", { Mb }, 0 },
3426 { "prefetch", { Mb }, 0 },
3427 { "prefetch", { Mb }, 0 },
252b5132 3428 },
1ceb70f8 3429 /* REG_0F18 */
252b5132 3430 {
1ceb70f8
L
3431 { MOD_TABLE (MOD_0F18_REG_0) },
3432 { MOD_TABLE (MOD_0F18_REG_1) },
3433 { MOD_TABLE (MOD_0F18_REG_2) },
3434 { MOD_TABLE (MOD_0F18_REG_3) },
d7189fa5
RM
3435 { MOD_TABLE (MOD_0F18_REG_4) },
3436 { MOD_TABLE (MOD_0F18_REG_5) },
3437 { MOD_TABLE (MOD_0F18_REG_6) },
3438 { MOD_TABLE (MOD_0F18_REG_7) },
252b5132 3439 },
c48935d7
IT
3440 /* REG_0F1C_MOD_0 */
3441 {
3442 { "cldemote", { Mb }, 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 { "nopQ", { Ev }, 0 },
3450 },
603555e5
L
3451 /* REG_0F1E_MOD_3 */
3452 {
3453 { "nopQ", { Ev }, 0 },
3454 { "rdsspK", { Rdq }, PREFIX_OPCODE },
3455 { "nopQ", { Ev }, 0 },
3456 { "nopQ", { Ev }, 0 },
3457 { "nopQ", { Ev }, 0 },
3458 { "nopQ", { Ev }, 0 },
3459 { "nopQ", { Ev }, 0 },
3460 { RM_TABLE (RM_0F1E_MOD_3_REG_7) },
3461 },
1ceb70f8 3462 /* REG_0F71 */
a6bd098c 3463 {
592d1631
L
3464 { Bad_Opcode },
3465 { Bad_Opcode },
1ceb70f8 3466 { MOD_TABLE (MOD_0F71_REG_2) },
592d1631 3467 { Bad_Opcode },
1ceb70f8 3468 { MOD_TABLE (MOD_0F71_REG_4) },
592d1631 3469 { Bad_Opcode },
1ceb70f8 3470 { MOD_TABLE (MOD_0F71_REG_6) },
a6bd098c 3471 },
1ceb70f8 3472 /* REG_0F72 */
a6bd098c 3473 {
592d1631
L
3474 { Bad_Opcode },
3475 { Bad_Opcode },
1ceb70f8 3476 { MOD_TABLE (MOD_0F72_REG_2) },
592d1631 3477 { Bad_Opcode },
1ceb70f8 3478 { MOD_TABLE (MOD_0F72_REG_4) },
592d1631 3479 { Bad_Opcode },
1ceb70f8 3480 { MOD_TABLE (MOD_0F72_REG_6) },
a6bd098c 3481 },
1ceb70f8 3482 /* REG_0F73 */
252b5132 3483 {
592d1631
L
3484 { Bad_Opcode },
3485 { Bad_Opcode },
1ceb70f8
L
3486 { MOD_TABLE (MOD_0F73_REG_2) },
3487 { MOD_TABLE (MOD_0F73_REG_3) },
592d1631
L
3488 { Bad_Opcode },
3489 { Bad_Opcode },
1ceb70f8
L
3490 { MOD_TABLE (MOD_0F73_REG_6) },
3491 { MOD_TABLE (MOD_0F73_REG_7) },
252b5132 3492 },
1ceb70f8 3493 /* REG_0FA6 */
252b5132 3494 {
bf890a93
IT
3495 { "montmul", { { OP_0f07, 0 } }, 0 },
3496 { "xsha1", { { OP_0f07, 0 } }, 0 },
3497 { "xsha256", { { OP_0f07, 0 } }, 0 },
4e7d34a6 3498 },
1ceb70f8 3499 /* REG_0FA7 */
4e7d34a6 3500 {
bf890a93
IT
3501 { "xstore-rng", { { OP_0f07, 0 } }, 0 },
3502 { "xcrypt-ecb", { { OP_0f07, 0 } }, 0 },
3503 { "xcrypt-cbc", { { OP_0f07, 0 } }, 0 },
3504 { "xcrypt-ctr", { { OP_0f07, 0 } }, 0 },
3505 { "xcrypt-cfb", { { OP_0f07, 0 } }, 0 },
3506 { "xcrypt-ofb", { { OP_0f07, 0 } }, 0 },
4e7d34a6 3507 },
1ceb70f8 3508 /* REG_0FAE */
4e7d34a6 3509 {
1ceb70f8
L
3510 { MOD_TABLE (MOD_0FAE_REG_0) },
3511 { MOD_TABLE (MOD_0FAE_REG_1) },
3512 { MOD_TABLE (MOD_0FAE_REG_2) },
3513 { MOD_TABLE (MOD_0FAE_REG_3) },
475a2301 3514 { MOD_TABLE (MOD_0FAE_REG_4) },
1ceb70f8
L
3515 { MOD_TABLE (MOD_0FAE_REG_5) },
3516 { MOD_TABLE (MOD_0FAE_REG_6) },
3517 { MOD_TABLE (MOD_0FAE_REG_7) },
252b5132 3518 },
1ceb70f8 3519 /* REG_0FBA */
252b5132 3520 {
592d1631
L
3521 { Bad_Opcode },
3522 { Bad_Opcode },
3523 { Bad_Opcode },
3524 { Bad_Opcode },
bf890a93
IT
3525 { "btQ", { Ev, Ib }, 0 },
3526 { "btsQ", { Evh1, Ib }, 0 },
3527 { "btrQ", { Evh1, Ib }, 0 },
3528 { "btcQ", { Evh1, Ib }, 0 },
c608c12e 3529 },
1ceb70f8 3530 /* REG_0FC7 */
c608c12e 3531 {
592d1631 3532 { Bad_Opcode },
bf890a93 3533 { "cmpxchg8b", { { CMPXCHG8B_Fixup, q_mode } }, 0 },
592d1631 3534 { Bad_Opcode },
963f3586
IT
3535 { MOD_TABLE (MOD_0FC7_REG_3) },
3536 { MOD_TABLE (MOD_0FC7_REG_4) },
3537 { MOD_TABLE (MOD_0FC7_REG_5) },
1ceb70f8
L
3538 { MOD_TABLE (MOD_0FC7_REG_6) },
3539 { MOD_TABLE (MOD_0FC7_REG_7) },
252b5132 3540 },
592a252b 3541 /* REG_VEX_0F71 */
c0f3af97 3542 {
592d1631
L
3543 { Bad_Opcode },
3544 { Bad_Opcode },
592a252b 3545 { MOD_TABLE (MOD_VEX_0F71_REG_2) },
592d1631 3546 { Bad_Opcode },
592a252b 3547 { MOD_TABLE (MOD_VEX_0F71_REG_4) },
592d1631 3548 { Bad_Opcode },
592a252b 3549 { MOD_TABLE (MOD_VEX_0F71_REG_6) },
c0f3af97 3550 },
592a252b 3551 /* REG_VEX_0F72 */
c0f3af97 3552 {
592d1631
L
3553 { Bad_Opcode },
3554 { Bad_Opcode },
592a252b 3555 { MOD_TABLE (MOD_VEX_0F72_REG_2) },
592d1631 3556 { Bad_Opcode },
592a252b 3557 { MOD_TABLE (MOD_VEX_0F72_REG_4) },
592d1631 3558 { Bad_Opcode },
592a252b 3559 { MOD_TABLE (MOD_VEX_0F72_REG_6) },
c0f3af97 3560 },
592a252b 3561 /* REG_VEX_0F73 */
c0f3af97 3562 {
592d1631
L
3563 { Bad_Opcode },
3564 { Bad_Opcode },
592a252b
L
3565 { MOD_TABLE (MOD_VEX_0F73_REG_2) },
3566 { MOD_TABLE (MOD_VEX_0F73_REG_3) },
592d1631
L
3567 { Bad_Opcode },
3568 { Bad_Opcode },
592a252b
L
3569 { MOD_TABLE (MOD_VEX_0F73_REG_6) },
3570 { MOD_TABLE (MOD_VEX_0F73_REG_7) },
c0f3af97 3571 },
592a252b 3572 /* REG_VEX_0FAE */
c0f3af97 3573 {
592d1631
L
3574 { Bad_Opcode },
3575 { Bad_Opcode },
592a252b
L
3576 { MOD_TABLE (MOD_VEX_0FAE_REG_2) },
3577 { MOD_TABLE (MOD_VEX_0FAE_REG_3) },
c0f3af97 3578 },
f12dc422
L
3579 /* REG_VEX_0F38F3 */
3580 {
3581 { Bad_Opcode },
3582 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_1) },
3583 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_2) },
3584 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_3) },
3585 },
f88c9eb0
SP
3586 /* REG_XOP_LWPCB */
3587 {
bf890a93
IT
3588 { "llwpcb", { { OP_LWPCB_E, 0 } }, 0 },
3589 { "slwpcb", { { OP_LWPCB_E, 0 } }, 0 },
f88c9eb0
SP
3590 },
3591 /* REG_XOP_LWP */
3592 {
c1dc7af5
JB
3593 { "lwpins", { { OP_LWP_E, 0 }, Ed, Id }, 0 },
3594 { "lwpval", { { OP_LWP_E, 0 }, Ed, Id }, 0 },
f88c9eb0 3595 },
2a2a0f38
QN
3596 /* REG_XOP_TBM_01 */
3597 {
3598 { Bad_Opcode },
c1dc7af5
JB
3599 { "blcfill", { { OP_LWP_E, 0 }, Edq }, 0 },
3600 { "blsfill", { { OP_LWP_E, 0 }, Edq }, 0 },
3601 { "blcs", { { OP_LWP_E, 0 }, Edq }, 0 },
3602 { "tzmsk", { { OP_LWP_E, 0 }, Edq }, 0 },
3603 { "blcic", { { OP_LWP_E, 0 }, Edq }, 0 },
3604 { "blsic", { { OP_LWP_E, 0 }, Edq }, 0 },
3605 { "t1mskc", { { OP_LWP_E, 0 }, Edq }, 0 },
2a2a0f38
QN
3606 },
3607 /* REG_XOP_TBM_02 */
3608 {
3609 { Bad_Opcode },
c1dc7af5 3610 { "blcmsk", { { OP_LWP_E, 0 }, Edq }, 0 },
2a2a0f38
QN
3611 { Bad_Opcode },
3612 { Bad_Opcode },
3613 { Bad_Opcode },
3614 { Bad_Opcode },
c1dc7af5 3615 { "blci", { { OP_LWP_E, 0 }, Edq }, 0 },
2a2a0f38 3616 },
ad692897
L
3617
3618#include "i386-dis-evex-reg.h"
4e7d34a6
L
3619};
3620
1ceb70f8
L
3621static const struct dis386 prefix_table[][4] = {
3622 /* PREFIX_90 */
252b5132 3623 {
bf890a93
IT
3624 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } }, 0 },
3625 { "pause", { XX }, 0 },
3626 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } }, 0 },
507bd325 3627 { NULL, { { NULL, 0 } }, PREFIX_IGNORED }
0f10071e 3628 },
4e7d34a6 3629
603555e5
L
3630 /* PREFIX_MOD_0_0F01_REG_5 */
3631 {
3632 { Bad_Opcode },
3633 { "rstorssp", { Mq }, PREFIX_OPCODE },
3634 },
3635
2234eee6 3636 /* PREFIX_MOD_3_0F01_REG_5_RM_0 */
603555e5
L
3637 {
3638 { Bad_Opcode },
2234eee6 3639 { "setssbsy", { Skip_MODRM }, PREFIX_OPCODE },
603555e5
L
3640 },
3641
3642 /* PREFIX_MOD_3_0F01_REG_5_RM_2 */
3643 {
3644 { Bad_Opcode },
c2f76402 3645 { "saveprevssp", { Skip_MODRM }, PREFIX_OPCODE },
603555e5
L
3646 },
3647
3233d7d0
IT
3648 /* PREFIX_0F09 */
3649 {
3650 { "wbinvd", { XX }, 0 },
3651 { "wbnoinvd", { XX }, 0 },
3652 },
3653
1ceb70f8 3654 /* PREFIX_0F10 */
cc0ec051 3655 {
507bd325
L
3656 { "movups", { XM, EXx }, PREFIX_OPCODE },
3657 { "movss", { XM, EXd }, PREFIX_OPCODE },
3658 { "movupd", { XM, EXx }, PREFIX_OPCODE },
3659 { "movsd", { XM, EXq }, PREFIX_OPCODE },
30d1c836 3660 },
4e7d34a6 3661
1ceb70f8 3662 /* PREFIX_0F11 */
30d1c836 3663 {
507bd325
L
3664 { "movups", { EXxS, XM }, PREFIX_OPCODE },
3665 { "movss", { EXdS, XM }, PREFIX_OPCODE },
3666 { "movupd", { EXxS, XM }, PREFIX_OPCODE },
3667 { "movsd", { EXqS, XM }, PREFIX_OPCODE },
4e7d34a6 3668 },
252b5132 3669
1ceb70f8 3670 /* PREFIX_0F12 */
c608c12e 3671 {
1ceb70f8 3672 { MOD_TABLE (MOD_0F12_PREFIX_0) },
507bd325
L
3673 { "movsldup", { XM, EXx }, PREFIX_OPCODE },
3674 { "movlpd", { XM, EXq }, PREFIX_OPCODE },
3675 { "movddup", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3676 },
4e7d34a6 3677
1ceb70f8 3678 /* PREFIX_0F16 */
c608c12e 3679 {
1ceb70f8 3680 { MOD_TABLE (MOD_0F16_PREFIX_0) },
507bd325
L
3681 { "movshdup", { XM, EXx }, PREFIX_OPCODE },
3682 { "movhpd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3683 },
4e7d34a6 3684
7e8b059b
L
3685 /* PREFIX_0F1A */
3686 {
3687 { MOD_TABLE (MOD_0F1A_PREFIX_0) },
bf890a93
IT
3688 { "bndcl", { Gbnd, Ev_bnd }, 0 },
3689 { "bndmov", { Gbnd, Ebnd }, 0 },
3690 { "bndcu", { Gbnd, Ev_bnd }, 0 },
7e8b059b
L
3691 },
3692
3693 /* PREFIX_0F1B */
3694 {
3695 { MOD_TABLE (MOD_0F1B_PREFIX_0) },
3696 { MOD_TABLE (MOD_0F1B_PREFIX_1) },
9f79e886 3697 { "bndmov", { EbndS, Gbnd }, 0 },
bf890a93 3698 { "bndcn", { Gbnd, Ev_bnd }, 0 },
7e8b059b
L
3699 },
3700
c48935d7
IT
3701 /* PREFIX_0F1C */
3702 {
3703 { MOD_TABLE (MOD_0F1C_PREFIX_0) },
3704 { "nopQ", { Ev }, PREFIX_OPCODE },
3705 { "nopQ", { Ev }, PREFIX_OPCODE },
3706 { "nopQ", { Ev }, PREFIX_OPCODE },
3707 },
3708
603555e5
L
3709 /* PREFIX_0F1E */
3710 {
3711 { "nopQ", { Ev }, PREFIX_OPCODE },
3712 { MOD_TABLE (MOD_0F1E_PREFIX_1) },
3713 { "nopQ", { Ev }, PREFIX_OPCODE },
3714 { "nopQ", { Ev }, PREFIX_OPCODE },
3715 },
3716
1ceb70f8 3717 /* PREFIX_0F2A */
c608c12e 3718 {
507bd325 3719 { "cvtpi2ps", { XM, EMCq }, PREFIX_OPCODE },
e1a1babd 3720 { "cvtsi2ss%LQ", { XM, Edq }, PREFIX_OPCODE },
507bd325 3721 { "cvtpi2pd", { XM, EMCq }, PREFIX_OPCODE },
e1a1babd 3722 { "cvtsi2sd%LQ", { XM, Edq }, 0 },
c608c12e 3723 },
4e7d34a6 3724
1ceb70f8 3725 /* PREFIX_0F2B */
c608c12e 3726 {
75c135a8
L
3727 { MOD_TABLE (MOD_0F2B_PREFIX_0) },
3728 { MOD_TABLE (MOD_0F2B_PREFIX_1) },
3729 { MOD_TABLE (MOD_0F2B_PREFIX_2) },
3730 { MOD_TABLE (MOD_0F2B_PREFIX_3) },
c608c12e 3731 },
4e7d34a6 3732
1ceb70f8 3733 /* PREFIX_0F2C */
c608c12e 3734 {
507bd325 3735 { "cvttps2pi", { MXC, EXq }, PREFIX_OPCODE },
e1a1babd 3736 { "cvttss2si", { Gdq, EXd }, PREFIX_OPCODE },
507bd325 3737 { "cvttpd2pi", { MXC, EXx }, PREFIX_OPCODE },
e1a1babd 3738 { "cvttsd2si", { Gdq, EXq }, PREFIX_OPCODE },
c608c12e 3739 },
4e7d34a6 3740
1ceb70f8 3741 /* PREFIX_0F2D */
c608c12e 3742 {
507bd325 3743 { "cvtps2pi", { MXC, EXq }, PREFIX_OPCODE },
e1a1babd 3744 { "cvtss2si", { Gdq, EXd }, PREFIX_OPCODE },
507bd325 3745 { "cvtpd2pi", { MXC, EXx }, PREFIX_OPCODE },
e1a1babd 3746 { "cvtsd2si", { Gdq, EXq }, PREFIX_OPCODE },
c608c12e 3747 },
4e7d34a6 3748
1ceb70f8 3749 /* PREFIX_0F2E */
c608c12e 3750 {
bf890a93 3751 { "ucomiss",{ XM, EXd }, 0 },
592d1631 3752 { Bad_Opcode },
bf890a93 3753 { "ucomisd",{ XM, EXq }, 0 },
c608c12e 3754 },
4e7d34a6 3755
1ceb70f8 3756 /* PREFIX_0F2F */
c608c12e 3757 {
bf890a93 3758 { "comiss", { XM, EXd }, 0 },
592d1631 3759 { Bad_Opcode },
bf890a93 3760 { "comisd", { XM, EXq }, 0 },
c608c12e 3761 },
4e7d34a6 3762
1ceb70f8 3763 /* PREFIX_0F51 */
c608c12e 3764 {
507bd325
L
3765 { "sqrtps", { XM, EXx }, PREFIX_OPCODE },
3766 { "sqrtss", { XM, EXd }, PREFIX_OPCODE },
3767 { "sqrtpd", { XM, EXx }, PREFIX_OPCODE },
3768 { "sqrtsd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3769 },
4e7d34a6 3770
1ceb70f8 3771 /* PREFIX_0F52 */
c608c12e 3772 {
507bd325
L
3773 { "rsqrtps",{ XM, EXx }, PREFIX_OPCODE },
3774 { "rsqrtss",{ XM, EXd }, PREFIX_OPCODE },
c608c12e 3775 },
4e7d34a6 3776
1ceb70f8 3777 /* PREFIX_0F53 */
c608c12e 3778 {
507bd325
L
3779 { "rcpps", { XM, EXx }, PREFIX_OPCODE },
3780 { "rcpss", { XM, EXd }, PREFIX_OPCODE },
c608c12e 3781 },
4e7d34a6 3782
1ceb70f8 3783 /* PREFIX_0F58 */
c608c12e 3784 {
507bd325
L
3785 { "addps", { XM, EXx }, PREFIX_OPCODE },
3786 { "addss", { XM, EXd }, PREFIX_OPCODE },
3787 { "addpd", { XM, EXx }, PREFIX_OPCODE },
3788 { "addsd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3789 },
4e7d34a6 3790
1ceb70f8 3791 /* PREFIX_0F59 */
c608c12e 3792 {
507bd325
L
3793 { "mulps", { XM, EXx }, PREFIX_OPCODE },
3794 { "mulss", { XM, EXd }, PREFIX_OPCODE },
3795 { "mulpd", { XM, EXx }, PREFIX_OPCODE },
3796 { "mulsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3797 },
4e7d34a6 3798
1ceb70f8 3799 /* PREFIX_0F5A */
041bd2e0 3800 {
507bd325
L
3801 { "cvtps2pd", { XM, EXq }, PREFIX_OPCODE },
3802 { "cvtss2sd", { XM, EXd }, PREFIX_OPCODE },
3803 { "cvtpd2ps", { XM, EXx }, PREFIX_OPCODE },
3804 { "cvtsd2ss", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3805 },
4e7d34a6 3806
1ceb70f8 3807 /* PREFIX_0F5B */
041bd2e0 3808 {
507bd325
L
3809 { "cvtdq2ps", { XM, EXx }, PREFIX_OPCODE },
3810 { "cvttps2dq", { XM, EXx }, PREFIX_OPCODE },
3811 { "cvtps2dq", { XM, EXx }, PREFIX_OPCODE },
041bd2e0 3812 },
4e7d34a6 3813
1ceb70f8 3814 /* PREFIX_0F5C */
041bd2e0 3815 {
507bd325
L
3816 { "subps", { XM, EXx }, PREFIX_OPCODE },
3817 { "subss", { XM, EXd }, PREFIX_OPCODE },
3818 { "subpd", { XM, EXx }, PREFIX_OPCODE },
3819 { "subsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3820 },
4e7d34a6 3821
1ceb70f8 3822 /* PREFIX_0F5D */
041bd2e0 3823 {
507bd325
L
3824 { "minps", { XM, EXx }, PREFIX_OPCODE },
3825 { "minss", { XM, EXd }, PREFIX_OPCODE },
3826 { "minpd", { XM, EXx }, PREFIX_OPCODE },
3827 { "minsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3828 },
4e7d34a6 3829
1ceb70f8 3830 /* PREFIX_0F5E */
041bd2e0 3831 {
507bd325
L
3832 { "divps", { XM, EXx }, PREFIX_OPCODE },
3833 { "divss", { XM, EXd }, PREFIX_OPCODE },
3834 { "divpd", { XM, EXx }, PREFIX_OPCODE },
3835 { "divsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3836 },
4e7d34a6 3837
1ceb70f8 3838 /* PREFIX_0F5F */
041bd2e0 3839 {
507bd325
L
3840 { "maxps", { XM, EXx }, PREFIX_OPCODE },
3841 { "maxss", { XM, EXd }, PREFIX_OPCODE },
3842 { "maxpd", { XM, EXx }, PREFIX_OPCODE },
3843 { "maxsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3844 },
4e7d34a6 3845
1ceb70f8 3846 /* PREFIX_0F60 */
041bd2e0 3847 {
507bd325 3848 { "punpcklbw",{ MX, EMd }, PREFIX_OPCODE },
592d1631 3849 { Bad_Opcode },
507bd325 3850 { "punpcklbw",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 3851 },
4e7d34a6 3852
1ceb70f8 3853 /* PREFIX_0F61 */
041bd2e0 3854 {
507bd325 3855 { "punpcklwd",{ MX, EMd }, PREFIX_OPCODE },
592d1631 3856 { Bad_Opcode },
507bd325 3857 { "punpcklwd",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 3858 },
4e7d34a6 3859
1ceb70f8 3860 /* PREFIX_0F62 */
041bd2e0 3861 {
507bd325 3862 { "punpckldq",{ MX, EMd }, PREFIX_OPCODE },
592d1631 3863 { Bad_Opcode },
507bd325 3864 { "punpckldq",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 3865 },
4e7d34a6 3866
1ceb70f8 3867 /* PREFIX_0F6C */
041bd2e0 3868 {
592d1631
L
3869 { Bad_Opcode },
3870 { Bad_Opcode },
507bd325 3871 { "punpcklqdq", { XM, EXx }, PREFIX_OPCODE },
0f17484f 3872 },
4e7d34a6 3873
1ceb70f8 3874 /* PREFIX_0F6D */
0f17484f 3875 {
592d1631
L
3876 { Bad_Opcode },
3877 { Bad_Opcode },
507bd325 3878 { "punpckhqdq", { XM, EXx }, PREFIX_OPCODE },
041bd2e0 3879 },
4e7d34a6 3880
1ceb70f8 3881 /* PREFIX_0F6F */
ca164297 3882 {
507bd325
L
3883 { "movq", { MX, EM }, PREFIX_OPCODE },
3884 { "movdqu", { XM, EXx }, PREFIX_OPCODE },
3885 { "movdqa", { XM, EXx }, PREFIX_OPCODE },
ca164297 3886 },
4e7d34a6 3887
1ceb70f8 3888 /* PREFIX_0F70 */
4e7d34a6 3889 {
507bd325
L
3890 { "pshufw", { MX, EM, Ib }, PREFIX_OPCODE },
3891 { "pshufhw",{ XM, EXx, Ib }, PREFIX_OPCODE },
3892 { "pshufd", { XM, EXx, Ib }, PREFIX_OPCODE },
3893 { "pshuflw",{ XM, EXx, Ib }, PREFIX_OPCODE },
4e7d34a6
L
3894 },
3895
92fddf8e
L
3896 /* PREFIX_0F73_REG_3 */
3897 {
592d1631
L
3898 { Bad_Opcode },
3899 { Bad_Opcode },
bf890a93 3900 { "psrldq", { XS, Ib }, 0 },
92fddf8e
L
3901 },
3902
3903 /* PREFIX_0F73_REG_7 */
3904 {
592d1631
L
3905 { Bad_Opcode },
3906 { Bad_Opcode },
bf890a93 3907 { "pslldq", { XS, Ib }, 0 },
92fddf8e
L
3908 },
3909
1ceb70f8 3910 /* PREFIX_0F78 */
4e7d34a6 3911 {
bf890a93 3912 {"vmread", { Em, Gm }, 0 },
592d1631 3913 { Bad_Opcode },
bf890a93
IT
3914 {"extrq", { XS, Ib, Ib }, 0 },
3915 {"insertq", { XM, XS, Ib, Ib }, 0 },
4e7d34a6
L
3916 },
3917
1ceb70f8 3918 /* PREFIX_0F79 */
4e7d34a6 3919 {
bf890a93 3920 {"vmwrite", { Gm, Em }, 0 },
592d1631 3921 { Bad_Opcode },
bf890a93
IT
3922 {"extrq", { XM, XS }, 0 },
3923 {"insertq", { XM, XS }, 0 },
4e7d34a6
L
3924 },
3925
1ceb70f8 3926 /* PREFIX_0F7C */
ca164297 3927 {
592d1631
L
3928 { Bad_Opcode },
3929 { Bad_Opcode },
507bd325
L
3930 { "haddpd", { XM, EXx }, PREFIX_OPCODE },
3931 { "haddps", { XM, EXx }, PREFIX_OPCODE },
ca164297 3932 },
4e7d34a6 3933
1ceb70f8 3934 /* PREFIX_0F7D */
ca164297 3935 {
592d1631
L
3936 { Bad_Opcode },
3937 { Bad_Opcode },
507bd325
L
3938 { "hsubpd", { XM, EXx }, PREFIX_OPCODE },
3939 { "hsubps", { XM, EXx }, PREFIX_OPCODE },
ca164297 3940 },
4e7d34a6 3941
1ceb70f8 3942 /* PREFIX_0F7E */
ca164297 3943 {
507bd325
L
3944 { "movK", { Edq, MX }, PREFIX_OPCODE },
3945 { "movq", { XM, EXq }, PREFIX_OPCODE },
3946 { "movK", { Edq, XM }, PREFIX_OPCODE },
ca164297 3947 },
4e7d34a6 3948
1ceb70f8 3949 /* PREFIX_0F7F */
ca164297 3950 {
507bd325
L
3951 { "movq", { EMS, MX }, PREFIX_OPCODE },
3952 { "movdqu", { EXxS, XM }, PREFIX_OPCODE },
3953 { "movdqa", { EXxS, XM }, PREFIX_OPCODE },
ca164297 3954 },
4e7d34a6 3955
c7b8aa3a
L
3956 /* PREFIX_0FAE_REG_0 */
3957 {
3958 { Bad_Opcode },
bf890a93 3959 { "rdfsbase", { Ev }, 0 },
c7b8aa3a
L
3960 },
3961
3962 /* PREFIX_0FAE_REG_1 */
3963 {
3964 { Bad_Opcode },
bf890a93 3965 { "rdgsbase", { Ev }, 0 },
c7b8aa3a
L
3966 },
3967
3968 /* PREFIX_0FAE_REG_2 */
3969 {
3970 { Bad_Opcode },
bf890a93 3971 { "wrfsbase", { Ev }, 0 },
c7b8aa3a
L
3972 },
3973
3974 /* PREFIX_0FAE_REG_3 */
3975 {
3976 { Bad_Opcode },
bf890a93 3977 { "wrgsbase", { Ev }, 0 },
c7b8aa3a
L
3978 },
3979
6b40c462
L
3980 /* PREFIX_MOD_0_0FAE_REG_4 */
3981 {
3982 { "xsave", { FXSAVE }, 0 },
3983 { "ptwrite%LQ", { Edq }, 0 },
3984 },
3985
3986 /* PREFIX_MOD_3_0FAE_REG_4 */
3987 {
3988 { Bad_Opcode },
3989 { "ptwrite%LQ", { Edq }, 0 },
3990 },
3991
603555e5
L
3992 /* PREFIX_MOD_0_0FAE_REG_5 */
3993 {
3994 { "xrstor", { FXSAVE }, PREFIX_OPCODE },
2234eee6
L
3995 },
3996
3997 /* PREFIX_MOD_3_0FAE_REG_5 */
3998 {
3999 { "lfence", { Skip_MODRM }, 0 },
4000 { "incsspK", { Rdq }, PREFIX_OPCODE },
603555e5
L
4001 },
4002
de89d0a3 4003 /* PREFIX_MOD_0_0FAE_REG_6 */
c5e7287a 4004 {
603555e5
L
4005 { "xsaveopt", { FXSAVE }, PREFIX_OPCODE },
4006 { "clrssbsy", { Mq }, PREFIX_OPCODE },
4007 { "clwb", { Mb }, PREFIX_OPCODE },
c5e7287a
IT
4008 },
4009
de89d0a3
IT
4010 /* PREFIX_MOD_1_0FAE_REG_6 */
4011 {
4012 { RM_TABLE (RM_0FAE_REG_6) },
4013 { "umonitor", { Eva }, PREFIX_OPCODE },
ae1d3843
L
4014 { "tpause", { Edq }, PREFIX_OPCODE },
4015 { "umwait", { Edq }, PREFIX_OPCODE },
de89d0a3
IT
4016 },
4017
963f3586
IT
4018 /* PREFIX_0FAE_REG_7 */
4019 {
bf890a93 4020 { "clflush", { Mb }, 0 },
963f3586 4021 { Bad_Opcode },
bf890a93 4022 { "clflushopt", { Mb }, 0 },
963f3586
IT
4023 },
4024
1ceb70f8 4025 /* PREFIX_0FB8 */
ca164297 4026 {
592d1631 4027 { Bad_Opcode },
bf890a93 4028 { "popcntS", { Gv, Ev }, 0 },
ca164297 4029 },
4e7d34a6 4030
f12dc422
L
4031 /* PREFIX_0FBC */
4032 {
bf890a93
IT
4033 { "bsfS", { Gv, Ev }, 0 },
4034 { "tzcntS", { Gv, Ev }, 0 },
4035 { "bsfS", { Gv, Ev }, 0 },
f12dc422
L
4036 },
4037
1ceb70f8 4038 /* PREFIX_0FBD */
050dfa73 4039 {
bf890a93
IT
4040 { "bsrS", { Gv, Ev }, 0 },
4041 { "lzcntS", { Gv, Ev }, 0 },
4042 { "bsrS", { Gv, Ev }, 0 },
050dfa73
MM
4043 },
4044
1ceb70f8 4045 /* PREFIX_0FC2 */
050dfa73 4046 {
507bd325
L
4047 { "cmpps", { XM, EXx, CMP }, PREFIX_OPCODE },
4048 { "cmpss", { XM, EXd, CMP }, PREFIX_OPCODE },
4049 { "cmppd", { XM, EXx, CMP }, PREFIX_OPCODE },
4050 { "cmpsd", { XM, EXq, CMP }, PREFIX_OPCODE },
050dfa73 4051 },
246c51aa 4052
a8484f96 4053 /* PREFIX_MOD_0_0FC3 */
4ee52178 4054 {
e1a1babd 4055 { "movntiS", { Edq, Gdq }, PREFIX_OPCODE },
4ee52178
L
4056 },
4057
f24bcbaa 4058 /* PREFIX_MOD_0_0FC7_REG_6 */
92fddf8e 4059 {
bf890a93
IT
4060 { "vmptrld",{ Mq }, 0 },
4061 { "vmxon", { Mq }, 0 },
4062 { "vmclear",{ Mq }, 0 },
92fddf8e
L
4063 },
4064
f24bcbaa
L
4065 /* PREFIX_MOD_3_0FC7_REG_6 */
4066 {
4067 { "rdrand", { Ev }, 0 },
4068 { Bad_Opcode },
4069 { "rdrand", { Ev }, 0 }
4070 },
4071
4072 /* PREFIX_MOD_3_0FC7_REG_7 */
4073 {
4074 { "rdseed", { Ev }, 0 },
8bc52696 4075 { "rdpid", { Em }, 0 },
f24bcbaa
L
4076 { "rdseed", { Ev }, 0 },
4077 },
4078
1ceb70f8 4079 /* PREFIX_0FD0 */
050dfa73 4080 {
592d1631
L
4081 { Bad_Opcode },
4082 { Bad_Opcode },
bf890a93
IT
4083 { "addsubpd", { XM, EXx }, 0 },
4084 { "addsubps", { XM, EXx }, 0 },
246c51aa 4085 },
050dfa73 4086
1ceb70f8 4087 /* PREFIX_0FD6 */
050dfa73 4088 {
592d1631 4089 { Bad_Opcode },
bf890a93
IT
4090 { "movq2dq",{ XM, MS }, 0 },
4091 { "movq", { EXqS, XM }, 0 },
4092 { "movdq2q",{ MX, XS }, 0 },
050dfa73
MM
4093 },
4094
1ceb70f8 4095 /* PREFIX_0FE6 */
7918206c 4096 {
592d1631 4097 { Bad_Opcode },
507bd325
L
4098 { "cvtdq2pd", { XM, EXq }, PREFIX_OPCODE },
4099 { "cvttpd2dq", { XM, EXx }, PREFIX_OPCODE },
4100 { "cvtpd2dq", { XM, EXx }, PREFIX_OPCODE },
7918206c 4101 },
8b38ad71 4102
1ceb70f8 4103 /* PREFIX_0FE7 */
8b38ad71 4104 {
507bd325 4105 { "movntq", { Mq, MX }, PREFIX_OPCODE },
592d1631 4106 { Bad_Opcode },
75c135a8 4107 { MOD_TABLE (MOD_0FE7_PREFIX_2) },
4e7d34a6
L
4108 },
4109
1ceb70f8 4110 /* PREFIX_0FF0 */
4e7d34a6 4111 {
592d1631
L
4112 { Bad_Opcode },
4113 { Bad_Opcode },
4114 { Bad_Opcode },
1ceb70f8 4115 { MOD_TABLE (MOD_0FF0_PREFIX_3) },
4e7d34a6
L
4116 },
4117
1ceb70f8 4118 /* PREFIX_0FF7 */
4e7d34a6 4119 {
507bd325 4120 { "maskmovq", { MX, MS }, PREFIX_OPCODE },
592d1631 4121 { Bad_Opcode },
507bd325 4122 { "maskmovdqu", { XM, XS }, PREFIX_OPCODE },
8b38ad71 4123 },
42903f7f 4124
1ceb70f8 4125 /* PREFIX_0F3810 */
42903f7f 4126 {
592d1631
L
4127 { Bad_Opcode },
4128 { Bad_Opcode },
507bd325 4129 { "pblendvb", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4130 },
4131
1ceb70f8 4132 /* PREFIX_0F3814 */
42903f7f 4133 {
592d1631
L
4134 { Bad_Opcode },
4135 { Bad_Opcode },
507bd325 4136 { "blendvps", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4137 },
4138
1ceb70f8 4139 /* PREFIX_0F3815 */
42903f7f 4140 {
592d1631
L
4141 { Bad_Opcode },
4142 { Bad_Opcode },
507bd325 4143 { "blendvpd", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4144 },
4145
1ceb70f8 4146 /* PREFIX_0F3817 */
42903f7f 4147 {
592d1631
L
4148 { Bad_Opcode },
4149 { Bad_Opcode },
507bd325 4150 { "ptest", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4151 },
4152
1ceb70f8 4153 /* PREFIX_0F3820 */
42903f7f 4154 {
592d1631
L
4155 { Bad_Opcode },
4156 { Bad_Opcode },
507bd325 4157 { "pmovsxbw", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4158 },
4159
1ceb70f8 4160 /* PREFIX_0F3821 */
42903f7f 4161 {
592d1631
L
4162 { Bad_Opcode },
4163 { Bad_Opcode },
507bd325 4164 { "pmovsxbd", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4165 },
4166
1ceb70f8 4167 /* PREFIX_0F3822 */
42903f7f 4168 {
592d1631
L
4169 { Bad_Opcode },
4170 { Bad_Opcode },
507bd325 4171 { "pmovsxbq", { XM, EXw }, PREFIX_OPCODE },
42903f7f
L
4172 },
4173
1ceb70f8 4174 /* PREFIX_0F3823 */
42903f7f 4175 {
592d1631
L
4176 { Bad_Opcode },
4177 { Bad_Opcode },
507bd325 4178 { "pmovsxwd", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4179 },
4180
1ceb70f8 4181 /* PREFIX_0F3824 */
42903f7f 4182 {
592d1631
L
4183 { Bad_Opcode },
4184 { Bad_Opcode },
507bd325 4185 { "pmovsxwq", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4186 },
4187
1ceb70f8 4188 /* PREFIX_0F3825 */
42903f7f 4189 {
592d1631
L
4190 { Bad_Opcode },
4191 { Bad_Opcode },
507bd325 4192 { "pmovsxdq", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4193 },
4194
1ceb70f8 4195 /* PREFIX_0F3828 */
42903f7f 4196 {
592d1631
L
4197 { Bad_Opcode },
4198 { Bad_Opcode },
507bd325 4199 { "pmuldq", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4200 },
4201
1ceb70f8 4202 /* PREFIX_0F3829 */
42903f7f 4203 {
592d1631
L
4204 { Bad_Opcode },
4205 { Bad_Opcode },
507bd325 4206 { "pcmpeqq", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4207 },
4208
1ceb70f8 4209 /* PREFIX_0F382A */
42903f7f 4210 {
592d1631
L
4211 { Bad_Opcode },
4212 { Bad_Opcode },
75c135a8 4213 { MOD_TABLE (MOD_0F382A_PREFIX_2) },
42903f7f
L
4214 },
4215
1ceb70f8 4216 /* PREFIX_0F382B */
42903f7f 4217 {
592d1631
L
4218 { Bad_Opcode },
4219 { Bad_Opcode },
507bd325 4220 { "packusdw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4221 },
4222
1ceb70f8 4223 /* PREFIX_0F3830 */
42903f7f 4224 {
592d1631
L
4225 { Bad_Opcode },
4226 { Bad_Opcode },
507bd325 4227 { "pmovzxbw", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4228 },
4229
1ceb70f8 4230 /* PREFIX_0F3831 */
42903f7f 4231 {
592d1631
L
4232 { Bad_Opcode },
4233 { Bad_Opcode },
507bd325 4234 { "pmovzxbd", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4235 },
4236
1ceb70f8 4237 /* PREFIX_0F3832 */
42903f7f 4238 {
592d1631
L
4239 { Bad_Opcode },
4240 { Bad_Opcode },
507bd325 4241 { "pmovzxbq", { XM, EXw }, PREFIX_OPCODE },
42903f7f
L
4242 },
4243
1ceb70f8 4244 /* PREFIX_0F3833 */
42903f7f 4245 {
592d1631
L
4246 { Bad_Opcode },
4247 { Bad_Opcode },
507bd325 4248 { "pmovzxwd", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4249 },
4250
1ceb70f8 4251 /* PREFIX_0F3834 */
42903f7f 4252 {
592d1631
L
4253 { Bad_Opcode },
4254 { Bad_Opcode },
507bd325 4255 { "pmovzxwq", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4256 },
4257
1ceb70f8 4258 /* PREFIX_0F3835 */
42903f7f 4259 {
592d1631
L
4260 { Bad_Opcode },
4261 { Bad_Opcode },
507bd325 4262 { "pmovzxdq", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4263 },
4264
1ceb70f8 4265 /* PREFIX_0F3837 */
4e7d34a6 4266 {
592d1631
L
4267 { Bad_Opcode },
4268 { Bad_Opcode },
507bd325 4269 { "pcmpgtq", { XM, EXx }, PREFIX_OPCODE },
4e7d34a6
L
4270 },
4271
1ceb70f8 4272 /* PREFIX_0F3838 */
42903f7f 4273 {
592d1631
L
4274 { Bad_Opcode },
4275 { Bad_Opcode },
507bd325 4276 { "pminsb", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4277 },
4278
1ceb70f8 4279 /* PREFIX_0F3839 */
42903f7f 4280 {
592d1631
L
4281 { Bad_Opcode },
4282 { Bad_Opcode },
507bd325 4283 { "pminsd", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4284 },
4285
1ceb70f8 4286 /* PREFIX_0F383A */
42903f7f 4287 {
592d1631
L
4288 { Bad_Opcode },
4289 { Bad_Opcode },
507bd325 4290 { "pminuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4291 },
4292
1ceb70f8 4293 /* PREFIX_0F383B */
42903f7f 4294 {
592d1631
L
4295 { Bad_Opcode },
4296 { Bad_Opcode },
507bd325 4297 { "pminud", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4298 },
4299
1ceb70f8 4300 /* PREFIX_0F383C */
42903f7f 4301 {
592d1631
L
4302 { Bad_Opcode },
4303 { Bad_Opcode },
507bd325 4304 { "pmaxsb", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4305 },
4306
1ceb70f8 4307 /* PREFIX_0F383D */
42903f7f 4308 {
592d1631
L
4309 { Bad_Opcode },
4310 { Bad_Opcode },
507bd325 4311 { "pmaxsd", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4312 },
4313
1ceb70f8 4314 /* PREFIX_0F383E */
42903f7f 4315 {
592d1631
L
4316 { Bad_Opcode },
4317 { Bad_Opcode },
507bd325 4318 { "pmaxuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4319 },
4320
1ceb70f8 4321 /* PREFIX_0F383F */
42903f7f 4322 {
592d1631
L
4323 { Bad_Opcode },
4324 { Bad_Opcode },
507bd325 4325 { "pmaxud", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4326 },
4327
1ceb70f8 4328 /* PREFIX_0F3840 */
42903f7f 4329 {
592d1631
L
4330 { Bad_Opcode },
4331 { Bad_Opcode },
507bd325 4332 { "pmulld", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4333 },
4334
1ceb70f8 4335 /* PREFIX_0F3841 */
42903f7f 4336 {
592d1631
L
4337 { Bad_Opcode },
4338 { Bad_Opcode },
507bd325 4339 { "phminposuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4340 },
4341
f1f8f695
L
4342 /* PREFIX_0F3880 */
4343 {
592d1631
L
4344 { Bad_Opcode },
4345 { Bad_Opcode },
507bd325 4346 { "invept", { Gm, Mo }, PREFIX_OPCODE },
f1f8f695
L
4347 },
4348
4349 /* PREFIX_0F3881 */
4350 {
592d1631
L
4351 { Bad_Opcode },
4352 { Bad_Opcode },
507bd325 4353 { "invvpid", { Gm, Mo }, PREFIX_OPCODE },
f1f8f695
L
4354 },
4355
6c30d220
L
4356 /* PREFIX_0F3882 */
4357 {
4358 { Bad_Opcode },
4359 { Bad_Opcode },
507bd325 4360 { "invpcid", { Gm, M }, PREFIX_OPCODE },
6c30d220
L
4361 },
4362
a0046408
L
4363 /* PREFIX_0F38C8 */
4364 {
507bd325 4365 { "sha1nexte", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4366 },
4367
4368 /* PREFIX_0F38C9 */
4369 {
507bd325 4370 { "sha1msg1", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4371 },
4372
4373 /* PREFIX_0F38CA */
4374 {
507bd325 4375 { "sha1msg2", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4376 },
4377
4378 /* PREFIX_0F38CB */
4379 {
507bd325 4380 { "sha256rnds2", { XM, EXxmm, XMM0 }, PREFIX_OPCODE },
a0046408
L
4381 },
4382
4383 /* PREFIX_0F38CC */
4384 {
507bd325 4385 { "sha256msg1", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4386 },
4387
4388 /* PREFIX_0F38CD */
4389 {
507bd325 4390 { "sha256msg2", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4391 },
4392
48521003
IT
4393 /* PREFIX_0F38CF */
4394 {
4395 { Bad_Opcode },
4396 { Bad_Opcode },
4397 { "gf2p8mulb", { XM, EXxmm }, PREFIX_OPCODE },
4398 },
4399
c0f3af97
L
4400 /* PREFIX_0F38DB */
4401 {
592d1631
L
4402 { Bad_Opcode },
4403 { Bad_Opcode },
507bd325 4404 { "aesimc", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4405 },
4406
4407 /* PREFIX_0F38DC */
4408 {
592d1631
L
4409 { Bad_Opcode },
4410 { Bad_Opcode },
507bd325 4411 { "aesenc", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4412 },
4413
4414 /* PREFIX_0F38DD */
4415 {
592d1631
L
4416 { Bad_Opcode },
4417 { Bad_Opcode },
507bd325 4418 { "aesenclast", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4419 },
4420
4421 /* PREFIX_0F38DE */
4422 {
592d1631
L
4423 { Bad_Opcode },
4424 { Bad_Opcode },
507bd325 4425 { "aesdec", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4426 },
4427
4428 /* PREFIX_0F38DF */
4429 {
592d1631
L
4430 { Bad_Opcode },
4431 { Bad_Opcode },
507bd325 4432 { "aesdeclast", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4433 },
4434
1ceb70f8 4435 /* PREFIX_0F38F0 */
4e7d34a6 4436 {
507bd325 4437 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } }, PREFIX_OPCODE },
592d1631 4438 { Bad_Opcode },
507bd325
L
4439 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } }, PREFIX_OPCODE },
4440 { "crc32", { Gdq, { CRC32_Fixup, b_mode } }, PREFIX_OPCODE },
4e7d34a6
L
4441 },
4442
1ceb70f8 4443 /* PREFIX_0F38F1 */
4e7d34a6 4444 {
507bd325 4445 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv }, PREFIX_OPCODE },
592d1631 4446 { Bad_Opcode },
507bd325
L
4447 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv }, PREFIX_OPCODE },
4448 { "crc32", { Gdq, { CRC32_Fixup, v_mode } }, PREFIX_OPCODE },
4e7d34a6
L
4449 },
4450
603555e5 4451 /* PREFIX_0F38F5 */
e2e1fcde
L
4452 {
4453 { Bad_Opcode },
603555e5
L
4454 { Bad_Opcode },
4455 { MOD_TABLE (MOD_0F38F5_PREFIX_2) },
4456 },
4457
4458 /* PREFIX_0F38F6 */
4459 {
4460 { MOD_TABLE (MOD_0F38F6_PREFIX_0) },
507bd325
L
4461 { "adoxS", { Gdq, Edq}, PREFIX_OPCODE },
4462 { "adcxS", { Gdq, Edq}, PREFIX_OPCODE },
e2e1fcde
L
4463 { Bad_Opcode },
4464 },
4465
c0a30a9f
L
4466 /* PREFIX_0F38F8 */
4467 {
4468 { Bad_Opcode },
5d79adc4 4469 { MOD_TABLE (MOD_0F38F8_PREFIX_1) },
c0a30a9f 4470 { MOD_TABLE (MOD_0F38F8_PREFIX_2) },
5d79adc4 4471 { MOD_TABLE (MOD_0F38F8_PREFIX_3) },
c0a30a9f
L
4472 },
4473
4474 /* PREFIX_0F38F9 */
4475 {
4476 { MOD_TABLE (MOD_0F38F9_PREFIX_0) },
4477 },
4478
1ceb70f8 4479 /* PREFIX_0F3A08 */
42903f7f 4480 {
592d1631
L
4481 { Bad_Opcode },
4482 { Bad_Opcode },
507bd325 4483 { "roundps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4484 },
4485
1ceb70f8 4486 /* PREFIX_0F3A09 */
42903f7f 4487 {
592d1631
L
4488 { Bad_Opcode },
4489 { Bad_Opcode },
507bd325 4490 { "roundpd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4491 },
4492
1ceb70f8 4493 /* PREFIX_0F3A0A */
42903f7f 4494 {
592d1631
L
4495 { Bad_Opcode },
4496 { Bad_Opcode },
507bd325 4497 { "roundss", { XM, EXd, Ib }, PREFIX_OPCODE },
42903f7f
L
4498 },
4499
1ceb70f8 4500 /* PREFIX_0F3A0B */
42903f7f 4501 {
592d1631
L
4502 { Bad_Opcode },
4503 { Bad_Opcode },
507bd325 4504 { "roundsd", { XM, EXq, Ib }, PREFIX_OPCODE },
42903f7f
L
4505 },
4506
1ceb70f8 4507 /* PREFIX_0F3A0C */
42903f7f 4508 {
592d1631
L
4509 { Bad_Opcode },
4510 { Bad_Opcode },
507bd325 4511 { "blendps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4512 },
4513
1ceb70f8 4514 /* PREFIX_0F3A0D */
42903f7f 4515 {
592d1631
L
4516 { Bad_Opcode },
4517 { Bad_Opcode },
507bd325 4518 { "blendpd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4519 },
4520
1ceb70f8 4521 /* PREFIX_0F3A0E */
42903f7f 4522 {
592d1631
L
4523 { Bad_Opcode },
4524 { Bad_Opcode },
507bd325 4525 { "pblendw", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4526 },
4527
1ceb70f8 4528 /* PREFIX_0F3A14 */
42903f7f 4529 {
592d1631
L
4530 { Bad_Opcode },
4531 { Bad_Opcode },
507bd325 4532 { "pextrb", { Edqb, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4533 },
4534
1ceb70f8 4535 /* PREFIX_0F3A15 */
42903f7f 4536 {
592d1631
L
4537 { Bad_Opcode },
4538 { Bad_Opcode },
507bd325 4539 { "pextrw", { Edqw, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4540 },
4541
1ceb70f8 4542 /* PREFIX_0F3A16 */
42903f7f 4543 {
592d1631
L
4544 { Bad_Opcode },
4545 { Bad_Opcode },
507bd325 4546 { "pextrK", { Edq, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4547 },
4548
1ceb70f8 4549 /* PREFIX_0F3A17 */
42903f7f 4550 {
592d1631
L
4551 { Bad_Opcode },
4552 { Bad_Opcode },
507bd325 4553 { "extractps", { Edqd, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4554 },
4555
1ceb70f8 4556 /* PREFIX_0F3A20 */
42903f7f 4557 {
592d1631
L
4558 { Bad_Opcode },
4559 { Bad_Opcode },
507bd325 4560 { "pinsrb", { XM, Edqb, Ib }, PREFIX_OPCODE },
42903f7f
L
4561 },
4562
1ceb70f8 4563 /* PREFIX_0F3A21 */
42903f7f 4564 {
592d1631
L
4565 { Bad_Opcode },
4566 { Bad_Opcode },
507bd325 4567 { "insertps", { XM, EXd, Ib }, PREFIX_OPCODE },
42903f7f
L
4568 },
4569
1ceb70f8 4570 /* PREFIX_0F3A22 */
42903f7f 4571 {
592d1631
L
4572 { Bad_Opcode },
4573 { Bad_Opcode },
507bd325 4574 { "pinsrK", { XM, Edq, Ib }, PREFIX_OPCODE },
42903f7f
L
4575 },
4576
1ceb70f8 4577 /* PREFIX_0F3A40 */
42903f7f 4578 {
592d1631
L
4579 { Bad_Opcode },
4580 { Bad_Opcode },
507bd325 4581 { "dpps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4582 },
4583
1ceb70f8 4584 /* PREFIX_0F3A41 */
42903f7f 4585 {
592d1631
L
4586 { Bad_Opcode },
4587 { Bad_Opcode },
507bd325 4588 { "dppd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4589 },
4590
1ceb70f8 4591 /* PREFIX_0F3A42 */
42903f7f 4592 {
592d1631
L
4593 { Bad_Opcode },
4594 { Bad_Opcode },
507bd325 4595 { "mpsadbw", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f 4596 },
381d071f 4597
c0f3af97
L
4598 /* PREFIX_0F3A44 */
4599 {
592d1631
L
4600 { Bad_Opcode },
4601 { Bad_Opcode },
507bd325 4602 { "pclmulqdq", { XM, EXx, PCLMUL }, PREFIX_OPCODE },
c0f3af97
L
4603 },
4604
1ceb70f8 4605 /* PREFIX_0F3A60 */
381d071f 4606 {
592d1631
L
4607 { Bad_Opcode },
4608 { Bad_Opcode },
15c7c1d8 4609 { "pcmpestrm", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, PREFIX_OPCODE },
381d071f
L
4610 },
4611
1ceb70f8 4612 /* PREFIX_0F3A61 */
381d071f 4613 {
592d1631
L
4614 { Bad_Opcode },
4615 { Bad_Opcode },
15c7c1d8 4616 { "pcmpestri", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, PREFIX_OPCODE },
381d071f
L
4617 },
4618
1ceb70f8 4619 /* PREFIX_0F3A62 */
381d071f 4620 {
592d1631
L
4621 { Bad_Opcode },
4622 { Bad_Opcode },
507bd325 4623 { "pcmpistrm", { XM, EXx, Ib }, PREFIX_OPCODE },
381d071f
L
4624 },
4625
1ceb70f8 4626 /* PREFIX_0F3A63 */
381d071f 4627 {
592d1631
L
4628 { Bad_Opcode },
4629 { Bad_Opcode },
507bd325 4630 { "pcmpistri", { XM, EXx, Ib }, PREFIX_OPCODE },
381d071f 4631 },
09a2c6cf 4632
a0046408
L
4633 /* PREFIX_0F3ACC */
4634 {
507bd325 4635 { "sha1rnds4", { XM, EXxmm, Ib }, PREFIX_OPCODE },
a0046408
L
4636 },
4637
48521003
IT
4638 /* PREFIX_0F3ACE */
4639 {
4640 { Bad_Opcode },
4641 { Bad_Opcode },
4642 { "gf2p8affineqb", { XM, EXxmm, Ib }, PREFIX_OPCODE },
4643 },
4644
4645 /* PREFIX_0F3ACF */
4646 {
4647 { Bad_Opcode },
4648 { Bad_Opcode },
4649 { "gf2p8affineinvqb", { XM, EXxmm, Ib }, PREFIX_OPCODE },
4650 },
4651
c0f3af97 4652 /* PREFIX_0F3ADF */
09a2c6cf 4653 {
592d1631
L
4654 { Bad_Opcode },
4655 { Bad_Opcode },
507bd325 4656 { "aeskeygenassist", { XM, EXx, Ib }, PREFIX_OPCODE },
09a2c6cf
L
4657 },
4658
592a252b 4659 /* PREFIX_VEX_0F10 */
09a2c6cf 4660 {
ec6f095a
L
4661 { "vmovups", { XM, EXx }, 0 },
4662 { "vmovss", { XMVexScalar, VexScalar, EXdScalar }, 0 },
4663 { "vmovupd", { XM, EXx }, 0 },
4664 { "vmovsd", { XMVexScalar, VexScalar, EXqScalar }, 0 },
09a2c6cf
L
4665 },
4666
592a252b 4667 /* PREFIX_VEX_0F11 */
09a2c6cf 4668 {
ec6f095a
L
4669 { "vmovups", { EXxS, XM }, 0 },
4670 { "vmovss", { EXdVexScalarS, VexScalar, XMScalar }, 0 },
4671 { "vmovupd", { EXxS, XM }, 0 },
4672 { "vmovsd", { EXqVexScalarS, VexScalar, XMScalar }, 0 },
09a2c6cf
L
4673 },
4674
592a252b 4675 /* PREFIX_VEX_0F12 */
09a2c6cf 4676 {
592a252b 4677 { MOD_TABLE (MOD_VEX_0F12_PREFIX_0) },
ec6f095a 4678 { "vmovsldup", { XM, EXx }, 0 },
592a252b 4679 { VEX_LEN_TABLE (VEX_LEN_0F12_P_2) },
ec6f095a 4680 { "vmovddup", { XM, EXymmq }, 0 },
09a2c6cf
L
4681 },
4682
592a252b 4683 /* PREFIX_VEX_0F16 */
09a2c6cf 4684 {
592a252b 4685 { MOD_TABLE (MOD_VEX_0F16_PREFIX_0) },
ec6f095a 4686 { "vmovshdup", { XM, EXx }, 0 },
592a252b 4687 { VEX_LEN_TABLE (VEX_LEN_0F16_P_2) },
5f754f58 4688 },
7c52e0e8 4689
592a252b 4690 /* PREFIX_VEX_0F2A */
5f754f58 4691 {
592d1631 4692 { Bad_Opcode },
2b7bcc87 4693 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Edq }, 0 },
592d1631 4694 { Bad_Opcode },
2b7bcc87 4695 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Edq }, 0 },
5f754f58 4696 },
7c52e0e8 4697
592a252b 4698 /* PREFIX_VEX_0F2C */
5f754f58 4699 {
592d1631 4700 { Bad_Opcode },
2b7bcc87 4701 { "vcvttss2si", { Gdq, EXdScalar }, 0 },
592d1631 4702 { Bad_Opcode },
2b7bcc87 4703 { "vcvttsd2si", { Gdq, EXqScalar }, 0 },
5f754f58 4704 },
7c52e0e8 4705
592a252b 4706 /* PREFIX_VEX_0F2D */
7c52e0e8 4707 {
592d1631 4708 { Bad_Opcode },
2b7bcc87 4709 { "vcvtss2si", { Gdq, EXdScalar }, 0 },
592d1631 4710 { Bad_Opcode },
2b7bcc87 4711 { "vcvtsd2si", { Gdq, EXqScalar }, 0 },
7c52e0e8
L
4712 },
4713
592a252b 4714 /* PREFIX_VEX_0F2E */
7c52e0e8 4715 {
ec6f095a 4716 { "vucomiss", { XMScalar, EXdScalar }, 0 },
592d1631 4717 { Bad_Opcode },
ec6f095a 4718 { "vucomisd", { XMScalar, EXqScalar }, 0 },
7c52e0e8
L
4719 },
4720
592a252b 4721 /* PREFIX_VEX_0F2F */
7c52e0e8 4722 {
ec6f095a 4723 { "vcomiss", { XMScalar, EXdScalar }, 0 },
592d1631 4724 { Bad_Opcode },
ec6f095a 4725 { "vcomisd", { XMScalar, EXqScalar }, 0 },
7c52e0e8
L
4726 },
4727
43234a1e
L
4728 /* PREFIX_VEX_0F41 */
4729 {
4730 { VEX_LEN_TABLE (VEX_LEN_0F41_P_0) },
1ba585e8
IT
4731 { Bad_Opcode },
4732 { VEX_LEN_TABLE (VEX_LEN_0F41_P_2) },
43234a1e
L
4733 },
4734
4735 /* PREFIX_VEX_0F42 */
4736 {
4737 { VEX_LEN_TABLE (VEX_LEN_0F42_P_0) },
1ba585e8
IT
4738 { Bad_Opcode },
4739 { VEX_LEN_TABLE (VEX_LEN_0F42_P_2) },
43234a1e
L
4740 },
4741
4742 /* PREFIX_VEX_0F44 */
4743 {
4744 { VEX_LEN_TABLE (VEX_LEN_0F44_P_0) },
1ba585e8
IT
4745 { Bad_Opcode },
4746 { VEX_LEN_TABLE (VEX_LEN_0F44_P_2) },
43234a1e
L
4747 },
4748
4749 /* PREFIX_VEX_0F45 */
4750 {
4751 { VEX_LEN_TABLE (VEX_LEN_0F45_P_0) },
1ba585e8
IT
4752 { Bad_Opcode },
4753 { VEX_LEN_TABLE (VEX_LEN_0F45_P_2) },
43234a1e
L
4754 },
4755
4756 /* PREFIX_VEX_0F46 */
4757 {
4758 { VEX_LEN_TABLE (VEX_LEN_0F46_P_0) },
1ba585e8
IT
4759 { Bad_Opcode },
4760 { VEX_LEN_TABLE (VEX_LEN_0F46_P_2) },
43234a1e
L
4761 },
4762
4763 /* PREFIX_VEX_0F47 */
4764 {
4765 { VEX_LEN_TABLE (VEX_LEN_0F47_P_0) },
1ba585e8
IT
4766 { Bad_Opcode },
4767 { VEX_LEN_TABLE (VEX_LEN_0F47_P_2) },
43234a1e
L
4768 },
4769
1ba585e8 4770 /* PREFIX_VEX_0F4A */
43234a1e 4771 {
1ba585e8 4772 { VEX_LEN_TABLE (VEX_LEN_0F4A_P_0) },
43234a1e 4773 { Bad_Opcode },
1ba585e8
IT
4774 { VEX_LEN_TABLE (VEX_LEN_0F4A_P_2) },
4775 },
4776
4777 /* PREFIX_VEX_0F4B */
4778 {
4779 { VEX_LEN_TABLE (VEX_LEN_0F4B_P_0) },
43234a1e
L
4780 { Bad_Opcode },
4781 { VEX_LEN_TABLE (VEX_LEN_0F4B_P_2) },
4782 },
4783
592a252b 4784 /* PREFIX_VEX_0F51 */
7c52e0e8 4785 {
ec6f095a
L
4786 { "vsqrtps", { XM, EXx }, 0 },
4787 { "vsqrtss", { XMScalar, VexScalar, EXdScalar }, 0 },
4788 { "vsqrtpd", { XM, EXx }, 0 },
4789 { "vsqrtsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4790 },
4791
592a252b 4792 /* PREFIX_VEX_0F52 */
7c52e0e8 4793 {
ec6f095a
L
4794 { "vrsqrtps", { XM, EXx }, 0 },
4795 { "vrsqrtss", { XMScalar, VexScalar, EXdScalar }, 0 },
7c52e0e8
L
4796 },
4797
592a252b 4798 /* PREFIX_VEX_0F53 */
7c52e0e8 4799 {
ec6f095a
L
4800 { "vrcpps", { XM, EXx }, 0 },
4801 { "vrcpss", { XMScalar, VexScalar, EXdScalar }, 0 },
7c52e0e8
L
4802 },
4803
592a252b 4804 /* PREFIX_VEX_0F58 */
7c52e0e8 4805 {
ec6f095a
L
4806 { "vaddps", { XM, Vex, EXx }, 0 },
4807 { "vaddss", { XMScalar, VexScalar, EXdScalar }, 0 },
4808 { "vaddpd", { XM, Vex, EXx }, 0 },
4809 { "vaddsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4810 },
4811
592a252b 4812 /* PREFIX_VEX_0F59 */
7c52e0e8 4813 {
ec6f095a
L
4814 { "vmulps", { XM, Vex, EXx }, 0 },
4815 { "vmulss", { XMScalar, VexScalar, EXdScalar }, 0 },
4816 { "vmulpd", { XM, Vex, EXx }, 0 },
4817 { "vmulsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4818 },
4819
592a252b 4820 /* PREFIX_VEX_0F5A */
7c52e0e8 4821 {
ec6f095a
L
4822 { "vcvtps2pd", { XM, EXxmmq }, 0 },
4823 { "vcvtss2sd", { XMScalar, VexScalar, EXdScalar }, 0 },
4824 { "vcvtpd2ps%XY",{ XMM, EXx }, 0 },
4825 { "vcvtsd2ss", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4826 },
4827
592a252b 4828 /* PREFIX_VEX_0F5B */
7c52e0e8 4829 {
ec6f095a
L
4830 { "vcvtdq2ps", { XM, EXx }, 0 },
4831 { "vcvttps2dq", { XM, EXx }, 0 },
4832 { "vcvtps2dq", { XM, EXx }, 0 },
7c52e0e8
L
4833 },
4834
592a252b 4835 /* PREFIX_VEX_0F5C */
7c52e0e8 4836 {
ec6f095a
L
4837 { "vsubps", { XM, Vex, EXx }, 0 },
4838 { "vsubss", { XMScalar, VexScalar, EXdScalar }, 0 },
4839 { "vsubpd", { XM, Vex, EXx }, 0 },
4840 { "vsubsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4841 },
4842
592a252b 4843 /* PREFIX_VEX_0F5D */
7c52e0e8 4844 {
ec6f095a
L
4845 { "vminps", { XM, Vex, EXx }, 0 },
4846 { "vminss", { XMScalar, VexScalar, EXdScalar }, 0 },
4847 { "vminpd", { XM, Vex, EXx }, 0 },
4848 { "vminsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4849 },
4850
592a252b 4851 /* PREFIX_VEX_0F5E */
7c52e0e8 4852 {
ec6f095a
L
4853 { "vdivps", { XM, Vex, EXx }, 0 },
4854 { "vdivss", { XMScalar, VexScalar, EXdScalar }, 0 },
4855 { "vdivpd", { XM, Vex, EXx }, 0 },
4856 { "vdivsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4857 },
4858
592a252b 4859 /* PREFIX_VEX_0F5F */
7c52e0e8 4860 {
ec6f095a
L
4861 { "vmaxps", { XM, Vex, EXx }, 0 },
4862 { "vmaxss", { XMScalar, VexScalar, EXdScalar }, 0 },
4863 { "vmaxpd", { XM, Vex, EXx }, 0 },
4864 { "vmaxsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4865 },
4866
592a252b 4867 /* PREFIX_VEX_0F60 */
7c52e0e8 4868 {
592d1631
L
4869 { Bad_Opcode },
4870 { Bad_Opcode },
ec6f095a 4871 { "vpunpcklbw", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4872 },
4873
592a252b 4874 /* PREFIX_VEX_0F61 */
7c52e0e8 4875 {
592d1631
L
4876 { Bad_Opcode },
4877 { Bad_Opcode },
ec6f095a 4878 { "vpunpcklwd", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4879 },
4880
592a252b 4881 /* PREFIX_VEX_0F62 */
7c52e0e8 4882 {
592d1631
L
4883 { Bad_Opcode },
4884 { Bad_Opcode },
ec6f095a 4885 { "vpunpckldq", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4886 },
4887
592a252b 4888 /* PREFIX_VEX_0F63 */
7c52e0e8 4889 {
592d1631
L
4890 { Bad_Opcode },
4891 { Bad_Opcode },
ec6f095a 4892 { "vpacksswb", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4893 },
4894
592a252b 4895 /* PREFIX_VEX_0F64 */
7c52e0e8 4896 {
592d1631
L
4897 { Bad_Opcode },
4898 { Bad_Opcode },
ec6f095a 4899 { "vpcmpgtb", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4900 },
4901
592a252b 4902 /* PREFIX_VEX_0F65 */
7c52e0e8 4903 {
592d1631
L
4904 { Bad_Opcode },
4905 { Bad_Opcode },
ec6f095a 4906 { "vpcmpgtw", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4907 },
4908
592a252b 4909 /* PREFIX_VEX_0F66 */
7c52e0e8 4910 {
592d1631
L
4911 { Bad_Opcode },
4912 { Bad_Opcode },
ec6f095a 4913 { "vpcmpgtd", { XM, Vex, EXx }, 0 },
7c52e0e8 4914 },
6439fc28 4915
592a252b 4916 /* PREFIX_VEX_0F67 */
331d2d0d 4917 {
592d1631
L
4918 { Bad_Opcode },
4919 { Bad_Opcode },
ec6f095a 4920 { "vpackuswb", { XM, Vex, EXx }, 0 },
c0f3af97
L
4921 },
4922
592a252b 4923 /* PREFIX_VEX_0F68 */
c0f3af97 4924 {
592d1631
L
4925 { Bad_Opcode },
4926 { Bad_Opcode },
ec6f095a 4927 { "vpunpckhbw", { XM, Vex, EXx }, 0 },
c0f3af97
L
4928 },
4929
592a252b 4930 /* PREFIX_VEX_0F69 */
c0f3af97 4931 {
592d1631
L
4932 { Bad_Opcode },
4933 { Bad_Opcode },
ec6f095a 4934 { "vpunpckhwd", { XM, Vex, EXx }, 0 },
c0f3af97
L
4935 },
4936
592a252b 4937 /* PREFIX_VEX_0F6A */
c0f3af97 4938 {
592d1631
L
4939 { Bad_Opcode },
4940 { Bad_Opcode },
ec6f095a 4941 { "vpunpckhdq", { XM, Vex, EXx }, 0 },
c0f3af97
L
4942 },
4943
592a252b 4944 /* PREFIX_VEX_0F6B */
c0f3af97 4945 {
592d1631
L
4946 { Bad_Opcode },
4947 { Bad_Opcode },
ec6f095a 4948 { "vpackssdw", { XM, Vex, EXx }, 0 },
c0f3af97
L
4949 },
4950
592a252b 4951 /* PREFIX_VEX_0F6C */
c0f3af97 4952 {
592d1631
L
4953 { Bad_Opcode },
4954 { Bad_Opcode },
ec6f095a 4955 { "vpunpcklqdq", { XM, Vex, EXx }, 0 },
c0f3af97
L
4956 },
4957
592a252b 4958 /* PREFIX_VEX_0F6D */
c0f3af97 4959 {
592d1631
L
4960 { Bad_Opcode },
4961 { Bad_Opcode },
ec6f095a 4962 { "vpunpckhqdq", { XM, Vex, EXx }, 0 },
c0f3af97
L
4963 },
4964
592a252b 4965 /* PREFIX_VEX_0F6E */
c0f3af97 4966 {
592d1631
L
4967 { Bad_Opcode },
4968 { Bad_Opcode },
592a252b 4969 { VEX_LEN_TABLE (VEX_LEN_0F6E_P_2) },
c0f3af97
L
4970 },
4971
592a252b 4972 /* PREFIX_VEX_0F6F */
c0f3af97 4973 {
592d1631 4974 { Bad_Opcode },
ec6f095a
L
4975 { "vmovdqu", { XM, EXx }, 0 },
4976 { "vmovdqa", { XM, EXx }, 0 },
c0f3af97
L
4977 },
4978
592a252b 4979 /* PREFIX_VEX_0F70 */
c0f3af97 4980 {
592d1631 4981 { Bad_Opcode },
ec6f095a
L
4982 { "vpshufhw", { XM, EXx, Ib }, 0 },
4983 { "vpshufd", { XM, EXx, Ib }, 0 },
4984 { "vpshuflw", { XM, EXx, Ib }, 0 },
c0f3af97
L
4985 },
4986
592a252b 4987 /* PREFIX_VEX_0F71_REG_2 */
c0f3af97 4988 {
592d1631
L
4989 { Bad_Opcode },
4990 { Bad_Opcode },
ec6f095a 4991 { "vpsrlw", { Vex, XS, Ib }, 0 },
c0f3af97
L
4992 },
4993
592a252b 4994 /* PREFIX_VEX_0F71_REG_4 */
c0f3af97 4995 {
592d1631
L
4996 { Bad_Opcode },
4997 { Bad_Opcode },
ec6f095a 4998 { "vpsraw", { Vex, XS, Ib }, 0 },
c0f3af97
L
4999 },
5000
592a252b 5001 /* PREFIX_VEX_0F71_REG_6 */
c0f3af97 5002 {
592d1631
L
5003 { Bad_Opcode },
5004 { Bad_Opcode },
ec6f095a 5005 { "vpsllw", { Vex, XS, Ib }, 0 },
c0f3af97
L
5006 },
5007
592a252b 5008 /* PREFIX_VEX_0F72_REG_2 */
c0f3af97 5009 {
592d1631
L
5010 { Bad_Opcode },
5011 { Bad_Opcode },
ec6f095a 5012 { "vpsrld", { Vex, XS, Ib }, 0 },
c0f3af97
L
5013 },
5014
592a252b 5015 /* PREFIX_VEX_0F72_REG_4 */
c0f3af97 5016 {
592d1631
L
5017 { Bad_Opcode },
5018 { Bad_Opcode },
ec6f095a 5019 { "vpsrad", { Vex, XS, Ib }, 0 },
c0f3af97
L
5020 },
5021
592a252b 5022 /* PREFIX_VEX_0F72_REG_6 */
c0f3af97 5023 {
592d1631
L
5024 { Bad_Opcode },
5025 { Bad_Opcode },
ec6f095a 5026 { "vpslld", { Vex, XS, Ib }, 0 },
c0f3af97
L
5027 },
5028
592a252b 5029 /* PREFIX_VEX_0F73_REG_2 */
c0f3af97 5030 {
592d1631
L
5031 { Bad_Opcode },
5032 { Bad_Opcode },
ec6f095a 5033 { "vpsrlq", { Vex, XS, Ib }, 0 },
c0f3af97
L
5034 },
5035
592a252b 5036 /* PREFIX_VEX_0F73_REG_3 */
c0f3af97 5037 {
592d1631
L
5038 { Bad_Opcode },
5039 { Bad_Opcode },
ec6f095a 5040 { "vpsrldq", { Vex, XS, Ib }, 0 },
c0f3af97
L
5041 },
5042
592a252b 5043 /* PREFIX_VEX_0F73_REG_6 */
c0f3af97 5044 {
592d1631
L
5045 { Bad_Opcode },
5046 { Bad_Opcode },
ec6f095a 5047 { "vpsllq", { Vex, XS, Ib }, 0 },
c0f3af97
L
5048 },
5049
592a252b 5050 /* PREFIX_VEX_0F73_REG_7 */
c0f3af97 5051 {
592d1631
L
5052 { Bad_Opcode },
5053 { Bad_Opcode },
ec6f095a 5054 { "vpslldq", { Vex, XS, Ib }, 0 },
c0f3af97
L
5055 },
5056
592a252b 5057 /* PREFIX_VEX_0F74 */
c0f3af97 5058 {
592d1631
L
5059 { Bad_Opcode },
5060 { Bad_Opcode },
ec6f095a 5061 { "vpcmpeqb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5062 },
5063
592a252b 5064 /* PREFIX_VEX_0F75 */
c0f3af97 5065 {
592d1631
L
5066 { Bad_Opcode },
5067 { Bad_Opcode },
ec6f095a 5068 { "vpcmpeqw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5069 },
5070
592a252b 5071 /* PREFIX_VEX_0F76 */
c0f3af97 5072 {
592d1631
L
5073 { Bad_Opcode },
5074 { Bad_Opcode },
ec6f095a 5075 { "vpcmpeqd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5076 },
5077
592a252b 5078 /* PREFIX_VEX_0F77 */
c0f3af97 5079 {
ec6f095a 5080 { VEX_LEN_TABLE (VEX_LEN_0F77_P_0) },
c0f3af97
L
5081 },
5082
592a252b 5083 /* PREFIX_VEX_0F7C */
c0f3af97 5084 {
592d1631
L
5085 { Bad_Opcode },
5086 { Bad_Opcode },
ec6f095a
L
5087 { "vhaddpd", { XM, Vex, EXx }, 0 },
5088 { "vhaddps", { XM, Vex, EXx }, 0 },
c0f3af97
L
5089 },
5090
592a252b 5091 /* PREFIX_VEX_0F7D */
c0f3af97 5092 {
592d1631
L
5093 { Bad_Opcode },
5094 { Bad_Opcode },
ec6f095a
L
5095 { "vhsubpd", { XM, Vex, EXx }, 0 },
5096 { "vhsubps", { XM, Vex, EXx }, 0 },
c0f3af97
L
5097 },
5098
592a252b 5099 /* PREFIX_VEX_0F7E */
c0f3af97 5100 {
592d1631 5101 { Bad_Opcode },
592a252b
L
5102 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_1) },
5103 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_2) },
c0f3af97
L
5104 },
5105
592a252b 5106 /* PREFIX_VEX_0F7F */
c0f3af97 5107 {
592d1631 5108 { Bad_Opcode },
ec6f095a
L
5109 { "vmovdqu", { EXxS, XM }, 0 },
5110 { "vmovdqa", { EXxS, XM }, 0 },
c0f3af97
L
5111 },
5112
43234a1e
L
5113 /* PREFIX_VEX_0F90 */
5114 {
5115 { VEX_LEN_TABLE (VEX_LEN_0F90_P_0) },
1ba585e8
IT
5116 { Bad_Opcode },
5117 { VEX_LEN_TABLE (VEX_LEN_0F90_P_2) },
43234a1e
L
5118 },
5119
5120 /* PREFIX_VEX_0F91 */
5121 {
5122 { VEX_LEN_TABLE (VEX_LEN_0F91_P_0) },
1ba585e8
IT
5123 { Bad_Opcode },
5124 { VEX_LEN_TABLE (VEX_LEN_0F91_P_2) },
43234a1e
L
5125 },
5126
5127 /* PREFIX_VEX_0F92 */
5128 {
5129 { VEX_LEN_TABLE (VEX_LEN_0F92_P_0) },
1ba585e8 5130 { Bad_Opcode },
90a915bf 5131 { VEX_LEN_TABLE (VEX_LEN_0F92_P_2) },
1ba585e8 5132 { VEX_LEN_TABLE (VEX_LEN_0F92_P_3) },
43234a1e
L
5133 },
5134
5135 /* PREFIX_VEX_0F93 */
5136 {
5137 { VEX_LEN_TABLE (VEX_LEN_0F93_P_0) },
1ba585e8 5138 { Bad_Opcode },
90a915bf 5139 { VEX_LEN_TABLE (VEX_LEN_0F93_P_2) },
1ba585e8 5140 { VEX_LEN_TABLE (VEX_LEN_0F93_P_3) },
43234a1e
L
5141 },
5142
5143 /* PREFIX_VEX_0F98 */
5144 {
5145 { VEX_LEN_TABLE (VEX_LEN_0F98_P_0) },
1ba585e8
IT
5146 { Bad_Opcode },
5147 { VEX_LEN_TABLE (VEX_LEN_0F98_P_2) },
5148 },
5149
5150 /* PREFIX_VEX_0F99 */
5151 {
5152 { VEX_LEN_TABLE (VEX_LEN_0F99_P_0) },
5153 { Bad_Opcode },
5154 { VEX_LEN_TABLE (VEX_LEN_0F99_P_2) },
43234a1e
L
5155 },
5156
592a252b 5157 /* PREFIX_VEX_0FC2 */
c0f3af97 5158 {
ec6f095a
L
5159 { "vcmpps", { XM, Vex, EXx, VCMP }, 0 },
5160 { "vcmpss", { XMScalar, VexScalar, EXdScalar, VCMP }, 0 },
5161 { "vcmppd", { XM, Vex, EXx, VCMP }, 0 },
5162 { "vcmpsd", { XMScalar, VexScalar, EXqScalar, VCMP }, 0 },
c0f3af97
L
5163 },
5164
592a252b 5165 /* PREFIX_VEX_0FC4 */
c0f3af97 5166 {
592d1631
L
5167 { Bad_Opcode },
5168 { Bad_Opcode },
592a252b 5169 { VEX_LEN_TABLE (VEX_LEN_0FC4_P_2) },
c0f3af97
L
5170 },
5171
592a252b 5172 /* PREFIX_VEX_0FC5 */
c0f3af97 5173 {
592d1631
L
5174 { Bad_Opcode },
5175 { Bad_Opcode },
592a252b 5176 { VEX_LEN_TABLE (VEX_LEN_0FC5_P_2) },
c0f3af97
L
5177 },
5178
592a252b 5179 /* PREFIX_VEX_0FD0 */
c0f3af97 5180 {
592d1631
L
5181 { Bad_Opcode },
5182 { Bad_Opcode },
ec6f095a
L
5183 { "vaddsubpd", { XM, Vex, EXx }, 0 },
5184 { "vaddsubps", { XM, Vex, EXx }, 0 },
c0f3af97
L
5185 },
5186
592a252b 5187 /* PREFIX_VEX_0FD1 */
c0f3af97 5188 {
592d1631
L
5189 { Bad_Opcode },
5190 { Bad_Opcode },
ec6f095a 5191 { "vpsrlw", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5192 },
5193
592a252b 5194 /* PREFIX_VEX_0FD2 */
c0f3af97 5195 {
592d1631
L
5196 { Bad_Opcode },
5197 { Bad_Opcode },
ec6f095a 5198 { "vpsrld", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5199 },
5200
592a252b 5201 /* PREFIX_VEX_0FD3 */
c0f3af97 5202 {
592d1631
L
5203 { Bad_Opcode },
5204 { Bad_Opcode },
ec6f095a 5205 { "vpsrlq", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5206 },
5207
592a252b 5208 /* PREFIX_VEX_0FD4 */
c0f3af97 5209 {
592d1631
L
5210 { Bad_Opcode },
5211 { Bad_Opcode },
ec6f095a 5212 { "vpaddq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5213 },
5214
592a252b 5215 /* PREFIX_VEX_0FD5 */
c0f3af97 5216 {
592d1631
L
5217 { Bad_Opcode },
5218 { Bad_Opcode },
ec6f095a 5219 { "vpmullw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5220 },
5221
592a252b 5222 /* PREFIX_VEX_0FD6 */
c0f3af97 5223 {
592d1631
L
5224 { Bad_Opcode },
5225 { Bad_Opcode },
592a252b 5226 { VEX_LEN_TABLE (VEX_LEN_0FD6_P_2) },
c0f3af97
L
5227 },
5228
592a252b 5229 /* PREFIX_VEX_0FD7 */
c0f3af97 5230 {
592d1631
L
5231 { Bad_Opcode },
5232 { Bad_Opcode },
592a252b 5233 { MOD_TABLE (MOD_VEX_0FD7_PREFIX_2) },
c0f3af97
L
5234 },
5235
592a252b 5236 /* PREFIX_VEX_0FD8 */
c0f3af97 5237 {
592d1631
L
5238 { Bad_Opcode },
5239 { Bad_Opcode },
ec6f095a 5240 { "vpsubusb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5241 },
5242
592a252b 5243 /* PREFIX_VEX_0FD9 */
c0f3af97 5244 {
592d1631
L
5245 { Bad_Opcode },
5246 { Bad_Opcode },
ec6f095a 5247 { "vpsubusw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5248 },
5249
592a252b 5250 /* PREFIX_VEX_0FDA */
c0f3af97 5251 {
592d1631
L
5252 { Bad_Opcode },
5253 { Bad_Opcode },
ec6f095a 5254 { "vpminub", { XM, Vex, EXx }, 0 },
c0f3af97
L
5255 },
5256
592a252b 5257 /* PREFIX_VEX_0FDB */
c0f3af97 5258 {
592d1631
L
5259 { Bad_Opcode },
5260 { Bad_Opcode },
ec6f095a 5261 { "vpand", { XM, Vex, EXx }, 0 },
c0f3af97
L
5262 },
5263
592a252b 5264 /* PREFIX_VEX_0FDC */
c0f3af97 5265 {
592d1631
L
5266 { Bad_Opcode },
5267 { Bad_Opcode },
ec6f095a 5268 { "vpaddusb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5269 },
5270
592a252b 5271 /* PREFIX_VEX_0FDD */
c0f3af97 5272 {
592d1631
L
5273 { Bad_Opcode },
5274 { Bad_Opcode },
ec6f095a 5275 { "vpaddusw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5276 },
5277
592a252b 5278 /* PREFIX_VEX_0FDE */
c0f3af97 5279 {
592d1631
L
5280 { Bad_Opcode },
5281 { Bad_Opcode },
ec6f095a 5282 { "vpmaxub", { XM, Vex, EXx }, 0 },
c0f3af97
L
5283 },
5284
592a252b 5285 /* PREFIX_VEX_0FDF */
c0f3af97 5286 {
592d1631
L
5287 { Bad_Opcode },
5288 { Bad_Opcode },
ec6f095a 5289 { "vpandn", { XM, Vex, EXx }, 0 },
c0f3af97
L
5290 },
5291
592a252b 5292 /* PREFIX_VEX_0FE0 */
c0f3af97 5293 {
592d1631
L
5294 { Bad_Opcode },
5295 { Bad_Opcode },
ec6f095a 5296 { "vpavgb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5297 },
5298
592a252b 5299 /* PREFIX_VEX_0FE1 */
c0f3af97 5300 {
592d1631
L
5301 { Bad_Opcode },
5302 { Bad_Opcode },
ec6f095a 5303 { "vpsraw", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5304 },
5305
592a252b 5306 /* PREFIX_VEX_0FE2 */
c0f3af97 5307 {
592d1631
L
5308 { Bad_Opcode },
5309 { Bad_Opcode },
ec6f095a 5310 { "vpsrad", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5311 },
5312
592a252b 5313 /* PREFIX_VEX_0FE3 */
c0f3af97 5314 {
592d1631
L
5315 { Bad_Opcode },
5316 { Bad_Opcode },
ec6f095a 5317 { "vpavgw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5318 },
5319
592a252b 5320 /* PREFIX_VEX_0FE4 */
c0f3af97 5321 {
592d1631
L
5322 { Bad_Opcode },
5323 { Bad_Opcode },
ec6f095a 5324 { "vpmulhuw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5325 },
5326
592a252b 5327 /* PREFIX_VEX_0FE5 */
c0f3af97 5328 {
592d1631
L
5329 { Bad_Opcode },
5330 { Bad_Opcode },
ec6f095a 5331 { "vpmulhw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5332 },
5333
592a252b 5334 /* PREFIX_VEX_0FE6 */
c0f3af97 5335 {
592d1631 5336 { Bad_Opcode },
ec6f095a
L
5337 { "vcvtdq2pd", { XM, EXxmmq }, 0 },
5338 { "vcvttpd2dq%XY", { XMM, EXx }, 0 },
5339 { "vcvtpd2dq%XY", { XMM, EXx }, 0 },
c0f3af97
L
5340 },
5341
592a252b 5342 /* PREFIX_VEX_0FE7 */
c0f3af97 5343 {
592d1631
L
5344 { Bad_Opcode },
5345 { Bad_Opcode },
592a252b 5346 { MOD_TABLE (MOD_VEX_0FE7_PREFIX_2) },
c0f3af97
L
5347 },
5348
592a252b 5349 /* PREFIX_VEX_0FE8 */
c0f3af97 5350 {
592d1631
L
5351 { Bad_Opcode },
5352 { Bad_Opcode },
ec6f095a 5353 { "vpsubsb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5354 },
5355
592a252b 5356 /* PREFIX_VEX_0FE9 */
c0f3af97 5357 {
592d1631
L
5358 { Bad_Opcode },
5359 { Bad_Opcode },
ec6f095a 5360 { "vpsubsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5361 },
5362
592a252b 5363 /* PREFIX_VEX_0FEA */
c0f3af97 5364 {
592d1631
L
5365 { Bad_Opcode },
5366 { Bad_Opcode },
ec6f095a 5367 { "vpminsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5368 },
5369
592a252b 5370 /* PREFIX_VEX_0FEB */
c0f3af97 5371 {
592d1631
L
5372 { Bad_Opcode },
5373 { Bad_Opcode },
ec6f095a 5374 { "vpor", { XM, Vex, EXx }, 0 },
c0f3af97
L
5375 },
5376
592a252b 5377 /* PREFIX_VEX_0FEC */
c0f3af97 5378 {
592d1631
L
5379 { Bad_Opcode },
5380 { Bad_Opcode },
ec6f095a 5381 { "vpaddsb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5382 },
5383
592a252b 5384 /* PREFIX_VEX_0FED */
c0f3af97 5385 {
592d1631
L
5386 { Bad_Opcode },
5387 { Bad_Opcode },
ec6f095a 5388 { "vpaddsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5389 },
5390
592a252b 5391 /* PREFIX_VEX_0FEE */
c0f3af97 5392 {
592d1631
L
5393 { Bad_Opcode },
5394 { Bad_Opcode },
ec6f095a 5395 { "vpmaxsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5396 },
5397
592a252b 5398 /* PREFIX_VEX_0FEF */
c0f3af97 5399 {
592d1631
L
5400 { Bad_Opcode },
5401 { Bad_Opcode },
ec6f095a 5402 { "vpxor", { XM, Vex, EXx }, 0 },
c0f3af97
L
5403 },
5404
592a252b 5405 /* PREFIX_VEX_0FF0 */
c0f3af97 5406 {
592d1631
L
5407 { Bad_Opcode },
5408 { Bad_Opcode },
5409 { Bad_Opcode },
592a252b 5410 { MOD_TABLE (MOD_VEX_0FF0_PREFIX_3) },
c0f3af97
L
5411 },
5412
592a252b 5413 /* PREFIX_VEX_0FF1 */
c0f3af97 5414 {
592d1631
L
5415 { Bad_Opcode },
5416 { Bad_Opcode },
ec6f095a 5417 { "vpsllw", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5418 },
5419
592a252b 5420 /* PREFIX_VEX_0FF2 */
c0f3af97 5421 {
592d1631
L
5422 { Bad_Opcode },
5423 { Bad_Opcode },
ec6f095a 5424 { "vpslld", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5425 },
5426
592a252b 5427 /* PREFIX_VEX_0FF3 */
c0f3af97 5428 {
592d1631
L
5429 { Bad_Opcode },
5430 { Bad_Opcode },
ec6f095a 5431 { "vpsllq", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5432 },
5433
592a252b 5434 /* PREFIX_VEX_0FF4 */
c0f3af97 5435 {
592d1631
L
5436 { Bad_Opcode },
5437 { Bad_Opcode },
ec6f095a 5438 { "vpmuludq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5439 },
5440
592a252b 5441 /* PREFIX_VEX_0FF5 */
c0f3af97 5442 {
592d1631
L
5443 { Bad_Opcode },
5444 { Bad_Opcode },
ec6f095a 5445 { "vpmaddwd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5446 },
5447
592a252b 5448 /* PREFIX_VEX_0FF6 */
c0f3af97 5449 {
592d1631
L
5450 { Bad_Opcode },
5451 { Bad_Opcode },
ec6f095a 5452 { "vpsadbw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5453 },
5454
592a252b 5455 /* PREFIX_VEX_0FF7 */
c0f3af97 5456 {
592d1631
L
5457 { Bad_Opcode },
5458 { Bad_Opcode },
592a252b 5459 { VEX_LEN_TABLE (VEX_LEN_0FF7_P_2) },
c0f3af97
L
5460 },
5461
592a252b 5462 /* PREFIX_VEX_0FF8 */
c0f3af97 5463 {
592d1631
L
5464 { Bad_Opcode },
5465 { Bad_Opcode },
ec6f095a 5466 { "vpsubb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5467 },
5468
592a252b 5469 /* PREFIX_VEX_0FF9 */
c0f3af97 5470 {
592d1631
L
5471 { Bad_Opcode },
5472 { Bad_Opcode },
ec6f095a 5473 { "vpsubw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5474 },
5475
592a252b 5476 /* PREFIX_VEX_0FFA */
c0f3af97 5477 {
592d1631
L
5478 { Bad_Opcode },
5479 { Bad_Opcode },
ec6f095a 5480 { "vpsubd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5481 },
5482
592a252b 5483 /* PREFIX_VEX_0FFB */
c0f3af97 5484 {
592d1631
L
5485 { Bad_Opcode },
5486 { Bad_Opcode },
ec6f095a 5487 { "vpsubq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5488 },
5489
592a252b 5490 /* PREFIX_VEX_0FFC */
c0f3af97 5491 {
592d1631
L
5492 { Bad_Opcode },
5493 { Bad_Opcode },
ec6f095a 5494 { "vpaddb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5495 },
5496
592a252b 5497 /* PREFIX_VEX_0FFD */
c0f3af97 5498 {
592d1631
L
5499 { Bad_Opcode },
5500 { Bad_Opcode },
ec6f095a 5501 { "vpaddw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5502 },
5503
592a252b 5504 /* PREFIX_VEX_0FFE */
c0f3af97 5505 {
592d1631
L
5506 { Bad_Opcode },
5507 { Bad_Opcode },
ec6f095a 5508 { "vpaddd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5509 },
5510
592a252b 5511 /* PREFIX_VEX_0F3800 */
c0f3af97 5512 {
592d1631
L
5513 { Bad_Opcode },
5514 { Bad_Opcode },
ec6f095a 5515 { "vpshufb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5516 },
5517
592a252b 5518 /* PREFIX_VEX_0F3801 */
c0f3af97 5519 {
592d1631
L
5520 { Bad_Opcode },
5521 { Bad_Opcode },
ec6f095a 5522 { "vphaddw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5523 },
5524
592a252b 5525 /* PREFIX_VEX_0F3802 */
c0f3af97 5526 {
592d1631
L
5527 { Bad_Opcode },
5528 { Bad_Opcode },
ec6f095a 5529 { "vphaddd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5530 },
5531
592a252b 5532 /* PREFIX_VEX_0F3803 */
c0f3af97 5533 {
592d1631
L
5534 { Bad_Opcode },
5535 { Bad_Opcode },
ec6f095a 5536 { "vphaddsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5537 },
5538
592a252b 5539 /* PREFIX_VEX_0F3804 */
c0f3af97 5540 {
592d1631
L
5541 { Bad_Opcode },
5542 { Bad_Opcode },
ec6f095a 5543 { "vpmaddubsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5544 },
5545
592a252b 5546 /* PREFIX_VEX_0F3805 */
c0f3af97 5547 {
592d1631
L
5548 { Bad_Opcode },
5549 { Bad_Opcode },
ec6f095a 5550 { "vphsubw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5551 },
5552
592a252b 5553 /* PREFIX_VEX_0F3806 */
c0f3af97 5554 {
592d1631
L
5555 { Bad_Opcode },
5556 { Bad_Opcode },
ec6f095a 5557 { "vphsubd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5558 },
5559
592a252b 5560 /* PREFIX_VEX_0F3807 */
c0f3af97 5561 {
592d1631
L
5562 { Bad_Opcode },
5563 { Bad_Opcode },
ec6f095a 5564 { "vphsubsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5565 },
5566
592a252b 5567 /* PREFIX_VEX_0F3808 */
c0f3af97 5568 {
592d1631
L
5569 { Bad_Opcode },
5570 { Bad_Opcode },
ec6f095a 5571 { "vpsignb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5572 },
5573
592a252b 5574 /* PREFIX_VEX_0F3809 */
c0f3af97 5575 {
592d1631
L
5576 { Bad_Opcode },
5577 { Bad_Opcode },
ec6f095a 5578 { "vpsignw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5579 },
5580
592a252b 5581 /* PREFIX_VEX_0F380A */
c0f3af97 5582 {
592d1631
L
5583 { Bad_Opcode },
5584 { Bad_Opcode },
ec6f095a 5585 { "vpsignd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5586 },
5587
592a252b 5588 /* PREFIX_VEX_0F380B */
c0f3af97 5589 {
592d1631
L
5590 { Bad_Opcode },
5591 { Bad_Opcode },
ec6f095a 5592 { "vpmulhrsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5593 },
5594
592a252b 5595 /* PREFIX_VEX_0F380C */
c0f3af97 5596 {
592d1631
L
5597 { Bad_Opcode },
5598 { Bad_Opcode },
592a252b 5599 { VEX_W_TABLE (VEX_W_0F380C_P_2) },
c0f3af97
L
5600 },
5601
592a252b 5602 /* PREFIX_VEX_0F380D */
c0f3af97 5603 {
592d1631
L
5604 { Bad_Opcode },
5605 { Bad_Opcode },
592a252b 5606 { VEX_W_TABLE (VEX_W_0F380D_P_2) },
c0f3af97
L
5607 },
5608
592a252b 5609 /* PREFIX_VEX_0F380E */
c0f3af97 5610 {
592d1631
L
5611 { Bad_Opcode },
5612 { Bad_Opcode },
592a252b 5613 { VEX_W_TABLE (VEX_W_0F380E_P_2) },
c0f3af97
L
5614 },
5615
592a252b 5616 /* PREFIX_VEX_0F380F */
c0f3af97 5617 {
592d1631
L
5618 { Bad_Opcode },
5619 { Bad_Opcode },
592a252b 5620 { VEX_W_TABLE (VEX_W_0F380F_P_2) },
c0f3af97
L
5621 },
5622
592a252b 5623 /* PREFIX_VEX_0F3813 */
c7b8aa3a
L
5624 {
5625 { Bad_Opcode },
5626 { Bad_Opcode },
bf890a93 5627 { "vcvtph2ps", { XM, EXxmmq }, 0 },
c7b8aa3a
L
5628 },
5629
6c30d220
L
5630 /* PREFIX_VEX_0F3816 */
5631 {
5632 { Bad_Opcode },
5633 { Bad_Opcode },
5634 { VEX_LEN_TABLE (VEX_LEN_0F3816_P_2) },
5635 },
5636
592a252b 5637 /* PREFIX_VEX_0F3817 */
c0f3af97 5638 {
592d1631
L
5639 { Bad_Opcode },
5640 { Bad_Opcode },
ec6f095a 5641 { "vptest", { XM, EXx }, 0 },
c0f3af97
L
5642 },
5643
592a252b 5644 /* PREFIX_VEX_0F3818 */
c0f3af97 5645 {
592d1631
L
5646 { Bad_Opcode },
5647 { Bad_Opcode },
6c30d220 5648 { VEX_W_TABLE (VEX_W_0F3818_P_2) },
c0f3af97
L
5649 },
5650
592a252b 5651 /* PREFIX_VEX_0F3819 */
c0f3af97 5652 {
592d1631
L
5653 { Bad_Opcode },
5654 { Bad_Opcode },
6c30d220 5655 { VEX_LEN_TABLE (VEX_LEN_0F3819_P_2) },
c0f3af97
L
5656 },
5657
592a252b 5658 /* PREFIX_VEX_0F381A */
c0f3af97 5659 {
592d1631
L
5660 { Bad_Opcode },
5661 { Bad_Opcode },
592a252b 5662 { MOD_TABLE (MOD_VEX_0F381A_PREFIX_2) },
c0f3af97
L
5663 },
5664
592a252b 5665 /* PREFIX_VEX_0F381C */
c0f3af97 5666 {
592d1631
L
5667 { Bad_Opcode },
5668 { Bad_Opcode },
ec6f095a 5669 { "vpabsb", { XM, EXx }, 0 },
c0f3af97
L
5670 },
5671
592a252b 5672 /* PREFIX_VEX_0F381D */
c0f3af97 5673 {
592d1631
L
5674 { Bad_Opcode },
5675 { Bad_Opcode },
ec6f095a 5676 { "vpabsw", { XM, EXx }, 0 },
c0f3af97
L
5677 },
5678
592a252b 5679 /* PREFIX_VEX_0F381E */
c0f3af97 5680 {
592d1631
L
5681 { Bad_Opcode },
5682 { Bad_Opcode },
ec6f095a 5683 { "vpabsd", { XM, EXx }, 0 },
c0f3af97
L
5684 },
5685
592a252b 5686 /* PREFIX_VEX_0F3820 */
c0f3af97 5687 {
592d1631
L
5688 { Bad_Opcode },
5689 { Bad_Opcode },
ec6f095a 5690 { "vpmovsxbw", { XM, EXxmmq }, 0 },
c0f3af97
L
5691 },
5692
592a252b 5693 /* PREFIX_VEX_0F3821 */
c0f3af97 5694 {
592d1631
L
5695 { Bad_Opcode },
5696 { Bad_Opcode },
ec6f095a 5697 { "vpmovsxbd", { XM, EXxmmqd }, 0 },
c0f3af97
L
5698 },
5699
592a252b 5700 /* PREFIX_VEX_0F3822 */
c0f3af97 5701 {
592d1631
L
5702 { Bad_Opcode },
5703 { Bad_Opcode },
ec6f095a 5704 { "vpmovsxbq", { XM, EXxmmdw }, 0 },
c0f3af97
L
5705 },
5706
592a252b 5707 /* PREFIX_VEX_0F3823 */
c0f3af97 5708 {
592d1631
L
5709 { Bad_Opcode },
5710 { Bad_Opcode },
ec6f095a 5711 { "vpmovsxwd", { XM, EXxmmq }, 0 },
c0f3af97
L
5712 },
5713
592a252b 5714 /* PREFIX_VEX_0F3824 */
c0f3af97 5715 {
592d1631
L
5716 { Bad_Opcode },
5717 { Bad_Opcode },
ec6f095a 5718 { "vpmovsxwq", { XM, EXxmmqd }, 0 },
c0f3af97
L
5719 },
5720
592a252b 5721 /* PREFIX_VEX_0F3825 */
c0f3af97 5722 {
592d1631
L
5723 { Bad_Opcode },
5724 { Bad_Opcode },
ec6f095a 5725 { "vpmovsxdq", { XM, EXxmmq }, 0 },
c0f3af97
L
5726 },
5727
592a252b 5728 /* PREFIX_VEX_0F3828 */
c0f3af97 5729 {
592d1631
L
5730 { Bad_Opcode },
5731 { Bad_Opcode },
ec6f095a 5732 { "vpmuldq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5733 },
5734
592a252b 5735 /* PREFIX_VEX_0F3829 */
c0f3af97 5736 {
592d1631
L
5737 { Bad_Opcode },
5738 { Bad_Opcode },
ec6f095a 5739 { "vpcmpeqq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5740 },
5741
592a252b 5742 /* PREFIX_VEX_0F382A */
c0f3af97 5743 {
592d1631
L
5744 { Bad_Opcode },
5745 { Bad_Opcode },
592a252b 5746 { MOD_TABLE (MOD_VEX_0F382A_PREFIX_2) },
c0f3af97
L
5747 },
5748
592a252b 5749 /* PREFIX_VEX_0F382B */
c0f3af97 5750 {
592d1631
L
5751 { Bad_Opcode },
5752 { Bad_Opcode },
ec6f095a 5753 { "vpackusdw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5754 },
5755
592a252b 5756 /* PREFIX_VEX_0F382C */
c0f3af97 5757 {
592d1631
L
5758 { Bad_Opcode },
5759 { Bad_Opcode },
592a252b 5760 { MOD_TABLE (MOD_VEX_0F382C_PREFIX_2) },
c0f3af97
L
5761 },
5762
592a252b 5763 /* PREFIX_VEX_0F382D */
c0f3af97 5764 {
592d1631
L
5765 { Bad_Opcode },
5766 { Bad_Opcode },
592a252b 5767 { MOD_TABLE (MOD_VEX_0F382D_PREFIX_2) },
c0f3af97
L
5768 },
5769
592a252b 5770 /* PREFIX_VEX_0F382E */
c0f3af97 5771 {
592d1631
L
5772 { Bad_Opcode },
5773 { Bad_Opcode },
592a252b 5774 { MOD_TABLE (MOD_VEX_0F382E_PREFIX_2) },
c0f3af97
L
5775 },
5776
592a252b 5777 /* PREFIX_VEX_0F382F */
c0f3af97 5778 {
592d1631
L
5779 { Bad_Opcode },
5780 { Bad_Opcode },
592a252b 5781 { MOD_TABLE (MOD_VEX_0F382F_PREFIX_2) },
c0f3af97
L
5782 },
5783
592a252b 5784 /* PREFIX_VEX_0F3830 */
c0f3af97 5785 {
592d1631
L
5786 { Bad_Opcode },
5787 { Bad_Opcode },
ec6f095a 5788 { "vpmovzxbw", { XM, EXxmmq }, 0 },
c0f3af97
L
5789 },
5790
592a252b 5791 /* PREFIX_VEX_0F3831 */
c0f3af97 5792 {
592d1631
L
5793 { Bad_Opcode },
5794 { Bad_Opcode },
ec6f095a 5795 { "vpmovzxbd", { XM, EXxmmqd }, 0 },
c0f3af97
L
5796 },
5797
592a252b 5798 /* PREFIX_VEX_0F3832 */
c0f3af97 5799 {
592d1631
L
5800 { Bad_Opcode },
5801 { Bad_Opcode },
ec6f095a 5802 { "vpmovzxbq", { XM, EXxmmdw }, 0 },
c0f3af97
L
5803 },
5804
592a252b 5805 /* PREFIX_VEX_0F3833 */
c0f3af97 5806 {
592d1631
L
5807 { Bad_Opcode },
5808 { Bad_Opcode },
ec6f095a 5809 { "vpmovzxwd", { XM, EXxmmq }, 0 },
c0f3af97
L
5810 },
5811
592a252b 5812 /* PREFIX_VEX_0F3834 */
c0f3af97 5813 {
592d1631
L
5814 { Bad_Opcode },
5815 { Bad_Opcode },
ec6f095a 5816 { "vpmovzxwq", { XM, EXxmmqd }, 0 },
c0f3af97
L
5817 },
5818
592a252b 5819 /* PREFIX_VEX_0F3835 */
c0f3af97 5820 {
592d1631
L
5821 { Bad_Opcode },
5822 { Bad_Opcode },
ec6f095a 5823 { "vpmovzxdq", { XM, EXxmmq }, 0 },
6c30d220
L
5824 },
5825
5826 /* PREFIX_VEX_0F3836 */
5827 {
5828 { Bad_Opcode },
5829 { Bad_Opcode },
5830 { VEX_LEN_TABLE (VEX_LEN_0F3836_P_2) },
c0f3af97
L
5831 },
5832
592a252b 5833 /* PREFIX_VEX_0F3837 */
c0f3af97 5834 {
592d1631
L
5835 { Bad_Opcode },
5836 { Bad_Opcode },
ec6f095a 5837 { "vpcmpgtq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5838 },
5839
592a252b 5840 /* PREFIX_VEX_0F3838 */
c0f3af97 5841 {
592d1631
L
5842 { Bad_Opcode },
5843 { Bad_Opcode },
ec6f095a 5844 { "vpminsb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5845 },
5846
592a252b 5847 /* PREFIX_VEX_0F3839 */
c0f3af97 5848 {
592d1631
L
5849 { Bad_Opcode },
5850 { Bad_Opcode },
ec6f095a 5851 { "vpminsd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5852 },
5853
592a252b 5854 /* PREFIX_VEX_0F383A */
c0f3af97 5855 {
592d1631
L
5856 { Bad_Opcode },
5857 { Bad_Opcode },
ec6f095a 5858 { "vpminuw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5859 },
5860
592a252b 5861 /* PREFIX_VEX_0F383B */
c0f3af97 5862 {
592d1631
L
5863 { Bad_Opcode },
5864 { Bad_Opcode },
ec6f095a 5865 { "vpminud", { XM, Vex, EXx }, 0 },
c0f3af97
L
5866 },
5867
592a252b 5868 /* PREFIX_VEX_0F383C */
c0f3af97 5869 {
592d1631
L
5870 { Bad_Opcode },
5871 { Bad_Opcode },
ec6f095a 5872 { "vpmaxsb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5873 },
5874
592a252b 5875 /* PREFIX_VEX_0F383D */
c0f3af97 5876 {
592d1631
L
5877 { Bad_Opcode },
5878 { Bad_Opcode },
ec6f095a 5879 { "vpmaxsd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5880 },
5881
592a252b 5882 /* PREFIX_VEX_0F383E */
c0f3af97 5883 {
592d1631
L
5884 { Bad_Opcode },
5885 { Bad_Opcode },
ec6f095a 5886 { "vpmaxuw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5887 },
5888
592a252b 5889 /* PREFIX_VEX_0F383F */
c0f3af97 5890 {
592d1631
L
5891 { Bad_Opcode },
5892 { Bad_Opcode },
ec6f095a 5893 { "vpmaxud", { XM, Vex, EXx }, 0 },
c0f3af97
L
5894 },
5895
592a252b 5896 /* PREFIX_VEX_0F3840 */
c0f3af97 5897 {
592d1631
L
5898 { Bad_Opcode },
5899 { Bad_Opcode },
ec6f095a 5900 { "vpmulld", { XM, Vex, EXx }, 0 },
c0f3af97
L
5901 },
5902
592a252b 5903 /* PREFIX_VEX_0F3841 */
c0f3af97 5904 {
592d1631
L
5905 { Bad_Opcode },
5906 { Bad_Opcode },
592a252b 5907 { VEX_LEN_TABLE (VEX_LEN_0F3841_P_2) },
c0f3af97
L
5908 },
5909
6c30d220
L
5910 /* PREFIX_VEX_0F3845 */
5911 {
5912 { Bad_Opcode },
5913 { Bad_Opcode },
bf890a93 5914 { "vpsrlv%LW", { XM, Vex, EXx }, 0 },
6c30d220
L
5915 },
5916
5917 /* PREFIX_VEX_0F3846 */
5918 {
5919 { Bad_Opcode },
5920 { Bad_Opcode },
5921 { VEX_W_TABLE (VEX_W_0F3846_P_2) },
5922 },
5923
5924 /* PREFIX_VEX_0F3847 */
5925 {
5926 { Bad_Opcode },
5927 { Bad_Opcode },
bf890a93 5928 { "vpsllv%LW", { XM, Vex, EXx }, 0 },
6c30d220
L
5929 },
5930
5931 /* PREFIX_VEX_0F3858 */
5932 {
5933 { Bad_Opcode },
5934 { Bad_Opcode },
5935 { VEX_W_TABLE (VEX_W_0F3858_P_2) },
5936 },
5937
5938 /* PREFIX_VEX_0F3859 */
5939 {
5940 { Bad_Opcode },
5941 { Bad_Opcode },
5942 { VEX_W_TABLE (VEX_W_0F3859_P_2) },
5943 },
5944
5945 /* PREFIX_VEX_0F385A */
5946 {
5947 { Bad_Opcode },
5948 { Bad_Opcode },
5949 { MOD_TABLE (MOD_VEX_0F385A_PREFIX_2) },
5950 },
5951
5952 /* PREFIX_VEX_0F3878 */
5953 {
5954 { Bad_Opcode },
5955 { Bad_Opcode },
5956 { VEX_W_TABLE (VEX_W_0F3878_P_2) },
5957 },
5958
5959 /* PREFIX_VEX_0F3879 */
5960 {
5961 { Bad_Opcode },
5962 { Bad_Opcode },
5963 { VEX_W_TABLE (VEX_W_0F3879_P_2) },
5964 },
5965
5966 /* PREFIX_VEX_0F388C */
5967 {
5968 { Bad_Opcode },
5969 { Bad_Opcode },
f7002f42 5970 { MOD_TABLE (MOD_VEX_0F388C_PREFIX_2) },
6c30d220
L
5971 },
5972
5973 /* PREFIX_VEX_0F388E */
5974 {
5975 { Bad_Opcode },
5976 { Bad_Opcode },
f7002f42 5977 { MOD_TABLE (MOD_VEX_0F388E_PREFIX_2) },
6c30d220
L
5978 },
5979
5980 /* PREFIX_VEX_0F3890 */
5981 {
5982 { Bad_Opcode },
5983 { Bad_Opcode },
bf890a93 5984 { "vpgatherd%LW", { XM, MVexVSIBDWpX, Vex }, 0 },
6c30d220
L
5985 },
5986
5987 /* PREFIX_VEX_0F3891 */
5988 {
5989 { Bad_Opcode },
5990 { Bad_Opcode },
bf890a93 5991 { "vpgatherq%LW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ }, 0 },
6c30d220
L
5992 },
5993
5994 /* PREFIX_VEX_0F3892 */
5995 {
5996 { Bad_Opcode },
5997 { Bad_Opcode },
bf890a93 5998 { "vgatherdp%XW", { XM, MVexVSIBDWpX, Vex }, 0 },
6c30d220
L
5999 },
6000
6001 /* PREFIX_VEX_0F3893 */
6002 {
6003 { Bad_Opcode },
6004 { Bad_Opcode },
bf890a93 6005 { "vgatherqp%XW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ }, 0 },
6c30d220
L
6006 },
6007
592a252b 6008 /* PREFIX_VEX_0F3896 */
a5ff0eb2 6009 {
592d1631
L
6010 { Bad_Opcode },
6011 { Bad_Opcode },
bf890a93 6012 { "vfmaddsub132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6013 },
6014
592a252b 6015 /* PREFIX_VEX_0F3897 */
a5ff0eb2 6016 {
592d1631
L
6017 { Bad_Opcode },
6018 { Bad_Opcode },
bf890a93 6019 { "vfmsubadd132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6020 },
6021
592a252b 6022 /* PREFIX_VEX_0F3898 */
a5ff0eb2 6023 {
592d1631
L
6024 { Bad_Opcode },
6025 { Bad_Opcode },
bf890a93 6026 { "vfmadd132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6027 },
6028
592a252b 6029 /* PREFIX_VEX_0F3899 */
a5ff0eb2 6030 {
592d1631
L
6031 { Bad_Opcode },
6032 { Bad_Opcode },
bf890a93 6033 { "vfmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
a5ff0eb2
L
6034 },
6035
592a252b 6036 /* PREFIX_VEX_0F389A */
a5ff0eb2 6037 {
592d1631
L
6038 { Bad_Opcode },
6039 { Bad_Opcode },
bf890a93 6040 { "vfmsub132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6041 },
6042
592a252b 6043 /* PREFIX_VEX_0F389B */
c0f3af97 6044 {
592d1631
L
6045 { Bad_Opcode },
6046 { Bad_Opcode },
bf890a93 6047 { "vfmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6048 },
6049
592a252b 6050 /* PREFIX_VEX_0F389C */
c0f3af97 6051 {
592d1631
L
6052 { Bad_Opcode },
6053 { Bad_Opcode },
bf890a93 6054 { "vfnmadd132p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6055 },
6056
592a252b 6057 /* PREFIX_VEX_0F389D */
c0f3af97 6058 {
592d1631
L
6059 { Bad_Opcode },
6060 { Bad_Opcode },
bf890a93 6061 { "vfnmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6062 },
6063
592a252b 6064 /* PREFIX_VEX_0F389E */
c0f3af97 6065 {
592d1631
L
6066 { Bad_Opcode },
6067 { Bad_Opcode },
bf890a93 6068 { "vfnmsub132p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6069 },
6070
592a252b 6071 /* PREFIX_VEX_0F389F */
c0f3af97 6072 {
592d1631
L
6073 { Bad_Opcode },
6074 { Bad_Opcode },
bf890a93 6075 { "vfnmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6076 },
6077
592a252b 6078 /* PREFIX_VEX_0F38A6 */
c0f3af97 6079 {
592d1631
L
6080 { Bad_Opcode },
6081 { Bad_Opcode },
bf890a93 6082 { "vfmaddsub213p%XW", { XM, Vex, EXx }, 0 },
592d1631 6083 { Bad_Opcode },
c0f3af97
L
6084 },
6085
592a252b 6086 /* PREFIX_VEX_0F38A7 */
c0f3af97 6087 {
592d1631
L
6088 { Bad_Opcode },
6089 { Bad_Opcode },
bf890a93 6090 { "vfmsubadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6091 },
6092
592a252b 6093 /* PREFIX_VEX_0F38A8 */
c0f3af97 6094 {
592d1631
L
6095 { Bad_Opcode },
6096 { Bad_Opcode },
bf890a93 6097 { "vfmadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6098 },
6099
592a252b 6100 /* PREFIX_VEX_0F38A9 */
c0f3af97 6101 {
592d1631
L
6102 { Bad_Opcode },
6103 { Bad_Opcode },
bf890a93 6104 { "vfmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6105 },
6106
592a252b 6107 /* PREFIX_VEX_0F38AA */
c0f3af97 6108 {
592d1631
L
6109 { Bad_Opcode },
6110 { Bad_Opcode },
bf890a93 6111 { "vfmsub213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6112 },
6113
592a252b 6114 /* PREFIX_VEX_0F38AB */
c0f3af97 6115 {
592d1631
L
6116 { Bad_Opcode },
6117 { Bad_Opcode },
bf890a93 6118 { "vfmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6119 },
6120
592a252b 6121 /* PREFIX_VEX_0F38AC */
c0f3af97 6122 {
592d1631
L
6123 { Bad_Opcode },
6124 { Bad_Opcode },
bf890a93 6125 { "vfnmadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6126 },
6127
592a252b 6128 /* PREFIX_VEX_0F38AD */
c0f3af97 6129 {
592d1631
L
6130 { Bad_Opcode },
6131 { Bad_Opcode },
bf890a93 6132 { "vfnmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6133 },
6134
592a252b 6135 /* PREFIX_VEX_0F38AE */
c0f3af97 6136 {
592d1631
L
6137 { Bad_Opcode },
6138 { Bad_Opcode },
bf890a93 6139 { "vfnmsub213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6140 },
6141
592a252b 6142 /* PREFIX_VEX_0F38AF */
c0f3af97 6143 {
592d1631
L
6144 { Bad_Opcode },
6145 { Bad_Opcode },
bf890a93 6146 { "vfnmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6147 },
6148
592a252b 6149 /* PREFIX_VEX_0F38B6 */
c0f3af97 6150 {
592d1631
L
6151 { Bad_Opcode },
6152 { Bad_Opcode },
bf890a93 6153 { "vfmaddsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6154 },
6155
592a252b 6156 /* PREFIX_VEX_0F38B7 */
c0f3af97 6157 {
592d1631
L
6158 { Bad_Opcode },
6159 { Bad_Opcode },
bf890a93 6160 { "vfmsubadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6161 },
6162
592a252b 6163 /* PREFIX_VEX_0F38B8 */
c0f3af97 6164 {
592d1631
L
6165 { Bad_Opcode },
6166 { Bad_Opcode },
bf890a93 6167 { "vfmadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6168 },
6169
592a252b 6170 /* PREFIX_VEX_0F38B9 */
c0f3af97 6171 {
592d1631
L
6172 { Bad_Opcode },
6173 { Bad_Opcode },
bf890a93 6174 { "vfmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6175 },
6176
592a252b 6177 /* PREFIX_VEX_0F38BA */
c0f3af97 6178 {
592d1631
L
6179 { Bad_Opcode },
6180 { Bad_Opcode },
bf890a93 6181 { "vfmsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6182 },
6183
592a252b 6184 /* PREFIX_VEX_0F38BB */
c0f3af97 6185 {
592d1631
L
6186 { Bad_Opcode },
6187 { Bad_Opcode },
bf890a93 6188 { "vfmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6189 },
6190
592a252b 6191 /* PREFIX_VEX_0F38BC */
c0f3af97 6192 {
592d1631
L
6193 { Bad_Opcode },
6194 { Bad_Opcode },
bf890a93 6195 { "vfnmadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6196 },
6197
592a252b 6198 /* PREFIX_VEX_0F38BD */
c0f3af97 6199 {
592d1631
L
6200 { Bad_Opcode },
6201 { Bad_Opcode },
bf890a93 6202 { "vfnmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6203 },
6204
592a252b 6205 /* PREFIX_VEX_0F38BE */
c0f3af97 6206 {
592d1631
L
6207 { Bad_Opcode },
6208 { Bad_Opcode },
bf890a93 6209 { "vfnmsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6210 },
6211
592a252b 6212 /* PREFIX_VEX_0F38BF */
c0f3af97 6213 {
592d1631
L
6214 { Bad_Opcode },
6215 { Bad_Opcode },
bf890a93 6216 { "vfnmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6217 },
6218
48521003
IT
6219 /* PREFIX_VEX_0F38CF */
6220 {
6221 { Bad_Opcode },
6222 { Bad_Opcode },
6223 { VEX_W_TABLE (VEX_W_0F38CF_P_2) },
6224 },
6225
592a252b 6226 /* PREFIX_VEX_0F38DB */
c0f3af97 6227 {
592d1631
L
6228 { Bad_Opcode },
6229 { Bad_Opcode },
592a252b 6230 { VEX_LEN_TABLE (VEX_LEN_0F38DB_P_2) },
c0f3af97
L
6231 },
6232
592a252b 6233 /* PREFIX_VEX_0F38DC */
c0f3af97 6234 {
592d1631
L
6235 { Bad_Opcode },
6236 { Bad_Opcode },
8dcf1fad 6237 { "vaesenc", { XM, Vex, EXx }, 0 },
c0f3af97
L
6238 },
6239
592a252b 6240 /* PREFIX_VEX_0F38DD */
c0f3af97 6241 {
592d1631
L
6242 { Bad_Opcode },
6243 { Bad_Opcode },
8dcf1fad 6244 { "vaesenclast", { XM, Vex, EXx }, 0 },
c0f3af97
L
6245 },
6246
592a252b 6247 /* PREFIX_VEX_0F38DE */
c0f3af97 6248 {
592d1631
L
6249 { Bad_Opcode },
6250 { Bad_Opcode },
8dcf1fad 6251 { "vaesdec", { XM, Vex, EXx }, 0 },
c0f3af97
L
6252 },
6253
592a252b 6254 /* PREFIX_VEX_0F38DF */
c0f3af97 6255 {
592d1631
L
6256 { Bad_Opcode },
6257 { Bad_Opcode },
8dcf1fad 6258 { "vaesdeclast", { XM, Vex, EXx }, 0 },
c0f3af97
L
6259 },
6260
f12dc422
L
6261 /* PREFIX_VEX_0F38F2 */
6262 {
6263 { VEX_LEN_TABLE (VEX_LEN_0F38F2_P_0) },
6264 },
6265
6266 /* PREFIX_VEX_0F38F3_REG_1 */
6267 {
6268 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_1_P_0) },
6269 },
6270
6271 /* PREFIX_VEX_0F38F3_REG_2 */
6272 {
6273 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_2_P_0) },
6274 },
6275
6276 /* PREFIX_VEX_0F38F3_REG_3 */
6277 {
6278 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_3_P_0) },
6279 },
6280
6c30d220
L
6281 /* PREFIX_VEX_0F38F5 */
6282 {
6283 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_0) },
6284 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_1) },
6285 { Bad_Opcode },
6286 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_3) },
6287 },
6288
6289 /* PREFIX_VEX_0F38F6 */
6290 {
6291 { Bad_Opcode },
6292 { Bad_Opcode },
6293 { Bad_Opcode },
6294 { VEX_LEN_TABLE (VEX_LEN_0F38F6_P_3) },
6295 },
6296
f12dc422
L
6297 /* PREFIX_VEX_0F38F7 */
6298 {
6299 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_0) },
6c30d220
L
6300 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_1) },
6301 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_2) },
6302 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_3) },
6303 },
6304
6305 /* PREFIX_VEX_0F3A00 */
6306 {
6307 { Bad_Opcode },
6308 { Bad_Opcode },
6309 { VEX_LEN_TABLE (VEX_LEN_0F3A00_P_2) },
6310 },
6311
6312 /* PREFIX_VEX_0F3A01 */
6313 {
6314 { Bad_Opcode },
6315 { Bad_Opcode },
6316 { VEX_LEN_TABLE (VEX_LEN_0F3A01_P_2) },
6317 },
6318
6319 /* PREFIX_VEX_0F3A02 */
6320 {
6321 { Bad_Opcode },
6322 { Bad_Opcode },
6323 { VEX_W_TABLE (VEX_W_0F3A02_P_2) },
f12dc422
L
6324 },
6325
592a252b 6326 /* PREFIX_VEX_0F3A04 */
c0f3af97 6327 {
592d1631
L
6328 { Bad_Opcode },
6329 { Bad_Opcode },
592a252b 6330 { VEX_W_TABLE (VEX_W_0F3A04_P_2) },
c0f3af97
L
6331 },
6332
592a252b 6333 /* PREFIX_VEX_0F3A05 */
c0f3af97 6334 {
592d1631
L
6335 { Bad_Opcode },
6336 { Bad_Opcode },
592a252b 6337 { VEX_W_TABLE (VEX_W_0F3A05_P_2) },
c0f3af97
L
6338 },
6339
592a252b 6340 /* PREFIX_VEX_0F3A06 */
c0f3af97 6341 {
592d1631
L
6342 { Bad_Opcode },
6343 { Bad_Opcode },
592a252b 6344 { VEX_LEN_TABLE (VEX_LEN_0F3A06_P_2) },
c0f3af97
L
6345 },
6346
592a252b 6347 /* PREFIX_VEX_0F3A08 */
c0f3af97 6348 {
592d1631
L
6349 { Bad_Opcode },
6350 { Bad_Opcode },
ec6f095a 6351 { "vroundps", { XM, EXx, Ib }, 0 },
c0f3af97
L
6352 },
6353
592a252b 6354 /* PREFIX_VEX_0F3A09 */
c0f3af97 6355 {
592d1631
L
6356 { Bad_Opcode },
6357 { Bad_Opcode },
ec6f095a 6358 { "vroundpd", { XM, EXx, Ib }, 0 },
c0f3af97
L
6359 },
6360
592a252b 6361 /* PREFIX_VEX_0F3A0A */
c0f3af97 6362 {
592d1631
L
6363 { Bad_Opcode },
6364 { Bad_Opcode },
ec6f095a 6365 { "vroundss", { XMScalar, VexScalar, EXdScalar, Ib }, 0 },
0bfee649
L
6366 },
6367
592a252b 6368 /* PREFIX_VEX_0F3A0B */
0bfee649 6369 {
592d1631
L
6370 { Bad_Opcode },
6371 { Bad_Opcode },
ec6f095a 6372 { "vroundsd", { XMScalar, VexScalar, EXqScalar, Ib }, 0 },
0bfee649
L
6373 },
6374
592a252b 6375 /* PREFIX_VEX_0F3A0C */
0bfee649 6376 {
592d1631
L
6377 { Bad_Opcode },
6378 { Bad_Opcode },
ec6f095a 6379 { "vblendps", { XM, Vex, EXx, Ib }, 0 },
0bfee649
L
6380 },
6381
592a252b 6382 /* PREFIX_VEX_0F3A0D */
0bfee649 6383 {
592d1631
L
6384 { Bad_Opcode },
6385 { Bad_Opcode },
ec6f095a 6386 { "vblendpd", { XM, Vex, EXx, Ib }, 0 },
c0f3af97
L
6387 },
6388
592a252b 6389 /* PREFIX_VEX_0F3A0E */
0bfee649 6390 {
592d1631
L
6391 { Bad_Opcode },
6392 { Bad_Opcode },
ec6f095a 6393 { "vpblendw", { XM, Vex, EXx, Ib }, 0 },
0bfee649
L
6394 },
6395
592a252b 6396 /* PREFIX_VEX_0F3A0F */
0bfee649 6397 {
592d1631
L
6398 { Bad_Opcode },
6399 { Bad_Opcode },
ec6f095a 6400 { "vpalignr", { XM, Vex, EXx, Ib }, 0 },
0bfee649
L
6401 },
6402
592a252b 6403 /* PREFIX_VEX_0F3A14 */
0bfee649 6404 {
592d1631
L
6405 { Bad_Opcode },
6406 { Bad_Opcode },
592a252b 6407 { VEX_LEN_TABLE (VEX_LEN_0F3A14_P_2) },
0bfee649
L
6408 },
6409
592a252b 6410 /* PREFIX_VEX_0F3A15 */
0bfee649 6411 {
592d1631
L
6412 { Bad_Opcode },
6413 { Bad_Opcode },
592a252b 6414 { VEX_LEN_TABLE (VEX_LEN_0F3A15_P_2) },
0bfee649
L
6415 },
6416
592a252b 6417 /* PREFIX_VEX_0F3A16 */
c0f3af97 6418 {
592d1631
L
6419 { Bad_Opcode },
6420 { Bad_Opcode },
592a252b 6421 { VEX_LEN_TABLE (VEX_LEN_0F3A16_P_2) },
c0f3af97
L
6422 },
6423
592a252b 6424 /* PREFIX_VEX_0F3A17 */
c0f3af97 6425 {
592d1631
L
6426 { Bad_Opcode },
6427 { Bad_Opcode },
592a252b 6428 { VEX_LEN_TABLE (VEX_LEN_0F3A17_P_2) },
c0f3af97
L
6429 },
6430
592a252b 6431 /* PREFIX_VEX_0F3A18 */
c0f3af97 6432 {
592d1631
L
6433 { Bad_Opcode },
6434 { Bad_Opcode },
592a252b 6435 { VEX_LEN_TABLE (VEX_LEN_0F3A18_P_2) },
c0f3af97
L
6436 },
6437
592a252b 6438 /* PREFIX_VEX_0F3A19 */
c0f3af97 6439 {
592d1631
L
6440 { Bad_Opcode },
6441 { Bad_Opcode },
592a252b 6442 { VEX_LEN_TABLE (VEX_LEN_0F3A19_P_2) },
c0f3af97
L
6443 },
6444
592a252b 6445 /* PREFIX_VEX_0F3A1D */
c7b8aa3a
L
6446 {
6447 { Bad_Opcode },
6448 { Bad_Opcode },
bf890a93 6449 { "vcvtps2ph", { EXxmmq, XM, Ib }, 0 },
c7b8aa3a
L
6450 },
6451
592a252b 6452 /* PREFIX_VEX_0F3A20 */
c0f3af97 6453 {
592d1631
L
6454 { Bad_Opcode },
6455 { Bad_Opcode },
592a252b 6456 { VEX_LEN_TABLE (VEX_LEN_0F3A20_P_2) },
c0f3af97
L
6457 },
6458
592a252b 6459 /* PREFIX_VEX_0F3A21 */
c0f3af97 6460 {
592d1631
L
6461 { Bad_Opcode },
6462 { Bad_Opcode },
592a252b 6463 { VEX_LEN_TABLE (VEX_LEN_0F3A21_P_2) },
c0f3af97
L
6464 },
6465
592a252b 6466 /* PREFIX_VEX_0F3A22 */
0bfee649 6467 {
592d1631
L
6468 { Bad_Opcode },
6469 { Bad_Opcode },
592a252b 6470 { VEX_LEN_TABLE (VEX_LEN_0F3A22_P_2) },
0bfee649
L
6471 },
6472
43234a1e
L
6473 /* PREFIX_VEX_0F3A30 */
6474 {
6475 { Bad_Opcode },
6476 { Bad_Opcode },
6477 { VEX_LEN_TABLE (VEX_LEN_0F3A30_P_2) },
6478 },
6479
1ba585e8
IT
6480 /* PREFIX_VEX_0F3A31 */
6481 {
6482 { Bad_Opcode },
6483 { Bad_Opcode },
6484 { VEX_LEN_TABLE (VEX_LEN_0F3A31_P_2) },
6485 },
6486
43234a1e
L
6487 /* PREFIX_VEX_0F3A32 */
6488 {
6489 { Bad_Opcode },
6490 { Bad_Opcode },
6491 { VEX_LEN_TABLE (VEX_LEN_0F3A32_P_2) },
6492 },
6493
1ba585e8
IT
6494 /* PREFIX_VEX_0F3A33 */
6495 {
6496 { Bad_Opcode },
6497 { Bad_Opcode },
6498 { VEX_LEN_TABLE (VEX_LEN_0F3A33_P_2) },
6499 },
6500
6c30d220
L
6501 /* PREFIX_VEX_0F3A38 */
6502 {
6503 { Bad_Opcode },
6504 { Bad_Opcode },
6505 { VEX_LEN_TABLE (VEX_LEN_0F3A38_P_2) },
6506 },
6507
6508 /* PREFIX_VEX_0F3A39 */
6509 {
6510 { Bad_Opcode },
6511 { Bad_Opcode },
6512 { VEX_LEN_TABLE (VEX_LEN_0F3A39_P_2) },
6513 },
6514
592a252b 6515 /* PREFIX_VEX_0F3A40 */
c0f3af97 6516 {
592d1631
L
6517 { Bad_Opcode },
6518 { Bad_Opcode },
ec6f095a 6519 { "vdpps", { XM, Vex, EXx, Ib }, 0 },
c0f3af97
L
6520 },
6521
592a252b 6522 /* PREFIX_VEX_0F3A41 */
c0f3af97 6523 {
592d1631
L
6524 { Bad_Opcode },
6525 { Bad_Opcode },
592a252b 6526 { VEX_LEN_TABLE (VEX_LEN_0F3A41_P_2) },
c0f3af97
L
6527 },
6528
592a252b 6529 /* PREFIX_VEX_0F3A42 */
c0f3af97 6530 {
592d1631
L
6531 { Bad_Opcode },
6532 { Bad_Opcode },
ec6f095a 6533 { "vmpsadbw", { XM, Vex, EXx, Ib }, 0 },
c0f3af97
L
6534 },
6535
592a252b 6536 /* PREFIX_VEX_0F3A44 */
ce2f5b3c 6537 {
592d1631
L
6538 { Bad_Opcode },
6539 { Bad_Opcode },
ff1982d5 6540 { "vpclmulqdq", { XM, Vex, EXx, PCLMUL }, 0 },
ce2f5b3c
L
6541 },
6542
6c30d220
L
6543 /* PREFIX_VEX_0F3A46 */
6544 {
6545 { Bad_Opcode },
6546 { Bad_Opcode },
6547 { VEX_LEN_TABLE (VEX_LEN_0F3A46_P_2) },
6548 },
6549
592a252b 6550 /* PREFIX_VEX_0F3A48 */
a683cc34
SP
6551 {
6552 { Bad_Opcode },
6553 { Bad_Opcode },
592a252b 6554 { VEX_W_TABLE (VEX_W_0F3A48_P_2) },
a683cc34
SP
6555 },
6556
592a252b 6557 /* PREFIX_VEX_0F3A49 */
a683cc34
SP
6558 {
6559 { Bad_Opcode },
6560 { Bad_Opcode },
592a252b 6561 { VEX_W_TABLE (VEX_W_0F3A49_P_2) },
a683cc34
SP
6562 },
6563
592a252b 6564 /* PREFIX_VEX_0F3A4A */
c0f3af97 6565 {
592d1631
L
6566 { Bad_Opcode },
6567 { Bad_Opcode },
592a252b 6568 { VEX_W_TABLE (VEX_W_0F3A4A_P_2) },
c0f3af97
L
6569 },
6570
592a252b 6571 /* PREFIX_VEX_0F3A4B */
c0f3af97 6572 {
592d1631
L
6573 { Bad_Opcode },
6574 { Bad_Opcode },
592a252b 6575 { VEX_W_TABLE (VEX_W_0F3A4B_P_2) },
c0f3af97
L
6576 },
6577
592a252b 6578 /* PREFIX_VEX_0F3A4C */
c0f3af97 6579 {
592d1631
L
6580 { Bad_Opcode },
6581 { Bad_Opcode },
6c30d220 6582 { VEX_W_TABLE (VEX_W_0F3A4C_P_2) },
c0f3af97
L
6583 },
6584
592a252b 6585 /* PREFIX_VEX_0F3A5C */
922d8de8 6586 {
592d1631
L
6587 { Bad_Opcode },
6588 { Bad_Opcode },
3a2430e0 6589 { "vfmaddsubps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6590 },
6591
592a252b 6592 /* PREFIX_VEX_0F3A5D */
922d8de8 6593 {
592d1631
L
6594 { Bad_Opcode },
6595 { Bad_Opcode },
3a2430e0 6596 { "vfmaddsubpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6597 },
6598
592a252b 6599 /* PREFIX_VEX_0F3A5E */
922d8de8 6600 {
592d1631
L
6601 { Bad_Opcode },
6602 { Bad_Opcode },
3a2430e0 6603 { "vfmsubaddps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6604 },
6605
592a252b 6606 /* PREFIX_VEX_0F3A5F */
922d8de8 6607 {
592d1631
L
6608 { Bad_Opcode },
6609 { Bad_Opcode },
3a2430e0 6610 { "vfmsubaddpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6611 },
6612
592a252b 6613 /* PREFIX_VEX_0F3A60 */
c0f3af97 6614 {
592d1631
L
6615 { Bad_Opcode },
6616 { Bad_Opcode },
592a252b 6617 { VEX_LEN_TABLE (VEX_LEN_0F3A60_P_2) },
592d1631 6618 { Bad_Opcode },
c0f3af97
L
6619 },
6620
592a252b 6621 /* PREFIX_VEX_0F3A61 */
c0f3af97 6622 {
592d1631
L
6623 { Bad_Opcode },
6624 { Bad_Opcode },
592a252b 6625 { VEX_LEN_TABLE (VEX_LEN_0F3A61_P_2) },
c0f3af97
L
6626 },
6627
592a252b 6628 /* PREFIX_VEX_0F3A62 */
c0f3af97 6629 {
592d1631
L
6630 { Bad_Opcode },
6631 { Bad_Opcode },
592a252b 6632 { VEX_LEN_TABLE (VEX_LEN_0F3A62_P_2) },
c0f3af97
L
6633 },
6634
592a252b 6635 /* PREFIX_VEX_0F3A63 */
c0f3af97 6636 {
592d1631
L
6637 { Bad_Opcode },
6638 { Bad_Opcode },
592a252b 6639 { VEX_LEN_TABLE (VEX_LEN_0F3A63_P_2) },
c0f3af97 6640 },
a5ff0eb2 6641
592a252b 6642 /* PREFIX_VEX_0F3A68 */
922d8de8 6643 {
592d1631
L
6644 { Bad_Opcode },
6645 { Bad_Opcode },
3a2430e0 6646 { "vfmaddps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6647 },
6648
592a252b 6649 /* PREFIX_VEX_0F3A69 */
922d8de8 6650 {
592d1631
L
6651 { Bad_Opcode },
6652 { Bad_Opcode },
3a2430e0 6653 { "vfmaddpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6654 },
6655
592a252b 6656 /* PREFIX_VEX_0F3A6A */
922d8de8 6657 {
592d1631
L
6658 { Bad_Opcode },
6659 { Bad_Opcode },
592a252b 6660 { VEX_LEN_TABLE (VEX_LEN_0F3A6A_P_2) },
922d8de8
DR
6661 },
6662
592a252b 6663 /* PREFIX_VEX_0F3A6B */
922d8de8 6664 {
592d1631
L
6665 { Bad_Opcode },
6666 { Bad_Opcode },
592a252b 6667 { VEX_LEN_TABLE (VEX_LEN_0F3A6B_P_2) },
922d8de8
DR
6668 },
6669
592a252b 6670 /* PREFIX_VEX_0F3A6C */
922d8de8 6671 {
592d1631
L
6672 { Bad_Opcode },
6673 { Bad_Opcode },
3a2430e0 6674 { "vfmsubps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6675 },
6676
592a252b 6677 /* PREFIX_VEX_0F3A6D */
922d8de8 6678 {
592d1631
L
6679 { Bad_Opcode },
6680 { Bad_Opcode },
3a2430e0 6681 { "vfmsubpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6682 },
6683
592a252b 6684 /* PREFIX_VEX_0F3A6E */
922d8de8 6685 {
592d1631
L
6686 { Bad_Opcode },
6687 { Bad_Opcode },
592a252b 6688 { VEX_LEN_TABLE (VEX_LEN_0F3A6E_P_2) },
922d8de8
DR
6689 },
6690
592a252b 6691 /* PREFIX_VEX_0F3A6F */
922d8de8 6692 {
592d1631
L
6693 { Bad_Opcode },
6694 { Bad_Opcode },
592a252b 6695 { VEX_LEN_TABLE (VEX_LEN_0F3A6F_P_2) },
922d8de8
DR
6696 },
6697
592a252b 6698 /* PREFIX_VEX_0F3A78 */
922d8de8 6699 {
592d1631
L
6700 { Bad_Opcode },
6701 { Bad_Opcode },
3a2430e0 6702 { "vfnmaddps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6703 },
6704
592a252b 6705 /* PREFIX_VEX_0F3A79 */
922d8de8 6706 {
592d1631
L
6707 { Bad_Opcode },
6708 { Bad_Opcode },
3a2430e0 6709 { "vfnmaddpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6710 },
6711
592a252b 6712 /* PREFIX_VEX_0F3A7A */
922d8de8 6713 {
592d1631
L
6714 { Bad_Opcode },
6715 { Bad_Opcode },
592a252b 6716 { VEX_LEN_TABLE (VEX_LEN_0F3A7A_P_2) },
922d8de8
DR
6717 },
6718
592a252b 6719 /* PREFIX_VEX_0F3A7B */
922d8de8 6720 {
592d1631
L
6721 { Bad_Opcode },
6722 { Bad_Opcode },
592a252b 6723 { VEX_LEN_TABLE (VEX_LEN_0F3A7B_P_2) },
922d8de8
DR
6724 },
6725
592a252b 6726 /* PREFIX_VEX_0F3A7C */
922d8de8 6727 {
592d1631
L
6728 { Bad_Opcode },
6729 { Bad_Opcode },
3a2430e0 6730 { "vfnmsubps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
592d1631 6731 { Bad_Opcode },
922d8de8
DR
6732 },
6733
592a252b 6734 /* PREFIX_VEX_0F3A7D */
922d8de8 6735 {
592d1631
L
6736 { Bad_Opcode },
6737 { Bad_Opcode },
3a2430e0 6738 { "vfnmsubpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6739 },
6740
592a252b 6741 /* PREFIX_VEX_0F3A7E */
922d8de8 6742 {
592d1631
L
6743 { Bad_Opcode },
6744 { Bad_Opcode },
592a252b 6745 { VEX_LEN_TABLE (VEX_LEN_0F3A7E_P_2) },
922d8de8
DR
6746 },
6747
592a252b 6748 /* PREFIX_VEX_0F3A7F */
922d8de8 6749 {
592d1631
L
6750 { Bad_Opcode },
6751 { Bad_Opcode },
592a252b 6752 { VEX_LEN_TABLE (VEX_LEN_0F3A7F_P_2) },
922d8de8
DR
6753 },
6754
48521003
IT
6755 /* PREFIX_VEX_0F3ACE */
6756 {
6757 { Bad_Opcode },
6758 { Bad_Opcode },
6759 { VEX_W_TABLE (VEX_W_0F3ACE_P_2) },
6760 },
6761
6762 /* PREFIX_VEX_0F3ACF */
6763 {
6764 { Bad_Opcode },
6765 { Bad_Opcode },
6766 { VEX_W_TABLE (VEX_W_0F3ACF_P_2) },
6767 },
6768
592a252b 6769 /* PREFIX_VEX_0F3ADF */
a5ff0eb2 6770 {
592d1631
L
6771 { Bad_Opcode },
6772 { Bad_Opcode },
592a252b 6773 { VEX_LEN_TABLE (VEX_LEN_0F3ADF_P_2) },
a5ff0eb2 6774 },
6c30d220
L
6775
6776 /* PREFIX_VEX_0F3AF0 */
6777 {
6778 { Bad_Opcode },
6779 { Bad_Opcode },
6780 { Bad_Opcode },
6781 { VEX_LEN_TABLE (VEX_LEN_0F3AF0_P_3) },
6782 },
43234a1e 6783
ad692897 6784#include "i386-dis-evex-prefix.h"
c0f3af97
L
6785};
6786
6787static const struct dis386 x86_64_table[][2] = {
6788 /* X86_64_06 */
6789 {
bf890a93 6790 { "pushP", { es }, 0 },
c0f3af97
L
6791 },
6792
6793 /* X86_64_07 */
6794 {
bf890a93 6795 { "popP", { es }, 0 },
c0f3af97
L
6796 },
6797
6798 /* X86_64_0D */
6799 {
bf890a93 6800 { "pushP", { cs }, 0 },
c0f3af97
L
6801 },
6802
6803 /* X86_64_16 */
6804 {
bf890a93 6805 { "pushP", { ss }, 0 },
c0f3af97
L
6806 },
6807
6808 /* X86_64_17 */
6809 {
bf890a93 6810 { "popP", { ss }, 0 },
c0f3af97
L
6811 },
6812
6813 /* X86_64_1E */
6814 {
bf890a93 6815 { "pushP", { ds }, 0 },
c0f3af97
L
6816 },
6817
6818 /* X86_64_1F */
6819 {
bf890a93 6820 { "popP", { ds }, 0 },
c0f3af97
L
6821 },
6822
6823 /* X86_64_27 */
6824 {
bf890a93 6825 { "daa", { XX }, 0 },
c0f3af97
L
6826 },
6827
6828 /* X86_64_2F */
6829 {
bf890a93 6830 { "das", { XX }, 0 },
c0f3af97
L
6831 },
6832
6833 /* X86_64_37 */
6834 {
bf890a93 6835 { "aaa", { XX }, 0 },
c0f3af97
L
6836 },
6837
6838 /* X86_64_3F */
6839 {
bf890a93 6840 { "aas", { XX }, 0 },
c0f3af97
L
6841 },
6842
6843 /* X86_64_60 */
6844 {
bf890a93 6845 { "pushaP", { XX }, 0 },
c0f3af97
L
6846 },
6847
6848 /* X86_64_61 */
6849 {
bf890a93 6850 { "popaP", { XX }, 0 },
c0f3af97
L
6851 },
6852
6853 /* X86_64_62 */
6854 {
6855 { MOD_TABLE (MOD_62_32BIT) },
43234a1e 6856 { EVEX_TABLE (EVEX_0F) },
c0f3af97
L
6857 },
6858
6859 /* X86_64_63 */
6860 {
bf890a93
IT
6861 { "arpl", { Ew, Gw }, 0 },
6862 { "movs{lq|xd}", { Gv, Ed }, 0 },
c0f3af97
L
6863 },
6864
6865 /* X86_64_6D */
6866 {
bf890a93
IT
6867 { "ins{R|}", { Yzr, indirDX }, 0 },
6868 { "ins{G|}", { Yzr, indirDX }, 0 },
c0f3af97
L
6869 },
6870
6871 /* X86_64_6F */
6872 {
bf890a93
IT
6873 { "outs{R|}", { indirDXr, Xz }, 0 },
6874 { "outs{G|}", { indirDXr, Xz }, 0 },
c0f3af97
L
6875 },
6876
d039fef3 6877 /* X86_64_82 */
8b89fe14 6878 {
de194d85 6879 /* Opcode 0x82 is an alias of opcode 0x80 in 32-bit mode. */
d039fef3 6880 { REG_TABLE (REG_80) },
8b89fe14
L
6881 },
6882
c0f3af97
L
6883 /* X86_64_9A */
6884 {
bf890a93 6885 { "Jcall{T|}", { Ap }, 0 },
c0f3af97
L
6886 },
6887
6888 /* X86_64_C4 */
6889 {
6890 { MOD_TABLE (MOD_C4_32BIT) },
6891 { VEX_C4_TABLE (VEX_0F) },
6892 },
6893
6894 /* X86_64_C5 */
6895 {
6896 { MOD_TABLE (MOD_C5_32BIT) },
6897 { VEX_C5_TABLE (VEX_0F) },
6898 },
6899
6900 /* X86_64_CE */
6901 {
bf890a93 6902 { "into", { XX }, 0 },
c0f3af97
L
6903 },
6904
6905 /* X86_64_D4 */
6906 {
bf890a93 6907 { "aam", { Ib }, 0 },
c0f3af97
L
6908 },
6909
6910 /* X86_64_D5 */
6911 {
bf890a93 6912 { "aad", { Ib }, 0 },
c0f3af97
L
6913 },
6914
a72d2af2
L
6915 /* X86_64_E8 */
6916 {
6917 { "callP", { Jv, BND }, 0 },
5db04b09 6918 { "call@", { Jv, BND }, 0 }
a72d2af2
L
6919 },
6920
6921 /* X86_64_E9 */
6922 {
6923 { "jmpP", { Jv, BND }, 0 },
5db04b09 6924 { "jmp@", { Jv, BND }, 0 }
a72d2af2
L
6925 },
6926
c0f3af97
L
6927 /* X86_64_EA */
6928 {
bf890a93 6929 { "Jjmp{T|}", { Ap }, 0 },
c0f3af97
L
6930 },
6931
6932 /* X86_64_0F01_REG_0 */
6933 {
bf890a93
IT
6934 { "sgdt{Q|IQ}", { M }, 0 },
6935 { "sgdt", { M }, 0 },
c0f3af97
L
6936 },
6937
6938 /* X86_64_0F01_REG_1 */
6939 {
bf890a93
IT
6940 { "sidt{Q|IQ}", { M }, 0 },
6941 { "sidt", { M }, 0 },
c0f3af97
L
6942 },
6943
6944 /* X86_64_0F01_REG_2 */
6945 {
bf890a93
IT
6946 { "lgdt{Q|Q}", { M }, 0 },
6947 { "lgdt", { M }, 0 },
c0f3af97
L
6948 },
6949
6950 /* X86_64_0F01_REG_3 */
6951 {
bf890a93
IT
6952 { "lidt{Q|Q}", { M }, 0 },
6953 { "lidt", { M }, 0 },
c0f3af97
L
6954 },
6955};
6956
6957static const struct dis386 three_byte_table[][256] = {
c1e679ec
DR
6958
6959 /* THREE_BYTE_0F38 */
c0f3af97
L
6960 {
6961 /* 00 */
507bd325
L
6962 { "pshufb", { MX, EM }, PREFIX_OPCODE },
6963 { "phaddw", { MX, EM }, PREFIX_OPCODE },
6964 { "phaddd", { MX, EM }, PREFIX_OPCODE },
6965 { "phaddsw", { MX, EM }, PREFIX_OPCODE },
6966 { "pmaddubsw", { MX, EM }, PREFIX_OPCODE },
6967 { "phsubw", { MX, EM }, PREFIX_OPCODE },
6968 { "phsubd", { MX, EM }, PREFIX_OPCODE },
6969 { "phsubsw", { MX, EM }, PREFIX_OPCODE },
c0f3af97 6970 /* 08 */
507bd325
L
6971 { "psignb", { MX, EM }, PREFIX_OPCODE },
6972 { "psignw", { MX, EM }, PREFIX_OPCODE },
6973 { "psignd", { MX, EM }, PREFIX_OPCODE },
6974 { "pmulhrsw", { MX, EM }, PREFIX_OPCODE },
592d1631
L
6975 { Bad_Opcode },
6976 { Bad_Opcode },
6977 { Bad_Opcode },
6978 { Bad_Opcode },
f88c9eb0
SP
6979 /* 10 */
6980 { PREFIX_TABLE (PREFIX_0F3810) },
592d1631
L
6981 { Bad_Opcode },
6982 { Bad_Opcode },
6983 { Bad_Opcode },
f88c9eb0
SP
6984 { PREFIX_TABLE (PREFIX_0F3814) },
6985 { PREFIX_TABLE (PREFIX_0F3815) },
592d1631 6986 { Bad_Opcode },
f88c9eb0
SP
6987 { PREFIX_TABLE (PREFIX_0F3817) },
6988 /* 18 */
592d1631
L
6989 { Bad_Opcode },
6990 { Bad_Opcode },
6991 { Bad_Opcode },
6992 { Bad_Opcode },
507bd325
L
6993 { "pabsb", { MX, EM }, PREFIX_OPCODE },
6994 { "pabsw", { MX, EM }, PREFIX_OPCODE },
6995 { "pabsd", { MX, EM }, PREFIX_OPCODE },
592d1631 6996 { Bad_Opcode },
f88c9eb0
SP
6997 /* 20 */
6998 { PREFIX_TABLE (PREFIX_0F3820) },
6999 { PREFIX_TABLE (PREFIX_0F3821) },
7000 { PREFIX_TABLE (PREFIX_0F3822) },
7001 { PREFIX_TABLE (PREFIX_0F3823) },
7002 { PREFIX_TABLE (PREFIX_0F3824) },
7003 { PREFIX_TABLE (PREFIX_0F3825) },
592d1631
L
7004 { Bad_Opcode },
7005 { Bad_Opcode },
f88c9eb0
SP
7006 /* 28 */
7007 { PREFIX_TABLE (PREFIX_0F3828) },
7008 { PREFIX_TABLE (PREFIX_0F3829) },
7009 { PREFIX_TABLE (PREFIX_0F382A) },
7010 { PREFIX_TABLE (PREFIX_0F382B) },
592d1631
L
7011 { Bad_Opcode },
7012 { Bad_Opcode },
7013 { Bad_Opcode },
7014 { Bad_Opcode },
f88c9eb0
SP
7015 /* 30 */
7016 { PREFIX_TABLE (PREFIX_0F3830) },
7017 { PREFIX_TABLE (PREFIX_0F3831) },
7018 { PREFIX_TABLE (PREFIX_0F3832) },
7019 { PREFIX_TABLE (PREFIX_0F3833) },
7020 { PREFIX_TABLE (PREFIX_0F3834) },
7021 { PREFIX_TABLE (PREFIX_0F3835) },
592d1631 7022 { Bad_Opcode },
f88c9eb0
SP
7023 { PREFIX_TABLE (PREFIX_0F3837) },
7024 /* 38 */
7025 { PREFIX_TABLE (PREFIX_0F3838) },
7026 { PREFIX_TABLE (PREFIX_0F3839) },
7027 { PREFIX_TABLE (PREFIX_0F383A) },
7028 { PREFIX_TABLE (PREFIX_0F383B) },
7029 { PREFIX_TABLE (PREFIX_0F383C) },
7030 { PREFIX_TABLE (PREFIX_0F383D) },
7031 { PREFIX_TABLE (PREFIX_0F383E) },
7032 { PREFIX_TABLE (PREFIX_0F383F) },
7033 /* 40 */
7034 { PREFIX_TABLE (PREFIX_0F3840) },
7035 { PREFIX_TABLE (PREFIX_0F3841) },
592d1631
L
7036 { Bad_Opcode },
7037 { Bad_Opcode },
7038 { Bad_Opcode },
7039 { Bad_Opcode },
7040 { Bad_Opcode },
7041 { Bad_Opcode },
f88c9eb0 7042 /* 48 */
592d1631
L
7043 { Bad_Opcode },
7044 { Bad_Opcode },
7045 { Bad_Opcode },
7046 { Bad_Opcode },
7047 { Bad_Opcode },
7048 { Bad_Opcode },
7049 { Bad_Opcode },
7050 { Bad_Opcode },
f88c9eb0 7051 /* 50 */
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 /* 58 */
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 /* 60 */
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 /* 68 */
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 /* 70 */
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 /* 78 */
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
SP
7105 /* 80 */
7106 { PREFIX_TABLE (PREFIX_0F3880) },
7107 { PREFIX_TABLE (PREFIX_0F3881) },
6c30d220 7108 { PREFIX_TABLE (PREFIX_0F3882) },
592d1631
L
7109 { Bad_Opcode },
7110 { Bad_Opcode },
7111 { Bad_Opcode },
7112 { Bad_Opcode },
7113 { Bad_Opcode },
f88c9eb0 7114 /* 88 */
592d1631
L
7115 { Bad_Opcode },
7116 { Bad_Opcode },
7117 { Bad_Opcode },
7118 { Bad_Opcode },
7119 { Bad_Opcode },
7120 { Bad_Opcode },
7121 { Bad_Opcode },
7122 { Bad_Opcode },
f88c9eb0 7123 /* 90 */
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 /* 98 */
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 /* a0 */
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 /* a8 */
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 /* b0 */
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 /* b8 */
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 /* c0 */
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 /* c8 */
a0046408
L
7187 { PREFIX_TABLE (PREFIX_0F38C8) },
7188 { PREFIX_TABLE (PREFIX_0F38C9) },
7189 { PREFIX_TABLE (PREFIX_0F38CA) },
7190 { PREFIX_TABLE (PREFIX_0F38CB) },
7191 { PREFIX_TABLE (PREFIX_0F38CC) },
7192 { PREFIX_TABLE (PREFIX_0F38CD) },
592d1631 7193 { Bad_Opcode },
48521003 7194 { PREFIX_TABLE (PREFIX_0F38CF) },
f88c9eb0 7195 /* d0 */
592d1631
L
7196 { Bad_Opcode },
7197 { Bad_Opcode },
7198 { Bad_Opcode },
7199 { Bad_Opcode },
7200 { Bad_Opcode },
7201 { Bad_Opcode },
7202 { Bad_Opcode },
7203 { Bad_Opcode },
f88c9eb0 7204 /* d8 */
592d1631
L
7205 { Bad_Opcode },
7206 { Bad_Opcode },
7207 { Bad_Opcode },
f88c9eb0
SP
7208 { PREFIX_TABLE (PREFIX_0F38DB) },
7209 { PREFIX_TABLE (PREFIX_0F38DC) },
7210 { PREFIX_TABLE (PREFIX_0F38DD) },
7211 { PREFIX_TABLE (PREFIX_0F38DE) },
7212 { PREFIX_TABLE (PREFIX_0F38DF) },
7213 /* e0 */
592d1631
L
7214 { Bad_Opcode },
7215 { Bad_Opcode },
7216 { Bad_Opcode },
7217 { Bad_Opcode },
7218 { Bad_Opcode },
7219 { Bad_Opcode },
7220 { Bad_Opcode },
7221 { Bad_Opcode },
f88c9eb0 7222 /* e8 */
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
SP
7231 /* f0 */
7232 { PREFIX_TABLE (PREFIX_0F38F0) },
7233 { PREFIX_TABLE (PREFIX_0F38F1) },
592d1631
L
7234 { Bad_Opcode },
7235 { Bad_Opcode },
7236 { Bad_Opcode },
603555e5 7237 { PREFIX_TABLE (PREFIX_0F38F5) },
e2e1fcde 7238 { PREFIX_TABLE (PREFIX_0F38F6) },
592d1631 7239 { Bad_Opcode },
f88c9eb0 7240 /* f8 */
c0a30a9f
L
7241 { PREFIX_TABLE (PREFIX_0F38F8) },
7242 { PREFIX_TABLE (PREFIX_0F38F9) },
592d1631
L
7243 { Bad_Opcode },
7244 { Bad_Opcode },
7245 { Bad_Opcode },
7246 { Bad_Opcode },
7247 { Bad_Opcode },
7248 { Bad_Opcode },
f88c9eb0
SP
7249 },
7250 /* THREE_BYTE_0F3A */
7251 {
7252 /* 00 */
592d1631
L
7253 { Bad_Opcode },
7254 { Bad_Opcode },
7255 { Bad_Opcode },
7256 { Bad_Opcode },
7257 { Bad_Opcode },
7258 { Bad_Opcode },
7259 { Bad_Opcode },
7260 { Bad_Opcode },
f88c9eb0
SP
7261 /* 08 */
7262 { PREFIX_TABLE (PREFIX_0F3A08) },
7263 { PREFIX_TABLE (PREFIX_0F3A09) },
7264 { PREFIX_TABLE (PREFIX_0F3A0A) },
7265 { PREFIX_TABLE (PREFIX_0F3A0B) },
7266 { PREFIX_TABLE (PREFIX_0F3A0C) },
7267 { PREFIX_TABLE (PREFIX_0F3A0D) },
7268 { PREFIX_TABLE (PREFIX_0F3A0E) },
507bd325 7269 { "palignr", { MX, EM, Ib }, PREFIX_OPCODE },
f88c9eb0 7270 /* 10 */
592d1631
L
7271 { Bad_Opcode },
7272 { Bad_Opcode },
7273 { Bad_Opcode },
7274 { Bad_Opcode },
f88c9eb0
SP
7275 { PREFIX_TABLE (PREFIX_0F3A14) },
7276 { PREFIX_TABLE (PREFIX_0F3A15) },
7277 { PREFIX_TABLE (PREFIX_0F3A16) },
7278 { PREFIX_TABLE (PREFIX_0F3A17) },
7279 /* 18 */
592d1631
L
7280 { Bad_Opcode },
7281 { Bad_Opcode },
7282 { Bad_Opcode },
7283 { Bad_Opcode },
7284 { Bad_Opcode },
7285 { Bad_Opcode },
7286 { Bad_Opcode },
7287 { Bad_Opcode },
f88c9eb0
SP
7288 /* 20 */
7289 { PREFIX_TABLE (PREFIX_0F3A20) },
7290 { PREFIX_TABLE (PREFIX_0F3A21) },
7291 { PREFIX_TABLE (PREFIX_0F3A22) },
592d1631
L
7292 { Bad_Opcode },
7293 { Bad_Opcode },
7294 { Bad_Opcode },
7295 { Bad_Opcode },
7296 { Bad_Opcode },
f88c9eb0 7297 /* 28 */
592d1631
L
7298 { Bad_Opcode },
7299 { Bad_Opcode },
7300 { Bad_Opcode },
7301 { Bad_Opcode },
7302 { Bad_Opcode },
7303 { Bad_Opcode },
7304 { Bad_Opcode },
7305 { Bad_Opcode },
f88c9eb0 7306 /* 30 */
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 /* 38 */
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
SP
7324 /* 40 */
7325 { PREFIX_TABLE (PREFIX_0F3A40) },
7326 { PREFIX_TABLE (PREFIX_0F3A41) },
7327 { PREFIX_TABLE (PREFIX_0F3A42) },
592d1631 7328 { Bad_Opcode },
f88c9eb0 7329 { PREFIX_TABLE (PREFIX_0F3A44) },
592d1631
L
7330 { Bad_Opcode },
7331 { Bad_Opcode },
7332 { Bad_Opcode },
f88c9eb0 7333 /* 48 */
592d1631
L
7334 { Bad_Opcode },
7335 { Bad_Opcode },
7336 { Bad_Opcode },
7337 { Bad_Opcode },
7338 { Bad_Opcode },
7339 { Bad_Opcode },
7340 { Bad_Opcode },
7341 { Bad_Opcode },
f88c9eb0 7342 /* 50 */
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 /* 58 */
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
SP
7360 /* 60 */
7361 { PREFIX_TABLE (PREFIX_0F3A60) },
7362 { PREFIX_TABLE (PREFIX_0F3A61) },
7363 { PREFIX_TABLE (PREFIX_0F3A62) },
7364 { PREFIX_TABLE (PREFIX_0F3A63) },
592d1631
L
7365 { Bad_Opcode },
7366 { Bad_Opcode },
7367 { Bad_Opcode },
7368 { Bad_Opcode },
f88c9eb0 7369 /* 68 */
592d1631
L
7370 { Bad_Opcode },
7371 { Bad_Opcode },
7372 { Bad_Opcode },
7373 { Bad_Opcode },
7374 { Bad_Opcode },
7375 { Bad_Opcode },
7376 { Bad_Opcode },
7377 { Bad_Opcode },
f88c9eb0 7378 /* 70 */
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 /* 78 */
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 /* 80 */
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 /* 88 */
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 /* 90 */
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 /* 98 */
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 /* a0 */
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 /* a8 */
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 /* b0 */
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 /* b8 */
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 /* c0 */
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 /* c8 */
592d1631
L
7478 { Bad_Opcode },
7479 { Bad_Opcode },
7480 { Bad_Opcode },
7481 { Bad_Opcode },
a0046408 7482 { PREFIX_TABLE (PREFIX_0F3ACC) },
592d1631 7483 { Bad_Opcode },
48521003
IT
7484 { PREFIX_TABLE (PREFIX_0F3ACE) },
7485 { PREFIX_TABLE (PREFIX_0F3ACF) },
f88c9eb0 7486 /* d0 */
592d1631
L
7487 { Bad_Opcode },
7488 { Bad_Opcode },
7489 { Bad_Opcode },
7490 { Bad_Opcode },
7491 { Bad_Opcode },
7492 { Bad_Opcode },
7493 { Bad_Opcode },
7494 { Bad_Opcode },
f88c9eb0 7495 /* d8 */
592d1631
L
7496 { Bad_Opcode },
7497 { Bad_Opcode },
7498 { Bad_Opcode },
7499 { Bad_Opcode },
7500 { Bad_Opcode },
7501 { Bad_Opcode },
7502 { Bad_Opcode },
f88c9eb0
SP
7503 { PREFIX_TABLE (PREFIX_0F3ADF) },
7504 /* e0 */
592d1631
L
7505 { Bad_Opcode },
7506 { Bad_Opcode },
7507 { Bad_Opcode },
7508 { Bad_Opcode },
7509 { Bad_Opcode },
592d1631
L
7510 { Bad_Opcode },
7511 { Bad_Opcode },
7512 { Bad_Opcode },
85f10a01 7513 /* e8 */
592d1631
L
7514 { Bad_Opcode },
7515 { Bad_Opcode },
7516 { Bad_Opcode },
7517 { Bad_Opcode },
7518 { Bad_Opcode },
7519 { Bad_Opcode },
7520 { Bad_Opcode },
7521 { Bad_Opcode },
85f10a01 7522 /* f0 */
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 /* f8 */
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 },
f88c9eb0
SP
7541};
7542
7543static const struct dis386 xop_table[][256] = {
5dd85c99 7544 /* XOP_08 */
85f10a01
MM
7545 {
7546 /* 00 */
592d1631
L
7547 { Bad_Opcode },
7548 { Bad_Opcode },
7549 { Bad_Opcode },
7550 { Bad_Opcode },
7551 { Bad_Opcode },
7552 { Bad_Opcode },
7553 { Bad_Opcode },
7554 { Bad_Opcode },
85f10a01 7555 /* 08 */
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 /* 10 */
3929df09 7565 { Bad_Opcode },
592d1631
L
7566 { Bad_Opcode },
7567 { Bad_Opcode },
7568 { Bad_Opcode },
7569 { Bad_Opcode },
7570 { Bad_Opcode },
7571 { Bad_Opcode },
7572 { Bad_Opcode },
85f10a01 7573 /* 18 */
592d1631
L
7574 { Bad_Opcode },
7575 { Bad_Opcode },
7576 { Bad_Opcode },
7577 { Bad_Opcode },
7578 { Bad_Opcode },
7579 { Bad_Opcode },
7580 { Bad_Opcode },
7581 { Bad_Opcode },
85f10a01 7582 /* 20 */
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 /* 28 */
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 },
c0f3af97 7600 /* 30 */
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 /* 38 */
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 /* 40 */
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 },
85f10a01 7627 /* 48 */
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 },
c0f3af97 7636 /* 50 */
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 },
85f10a01 7645 /* 58 */
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 },
c1e679ec 7654 /* 60 */
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 },
c0f3af97 7663 /* 68 */
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 },
85f10a01 7672 /* 70 */
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 /* 78 */
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 /* 80 */
592d1631
L
7691 { Bad_Opcode },
7692 { Bad_Opcode },
7693 { Bad_Opcode },
7694 { Bad_Opcode },
7695 { Bad_Opcode },
3a2430e0
JB
7696 { "vpmacssww", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7697 { "vpmacsswd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7698 { "vpmacssdql", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
5dd85c99 7699 /* 88 */
592d1631
L
7700 { Bad_Opcode },
7701 { Bad_Opcode },
7702 { Bad_Opcode },
7703 { Bad_Opcode },
7704 { Bad_Opcode },
7705 { Bad_Opcode },
3a2430e0
JB
7706 { "vpmacssdd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7707 { "vpmacssdqh", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
5dd85c99 7708 /* 90 */
592d1631
L
7709 { Bad_Opcode },
7710 { Bad_Opcode },
7711 { Bad_Opcode },
7712 { Bad_Opcode },
7713 { Bad_Opcode },
3a2430e0
JB
7714 { "vpmacsww", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7715 { "vpmacswd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7716 { "vpmacsdql", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
5dd85c99 7717 /* 98 */
592d1631
L
7718 { Bad_Opcode },
7719 { Bad_Opcode },
7720 { Bad_Opcode },
7721 { Bad_Opcode },
7722 { Bad_Opcode },
7723 { Bad_Opcode },
3a2430e0
JB
7724 { "vpmacsdd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7725 { "vpmacsdqh", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
5dd85c99 7726 /* a0 */
592d1631
L
7727 { Bad_Opcode },
7728 { Bad_Opcode },
3a2430e0
JB
7729 { "vpcmov", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7730 { "vpperm", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
592d1631
L
7731 { Bad_Opcode },
7732 { Bad_Opcode },
3a2430e0 7733 { "vpmadcsswd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
592d1631 7734 { Bad_Opcode },
5dd85c99 7735 /* a8 */
592d1631
L
7736 { Bad_Opcode },
7737 { Bad_Opcode },
7738 { Bad_Opcode },
7739 { Bad_Opcode },
7740 { Bad_Opcode },
7741 { Bad_Opcode },
7742 { Bad_Opcode },
7743 { Bad_Opcode },
5dd85c99 7744 /* b0 */
592d1631
L
7745 { Bad_Opcode },
7746 { Bad_Opcode },
7747 { Bad_Opcode },
7748 { Bad_Opcode },
7749 { Bad_Opcode },
7750 { Bad_Opcode },
3a2430e0 7751 { "vpmadcswd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
592d1631 7752 { Bad_Opcode },
5dd85c99 7753 /* b8 */
592d1631
L
7754 { Bad_Opcode },
7755 { Bad_Opcode },
7756 { Bad_Opcode },
7757 { Bad_Opcode },
7758 { Bad_Opcode },
7759 { Bad_Opcode },
7760 { Bad_Opcode },
7761 { Bad_Opcode },
5dd85c99 7762 /* c0 */
bf890a93
IT
7763 { "vprotb", { XM, Vex_2src_1, Ib }, 0 },
7764 { "vprotw", { XM, Vex_2src_1, Ib }, 0 },
7765 { "vprotd", { XM, Vex_2src_1, Ib }, 0 },
7766 { "vprotq", { XM, Vex_2src_1, Ib }, 0 },
592d1631
L
7767 { Bad_Opcode },
7768 { Bad_Opcode },
7769 { Bad_Opcode },
7770 { Bad_Opcode },
5dd85c99 7771 /* c8 */
592d1631
L
7772 { Bad_Opcode },
7773 { Bad_Opcode },
7774 { Bad_Opcode },
7775 { Bad_Opcode },
ff688e1f
L
7776 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CC) },
7777 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CD) },
7778 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CE) },
7779 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CF) },
5dd85c99 7780 /* d0 */
592d1631
L
7781 { Bad_Opcode },
7782 { Bad_Opcode },
7783 { Bad_Opcode },
7784 { Bad_Opcode },
7785 { Bad_Opcode },
7786 { Bad_Opcode },
7787 { Bad_Opcode },
7788 { Bad_Opcode },
5dd85c99 7789 /* d8 */
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 /* e0 */
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 /* e8 */
592d1631
L
7808 { Bad_Opcode },
7809 { Bad_Opcode },
7810 { Bad_Opcode },
7811 { Bad_Opcode },
ff688e1f
L
7812 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EC) },
7813 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_ED) },
7814 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EE) },
7815 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EF) },
5dd85c99 7816 /* f0 */
592d1631
L
7817 { Bad_Opcode },
7818 { Bad_Opcode },
7819 { Bad_Opcode },
7820 { Bad_Opcode },
7821 { Bad_Opcode },
7822 { Bad_Opcode },
7823 { Bad_Opcode },
7824 { Bad_Opcode },
5dd85c99 7825 /* f8 */
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
SP
7834 },
7835 /* XOP_09 */
7836 {
7837 /* 00 */
592d1631 7838 { Bad_Opcode },
2a2a0f38
QN
7839 { REG_TABLE (REG_XOP_TBM_01) },
7840 { REG_TABLE (REG_XOP_TBM_02) },
592d1631
L
7841 { Bad_Opcode },
7842 { Bad_Opcode },
7843 { Bad_Opcode },
7844 { Bad_Opcode },
7845 { Bad_Opcode },
5dd85c99 7846 /* 08 */
592d1631
L
7847 { Bad_Opcode },
7848 { Bad_Opcode },
7849 { Bad_Opcode },
7850 { Bad_Opcode },
7851 { Bad_Opcode },
7852 { Bad_Opcode },
7853 { Bad_Opcode },
7854 { Bad_Opcode },
5dd85c99 7855 /* 10 */
592d1631
L
7856 { Bad_Opcode },
7857 { Bad_Opcode },
5dd85c99 7858 { REG_TABLE (REG_XOP_LWPCB) },
592d1631
L
7859 { Bad_Opcode },
7860 { Bad_Opcode },
7861 { Bad_Opcode },
7862 { Bad_Opcode },
7863 { Bad_Opcode },
5dd85c99 7864 /* 18 */
592d1631
L
7865 { Bad_Opcode },
7866 { Bad_Opcode },
7867 { Bad_Opcode },
7868 { Bad_Opcode },
7869 { Bad_Opcode },
7870 { Bad_Opcode },
7871 { Bad_Opcode },
7872 { Bad_Opcode },
5dd85c99 7873 /* 20 */
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 /* 28 */
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 /* 30 */
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 /* 38 */
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 /* 40 */
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 /* 48 */
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 /* 50 */
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 /* 58 */
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 /* 60 */
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 /* 68 */
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 /* 70 */
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 /* 78 */
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 /* 80 */
592a252b
L
7982 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_80) },
7983 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_81) },
bf890a93
IT
7984 { "vfrczss", { XM, EXd }, 0 },
7985 { "vfrczsd", { XM, EXq }, 0 },
592d1631
L
7986 { Bad_Opcode },
7987 { Bad_Opcode },
7988 { Bad_Opcode },
7989 { Bad_Opcode },
5dd85c99 7990 /* 88 */
592d1631
L
7991 { Bad_Opcode },
7992 { Bad_Opcode },
7993 { Bad_Opcode },
7994 { Bad_Opcode },
7995 { Bad_Opcode },
7996 { Bad_Opcode },
7997 { Bad_Opcode },
7998 { Bad_Opcode },
5dd85c99 7999 /* 90 */
bf890a93
IT
8000 { "vprotb", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8001 { "vprotw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8002 { "vprotd", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8003 { "vprotq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8004 { "vpshlb", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8005 { "vpshlw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8006 { "vpshld", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8007 { "vpshlq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
5dd85c99 8008 /* 98 */
bf890a93
IT
8009 { "vpshab", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8010 { "vpshaw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8011 { "vpshad", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8012 { "vpshaq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
592d1631
L
8013 { Bad_Opcode },
8014 { Bad_Opcode },
8015 { Bad_Opcode },
8016 { Bad_Opcode },
5dd85c99 8017 /* a0 */
592d1631
L
8018 { Bad_Opcode },
8019 { Bad_Opcode },
8020 { Bad_Opcode },
8021 { Bad_Opcode },
8022 { Bad_Opcode },
8023 { Bad_Opcode },
8024 { Bad_Opcode },
8025 { Bad_Opcode },
5dd85c99 8026 /* a8 */
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 /* b0 */
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 /* b8 */
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 /* c0 */
592d1631 8054 { Bad_Opcode },
bf890a93
IT
8055 { "vphaddbw", { XM, EXxmm }, 0 },
8056 { "vphaddbd", { XM, EXxmm }, 0 },
8057 { "vphaddbq", { XM, EXxmm }, 0 },
592d1631
L
8058 { Bad_Opcode },
8059 { Bad_Opcode },
bf890a93
IT
8060 { "vphaddwd", { XM, EXxmm }, 0 },
8061 { "vphaddwq", { XM, EXxmm }, 0 },
5dd85c99 8062 /* c8 */
592d1631
L
8063 { Bad_Opcode },
8064 { Bad_Opcode },
8065 { Bad_Opcode },
bf890a93 8066 { "vphadddq", { XM, EXxmm }, 0 },
592d1631
L
8067 { Bad_Opcode },
8068 { Bad_Opcode },
8069 { Bad_Opcode },
8070 { Bad_Opcode },
5dd85c99 8071 /* d0 */
592d1631 8072 { Bad_Opcode },
bf890a93
IT
8073 { "vphaddubw", { XM, EXxmm }, 0 },
8074 { "vphaddubd", { XM, EXxmm }, 0 },
8075 { "vphaddubq", { XM, EXxmm }, 0 },
592d1631
L
8076 { Bad_Opcode },
8077 { Bad_Opcode },
bf890a93
IT
8078 { "vphadduwd", { XM, EXxmm }, 0 },
8079 { "vphadduwq", { XM, EXxmm }, 0 },
5dd85c99 8080 /* d8 */
592d1631
L
8081 { Bad_Opcode },
8082 { Bad_Opcode },
8083 { Bad_Opcode },
bf890a93 8084 { "vphaddudq", { XM, EXxmm }, 0 },
592d1631
L
8085 { Bad_Opcode },
8086 { Bad_Opcode },
8087 { Bad_Opcode },
8088 { Bad_Opcode },
5dd85c99 8089 /* e0 */
592d1631 8090 { Bad_Opcode },
bf890a93
IT
8091 { "vphsubbw", { XM, EXxmm }, 0 },
8092 { "vphsubwd", { XM, EXxmm }, 0 },
8093 { "vphsubdq", { XM, EXxmm }, 0 },
592d1631
L
8094 { Bad_Opcode },
8095 { Bad_Opcode },
8096 { Bad_Opcode },
8097 { Bad_Opcode },
4e7d34a6 8098 /* e8 */
592d1631
L
8099 { Bad_Opcode },
8100 { Bad_Opcode },
8101 { Bad_Opcode },
8102 { Bad_Opcode },
8103 { Bad_Opcode },
8104 { Bad_Opcode },
8105 { Bad_Opcode },
8106 { Bad_Opcode },
4e7d34a6 8107 /* f0 */
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 /* f8 */
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 },
f88c9eb0 8126 /* XOP_0A */
4e7d34a6
L
8127 {
8128 /* 00 */
592d1631
L
8129 { Bad_Opcode },
8130 { Bad_Opcode },
8131 { Bad_Opcode },
8132 { Bad_Opcode },
8133 { Bad_Opcode },
8134 { Bad_Opcode },
8135 { Bad_Opcode },
8136 { Bad_Opcode },
4e7d34a6 8137 /* 08 */
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 /* 10 */
c1dc7af5 8147 { "bextrS", { Gdq, Edq, Id }, 0 },
592d1631 8148 { Bad_Opcode },
f88c9eb0 8149 { REG_TABLE (REG_XOP_LWP) },
592d1631
L
8150 { Bad_Opcode },
8151 { Bad_Opcode },
8152 { Bad_Opcode },
8153 { Bad_Opcode },
8154 { Bad_Opcode },
4e7d34a6 8155 /* 18 */
592d1631
L
8156 { Bad_Opcode },
8157 { Bad_Opcode },
8158 { Bad_Opcode },
8159 { Bad_Opcode },
8160 { Bad_Opcode },
8161 { Bad_Opcode },
8162 { Bad_Opcode },
8163 { Bad_Opcode },
4e7d34a6 8164 /* 20 */
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 /* 28 */
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 /* 30 */
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 },
c0f3af97 8191 /* 38 */
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 /* 40 */
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 },
c1e679ec 8209 /* 48 */
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 /* 50 */
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 },
4e7d34a6 8227 /* 58 */
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 /* 60 */
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 /* 68 */
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 /* 70 */
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 /* 78 */
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 /* 80 */
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 /* 88 */
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 /* 90 */
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 /* 98 */
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 /* a0 */
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 /* a8 */
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 },
d5d7db8e 8326 /* b0 */
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 },
85f10a01 8335 /* b8 */
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 /* c0 */
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 /* c8 */
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 /* d0 */
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 /* d8 */
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 /* e0 */
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 /* e8 */
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 /* f0 */
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 /* f8 */
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 },
c0f3af97
L
8417};
8418
8419static const struct dis386 vex_table[][256] = {
8420 /* VEX_0F */
85f10a01
MM
8421 {
8422 /* 00 */
592d1631
L
8423 { Bad_Opcode },
8424 { Bad_Opcode },
8425 { Bad_Opcode },
8426 { Bad_Opcode },
8427 { Bad_Opcode },
8428 { Bad_Opcode },
8429 { Bad_Opcode },
8430 { Bad_Opcode },
85f10a01 8431 /* 08 */
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 },
c0f3af97 8440 /* 10 */
592a252b
L
8441 { PREFIX_TABLE (PREFIX_VEX_0F10) },
8442 { PREFIX_TABLE (PREFIX_VEX_0F11) },
8443 { PREFIX_TABLE (PREFIX_VEX_0F12) },
8444 { MOD_TABLE (MOD_VEX_0F13) },
ec6f095a
L
8445 { "vunpcklpX", { XM, Vex, EXx }, 0 },
8446 { "vunpckhpX", { XM, Vex, EXx }, 0 },
592a252b
L
8447 { PREFIX_TABLE (PREFIX_VEX_0F16) },
8448 { MOD_TABLE (MOD_VEX_0F17) },
c0f3af97 8449 /* 18 */
592d1631
L
8450 { Bad_Opcode },
8451 { Bad_Opcode },
8452 { Bad_Opcode },
8453 { Bad_Opcode },
8454 { Bad_Opcode },
8455 { Bad_Opcode },
8456 { Bad_Opcode },
8457 { Bad_Opcode },
c0f3af97 8458 /* 20 */
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 /* 28 */
ec6f095a
L
8468 { "vmovapX", { XM, EXx }, 0 },
8469 { "vmovapX", { EXxS, XM }, 0 },
592a252b
L
8470 { PREFIX_TABLE (PREFIX_VEX_0F2A) },
8471 { MOD_TABLE (MOD_VEX_0F2B) },
8472 { PREFIX_TABLE (PREFIX_VEX_0F2C) },
8473 { PREFIX_TABLE (PREFIX_VEX_0F2D) },
8474 { PREFIX_TABLE (PREFIX_VEX_0F2E) },
8475 { PREFIX_TABLE (PREFIX_VEX_0F2F) },
85f10a01 8476 /* 30 */
592d1631
L
8477 { Bad_Opcode },
8478 { Bad_Opcode },
8479 { Bad_Opcode },
8480 { Bad_Opcode },
8481 { Bad_Opcode },
8482 { Bad_Opcode },
8483 { Bad_Opcode },
8484 { Bad_Opcode },
4e7d34a6 8485 /* 38 */
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 },
d5d7db8e 8494 /* 40 */
592d1631 8495 { Bad_Opcode },
43234a1e
L
8496 { PREFIX_TABLE (PREFIX_VEX_0F41) },
8497 { PREFIX_TABLE (PREFIX_VEX_0F42) },
592d1631 8498 { Bad_Opcode },
43234a1e
L
8499 { PREFIX_TABLE (PREFIX_VEX_0F44) },
8500 { PREFIX_TABLE (PREFIX_VEX_0F45) },
8501 { PREFIX_TABLE (PREFIX_VEX_0F46) },
8502 { PREFIX_TABLE (PREFIX_VEX_0F47) },
85f10a01 8503 /* 48 */
592d1631
L
8504 { Bad_Opcode },
8505 { Bad_Opcode },
1ba585e8 8506 { PREFIX_TABLE (PREFIX_VEX_0F4A) },
43234a1e 8507 { PREFIX_TABLE (PREFIX_VEX_0F4B) },
592d1631
L
8508 { Bad_Opcode },
8509 { Bad_Opcode },
8510 { Bad_Opcode },
8511 { Bad_Opcode },
d5d7db8e 8512 /* 50 */
592a252b
L
8513 { MOD_TABLE (MOD_VEX_0F50) },
8514 { PREFIX_TABLE (PREFIX_VEX_0F51) },
8515 { PREFIX_TABLE (PREFIX_VEX_0F52) },
8516 { PREFIX_TABLE (PREFIX_VEX_0F53) },
bf890a93
IT
8517 { "vandpX", { XM, Vex, EXx }, 0 },
8518 { "vandnpX", { XM, Vex, EXx }, 0 },
8519 { "vorpX", { XM, Vex, EXx }, 0 },
8520 { "vxorpX", { XM, Vex, EXx }, 0 },
c0f3af97 8521 /* 58 */
592a252b
L
8522 { PREFIX_TABLE (PREFIX_VEX_0F58) },
8523 { PREFIX_TABLE (PREFIX_VEX_0F59) },
8524 { PREFIX_TABLE (PREFIX_VEX_0F5A) },
8525 { PREFIX_TABLE (PREFIX_VEX_0F5B) },
8526 { PREFIX_TABLE (PREFIX_VEX_0F5C) },
8527 { PREFIX_TABLE (PREFIX_VEX_0F5D) },
8528 { PREFIX_TABLE (PREFIX_VEX_0F5E) },
8529 { PREFIX_TABLE (PREFIX_VEX_0F5F) },
c0f3af97 8530 /* 60 */
592a252b
L
8531 { PREFIX_TABLE (PREFIX_VEX_0F60) },
8532 { PREFIX_TABLE (PREFIX_VEX_0F61) },
8533 { PREFIX_TABLE (PREFIX_VEX_0F62) },
8534 { PREFIX_TABLE (PREFIX_VEX_0F63) },
8535 { PREFIX_TABLE (PREFIX_VEX_0F64) },
8536 { PREFIX_TABLE (PREFIX_VEX_0F65) },
8537 { PREFIX_TABLE (PREFIX_VEX_0F66) },
8538 { PREFIX_TABLE (PREFIX_VEX_0F67) },
c0f3af97 8539 /* 68 */
592a252b
L
8540 { PREFIX_TABLE (PREFIX_VEX_0F68) },
8541 { PREFIX_TABLE (PREFIX_VEX_0F69) },
8542 { PREFIX_TABLE (PREFIX_VEX_0F6A) },
8543 { PREFIX_TABLE (PREFIX_VEX_0F6B) },
8544 { PREFIX_TABLE (PREFIX_VEX_0F6C) },
8545 { PREFIX_TABLE (PREFIX_VEX_0F6D) },
8546 { PREFIX_TABLE (PREFIX_VEX_0F6E) },
8547 { PREFIX_TABLE (PREFIX_VEX_0F6F) },
c0f3af97 8548 /* 70 */
592a252b
L
8549 { PREFIX_TABLE (PREFIX_VEX_0F70) },
8550 { REG_TABLE (REG_VEX_0F71) },
8551 { REG_TABLE (REG_VEX_0F72) },
8552 { REG_TABLE (REG_VEX_0F73) },
8553 { PREFIX_TABLE (PREFIX_VEX_0F74) },
8554 { PREFIX_TABLE (PREFIX_VEX_0F75) },
8555 { PREFIX_TABLE (PREFIX_VEX_0F76) },
8556 { PREFIX_TABLE (PREFIX_VEX_0F77) },
c0f3af97 8557 /* 78 */
592d1631
L
8558 { Bad_Opcode },
8559 { Bad_Opcode },
8560 { Bad_Opcode },
8561 { Bad_Opcode },
592a252b
L
8562 { PREFIX_TABLE (PREFIX_VEX_0F7C) },
8563 { PREFIX_TABLE (PREFIX_VEX_0F7D) },
8564 { PREFIX_TABLE (PREFIX_VEX_0F7E) },
8565 { PREFIX_TABLE (PREFIX_VEX_0F7F) },
c0f3af97 8566 /* 80 */
592d1631
L
8567 { Bad_Opcode },
8568 { Bad_Opcode },
8569 { Bad_Opcode },
8570 { Bad_Opcode },
8571 { Bad_Opcode },
8572 { Bad_Opcode },
8573 { Bad_Opcode },
8574 { Bad_Opcode },
c0f3af97 8575 /* 88 */
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 /* 90 */
43234a1e
L
8585 { PREFIX_TABLE (PREFIX_VEX_0F90) },
8586 { PREFIX_TABLE (PREFIX_VEX_0F91) },
8587 { PREFIX_TABLE (PREFIX_VEX_0F92) },
8588 { PREFIX_TABLE (PREFIX_VEX_0F93) },
592d1631
L
8589 { Bad_Opcode },
8590 { Bad_Opcode },
8591 { Bad_Opcode },
8592 { Bad_Opcode },
c0f3af97 8593 /* 98 */
43234a1e 8594 { PREFIX_TABLE (PREFIX_VEX_0F98) },
1ba585e8 8595 { PREFIX_TABLE (PREFIX_VEX_0F99) },
592d1631
L
8596 { Bad_Opcode },
8597 { Bad_Opcode },
8598 { Bad_Opcode },
8599 { Bad_Opcode },
8600 { Bad_Opcode },
8601 { Bad_Opcode },
c0f3af97 8602 /* a0 */
592d1631
L
8603 { Bad_Opcode },
8604 { Bad_Opcode },
8605 { Bad_Opcode },
8606 { Bad_Opcode },
8607 { Bad_Opcode },
8608 { Bad_Opcode },
8609 { Bad_Opcode },
8610 { Bad_Opcode },
c0f3af97 8611 /* a8 */
592d1631
L
8612 { Bad_Opcode },
8613 { Bad_Opcode },
8614 { Bad_Opcode },
8615 { Bad_Opcode },
8616 { Bad_Opcode },
8617 { Bad_Opcode },
592a252b 8618 { REG_TABLE (REG_VEX_0FAE) },
592d1631 8619 { Bad_Opcode },
c0f3af97 8620 /* b0 */
592d1631
L
8621 { Bad_Opcode },
8622 { Bad_Opcode },
8623 { Bad_Opcode },
8624 { Bad_Opcode },
8625 { Bad_Opcode },
8626 { Bad_Opcode },
8627 { Bad_Opcode },
8628 { Bad_Opcode },
c0f3af97 8629 /* b8 */
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 /* c0 */
592d1631
L
8639 { Bad_Opcode },
8640 { Bad_Opcode },
592a252b 8641 { PREFIX_TABLE (PREFIX_VEX_0FC2) },
592d1631 8642 { Bad_Opcode },
592a252b
L
8643 { PREFIX_TABLE (PREFIX_VEX_0FC4) },
8644 { PREFIX_TABLE (PREFIX_VEX_0FC5) },
bf890a93 8645 { "vshufpX", { XM, Vex, EXx, Ib }, 0 },
592d1631 8646 { Bad_Opcode },
c0f3af97 8647 /* c8 */
592d1631
L
8648 { Bad_Opcode },
8649 { Bad_Opcode },
8650 { Bad_Opcode },
8651 { Bad_Opcode },
8652 { Bad_Opcode },
8653 { Bad_Opcode },
8654 { Bad_Opcode },
8655 { Bad_Opcode },
c0f3af97 8656 /* d0 */
592a252b
L
8657 { PREFIX_TABLE (PREFIX_VEX_0FD0) },
8658 { PREFIX_TABLE (PREFIX_VEX_0FD1) },
8659 { PREFIX_TABLE (PREFIX_VEX_0FD2) },
8660 { PREFIX_TABLE (PREFIX_VEX_0FD3) },
8661 { PREFIX_TABLE (PREFIX_VEX_0FD4) },
8662 { PREFIX_TABLE (PREFIX_VEX_0FD5) },
8663 { PREFIX_TABLE (PREFIX_VEX_0FD6) },
8664 { PREFIX_TABLE (PREFIX_VEX_0FD7) },
c0f3af97 8665 /* d8 */
592a252b
L
8666 { PREFIX_TABLE (PREFIX_VEX_0FD8) },
8667 { PREFIX_TABLE (PREFIX_VEX_0FD9) },
8668 { PREFIX_TABLE (PREFIX_VEX_0FDA) },
8669 { PREFIX_TABLE (PREFIX_VEX_0FDB) },
8670 { PREFIX_TABLE (PREFIX_VEX_0FDC) },
8671 { PREFIX_TABLE (PREFIX_VEX_0FDD) },
8672 { PREFIX_TABLE (PREFIX_VEX_0FDE) },
8673 { PREFIX_TABLE (PREFIX_VEX_0FDF) },
c0f3af97 8674 /* e0 */
592a252b
L
8675 { PREFIX_TABLE (PREFIX_VEX_0FE0) },
8676 { PREFIX_TABLE (PREFIX_VEX_0FE1) },
8677 { PREFIX_TABLE (PREFIX_VEX_0FE2) },
8678 { PREFIX_TABLE (PREFIX_VEX_0FE3) },
8679 { PREFIX_TABLE (PREFIX_VEX_0FE4) },
8680 { PREFIX_TABLE (PREFIX_VEX_0FE5) },
8681 { PREFIX_TABLE (PREFIX_VEX_0FE6) },
8682 { PREFIX_TABLE (PREFIX_VEX_0FE7) },
c0f3af97 8683 /* e8 */
592a252b
L
8684 { PREFIX_TABLE (PREFIX_VEX_0FE8) },
8685 { PREFIX_TABLE (PREFIX_VEX_0FE9) },
8686 { PREFIX_TABLE (PREFIX_VEX_0FEA) },
8687 { PREFIX_TABLE (PREFIX_VEX_0FEB) },
8688 { PREFIX_TABLE (PREFIX_VEX_0FEC) },
8689 { PREFIX_TABLE (PREFIX_VEX_0FED) },
8690 { PREFIX_TABLE (PREFIX_VEX_0FEE) },
8691 { PREFIX_TABLE (PREFIX_VEX_0FEF) },
c0f3af97 8692 /* f0 */
592a252b
L
8693 { PREFIX_TABLE (PREFIX_VEX_0FF0) },
8694 { PREFIX_TABLE (PREFIX_VEX_0FF1) },
8695 { PREFIX_TABLE (PREFIX_VEX_0FF2) },
8696 { PREFIX_TABLE (PREFIX_VEX_0FF3) },
8697 { PREFIX_TABLE (PREFIX_VEX_0FF4) },
8698 { PREFIX_TABLE (PREFIX_VEX_0FF5) },
8699 { PREFIX_TABLE (PREFIX_VEX_0FF6) },
8700 { PREFIX_TABLE (PREFIX_VEX_0FF7) },
c0f3af97 8701 /* f8 */
592a252b
L
8702 { PREFIX_TABLE (PREFIX_VEX_0FF8) },
8703 { PREFIX_TABLE (PREFIX_VEX_0FF9) },
8704 { PREFIX_TABLE (PREFIX_VEX_0FFA) },
8705 { PREFIX_TABLE (PREFIX_VEX_0FFB) },
8706 { PREFIX_TABLE (PREFIX_VEX_0FFC) },
8707 { PREFIX_TABLE (PREFIX_VEX_0FFD) },
8708 { PREFIX_TABLE (PREFIX_VEX_0FFE) },
592d1631 8709 { Bad_Opcode },
c0f3af97
L
8710 },
8711 /* VEX_0F38 */
8712 {
8713 /* 00 */
592a252b
L
8714 { PREFIX_TABLE (PREFIX_VEX_0F3800) },
8715 { PREFIX_TABLE (PREFIX_VEX_0F3801) },
8716 { PREFIX_TABLE (PREFIX_VEX_0F3802) },
8717 { PREFIX_TABLE (PREFIX_VEX_0F3803) },
8718 { PREFIX_TABLE (PREFIX_VEX_0F3804) },
8719 { PREFIX_TABLE (PREFIX_VEX_0F3805) },
8720 { PREFIX_TABLE (PREFIX_VEX_0F3806) },
8721 { PREFIX_TABLE (PREFIX_VEX_0F3807) },
c0f3af97 8722 /* 08 */
592a252b
L
8723 { PREFIX_TABLE (PREFIX_VEX_0F3808) },
8724 { PREFIX_TABLE (PREFIX_VEX_0F3809) },
8725 { PREFIX_TABLE (PREFIX_VEX_0F380A) },
8726 { PREFIX_TABLE (PREFIX_VEX_0F380B) },
8727 { PREFIX_TABLE (PREFIX_VEX_0F380C) },
8728 { PREFIX_TABLE (PREFIX_VEX_0F380D) },
8729 { PREFIX_TABLE (PREFIX_VEX_0F380E) },
8730 { PREFIX_TABLE (PREFIX_VEX_0F380F) },
c0f3af97 8731 /* 10 */
592d1631
L
8732 { Bad_Opcode },
8733 { Bad_Opcode },
8734 { Bad_Opcode },
592a252b 8735 { PREFIX_TABLE (PREFIX_VEX_0F3813) },
592d1631
L
8736 { Bad_Opcode },
8737 { Bad_Opcode },
6c30d220 8738 { PREFIX_TABLE (PREFIX_VEX_0F3816) },
592a252b 8739 { PREFIX_TABLE (PREFIX_VEX_0F3817) },
c0f3af97 8740 /* 18 */
592a252b
L
8741 { PREFIX_TABLE (PREFIX_VEX_0F3818) },
8742 { PREFIX_TABLE (PREFIX_VEX_0F3819) },
8743 { PREFIX_TABLE (PREFIX_VEX_0F381A) },
592d1631 8744 { Bad_Opcode },
592a252b
L
8745 { PREFIX_TABLE (PREFIX_VEX_0F381C) },
8746 { PREFIX_TABLE (PREFIX_VEX_0F381D) },
8747 { PREFIX_TABLE (PREFIX_VEX_0F381E) },
592d1631 8748 { Bad_Opcode },
c0f3af97 8749 /* 20 */
592a252b
L
8750 { PREFIX_TABLE (PREFIX_VEX_0F3820) },
8751 { PREFIX_TABLE (PREFIX_VEX_0F3821) },
8752 { PREFIX_TABLE (PREFIX_VEX_0F3822) },
8753 { PREFIX_TABLE (PREFIX_VEX_0F3823) },
8754 { PREFIX_TABLE (PREFIX_VEX_0F3824) },
8755 { PREFIX_TABLE (PREFIX_VEX_0F3825) },
592d1631
L
8756 { Bad_Opcode },
8757 { Bad_Opcode },
c0f3af97 8758 /* 28 */
592a252b
L
8759 { PREFIX_TABLE (PREFIX_VEX_0F3828) },
8760 { PREFIX_TABLE (PREFIX_VEX_0F3829) },
8761 { PREFIX_TABLE (PREFIX_VEX_0F382A) },
8762 { PREFIX_TABLE (PREFIX_VEX_0F382B) },
8763 { PREFIX_TABLE (PREFIX_VEX_0F382C) },
8764 { PREFIX_TABLE (PREFIX_VEX_0F382D) },
8765 { PREFIX_TABLE (PREFIX_VEX_0F382E) },
8766 { PREFIX_TABLE (PREFIX_VEX_0F382F) },
c0f3af97 8767 /* 30 */
592a252b
L
8768 { PREFIX_TABLE (PREFIX_VEX_0F3830) },
8769 { PREFIX_TABLE (PREFIX_VEX_0F3831) },
8770 { PREFIX_TABLE (PREFIX_VEX_0F3832) },
8771 { PREFIX_TABLE (PREFIX_VEX_0F3833) },
8772 { PREFIX_TABLE (PREFIX_VEX_0F3834) },
8773 { PREFIX_TABLE (PREFIX_VEX_0F3835) },
6c30d220 8774 { PREFIX_TABLE (PREFIX_VEX_0F3836) },
592a252b 8775 { PREFIX_TABLE (PREFIX_VEX_0F3837) },
c0f3af97 8776 /* 38 */
592a252b
L
8777 { PREFIX_TABLE (PREFIX_VEX_0F3838) },
8778 { PREFIX_TABLE (PREFIX_VEX_0F3839) },
8779 { PREFIX_TABLE (PREFIX_VEX_0F383A) },
8780 { PREFIX_TABLE (PREFIX_VEX_0F383B) },
8781 { PREFIX_TABLE (PREFIX_VEX_0F383C) },
8782 { PREFIX_TABLE (PREFIX_VEX_0F383D) },
8783 { PREFIX_TABLE (PREFIX_VEX_0F383E) },
8784 { PREFIX_TABLE (PREFIX_VEX_0F383F) },
c0f3af97 8785 /* 40 */
592a252b
L
8786 { PREFIX_TABLE (PREFIX_VEX_0F3840) },
8787 { PREFIX_TABLE (PREFIX_VEX_0F3841) },
592d1631
L
8788 { Bad_Opcode },
8789 { Bad_Opcode },
8790 { Bad_Opcode },
6c30d220
L
8791 { PREFIX_TABLE (PREFIX_VEX_0F3845) },
8792 { PREFIX_TABLE (PREFIX_VEX_0F3846) },
8793 { PREFIX_TABLE (PREFIX_VEX_0F3847) },
c0f3af97 8794 /* 48 */
592d1631
L
8795 { Bad_Opcode },
8796 { Bad_Opcode },
8797 { Bad_Opcode },
8798 { Bad_Opcode },
8799 { Bad_Opcode },
8800 { Bad_Opcode },
8801 { Bad_Opcode },
8802 { Bad_Opcode },
c0f3af97 8803 /* 50 */
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 /* 58 */
6c30d220
L
8813 { PREFIX_TABLE (PREFIX_VEX_0F3858) },
8814 { PREFIX_TABLE (PREFIX_VEX_0F3859) },
8815 { PREFIX_TABLE (PREFIX_VEX_0F385A) },
592d1631
L
8816 { Bad_Opcode },
8817 { Bad_Opcode },
8818 { Bad_Opcode },
8819 { Bad_Opcode },
8820 { Bad_Opcode },
c0f3af97 8821 /* 60 */
592d1631
L
8822 { Bad_Opcode },
8823 { Bad_Opcode },
8824 { Bad_Opcode },
8825 { Bad_Opcode },
8826 { Bad_Opcode },
8827 { Bad_Opcode },
8828 { Bad_Opcode },
8829 { Bad_Opcode },
c0f3af97 8830 /* 68 */
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 /* 70 */
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 /* 78 */
6c30d220
L
8849 { PREFIX_TABLE (PREFIX_VEX_0F3878) },
8850 { PREFIX_TABLE (PREFIX_VEX_0F3879) },
592d1631
L
8851 { Bad_Opcode },
8852 { Bad_Opcode },
8853 { Bad_Opcode },
8854 { Bad_Opcode },
8855 { Bad_Opcode },
8856 { Bad_Opcode },
c0f3af97 8857 /* 80 */
592d1631
L
8858 { Bad_Opcode },
8859 { Bad_Opcode },
8860 { Bad_Opcode },
8861 { Bad_Opcode },
8862 { Bad_Opcode },
8863 { Bad_Opcode },
8864 { Bad_Opcode },
8865 { Bad_Opcode },
c0f3af97 8866 /* 88 */
592d1631
L
8867 { Bad_Opcode },
8868 { Bad_Opcode },
8869 { Bad_Opcode },
8870 { Bad_Opcode },
6c30d220 8871 { PREFIX_TABLE (PREFIX_VEX_0F388C) },
592d1631 8872 { Bad_Opcode },
6c30d220 8873 { PREFIX_TABLE (PREFIX_VEX_0F388E) },
592d1631 8874 { Bad_Opcode },
c0f3af97 8875 /* 90 */
6c30d220
L
8876 { PREFIX_TABLE (PREFIX_VEX_0F3890) },
8877 { PREFIX_TABLE (PREFIX_VEX_0F3891) },
8878 { PREFIX_TABLE (PREFIX_VEX_0F3892) },
8879 { PREFIX_TABLE (PREFIX_VEX_0F3893) },
592d1631
L
8880 { Bad_Opcode },
8881 { Bad_Opcode },
592a252b
L
8882 { PREFIX_TABLE (PREFIX_VEX_0F3896) },
8883 { PREFIX_TABLE (PREFIX_VEX_0F3897) },
c0f3af97 8884 /* 98 */
592a252b
L
8885 { PREFIX_TABLE (PREFIX_VEX_0F3898) },
8886 { PREFIX_TABLE (PREFIX_VEX_0F3899) },
8887 { PREFIX_TABLE (PREFIX_VEX_0F389A) },
8888 { PREFIX_TABLE (PREFIX_VEX_0F389B) },
8889 { PREFIX_TABLE (PREFIX_VEX_0F389C) },
8890 { PREFIX_TABLE (PREFIX_VEX_0F389D) },
8891 { PREFIX_TABLE (PREFIX_VEX_0F389E) },
8892 { PREFIX_TABLE (PREFIX_VEX_0F389F) },
c0f3af97 8893 /* a0 */
592d1631
L
8894 { Bad_Opcode },
8895 { Bad_Opcode },
8896 { Bad_Opcode },
8897 { Bad_Opcode },
8898 { Bad_Opcode },
8899 { Bad_Opcode },
592a252b
L
8900 { PREFIX_TABLE (PREFIX_VEX_0F38A6) },
8901 { PREFIX_TABLE (PREFIX_VEX_0F38A7) },
c0f3af97 8902 /* a8 */
592a252b
L
8903 { PREFIX_TABLE (PREFIX_VEX_0F38A8) },
8904 { PREFIX_TABLE (PREFIX_VEX_0F38A9) },
8905 { PREFIX_TABLE (PREFIX_VEX_0F38AA) },
8906 { PREFIX_TABLE (PREFIX_VEX_0F38AB) },
8907 { PREFIX_TABLE (PREFIX_VEX_0F38AC) },
8908 { PREFIX_TABLE (PREFIX_VEX_0F38AD) },
8909 { PREFIX_TABLE (PREFIX_VEX_0F38AE) },
8910 { PREFIX_TABLE (PREFIX_VEX_0F38AF) },
c0f3af97 8911 /* b0 */
592d1631
L
8912 { Bad_Opcode },
8913 { Bad_Opcode },
8914 { Bad_Opcode },
8915 { Bad_Opcode },
8916 { Bad_Opcode },
8917 { Bad_Opcode },
592a252b
L
8918 { PREFIX_TABLE (PREFIX_VEX_0F38B6) },
8919 { PREFIX_TABLE (PREFIX_VEX_0F38B7) },
c0f3af97 8920 /* b8 */
592a252b
L
8921 { PREFIX_TABLE (PREFIX_VEX_0F38B8) },
8922 { PREFIX_TABLE (PREFIX_VEX_0F38B9) },
8923 { PREFIX_TABLE (PREFIX_VEX_0F38BA) },
8924 { PREFIX_TABLE (PREFIX_VEX_0F38BB) },
8925 { PREFIX_TABLE (PREFIX_VEX_0F38BC) },
8926 { PREFIX_TABLE (PREFIX_VEX_0F38BD) },
8927 { PREFIX_TABLE (PREFIX_VEX_0F38BE) },
8928 { PREFIX_TABLE (PREFIX_VEX_0F38BF) },
c0f3af97 8929 /* c0 */
592d1631
L
8930 { Bad_Opcode },
8931 { Bad_Opcode },
8932 { Bad_Opcode },
8933 { Bad_Opcode },
8934 { Bad_Opcode },
8935 { Bad_Opcode },
8936 { Bad_Opcode },
8937 { Bad_Opcode },
c0f3af97 8938 /* c8 */
592d1631
L
8939 { Bad_Opcode },
8940 { Bad_Opcode },
8941 { Bad_Opcode },
8942 { Bad_Opcode },
8943 { Bad_Opcode },
8944 { Bad_Opcode },
8945 { Bad_Opcode },
48521003 8946 { PREFIX_TABLE (PREFIX_VEX_0F38CF) },
c0f3af97 8947 /* d0 */
592d1631
L
8948 { Bad_Opcode },
8949 { Bad_Opcode },
8950 { Bad_Opcode },
8951 { Bad_Opcode },
8952 { Bad_Opcode },
8953 { Bad_Opcode },
8954 { Bad_Opcode },
8955 { Bad_Opcode },
c0f3af97 8956 /* d8 */
592d1631
L
8957 { Bad_Opcode },
8958 { Bad_Opcode },
8959 { Bad_Opcode },
592a252b
L
8960 { PREFIX_TABLE (PREFIX_VEX_0F38DB) },
8961 { PREFIX_TABLE (PREFIX_VEX_0F38DC) },
8962 { PREFIX_TABLE (PREFIX_VEX_0F38DD) },
8963 { PREFIX_TABLE (PREFIX_VEX_0F38DE) },
8964 { PREFIX_TABLE (PREFIX_VEX_0F38DF) },
c0f3af97 8965 /* e0 */
592d1631
L
8966 { Bad_Opcode },
8967 { Bad_Opcode },
8968 { Bad_Opcode },
8969 { Bad_Opcode },
8970 { Bad_Opcode },
8971 { Bad_Opcode },
8972 { Bad_Opcode },
8973 { Bad_Opcode },
c0f3af97 8974 /* e8 */
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 /* f0 */
592d1631
L
8984 { Bad_Opcode },
8985 { Bad_Opcode },
f12dc422
L
8986 { PREFIX_TABLE (PREFIX_VEX_0F38F2) },
8987 { REG_TABLE (REG_VEX_0F38F3) },
592d1631 8988 { Bad_Opcode },
6c30d220
L
8989 { PREFIX_TABLE (PREFIX_VEX_0F38F5) },
8990 { PREFIX_TABLE (PREFIX_VEX_0F38F6) },
f12dc422 8991 { PREFIX_TABLE (PREFIX_VEX_0F38F7) },
c0f3af97 8992 /* f8 */
592d1631
L
8993 { Bad_Opcode },
8994 { Bad_Opcode },
8995 { Bad_Opcode },
8996 { Bad_Opcode },
8997 { Bad_Opcode },
8998 { Bad_Opcode },
8999 { Bad_Opcode },
9000 { Bad_Opcode },
c0f3af97
L
9001 },
9002 /* VEX_0F3A */
9003 {
9004 /* 00 */
6c30d220
L
9005 { PREFIX_TABLE (PREFIX_VEX_0F3A00) },
9006 { PREFIX_TABLE (PREFIX_VEX_0F3A01) },
9007 { PREFIX_TABLE (PREFIX_VEX_0F3A02) },
592d1631 9008 { Bad_Opcode },
592a252b
L
9009 { PREFIX_TABLE (PREFIX_VEX_0F3A04) },
9010 { PREFIX_TABLE (PREFIX_VEX_0F3A05) },
9011 { PREFIX_TABLE (PREFIX_VEX_0F3A06) },
592d1631 9012 { Bad_Opcode },
c0f3af97 9013 /* 08 */
592a252b
L
9014 { PREFIX_TABLE (PREFIX_VEX_0F3A08) },
9015 { PREFIX_TABLE (PREFIX_VEX_0F3A09) },
9016 { PREFIX_TABLE (PREFIX_VEX_0F3A0A) },
9017 { PREFIX_TABLE (PREFIX_VEX_0F3A0B) },
9018 { PREFIX_TABLE (PREFIX_VEX_0F3A0C) },
9019 { PREFIX_TABLE (PREFIX_VEX_0F3A0D) },
9020 { PREFIX_TABLE (PREFIX_VEX_0F3A0E) },
9021 { PREFIX_TABLE (PREFIX_VEX_0F3A0F) },
c0f3af97 9022 /* 10 */
592d1631
L
9023 { Bad_Opcode },
9024 { Bad_Opcode },
9025 { Bad_Opcode },
9026 { Bad_Opcode },
592a252b
L
9027 { PREFIX_TABLE (PREFIX_VEX_0F3A14) },
9028 { PREFIX_TABLE (PREFIX_VEX_0F3A15) },
9029 { PREFIX_TABLE (PREFIX_VEX_0F3A16) },
9030 { PREFIX_TABLE (PREFIX_VEX_0F3A17) },
c0f3af97 9031 /* 18 */
592a252b
L
9032 { PREFIX_TABLE (PREFIX_VEX_0F3A18) },
9033 { PREFIX_TABLE (PREFIX_VEX_0F3A19) },
592d1631
L
9034 { Bad_Opcode },
9035 { Bad_Opcode },
9036 { Bad_Opcode },
592a252b 9037 { PREFIX_TABLE (PREFIX_VEX_0F3A1D) },
592d1631
L
9038 { Bad_Opcode },
9039 { Bad_Opcode },
c0f3af97 9040 /* 20 */
592a252b
L
9041 { PREFIX_TABLE (PREFIX_VEX_0F3A20) },
9042 { PREFIX_TABLE (PREFIX_VEX_0F3A21) },
9043 { PREFIX_TABLE (PREFIX_VEX_0F3A22) },
592d1631
L
9044 { Bad_Opcode },
9045 { Bad_Opcode },
9046 { Bad_Opcode },
9047 { Bad_Opcode },
9048 { Bad_Opcode },
c0f3af97 9049 /* 28 */
592d1631
L
9050 { Bad_Opcode },
9051 { Bad_Opcode },
9052 { Bad_Opcode },
9053 { Bad_Opcode },
9054 { Bad_Opcode },
9055 { Bad_Opcode },
9056 { Bad_Opcode },
9057 { Bad_Opcode },
c0f3af97 9058 /* 30 */
43234a1e 9059 { PREFIX_TABLE (PREFIX_VEX_0F3A30) },
1ba585e8 9060 { PREFIX_TABLE (PREFIX_VEX_0F3A31) },
43234a1e 9061 { PREFIX_TABLE (PREFIX_VEX_0F3A32) },
1ba585e8 9062 { PREFIX_TABLE (PREFIX_VEX_0F3A33) },
592d1631
L
9063 { Bad_Opcode },
9064 { Bad_Opcode },
9065 { Bad_Opcode },
9066 { Bad_Opcode },
c0f3af97 9067 /* 38 */
6c30d220
L
9068 { PREFIX_TABLE (PREFIX_VEX_0F3A38) },
9069 { PREFIX_TABLE (PREFIX_VEX_0F3A39) },
592d1631
L
9070 { Bad_Opcode },
9071 { Bad_Opcode },
9072 { Bad_Opcode },
9073 { Bad_Opcode },
9074 { Bad_Opcode },
9075 { Bad_Opcode },
c0f3af97 9076 /* 40 */
592a252b
L
9077 { PREFIX_TABLE (PREFIX_VEX_0F3A40) },
9078 { PREFIX_TABLE (PREFIX_VEX_0F3A41) },
9079 { PREFIX_TABLE (PREFIX_VEX_0F3A42) },
592d1631 9080 { Bad_Opcode },
592a252b 9081 { PREFIX_TABLE (PREFIX_VEX_0F3A44) },
592d1631 9082 { Bad_Opcode },
6c30d220 9083 { PREFIX_TABLE (PREFIX_VEX_0F3A46) },
592d1631 9084 { Bad_Opcode },
c0f3af97 9085 /* 48 */
592a252b
L
9086 { PREFIX_TABLE (PREFIX_VEX_0F3A48) },
9087 { PREFIX_TABLE (PREFIX_VEX_0F3A49) },
9088 { PREFIX_TABLE (PREFIX_VEX_0F3A4A) },
9089 { PREFIX_TABLE (PREFIX_VEX_0F3A4B) },
9090 { PREFIX_TABLE (PREFIX_VEX_0F3A4C) },
592d1631
L
9091 { Bad_Opcode },
9092 { Bad_Opcode },
9093 { Bad_Opcode },
c0f3af97 9094 /* 50 */
592d1631
L
9095 { Bad_Opcode },
9096 { Bad_Opcode },
9097 { Bad_Opcode },
9098 { Bad_Opcode },
9099 { Bad_Opcode },
9100 { Bad_Opcode },
9101 { Bad_Opcode },
9102 { Bad_Opcode },
c0f3af97 9103 /* 58 */
592d1631
L
9104 { Bad_Opcode },
9105 { Bad_Opcode },
9106 { Bad_Opcode },
9107 { Bad_Opcode },
592a252b
L
9108 { PREFIX_TABLE (PREFIX_VEX_0F3A5C) },
9109 { PREFIX_TABLE (PREFIX_VEX_0F3A5D) },
9110 { PREFIX_TABLE (PREFIX_VEX_0F3A5E) },
9111 { PREFIX_TABLE (PREFIX_VEX_0F3A5F) },
c0f3af97 9112 /* 60 */
592a252b
L
9113 { PREFIX_TABLE (PREFIX_VEX_0F3A60) },
9114 { PREFIX_TABLE (PREFIX_VEX_0F3A61) },
9115 { PREFIX_TABLE (PREFIX_VEX_0F3A62) },
9116 { PREFIX_TABLE (PREFIX_VEX_0F3A63) },
592d1631
L
9117 { Bad_Opcode },
9118 { Bad_Opcode },
9119 { Bad_Opcode },
9120 { Bad_Opcode },
c0f3af97 9121 /* 68 */
592a252b
L
9122 { PREFIX_TABLE (PREFIX_VEX_0F3A68) },
9123 { PREFIX_TABLE (PREFIX_VEX_0F3A69) },
9124 { PREFIX_TABLE (PREFIX_VEX_0F3A6A) },
9125 { PREFIX_TABLE (PREFIX_VEX_0F3A6B) },
9126 { PREFIX_TABLE (PREFIX_VEX_0F3A6C) },
9127 { PREFIX_TABLE (PREFIX_VEX_0F3A6D) },
9128 { PREFIX_TABLE (PREFIX_VEX_0F3A6E) },
9129 { PREFIX_TABLE (PREFIX_VEX_0F3A6F) },
c0f3af97 9130 /* 70 */
592d1631
L
9131 { Bad_Opcode },
9132 { Bad_Opcode },
9133 { Bad_Opcode },
9134 { Bad_Opcode },
9135 { Bad_Opcode },
9136 { Bad_Opcode },
9137 { Bad_Opcode },
9138 { Bad_Opcode },
c0f3af97 9139 /* 78 */
592a252b
L
9140 { PREFIX_TABLE (PREFIX_VEX_0F3A78) },
9141 { PREFIX_TABLE (PREFIX_VEX_0F3A79) },
9142 { PREFIX_TABLE (PREFIX_VEX_0F3A7A) },
9143 { PREFIX_TABLE (PREFIX_VEX_0F3A7B) },
9144 { PREFIX_TABLE (PREFIX_VEX_0F3A7C) },
9145 { PREFIX_TABLE (PREFIX_VEX_0F3A7D) },
9146 { PREFIX_TABLE (PREFIX_VEX_0F3A7E) },
9147 { PREFIX_TABLE (PREFIX_VEX_0F3A7F) },
c0f3af97 9148 /* 80 */
592d1631
L
9149 { Bad_Opcode },
9150 { Bad_Opcode },
9151 { Bad_Opcode },
9152 { Bad_Opcode },
9153 { Bad_Opcode },
9154 { Bad_Opcode },
9155 { Bad_Opcode },
9156 { Bad_Opcode },
c0f3af97 9157 /* 88 */
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 /* 90 */
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 /* 98 */
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 /* a0 */
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 /* a8 */
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 /* b0 */
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 /* b8 */
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 /* c0 */
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 /* c8 */
592d1631
L
9230 { Bad_Opcode },
9231 { Bad_Opcode },
9232 { Bad_Opcode },
9233 { Bad_Opcode },
9234 { Bad_Opcode },
9235 { Bad_Opcode },
48521003
IT
9236 { PREFIX_TABLE(PREFIX_VEX_0F3ACE) },
9237 { PREFIX_TABLE(PREFIX_VEX_0F3ACF) },
c0f3af97 9238 /* d0 */
592d1631
L
9239 { Bad_Opcode },
9240 { Bad_Opcode },
9241 { Bad_Opcode },
9242 { Bad_Opcode },
9243 { Bad_Opcode },
9244 { Bad_Opcode },
9245 { Bad_Opcode },
9246 { Bad_Opcode },
c0f3af97 9247 /* d8 */
592d1631
L
9248 { Bad_Opcode },
9249 { Bad_Opcode },
9250 { Bad_Opcode },
9251 { Bad_Opcode },
9252 { Bad_Opcode },
9253 { Bad_Opcode },
9254 { Bad_Opcode },
592a252b 9255 { PREFIX_TABLE (PREFIX_VEX_0F3ADF) },
c0f3af97 9256 /* e0 */
592d1631
L
9257 { Bad_Opcode },
9258 { Bad_Opcode },
9259 { Bad_Opcode },
9260 { Bad_Opcode },
9261 { Bad_Opcode },
9262 { Bad_Opcode },
9263 { Bad_Opcode },
9264 { Bad_Opcode },
c0f3af97 9265 /* e8 */
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 /* f0 */
6c30d220 9275 { PREFIX_TABLE (PREFIX_VEX_0F3AF0) },
592d1631
L
9276 { Bad_Opcode },
9277 { Bad_Opcode },
9278 { Bad_Opcode },
9279 { Bad_Opcode },
9280 { Bad_Opcode },
9281 { Bad_Opcode },
9282 { Bad_Opcode },
c0f3af97 9283 /* f8 */
592d1631
L
9284 { Bad_Opcode },
9285 { Bad_Opcode },
9286 { Bad_Opcode },
9287 { Bad_Opcode },
9288 { Bad_Opcode },
9289 { Bad_Opcode },
9290 { Bad_Opcode },
9291 { Bad_Opcode },
c0f3af97
L
9292 },
9293};
9294
43234a1e 9295#include "i386-dis-evex.h"
ad692897 9296
c0f3af97 9297static const struct dis386 vex_len_table[][2] = {
592a252b 9298 /* VEX_LEN_0F12_P_0_M_0 */
c0f3af97 9299 {
ec6f095a 9300 { "vmovlps", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9301 },
9302
592a252b 9303 /* VEX_LEN_0F12_P_0_M_1 */
c0f3af97 9304 {
ec6f095a 9305 { "vmovhlps", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9306 },
9307
592a252b 9308 /* VEX_LEN_0F12_P_2 */
c0f3af97 9309 {
ec6f095a 9310 { "vmovlpd", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9311 },
9312
592a252b 9313 /* VEX_LEN_0F13_M_0 */
c0f3af97 9314 {
ec6f095a 9315 { "vmovlpX", { EXq, XM }, 0 },
c0f3af97
L
9316 },
9317
592a252b 9318 /* VEX_LEN_0F16_P_0_M_0 */
c0f3af97 9319 {
ec6f095a 9320 { "vmovhps", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9321 },
9322
592a252b 9323 /* VEX_LEN_0F16_P_0_M_1 */
c0f3af97 9324 {
ec6f095a 9325 { "vmovlhps", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9326 },
9327
592a252b 9328 /* VEX_LEN_0F16_P_2 */
c0f3af97 9329 {
ec6f095a 9330 { "vmovhpd", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9331 },
9332
592a252b 9333 /* VEX_LEN_0F17_M_0 */
c0f3af97 9334 {
ec6f095a 9335 { "vmovhpX", { EXq, XM }, 0 },
c0f3af97
L
9336 },
9337
43234a1e
L
9338 /* VEX_LEN_0F41_P_0 */
9339 {
9340 { Bad_Opcode },
9341 { VEX_W_TABLE (VEX_W_0F41_P_0_LEN_1) },
9342 },
1ba585e8
IT
9343 /* VEX_LEN_0F41_P_2 */
9344 {
9345 { Bad_Opcode },
9346 { VEX_W_TABLE (VEX_W_0F41_P_2_LEN_1) },
9347 },
43234a1e
L
9348 /* VEX_LEN_0F42_P_0 */
9349 {
9350 { Bad_Opcode },
9351 { VEX_W_TABLE (VEX_W_0F42_P_0_LEN_1) },
9352 },
1ba585e8
IT
9353 /* VEX_LEN_0F42_P_2 */
9354 {
9355 { Bad_Opcode },
9356 { VEX_W_TABLE (VEX_W_0F42_P_2_LEN_1) },
9357 },
43234a1e
L
9358 /* VEX_LEN_0F44_P_0 */
9359 {
9360 { VEX_W_TABLE (VEX_W_0F44_P_0_LEN_0) },
9361 },
1ba585e8
IT
9362 /* VEX_LEN_0F44_P_2 */
9363 {
9364 { VEX_W_TABLE (VEX_W_0F44_P_2_LEN_0) },
9365 },
43234a1e
L
9366 /* VEX_LEN_0F45_P_0 */
9367 {
9368 { Bad_Opcode },
9369 { VEX_W_TABLE (VEX_W_0F45_P_0_LEN_1) },
9370 },
1ba585e8
IT
9371 /* VEX_LEN_0F45_P_2 */
9372 {
9373 { Bad_Opcode },
9374 { VEX_W_TABLE (VEX_W_0F45_P_2_LEN_1) },
9375 },
43234a1e
L
9376 /* VEX_LEN_0F46_P_0 */
9377 {
9378 { Bad_Opcode },
9379 { VEX_W_TABLE (VEX_W_0F46_P_0_LEN_1) },
9380 },
1ba585e8
IT
9381 /* VEX_LEN_0F46_P_2 */
9382 {
9383 { Bad_Opcode },
9384 { VEX_W_TABLE (VEX_W_0F46_P_2_LEN_1) },
9385 },
43234a1e
L
9386 /* VEX_LEN_0F47_P_0 */
9387 {
9388 { Bad_Opcode },
9389 { VEX_W_TABLE (VEX_W_0F47_P_0_LEN_1) },
9390 },
1ba585e8
IT
9391 /* VEX_LEN_0F47_P_2 */
9392 {
9393 { Bad_Opcode },
9394 { VEX_W_TABLE (VEX_W_0F47_P_2_LEN_1) },
9395 },
9396 /* VEX_LEN_0F4A_P_0 */
9397 {
9398 { Bad_Opcode },
9399 { VEX_W_TABLE (VEX_W_0F4A_P_0_LEN_1) },
9400 },
9401 /* VEX_LEN_0F4A_P_2 */
9402 {
9403 { Bad_Opcode },
9404 { VEX_W_TABLE (VEX_W_0F4A_P_2_LEN_1) },
9405 },
9406 /* VEX_LEN_0F4B_P_0 */
9407 {
9408 { Bad_Opcode },
9409 { VEX_W_TABLE (VEX_W_0F4B_P_0_LEN_1) },
9410 },
43234a1e
L
9411 /* VEX_LEN_0F4B_P_2 */
9412 {
9413 { Bad_Opcode },
9414 { VEX_W_TABLE (VEX_W_0F4B_P_2_LEN_1) },
9415 },
9416
ec6f095a 9417 /* VEX_LEN_0F6E_P_2 */
c0f3af97 9418 {
ec6f095a 9419 { "vmovK", { XMScalar, Edq }, 0 },
c0f3af97
L
9420 },
9421
ec6f095a 9422 /* VEX_LEN_0F77_P_1 */
c0f3af97 9423 {
ec6f095a
L
9424 { "vzeroupper", { XX }, 0 },
9425 { "vzeroall", { XX }, 0 },
c0f3af97
L
9426 },
9427
ec6f095a 9428 /* VEX_LEN_0F7E_P_1 */
c0f3af97 9429 {
ec6f095a 9430 { "vmovq", { XMScalar, EXqScalar }, 0 },
c0f3af97
L
9431 },
9432
ec6f095a 9433 /* VEX_LEN_0F7E_P_2 */
c0f3af97 9434 {
ec6f095a 9435 { "vmovK", { Edq, XMScalar }, 0 },
c0f3af97
L
9436 },
9437
ec6f095a 9438 /* VEX_LEN_0F90_P_0 */
c0f3af97 9439 {
ec6f095a 9440 { VEX_W_TABLE (VEX_W_0F90_P_0_LEN_0) },
c0f3af97
L
9441 },
9442
ec6f095a 9443 /* VEX_LEN_0F90_P_2 */
c0f3af97 9444 {
ec6f095a 9445 { VEX_W_TABLE (VEX_W_0F90_P_2_LEN_0) },
c0f3af97
L
9446 },
9447
ec6f095a 9448 /* VEX_LEN_0F91_P_0 */
c0f3af97 9449 {
ec6f095a 9450 { VEX_W_TABLE (VEX_W_0F91_P_0_LEN_0) },
c0f3af97
L
9451 },
9452
ec6f095a 9453 /* VEX_LEN_0F91_P_2 */
c0f3af97 9454 {
ec6f095a 9455 { VEX_W_TABLE (VEX_W_0F91_P_2_LEN_0) },
c0f3af97
L
9456 },
9457
ec6f095a 9458 /* VEX_LEN_0F92_P_0 */
c0f3af97 9459 {
ec6f095a 9460 { VEX_W_TABLE (VEX_W_0F92_P_0_LEN_0) },
c0f3af97
L
9461 },
9462
ec6f095a 9463 /* VEX_LEN_0F92_P_2 */
c0f3af97 9464 {
ec6f095a 9465 { VEX_W_TABLE (VEX_W_0F92_P_2_LEN_0) },
c0f3af97
L
9466 },
9467
ec6f095a 9468 /* VEX_LEN_0F92_P_3 */
c0f3af97 9469 {
58a211d2 9470 { MOD_TABLE (MOD_VEX_0F92_P_3_LEN_0) },
c0f3af97
L
9471 },
9472
ec6f095a 9473 /* VEX_LEN_0F93_P_0 */
c0f3af97 9474 {
ec6f095a 9475 { VEX_W_TABLE (VEX_W_0F93_P_0_LEN_0) },
c0f3af97
L
9476 },
9477
ec6f095a 9478 /* VEX_LEN_0F93_P_2 */
c0f3af97 9479 {
ec6f095a 9480 { VEX_W_TABLE (VEX_W_0F93_P_2_LEN_0) },
c0f3af97
L
9481 },
9482
ec6f095a 9483 /* VEX_LEN_0F93_P_3 */
c0f3af97 9484 {
58a211d2 9485 { MOD_TABLE (MOD_VEX_0F93_P_3_LEN_0) },
c0f3af97
L
9486 },
9487
ec6f095a 9488 /* VEX_LEN_0F98_P_0 */
43234a1e
L
9489 {
9490 { VEX_W_TABLE (VEX_W_0F98_P_0_LEN_0) },
9491 },
9492
1ba585e8
IT
9493 /* VEX_LEN_0F98_P_2 */
9494 {
9495 { VEX_W_TABLE (VEX_W_0F98_P_2_LEN_0) },
9496 },
9497
9498 /* VEX_LEN_0F99_P_0 */
9499 {
9500 { VEX_W_TABLE (VEX_W_0F99_P_0_LEN_0) },
9501 },
9502
9503 /* VEX_LEN_0F99_P_2 */
9504 {
9505 { VEX_W_TABLE (VEX_W_0F99_P_2_LEN_0) },
9506 },
9507
6c30d220 9508 /* VEX_LEN_0FAE_R_2_M_0 */
c0f3af97 9509 {
ec6f095a 9510 { "vldmxcsr", { Md }, 0 },
c0f3af97
L
9511 },
9512
6c30d220 9513 /* VEX_LEN_0FAE_R_3_M_0 */
c0f3af97 9514 {
ec6f095a 9515 { "vstmxcsr", { Md }, 0 },
c0f3af97
L
9516 },
9517
6c30d220 9518 /* VEX_LEN_0FC4_P_2 */
c0f3af97 9519 {
b50c9f31 9520 { "vpinsrw", { XM, Vex128, Edqw, Ib }, 0 },
c0f3af97
L
9521 },
9522
6c30d220 9523 /* VEX_LEN_0FC5_P_2 */
c0f3af97 9524 {
b50c9f31 9525 { "vpextrw", { Gdq, XS, Ib }, 0 },
c0f3af97
L
9526 },
9527
6c30d220 9528 /* VEX_LEN_0FD6_P_2 */
c0f3af97 9529 {
ec6f095a 9530 { "vmovq", { EXqScalarS, XMScalar }, 0 },
c0f3af97
L
9531 },
9532
6c30d220 9533 /* VEX_LEN_0FF7_P_2 */
c0f3af97 9534 {
ec6f095a 9535 { "vmaskmovdqu", { XM, XS }, 0 },
c0f3af97
L
9536 },
9537
6c30d220 9538 /* VEX_LEN_0F3816_P_2 */
c0f3af97 9539 {
6c30d220
L
9540 { Bad_Opcode },
9541 { VEX_W_TABLE (VEX_W_0F3816_P_2) },
c0f3af97
L
9542 },
9543
6c30d220 9544 /* VEX_LEN_0F3819_P_2 */
c0f3af97 9545 {
6c30d220
L
9546 { Bad_Opcode },
9547 { VEX_W_TABLE (VEX_W_0F3819_P_2) },
c0f3af97
L
9548 },
9549
6c30d220 9550 /* VEX_LEN_0F381A_P_2_M_0 */
c0f3af97 9551 {
6c30d220
L
9552 { Bad_Opcode },
9553 { VEX_W_TABLE (VEX_W_0F381A_P_2_M_0) },
c0f3af97
L
9554 },
9555
6c30d220 9556 /* VEX_LEN_0F3836_P_2 */
c0f3af97 9557 {
6c30d220
L
9558 { Bad_Opcode },
9559 { VEX_W_TABLE (VEX_W_0F3836_P_2) },
c0f3af97
L
9560 },
9561
592a252b 9562 /* VEX_LEN_0F3841_P_2 */
c0f3af97 9563 {
ec6f095a 9564 { "vphminposuw", { XM, EXx }, 0 },
c0f3af97
L
9565 },
9566
6c30d220
L
9567 /* VEX_LEN_0F385A_P_2_M_0 */
9568 {
9569 { Bad_Opcode },
9570 { VEX_W_TABLE (VEX_W_0F385A_P_2_M_0) },
9571 },
9572
592a252b 9573 /* VEX_LEN_0F38DB_P_2 */
a5ff0eb2 9574 {
ec6f095a 9575 { "vaesimc", { XM, EXx }, 0 },
a5ff0eb2
L
9576 },
9577
f12dc422
L
9578 /* VEX_LEN_0F38F2_P_0 */
9579 {
bf890a93 9580 { "andnS", { Gdq, VexGdq, Edq }, 0 },
f12dc422
L
9581 },
9582
9583 /* VEX_LEN_0F38F3_R_1_P_0 */
9584 {
bf890a93 9585 { "blsrS", { VexGdq, Edq }, 0 },
f12dc422
L
9586 },
9587
9588 /* VEX_LEN_0F38F3_R_2_P_0 */
9589 {
bf890a93 9590 { "blsmskS", { VexGdq, Edq }, 0 },
f12dc422
L
9591 },
9592
9593 /* VEX_LEN_0F38F3_R_3_P_0 */
9594 {
bf890a93 9595 { "blsiS", { VexGdq, Edq }, 0 },
f12dc422
L
9596 },
9597
6c30d220
L
9598 /* VEX_LEN_0F38F5_P_0 */
9599 {
bf890a93 9600 { "bzhiS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
9601 },
9602
9603 /* VEX_LEN_0F38F5_P_1 */
9604 {
bf890a93 9605 { "pextS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
9606 },
9607
9608 /* VEX_LEN_0F38F5_P_3 */
9609 {
bf890a93 9610 { "pdepS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
9611 },
9612
9613 /* VEX_LEN_0F38F6_P_3 */
9614 {
bf890a93 9615 { "mulxS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
9616 },
9617
f12dc422
L
9618 /* VEX_LEN_0F38F7_P_0 */
9619 {
bf890a93 9620 { "bextrS", { Gdq, Edq, VexGdq }, 0 },
f12dc422
L
9621 },
9622
6c30d220
L
9623 /* VEX_LEN_0F38F7_P_1 */
9624 {
bf890a93 9625 { "sarxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
9626 },
9627
9628 /* VEX_LEN_0F38F7_P_2 */
9629 {
bf890a93 9630 { "shlxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
9631 },
9632
9633 /* VEX_LEN_0F38F7_P_3 */
9634 {
bf890a93 9635 { "shrxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
9636 },
9637
9638 /* VEX_LEN_0F3A00_P_2 */
9639 {
9640 { Bad_Opcode },
9641 { VEX_W_TABLE (VEX_W_0F3A00_P_2) },
9642 },
9643
9644 /* VEX_LEN_0F3A01_P_2 */
9645 {
9646 { Bad_Opcode },
9647 { VEX_W_TABLE (VEX_W_0F3A01_P_2) },
9648 },
9649
592a252b 9650 /* VEX_LEN_0F3A06_P_2 */
c0f3af97 9651 {
592d1631 9652 { Bad_Opcode },
592a252b 9653 { VEX_W_TABLE (VEX_W_0F3A06_P_2) },
c0f3af97
L
9654 },
9655
592a252b 9656 /* VEX_LEN_0F3A14_P_2 */
c0f3af97 9657 {
b50c9f31 9658 { "vpextrb", { Edqb, XM, Ib }, 0 },
c0f3af97
L
9659 },
9660
592a252b 9661 /* VEX_LEN_0F3A15_P_2 */
c0f3af97 9662 {
b50c9f31 9663 { "vpextrw", { Edqw, XM, Ib }, 0 },
c0f3af97
L
9664 },
9665
592a252b 9666 /* VEX_LEN_0F3A16_P_2 */
c0f3af97 9667 {
bf890a93 9668 { "vpextrK", { Edq, XM, Ib }, 0 },
c0f3af97
L
9669 },
9670
592a252b 9671 /* VEX_LEN_0F3A17_P_2 */
c0f3af97 9672 {
bf890a93 9673 { "vextractps", { Edqd, XM, Ib }, 0 },
c0f3af97
L
9674 },
9675
592a252b 9676 /* VEX_LEN_0F3A18_P_2 */
c0f3af97 9677 {
592d1631 9678 { Bad_Opcode },
592a252b 9679 { VEX_W_TABLE (VEX_W_0F3A18_P_2) },
c0f3af97
L
9680 },
9681
592a252b 9682 /* VEX_LEN_0F3A19_P_2 */
c0f3af97 9683 {
592d1631 9684 { Bad_Opcode },
592a252b 9685 { VEX_W_TABLE (VEX_W_0F3A19_P_2) },
c0f3af97
L
9686 },
9687
592a252b 9688 /* VEX_LEN_0F3A20_P_2 */
c0f3af97 9689 {
b50c9f31 9690 { "vpinsrb", { XM, Vex128, Edqb, Ib }, 0 },
c0f3af97
L
9691 },
9692
592a252b 9693 /* VEX_LEN_0F3A21_P_2 */
c0f3af97 9694 {
ec6f095a 9695 { "vinsertps", { XM, Vex128, EXd, Ib }, 0 },
c0f3af97
L
9696 },
9697
592a252b 9698 /* VEX_LEN_0F3A22_P_2 */
c0f3af97 9699 {
bf890a93 9700 { "vpinsrK", { XM, Vex128, Edq, Ib }, 0 },
c0f3af97
L
9701 },
9702
43234a1e
L
9703 /* VEX_LEN_0F3A30_P_2 */
9704 {
9705 { VEX_W_TABLE (VEX_W_0F3A30_P_2_LEN_0) },
9706 },
9707
1ba585e8
IT
9708 /* VEX_LEN_0F3A31_P_2 */
9709 {
9710 { VEX_W_TABLE (VEX_W_0F3A31_P_2_LEN_0) },
9711 },
9712
43234a1e
L
9713 /* VEX_LEN_0F3A32_P_2 */
9714 {
9715 { VEX_W_TABLE (VEX_W_0F3A32_P_2_LEN_0) },
9716 },
9717
1ba585e8
IT
9718 /* VEX_LEN_0F3A33_P_2 */
9719 {
9720 { VEX_W_TABLE (VEX_W_0F3A33_P_2_LEN_0) },
9721 },
9722
6c30d220 9723 /* VEX_LEN_0F3A38_P_2 */
c0f3af97 9724 {
6c30d220
L
9725 { Bad_Opcode },
9726 { VEX_W_TABLE (VEX_W_0F3A38_P_2) },
c0f3af97
L
9727 },
9728
6c30d220 9729 /* VEX_LEN_0F3A39_P_2 */
c0f3af97 9730 {
6c30d220
L
9731 { Bad_Opcode },
9732 { VEX_W_TABLE (VEX_W_0F3A39_P_2) },
9733 },
9734
9735 /* VEX_LEN_0F3A41_P_2 */
9736 {
ec6f095a 9737 { "vdppd", { XM, Vex128, EXx, Ib }, 0 },
c0f3af97
L
9738 },
9739
6c30d220 9740 /* VEX_LEN_0F3A46_P_2 */
c0f3af97 9741 {
6c30d220
L
9742 { Bad_Opcode },
9743 { VEX_W_TABLE (VEX_W_0F3A46_P_2) },
c0f3af97
L
9744 },
9745
592a252b 9746 /* VEX_LEN_0F3A60_P_2 */
c0f3af97 9747 {
15c7c1d8 9748 { "vpcmpestrm", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, 0 },
c0f3af97
L
9749 },
9750
592a252b 9751 /* VEX_LEN_0F3A61_P_2 */
c0f3af97 9752 {
15c7c1d8 9753 { "vpcmpestri", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, 0 },
c0f3af97
L
9754 },
9755
592a252b 9756 /* VEX_LEN_0F3A62_P_2 */
c0f3af97 9757 {
ec6f095a 9758 { "vpcmpistrm", { XM, EXx, Ib }, 0 },
c0f3af97
L
9759 },
9760
592a252b 9761 /* VEX_LEN_0F3A63_P_2 */
c0f3af97 9762 {
ec6f095a 9763 { "vpcmpistri", { XM, EXx, Ib }, 0 },
c0f3af97
L
9764 },
9765
592a252b 9766 /* VEX_LEN_0F3A6A_P_2 */
922d8de8 9767 {
3a2430e0 9768 { "vfmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 },
922d8de8
DR
9769 },
9770
592a252b 9771 /* VEX_LEN_0F3A6B_P_2 */
922d8de8 9772 {
3a2430e0 9773 { "vfmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 },
922d8de8
DR
9774 },
9775
592a252b 9776 /* VEX_LEN_0F3A6E_P_2 */
922d8de8 9777 {
3a2430e0 9778 { "vfmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 },
922d8de8
DR
9779 },
9780
592a252b 9781 /* VEX_LEN_0F3A6F_P_2 */
922d8de8 9782 {
3a2430e0 9783 { "vfmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 },
922d8de8
DR
9784 },
9785
592a252b 9786 /* VEX_LEN_0F3A7A_P_2 */
922d8de8 9787 {
3a2430e0 9788 { "vfnmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 },
922d8de8
DR
9789 },
9790
592a252b 9791 /* VEX_LEN_0F3A7B_P_2 */
922d8de8 9792 {
3a2430e0 9793 { "vfnmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 },
922d8de8
DR
9794 },
9795
592a252b 9796 /* VEX_LEN_0F3A7E_P_2 */
922d8de8 9797 {
3a2430e0 9798 { "vfnmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 },
922d8de8
DR
9799 },
9800
592a252b 9801 /* VEX_LEN_0F3A7F_P_2 */
922d8de8 9802 {
3a2430e0 9803 { "vfnmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 },
922d8de8
DR
9804 },
9805
592a252b 9806 /* VEX_LEN_0F3ADF_P_2 */
a5ff0eb2 9807 {
ec6f095a 9808 { "vaeskeygenassist", { XM, EXx, Ib }, 0 },
a5ff0eb2 9809 },
4c807e72 9810
6c30d220
L
9811 /* VEX_LEN_0F3AF0_P_3 */
9812 {
bf890a93 9813 { "rorxS", { Gdq, Edq, Ib }, 0 },
6c30d220
L
9814 },
9815
ff688e1f
L
9816 /* VEX_LEN_0FXOP_08_CC */
9817 {
be92cb14 9818 { "vpcomb", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9819 },
9820
9821 /* VEX_LEN_0FXOP_08_CD */
9822 {
be92cb14 9823 { "vpcomw", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9824 },
9825
9826 /* VEX_LEN_0FXOP_08_CE */
9827 {
be92cb14 9828 { "vpcomd", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9829 },
9830
9831 /* VEX_LEN_0FXOP_08_CF */
9832 {
be92cb14 9833 { "vpcomq", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9834 },
9835
9836 /* VEX_LEN_0FXOP_08_EC */
9837 {
be92cb14 9838 { "vpcomub", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9839 },
9840
9841 /* VEX_LEN_0FXOP_08_ED */
9842 {
be92cb14 9843 { "vpcomuw", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9844 },
9845
9846 /* VEX_LEN_0FXOP_08_EE */
9847 {
be92cb14 9848 { "vpcomud", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9849 },
9850
9851 /* VEX_LEN_0FXOP_08_EF */
9852 {
be92cb14 9853 { "vpcomuq", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9854 },
9855
592a252b 9856 /* VEX_LEN_0FXOP_09_80 */
5dd85c99 9857 {
bf890a93
IT
9858 { "vfrczps", { XM, EXxmm }, 0 },
9859 { "vfrczps", { XM, EXymmq }, 0 },
5dd85c99 9860 },
4c807e72 9861
592a252b 9862 /* VEX_LEN_0FXOP_09_81 */
5dd85c99 9863 {
bf890a93
IT
9864 { "vfrczpd", { XM, EXxmm }, 0 },
9865 { "vfrczpd", { XM, EXymmq }, 0 },
5dd85c99 9866 },
331d2d0d
L
9867};
9868
ad692897 9869#include "i386-dis-evex-len.h"
04e2a182 9870
9e30b8e0 9871static const struct dis386 vex_w_table[][2] = {
43234a1e
L
9872 {
9873 /* VEX_W_0F41_P_0_LEN_1 */
ab4e4ed5
AF
9874 { MOD_TABLE (MOD_VEX_W_0_0F41_P_0_LEN_1) },
9875 { MOD_TABLE (MOD_VEX_W_1_0F41_P_0_LEN_1) },
1ba585e8
IT
9876 },
9877 {
9878 /* VEX_W_0F41_P_2_LEN_1 */
ab4e4ed5
AF
9879 { MOD_TABLE (MOD_VEX_W_0_0F41_P_2_LEN_1) },
9880 { MOD_TABLE (MOD_VEX_W_1_0F41_P_2_LEN_1) }
43234a1e
L
9881 },
9882 {
9883 /* VEX_W_0F42_P_0_LEN_1 */
ab4e4ed5
AF
9884 { MOD_TABLE (MOD_VEX_W_0_0F42_P_0_LEN_1) },
9885 { MOD_TABLE (MOD_VEX_W_1_0F42_P_0_LEN_1) },
1ba585e8
IT
9886 },
9887 {
9888 /* VEX_W_0F42_P_2_LEN_1 */
ab4e4ed5
AF
9889 { MOD_TABLE (MOD_VEX_W_0_0F42_P_2_LEN_1) },
9890 { MOD_TABLE (MOD_VEX_W_1_0F42_P_2_LEN_1) },
43234a1e
L
9891 },
9892 {
9893 /* VEX_W_0F44_P_0_LEN_0 */
ab4e4ed5
AF
9894 { MOD_TABLE (MOD_VEX_W_0_0F44_P_0_LEN_1) },
9895 { MOD_TABLE (MOD_VEX_W_1_0F44_P_0_LEN_1) },
1ba585e8
IT
9896 },
9897 {
9898 /* VEX_W_0F44_P_2_LEN_0 */
ab4e4ed5
AF
9899 { MOD_TABLE (MOD_VEX_W_0_0F44_P_2_LEN_1) },
9900 { MOD_TABLE (MOD_VEX_W_1_0F44_P_2_LEN_1) },
43234a1e
L
9901 },
9902 {
ec6f095a
L
9903 /* VEX_W_0F45_P_0_LEN_1 */
9904 { MOD_TABLE (MOD_VEX_W_0_0F45_P_0_LEN_1) },
9905 { MOD_TABLE (MOD_VEX_W_1_0F45_P_0_LEN_1) },
9e30b8e0
L
9906 },
9907 {
ec6f095a
L
9908 /* VEX_W_0F45_P_2_LEN_1 */
9909 { MOD_TABLE (MOD_VEX_W_0_0F45_P_2_LEN_1) },
9910 { MOD_TABLE (MOD_VEX_W_1_0F45_P_2_LEN_1) },
9e30b8e0
L
9911 },
9912 {
ec6f095a
L
9913 /* VEX_W_0F46_P_0_LEN_1 */
9914 { MOD_TABLE (MOD_VEX_W_0_0F46_P_0_LEN_1) },
9915 { MOD_TABLE (MOD_VEX_W_1_0F46_P_0_LEN_1) },
9e30b8e0
L
9916 },
9917 {
ec6f095a
L
9918 /* VEX_W_0F46_P_2_LEN_1 */
9919 { MOD_TABLE (MOD_VEX_W_0_0F46_P_2_LEN_1) },
9920 { MOD_TABLE (MOD_VEX_W_1_0F46_P_2_LEN_1) },
9e30b8e0
L
9921 },
9922 {
ec6f095a
L
9923 /* VEX_W_0F47_P_0_LEN_1 */
9924 { MOD_TABLE (MOD_VEX_W_0_0F47_P_0_LEN_1) },
9925 { MOD_TABLE (MOD_VEX_W_1_0F47_P_0_LEN_1) },
9e30b8e0
L
9926 },
9927 {
ec6f095a
L
9928 /* VEX_W_0F47_P_2_LEN_1 */
9929 { MOD_TABLE (MOD_VEX_W_0_0F47_P_2_LEN_1) },
9930 { MOD_TABLE (MOD_VEX_W_1_0F47_P_2_LEN_1) },
9e30b8e0
L
9931 },
9932 {
ec6f095a
L
9933 /* VEX_W_0F4A_P_0_LEN_1 */
9934 { MOD_TABLE (MOD_VEX_W_0_0F4A_P_0_LEN_1) },
9935 { MOD_TABLE (MOD_VEX_W_1_0F4A_P_0_LEN_1) },
9e30b8e0
L
9936 },
9937 {
ec6f095a
L
9938 /* VEX_W_0F4A_P_2_LEN_1 */
9939 { MOD_TABLE (MOD_VEX_W_0_0F4A_P_2_LEN_1) },
9940 { MOD_TABLE (MOD_VEX_W_1_0F4A_P_2_LEN_1) },
9e30b8e0
L
9941 },
9942 {
ec6f095a
L
9943 /* VEX_W_0F4B_P_0_LEN_1 */
9944 { MOD_TABLE (MOD_VEX_W_0_0F4B_P_0_LEN_1) },
9945 { MOD_TABLE (MOD_VEX_W_1_0F4B_P_0_LEN_1) },
9e30b8e0
L
9946 },
9947 {
ec6f095a
L
9948 /* VEX_W_0F4B_P_2_LEN_1 */
9949 { MOD_TABLE (MOD_VEX_W_0_0F4B_P_2_LEN_1) },
9e30b8e0
L
9950 },
9951 {
ec6f095a
L
9952 /* VEX_W_0F90_P_0_LEN_0 */
9953 { "kmovw", { MaskG, MaskE }, 0 },
9954 { "kmovq", { MaskG, MaskE }, 0 },
9e30b8e0
L
9955 },
9956 {
ec6f095a
L
9957 /* VEX_W_0F90_P_2_LEN_0 */
9958 { "kmovb", { MaskG, MaskBDE }, 0 },
9959 { "kmovd", { MaskG, MaskBDE }, 0 },
9e30b8e0
L
9960 },
9961 {
ec6f095a
L
9962 /* VEX_W_0F91_P_0_LEN_0 */
9963 { MOD_TABLE (MOD_VEX_W_0_0F91_P_0_LEN_0) },
9964 { MOD_TABLE (MOD_VEX_W_1_0F91_P_0_LEN_0) },
9e30b8e0
L
9965 },
9966 {
ec6f095a
L
9967 /* VEX_W_0F91_P_2_LEN_0 */
9968 { MOD_TABLE (MOD_VEX_W_0_0F91_P_2_LEN_0) },
9969 { MOD_TABLE (MOD_VEX_W_1_0F91_P_2_LEN_0) },
9e30b8e0
L
9970 },
9971 {
ec6f095a
L
9972 /* VEX_W_0F92_P_0_LEN_0 */
9973 { MOD_TABLE (MOD_VEX_W_0_0F92_P_0_LEN_0) },
9e30b8e0
L
9974 },
9975 {
ec6f095a
L
9976 /* VEX_W_0F92_P_2_LEN_0 */
9977 { MOD_TABLE (MOD_VEX_W_0_0F92_P_2_LEN_0) },
9e30b8e0 9978 },
9e30b8e0 9979 {
ec6f095a
L
9980 /* VEX_W_0F93_P_0_LEN_0 */
9981 { MOD_TABLE (MOD_VEX_W_0_0F93_P_0_LEN_0) },
9e30b8e0
L
9982 },
9983 {
ec6f095a
L
9984 /* VEX_W_0F93_P_2_LEN_0 */
9985 { MOD_TABLE (MOD_VEX_W_0_0F93_P_2_LEN_0) },
9e30b8e0 9986 },
9e30b8e0 9987 {
ec6f095a
L
9988 /* VEX_W_0F98_P_0_LEN_0 */
9989 { MOD_TABLE (MOD_VEX_W_0_0F98_P_0_LEN_0) },
9990 { MOD_TABLE (MOD_VEX_W_1_0F98_P_0_LEN_0) },
9e30b8e0
L
9991 },
9992 {
ec6f095a
L
9993 /* VEX_W_0F98_P_2_LEN_0 */
9994 { MOD_TABLE (MOD_VEX_W_0_0F98_P_2_LEN_0) },
9995 { MOD_TABLE (MOD_VEX_W_1_0F98_P_2_LEN_0) },
9e30b8e0
L
9996 },
9997 {
ec6f095a
L
9998 /* VEX_W_0F99_P_0_LEN_0 */
9999 { MOD_TABLE (MOD_VEX_W_0_0F99_P_0_LEN_0) },
10000 { MOD_TABLE (MOD_VEX_W_1_0F99_P_0_LEN_0) },
9e30b8e0
L
10001 },
10002 {
ec6f095a
L
10003 /* VEX_W_0F99_P_2_LEN_0 */
10004 { MOD_TABLE (MOD_VEX_W_0_0F99_P_2_LEN_0) },
10005 { MOD_TABLE (MOD_VEX_W_1_0F99_P_2_LEN_0) },
9e30b8e0 10006 },
9e30b8e0 10007 {
592a252b 10008 /* VEX_W_0F380C_P_2 */
bf890a93 10009 { "vpermilps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10010 },
10011 {
592a252b 10012 /* VEX_W_0F380D_P_2 */
bf890a93 10013 { "vpermilpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10014 },
10015 {
592a252b 10016 /* VEX_W_0F380E_P_2 */
bf890a93 10017 { "vtestps", { XM, EXx }, 0 },
9e30b8e0
L
10018 },
10019 {
592a252b 10020 /* VEX_W_0F380F_P_2 */
bf890a93 10021 { "vtestpd", { XM, EXx }, 0 },
9e30b8e0 10022 },
6c30d220
L
10023 {
10024 /* VEX_W_0F3816_P_2 */
bf890a93 10025 { "vpermps", { XM, Vex, EXx }, 0 },
6c30d220 10026 },
bcf2684f 10027 {
6c30d220 10028 /* VEX_W_0F3818_P_2 */
bf890a93 10029 { "vbroadcastss", { XM, EXxmm_md }, 0 },
bcf2684f 10030 },
9e30b8e0 10031 {
6c30d220 10032 /* VEX_W_0F3819_P_2 */
bf890a93 10033 { "vbroadcastsd", { XM, EXxmm_mq }, 0 },
9e30b8e0
L
10034 },
10035 {
592a252b 10036 /* VEX_W_0F381A_P_2_M_0 */
bf890a93 10037 { "vbroadcastf128", { XM, Mxmm }, 0 },
9e30b8e0 10038 },
53aa04a0 10039 {
592a252b 10040 /* VEX_W_0F382C_P_2_M_0 */
bf890a93 10041 { "vmaskmovps", { XM, Vex, Mx }, 0 },
53aa04a0
L
10042 },
10043 {
592a252b 10044 /* VEX_W_0F382D_P_2_M_0 */
bf890a93 10045 { "vmaskmovpd", { XM, Vex, Mx }, 0 },
53aa04a0
L
10046 },
10047 {
592a252b 10048 /* VEX_W_0F382E_P_2_M_0 */
bf890a93 10049 { "vmaskmovps", { Mx, Vex, XM }, 0 },
53aa04a0
L
10050 },
10051 {
592a252b 10052 /* VEX_W_0F382F_P_2_M_0 */
bf890a93 10053 { "vmaskmovpd", { Mx, Vex, XM }, 0 },
53aa04a0 10054 },
6c30d220
L
10055 {
10056 /* VEX_W_0F3836_P_2 */
bf890a93 10057 { "vpermd", { XM, Vex, EXx }, 0 },
9e30b8e0 10058 },
6c30d220
L
10059 {
10060 /* VEX_W_0F3846_P_2 */
bf890a93 10061 { "vpsravd", { XM, Vex, EXx }, 0 },
6c30d220
L
10062 },
10063 {
10064 /* VEX_W_0F3858_P_2 */
bf890a93 10065 { "vpbroadcastd", { XM, EXxmm_md }, 0 },
6c30d220
L
10066 },
10067 {
10068 /* VEX_W_0F3859_P_2 */
bf890a93 10069 { "vpbroadcastq", { XM, EXxmm_mq }, 0 },
6c30d220
L
10070 },
10071 {
10072 /* VEX_W_0F385A_P_2_M_0 */
bf890a93 10073 { "vbroadcasti128", { XM, Mxmm }, 0 },
6c30d220
L
10074 },
10075 {
10076 /* VEX_W_0F3878_P_2 */
bf890a93 10077 { "vpbroadcastb", { XM, EXxmm_mb }, 0 },
6c30d220
L
10078 },
10079 {
10080 /* VEX_W_0F3879_P_2 */
bf890a93 10081 { "vpbroadcastw", { XM, EXxmm_mw }, 0 },
6c30d220 10082 },
48521003
IT
10083 {
10084 /* VEX_W_0F38CF_P_2 */
10085 { "vgf2p8mulb", { XM, Vex, EXx }, 0 },
10086 },
6c30d220
L
10087 {
10088 /* VEX_W_0F3A00_P_2 */
10089 { Bad_Opcode },
bf890a93 10090 { "vpermq", { XM, EXx, Ib }, 0 },
6c30d220
L
10091 },
10092 {
10093 /* VEX_W_0F3A01_P_2 */
10094 { Bad_Opcode },
bf890a93 10095 { "vpermpd", { XM, EXx, Ib }, 0 },
6c30d220
L
10096 },
10097 {
10098 /* VEX_W_0F3A02_P_2 */
bf890a93 10099 { "vpblendd", { XM, Vex, EXx, Ib }, 0 },
6c30d220 10100 },
9e30b8e0 10101 {
592a252b 10102 /* VEX_W_0F3A04_P_2 */
bf890a93 10103 { "vpermilps", { XM, EXx, Ib }, 0 },
9e30b8e0
L
10104 },
10105 {
592a252b 10106 /* VEX_W_0F3A05_P_2 */
bf890a93 10107 { "vpermilpd", { XM, EXx, Ib }, 0 },
9e30b8e0
L
10108 },
10109 {
592a252b 10110 /* VEX_W_0F3A06_P_2 */
bf890a93 10111 { "vperm2f128", { XM, Vex256, EXx, Ib }, 0 },
9e30b8e0 10112 },
9e30b8e0 10113 {
592a252b 10114 /* VEX_W_0F3A18_P_2 */
bf890a93 10115 { "vinsertf128", { XM, Vex256, EXxmm, Ib }, 0 },
9e30b8e0
L
10116 },
10117 {
592a252b 10118 /* VEX_W_0F3A19_P_2 */
bf890a93 10119 { "vextractf128", { EXxmm, XM, Ib }, 0 },
9e30b8e0 10120 },
43234a1e 10121 {
1ba585e8 10122 /* VEX_W_0F3A30_P_2_LEN_0 */
ab4e4ed5
AF
10123 { MOD_TABLE (MOD_VEX_W_0_0F3A30_P_2_LEN_0) },
10124 { MOD_TABLE (MOD_VEX_W_1_0F3A30_P_2_LEN_0) },
43234a1e
L
10125 },
10126 {
1ba585e8 10127 /* VEX_W_0F3A31_P_2_LEN_0 */
ab4e4ed5
AF
10128 { MOD_TABLE (MOD_VEX_W_0_0F3A31_P_2_LEN_0) },
10129 { MOD_TABLE (MOD_VEX_W_1_0F3A31_P_2_LEN_0) },
1ba585e8
IT
10130 },
10131 {
10132 /* VEX_W_0F3A32_P_2_LEN_0 */
ab4e4ed5
AF
10133 { MOD_TABLE (MOD_VEX_W_0_0F3A32_P_2_LEN_0) },
10134 { MOD_TABLE (MOD_VEX_W_1_0F3A32_P_2_LEN_0) },
43234a1e 10135 },
1ba585e8
IT
10136 {
10137 /* VEX_W_0F3A33_P_2_LEN_0 */
ab4e4ed5
AF
10138 { MOD_TABLE (MOD_VEX_W_0_0F3A33_P_2_LEN_0) },
10139 { MOD_TABLE (MOD_VEX_W_1_0F3A33_P_2_LEN_0) },
1ba585e8 10140 },
6c30d220
L
10141 {
10142 /* VEX_W_0F3A38_P_2 */
bf890a93 10143 { "vinserti128", { XM, Vex256, EXxmm, Ib }, 0 },
6c30d220
L
10144 },
10145 {
10146 /* VEX_W_0F3A39_P_2 */
bf890a93 10147 { "vextracti128", { EXxmm, XM, Ib }, 0 },
6c30d220 10148 },
6c30d220
L
10149 {
10150 /* VEX_W_0F3A46_P_2 */
bf890a93 10151 { "vperm2i128", { XM, Vex256, EXx, Ib }, 0 },
6c30d220 10152 },
a683cc34 10153 {
592a252b 10154 /* VEX_W_0F3A48_P_2 */
bf890a93
IT
10155 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
10156 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
a683cc34
SP
10157 },
10158 {
592a252b 10159 /* VEX_W_0F3A49_P_2 */
bf890a93
IT
10160 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
10161 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
a683cc34 10162 },
9e30b8e0 10163 {
592a252b 10164 /* VEX_W_0F3A4A_P_2 */
bf890a93 10165 { "vblendvps", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0
L
10166 },
10167 {
592a252b 10168 /* VEX_W_0F3A4B_P_2 */
bf890a93 10169 { "vblendvpd", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0
L
10170 },
10171 {
592a252b 10172 /* VEX_W_0F3A4C_P_2 */
bf890a93 10173 { "vpblendvb", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0 10174 },
48521003
IT
10175 {
10176 /* VEX_W_0F3ACE_P_2 */
10177 { Bad_Opcode },
10178 { "vgf2p8affineqb", { XM, Vex, EXx, Ib }, 0 },
10179 },
10180 {
10181 /* VEX_W_0F3ACF_P_2 */
10182 { Bad_Opcode },
10183 { "vgf2p8affineinvqb", { XM, Vex, EXx, Ib }, 0 },
10184 },
ad692897
L
10185
10186#include "i386-dis-evex-w.h"
9e30b8e0
L
10187};
10188
10189static const struct dis386 mod_table[][2] = {
10190 {
10191 /* MOD_8D */
bf890a93 10192 { "leaS", { Gv, M }, 0 },
9e30b8e0 10193 },
42164a71
L
10194 {
10195 /* MOD_C6_REG_7 */
10196 { Bad_Opcode },
10197 { RM_TABLE (RM_C6_REG_7) },
10198 },
10199 {
10200 /* MOD_C7_REG_7 */
10201 { Bad_Opcode },
10202 { RM_TABLE (RM_C7_REG_7) },
10203 },
4a357820
MZ
10204 {
10205 /* MOD_FF_REG_3 */
a72d2af2 10206 { "Jcall^", { indirEp }, 0 },
4a357820
MZ
10207 },
10208 {
10209 /* MOD_FF_REG_5 */
a72d2af2 10210 { "Jjmp^", { indirEp }, 0 },
4a357820 10211 },
9e30b8e0
L
10212 {
10213 /* MOD_0F01_REG_0 */
10214 { X86_64_TABLE (X86_64_0F01_REG_0) },
10215 { RM_TABLE (RM_0F01_REG_0) },
10216 },
10217 {
10218 /* MOD_0F01_REG_1 */
10219 { X86_64_TABLE (X86_64_0F01_REG_1) },
10220 { RM_TABLE (RM_0F01_REG_1) },
10221 },
10222 {
10223 /* MOD_0F01_REG_2 */
10224 { X86_64_TABLE (X86_64_0F01_REG_2) },
10225 { RM_TABLE (RM_0F01_REG_2) },
10226 },
10227 {
10228 /* MOD_0F01_REG_3 */
10229 { X86_64_TABLE (X86_64_0F01_REG_3) },
10230 { RM_TABLE (RM_0F01_REG_3) },
10231 },
8eab4136
L
10232 {
10233 /* MOD_0F01_REG_5 */
603555e5 10234 { PREFIX_TABLE (PREFIX_MOD_0_0F01_REG_5) },
8eab4136
L
10235 { RM_TABLE (RM_0F01_REG_5) },
10236 },
9e30b8e0
L
10237 {
10238 /* MOD_0F01_REG_7 */
bf890a93 10239 { "invlpg", { Mb }, 0 },
9e30b8e0
L
10240 { RM_TABLE (RM_0F01_REG_7) },
10241 },
10242 {
10243 /* MOD_0F12_PREFIX_0 */
507bd325
L
10244 { "movlps", { XM, EXq }, PREFIX_OPCODE },
10245 { "movhlps", { XM, EXq }, PREFIX_OPCODE },
9e30b8e0
L
10246 },
10247 {
10248 /* MOD_0F13 */
507bd325 10249 { "movlpX", { EXq, XM }, PREFIX_OPCODE },
9e30b8e0
L
10250 },
10251 {
10252 /* MOD_0F16_PREFIX_0 */
bf890a93
IT
10253 { "movhps", { XM, EXq }, 0 },
10254 { "movlhps", { XM, EXq }, 0 },
9e30b8e0
L
10255 },
10256 {
10257 /* MOD_0F17 */
507bd325 10258 { "movhpX", { EXq, XM }, PREFIX_OPCODE },
9e30b8e0
L
10259 },
10260 {
10261 /* MOD_0F18_REG_0 */
bf890a93 10262 { "prefetchnta", { Mb }, 0 },
9e30b8e0
L
10263 },
10264 {
10265 /* MOD_0F18_REG_1 */
bf890a93 10266 { "prefetcht0", { Mb }, 0 },
9e30b8e0
L
10267 },
10268 {
10269 /* MOD_0F18_REG_2 */
bf890a93 10270 { "prefetcht1", { Mb }, 0 },
9e30b8e0
L
10271 },
10272 {
10273 /* MOD_0F18_REG_3 */
bf890a93 10274 { "prefetcht2", { Mb }, 0 },
9e30b8e0 10275 },
d7189fa5
RM
10276 {
10277 /* MOD_0F18_REG_4 */
bf890a93 10278 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
10279 },
10280 {
10281 /* MOD_0F18_REG_5 */
bf890a93 10282 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
10283 },
10284 {
10285 /* MOD_0F18_REG_6 */
bf890a93 10286 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
10287 },
10288 {
10289 /* MOD_0F18_REG_7 */
bf890a93 10290 { "nop/reserved", { Mb }, 0 },
d7189fa5 10291 },
7e8b059b
L
10292 {
10293 /* MOD_0F1A_PREFIX_0 */
d276ec69 10294 { "bndldx", { Gbnd, Mv_bnd }, 0 },
bf890a93 10295 { "nopQ", { Ev }, 0 },
7e8b059b
L
10296 },
10297 {
10298 /* MOD_0F1B_PREFIX_0 */
d276ec69 10299 { "bndstx", { Mv_bnd, Gbnd }, 0 },
bf890a93 10300 { "nopQ", { Ev }, 0 },
7e8b059b
L
10301 },
10302 {
10303 /* MOD_0F1B_PREFIX_1 */
d276ec69 10304 { "bndmk", { Gbnd, Mv_bnd }, 0 },
bf890a93 10305 { "nopQ", { Ev }, 0 },
7e8b059b 10306 },
c48935d7
IT
10307 {
10308 /* MOD_0F1C_PREFIX_0 */
10309 { REG_TABLE (REG_0F1C_MOD_0) },
10310 { "nopQ", { Ev }, 0 },
10311 },
603555e5
L
10312 {
10313 /* MOD_0F1E_PREFIX_1 */
10314 { "nopQ", { Ev }, 0 },
10315 { REG_TABLE (REG_0F1E_MOD_3) },
10316 },
b844680a 10317 {
92fddf8e 10318 /* MOD_0F24 */
7bb15c6f 10319 { Bad_Opcode },
bf890a93 10320 { "movL", { Rd, Td }, 0 },
b844680a
L
10321 },
10322 {
92fddf8e 10323 /* MOD_0F26 */
592d1631 10324 { Bad_Opcode },
bf890a93 10325 { "movL", { Td, Rd }, 0 },
b844680a 10326 },
75c135a8
L
10327 {
10328 /* MOD_0F2B_PREFIX_0 */
507bd325 10329 {"movntps", { Mx, XM }, PREFIX_OPCODE },
75c135a8
L
10330 },
10331 {
10332 /* MOD_0F2B_PREFIX_1 */
507bd325 10333 {"movntss", { Md, XM }, PREFIX_OPCODE },
75c135a8
L
10334 },
10335 {
10336 /* MOD_0F2B_PREFIX_2 */
507bd325 10337 {"movntpd", { Mx, XM }, PREFIX_OPCODE },
75c135a8
L
10338 },
10339 {
10340 /* MOD_0F2B_PREFIX_3 */
507bd325 10341 {"movntsd", { Mq, XM }, PREFIX_OPCODE },
75c135a8
L
10342 },
10343 {
10344 /* MOD_0F51 */
592d1631 10345 { Bad_Opcode },
507bd325 10346 { "movmskpX", { Gdq, XS }, PREFIX_OPCODE },
75c135a8 10347 },
b844680a 10348 {
1ceb70f8 10349 /* MOD_0F71_REG_2 */
592d1631 10350 { Bad_Opcode },
bf890a93 10351 { "psrlw", { MS, Ib }, 0 },
b844680a
L
10352 },
10353 {
1ceb70f8 10354 /* MOD_0F71_REG_4 */
592d1631 10355 { Bad_Opcode },
bf890a93 10356 { "psraw", { MS, Ib }, 0 },
b844680a
L
10357 },
10358 {
1ceb70f8 10359 /* MOD_0F71_REG_6 */
592d1631 10360 { Bad_Opcode },
bf890a93 10361 { "psllw", { MS, Ib }, 0 },
b844680a
L
10362 },
10363 {
1ceb70f8 10364 /* MOD_0F72_REG_2 */
592d1631 10365 { Bad_Opcode },
bf890a93 10366 { "psrld", { MS, Ib }, 0 },
b844680a
L
10367 },
10368 {
1ceb70f8 10369 /* MOD_0F72_REG_4 */
592d1631 10370 { Bad_Opcode },
bf890a93 10371 { "psrad", { MS, Ib }, 0 },
b844680a
L
10372 },
10373 {
1ceb70f8 10374 /* MOD_0F72_REG_6 */
592d1631 10375 { Bad_Opcode },
bf890a93 10376 { "pslld", { MS, Ib }, 0 },
b844680a
L
10377 },
10378 {
1ceb70f8 10379 /* MOD_0F73_REG_2 */
592d1631 10380 { Bad_Opcode },
bf890a93 10381 { "psrlq", { MS, Ib }, 0 },
b844680a
L
10382 },
10383 {
1ceb70f8 10384 /* MOD_0F73_REG_3 */
592d1631 10385 { Bad_Opcode },
c0f3af97
L
10386 { PREFIX_TABLE (PREFIX_0F73_REG_3) },
10387 },
10388 {
10389 /* MOD_0F73_REG_6 */
592d1631 10390 { Bad_Opcode },
bf890a93 10391 { "psllq", { MS, Ib }, 0 },
c0f3af97
L
10392 },
10393 {
10394 /* MOD_0F73_REG_7 */
592d1631 10395 { Bad_Opcode },
c0f3af97
L
10396 { PREFIX_TABLE (PREFIX_0F73_REG_7) },
10397 },
10398 {
10399 /* MOD_0FAE_REG_0 */
bf890a93 10400 { "fxsave", { FXSAVE }, 0 },
c7b8aa3a 10401 { PREFIX_TABLE (PREFIX_0FAE_REG_0) },
c0f3af97
L
10402 },
10403 {
10404 /* MOD_0FAE_REG_1 */
bf890a93 10405 { "fxrstor", { FXSAVE }, 0 },
c7b8aa3a 10406 { PREFIX_TABLE (PREFIX_0FAE_REG_1) },
c0f3af97
L
10407 },
10408 {
10409 /* MOD_0FAE_REG_2 */
bf890a93 10410 { "ldmxcsr", { Md }, 0 },
c7b8aa3a 10411 { PREFIX_TABLE (PREFIX_0FAE_REG_2) },
c0f3af97
L
10412 },
10413 {
10414 /* MOD_0FAE_REG_3 */
bf890a93 10415 { "stmxcsr", { Md }, 0 },
c7b8aa3a 10416 { PREFIX_TABLE (PREFIX_0FAE_REG_3) },
c0f3af97
L
10417 },
10418 {
10419 /* MOD_0FAE_REG_4 */
6b40c462
L
10420 { PREFIX_TABLE (PREFIX_MOD_0_0FAE_REG_4) },
10421 { PREFIX_TABLE (PREFIX_MOD_3_0FAE_REG_4) },
c0f3af97
L
10422 },
10423 {
10424 /* MOD_0FAE_REG_5 */
603555e5 10425 { PREFIX_TABLE (PREFIX_MOD_0_0FAE_REG_5) },
2234eee6 10426 { PREFIX_TABLE (PREFIX_MOD_3_0FAE_REG_5) },
c0f3af97
L
10427 },
10428 {
10429 /* MOD_0FAE_REG_6 */
de89d0a3
IT
10430 { PREFIX_TABLE (PREFIX_MOD_0_0FAE_REG_6) },
10431 { PREFIX_TABLE (PREFIX_MOD_1_0FAE_REG_6) },
c0f3af97
L
10432 },
10433 {
10434 /* MOD_0FAE_REG_7 */
963f3586 10435 { PREFIX_TABLE (PREFIX_0FAE_REG_7) },
c0f3af97
L
10436 { RM_TABLE (RM_0FAE_REG_7) },
10437 },
10438 {
10439 /* MOD_0FB2 */
bf890a93 10440 { "lssS", { Gv, Mp }, 0 },
c0f3af97
L
10441 },
10442 {
10443 /* MOD_0FB4 */
bf890a93 10444 { "lfsS", { Gv, Mp }, 0 },
c0f3af97
L
10445 },
10446 {
10447 /* MOD_0FB5 */
bf890a93 10448 { "lgsS", { Gv, Mp }, 0 },
c0f3af97 10449 },
a8484f96
L
10450 {
10451 /* MOD_0FC3 */
10452 { PREFIX_TABLE (PREFIX_MOD_0_0FC3) },
10453 },
963f3586
IT
10454 {
10455 /* MOD_0FC7_REG_3 */
a8484f96 10456 { "xrstors", { FXSAVE }, 0 },
963f3586
IT
10457 },
10458 {
10459 /* MOD_0FC7_REG_4 */
bf890a93 10460 { "xsavec", { FXSAVE }, 0 },
963f3586
IT
10461 },
10462 {
10463 /* MOD_0FC7_REG_5 */
bf890a93 10464 { "xsaves", { FXSAVE }, 0 },
963f3586 10465 },
c0f3af97
L
10466 {
10467 /* MOD_0FC7_REG_6 */
f24bcbaa
L
10468 { PREFIX_TABLE (PREFIX_MOD_0_0FC7_REG_6) },
10469 { PREFIX_TABLE (PREFIX_MOD_3_0FC7_REG_6) }
c0f3af97
L
10470 },
10471 {
10472 /* MOD_0FC7_REG_7 */
bf890a93 10473 { "vmptrst", { Mq }, 0 },
f24bcbaa 10474 { PREFIX_TABLE (PREFIX_MOD_3_0FC7_REG_7) }
c0f3af97
L
10475 },
10476 {
10477 /* MOD_0FD7 */
592d1631 10478 { Bad_Opcode },
bf890a93 10479 { "pmovmskb", { Gdq, MS }, 0 },
c0f3af97
L
10480 },
10481 {
10482 /* MOD_0FE7_PREFIX_2 */
bf890a93 10483 { "movntdq", { Mx, XM }, 0 },
c0f3af97
L
10484 },
10485 {
10486 /* MOD_0FF0_PREFIX_3 */
bf890a93 10487 { "lddqu", { XM, M }, 0 },
c0f3af97
L
10488 },
10489 {
10490 /* MOD_0F382A_PREFIX_2 */
bf890a93 10491 { "movntdqa", { XM, Mx }, 0 },
c0f3af97 10492 },
603555e5
L
10493 {
10494 /* MOD_0F38F5_PREFIX_2 */
10495 { "wrussK", { M, Gdq }, PREFIX_OPCODE },
10496 },
10497 {
10498 /* MOD_0F38F6_PREFIX_0 */
10499 { "wrssK", { M, Gdq }, PREFIX_OPCODE },
10500 },
5d79adc4
L
10501 {
10502 /* MOD_0F38F8_PREFIX_1 */
10503 { "enqcmds", { Gva, M }, PREFIX_OPCODE },
10504 },
c0a30a9f
L
10505 {
10506 /* MOD_0F38F8_PREFIX_2 */
10507 { "movdir64b", { Gva, M }, PREFIX_OPCODE },
10508 },
5d79adc4
L
10509 {
10510 /* MOD_0F38F8_PREFIX_3 */
10511 { "enqcmd", { Gva, M }, PREFIX_OPCODE },
10512 },
c0a30a9f
L
10513 {
10514 /* MOD_0F38F9_PREFIX_0 */
10515 { "movdiri", { Em, Gv }, PREFIX_OPCODE },
10516 },
c0f3af97
L
10517 {
10518 /* MOD_62_32BIT */
bf890a93 10519 { "bound{S|}", { Gv, Ma }, 0 },
43234a1e 10520 { EVEX_TABLE (EVEX_0F) },
c0f3af97
L
10521 },
10522 {
10523 /* MOD_C4_32BIT */
bf890a93 10524 { "lesS", { Gv, Mp }, 0 },
c0f3af97
L
10525 { VEX_C4_TABLE (VEX_0F) },
10526 },
10527 {
10528 /* MOD_C5_32BIT */
bf890a93 10529 { "ldsS", { Gv, Mp }, 0 },
c0f3af97
L
10530 { VEX_C5_TABLE (VEX_0F) },
10531 },
10532 {
592a252b
L
10533 /* MOD_VEX_0F12_PREFIX_0 */
10534 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_0) },
10535 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_1) },
c0f3af97
L
10536 },
10537 {
592a252b
L
10538 /* MOD_VEX_0F13 */
10539 { VEX_LEN_TABLE (VEX_LEN_0F13_M_0) },
c0f3af97
L
10540 },
10541 {
592a252b
L
10542 /* MOD_VEX_0F16_PREFIX_0 */
10543 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_0) },
10544 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_1) },
c0f3af97
L
10545 },
10546 {
592a252b
L
10547 /* MOD_VEX_0F17 */
10548 { VEX_LEN_TABLE (VEX_LEN_0F17_M_0) },
c0f3af97
L
10549 },
10550 {
592a252b 10551 /* MOD_VEX_0F2B */
ec6f095a 10552 { "vmovntpX", { Mx, XM }, 0 },
c0f3af97 10553 },
ab4e4ed5
AF
10554 {
10555 /* MOD_VEX_W_0_0F41_P_0_LEN_1 */
10556 { Bad_Opcode },
10557 { "kandw", { MaskG, MaskVex, MaskR }, 0 },
10558 },
10559 {
10560 /* MOD_VEX_W_1_0F41_P_0_LEN_1 */
10561 { Bad_Opcode },
10562 { "kandq", { MaskG, MaskVex, MaskR }, 0 },
10563 },
10564 {
10565 /* MOD_VEX_W_0_0F41_P_2_LEN_1 */
10566 { Bad_Opcode },
10567 { "kandb", { MaskG, MaskVex, MaskR }, 0 },
10568 },
10569 {
10570 /* MOD_VEX_W_1_0F41_P_2_LEN_1 */
10571 { Bad_Opcode },
10572 { "kandd", { MaskG, MaskVex, MaskR }, 0 },
10573 },
10574 {
10575 /* MOD_VEX_W_0_0F42_P_0_LEN_1 */
10576 { Bad_Opcode },
10577 { "kandnw", { MaskG, MaskVex, MaskR }, 0 },
10578 },
10579 {
10580 /* MOD_VEX_W_1_0F42_P_0_LEN_1 */
10581 { Bad_Opcode },
10582 { "kandnq", { MaskG, MaskVex, MaskR }, 0 },
10583 },
10584 {
10585 /* MOD_VEX_W_0_0F42_P_2_LEN_1 */
10586 { Bad_Opcode },
10587 { "kandnb", { MaskG, MaskVex, MaskR }, 0 },
10588 },
10589 {
10590 /* MOD_VEX_W_1_0F42_P_2_LEN_1 */
10591 { Bad_Opcode },
10592 { "kandnd", { MaskG, MaskVex, MaskR }, 0 },
10593 },
10594 {
10595 /* MOD_VEX_W_0_0F44_P_0_LEN_0 */
10596 { Bad_Opcode },
10597 { "knotw", { MaskG, MaskR }, 0 },
10598 },
10599 {
10600 /* MOD_VEX_W_1_0F44_P_0_LEN_0 */
10601 { Bad_Opcode },
10602 { "knotq", { MaskG, MaskR }, 0 },
10603 },
10604 {
10605 /* MOD_VEX_W_0_0F44_P_2_LEN_0 */
10606 { Bad_Opcode },
10607 { "knotb", { MaskG, MaskR }, 0 },
10608 },
10609 {
10610 /* MOD_VEX_W_1_0F44_P_2_LEN_0 */
10611 { Bad_Opcode },
10612 { "knotd", { MaskG, MaskR }, 0 },
10613 },
10614 {
10615 /* MOD_VEX_W_0_0F45_P_0_LEN_1 */
10616 { Bad_Opcode },
10617 { "korw", { MaskG, MaskVex, MaskR }, 0 },
10618 },
10619 {
10620 /* MOD_VEX_W_1_0F45_P_0_LEN_1 */
10621 { Bad_Opcode },
10622 { "korq", { MaskG, MaskVex, MaskR }, 0 },
10623 },
10624 {
10625 /* MOD_VEX_W_0_0F45_P_2_LEN_1 */
10626 { Bad_Opcode },
10627 { "korb", { MaskG, MaskVex, MaskR }, 0 },
10628 },
10629 {
10630 /* MOD_VEX_W_1_0F45_P_2_LEN_1 */
10631 { Bad_Opcode },
10632 { "kord", { MaskG, MaskVex, MaskR }, 0 },
10633 },
10634 {
10635 /* MOD_VEX_W_0_0F46_P_0_LEN_1 */
10636 { Bad_Opcode },
10637 { "kxnorw", { MaskG, MaskVex, MaskR }, 0 },
10638 },
10639 {
10640 /* MOD_VEX_W_1_0F46_P_0_LEN_1 */
10641 { Bad_Opcode },
10642 { "kxnorq", { MaskG, MaskVex, MaskR }, 0 },
10643 },
10644 {
10645 /* MOD_VEX_W_0_0F46_P_2_LEN_1 */
10646 { Bad_Opcode },
10647 { "kxnorb", { MaskG, MaskVex, MaskR }, 0 },
10648 },
10649 {
10650 /* MOD_VEX_W_1_0F46_P_2_LEN_1 */
10651 { Bad_Opcode },
10652 { "kxnord", { MaskG, MaskVex, MaskR }, 0 },
10653 },
10654 {
10655 /* MOD_VEX_W_0_0F47_P_0_LEN_1 */
10656 { Bad_Opcode },
10657 { "kxorw", { MaskG, MaskVex, MaskR }, 0 },
10658 },
10659 {
10660 /* MOD_VEX_W_1_0F47_P_0_LEN_1 */
10661 { Bad_Opcode },
10662 { "kxorq", { MaskG, MaskVex, MaskR }, 0 },
10663 },
10664 {
10665 /* MOD_VEX_W_0_0F47_P_2_LEN_1 */
10666 { Bad_Opcode },
10667 { "kxorb", { MaskG, MaskVex, MaskR }, 0 },
10668 },
10669 {
10670 /* MOD_VEX_W_1_0F47_P_2_LEN_1 */
10671 { Bad_Opcode },
10672 { "kxord", { MaskG, MaskVex, MaskR }, 0 },
10673 },
10674 {
10675 /* MOD_VEX_W_0_0F4A_P_0_LEN_1 */
10676 { Bad_Opcode },
10677 { "kaddw", { MaskG, MaskVex, MaskR }, 0 },
10678 },
10679 {
10680 /* MOD_VEX_W_1_0F4A_P_0_LEN_1 */
10681 { Bad_Opcode },
10682 { "kaddq", { MaskG, MaskVex, MaskR }, 0 },
10683 },
10684 {
10685 /* MOD_VEX_W_0_0F4A_P_2_LEN_1 */
10686 { Bad_Opcode },
10687 { "kaddb", { MaskG, MaskVex, MaskR }, 0 },
10688 },
10689 {
10690 /* MOD_VEX_W_1_0F4A_P_2_LEN_1 */
10691 { Bad_Opcode },
10692 { "kaddd", { MaskG, MaskVex, MaskR }, 0 },
10693 },
10694 {
10695 /* MOD_VEX_W_0_0F4B_P_0_LEN_1 */
10696 { Bad_Opcode },
10697 { "kunpckwd", { MaskG, MaskVex, MaskR }, 0 },
10698 },
10699 {
10700 /* MOD_VEX_W_1_0F4B_P_0_LEN_1 */
10701 { Bad_Opcode },
10702 { "kunpckdq", { MaskG, MaskVex, MaskR }, 0 },
10703 },
10704 {
10705 /* MOD_VEX_W_0_0F4B_P_2_LEN_1 */
10706 { Bad_Opcode },
10707 { "kunpckbw", { MaskG, MaskVex, MaskR }, 0 },
10708 },
c0f3af97 10709 {
592a252b 10710 /* MOD_VEX_0F50 */
592d1631 10711 { Bad_Opcode },
ec6f095a 10712 { "vmovmskpX", { Gdq, XS }, 0 },
c0f3af97
L
10713 },
10714 {
592a252b 10715 /* MOD_VEX_0F71_REG_2 */
592d1631 10716 { Bad_Opcode },
592a252b 10717 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_2) },
b844680a
L
10718 },
10719 {
592a252b 10720 /* MOD_VEX_0F71_REG_4 */
592d1631 10721 { Bad_Opcode },
592a252b 10722 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_4) },
b844680a
L
10723 },
10724 {
592a252b 10725 /* MOD_VEX_0F71_REG_6 */
592d1631 10726 { Bad_Opcode },
592a252b 10727 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_6) },
b844680a
L
10728 },
10729 {
592a252b 10730 /* MOD_VEX_0F72_REG_2 */
592d1631 10731 { Bad_Opcode },
592a252b 10732 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_2) },
b844680a 10733 },
d8faab4e 10734 {
592a252b 10735 /* MOD_VEX_0F72_REG_4 */
592d1631 10736 { Bad_Opcode },
592a252b 10737 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_4) },
d8faab4e
L
10738 },
10739 {
592a252b 10740 /* MOD_VEX_0F72_REG_6 */
592d1631 10741 { Bad_Opcode },
592a252b 10742 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_6) },
d8faab4e 10743 },
876d4bfa 10744 {
592a252b 10745 /* MOD_VEX_0F73_REG_2 */
592d1631 10746 { Bad_Opcode },
592a252b 10747 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_2) },
876d4bfa
L
10748 },
10749 {
592a252b 10750 /* MOD_VEX_0F73_REG_3 */
592d1631 10751 { Bad_Opcode },
592a252b 10752 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_3) },
475a2301
L
10753 },
10754 {
592a252b 10755 /* MOD_VEX_0F73_REG_6 */
592d1631 10756 { Bad_Opcode },
592a252b 10757 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_6) },
876d4bfa
L
10758 },
10759 {
592a252b 10760 /* MOD_VEX_0F73_REG_7 */
592d1631 10761 { Bad_Opcode },
592a252b 10762 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_7) },
876d4bfa 10763 },
ab4e4ed5
AF
10764 {
10765 /* MOD_VEX_W_0_0F91_P_0_LEN_0 */
10766 { "kmovw", { Ew, MaskG }, 0 },
10767 { Bad_Opcode },
10768 },
10769 {
10770 /* MOD_VEX_W_0_0F91_P_0_LEN_0 */
10771 { "kmovq", { Eq, MaskG }, 0 },
10772 { Bad_Opcode },
10773 },
10774 {
10775 /* MOD_VEX_W_0_0F91_P_2_LEN_0 */
10776 { "kmovb", { Eb, MaskG }, 0 },
10777 { Bad_Opcode },
10778 },
10779 {
10780 /* MOD_VEX_W_0_0F91_P_2_LEN_0 */
10781 { "kmovd", { Ed, MaskG }, 0 },
10782 { Bad_Opcode },
10783 },
10784 {
10785 /* MOD_VEX_W_0_0F92_P_0_LEN_0 */
10786 { Bad_Opcode },
10787 { "kmovw", { MaskG, Rdq }, 0 },
10788 },
10789 {
10790 /* MOD_VEX_W_0_0F92_P_2_LEN_0 */
10791 { Bad_Opcode },
10792 { "kmovb", { MaskG, Rdq }, 0 },
10793 },
10794 {
58a211d2 10795 /* MOD_VEX_0F92_P_3_LEN_0 */
ab4e4ed5 10796 { Bad_Opcode },
58a211d2 10797 { "kmovK", { MaskG, Rdq }, 0 },
ab4e4ed5
AF
10798 },
10799 {
10800 /* MOD_VEX_W_0_0F93_P_0_LEN_0 */
10801 { Bad_Opcode },
10802 { "kmovw", { Gdq, MaskR }, 0 },
10803 },
10804 {
10805 /* MOD_VEX_W_0_0F93_P_2_LEN_0 */
10806 { Bad_Opcode },
10807 { "kmovb", { Gdq, MaskR }, 0 },
10808 },
10809 {
58a211d2 10810 /* MOD_VEX_0F93_P_3_LEN_0 */
ab4e4ed5 10811 { Bad_Opcode },
58a211d2 10812 { "kmovK", { Gdq, MaskR }, 0 },
ab4e4ed5
AF
10813 },
10814 {
10815 /* MOD_VEX_W_0_0F98_P_0_LEN_0 */
10816 { Bad_Opcode },
10817 { "kortestw", { MaskG, MaskR }, 0 },
10818 },
10819 {
10820 /* MOD_VEX_W_1_0F98_P_0_LEN_0 */
10821 { Bad_Opcode },
10822 { "kortestq", { MaskG, MaskR }, 0 },
10823 },
10824 {
10825 /* MOD_VEX_W_0_0F98_P_2_LEN_0 */
10826 { Bad_Opcode },
10827 { "kortestb", { MaskG, MaskR }, 0 },
10828 },
10829 {
10830 /* MOD_VEX_W_1_0F98_P_2_LEN_0 */
10831 { Bad_Opcode },
10832 { "kortestd", { MaskG, MaskR }, 0 },
10833 },
10834 {
10835 /* MOD_VEX_W_0_0F99_P_0_LEN_0 */
10836 { Bad_Opcode },
10837 { "ktestw", { MaskG, MaskR }, 0 },
10838 },
10839 {
10840 /* MOD_VEX_W_1_0F99_P_0_LEN_0 */
10841 { Bad_Opcode },
10842 { "ktestq", { MaskG, MaskR }, 0 },
10843 },
10844 {
10845 /* MOD_VEX_W_0_0F99_P_2_LEN_0 */
10846 { Bad_Opcode },
10847 { "ktestb", { MaskG, MaskR }, 0 },
10848 },
10849 {
10850 /* MOD_VEX_W_1_0F99_P_2_LEN_0 */
10851 { Bad_Opcode },
10852 { "ktestd", { MaskG, MaskR }, 0 },
10853 },
876d4bfa 10854 {
592a252b
L
10855 /* MOD_VEX_0FAE_REG_2 */
10856 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_2_M_0) },
876d4bfa 10857 },
bbedc832 10858 {
592a252b
L
10859 /* MOD_VEX_0FAE_REG_3 */
10860 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_3_M_0) },
bbedc832 10861 },
144c41d9 10862 {
592a252b 10863 /* MOD_VEX_0FD7_PREFIX_2 */
592d1631 10864 { Bad_Opcode },
ec6f095a 10865 { "vpmovmskb", { Gdq, XS }, 0 },
144c41d9 10866 },
1afd85e3 10867 {
592a252b 10868 /* MOD_VEX_0FE7_PREFIX_2 */
ec6f095a 10869 { "vmovntdq", { Mx, XM }, 0 },
1afd85e3
L
10870 },
10871 {
592a252b 10872 /* MOD_VEX_0FF0_PREFIX_3 */
ec6f095a 10873 { "vlddqu", { XM, M }, 0 },
92fddf8e 10874 },
75c135a8 10875 {
592a252b
L
10876 /* MOD_VEX_0F381A_PREFIX_2 */
10877 { VEX_LEN_TABLE (VEX_LEN_0F381A_P_2_M_0) },
75c135a8 10878 },
1afd85e3 10879 {
592a252b 10880 /* MOD_VEX_0F382A_PREFIX_2 */
ec6f095a 10881 { "vmovntdqa", { XM, Mx }, 0 },
1afd85e3 10882 },
75c135a8 10883 {
592a252b
L
10884 /* MOD_VEX_0F382C_PREFIX_2 */
10885 { VEX_W_TABLE (VEX_W_0F382C_P_2_M_0) },
75c135a8 10886 },
1afd85e3 10887 {
592a252b
L
10888 /* MOD_VEX_0F382D_PREFIX_2 */
10889 { VEX_W_TABLE (VEX_W_0F382D_P_2_M_0) },
1afd85e3
L
10890 },
10891 {
592a252b
L
10892 /* MOD_VEX_0F382E_PREFIX_2 */
10893 { VEX_W_TABLE (VEX_W_0F382E_P_2_M_0) },
1afd85e3
L
10894 },
10895 {
592a252b
L
10896 /* MOD_VEX_0F382F_PREFIX_2 */
10897 { VEX_W_TABLE (VEX_W_0F382F_P_2_M_0) },
1afd85e3 10898 },
6c30d220
L
10899 {
10900 /* MOD_VEX_0F385A_PREFIX_2 */
10901 { VEX_LEN_TABLE (VEX_LEN_0F385A_P_2_M_0) },
10902 },
10903 {
10904 /* MOD_VEX_0F388C_PREFIX_2 */
bf890a93 10905 { "vpmaskmov%LW", { XM, Vex, Mx }, 0 },
6c30d220
L
10906 },
10907 {
10908 /* MOD_VEX_0F388E_PREFIX_2 */
bf890a93 10909 { "vpmaskmov%LW", { Mx, Vex, XM }, 0 },
6c30d220 10910 },
ab4e4ed5
AF
10911 {
10912 /* MOD_VEX_W_0_0F3A30_P_2_LEN_0 */
10913 { Bad_Opcode },
10914 { "kshiftrb", { MaskG, MaskR, Ib }, 0 },
10915 },
10916 {
10917 /* MOD_VEX_W_1_0F3A30_P_2_LEN_0 */
10918 { Bad_Opcode },
10919 { "kshiftrw", { MaskG, MaskR, Ib }, 0 },
10920 },
10921 {
10922 /* MOD_VEX_W_0_0F3A31_P_2_LEN_0 */
10923 { Bad_Opcode },
10924 { "kshiftrd", { MaskG, MaskR, Ib }, 0 },
10925 },
10926 {
10927 /* MOD_VEX_W_1_0F3A31_P_2_LEN_0 */
10928 { Bad_Opcode },
10929 { "kshiftrq", { MaskG, MaskR, Ib }, 0 },
10930 },
10931 {
10932 /* MOD_VEX_W_0_0F3A32_P_2_LEN_0 */
10933 { Bad_Opcode },
10934 { "kshiftlb", { MaskG, MaskR, Ib }, 0 },
10935 },
10936 {
10937 /* MOD_VEX_W_1_0F3A32_P_2_LEN_0 */
10938 { Bad_Opcode },
10939 { "kshiftlw", { MaskG, MaskR, Ib }, 0 },
10940 },
10941 {
10942 /* MOD_VEX_W_0_0F3A33_P_2_LEN_0 */
10943 { Bad_Opcode },
10944 { "kshiftld", { MaskG, MaskR, Ib }, 0 },
10945 },
10946 {
10947 /* MOD_VEX_W_1_0F3A33_P_2_LEN_0 */
10948 { Bad_Opcode },
10949 { "kshiftlq", { MaskG, MaskR, Ib }, 0 },
10950 },
ad692897
L
10951
10952#include "i386-dis-evex-mod.h"
b844680a
L
10953};
10954
1ceb70f8 10955static const struct dis386 rm_table[][8] = {
42164a71
L
10956 {
10957 /* RM_C6_REG_7 */
bf890a93 10958 { "xabort", { Skip_MODRM, Ib }, 0 },
42164a71
L
10959 },
10960 {
10961 /* RM_C7_REG_7 */
bf890a93 10962 { "xbeginT", { Skip_MODRM, Jv }, 0 },
42164a71 10963 },
b844680a 10964 {
1ceb70f8 10965 /* RM_0F01_REG_0 */
a4e78aa5 10966 { "enclv", { Skip_MODRM }, 0 },
bf890a93
IT
10967 { "vmcall", { Skip_MODRM }, 0 },
10968 { "vmlaunch", { Skip_MODRM }, 0 },
10969 { "vmresume", { Skip_MODRM }, 0 },
10970 { "vmxoff", { Skip_MODRM }, 0 },
be3a8dca 10971 { "pconfig", { Skip_MODRM }, 0 },
b844680a
L
10972 },
10973 {
1ceb70f8 10974 /* RM_0F01_REG_1 */
bf890a93
IT
10975 { "monitor", { { OP_Monitor, 0 } }, 0 },
10976 { "mwait", { { OP_Mwait, 0 } }, 0 },
10977 { "clac", { Skip_MODRM }, 0 },
10978 { "stac", { Skip_MODRM }, 0 },
2cf200a4
IT
10979 { Bad_Opcode },
10980 { Bad_Opcode },
10981 { Bad_Opcode },
bf890a93 10982 { "encls", { Skip_MODRM }, 0 },
b844680a 10983 },
475a2301
L
10984 {
10985 /* RM_0F01_REG_2 */
bf890a93
IT
10986 { "xgetbv", { Skip_MODRM }, 0 },
10987 { "xsetbv", { Skip_MODRM }, 0 },
8729a6f6
L
10988 { Bad_Opcode },
10989 { Bad_Opcode },
bf890a93
IT
10990 { "vmfunc", { Skip_MODRM }, 0 },
10991 { "xend", { Skip_MODRM }, 0 },
10992 { "xtest", { Skip_MODRM }, 0 },
10993 { "enclu", { Skip_MODRM }, 0 },
475a2301 10994 },
b844680a 10995 {
1ceb70f8 10996 /* RM_0F01_REG_3 */
bf890a93
IT
10997 { "vmrun", { Skip_MODRM }, 0 },
10998 { "vmmcall", { Skip_MODRM }, 0 },
10999 { "vmload", { Skip_MODRM }, 0 },
11000 { "vmsave", { Skip_MODRM }, 0 },
11001 { "stgi", { Skip_MODRM }, 0 },
11002 { "clgi", { Skip_MODRM }, 0 },
11003 { "skinit", { Skip_MODRM }, 0 },
11004 { "invlpga", { Skip_MODRM }, 0 },
4e7d34a6 11005 },
8eab4136
L
11006 {
11007 /* RM_0F01_REG_5 */
2234eee6 11008 { PREFIX_TABLE (PREFIX_MOD_3_0F01_REG_5_RM_0) },
8eab4136 11009 { Bad_Opcode },
603555e5 11010 { PREFIX_TABLE (PREFIX_MOD_3_0F01_REG_5_RM_2) },
8eab4136
L
11011 { Bad_Opcode },
11012 { Bad_Opcode },
11013 { Bad_Opcode },
11014 { "rdpkru", { Skip_MODRM }, 0 },
11015 { "wrpkru", { Skip_MODRM }, 0 },
11016 },
4e7d34a6 11017 {
1ceb70f8 11018 /* RM_0F01_REG_7 */
bf890a93
IT
11019 { "swapgs", { Skip_MODRM }, 0 },
11020 { "rdtscp", { Skip_MODRM }, 0 },
9916071f
AP
11021 { "monitorx", { { OP_Monitor, 0 } }, 0 },
11022 { "mwaitx", { { OP_Mwaitx, 0 } }, 0 },
bf890a93 11023 { "clzero", { Skip_MODRM }, 0 },
b844680a 11024 },
603555e5
L
11025 {
11026 /* RM_0F1E_MOD_3_REG_7 */
11027 { "nopQ", { Ev }, 0 },
11028 { "nopQ", { Ev }, 0 },
11029 { "endbr64", { Skip_MODRM }, PREFIX_OPCODE },
11030 { "endbr32", { Skip_MODRM }, PREFIX_OPCODE },
11031 { "nopQ", { Ev }, 0 },
11032 { "nopQ", { Ev }, 0 },
11033 { "nopQ", { Ev }, 0 },
11034 { "nopQ", { Ev }, 0 },
11035 },
b844680a 11036 {
1ceb70f8 11037 /* RM_0FAE_REG_6 */
bf890a93 11038 { "mfence", { Skip_MODRM }, 0 },
b844680a 11039 },
bbedc832 11040 {
1ceb70f8 11041 /* RM_0FAE_REG_7 */
b5cefcca
L
11042 { "sfence", { Skip_MODRM }, 0 },
11043
144c41d9 11044 },
b844680a
L
11045};
11046
c608c12e
AM
11047#define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")
11048
f16cd0d5
L
11049/* We use the high bit to indicate different name for the same
11050 prefix. */
f16cd0d5 11051#define REP_PREFIX (0xf3 | 0x100)
42164a71
L
11052#define XACQUIRE_PREFIX (0xf2 | 0x200)
11053#define XRELEASE_PREFIX (0xf3 | 0x400)
7e8b059b 11054#define BND_PREFIX (0xf2 | 0x400)
04ef582a 11055#define NOTRACK_PREFIX (0x3e | 0x100)
f16cd0d5
L
11056
11057static int
26ca5450 11058ckprefix (void)
252b5132 11059{
f16cd0d5 11060 int newrex, i, length;
52b15da3 11061 rex = 0;
c0f3af97 11062 rex_ignored = 0;
252b5132 11063 prefixes = 0;
7d421014 11064 used_prefixes = 0;
52b15da3 11065 rex_used = 0;
f16cd0d5
L
11066 last_lock_prefix = -1;
11067 last_repz_prefix = -1;
11068 last_repnz_prefix = -1;
11069 last_data_prefix = -1;
11070 last_addr_prefix = -1;
11071 last_rex_prefix = -1;
11072 last_seg_prefix = -1;
d9949a36 11073 fwait_prefix = -1;
285ca992 11074 active_seg_prefix = 0;
f310f33d
L
11075 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
11076 all_prefixes[i] = 0;
11077 i = 0;
f16cd0d5
L
11078 length = 0;
11079 /* The maximum instruction length is 15bytes. */
11080 while (length < MAX_CODE_LENGTH - 1)
252b5132
RH
11081 {
11082 FETCH_DATA (the_info, codep + 1);
52b15da3 11083 newrex = 0;
252b5132
RH
11084 switch (*codep)
11085 {
52b15da3
JH
11086 /* REX prefixes family. */
11087 case 0x40:
11088 case 0x41:
11089 case 0x42:
11090 case 0x43:
11091 case 0x44:
11092 case 0x45:
11093 case 0x46:
11094 case 0x47:
11095 case 0x48:
11096 case 0x49:
11097 case 0x4a:
11098 case 0x4b:
11099 case 0x4c:
11100 case 0x4d:
11101 case 0x4e:
11102 case 0x4f:
f16cd0d5
L
11103 if (address_mode == mode_64bit)
11104 newrex = *codep;
11105 else
11106 return 1;
11107 last_rex_prefix = i;
52b15da3 11108 break;
252b5132
RH
11109 case 0xf3:
11110 prefixes |= PREFIX_REPZ;
f16cd0d5 11111 last_repz_prefix = i;
252b5132
RH
11112 break;
11113 case 0xf2:
11114 prefixes |= PREFIX_REPNZ;
f16cd0d5 11115 last_repnz_prefix = i;
252b5132
RH
11116 break;
11117 case 0xf0:
11118 prefixes |= PREFIX_LOCK;
f16cd0d5 11119 last_lock_prefix = i;
252b5132
RH
11120 break;
11121 case 0x2e:
11122 prefixes |= PREFIX_CS;
f16cd0d5 11123 last_seg_prefix = i;
285ca992 11124 active_seg_prefix = PREFIX_CS;
252b5132
RH
11125 break;
11126 case 0x36:
11127 prefixes |= PREFIX_SS;
f16cd0d5 11128 last_seg_prefix = i;
285ca992 11129 active_seg_prefix = PREFIX_SS;
252b5132
RH
11130 break;
11131 case 0x3e:
11132 prefixes |= PREFIX_DS;
f16cd0d5 11133 last_seg_prefix = i;
285ca992 11134 active_seg_prefix = PREFIX_DS;
252b5132
RH
11135 break;
11136 case 0x26:
11137 prefixes |= PREFIX_ES;
f16cd0d5 11138 last_seg_prefix = i;
285ca992 11139 active_seg_prefix = PREFIX_ES;
252b5132
RH
11140 break;
11141 case 0x64:
11142 prefixes |= PREFIX_FS;
f16cd0d5 11143 last_seg_prefix = i;
285ca992 11144 active_seg_prefix = PREFIX_FS;
252b5132
RH
11145 break;
11146 case 0x65:
11147 prefixes |= PREFIX_GS;
f16cd0d5 11148 last_seg_prefix = i;
285ca992 11149 active_seg_prefix = PREFIX_GS;
252b5132
RH
11150 break;
11151 case 0x66:
11152 prefixes |= PREFIX_DATA;
f16cd0d5 11153 last_data_prefix = i;
252b5132
RH
11154 break;
11155 case 0x67:
11156 prefixes |= PREFIX_ADDR;
f16cd0d5 11157 last_addr_prefix = i;
252b5132 11158 break;
5076851f 11159 case FWAIT_OPCODE:
252b5132
RH
11160 /* fwait is really an instruction. If there are prefixes
11161 before the fwait, they belong to the fwait, *not* to the
11162 following instruction. */
d9949a36 11163 fwait_prefix = i;
3e7d61b2 11164 if (prefixes || rex)
252b5132
RH
11165 {
11166 prefixes |= PREFIX_FWAIT;
11167 codep++;
6c067bbb
RM
11168 /* This ensures that the previous REX prefixes are noticed
11169 as unused prefixes, as in the return case below. */
11170 rex_used = rex;
f16cd0d5 11171 return 1;
252b5132
RH
11172 }
11173 prefixes = PREFIX_FWAIT;
11174 break;
11175 default:
f16cd0d5 11176 return 1;
252b5132 11177 }
52b15da3
JH
11178 /* Rex is ignored when followed by another prefix. */
11179 if (rex)
11180 {
3e7d61b2 11181 rex_used = rex;
f16cd0d5 11182 return 1;
52b15da3 11183 }
f16cd0d5 11184 if (*codep != FWAIT_OPCODE)
4e9ac44a 11185 all_prefixes[i++] = *codep;
52b15da3 11186 rex = newrex;
252b5132 11187 codep++;
f16cd0d5
L
11188 length++;
11189 }
11190 return 0;
11191}
11192
7d421014
ILT
11193/* Return the name of the prefix byte PREF, or NULL if PREF is not a
11194 prefix byte. */
11195
11196static const char *
26ca5450 11197prefix_name (int pref, int sizeflag)
7d421014 11198{
0003779b
L
11199 static const char *rexes [16] =
11200 {
11201 "rex", /* 0x40 */
11202 "rex.B", /* 0x41 */
11203 "rex.X", /* 0x42 */
11204 "rex.XB", /* 0x43 */
11205 "rex.R", /* 0x44 */
11206 "rex.RB", /* 0x45 */
11207 "rex.RX", /* 0x46 */
11208 "rex.RXB", /* 0x47 */
11209 "rex.W", /* 0x48 */
11210 "rex.WB", /* 0x49 */
11211 "rex.WX", /* 0x4a */
11212 "rex.WXB", /* 0x4b */
11213 "rex.WR", /* 0x4c */
11214 "rex.WRB", /* 0x4d */
11215 "rex.WRX", /* 0x4e */
11216 "rex.WRXB", /* 0x4f */
11217 };
11218
7d421014
ILT
11219 switch (pref)
11220 {
52b15da3
JH
11221 /* REX prefixes family. */
11222 case 0x40:
52b15da3 11223 case 0x41:
52b15da3 11224 case 0x42:
52b15da3 11225 case 0x43:
52b15da3 11226 case 0x44:
52b15da3 11227 case 0x45:
52b15da3 11228 case 0x46:
52b15da3 11229 case 0x47:
52b15da3 11230 case 0x48:
52b15da3 11231 case 0x49:
52b15da3 11232 case 0x4a:
52b15da3 11233 case 0x4b:
52b15da3 11234 case 0x4c:
52b15da3 11235 case 0x4d:
52b15da3 11236 case 0x4e:
52b15da3 11237 case 0x4f:
0003779b 11238 return rexes [pref - 0x40];
7d421014
ILT
11239 case 0xf3:
11240 return "repz";
11241 case 0xf2:
11242 return "repnz";
11243 case 0xf0:
11244 return "lock";
11245 case 0x2e:
11246 return "cs";
11247 case 0x36:
11248 return "ss";
11249 case 0x3e:
11250 return "ds";
11251 case 0x26:
11252 return "es";
11253 case 0x64:
11254 return "fs";
11255 case 0x65:
11256 return "gs";
11257 case 0x66:
11258 return (sizeflag & DFLAG) ? "data16" : "data32";
11259 case 0x67:
cb712a9e 11260 if (address_mode == mode_64bit)
db6eb5be 11261 return (sizeflag & AFLAG) ? "addr32" : "addr64";
c1a64871 11262 else
2888cb7a 11263 return (sizeflag & AFLAG) ? "addr16" : "addr32";
7d421014
ILT
11264 case FWAIT_OPCODE:
11265 return "fwait";
f16cd0d5
L
11266 case REP_PREFIX:
11267 return "rep";
42164a71
L
11268 case XACQUIRE_PREFIX:
11269 return "xacquire";
11270 case XRELEASE_PREFIX:
11271 return "xrelease";
7e8b059b
L
11272 case BND_PREFIX:
11273 return "bnd";
04ef582a
L
11274 case NOTRACK_PREFIX:
11275 return "notrack";
7d421014
ILT
11276 default:
11277 return NULL;
11278 }
11279}
11280
ce518a5f
L
11281static char op_out[MAX_OPERANDS][100];
11282static int op_ad, op_index[MAX_OPERANDS];
1d9f512f 11283static int two_source_ops;
ce518a5f
L
11284static bfd_vma op_address[MAX_OPERANDS];
11285static bfd_vma op_riprel[MAX_OPERANDS];
52b15da3 11286static bfd_vma start_pc;
ce518a5f 11287
252b5132
RH
11288/*
11289 * On the 386's of 1988, the maximum length of an instruction is 15 bytes.
11290 * (see topic "Redundant prefixes" in the "Differences from 8086"
11291 * section of the "Virtual 8086 Mode" chapter.)
11292 * 'pc' should be the address of this instruction, it will
11293 * be used to print the target address if this is a relative jump or call
11294 * The function returns the length of this instruction in bytes.
11295 */
11296
252b5132 11297static char intel_syntax;
9d141669 11298static char intel_mnemonic = !SYSV386_COMPAT;
252b5132
RH
11299static char open_char;
11300static char close_char;
11301static char separator_char;
11302static char scale_char;
11303
5db04b09
L
11304enum x86_64_isa
11305{
11306 amd64 = 0,
11307 intel64
11308};
11309
11310static enum x86_64_isa isa64;
11311
e396998b
AM
11312/* Here for backwards compatibility. When gdb stops using
11313 print_insn_i386_att and print_insn_i386_intel these functions can
11314 disappear, and print_insn_i386 be merged into print_insn. */
252b5132 11315int
26ca5450 11316print_insn_i386_att (bfd_vma pc, disassemble_info *info)
252b5132
RH
11317{
11318 intel_syntax = 0;
e396998b
AM
11319
11320 return print_insn (pc, info);
252b5132
RH
11321}
11322
11323int
26ca5450 11324print_insn_i386_intel (bfd_vma pc, disassemble_info *info)
252b5132
RH
11325{
11326 intel_syntax = 1;
e396998b
AM
11327
11328 return print_insn (pc, info);
252b5132
RH
11329}
11330
e396998b 11331int
26ca5450 11332print_insn_i386 (bfd_vma pc, disassemble_info *info)
e396998b
AM
11333{
11334 intel_syntax = -1;
11335
11336 return print_insn (pc, info);
11337}
11338
f59a29b9
L
11339void
11340print_i386_disassembler_options (FILE *stream)
11341{
11342 fprintf (stream, _("\n\
11343The following i386/x86-64 specific disassembler options are supported for use\n\
11344with the -M switch (multiple options should be separated by commas):\n"));
11345
11346 fprintf (stream, _(" x86-64 Disassemble in 64bit mode\n"));
11347 fprintf (stream, _(" i386 Disassemble in 32bit mode\n"));
11348 fprintf (stream, _(" i8086 Disassemble in 16bit mode\n"));
11349 fprintf (stream, _(" att Display instruction in AT&T syntax\n"));
11350 fprintf (stream, _(" intel Display instruction in Intel syntax\n"));
9d141669
L
11351 fprintf (stream, _(" att-mnemonic\n"
11352 " Display instruction in AT&T mnemonic\n"));
11353 fprintf (stream, _(" intel-mnemonic\n"
11354 " Display instruction in Intel mnemonic\n"));
f59a29b9
L
11355 fprintf (stream, _(" addr64 Assume 64bit address size\n"));
11356 fprintf (stream, _(" addr32 Assume 32bit address size\n"));
11357 fprintf (stream, _(" addr16 Assume 16bit address size\n"));
11358 fprintf (stream, _(" data32 Assume 32bit data size\n"));
11359 fprintf (stream, _(" data16 Assume 16bit data size\n"));
11360 fprintf (stream, _(" suffix Always display instruction suffix in AT&T syntax\n"));
5db04b09
L
11361 fprintf (stream, _(" amd64 Display instruction in AMD64 ISA\n"));
11362 fprintf (stream, _(" intel64 Display instruction in Intel64 ISA\n"));
f59a29b9
L
11363}
11364
592d1631 11365/* Bad opcode. */
bf890a93 11366static const struct dis386 bad_opcode = { "(bad)", { XX }, 0 };
592d1631 11367
b844680a
L
11368/* Get a pointer to struct dis386 with a valid name. */
11369
11370static const struct dis386 *
8bb15339 11371get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
b844680a 11372{
91d6fa6a 11373 int vindex, vex_table_index;
b844680a
L
11374
11375 if (dp->name != NULL)
11376 return dp;
11377
11378 switch (dp->op[0].bytemode)
11379 {
1ceb70f8
L
11380 case USE_REG_TABLE:
11381 dp = &reg_table[dp->op[1].bytemode][modrm.reg];
11382 break;
11383
11384 case USE_MOD_TABLE:
91d6fa6a
NC
11385 vindex = modrm.mod == 0x3 ? 1 : 0;
11386 dp = &mod_table[dp->op[1].bytemode][vindex];
1ceb70f8
L
11387 break;
11388
11389 case USE_RM_TABLE:
11390 dp = &rm_table[dp->op[1].bytemode][modrm.rm];
b844680a
L
11391 break;
11392
4e7d34a6 11393 case USE_PREFIX_TABLE:
c0f3af97 11394 if (need_vex)
b844680a 11395 {
c0f3af97
L
11396 /* The prefix in VEX is implicit. */
11397 switch (vex.prefix)
11398 {
11399 case 0:
91d6fa6a 11400 vindex = 0;
c0f3af97
L
11401 break;
11402 case REPE_PREFIX_OPCODE:
91d6fa6a 11403 vindex = 1;
c0f3af97
L
11404 break;
11405 case DATA_PREFIX_OPCODE:
91d6fa6a 11406 vindex = 2;
c0f3af97
L
11407 break;
11408 case REPNE_PREFIX_OPCODE:
91d6fa6a 11409 vindex = 3;
c0f3af97
L
11410 break;
11411 default:
11412 abort ();
11413 break;
11414 }
b844680a 11415 }
7bb15c6f 11416 else
b844680a 11417 {
285ca992
L
11418 int last_prefix = -1;
11419 int prefix = 0;
91d6fa6a 11420 vindex = 0;
285ca992
L
11421 /* We check PREFIX_REPNZ and PREFIX_REPZ before PREFIX_DATA.
11422 When there are multiple PREFIX_REPNZ and PREFIX_REPZ, the
11423 last one wins. */
11424 if ((prefixes & (PREFIX_REPZ | PREFIX_REPNZ)) != 0)
b844680a 11425 {
285ca992 11426 if (last_repz_prefix > last_repnz_prefix)
c0f3af97 11427 {
285ca992
L
11428 vindex = 1;
11429 prefix = PREFIX_REPZ;
11430 last_prefix = last_repz_prefix;
c0f3af97
L
11431 }
11432 else
b844680a 11433 {
285ca992
L
11434 vindex = 3;
11435 prefix = PREFIX_REPNZ;
11436 last_prefix = last_repnz_prefix;
b844680a 11437 }
285ca992 11438
507bd325
L
11439 /* Check if prefix should be ignored. */
11440 if ((((prefix_table[dp->op[1].bytemode][vindex].prefix_requirement
11441 & PREFIX_IGNORED) >> PREFIX_IGNORED_SHIFT)
11442 & prefix) != 0)
285ca992
L
11443 vindex = 0;
11444 }
11445
11446 if (vindex == 0 && (prefixes & PREFIX_DATA) != 0)
11447 {
11448 vindex = 2;
11449 prefix = PREFIX_DATA;
11450 last_prefix = last_data_prefix;
11451 }
11452
11453 if (vindex != 0)
11454 {
11455 used_prefixes |= prefix;
11456 all_prefixes[last_prefix] = 0;
b844680a
L
11457 }
11458 }
91d6fa6a 11459 dp = &prefix_table[dp->op[1].bytemode][vindex];
b844680a
L
11460 break;
11461
4e7d34a6 11462 case USE_X86_64_TABLE:
91d6fa6a
NC
11463 vindex = address_mode == mode_64bit ? 1 : 0;
11464 dp = &x86_64_table[dp->op[1].bytemode][vindex];
b844680a
L
11465 break;
11466
4e7d34a6 11467 case USE_3BYTE_TABLE:
8bb15339 11468 FETCH_DATA (info, codep + 2);
91d6fa6a
NC
11469 vindex = *codep++;
11470 dp = &three_byte_table[dp->op[1].bytemode][vindex];
285ca992 11471 end_codep = codep;
8bb15339
L
11472 modrm.mod = (*codep >> 6) & 3;
11473 modrm.reg = (*codep >> 3) & 7;
11474 modrm.rm = *codep & 7;
11475 break;
11476
c0f3af97
L
11477 case USE_VEX_LEN_TABLE:
11478 if (!need_vex)
11479 abort ();
11480
11481 switch (vex.length)
11482 {
11483 case 128:
91d6fa6a 11484 vindex = 0;
c0f3af97
L
11485 break;
11486 case 256:
91d6fa6a 11487 vindex = 1;
c0f3af97
L
11488 break;
11489 default:
11490 abort ();
11491 break;
11492 }
11493
91d6fa6a 11494 dp = &vex_len_table[dp->op[1].bytemode][vindex];
c0f3af97
L
11495 break;
11496
04e2a182
L
11497 case USE_EVEX_LEN_TABLE:
11498 if (!vex.evex)
11499 abort ();
11500
11501 switch (vex.length)
11502 {
11503 case 128:
11504 vindex = 0;
11505 break;
11506 case 256:
11507 vindex = 1;
11508 break;
11509 case 512:
11510 vindex = 2;
11511 break;
11512 default:
11513 abort ();
11514 break;
11515 }
11516
11517 dp = &evex_len_table[dp->op[1].bytemode][vindex];
11518 break;
11519
f88c9eb0
SP
11520 case USE_XOP_8F_TABLE:
11521 FETCH_DATA (info, codep + 3);
11522 /* All bits in the REX prefix are ignored. */
11523 rex_ignored = rex;
11524 rex = ~(*codep >> 5) & 0x7;
11525
11526 /* VEX_TABLE_INDEX is the mmmmm part of the XOP byte 1 "RCB.mmmmm". */
11527 switch ((*codep & 0x1f))
11528 {
11529 default:
f07af43e
L
11530 dp = &bad_opcode;
11531 return dp;
5dd85c99
SP
11532 case 0x8:
11533 vex_table_index = XOP_08;
11534 break;
f88c9eb0
SP
11535 case 0x9:
11536 vex_table_index = XOP_09;
11537 break;
11538 case 0xa:
11539 vex_table_index = XOP_0A;
11540 break;
11541 }
11542 codep++;
11543 vex.w = *codep & 0x80;
11544 if (vex.w && address_mode == mode_64bit)
11545 rex |= REX_W;
11546
11547 vex.register_specifier = (~(*codep >> 3)) & 0xf;
abfcb414 11548 if (address_mode != mode_64bit)
f07af43e 11549 {
abfcb414
AP
11550 /* In 16/32-bit mode REX_B is silently ignored. */
11551 rex &= ~REX_B;
f07af43e 11552 }
f88c9eb0
SP
11553
11554 vex.length = (*codep & 0x4) ? 256 : 128;
11555 switch ((*codep & 0x3))
11556 {
11557 case 0:
f88c9eb0
SP
11558 break;
11559 case 1:
11560 vex.prefix = DATA_PREFIX_OPCODE;
11561 break;
11562 case 2:
11563 vex.prefix = REPE_PREFIX_OPCODE;
11564 break;
11565 case 3:
11566 vex.prefix = REPNE_PREFIX_OPCODE;
11567 break;
11568 }
11569 need_vex = 1;
11570 need_vex_reg = 1;
11571 codep++;
91d6fa6a
NC
11572 vindex = *codep++;
11573 dp = &xop_table[vex_table_index][vindex];
c48244a5 11574
285ca992 11575 end_codep = codep;
c48244a5
SP
11576 FETCH_DATA (info, codep + 1);
11577 modrm.mod = (*codep >> 6) & 3;
11578 modrm.reg = (*codep >> 3) & 7;
11579 modrm.rm = *codep & 7;
f88c9eb0
SP
11580 break;
11581
c0f3af97 11582 case USE_VEX_C4_TABLE:
43234a1e 11583 /* VEX prefix. */
c0f3af97
L
11584 FETCH_DATA (info, codep + 3);
11585 /* All bits in the REX prefix are ignored. */
11586 rex_ignored = rex;
11587 rex = ~(*codep >> 5) & 0x7;
11588 switch ((*codep & 0x1f))
11589 {
11590 default:
f07af43e
L
11591 dp = &bad_opcode;
11592 return dp;
c0f3af97 11593 case 0x1:
f88c9eb0 11594 vex_table_index = VEX_0F;
c0f3af97
L
11595 break;
11596 case 0x2:
f88c9eb0 11597 vex_table_index = VEX_0F38;
c0f3af97
L
11598 break;
11599 case 0x3:
f88c9eb0 11600 vex_table_index = VEX_0F3A;
c0f3af97
L
11601 break;
11602 }
11603 codep++;
11604 vex.w = *codep & 0x80;
9889cbb1 11605 if (address_mode == mode_64bit)
f07af43e 11606 {
9889cbb1
L
11607 if (vex.w)
11608 rex |= REX_W;
9889cbb1
L
11609 }
11610 else
11611 {
11612 /* For the 3-byte VEX prefix in 32-bit mode, the REX_B bit
11613 is ignored, other REX bits are 0 and the highest bit in
5f847646 11614 VEX.vvvv is also ignored (but we mustn't clear it here). */
9889cbb1 11615 rex = 0;
f07af43e 11616 }
5f847646 11617 vex.register_specifier = (~(*codep >> 3)) & 0xf;
c0f3af97
L
11618 vex.length = (*codep & 0x4) ? 256 : 128;
11619 switch ((*codep & 0x3))
11620 {
11621 case 0:
c0f3af97
L
11622 break;
11623 case 1:
11624 vex.prefix = DATA_PREFIX_OPCODE;
11625 break;
11626 case 2:
11627 vex.prefix = REPE_PREFIX_OPCODE;
11628 break;
11629 case 3:
11630 vex.prefix = REPNE_PREFIX_OPCODE;
11631 break;
11632 }
11633 need_vex = 1;
11634 need_vex_reg = 1;
11635 codep++;
91d6fa6a
NC
11636 vindex = *codep++;
11637 dp = &vex_table[vex_table_index][vindex];
285ca992 11638 end_codep = codep;
53c4d625
JB
11639 /* There is no MODRM byte for VEX0F 77. */
11640 if (vex_table_index != VEX_0F || vindex != 0x77)
c0f3af97
L
11641 {
11642 FETCH_DATA (info, codep + 1);
11643 modrm.mod = (*codep >> 6) & 3;
11644 modrm.reg = (*codep >> 3) & 7;
11645 modrm.rm = *codep & 7;
11646 }
11647 break;
11648
11649 case USE_VEX_C5_TABLE:
43234a1e 11650 /* VEX prefix. */
c0f3af97
L
11651 FETCH_DATA (info, codep + 2);
11652 /* All bits in the REX prefix are ignored. */
11653 rex_ignored = rex;
11654 rex = (*codep & 0x80) ? 0 : REX_R;
11655
9889cbb1
L
11656 /* For the 2-byte VEX prefix in 32-bit mode, the highest bit in
11657 VEX.vvvv is 1. */
c0f3af97 11658 vex.register_specifier = (~(*codep >> 3)) & 0xf;
c0f3af97
L
11659 vex.length = (*codep & 0x4) ? 256 : 128;
11660 switch ((*codep & 0x3))
11661 {
11662 case 0:
c0f3af97
L
11663 break;
11664 case 1:
11665 vex.prefix = DATA_PREFIX_OPCODE;
11666 break;
11667 case 2:
11668 vex.prefix = REPE_PREFIX_OPCODE;
11669 break;
11670 case 3:
11671 vex.prefix = REPNE_PREFIX_OPCODE;
11672 break;
11673 }
11674 need_vex = 1;
11675 need_vex_reg = 1;
11676 codep++;
91d6fa6a
NC
11677 vindex = *codep++;
11678 dp = &vex_table[dp->op[1].bytemode][vindex];
285ca992 11679 end_codep = codep;
53c4d625
JB
11680 /* There is no MODRM byte for VEX 77. */
11681 if (vindex != 0x77)
c0f3af97
L
11682 {
11683 FETCH_DATA (info, codep + 1);
11684 modrm.mod = (*codep >> 6) & 3;
11685 modrm.reg = (*codep >> 3) & 7;
11686 modrm.rm = *codep & 7;
11687 }
11688 break;
11689
9e30b8e0
L
11690 case USE_VEX_W_TABLE:
11691 if (!need_vex)
11692 abort ();
11693
11694 dp = &vex_w_table[dp->op[1].bytemode][vex.w ? 1 : 0];
11695 break;
11696
43234a1e
L
11697 case USE_EVEX_TABLE:
11698 two_source_ops = 0;
11699 /* EVEX prefix. */
11700 vex.evex = 1;
11701 FETCH_DATA (info, codep + 4);
11702 /* All bits in the REX prefix are ignored. */
11703 rex_ignored = rex;
11704 /* The first byte after 0x62. */
11705 rex = ~(*codep >> 5) & 0x7;
11706 vex.r = *codep & 0x10;
11707 switch ((*codep & 0xf))
11708 {
11709 default:
11710 return &bad_opcode;
11711 case 0x1:
11712 vex_table_index = EVEX_0F;
11713 break;
11714 case 0x2:
11715 vex_table_index = EVEX_0F38;
11716 break;
11717 case 0x3:
11718 vex_table_index = EVEX_0F3A;
11719 break;
11720 }
11721
11722 /* The second byte after 0x62. */
11723 codep++;
11724 vex.w = *codep & 0x80;
11725 if (vex.w && address_mode == mode_64bit)
11726 rex |= REX_W;
11727
11728 vex.register_specifier = (~(*codep >> 3)) & 0xf;
43234a1e
L
11729
11730 /* The U bit. */
11731 if (!(*codep & 0x4))
11732 return &bad_opcode;
11733
11734 switch ((*codep & 0x3))
11735 {
11736 case 0:
43234a1e
L
11737 break;
11738 case 1:
11739 vex.prefix = DATA_PREFIX_OPCODE;
11740 break;
11741 case 2:
11742 vex.prefix = REPE_PREFIX_OPCODE;
11743 break;
11744 case 3:
11745 vex.prefix = REPNE_PREFIX_OPCODE;
11746 break;
11747 }
11748
11749 /* The third byte after 0x62. */
11750 codep++;
11751
11752 /* Remember the static rounding bits. */
11753 vex.ll = (*codep >> 5) & 3;
11754 vex.b = (*codep & 0x10) != 0;
11755
11756 vex.v = *codep & 0x8;
11757 vex.mask_register_specifier = *codep & 0x7;
11758 vex.zeroing = *codep & 0x80;
11759
5f847646
JB
11760 if (address_mode != mode_64bit)
11761 {
11762 /* In 16/32-bit mode silently ignore following bits. */
11763 rex &= ~REX_B;
11764 vex.r = 1;
11765 vex.v = 1;
11766 }
11767
43234a1e
L
11768 need_vex = 1;
11769 need_vex_reg = 1;
11770 codep++;
11771 vindex = *codep++;
11772 dp = &evex_table[vex_table_index][vindex];
285ca992 11773 end_codep = codep;
43234a1e
L
11774 FETCH_DATA (info, codep + 1);
11775 modrm.mod = (*codep >> 6) & 3;
11776 modrm.reg = (*codep >> 3) & 7;
11777 modrm.rm = *codep & 7;
11778
11779 /* Set vector length. */
11780 if (modrm.mod == 3 && vex.b)
11781 vex.length = 512;
11782 else
11783 {
11784 switch (vex.ll)
11785 {
11786 case 0x0:
11787 vex.length = 128;
11788 break;
11789 case 0x1:
11790 vex.length = 256;
11791 break;
11792 case 0x2:
11793 vex.length = 512;
11794 break;
11795 default:
11796 return &bad_opcode;
11797 }
11798 }
11799 break;
11800
592d1631
L
11801 case 0:
11802 dp = &bad_opcode;
11803 break;
11804
b844680a 11805 default:
d34b5006 11806 abort ();
b844680a
L
11807 }
11808
11809 if (dp->name != NULL)
11810 return dp;
11811 else
8bb15339 11812 return get_valid_dis386 (dp, info);
b844680a
L
11813}
11814
dfc8cf43 11815static void
55cf16e1 11816get_sib (disassemble_info *info, int sizeflag)
dfc8cf43
L
11817{
11818 /* If modrm.mod == 3, operand must be register. */
11819 if (need_modrm
55cf16e1 11820 && ((sizeflag & AFLAG) || address_mode == mode_64bit)
dfc8cf43
L
11821 && modrm.mod != 3
11822 && modrm.rm == 4)
11823 {
11824 FETCH_DATA (info, codep + 2);
11825 sib.index = (codep [1] >> 3) & 7;
11826 sib.scale = (codep [1] >> 6) & 3;
11827 sib.base = codep [1] & 7;
11828 }
11829}
11830
e396998b 11831static int
26ca5450 11832print_insn (bfd_vma pc, disassemble_info *info)
252b5132 11833{
2da11e11 11834 const struct dis386 *dp;
252b5132 11835 int i;
ce518a5f 11836 char *op_txt[MAX_OPERANDS];
252b5132 11837 int needcomma;
df18fdba 11838 int sizeflag, orig_sizeflag;
e396998b 11839 const char *p;
252b5132 11840 struct dis_private priv;
f16cd0d5 11841 int prefix_length;
252b5132 11842
d7921315
L
11843 priv.orig_sizeflag = AFLAG | DFLAG;
11844 if ((info->mach & bfd_mach_i386_i386) != 0)
cb712a9e 11845 address_mode = mode_32bit;
2da11e11 11846 else if (info->mach == bfd_mach_i386_i8086)
d7921315
L
11847 {
11848 address_mode = mode_16bit;
11849 priv.orig_sizeflag = 0;
11850 }
2da11e11 11851 else
d7921315
L
11852 address_mode = mode_64bit;
11853
11854 if (intel_syntax == (char) -1)
11855 intel_syntax = (info->mach & bfd_mach_i386_intel_syntax) != 0;
e396998b
AM
11856
11857 for (p = info->disassembler_options; p != NULL; )
11858 {
5db04b09
L
11859 if (CONST_STRNEQ (p, "amd64"))
11860 isa64 = amd64;
11861 else if (CONST_STRNEQ (p, "intel64"))
11862 isa64 = intel64;
11863 else if (CONST_STRNEQ (p, "x86-64"))
e396998b 11864 {
cb712a9e 11865 address_mode = mode_64bit;
e396998b
AM
11866 priv.orig_sizeflag = AFLAG | DFLAG;
11867 }
0112cd26 11868 else if (CONST_STRNEQ (p, "i386"))
e396998b 11869 {
cb712a9e 11870 address_mode = mode_32bit;
e396998b
AM
11871 priv.orig_sizeflag = AFLAG | DFLAG;
11872 }
0112cd26 11873 else if (CONST_STRNEQ (p, "i8086"))
e396998b 11874 {
cb712a9e 11875 address_mode = mode_16bit;
e396998b
AM
11876 priv.orig_sizeflag = 0;
11877 }
0112cd26 11878 else if (CONST_STRNEQ (p, "intel"))
e396998b
AM
11879 {
11880 intel_syntax = 1;
9d141669
L
11881 if (CONST_STRNEQ (p + 5, "-mnemonic"))
11882 intel_mnemonic = 1;
e396998b 11883 }
0112cd26 11884 else if (CONST_STRNEQ (p, "att"))
e396998b
AM
11885 {
11886 intel_syntax = 0;
9d141669
L
11887 if (CONST_STRNEQ (p + 3, "-mnemonic"))
11888 intel_mnemonic = 0;
e396998b 11889 }
0112cd26 11890 else if (CONST_STRNEQ (p, "addr"))
e396998b 11891 {
f59a29b9
L
11892 if (address_mode == mode_64bit)
11893 {
11894 if (p[4] == '3' && p[5] == '2')
11895 priv.orig_sizeflag &= ~AFLAG;
11896 else if (p[4] == '6' && p[5] == '4')
11897 priv.orig_sizeflag |= AFLAG;
11898 }
11899 else
11900 {
11901 if (p[4] == '1' && p[5] == '6')
11902 priv.orig_sizeflag &= ~AFLAG;
11903 else if (p[4] == '3' && p[5] == '2')
11904 priv.orig_sizeflag |= AFLAG;
11905 }
e396998b 11906 }
0112cd26 11907 else if (CONST_STRNEQ (p, "data"))
e396998b
AM
11908 {
11909 if (p[4] == '1' && p[5] == '6')
11910 priv.orig_sizeflag &= ~DFLAG;
11911 else if (p[4] == '3' && p[5] == '2')
11912 priv.orig_sizeflag |= DFLAG;
11913 }
0112cd26 11914 else if (CONST_STRNEQ (p, "suffix"))
e396998b
AM
11915 priv.orig_sizeflag |= SUFFIX_ALWAYS;
11916
11917 p = strchr (p, ',');
11918 if (p != NULL)
11919 p++;
11920 }
11921
c0f92bf9
L
11922 if (address_mode == mode_64bit && sizeof (bfd_vma) < 8)
11923 {
11924 (*info->fprintf_func) (info->stream,
11925 _("64-bit address is disabled"));
11926 return -1;
11927 }
11928
e396998b
AM
11929 if (intel_syntax)
11930 {
11931 names64 = intel_names64;
11932 names32 = intel_names32;
11933 names16 = intel_names16;
11934 names8 = intel_names8;
11935 names8rex = intel_names8rex;
11936 names_seg = intel_names_seg;
b9733481 11937 names_mm = intel_names_mm;
7e8b059b 11938 names_bnd = intel_names_bnd;
b9733481
L
11939 names_xmm = intel_names_xmm;
11940 names_ymm = intel_names_ymm;
43234a1e 11941 names_zmm = intel_names_zmm;
db51cc60
L
11942 index64 = intel_index64;
11943 index32 = intel_index32;
43234a1e 11944 names_mask = intel_names_mask;
e396998b
AM
11945 index16 = intel_index16;
11946 open_char = '[';
11947 close_char = ']';
11948 separator_char = '+';
11949 scale_char = '*';
11950 }
11951 else
11952 {
11953 names64 = att_names64;
11954 names32 = att_names32;
11955 names16 = att_names16;
11956 names8 = att_names8;
11957 names8rex = att_names8rex;
11958 names_seg = att_names_seg;
b9733481 11959 names_mm = att_names_mm;
7e8b059b 11960 names_bnd = att_names_bnd;
b9733481
L
11961 names_xmm = att_names_xmm;
11962 names_ymm = att_names_ymm;
43234a1e 11963 names_zmm = att_names_zmm;
db51cc60
L
11964 index64 = att_index64;
11965 index32 = att_index32;
43234a1e 11966 names_mask = att_names_mask;
e396998b
AM
11967 index16 = att_index16;
11968 open_char = '(';
11969 close_char = ')';
11970 separator_char = ',';
11971 scale_char = ',';
11972 }
2da11e11 11973
4fe53c98 11974 /* The output looks better if we put 7 bytes on a line, since that
8a9036a4
L
11975 puts most long word instructions on a single line. Use 8 bytes
11976 for Intel L1OM. */
d7921315 11977 if ((info->mach & bfd_mach_l1om) != 0)
8a9036a4
L
11978 info->bytes_per_line = 8;
11979 else
11980 info->bytes_per_line = 7;
252b5132 11981
26ca5450 11982 info->private_data = &priv;
252b5132
RH
11983 priv.max_fetched = priv.the_buffer;
11984 priv.insn_start = pc;
252b5132
RH
11985
11986 obuf[0] = 0;
ce518a5f
L
11987 for (i = 0; i < MAX_OPERANDS; ++i)
11988 {
11989 op_out[i][0] = 0;
11990 op_index[i] = -1;
11991 }
252b5132
RH
11992
11993 the_info = info;
11994 start_pc = pc;
e396998b
AM
11995 start_codep = priv.the_buffer;
11996 codep = priv.the_buffer;
252b5132 11997
8df14d78 11998 if (OPCODES_SIGSETJMP (priv.bailout) != 0)
5076851f 11999 {
7d421014
ILT
12000 const char *name;
12001
5076851f 12002 /* Getting here means we tried for data but didn't get it. That
e396998b
AM
12003 means we have an incomplete instruction of some sort. Just
12004 print the first byte as a prefix or a .byte pseudo-op. */
12005 if (codep > priv.the_buffer)
5076851f 12006 {
e396998b 12007 name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
7d421014
ILT
12008 if (name != NULL)
12009 (*info->fprintf_func) (info->stream, "%s", name);
12010 else
5076851f 12011 {
7d421014
ILT
12012 /* Just print the first byte as a .byte instruction. */
12013 (*info->fprintf_func) (info->stream, ".byte 0x%x",
e396998b 12014 (unsigned int) priv.the_buffer[0]);
5076851f 12015 }
5076851f 12016
7d421014 12017 return 1;
5076851f
ILT
12018 }
12019
12020 return -1;
12021 }
12022
52b15da3 12023 obufp = obuf;
f16cd0d5
L
12024 sizeflag = priv.orig_sizeflag;
12025
12026 if (!ckprefix () || rex_used)
12027 {
12028 /* Too many prefixes or unused REX prefixes. */
12029 for (i = 0;
f6dd4781 12030 i < (int) ARRAY_SIZE (all_prefixes) && all_prefixes[i];
f16cd0d5 12031 i++)
de882298 12032 (*info->fprintf_func) (info->stream, "%s%s",
6c067bbb 12033 i == 0 ? "" : " ",
f16cd0d5 12034 prefix_name (all_prefixes[i], sizeflag));
de882298 12035 return i;
f16cd0d5 12036 }
252b5132
RH
12037
12038 insn_codep = codep;
12039
12040 FETCH_DATA (info, codep + 1);
12041 two_source_ops = (*codep == 0x62) || (*codep == 0xc8);
12042
3e7d61b2 12043 if (((prefixes & PREFIX_FWAIT)
f16cd0d5 12044 && ((*codep < 0xd8) || (*codep > 0xdf))))
252b5132 12045 {
86a80a50 12046 /* Handle prefixes before fwait. */
d9949a36 12047 for (i = 0; i < fwait_prefix && all_prefixes[i];
86a80a50
L
12048 i++)
12049 (*info->fprintf_func) (info->stream, "%s ",
12050 prefix_name (all_prefixes[i], sizeflag));
f16cd0d5 12051 (*info->fprintf_func) (info->stream, "fwait");
86a80a50 12052 return i + 1;
252b5132
RH
12053 }
12054
252b5132
RH
12055 if (*codep == 0x0f)
12056 {
eec0f4ca 12057 unsigned char threebyte;
5f40e14d
JS
12058
12059 codep++;
12060 FETCH_DATA (info, codep + 1);
12061 threebyte = *codep;
eec0f4ca 12062 dp = &dis386_twobyte[threebyte];
252b5132 12063 need_modrm = twobyte_has_modrm[*codep];
eec0f4ca 12064 codep++;
252b5132
RH
12065 }
12066 else
12067 {
6439fc28 12068 dp = &dis386[*codep];
252b5132 12069 need_modrm = onebyte_has_modrm[*codep];
eec0f4ca 12070 codep++;
252b5132 12071 }
246c51aa 12072
df18fdba
L
12073 /* Save sizeflag for printing the extra prefixes later before updating
12074 it for mnemonic and operand processing. The prefix names depend
12075 only on the address mode. */
12076 orig_sizeflag = sizeflag;
c608c12e 12077 if (prefixes & PREFIX_ADDR)
df18fdba 12078 sizeflag ^= AFLAG;
b844680a 12079 if ((prefixes & PREFIX_DATA))
df18fdba 12080 sizeflag ^= DFLAG;
3ffd33cf 12081
285ca992 12082 end_codep = codep;
8bb15339 12083 if (need_modrm)
252b5132
RH
12084 {
12085 FETCH_DATA (info, codep + 1);
7967e09e
L
12086 modrm.mod = (*codep >> 6) & 3;
12087 modrm.reg = (*codep >> 3) & 7;
12088 modrm.rm = *codep & 7;
252b5132
RH
12089 }
12090
42d5f9c6
MS
12091 need_vex = 0;
12092 need_vex_reg = 0;
12093 vex_w_done = 0;
caf0678c 12094 memset (&vex, 0, sizeof (vex));
55b126d4 12095
ce518a5f 12096 if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE)
252b5132 12097 {
55cf16e1 12098 get_sib (info, sizeflag);
252b5132
RH
12099 dofloat (sizeflag);
12100 }
12101 else
12102 {
8bb15339 12103 dp = get_valid_dis386 (dp, info);
b844680a 12104 if (dp != NULL && putop (dp->name, sizeflag) == 0)
6c067bbb 12105 {
55cf16e1 12106 get_sib (info, sizeflag);
ce518a5f
L
12107 for (i = 0; i < MAX_OPERANDS; ++i)
12108 {
246c51aa 12109 obufp = op_out[i];
ce518a5f
L
12110 op_ad = MAX_OPERANDS - 1 - i;
12111 if (dp->op[i].rtn)
12112 (*dp->op[i].rtn) (dp->op[i].bytemode, sizeflag);
43234a1e
L
12113 /* For EVEX instruction after the last operand masking
12114 should be printed. */
12115 if (i == 0 && vex.evex)
12116 {
12117 /* Don't print {%k0}. */
12118 if (vex.mask_register_specifier)
12119 {
12120 oappend ("{");
12121 oappend (names_mask[vex.mask_register_specifier]);
12122 oappend ("}");
12123 }
12124 if (vex.zeroing)
12125 oappend ("{z}");
12126 }
ce518a5f 12127 }
6439fc28 12128 }
252b5132
RH
12129 }
12130
63c6fc6c
L
12131 /* If VEX.vvvv and EVEX.vvvv are unused, they must be all 1s, which
12132 are all 0s in inverted form. */
12133 if (need_vex && vex.register_specifier != 0)
12134 {
12135 (*info->fprintf_func) (info->stream, "(bad)");
12136 return end_codep - priv.the_buffer;
12137 }
12138
d869730d 12139 /* Check if the REX prefix is used. */
e2e6193d 12140 if (rex_ignored == 0 && (rex ^ rex_used) == 0 && last_rex_prefix >= 0)
f16cd0d5
L
12141 all_prefixes[last_rex_prefix] = 0;
12142
5e6718e4 12143 /* Check if the SEG prefix is used. */
f16cd0d5
L
12144 if ((prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS | PREFIX_ES
12145 | PREFIX_FS | PREFIX_GS)) != 0
285ca992 12146 && (used_prefixes & active_seg_prefix) != 0)
f16cd0d5
L
12147 all_prefixes[last_seg_prefix] = 0;
12148
5e6718e4 12149 /* Check if the ADDR prefix is used. */
f16cd0d5
L
12150 if ((prefixes & PREFIX_ADDR) != 0
12151 && (used_prefixes & PREFIX_ADDR) != 0)
12152 all_prefixes[last_addr_prefix] = 0;
12153
df18fdba
L
12154 /* Check if the DATA prefix is used. */
12155 if ((prefixes & PREFIX_DATA) != 0
12156 && (used_prefixes & PREFIX_DATA) != 0)
12157 all_prefixes[last_data_prefix] = 0;
f16cd0d5 12158
df18fdba 12159 /* Print the extra prefixes. */
f16cd0d5 12160 prefix_length = 0;
f310f33d 12161 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
f16cd0d5
L
12162 if (all_prefixes[i])
12163 {
12164 const char *name;
df18fdba 12165 name = prefix_name (all_prefixes[i], orig_sizeflag);
f16cd0d5
L
12166 if (name == NULL)
12167 abort ();
12168 prefix_length += strlen (name) + 1;
12169 (*info->fprintf_func) (info->stream, "%s ", name);
12170 }
b844680a 12171
285ca992
L
12172 /* If the mandatory PREFIX_REPZ/PREFIX_REPNZ/PREFIX_DATA prefix is
12173 unused, opcode is invalid. Since the PREFIX_DATA prefix may be
12174 used by putop and MMX/SSE operand and may be overriden by the
12175 PREFIX_REPZ/PREFIX_REPNZ fix, we check the PREFIX_DATA prefix
12176 separately. */
3888916d 12177 if (dp->prefix_requirement == PREFIX_OPCODE
285ca992
L
12178 && dp != &bad_opcode
12179 && (((prefixes
12180 & (PREFIX_REPZ | PREFIX_REPNZ)) != 0
12181 && (used_prefixes
12182 & (PREFIX_REPZ | PREFIX_REPNZ)) == 0)
12183 || ((((prefixes
12184 & (PREFIX_REPZ | PREFIX_REPNZ | PREFIX_DATA))
12185 == PREFIX_DATA)
12186 && (used_prefixes & PREFIX_DATA) == 0))))
12187 {
12188 (*info->fprintf_func) (info->stream, "(bad)");
12189 return end_codep - priv.the_buffer;
12190 }
12191
f16cd0d5
L
12192 /* Check maximum code length. */
12193 if ((codep - start_codep) > MAX_CODE_LENGTH)
12194 {
12195 (*info->fprintf_func) (info->stream, "(bad)");
12196 return MAX_CODE_LENGTH;
12197 }
b844680a 12198
ea397f5b 12199 obufp = mnemonicendp;
f16cd0d5 12200 for (i = strlen (obuf) + prefix_length; i < 6; i++)
252b5132
RH
12201 oappend (" ");
12202 oappend (" ");
12203 (*info->fprintf_func) (info->stream, "%s", obuf);
12204
12205 /* The enter and bound instructions are printed with operands in the same
12206 order as the intel book; everything else is printed in reverse order. */
2da11e11 12207 if (intel_syntax || two_source_ops)
252b5132 12208 {
185b1163
L
12209 bfd_vma riprel;
12210
ce518a5f 12211 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 12212 op_txt[i] = op_out[i];
246c51aa 12213
3a8547d2
JB
12214 if (intel_syntax && dp && dp->op[2].rtn == OP_Rounding
12215 && dp->op[3].rtn == OP_E && dp->op[4].rtn == NULL)
12216 {
12217 op_txt[2] = op_out[3];
12218 op_txt[3] = op_out[2];
12219 }
12220
ce518a5f
L
12221 for (i = 0; i < (MAX_OPERANDS >> 1); ++i)
12222 {
6c067bbb
RM
12223 op_ad = op_index[i];
12224 op_index[i] = op_index[MAX_OPERANDS - 1 - i];
12225 op_index[MAX_OPERANDS - 1 - i] = op_ad;
185b1163
L
12226 riprel = op_riprel[i];
12227 op_riprel[i] = op_riprel [MAX_OPERANDS - 1 - i];
12228 op_riprel[MAX_OPERANDS - 1 - i] = riprel;
ce518a5f 12229 }
252b5132
RH
12230 }
12231 else
12232 {
ce518a5f 12233 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 12234 op_txt[MAX_OPERANDS - 1 - i] = op_out[i];
050dfa73
MM
12235 }
12236
ce518a5f
L
12237 needcomma = 0;
12238 for (i = 0; i < MAX_OPERANDS; ++i)
12239 if (*op_txt[i])
12240 {
12241 if (needcomma)
12242 (*info->fprintf_func) (info->stream, ",");
12243 if (op_index[i] != -1 && !op_riprel[i])
12244 (*info->print_address_func) ((bfd_vma) op_address[op_index[i]], info);
12245 else
12246 (*info->fprintf_func) (info->stream, "%s", op_txt[i]);
12247 needcomma = 1;
12248 }
050dfa73 12249
ce518a5f 12250 for (i = 0; i < MAX_OPERANDS; i++)
52b15da3
JH
12251 if (op_index[i] != -1 && op_riprel[i])
12252 {
12253 (*info->fprintf_func) (info->stream, " # ");
4fd7268a 12254 (*info->print_address_func) ((bfd_vma) (start_pc + (codep - start_codep)
52b15da3 12255 + op_address[op_index[i]]), info);
185b1163 12256 break;
52b15da3 12257 }
e396998b 12258 return codep - priv.the_buffer;
252b5132
RH
12259}
12260
6439fc28 12261static const char *float_mem[] = {
252b5132 12262 /* d8 */
7c52e0e8
L
12263 "fadd{s|}",
12264 "fmul{s|}",
12265 "fcom{s|}",
12266 "fcomp{s|}",
12267 "fsub{s|}",
12268 "fsubr{s|}",
12269 "fdiv{s|}",
12270 "fdivr{s|}",
db6eb5be 12271 /* d9 */
7c52e0e8 12272 "fld{s|}",
252b5132 12273 "(bad)",
7c52e0e8
L
12274 "fst{s|}",
12275 "fstp{s|}",
9306ca4a 12276 "fldenvIC",
252b5132 12277 "fldcw",
9306ca4a 12278 "fNstenvIC",
252b5132
RH
12279 "fNstcw",
12280 /* da */
7c52e0e8
L
12281 "fiadd{l|}",
12282 "fimul{l|}",
12283 "ficom{l|}",
12284 "ficomp{l|}",
12285 "fisub{l|}",
12286 "fisubr{l|}",
12287 "fidiv{l|}",
12288 "fidivr{l|}",
252b5132 12289 /* db */
7c52e0e8
L
12290 "fild{l|}",
12291 "fisttp{l|}",
12292 "fist{l|}",
12293 "fistp{l|}",
252b5132 12294 "(bad)",
6439fc28 12295 "fld{t||t|}",
252b5132 12296 "(bad)",
6439fc28 12297 "fstp{t||t|}",
252b5132 12298 /* dc */
7c52e0e8
L
12299 "fadd{l|}",
12300 "fmul{l|}",
12301 "fcom{l|}",
12302 "fcomp{l|}",
12303 "fsub{l|}",
12304 "fsubr{l|}",
12305 "fdiv{l|}",
12306 "fdivr{l|}",
252b5132 12307 /* dd */
7c52e0e8
L
12308 "fld{l|}",
12309 "fisttp{ll|}",
12310 "fst{l||}",
12311 "fstp{l|}",
9306ca4a 12312 "frstorIC",
252b5132 12313 "(bad)",
9306ca4a 12314 "fNsaveIC",
252b5132
RH
12315 "fNstsw",
12316 /* de */
ac465521
JB
12317 "fiadd{s|}",
12318 "fimul{s|}",
12319 "ficom{s|}",
12320 "ficomp{s|}",
12321 "fisub{s|}",
12322 "fisubr{s|}",
12323 "fidiv{s|}",
12324 "fidivr{s|}",
252b5132 12325 /* df */
ac465521
JB
12326 "fild{s|}",
12327 "fisttp{s|}",
12328 "fist{s|}",
12329 "fistp{s|}",
252b5132 12330 "fbld",
7c52e0e8 12331 "fild{ll|}",
252b5132 12332 "fbstp",
7c52e0e8 12333 "fistp{ll|}",
1d9f512f
AM
12334};
12335
12336static const unsigned char float_mem_mode[] = {
12337 /* d8 */
12338 d_mode,
12339 d_mode,
12340 d_mode,
12341 d_mode,
12342 d_mode,
12343 d_mode,
12344 d_mode,
12345 d_mode,
12346 /* d9 */
12347 d_mode,
12348 0,
12349 d_mode,
12350 d_mode,
12351 0,
12352 w_mode,
12353 0,
12354 w_mode,
12355 /* da */
12356 d_mode,
12357 d_mode,
12358 d_mode,
12359 d_mode,
12360 d_mode,
12361 d_mode,
12362 d_mode,
12363 d_mode,
12364 /* db */
12365 d_mode,
12366 d_mode,
12367 d_mode,
12368 d_mode,
12369 0,
9306ca4a 12370 t_mode,
1d9f512f 12371 0,
9306ca4a 12372 t_mode,
1d9f512f
AM
12373 /* dc */
12374 q_mode,
12375 q_mode,
12376 q_mode,
12377 q_mode,
12378 q_mode,
12379 q_mode,
12380 q_mode,
12381 q_mode,
12382 /* dd */
12383 q_mode,
12384 q_mode,
12385 q_mode,
12386 q_mode,
12387 0,
12388 0,
12389 0,
12390 w_mode,
12391 /* de */
12392 w_mode,
12393 w_mode,
12394 w_mode,
12395 w_mode,
12396 w_mode,
12397 w_mode,
12398 w_mode,
12399 w_mode,
12400 /* df */
12401 w_mode,
12402 w_mode,
12403 w_mode,
12404 w_mode,
9306ca4a 12405 t_mode,
1d9f512f 12406 q_mode,
9306ca4a 12407 t_mode,
1d9f512f 12408 q_mode
252b5132
RH
12409};
12410
ce518a5f
L
12411#define ST { OP_ST, 0 }
12412#define STi { OP_STi, 0 }
252b5132 12413
48c97fa1
L
12414#define FGRPd9_2 NULL, { { NULL, 1 } }, 0
12415#define FGRPd9_4 NULL, { { NULL, 2 } }, 0
12416#define FGRPd9_5 NULL, { { NULL, 3 } }, 0
12417#define FGRPd9_6 NULL, { { NULL, 4 } }, 0
12418#define FGRPd9_7 NULL, { { NULL, 5 } }, 0
12419#define FGRPda_5 NULL, { { NULL, 6 } }, 0
12420#define FGRPdb_4 NULL, { { NULL, 7 } }, 0
12421#define FGRPde_3 NULL, { { NULL, 8 } }, 0
12422#define FGRPdf_4 NULL, { { NULL, 9 } }, 0
252b5132 12423
2da11e11 12424static const struct dis386 float_reg[][8] = {
252b5132
RH
12425 /* d8 */
12426 {
bf890a93
IT
12427 { "fadd", { ST, STi }, 0 },
12428 { "fmul", { ST, STi }, 0 },
12429 { "fcom", { STi }, 0 },
12430 { "fcomp", { STi }, 0 },
12431 { "fsub", { ST, STi }, 0 },
12432 { "fsubr", { ST, STi }, 0 },
12433 { "fdiv", { ST, STi }, 0 },
12434 { "fdivr", { ST, STi }, 0 },
252b5132
RH
12435 },
12436 /* d9 */
12437 {
bf890a93
IT
12438 { "fld", { STi }, 0 },
12439 { "fxch", { STi }, 0 },
252b5132 12440 { FGRPd9_2 },
592d1631 12441 { Bad_Opcode },
252b5132
RH
12442 { FGRPd9_4 },
12443 { FGRPd9_5 },
12444 { FGRPd9_6 },
12445 { FGRPd9_7 },
12446 },
12447 /* da */
12448 {
bf890a93
IT
12449 { "fcmovb", { ST, STi }, 0 },
12450 { "fcmove", { ST, STi }, 0 },
12451 { "fcmovbe",{ ST, STi }, 0 },
12452 { "fcmovu", { ST, STi }, 0 },
592d1631 12453 { Bad_Opcode },
252b5132 12454 { FGRPda_5 },
592d1631
L
12455 { Bad_Opcode },
12456 { Bad_Opcode },
252b5132
RH
12457 },
12458 /* db */
12459 {
bf890a93
IT
12460 { "fcmovnb",{ ST, STi }, 0 },
12461 { "fcmovne",{ ST, STi }, 0 },
12462 { "fcmovnbe",{ ST, STi }, 0 },
12463 { "fcmovnu",{ ST, STi }, 0 },
252b5132 12464 { FGRPdb_4 },
bf890a93
IT
12465 { "fucomi", { ST, STi }, 0 },
12466 { "fcomi", { ST, STi }, 0 },
592d1631 12467 { Bad_Opcode },
252b5132
RH
12468 },
12469 /* dc */
12470 {
bf890a93
IT
12471 { "fadd", { STi, ST }, 0 },
12472 { "fmul", { STi, ST }, 0 },
592d1631
L
12473 { Bad_Opcode },
12474 { Bad_Opcode },
d53e6b98
JB
12475 { "fsub{!M|r}", { STi, ST }, 0 },
12476 { "fsub{M|}", { STi, ST }, 0 },
12477 { "fdiv{!M|r}", { STi, ST }, 0 },
12478 { "fdiv{M|}", { STi, ST }, 0 },
252b5132
RH
12479 },
12480 /* dd */
12481 {
bf890a93 12482 { "ffree", { STi }, 0 },
592d1631 12483 { Bad_Opcode },
bf890a93
IT
12484 { "fst", { STi }, 0 },
12485 { "fstp", { STi }, 0 },
12486 { "fucom", { STi }, 0 },
12487 { "fucomp", { STi }, 0 },
592d1631
L
12488 { Bad_Opcode },
12489 { Bad_Opcode },
252b5132
RH
12490 },
12491 /* de */
12492 {
bf890a93
IT
12493 { "faddp", { STi, ST }, 0 },
12494 { "fmulp", { STi, ST }, 0 },
592d1631 12495 { Bad_Opcode },
252b5132 12496 { FGRPde_3 },
d53e6b98
JB
12497 { "fsub{!M|r}p", { STi, ST }, 0 },
12498 { "fsub{M|}p", { STi, ST }, 0 },
12499 { "fdiv{!M|r}p", { STi, ST }, 0 },
12500 { "fdiv{M|}p", { STi, ST }, 0 },
252b5132
RH
12501 },
12502 /* df */
12503 {
bf890a93 12504 { "ffreep", { STi }, 0 },
592d1631
L
12505 { Bad_Opcode },
12506 { Bad_Opcode },
12507 { Bad_Opcode },
252b5132 12508 { FGRPdf_4 },
bf890a93
IT
12509 { "fucomip", { ST, STi }, 0 },
12510 { "fcomip", { ST, STi }, 0 },
592d1631 12511 { Bad_Opcode },
252b5132
RH
12512 },
12513};
12514
252b5132 12515static char *fgrps[][8] = {
48c97fa1
L
12516 /* Bad opcode 0 */
12517 {
12518 "(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12519 },
12520
12521 /* d9_2 1 */
252b5132
RH
12522 {
12523 "fnop","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12524 },
12525
48c97fa1 12526 /* d9_4 2 */
252b5132
RH
12527 {
12528 "fchs","fabs","(bad)","(bad)","ftst","fxam","(bad)","(bad)",
12529 },
12530
48c97fa1 12531 /* d9_5 3 */
252b5132
RH
12532 {
12533 "fld1","fldl2t","fldl2e","fldpi","fldlg2","fldln2","fldz","(bad)",
12534 },
12535
48c97fa1 12536 /* d9_6 4 */
252b5132
RH
12537 {
12538 "f2xm1","fyl2x","fptan","fpatan","fxtract","fprem1","fdecstp","fincstp",
12539 },
12540
48c97fa1 12541 /* d9_7 5 */
252b5132
RH
12542 {
12543 "fprem","fyl2xp1","fsqrt","fsincos","frndint","fscale","fsin","fcos",
12544 },
12545
48c97fa1 12546 /* da_5 6 */
252b5132
RH
12547 {
12548 "(bad)","fucompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12549 },
12550
48c97fa1 12551 /* db_4 7 */
252b5132 12552 {
309d3373
JB
12553 "fNeni(8087 only)","fNdisi(8087 only)","fNclex","fNinit",
12554 "fNsetpm(287 only)","frstpm(287 only)","(bad)","(bad)",
252b5132
RH
12555 },
12556
48c97fa1 12557 /* de_3 8 */
252b5132
RH
12558 {
12559 "(bad)","fcompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12560 },
12561
48c97fa1 12562 /* df_4 9 */
252b5132
RH
12563 {
12564 "fNstsw","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12565 },
12566};
12567
b6169b20
L
12568static void
12569swap_operand (void)
12570{
12571 mnemonicendp[0] = '.';
12572 mnemonicendp[1] = 's';
12573 mnemonicendp += 2;
12574}
12575
b844680a
L
12576static void
12577OP_Skip_MODRM (int bytemode ATTRIBUTE_UNUSED,
12578 int sizeflag ATTRIBUTE_UNUSED)
12579{
12580 /* Skip mod/rm byte. */
12581 MODRM_CHECK;
12582 codep++;
12583}
12584
252b5132 12585static void
26ca5450 12586dofloat (int sizeflag)
252b5132 12587{
2da11e11 12588 const struct dis386 *dp;
252b5132
RH
12589 unsigned char floatop;
12590
12591 floatop = codep[-1];
12592
7967e09e 12593 if (modrm.mod != 3)
252b5132 12594 {
7967e09e 12595 int fp_indx = (floatop - 0xd8) * 8 + modrm.reg;
1d9f512f
AM
12596
12597 putop (float_mem[fp_indx], sizeflag);
ce518a5f 12598 obufp = op_out[0];
6e50d963 12599 op_ad = 2;
1d9f512f 12600 OP_E (float_mem_mode[fp_indx], sizeflag);
252b5132
RH
12601 return;
12602 }
6608db57 12603 /* Skip mod/rm byte. */
4bba6815 12604 MODRM_CHECK;
252b5132
RH
12605 codep++;
12606
7967e09e 12607 dp = &float_reg[floatop - 0xd8][modrm.reg];
252b5132
RH
12608 if (dp->name == NULL)
12609 {
7967e09e 12610 putop (fgrps[dp->op[0].bytemode][modrm.rm], sizeflag);
252b5132 12611
6608db57 12612 /* Instruction fnstsw is only one with strange arg. */
252b5132 12613 if (floatop == 0xdf && codep[-1] == 0xe0)
ce518a5f 12614 strcpy (op_out[0], names16[0]);
252b5132
RH
12615 }
12616 else
12617 {
12618 putop (dp->name, sizeflag);
12619
ce518a5f 12620 obufp = op_out[0];
6e50d963 12621 op_ad = 2;
ce518a5f
L
12622 if (dp->op[0].rtn)
12623 (*dp->op[0].rtn) (dp->op[0].bytemode, sizeflag);
6e50d963 12624
ce518a5f 12625 obufp = op_out[1];
6e50d963 12626 op_ad = 1;
ce518a5f
L
12627 if (dp->op[1].rtn)
12628 (*dp->op[1].rtn) (dp->op[1].bytemode, sizeflag);
252b5132
RH
12629 }
12630}
12631
9ce09ba2
RM
12632/* Like oappend (below), but S is a string starting with '%'.
12633 In Intel syntax, the '%' is elided. */
12634static void
12635oappend_maybe_intel (const char *s)
12636{
12637 oappend (s + intel_syntax);
12638}
12639
252b5132 12640static void
26ca5450 12641OP_ST (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 12642{
9ce09ba2 12643 oappend_maybe_intel ("%st");
252b5132
RH
12644}
12645
252b5132 12646static void
26ca5450 12647OP_STi (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 12648{
7967e09e 12649 sprintf (scratchbuf, "%%st(%d)", modrm.rm);
9ce09ba2 12650 oappend_maybe_intel (scratchbuf);
252b5132
RH
12651}
12652
6608db57 12653/* Capital letters in template are macros. */
6439fc28 12654static int
d3ce72d0 12655putop (const char *in_template, int sizeflag)
252b5132 12656{
2da11e11 12657 const char *p;
9306ca4a 12658 int alt = 0;
9d141669 12659 int cond = 1;
98b528ac
L
12660 unsigned int l = 0, len = 1;
12661 char last[4];
12662
12663#define SAVE_LAST(c) \
12664 if (l < len && l < sizeof (last)) \
12665 last[l++] = c; \
12666 else \
12667 abort ();
252b5132 12668
d3ce72d0 12669 for (p = in_template; *p; p++)
252b5132
RH
12670 {
12671 switch (*p)
12672 {
12673 default:
12674 *obufp++ = *p;
12675 break;
98b528ac
L
12676 case '%':
12677 len++;
12678 break;
9d141669
L
12679 case '!':
12680 cond = 0;
12681 break;
6439fc28 12682 case '{':
6439fc28 12683 if (intel_syntax)
6439fc28
AM
12684 {
12685 while (*++p != '|')
7c52e0e8
L
12686 if (*p == '}' || *p == '\0')
12687 abort ();
6439fc28 12688 }
9306ca4a
JB
12689 /* Fall through. */
12690 case 'I':
12691 alt = 1;
12692 continue;
6439fc28
AM
12693 case '|':
12694 while (*++p != '}')
12695 {
12696 if (*p == '\0')
12697 abort ();
12698 }
12699 break;
12700 case '}':
12701 break;
252b5132 12702 case 'A':
db6eb5be
AM
12703 if (intel_syntax)
12704 break;
7967e09e 12705 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
252b5132
RH
12706 *obufp++ = 'b';
12707 break;
12708 case 'B':
4b06377f
L
12709 if (l == 0 && len == 1)
12710 {
12711case_B:
12712 if (intel_syntax)
12713 break;
12714 if (sizeflag & SUFFIX_ALWAYS)
12715 *obufp++ = 'b';
12716 }
12717 else
12718 {
12719 if (l != 1
12720 || len != 2
12721 || last[0] != 'L')
12722 {
12723 SAVE_LAST (*p);
12724 break;
12725 }
12726
12727 if (address_mode == mode_64bit
12728 && !(prefixes & PREFIX_ADDR))
12729 {
12730 *obufp++ = 'a';
12731 *obufp++ = 'b';
12732 *obufp++ = 's';
12733 }
12734
12735 goto case_B;
12736 }
252b5132 12737 break;
9306ca4a
JB
12738 case 'C':
12739 if (intel_syntax && !alt)
12740 break;
12741 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
12742 {
12743 if (sizeflag & DFLAG)
12744 *obufp++ = intel_syntax ? 'd' : 'l';
12745 else
12746 *obufp++ = intel_syntax ? 'w' : 's';
12747 used_prefixes |= (prefixes & PREFIX_DATA);
12748 }
12749 break;
ed7841b3
JB
12750 case 'D':
12751 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
12752 break;
161a04f6 12753 USED_REX (REX_W);
7967e09e 12754 if (modrm.mod == 3)
ed7841b3 12755 {
161a04f6 12756 if (rex & REX_W)
ed7841b3 12757 *obufp++ = 'q';
ed7841b3 12758 else
f16cd0d5
L
12759 {
12760 if (sizeflag & DFLAG)
12761 *obufp++ = intel_syntax ? 'd' : 'l';
12762 else
12763 *obufp++ = 'w';
12764 used_prefixes |= (prefixes & PREFIX_DATA);
12765 }
ed7841b3
JB
12766 }
12767 else
12768 *obufp++ = 'w';
12769 break;
252b5132 12770 case 'E': /* For jcxz/jecxz */
cb712a9e 12771 if (address_mode == mode_64bit)
c1a64871
JH
12772 {
12773 if (sizeflag & AFLAG)
12774 *obufp++ = 'r';
12775 else
12776 *obufp++ = 'e';
12777 }
12778 else
12779 if (sizeflag & AFLAG)
12780 *obufp++ = 'e';
3ffd33cf
AM
12781 used_prefixes |= (prefixes & PREFIX_ADDR);
12782 break;
12783 case 'F':
db6eb5be
AM
12784 if (intel_syntax)
12785 break;
e396998b 12786 if ((prefixes & PREFIX_ADDR) || (sizeflag & SUFFIX_ALWAYS))
3ffd33cf
AM
12787 {
12788 if (sizeflag & AFLAG)
cb712a9e 12789 *obufp++ = address_mode == mode_64bit ? 'q' : 'l';
3ffd33cf 12790 else
cb712a9e 12791 *obufp++ = address_mode == mode_64bit ? 'l' : 'w';
3ffd33cf
AM
12792 used_prefixes |= (prefixes & PREFIX_ADDR);
12793 }
252b5132 12794 break;
52fd6d94
JB
12795 case 'G':
12796 if (intel_syntax || (obufp[-1] != 's' && !(sizeflag & SUFFIX_ALWAYS)))
12797 break;
161a04f6 12798 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
12799 *obufp++ = 'l';
12800 else
12801 *obufp++ = 'w';
161a04f6 12802 if (!(rex & REX_W))
52fd6d94
JB
12803 used_prefixes |= (prefixes & PREFIX_DATA);
12804 break;
5dd0794d 12805 case 'H':
db6eb5be
AM
12806 if (intel_syntax)
12807 break;
5dd0794d
AM
12808 if ((prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_CS
12809 || (prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_DS)
12810 {
12811 used_prefixes |= prefixes & (PREFIX_CS | PREFIX_DS);
12812 *obufp++ = ',';
12813 *obufp++ = 'p';
12814 if (prefixes & PREFIX_DS)
12815 *obufp++ = 't';
12816 else
12817 *obufp++ = 'n';
12818 }
12819 break;
9306ca4a
JB
12820 case 'J':
12821 if (intel_syntax)
12822 break;
12823 *obufp++ = 'l';
12824 break;
42903f7f
L
12825 case 'K':
12826 USED_REX (REX_W);
12827 if (rex & REX_W)
12828 *obufp++ = 'q';
12829 else
12830 *obufp++ = 'd';
12831 break;
6dd5059a 12832 case 'Z':
04d824a4
JB
12833 if (l != 0 || len != 1)
12834 {
12835 if (l != 1 || len != 2 || last[0] != 'X')
12836 {
12837 SAVE_LAST (*p);
12838 break;
12839 }
12840 if (!need_vex || !vex.evex)
12841 abort ();
12842 if (intel_syntax
12843 || ((modrm.mod == 3 || vex.b) && !(sizeflag & SUFFIX_ALWAYS)))
12844 break;
12845 switch (vex.length)
12846 {
12847 case 128:
12848 *obufp++ = 'x';
12849 break;
12850 case 256:
12851 *obufp++ = 'y';
12852 break;
12853 case 512:
12854 *obufp++ = 'z';
12855 break;
12856 default:
12857 abort ();
12858 }
12859 break;
12860 }
6dd5059a
L
12861 if (intel_syntax)
12862 break;
12863 if (address_mode == mode_64bit && (sizeflag & SUFFIX_ALWAYS))
12864 {
12865 *obufp++ = 'q';
12866 break;
12867 }
12868 /* Fall through. */
98b528ac 12869 goto case_L;
252b5132 12870 case 'L':
98b528ac
L
12871 if (l != 0 || len != 1)
12872 {
12873 SAVE_LAST (*p);
12874 break;
12875 }
12876case_L:
db6eb5be
AM
12877 if (intel_syntax)
12878 break;
252b5132
RH
12879 if (sizeflag & SUFFIX_ALWAYS)
12880 *obufp++ = 'l';
252b5132 12881 break;
9d141669
L
12882 case 'M':
12883 if (intel_mnemonic != cond)
12884 *obufp++ = 'r';
12885 break;
252b5132
RH
12886 case 'N':
12887 if ((prefixes & PREFIX_FWAIT) == 0)
12888 *obufp++ = 'n';
7d421014
ILT
12889 else
12890 used_prefixes |= PREFIX_FWAIT;
252b5132 12891 break;
52b15da3 12892 case 'O':
161a04f6
L
12893 USED_REX (REX_W);
12894 if (rex & REX_W)
6439fc28 12895 *obufp++ = 'o';
a35ca55a
JB
12896 else if (intel_syntax && (sizeflag & DFLAG))
12897 *obufp++ = 'q';
52b15da3
JH
12898 else
12899 *obufp++ = 'd';
161a04f6 12900 if (!(rex & REX_W))
a35ca55a 12901 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 12902 break;
07f5af7d
L
12903 case '&':
12904 if (!intel_syntax
12905 && address_mode == mode_64bit
12906 && isa64 == intel64)
12907 {
12908 *obufp++ = 'q';
12909 break;
12910 }
12911 /* Fall through. */
6439fc28 12912 case 'T':
d9e3625e
L
12913 if (!intel_syntax
12914 && address_mode == mode_64bit
7bb15c6f 12915 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
12916 {
12917 *obufp++ = 'q';
12918 break;
12919 }
6608db57 12920 /* Fall through. */
4b4c407a 12921 goto case_P;
252b5132 12922 case 'P':
4b4c407a 12923 if (l == 0 && len == 1)
d9e3625e 12924 {
4b4c407a
L
12925case_P:
12926 if (intel_syntax)
d9e3625e 12927 {
4b4c407a
L
12928 if ((rex & REX_W) == 0
12929 && (prefixes & PREFIX_DATA))
12930 {
12931 if ((sizeflag & DFLAG) == 0)
12932 *obufp++ = 'w';
12933 used_prefixes |= (prefixes & PREFIX_DATA);
12934 }
12935 break;
12936 }
12937 if ((prefixes & PREFIX_DATA)
12938 || (rex & REX_W)
12939 || (sizeflag & SUFFIX_ALWAYS))
12940 {
12941 USED_REX (REX_W);
12942 if (rex & REX_W)
12943 *obufp++ = 'q';
12944 else
12945 {
12946 if (sizeflag & DFLAG)
12947 *obufp++ = 'l';
12948 else
12949 *obufp++ = 'w';
12950 used_prefixes |= (prefixes & PREFIX_DATA);
12951 }
d9e3625e 12952 }
d9e3625e 12953 }
4b4c407a 12954 else
252b5132 12955 {
4b4c407a
L
12956 if (l != 1 || len != 2 || last[0] != 'L')
12957 {
12958 SAVE_LAST (*p);
12959 break;
12960 }
12961
12962 if ((prefixes & PREFIX_DATA)
12963 || (rex & REX_W)
12964 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 12965 {
4b4c407a
L
12966 USED_REX (REX_W);
12967 if (rex & REX_W)
12968 *obufp++ = 'q';
12969 else
12970 {
12971 if (sizeflag & DFLAG)
12972 *obufp++ = intel_syntax ? 'd' : 'l';
12973 else
12974 *obufp++ = 'w';
12975 used_prefixes |= (prefixes & PREFIX_DATA);
12976 }
52b15da3 12977 }
252b5132
RH
12978 }
12979 break;
6439fc28 12980 case 'U':
db6eb5be
AM
12981 if (intel_syntax)
12982 break;
7bb15c6f 12983 if (address_mode == mode_64bit
6c067bbb 12984 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28 12985 {
7967e09e 12986 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
1a114b12 12987 *obufp++ = 'q';
6439fc28
AM
12988 break;
12989 }
6608db57 12990 /* Fall through. */
98b528ac 12991 goto case_Q;
252b5132 12992 case 'Q':
98b528ac 12993 if (l == 0 && len == 1)
252b5132 12994 {
98b528ac
L
12995case_Q:
12996 if (intel_syntax && !alt)
12997 break;
12998 USED_REX (REX_W);
12999 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 13000 {
98b528ac
L
13001 if (rex & REX_W)
13002 *obufp++ = 'q';
52b15da3 13003 else
98b528ac
L
13004 {
13005 if (sizeflag & DFLAG)
13006 *obufp++ = intel_syntax ? 'd' : 'l';
13007 else
13008 *obufp++ = 'w';
f16cd0d5 13009 used_prefixes |= (prefixes & PREFIX_DATA);
98b528ac 13010 }
52b15da3 13011 }
98b528ac
L
13012 }
13013 else
13014 {
13015 if (l != 1 || len != 2 || last[0] != 'L')
13016 {
13017 SAVE_LAST (*p);
13018 break;
13019 }
13020 if (intel_syntax
13021 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
13022 break;
13023 if ((rex & REX_W))
13024 {
13025 USED_REX (REX_W);
13026 *obufp++ = 'q';
13027 }
13028 else
13029 *obufp++ = 'l';
252b5132
RH
13030 }
13031 break;
13032 case 'R':
161a04f6
L
13033 USED_REX (REX_W);
13034 if (rex & REX_W)
a35ca55a
JB
13035 *obufp++ = 'q';
13036 else if (sizeflag & DFLAG)
c608c12e 13037 {
a35ca55a 13038 if (intel_syntax)
c608c12e 13039 *obufp++ = 'd';
c608c12e 13040 else
a35ca55a 13041 *obufp++ = 'l';
c608c12e 13042 }
252b5132 13043 else
a35ca55a
JB
13044 *obufp++ = 'w';
13045 if (intel_syntax && !p[1]
161a04f6 13046 && ((rex & REX_W) || (sizeflag & DFLAG)))
a35ca55a 13047 *obufp++ = 'e';
161a04f6 13048 if (!(rex & REX_W))
52b15da3 13049 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132 13050 break;
1a114b12 13051 case 'V':
4b06377f 13052 if (l == 0 && len == 1)
1a114b12 13053 {
4b06377f
L
13054 if (intel_syntax)
13055 break;
7bb15c6f 13056 if (address_mode == mode_64bit
6c067bbb 13057 && ((sizeflag & DFLAG) || (rex & REX_W)))
4b06377f
L
13058 {
13059 if (sizeflag & SUFFIX_ALWAYS)
13060 *obufp++ = 'q';
13061 break;
13062 }
13063 }
13064 else
13065 {
13066 if (l != 1
13067 || len != 2
13068 || last[0] != 'L')
13069 {
13070 SAVE_LAST (*p);
13071 break;
13072 }
13073
13074 if (rex & REX_W)
13075 {
13076 *obufp++ = 'a';
13077 *obufp++ = 'b';
13078 *obufp++ = 's';
13079 }
1a114b12
JB
13080 }
13081 /* Fall through. */
4b06377f 13082 goto case_S;
252b5132 13083 case 'S':
4b06377f 13084 if (l == 0 && len == 1)
252b5132 13085 {
4b06377f
L
13086case_S:
13087 if (intel_syntax)
13088 break;
13089 if (sizeflag & SUFFIX_ALWAYS)
52b15da3 13090 {
4b06377f
L
13091 if (rex & REX_W)
13092 *obufp++ = 'q';
52b15da3 13093 else
4b06377f
L
13094 {
13095 if (sizeflag & DFLAG)
13096 *obufp++ = 'l';
13097 else
13098 *obufp++ = 'w';
13099 used_prefixes |= (prefixes & PREFIX_DATA);
13100 }
13101 }
13102 }
13103 else
13104 {
13105 if (l != 1
13106 || len != 2
13107 || last[0] != 'L')
13108 {
13109 SAVE_LAST (*p);
13110 break;
52b15da3 13111 }
4b06377f
L
13112
13113 if (address_mode == mode_64bit
13114 && !(prefixes & PREFIX_ADDR))
13115 {
13116 *obufp++ = 'a';
13117 *obufp++ = 'b';
13118 *obufp++ = 's';
13119 }
13120
13121 goto case_S;
252b5132 13122 }
252b5132 13123 break;
041bd2e0 13124 case 'X':
c0f3af97
L
13125 if (l != 0 || len != 1)
13126 {
13127 SAVE_LAST (*p);
13128 break;
13129 }
13130 if (need_vex && vex.prefix)
13131 {
13132 if (vex.prefix == DATA_PREFIX_OPCODE)
13133 *obufp++ = 'd';
13134 else
13135 *obufp++ = 's';
13136 }
041bd2e0 13137 else
f16cd0d5
L
13138 {
13139 if (prefixes & PREFIX_DATA)
13140 *obufp++ = 'd';
13141 else
13142 *obufp++ = 's';
13143 used_prefixes |= (prefixes & PREFIX_DATA);
13144 }
041bd2e0 13145 break;
76f227a5 13146 case 'Y':
c0f3af97 13147 if (l == 0 && len == 1)
9646c87b 13148 abort ();
c0f3af97
L
13149 else
13150 {
13151 if (l != 1 || len != 2 || last[0] != 'X')
13152 {
13153 SAVE_LAST (*p);
13154 break;
13155 }
13156 if (!need_vex)
13157 abort ();
13158 if (intel_syntax
04d824a4 13159 || ((modrm.mod == 3 || vex.b) && !(sizeflag & SUFFIX_ALWAYS)))
c0f3af97
L
13160 break;
13161 switch (vex.length)
13162 {
13163 case 128:
13164 *obufp++ = 'x';
13165 break;
13166 case 256:
13167 *obufp++ = 'y';
13168 break;
04d824a4
JB
13169 case 512:
13170 if (!vex.evex)
c0f3af97 13171 default:
04d824a4 13172 abort ();
c0f3af97 13173 }
76f227a5
JH
13174 }
13175 break;
252b5132 13176 case 'W':
0bfee649 13177 if (l == 0 && len == 1)
a35ca55a 13178 {
0bfee649
L
13179 /* operand size flag for cwtl, cbtw */
13180 USED_REX (REX_W);
13181 if (rex & REX_W)
13182 {
13183 if (intel_syntax)
13184 *obufp++ = 'd';
13185 else
13186 *obufp++ = 'l';
13187 }
13188 else if (sizeflag & DFLAG)
13189 *obufp++ = 'w';
a35ca55a 13190 else
0bfee649
L
13191 *obufp++ = 'b';
13192 if (!(rex & REX_W))
13193 used_prefixes |= (prefixes & PREFIX_DATA);
a35ca55a 13194 }
252b5132 13195 else
0bfee649 13196 {
6c30d220
L
13197 if (l != 1
13198 || len != 2
13199 || (last[0] != 'X'
13200 && last[0] != 'L'))
0bfee649
L
13201 {
13202 SAVE_LAST (*p);
13203 break;
13204 }
13205 if (!need_vex)
13206 abort ();
6c30d220
L
13207 if (last[0] == 'X')
13208 *obufp++ = vex.w ? 'd': 's';
13209 else
13210 *obufp++ = vex.w ? 'q': 'd';
0bfee649 13211 }
252b5132 13212 break;
a72d2af2
L
13213 case '^':
13214 if (intel_syntax)
13215 break;
13216 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
13217 {
13218 if (sizeflag & DFLAG)
13219 *obufp++ = 'l';
13220 else
13221 *obufp++ = 'w';
13222 used_prefixes |= (prefixes & PREFIX_DATA);
13223 }
13224 break;
5db04b09
L
13225 case '@':
13226 if (intel_syntax)
13227 break;
13228 if (address_mode == mode_64bit
13229 && (isa64 == intel64
13230 || ((sizeflag & DFLAG) || (rex & REX_W))))
13231 *obufp++ = 'q';
13232 else if ((prefixes & PREFIX_DATA))
13233 {
13234 if (!(sizeflag & DFLAG))
13235 *obufp++ = 'w';
13236 used_prefixes |= (prefixes & PREFIX_DATA);
13237 }
13238 break;
252b5132 13239 }
9306ca4a 13240 alt = 0;
252b5132
RH
13241 }
13242 *obufp = 0;
ea397f5b 13243 mnemonicendp = obufp;
6439fc28 13244 return 0;
252b5132
RH
13245}
13246
13247static void
26ca5450 13248oappend (const char *s)
252b5132 13249{
ea397f5b 13250 obufp = stpcpy (obufp, s);
252b5132
RH
13251}
13252
13253static void
26ca5450 13254append_seg (void)
252b5132 13255{
285ca992
L
13256 /* Only print the active segment register. */
13257 if (!active_seg_prefix)
13258 return;
13259
13260 used_prefixes |= active_seg_prefix;
13261 switch (active_seg_prefix)
7d421014 13262 {
285ca992 13263 case PREFIX_CS:
9ce09ba2 13264 oappend_maybe_intel ("%cs:");
285ca992
L
13265 break;
13266 case PREFIX_DS:
9ce09ba2 13267 oappend_maybe_intel ("%ds:");
285ca992
L
13268 break;
13269 case PREFIX_SS:
9ce09ba2 13270 oappend_maybe_intel ("%ss:");
285ca992
L
13271 break;
13272 case PREFIX_ES:
9ce09ba2 13273 oappend_maybe_intel ("%es:");
285ca992
L
13274 break;
13275 case PREFIX_FS:
9ce09ba2 13276 oappend_maybe_intel ("%fs:");
285ca992
L
13277 break;
13278 case PREFIX_GS:
9ce09ba2 13279 oappend_maybe_intel ("%gs:");
285ca992
L
13280 break;
13281 default:
13282 break;
7d421014 13283 }
252b5132
RH
13284}
13285
13286static void
26ca5450 13287OP_indirE (int bytemode, int sizeflag)
252b5132
RH
13288{
13289 if (!intel_syntax)
13290 oappend ("*");
13291 OP_E (bytemode, sizeflag);
13292}
13293
52b15da3 13294static void
26ca5450 13295print_operand_value (char *buf, int hex, bfd_vma disp)
52b15da3 13296{
cb712a9e 13297 if (address_mode == mode_64bit)
52b15da3
JH
13298 {
13299 if (hex)
13300 {
13301 char tmp[30];
13302 int i;
13303 buf[0] = '0';
13304 buf[1] = 'x';
13305 sprintf_vma (tmp, disp);
6608db57 13306 for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++);
52b15da3
JH
13307 strcpy (buf + 2, tmp + i);
13308 }
13309 else
13310 {
13311 bfd_signed_vma v = disp;
13312 char tmp[30];
13313 int i;
13314 if (v < 0)
13315 {
13316 *(buf++) = '-';
13317 v = -disp;
6608db57 13318 /* Check for possible overflow on 0x8000000000000000. */
52b15da3
JH
13319 if (v < 0)
13320 {
13321 strcpy (buf, "9223372036854775808");
13322 return;
13323 }
13324 }
13325 if (!v)
13326 {
13327 strcpy (buf, "0");
13328 return;
13329 }
13330
13331 i = 0;
13332 tmp[29] = 0;
13333 while (v)
13334 {
6608db57 13335 tmp[28 - i] = (v % 10) + '0';
52b15da3
JH
13336 v /= 10;
13337 i++;
13338 }
13339 strcpy (buf, tmp + 29 - i);
13340 }
13341 }
13342 else
13343 {
13344 if (hex)
13345 sprintf (buf, "0x%x", (unsigned int) disp);
13346 else
13347 sprintf (buf, "%d", (int) disp);
13348 }
13349}
13350
5d669648
L
13351/* Put DISP in BUF as signed hex number. */
13352
13353static void
13354print_displacement (char *buf, bfd_vma disp)
13355{
13356 bfd_signed_vma val = disp;
13357 char tmp[30];
13358 int i, j = 0;
13359
13360 if (val < 0)
13361 {
13362 buf[j++] = '-';
13363 val = -disp;
13364
13365 /* Check for possible overflow. */
13366 if (val < 0)
13367 {
13368 switch (address_mode)
13369 {
13370 case mode_64bit:
13371 strcpy (buf + j, "0x8000000000000000");
13372 break;
13373 case mode_32bit:
13374 strcpy (buf + j, "0x80000000");
13375 break;
13376 case mode_16bit:
13377 strcpy (buf + j, "0x8000");
13378 break;
13379 }
13380 return;
13381 }
13382 }
13383
13384 buf[j++] = '0';
13385 buf[j++] = 'x';
13386
0af1713e 13387 sprintf_vma (tmp, (bfd_vma) val);
5d669648
L
13388 for (i = 0; tmp[i] == '0'; i++)
13389 continue;
13390 if (tmp[i] == '\0')
13391 i--;
13392 strcpy (buf + j, tmp + i);
13393}
13394
3f31e633
JB
13395static void
13396intel_operand_size (int bytemode, int sizeflag)
13397{
43234a1e
L
13398 if (vex.evex
13399 && vex.b
13400 && (bytemode == x_mode
13401 || bytemode == evex_half_bcst_xmmq_mode))
13402 {
13403 if (vex.w)
13404 oappend ("QWORD PTR ");
13405 else
13406 oappend ("DWORD PTR ");
13407 return;
13408 }
3f31e633
JB
13409 switch (bytemode)
13410 {
13411 case b_mode:
b6169b20 13412 case b_swap_mode:
42903f7f 13413 case dqb_mode:
1ba585e8 13414 case db_mode:
3f31e633
JB
13415 oappend ("BYTE PTR ");
13416 break;
13417 case w_mode:
1ba585e8 13418 case dw_mode:
3f31e633
JB
13419 case dqw_mode:
13420 oappend ("WORD PTR ");
13421 break;
07f5af7d
L
13422 case indir_v_mode:
13423 if (address_mode == mode_64bit && isa64 == intel64)
13424 {
13425 oappend ("QWORD PTR ");
13426 break;
13427 }
1a0670f3 13428 /* Fall through. */
1a114b12 13429 case stack_v_mode:
7bb15c6f 13430 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
3f31e633
JB
13431 {
13432 oappend ("QWORD PTR ");
3f31e633
JB
13433 break;
13434 }
1a0670f3 13435 /* Fall through. */
3f31e633 13436 case v_mode:
b6169b20 13437 case v_swap_mode:
3f31e633 13438 case dq_mode:
161a04f6
L
13439 USED_REX (REX_W);
13440 if (rex & REX_W)
3f31e633 13441 oappend ("QWORD PTR ");
3f31e633 13442 else
f16cd0d5
L
13443 {
13444 if ((sizeflag & DFLAG) || bytemode == dq_mode)
13445 oappend ("DWORD PTR ");
13446 else
13447 oappend ("WORD PTR ");
13448 used_prefixes |= (prefixes & PREFIX_DATA);
13449 }
3f31e633 13450 break;
52fd6d94 13451 case z_mode:
161a04f6 13452 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
13453 *obufp++ = 'D';
13454 oappend ("WORD PTR ");
161a04f6 13455 if (!(rex & REX_W))
52fd6d94
JB
13456 used_prefixes |= (prefixes & PREFIX_DATA);
13457 break;
34b772a6
JB
13458 case a_mode:
13459 if (sizeflag & DFLAG)
13460 oappend ("QWORD PTR ");
13461 else
13462 oappend ("DWORD PTR ");
13463 used_prefixes |= (prefixes & PREFIX_DATA);
13464 break;
3f31e633 13465 case d_mode:
539f890d
L
13466 case d_scalar_mode:
13467 case d_scalar_swap_mode:
fa99fab2 13468 case d_swap_mode:
42903f7f 13469 case dqd_mode:
3f31e633
JB
13470 oappend ("DWORD PTR ");
13471 break;
13472 case q_mode:
539f890d
L
13473 case q_scalar_mode:
13474 case q_scalar_swap_mode:
b6169b20 13475 case q_swap_mode:
3f31e633
JB
13476 oappend ("QWORD PTR ");
13477 break;
13478 case m_mode:
cb712a9e 13479 if (address_mode == mode_64bit)
3f31e633
JB
13480 oappend ("QWORD PTR ");
13481 else
13482 oappend ("DWORD PTR ");
13483 break;
13484 case f_mode:
13485 if (sizeflag & DFLAG)
13486 oappend ("FWORD PTR ");
13487 else
13488 oappend ("DWORD PTR ");
13489 used_prefixes |= (prefixes & PREFIX_DATA);
13490 break;
13491 case t_mode:
13492 oappend ("TBYTE PTR ");
13493 break;
13494 case x_mode:
b6169b20 13495 case x_swap_mode:
43234a1e
L
13496 case evex_x_gscat_mode:
13497 case evex_x_nobcst_mode:
53467f57
IT
13498 case b_scalar_mode:
13499 case w_scalar_mode:
c0f3af97
L
13500 if (need_vex)
13501 {
13502 switch (vex.length)
13503 {
13504 case 128:
13505 oappend ("XMMWORD PTR ");
13506 break;
13507 case 256:
13508 oappend ("YMMWORD PTR ");
13509 break;
43234a1e
L
13510 case 512:
13511 oappend ("ZMMWORD PTR ");
13512 break;
c0f3af97
L
13513 default:
13514 abort ();
13515 }
13516 }
13517 else
13518 oappend ("XMMWORD PTR ");
13519 break;
13520 case xmm_mode:
3f31e633
JB
13521 oappend ("XMMWORD PTR ");
13522 break;
43234a1e
L
13523 case ymm_mode:
13524 oappend ("YMMWORD PTR ");
13525 break;
c0f3af97 13526 case xmmq_mode:
43234a1e 13527 case evex_half_bcst_xmmq_mode:
c0f3af97
L
13528 if (!need_vex)
13529 abort ();
13530
13531 switch (vex.length)
13532 {
13533 case 128:
13534 oappend ("QWORD PTR ");
13535 break;
13536 case 256:
13537 oappend ("XMMWORD PTR ");
13538 break;
43234a1e
L
13539 case 512:
13540 oappend ("YMMWORD PTR ");
13541 break;
c0f3af97
L
13542 default:
13543 abort ();
13544 }
13545 break;
6c30d220
L
13546 case xmm_mb_mode:
13547 if (!need_vex)
13548 abort ();
13549
13550 switch (vex.length)
13551 {
13552 case 128:
13553 case 256:
43234a1e 13554 case 512:
6c30d220
L
13555 oappend ("BYTE PTR ");
13556 break;
13557 default:
13558 abort ();
13559 }
13560 break;
13561 case xmm_mw_mode:
13562 if (!need_vex)
13563 abort ();
13564
13565 switch (vex.length)
13566 {
13567 case 128:
13568 case 256:
43234a1e 13569 case 512:
6c30d220
L
13570 oappend ("WORD PTR ");
13571 break;
13572 default:
13573 abort ();
13574 }
13575 break;
13576 case xmm_md_mode:
13577 if (!need_vex)
13578 abort ();
13579
13580 switch (vex.length)
13581 {
13582 case 128:
13583 case 256:
43234a1e 13584 case 512:
6c30d220
L
13585 oappend ("DWORD PTR ");
13586 break;
13587 default:
13588 abort ();
13589 }
13590 break;
13591 case xmm_mq_mode:
13592 if (!need_vex)
13593 abort ();
13594
13595 switch (vex.length)
13596 {
13597 case 128:
13598 case 256:
43234a1e 13599 case 512:
6c30d220
L
13600 oappend ("QWORD PTR ");
13601 break;
13602 default:
13603 abort ();
13604 }
13605 break;
13606 case xmmdw_mode:
13607 if (!need_vex)
13608 abort ();
13609
13610 switch (vex.length)
13611 {
13612 case 128:
13613 oappend ("WORD PTR ");
13614 break;
13615 case 256:
13616 oappend ("DWORD PTR ");
13617 break;
43234a1e
L
13618 case 512:
13619 oappend ("QWORD PTR ");
13620 break;
6c30d220
L
13621 default:
13622 abort ();
13623 }
13624 break;
13625 case xmmqd_mode:
13626 if (!need_vex)
13627 abort ();
13628
13629 switch (vex.length)
13630 {
13631 case 128:
13632 oappend ("DWORD PTR ");
13633 break;
13634 case 256:
13635 oappend ("QWORD PTR ");
13636 break;
43234a1e
L
13637 case 512:
13638 oappend ("XMMWORD PTR ");
13639 break;
6c30d220
L
13640 default:
13641 abort ();
13642 }
13643 break;
c0f3af97
L
13644 case ymmq_mode:
13645 if (!need_vex)
13646 abort ();
13647
13648 switch (vex.length)
13649 {
13650 case 128:
13651 oappend ("QWORD PTR ");
13652 break;
13653 case 256:
13654 oappend ("YMMWORD PTR ");
13655 break;
43234a1e
L
13656 case 512:
13657 oappend ("ZMMWORD PTR ");
13658 break;
c0f3af97
L
13659 default:
13660 abort ();
13661 }
13662 break;
6c30d220
L
13663 case ymmxmm_mode:
13664 if (!need_vex)
13665 abort ();
13666
13667 switch (vex.length)
13668 {
13669 case 128:
13670 case 256:
13671 oappend ("XMMWORD PTR ");
13672 break;
13673 default:
13674 abort ();
13675 }
13676 break;
fb9c77c7
L
13677 case o_mode:
13678 oappend ("OWORD PTR ");
13679 break;
43234a1e 13680 case xmm_mdq_mode:
0bfee649 13681 case vex_w_dq_mode:
1c480963 13682 case vex_scalar_w_dq_mode:
0bfee649
L
13683 if (!need_vex)
13684 abort ();
13685
13686 if (vex.w)
13687 oappend ("QWORD PTR ");
13688 else
13689 oappend ("DWORD PTR ");
13690 break;
43234a1e
L
13691 case vex_vsib_d_w_dq_mode:
13692 case vex_vsib_q_w_dq_mode:
13693 if (!need_vex)
13694 abort ();
13695
13696 if (!vex.evex)
13697 {
13698 if (vex.w)
13699 oappend ("QWORD PTR ");
13700 else
13701 oappend ("DWORD PTR ");
13702 }
13703 else
13704 {
b28d1bda
IT
13705 switch (vex.length)
13706 {
13707 case 128:
13708 oappend ("XMMWORD PTR ");
13709 break;
13710 case 256:
13711 oappend ("YMMWORD PTR ");
13712 break;
13713 case 512:
13714 oappend ("ZMMWORD PTR ");
13715 break;
13716 default:
13717 abort ();
13718 }
43234a1e
L
13719 }
13720 break;
5fc35d96
IT
13721 case vex_vsib_q_w_d_mode:
13722 case vex_vsib_d_w_d_mode:
b28d1bda 13723 if (!need_vex || !vex.evex)
5fc35d96
IT
13724 abort ();
13725
b28d1bda
IT
13726 switch (vex.length)
13727 {
13728 case 128:
13729 oappend ("QWORD PTR ");
13730 break;
13731 case 256:
13732 oappend ("XMMWORD PTR ");
13733 break;
13734 case 512:
13735 oappend ("YMMWORD PTR ");
13736 break;
13737 default:
13738 abort ();
13739 }
5fc35d96
IT
13740
13741 break;
1ba585e8
IT
13742 case mask_bd_mode:
13743 if (!need_vex || vex.length != 128)
13744 abort ();
13745 if (vex.w)
13746 oappend ("DWORD PTR ");
13747 else
13748 oappend ("BYTE PTR ");
13749 break;
43234a1e
L
13750 case mask_mode:
13751 if (!need_vex)
13752 abort ();
1ba585e8
IT
13753 if (vex.w)
13754 oappend ("QWORD PTR ");
13755 else
13756 oappend ("WORD PTR ");
43234a1e 13757 break;
6c75cc62 13758 case v_bnd_mode:
d276ec69 13759 case v_bndmk_mode:
3f31e633
JB
13760 default:
13761 break;
13762 }
13763}
13764
252b5132 13765static void
c0f3af97 13766OP_E_register (int bytemode, int sizeflag)
252b5132 13767{
c0f3af97
L
13768 int reg = modrm.rm;
13769 const char **names;
252b5132 13770
c0f3af97
L
13771 USED_REX (REX_B);
13772 if ((rex & REX_B))
13773 reg += 8;
252b5132 13774
b6169b20 13775 if ((sizeflag & SUFFIX_ALWAYS)
1ba585e8 13776 && (bytemode == b_swap_mode
9f79e886 13777 || bytemode == bnd_swap_mode
60227d64 13778 || bytemode == v_swap_mode))
b6169b20
L
13779 swap_operand ();
13780
c0f3af97 13781 switch (bytemode)
252b5132 13782 {
c0f3af97 13783 case b_mode:
b6169b20 13784 case b_swap_mode:
c0f3af97
L
13785 USED_REX (0);
13786 if (rex)
13787 names = names8rex;
13788 else
13789 names = names8;
13790 break;
13791 case w_mode:
13792 names = names16;
13793 break;
13794 case d_mode:
1ba585e8
IT
13795 case dw_mode:
13796 case db_mode:
c0f3af97
L
13797 names = names32;
13798 break;
13799 case q_mode:
13800 names = names64;
13801 break;
13802 case m_mode:
6c75cc62 13803 case v_bnd_mode:
c0f3af97
L
13804 names = address_mode == mode_64bit ? names64 : names32;
13805 break;
7e8b059b 13806 case bnd_mode:
9f79e886 13807 case bnd_swap_mode:
0d96e4df
L
13808 if (reg > 0x3)
13809 {
13810 oappend ("(bad)");
13811 return;
13812 }
7e8b059b
L
13813 names = names_bnd;
13814 break;
07f5af7d
L
13815 case indir_v_mode:
13816 if (address_mode == mode_64bit && isa64 == intel64)
13817 {
13818 names = names64;
13819 break;
13820 }
1a0670f3 13821 /* Fall through. */
c0f3af97 13822 case stack_v_mode:
7bb15c6f 13823 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
252b5132 13824 {
c0f3af97 13825 names = names64;
252b5132 13826 break;
252b5132 13827 }
c0f3af97 13828 bytemode = v_mode;
1a0670f3 13829 /* Fall through. */
c0f3af97 13830 case v_mode:
b6169b20 13831 case v_swap_mode:
c0f3af97
L
13832 case dq_mode:
13833 case dqb_mode:
13834 case dqd_mode:
13835 case dqw_mode:
13836 USED_REX (REX_W);
13837 if (rex & REX_W)
13838 names = names64;
c0f3af97 13839 else
f16cd0d5 13840 {
7bb15c6f 13841 if ((sizeflag & DFLAG)
f16cd0d5
L
13842 || (bytemode != v_mode
13843 && bytemode != v_swap_mode))
13844 names = names32;
13845 else
13846 names = names16;
13847 used_prefixes |= (prefixes & PREFIX_DATA);
13848 }
c0f3af97 13849 break;
de89d0a3
IT
13850 case va_mode:
13851 names = (address_mode == mode_64bit
13852 ? names64 : names32);
13853 if (!(prefixes & PREFIX_ADDR))
aa178437
IT
13854 names = (address_mode == mode_16bit
13855 ? names16 : names);
de89d0a3
IT
13856 else
13857 {
13858 /* Remove "addr16/addr32". */
13859 all_prefixes[last_addr_prefix] = 0;
13860 names = (address_mode != mode_32bit
13861 ? names32 : names16);
13862 used_prefixes |= PREFIX_ADDR;
13863 }
13864 break;
1ba585e8 13865 case mask_bd_mode:
43234a1e 13866 case mask_mode:
9889cbb1
L
13867 if (reg > 0x7)
13868 {
13869 oappend ("(bad)");
13870 return;
13871 }
43234a1e
L
13872 names = names_mask;
13873 break;
c0f3af97
L
13874 case 0:
13875 return;
13876 default:
13877 oappend (INTERNAL_DISASSEMBLER_ERROR);
252b5132
RH
13878 return;
13879 }
c0f3af97
L
13880 oappend (names[reg]);
13881}
13882
13883static void
c1e679ec 13884OP_E_memory (int bytemode, int sizeflag)
c0f3af97
L
13885{
13886 bfd_vma disp = 0;
13887 int add = (rex & REX_B) ? 8 : 0;
13888 int riprel = 0;
43234a1e
L
13889 int shift;
13890
13891 if (vex.evex)
13892 {
13893 /* In EVEX, if operand doesn't allow broadcast, vex.b should be 0. */
13894 if (vex.b
13895 && bytemode != x_mode
90a915bf 13896 && bytemode != xmmq_mode
43234a1e
L
13897 && bytemode != evex_half_bcst_xmmq_mode)
13898 {
13899 BadOp ();
13900 return;
13901 }
13902 switch (bytemode)
13903 {
1ba585e8
IT
13904 case dqw_mode:
13905 case dw_mode:
1ba585e8
IT
13906 shift = 1;
13907 break;
13908 case dqb_mode:
13909 case db_mode:
13910 shift = 0;
13911 break;
b50c9f31
JB
13912 case dq_mode:
13913 if (address_mode != mode_64bit)
13914 {
13915 shift = 2;
13916 break;
13917 }
13918 /* fall through */
43234a1e 13919 case vex_vsib_d_w_dq_mode:
5fc35d96 13920 case vex_vsib_d_w_d_mode:
eaa9d1ad 13921 case vex_vsib_q_w_dq_mode:
5fc35d96 13922 case vex_vsib_q_w_d_mode:
43234a1e
L
13923 case evex_x_gscat_mode:
13924 case xmm_mdq_mode:
13925 shift = vex.w ? 3 : 2;
13926 break;
43234a1e
L
13927 case x_mode:
13928 case evex_half_bcst_xmmq_mode:
90a915bf 13929 case xmmq_mode:
43234a1e
L
13930 if (vex.b)
13931 {
13932 shift = vex.w ? 3 : 2;
13933 break;
13934 }
1a0670f3 13935 /* Fall through. */
43234a1e
L
13936 case xmmqd_mode:
13937 case xmmdw_mode:
43234a1e
L
13938 case ymmq_mode:
13939 case evex_x_nobcst_mode:
13940 case x_swap_mode:
13941 switch (vex.length)
13942 {
13943 case 128:
13944 shift = 4;
13945 break;
13946 case 256:
13947 shift = 5;
13948 break;
13949 case 512:
13950 shift = 6;
13951 break;
13952 default:
13953 abort ();
13954 }
13955 break;
13956 case ymm_mode:
13957 shift = 5;
13958 break;
13959 case xmm_mode:
13960 shift = 4;
13961 break;
13962 case xmm_mq_mode:
13963 case q_mode:
13964 case q_scalar_mode:
13965 case q_swap_mode:
13966 case q_scalar_swap_mode:
13967 shift = 3;
13968 break;
13969 case dqd_mode:
13970 case xmm_md_mode:
13971 case d_mode:
13972 case d_scalar_mode:
13973 case d_swap_mode:
13974 case d_scalar_swap_mode:
13975 shift = 2;
13976 break;
5074ad8a 13977 case w_scalar_mode:
43234a1e
L
13978 case xmm_mw_mode:
13979 shift = 1;
13980 break;
5074ad8a 13981 case b_scalar_mode:
43234a1e
L
13982 case xmm_mb_mode:
13983 shift = 0;
13984 break;
13985 default:
13986 abort ();
13987 }
13988 /* Make necessary corrections to shift for modes that need it.
13989 For these modes we currently have shift 4, 5 or 6 depending on
13990 vex.length (it corresponds to xmmword, ymmword or zmmword
13991 operand). We might want to make it 3, 4 or 5 (e.g. for
13992 xmmq_mode). In case of broadcast enabled the corrections
13993 aren't needed, as element size is always 32 or 64 bits. */
90a915bf
IT
13994 if (!vex.b
13995 && (bytemode == xmmq_mode
13996 || bytemode == evex_half_bcst_xmmq_mode))
43234a1e
L
13997 shift -= 1;
13998 else if (bytemode == xmmqd_mode)
13999 shift -= 2;
14000 else if (bytemode == xmmdw_mode)
14001 shift -= 3;
b28d1bda
IT
14002 else if (bytemode == ymmq_mode && vex.length == 128)
14003 shift -= 1;
43234a1e
L
14004 }
14005 else
14006 shift = 0;
252b5132 14007
c0f3af97 14008 USED_REX (REX_B);
3f31e633
JB
14009 if (intel_syntax)
14010 intel_operand_size (bytemode, sizeflag);
252b5132
RH
14011 append_seg ();
14012
5d669648 14013 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132 14014 {
5d669648
L
14015 /* 32/64 bit address mode */
14016 int havedisp;
252b5132
RH
14017 int havesib;
14018 int havebase;
0f7da397 14019 int haveindex;
20afcfb7 14020 int needindex;
1bc60e56 14021 int needaddr32;
82c18208 14022 int base, rbase;
91d6fa6a 14023 int vindex = 0;
252b5132 14024 int scale = 0;
7e8b059b
L
14025 int addr32flag = !((sizeflag & AFLAG)
14026 || bytemode == v_bnd_mode
d276ec69 14027 || bytemode == v_bndmk_mode
9f79e886
JB
14028 || bytemode == bnd_mode
14029 || bytemode == bnd_swap_mode);
6c30d220
L
14030 const char **indexes64 = names64;
14031 const char **indexes32 = names32;
252b5132
RH
14032
14033 havesib = 0;
14034 havebase = 1;
0f7da397 14035 haveindex = 0;
7967e09e 14036 base = modrm.rm;
252b5132
RH
14037
14038 if (base == 4)
14039 {
14040 havesib = 1;
dfc8cf43 14041 vindex = sib.index;
161a04f6
L
14042 USED_REX (REX_X);
14043 if (rex & REX_X)
91d6fa6a 14044 vindex += 8;
6c30d220
L
14045 switch (bytemode)
14046 {
14047 case vex_vsib_d_w_dq_mode:
5fc35d96 14048 case vex_vsib_d_w_d_mode:
6c30d220 14049 case vex_vsib_q_w_dq_mode:
5fc35d96 14050 case vex_vsib_q_w_d_mode:
6c30d220
L
14051 if (!need_vex)
14052 abort ();
43234a1e
L
14053 if (vex.evex)
14054 {
14055 if (!vex.v)
14056 vindex += 16;
14057 }
6c30d220
L
14058
14059 haveindex = 1;
14060 switch (vex.length)
14061 {
14062 case 128:
7bb15c6f 14063 indexes64 = indexes32 = names_xmm;
6c30d220
L
14064 break;
14065 case 256:
5fc35d96
IT
14066 if (!vex.w
14067 || bytemode == vex_vsib_q_w_dq_mode
14068 || bytemode == vex_vsib_q_w_d_mode)
7bb15c6f 14069 indexes64 = indexes32 = names_ymm;
6c30d220 14070 else
7bb15c6f 14071 indexes64 = indexes32 = names_xmm;
6c30d220 14072 break;
43234a1e 14073 case 512:
5fc35d96
IT
14074 if (!vex.w
14075 || bytemode == vex_vsib_q_w_dq_mode
14076 || bytemode == vex_vsib_q_w_d_mode)
43234a1e
L
14077 indexes64 = indexes32 = names_zmm;
14078 else
14079 indexes64 = indexes32 = names_ymm;
14080 break;
6c30d220
L
14081 default:
14082 abort ();
14083 }
14084 break;
14085 default:
14086 haveindex = vindex != 4;
14087 break;
14088 }
14089 scale = sib.scale;
14090 base = sib.base;
252b5132
RH
14091 codep++;
14092 }
82c18208 14093 rbase = base + add;
252b5132 14094
7967e09e 14095 switch (modrm.mod)
252b5132
RH
14096 {
14097 case 0:
82c18208 14098 if (base == 5)
252b5132
RH
14099 {
14100 havebase = 0;
cb712a9e 14101 if (address_mode == mode_64bit && !havesib)
52b15da3
JH
14102 riprel = 1;
14103 disp = get32s ();
d276ec69
JB
14104 if (riprel && bytemode == v_bndmk_mode)
14105 {
14106 oappend ("(bad)");
14107 return;
14108 }
252b5132
RH
14109 }
14110 break;
14111 case 1:
14112 FETCH_DATA (the_info, codep + 1);
14113 disp = *codep++;
14114 if ((disp & 0x80) != 0)
14115 disp -= 0x100;
43234a1e
L
14116 if (vex.evex && shift > 0)
14117 disp <<= shift;
252b5132
RH
14118 break;
14119 case 2:
52b15da3 14120 disp = get32s ();
252b5132
RH
14121 break;
14122 }
14123
1bc60e56
L
14124 needindex = 0;
14125 needaddr32 = 0;
14126 if (havesib
14127 && !havebase
14128 && !haveindex
14129 && address_mode != mode_16bit)
14130 {
14131 if (address_mode == mode_64bit)
14132 {
14133 /* Display eiz instead of addr32. */
14134 needindex = addr32flag;
14135 needaddr32 = 1;
14136 }
14137 else
14138 {
14139 /* In 32-bit mode, we need index register to tell [offset]
14140 from [eiz*1 + offset]. */
14141 needindex = 1;
14142 }
14143 }
14144
20afcfb7
L
14145 havedisp = (havebase
14146 || needindex
14147 || (havesib && (haveindex || scale != 0)));
5d669648 14148
252b5132 14149 if (!intel_syntax)
82c18208 14150 if (modrm.mod != 0 || base == 5)
db6eb5be 14151 {
5d669648
L
14152 if (havedisp || riprel)
14153 print_displacement (scratchbuf, disp);
14154 else
14155 print_operand_value (scratchbuf, 1, disp);
db6eb5be 14156 oappend (scratchbuf);
52b15da3
JH
14157 if (riprel)
14158 {
14159 set_op (disp, 1);
28596323 14160 oappend (!addr32flag ? "(%rip)" : "(%eip)");
52b15da3 14161 }
db6eb5be 14162 }
2da11e11 14163
c1dc7af5 14164 if ((havebase || haveindex || needindex || needaddr32 || riprel)
7e8b059b 14165 && (bytemode != v_bnd_mode)
d276ec69 14166 && (bytemode != v_bndmk_mode)
9f79e886
JB
14167 && (bytemode != bnd_mode)
14168 && (bytemode != bnd_swap_mode))
87767711
JB
14169 used_prefixes |= PREFIX_ADDR;
14170
5d669648 14171 if (havedisp || (intel_syntax && riprel))
252b5132 14172 {
252b5132 14173 *obufp++ = open_char;
52b15da3 14174 if (intel_syntax && riprel)
185b1163
L
14175 {
14176 set_op (disp, 1);
28596323 14177 oappend (!addr32flag ? "rip" : "eip");
185b1163 14178 }
db6eb5be 14179 *obufp = '\0';
252b5132 14180 if (havebase)
7e8b059b 14181 oappend (address_mode == mode_64bit && !addr32flag
82c18208 14182 ? names64[rbase] : names32[rbase]);
252b5132
RH
14183 if (havesib)
14184 {
db51cc60
L
14185 /* ESP/RSP won't allow index. If base isn't ESP/RSP,
14186 print index to tell base + index from base. */
14187 if (scale != 0
20afcfb7 14188 || needindex
db51cc60
L
14189 || haveindex
14190 || (havebase && base != ESP_REG_NUM))
252b5132 14191 {
9306ca4a 14192 if (!intel_syntax || havebase)
db6eb5be 14193 {
9306ca4a
JB
14194 *obufp++ = separator_char;
14195 *obufp = '\0';
db6eb5be 14196 }
db51cc60 14197 if (haveindex)
7e8b059b 14198 oappend (address_mode == mode_64bit && !addr32flag
6c30d220 14199 ? indexes64[vindex] : indexes32[vindex]);
db51cc60 14200 else
7e8b059b 14201 oappend (address_mode == mode_64bit && !addr32flag
db51cc60
L
14202 ? index64 : index32);
14203
db6eb5be
AM
14204 *obufp++ = scale_char;
14205 *obufp = '\0';
14206 sprintf (scratchbuf, "%d", 1 << scale);
14207 oappend (scratchbuf);
14208 }
252b5132 14209 }
185b1163 14210 if (intel_syntax
82c18208 14211 && (disp || modrm.mod != 0 || base == 5))
3d456fa1 14212 {
db51cc60 14213 if (!havedisp || (bfd_signed_vma) disp >= 0)
3d456fa1
JB
14214 {
14215 *obufp++ = '+';
14216 *obufp = '\0';
14217 }
05203043 14218 else if (modrm.mod != 1 && disp != -disp)
3d456fa1
JB
14219 {
14220 *obufp++ = '-';
14221 *obufp = '\0';
14222 disp = - (bfd_signed_vma) disp;
14223 }
14224
db51cc60
L
14225 if (havedisp)
14226 print_displacement (scratchbuf, disp);
14227 else
14228 print_operand_value (scratchbuf, 1, disp);
3d456fa1
JB
14229 oappend (scratchbuf);
14230 }
252b5132
RH
14231
14232 *obufp++ = close_char;
db6eb5be 14233 *obufp = '\0';
252b5132
RH
14234 }
14235 else if (intel_syntax)
db6eb5be 14236 {
82c18208 14237 if (modrm.mod != 0 || base == 5)
db6eb5be 14238 {
285ca992 14239 if (!active_seg_prefix)
252b5132 14240 {
d708bcba 14241 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
14242 oappend (":");
14243 }
52b15da3 14244 print_operand_value (scratchbuf, 1, disp);
db6eb5be
AM
14245 oappend (scratchbuf);
14246 }
14247 }
252b5132
RH
14248 }
14249 else
f16cd0d5
L
14250 {
14251 /* 16 bit address mode */
14252 used_prefixes |= prefixes & PREFIX_ADDR;
7967e09e 14253 switch (modrm.mod)
252b5132
RH
14254 {
14255 case 0:
7967e09e 14256 if (modrm.rm == 6)
252b5132
RH
14257 {
14258 disp = get16 ();
14259 if ((disp & 0x8000) != 0)
14260 disp -= 0x10000;
14261 }
14262 break;
14263 case 1:
14264 FETCH_DATA (the_info, codep + 1);
14265 disp = *codep++;
14266 if ((disp & 0x80) != 0)
14267 disp -= 0x100;
65f3ed04
JB
14268 if (vex.evex && shift > 0)
14269 disp <<= shift;
252b5132
RH
14270 break;
14271 case 2:
14272 disp = get16 ();
14273 if ((disp & 0x8000) != 0)
14274 disp -= 0x10000;
14275 break;
14276 }
14277
14278 if (!intel_syntax)
7967e09e 14279 if (modrm.mod != 0 || modrm.rm == 6)
db6eb5be 14280 {
5d669648 14281 print_displacement (scratchbuf, disp);
db6eb5be
AM
14282 oappend (scratchbuf);
14283 }
252b5132 14284
7967e09e 14285 if (modrm.mod != 0 || modrm.rm != 6)
252b5132
RH
14286 {
14287 *obufp++ = open_char;
db6eb5be 14288 *obufp = '\0';
7967e09e 14289 oappend (index16[modrm.rm]);
5d669648
L
14290 if (intel_syntax
14291 && (disp || modrm.mod != 0 || modrm.rm == 6))
3d456fa1 14292 {
5d669648 14293 if ((bfd_signed_vma) disp >= 0)
3d456fa1
JB
14294 {
14295 *obufp++ = '+';
14296 *obufp = '\0';
14297 }
7967e09e 14298 else if (modrm.mod != 1)
3d456fa1
JB
14299 {
14300 *obufp++ = '-';
14301 *obufp = '\0';
14302 disp = - (bfd_signed_vma) disp;
14303 }
14304
5d669648 14305 print_displacement (scratchbuf, disp);
3d456fa1
JB
14306 oappend (scratchbuf);
14307 }
14308
db6eb5be
AM
14309 *obufp++ = close_char;
14310 *obufp = '\0';
252b5132 14311 }
3d456fa1
JB
14312 else if (intel_syntax)
14313 {
285ca992 14314 if (!active_seg_prefix)
3d456fa1
JB
14315 {
14316 oappend (names_seg[ds_reg - es_reg]);
14317 oappend (":");
14318 }
14319 print_operand_value (scratchbuf, 1, disp & 0xffff);
14320 oappend (scratchbuf);
14321 }
252b5132 14322 }
43234a1e
L
14323 if (vex.evex && vex.b
14324 && (bytemode == x_mode
90a915bf 14325 || bytemode == xmmq_mode
43234a1e
L
14326 || bytemode == evex_half_bcst_xmmq_mode))
14327 {
90a915bf
IT
14328 if (vex.w
14329 || bytemode == xmmq_mode
14330 || bytemode == evex_half_bcst_xmmq_mode)
b28d1bda
IT
14331 {
14332 switch (vex.length)
14333 {
14334 case 128:
14335 oappend ("{1to2}");
14336 break;
14337 case 256:
14338 oappend ("{1to4}");
14339 break;
14340 case 512:
14341 oappend ("{1to8}");
14342 break;
14343 default:
14344 abort ();
14345 }
14346 }
43234a1e 14347 else
b28d1bda
IT
14348 {
14349 switch (vex.length)
14350 {
14351 case 128:
14352 oappend ("{1to4}");
14353 break;
14354 case 256:
14355 oappend ("{1to8}");
14356 break;
14357 case 512:
14358 oappend ("{1to16}");
14359 break;
14360 default:
14361 abort ();
14362 }
14363 }
43234a1e 14364 }
252b5132
RH
14365}
14366
c0f3af97 14367static void
8b3f93e7 14368OP_E (int bytemode, int sizeflag)
c0f3af97
L
14369{
14370 /* Skip mod/rm byte. */
14371 MODRM_CHECK;
14372 codep++;
14373
14374 if (modrm.mod == 3)
14375 OP_E_register (bytemode, sizeflag);
14376 else
c1e679ec 14377 OP_E_memory (bytemode, sizeflag);
c0f3af97
L
14378}
14379
252b5132 14380static void
26ca5450 14381OP_G (int bytemode, int sizeflag)
252b5132 14382{
52b15da3 14383 int add = 0;
c0a30a9f 14384 const char **names;
161a04f6
L
14385 USED_REX (REX_R);
14386 if (rex & REX_R)
52b15da3 14387 add += 8;
252b5132
RH
14388 switch (bytemode)
14389 {
14390 case b_mode:
52b15da3
JH
14391 USED_REX (0);
14392 if (rex)
7967e09e 14393 oappend (names8rex[modrm.reg + add]);
52b15da3 14394 else
7967e09e 14395 oappend (names8[modrm.reg + add]);
252b5132
RH
14396 break;
14397 case w_mode:
7967e09e 14398 oappend (names16[modrm.reg + add]);
252b5132
RH
14399 break;
14400 case d_mode:
1ba585e8
IT
14401 case db_mode:
14402 case dw_mode:
7967e09e 14403 oappend (names32[modrm.reg + add]);
52b15da3
JH
14404 break;
14405 case q_mode:
7967e09e 14406 oappend (names64[modrm.reg + add]);
252b5132 14407 break;
7e8b059b 14408 case bnd_mode:
0d96e4df
L
14409 if (modrm.reg > 0x3)
14410 {
14411 oappend ("(bad)");
14412 return;
14413 }
7e8b059b
L
14414 oappend (names_bnd[modrm.reg]);
14415 break;
252b5132 14416 case v_mode:
9306ca4a 14417 case dq_mode:
42903f7f
L
14418 case dqb_mode:
14419 case dqd_mode:
9306ca4a 14420 case dqw_mode:
161a04f6
L
14421 USED_REX (REX_W);
14422 if (rex & REX_W)
7967e09e 14423 oappend (names64[modrm.reg + add]);
252b5132 14424 else
f16cd0d5
L
14425 {
14426 if ((sizeflag & DFLAG) || bytemode != v_mode)
14427 oappend (names32[modrm.reg + add]);
14428 else
14429 oappend (names16[modrm.reg + add]);
14430 used_prefixes |= (prefixes & PREFIX_DATA);
14431 }
252b5132 14432 break;
c0a30a9f
L
14433 case va_mode:
14434 names = (address_mode == mode_64bit
14435 ? names64 : names32);
14436 if (!(prefixes & PREFIX_ADDR))
14437 {
14438 if (address_mode == mode_16bit)
14439 names = names16;
14440 }
14441 else
14442 {
14443 /* Remove "addr16/addr32". */
14444 all_prefixes[last_addr_prefix] = 0;
14445 names = (address_mode != mode_32bit
14446 ? names32 : names16);
14447 used_prefixes |= PREFIX_ADDR;
14448 }
14449 oappend (names[modrm.reg + add]);
14450 break;
90700ea2 14451 case m_mode:
cb712a9e 14452 if (address_mode == mode_64bit)
7967e09e 14453 oappend (names64[modrm.reg + add]);
90700ea2 14454 else
7967e09e 14455 oappend (names32[modrm.reg + add]);
90700ea2 14456 break;
1ba585e8 14457 case mask_bd_mode:
43234a1e 14458 case mask_mode:
9889cbb1
L
14459 if ((modrm.reg + add) > 0x7)
14460 {
14461 oappend ("(bad)");
14462 return;
14463 }
43234a1e
L
14464 oappend (names_mask[modrm.reg + add]);
14465 break;
252b5132
RH
14466 default:
14467 oappend (INTERNAL_DISASSEMBLER_ERROR);
14468 break;
14469 }
14470}
14471
52b15da3 14472static bfd_vma
26ca5450 14473get64 (void)
52b15da3 14474{
5dd0794d 14475 bfd_vma x;
52b15da3 14476#ifdef BFD64
5dd0794d
AM
14477 unsigned int a;
14478 unsigned int b;
14479
52b15da3
JH
14480 FETCH_DATA (the_info, codep + 8);
14481 a = *codep++ & 0xff;
14482 a |= (*codep++ & 0xff) << 8;
14483 a |= (*codep++ & 0xff) << 16;
070fe95d 14484 a |= (*codep++ & 0xffu) << 24;
5dd0794d 14485 b = *codep++ & 0xff;
52b15da3
JH
14486 b |= (*codep++ & 0xff) << 8;
14487 b |= (*codep++ & 0xff) << 16;
070fe95d 14488 b |= (*codep++ & 0xffu) << 24;
52b15da3
JH
14489 x = a + ((bfd_vma) b << 32);
14490#else
6608db57 14491 abort ();
5dd0794d 14492 x = 0;
52b15da3
JH
14493#endif
14494 return x;
14495}
14496
14497static bfd_signed_vma
26ca5450 14498get32 (void)
252b5132 14499{
52b15da3 14500 bfd_signed_vma x = 0;
252b5132
RH
14501
14502 FETCH_DATA (the_info, codep + 4);
52b15da3
JH
14503 x = *codep++ & (bfd_signed_vma) 0xff;
14504 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
14505 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
14506 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
14507 return x;
14508}
14509
14510static bfd_signed_vma
26ca5450 14511get32s (void)
52b15da3
JH
14512{
14513 bfd_signed_vma x = 0;
14514
14515 FETCH_DATA (the_info, codep + 4);
14516 x = *codep++ & (bfd_signed_vma) 0xff;
14517 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
14518 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
14519 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
14520
14521 x = (x ^ ((bfd_signed_vma) 1 << 31)) - ((bfd_signed_vma) 1 << 31);
14522
252b5132
RH
14523 return x;
14524}
14525
14526static int
26ca5450 14527get16 (void)
252b5132
RH
14528{
14529 int x = 0;
14530
14531 FETCH_DATA (the_info, codep + 2);
14532 x = *codep++ & 0xff;
14533 x |= (*codep++ & 0xff) << 8;
14534 return x;
14535}
14536
14537static void
26ca5450 14538set_op (bfd_vma op, int riprel)
252b5132
RH
14539{
14540 op_index[op_ad] = op_ad;
cb712a9e 14541 if (address_mode == mode_64bit)
7081ff04
AJ
14542 {
14543 op_address[op_ad] = op;
14544 op_riprel[op_ad] = riprel;
14545 }
14546 else
14547 {
14548 /* Mask to get a 32-bit address. */
14549 op_address[op_ad] = op & 0xffffffff;
14550 op_riprel[op_ad] = riprel & 0xffffffff;
14551 }
252b5132
RH
14552}
14553
14554static void
26ca5450 14555OP_REG (int code, int sizeflag)
252b5132 14556{
2da11e11 14557 const char *s;
9b60702d 14558 int add;
de882298
RM
14559
14560 switch (code)
14561 {
14562 case es_reg: case ss_reg: case cs_reg:
14563 case ds_reg: case fs_reg: case gs_reg:
14564 oappend (names_seg[code - es_reg]);
14565 return;
14566 }
14567
161a04f6
L
14568 USED_REX (REX_B);
14569 if (rex & REX_B)
52b15da3 14570 add = 8;
9b60702d
L
14571 else
14572 add = 0;
52b15da3
JH
14573
14574 switch (code)
14575 {
52b15da3
JH
14576 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
14577 case sp_reg: case bp_reg: case si_reg: case di_reg:
14578 s = names16[code - ax_reg + add];
14579 break;
52b15da3
JH
14580 case al_reg: case ah_reg: case cl_reg: case ch_reg:
14581 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
14582 USED_REX (0);
14583 if (rex)
14584 s = names8rex[code - al_reg + add];
14585 else
14586 s = names8[code - al_reg];
14587 break;
6439fc28
AM
14588 case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg:
14589 case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg:
7bb15c6f 14590 if (address_mode == mode_64bit
6c067bbb 14591 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
14592 {
14593 s = names64[code - rAX_reg + add];
14594 break;
14595 }
14596 code += eAX_reg - rAX_reg;
6608db57 14597 /* Fall through. */
52b15da3
JH
14598 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
14599 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
14600 USED_REX (REX_W);
14601 if (rex & REX_W)
52b15da3 14602 s = names64[code - eAX_reg + add];
52b15da3 14603 else
f16cd0d5
L
14604 {
14605 if (sizeflag & DFLAG)
14606 s = names32[code - eAX_reg + add];
14607 else
14608 s = names16[code - eAX_reg + add];
14609 used_prefixes |= (prefixes & PREFIX_DATA);
14610 }
52b15da3 14611 break;
52b15da3
JH
14612 default:
14613 s = INTERNAL_DISASSEMBLER_ERROR;
14614 break;
14615 }
14616 oappend (s);
14617}
14618
14619static void
26ca5450 14620OP_IMREG (int code, int sizeflag)
52b15da3
JH
14621{
14622 const char *s;
252b5132
RH
14623
14624 switch (code)
14625 {
14626 case indir_dx_reg:
d708bcba 14627 if (intel_syntax)
52fd6d94 14628 s = "dx";
d708bcba 14629 else
db6eb5be 14630 s = "(%dx)";
252b5132
RH
14631 break;
14632 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
14633 case sp_reg: case bp_reg: case si_reg: case di_reg:
14634 s = names16[code - ax_reg];
14635 break;
14636 case es_reg: case ss_reg: case cs_reg:
14637 case ds_reg: case fs_reg: case gs_reg:
14638 s = names_seg[code - es_reg];
14639 break;
14640 case al_reg: case ah_reg: case cl_reg: case ch_reg:
14641 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
52b15da3
JH
14642 USED_REX (0);
14643 if (rex)
14644 s = names8rex[code - al_reg];
14645 else
14646 s = names8[code - al_reg];
252b5132
RH
14647 break;
14648 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
14649 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
14650 USED_REX (REX_W);
14651 if (rex & REX_W)
52b15da3 14652 s = names64[code - eAX_reg];
252b5132 14653 else
f16cd0d5
L
14654 {
14655 if (sizeflag & DFLAG)
14656 s = names32[code - eAX_reg];
14657 else
14658 s = names16[code - eAX_reg];
14659 used_prefixes |= (prefixes & PREFIX_DATA);
14660 }
252b5132 14661 break;
52fd6d94 14662 case z_mode_ax_reg:
161a04f6 14663 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
14664 s = *names32;
14665 else
14666 s = *names16;
161a04f6 14667 if (!(rex & REX_W))
52fd6d94
JB
14668 used_prefixes |= (prefixes & PREFIX_DATA);
14669 break;
252b5132
RH
14670 default:
14671 s = INTERNAL_DISASSEMBLER_ERROR;
14672 break;
14673 }
14674 oappend (s);
14675}
14676
14677static void
26ca5450 14678OP_I (int bytemode, int sizeflag)
252b5132 14679{
52b15da3
JH
14680 bfd_signed_vma op;
14681 bfd_signed_vma mask = -1;
252b5132
RH
14682
14683 switch (bytemode)
14684 {
14685 case b_mode:
14686 FETCH_DATA (the_info, codep + 1);
52b15da3
JH
14687 op = *codep++;
14688 mask = 0xff;
14689 break;
252b5132 14690 case v_mode:
161a04f6
L
14691 USED_REX (REX_W);
14692 if (rex & REX_W)
52b15da3 14693 op = get32s ();
252b5132 14694 else
52b15da3 14695 {
f16cd0d5
L
14696 if (sizeflag & DFLAG)
14697 {
14698 op = get32 ();
14699 mask = 0xffffffff;
14700 }
14701 else
14702 {
14703 op = get16 ();
14704 mask = 0xfffff;
14705 }
14706 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 14707 }
252b5132 14708 break;
c1dc7af5
JB
14709 case d_mode:
14710 mask = 0xffffffff;
14711 op = get32 ();
14712 break;
252b5132 14713 case w_mode:
52b15da3 14714 mask = 0xfffff;
252b5132
RH
14715 op = get16 ();
14716 break;
9306ca4a
JB
14717 case const_1_mode:
14718 if (intel_syntax)
6c067bbb 14719 oappend ("1");
9306ca4a 14720 return;
252b5132
RH
14721 default:
14722 oappend (INTERNAL_DISASSEMBLER_ERROR);
14723 return;
14724 }
14725
52b15da3
JH
14726 op &= mask;
14727 scratchbuf[0] = '$';
d708bcba 14728 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 14729 oappend_maybe_intel (scratchbuf);
52b15da3
JH
14730 scratchbuf[0] = '\0';
14731}
14732
14733static void
26ca5450 14734OP_I64 (int bytemode, int sizeflag)
52b15da3 14735{
a280ab8e 14736 if (bytemode != v_mode || address_mode != mode_64bit || !(rex & REX_W))
6439fc28
AM
14737 {
14738 OP_I (bytemode, sizeflag);
14739 return;
14740 }
14741
a280ab8e 14742 USED_REX (REX_W);
52b15da3 14743
52b15da3 14744 scratchbuf[0] = '$';
a280ab8e 14745 print_operand_value (scratchbuf + 1, 1, get64 ());
9ce09ba2 14746 oappend_maybe_intel (scratchbuf);
252b5132
RH
14747 scratchbuf[0] = '\0';
14748}
14749
14750static void
26ca5450 14751OP_sI (int bytemode, int sizeflag)
252b5132 14752{
52b15da3 14753 bfd_signed_vma op;
252b5132
RH
14754
14755 switch (bytemode)
14756 {
14757 case b_mode:
e3949f17 14758 case b_T_mode:
252b5132
RH
14759 FETCH_DATA (the_info, codep + 1);
14760 op = *codep++;
14761 if ((op & 0x80) != 0)
14762 op -= 0x100;
e3949f17
L
14763 if (bytemode == b_T_mode)
14764 {
14765 if (address_mode != mode_64bit
7bb15c6f 14766 || !((sizeflag & DFLAG) || (rex & REX_W)))
e3949f17 14767 {
6c067bbb
RM
14768 /* The operand-size prefix is overridden by a REX prefix. */
14769 if ((sizeflag & DFLAG) || (rex & REX_W))
e3949f17
L
14770 op &= 0xffffffff;
14771 else
14772 op &= 0xffff;
14773 }
14774 }
14775 else
14776 {
14777 if (!(rex & REX_W))
14778 {
14779 if (sizeflag & DFLAG)
14780 op &= 0xffffffff;
14781 else
14782 op &= 0xffff;
14783 }
14784 }
252b5132
RH
14785 break;
14786 case v_mode:
7bb15c6f
RM
14787 /* The operand-size prefix is overridden by a REX prefix. */
14788 if ((sizeflag & DFLAG) || (rex & REX_W))
52b15da3 14789 op = get32s ();
252b5132 14790 else
d9e3625e 14791 op = get16 ();
252b5132
RH
14792 break;
14793 default:
14794 oappend (INTERNAL_DISASSEMBLER_ERROR);
14795 return;
14796 }
52b15da3
JH
14797
14798 scratchbuf[0] = '$';
14799 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 14800 oappend_maybe_intel (scratchbuf);
252b5132
RH
14801}
14802
14803static void
26ca5450 14804OP_J (int bytemode, int sizeflag)
252b5132 14805{
52b15da3 14806 bfd_vma disp;
7081ff04 14807 bfd_vma mask = -1;
65ca155d 14808 bfd_vma segment = 0;
252b5132
RH
14809
14810 switch (bytemode)
14811 {
14812 case b_mode:
14813 FETCH_DATA (the_info, codep + 1);
14814 disp = *codep++;
14815 if ((disp & 0x80) != 0)
14816 disp -= 0x100;
14817 break;
14818 case v_mode:
5db04b09
L
14819 if (isa64 == amd64)
14820 USED_REX (REX_W);
14821 if ((sizeflag & DFLAG)
14822 || (address_mode == mode_64bit
14823 && (isa64 != amd64 || (rex & REX_W))))
52b15da3 14824 disp = get32s ();
252b5132
RH
14825 else
14826 {
14827 disp = get16 ();
206717e8
L
14828 if ((disp & 0x8000) != 0)
14829 disp -= 0x10000;
65ca155d
L
14830 /* In 16bit mode, address is wrapped around at 64k within
14831 the same segment. Otherwise, a data16 prefix on a jump
14832 instruction means that the pc is masked to 16 bits after
14833 the displacement is added! */
14834 mask = 0xffff;
14835 if ((prefixes & PREFIX_DATA) == 0)
4fd7268a 14836 segment = ((start_pc + (codep - start_codep))
65ca155d 14837 & ~((bfd_vma) 0xffff));
252b5132 14838 }
5db04b09
L
14839 if (address_mode != mode_64bit
14840 || (isa64 == amd64 && !(rex & REX_W)))
f16cd0d5 14841 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132
RH
14842 break;
14843 default:
14844 oappend (INTERNAL_DISASSEMBLER_ERROR);
14845 return;
14846 }
42d5f9c6 14847 disp = ((start_pc + (codep - start_codep) + disp) & mask) | segment;
52b15da3
JH
14848 set_op (disp, 0);
14849 print_operand_value (scratchbuf, 1, disp);
252b5132
RH
14850 oappend (scratchbuf);
14851}
14852
252b5132 14853static void
ed7841b3 14854OP_SEG (int bytemode, int sizeflag)
252b5132 14855{
ed7841b3 14856 if (bytemode == w_mode)
7967e09e 14857 oappend (names_seg[modrm.reg]);
ed7841b3 14858 else
7967e09e 14859 OP_E (modrm.mod == 3 ? bytemode : w_mode, sizeflag);
252b5132
RH
14860}
14861
14862static void
26ca5450 14863OP_DIR (int dummy ATTRIBUTE_UNUSED, int sizeflag)
252b5132
RH
14864{
14865 int seg, offset;
14866
c608c12e 14867 if (sizeflag & DFLAG)
252b5132 14868 {
c608c12e
AM
14869 offset = get32 ();
14870 seg = get16 ();
252b5132 14871 }
c608c12e
AM
14872 else
14873 {
14874 offset = get16 ();
14875 seg = get16 ();
14876 }
7d421014 14877 used_prefixes |= (prefixes & PREFIX_DATA);
d708bcba 14878 if (intel_syntax)
3f31e633 14879 sprintf (scratchbuf, "0x%x:0x%x", seg, offset);
d708bcba
AM
14880 else
14881 sprintf (scratchbuf, "$0x%x,$0x%x", seg, offset);
c608c12e 14882 oappend (scratchbuf);
252b5132
RH
14883}
14884
252b5132 14885static void
3f31e633 14886OP_OFF (int bytemode, int sizeflag)
252b5132 14887{
52b15da3 14888 bfd_vma off;
252b5132 14889
3f31e633
JB
14890 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
14891 intel_operand_size (bytemode, sizeflag);
252b5132
RH
14892 append_seg ();
14893
cb712a9e 14894 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132
RH
14895 off = get32 ();
14896 else
14897 off = get16 ();
14898
14899 if (intel_syntax)
14900 {
285ca992 14901 if (!active_seg_prefix)
252b5132 14902 {
d708bcba 14903 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
14904 oappend (":");
14905 }
14906 }
52b15da3
JH
14907 print_operand_value (scratchbuf, 1, off);
14908 oappend (scratchbuf);
14909}
6439fc28 14910
52b15da3 14911static void
3f31e633 14912OP_OFF64 (int bytemode, int sizeflag)
52b15da3
JH
14913{
14914 bfd_vma off;
14915
539e75ad
L
14916 if (address_mode != mode_64bit
14917 || (prefixes & PREFIX_ADDR))
6439fc28
AM
14918 {
14919 OP_OFF (bytemode, sizeflag);
14920 return;
14921 }
14922
3f31e633
JB
14923 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
14924 intel_operand_size (bytemode, sizeflag);
52b15da3
JH
14925 append_seg ();
14926
6608db57 14927 off = get64 ();
52b15da3
JH
14928
14929 if (intel_syntax)
14930 {
285ca992 14931 if (!active_seg_prefix)
52b15da3 14932 {
d708bcba 14933 oappend (names_seg[ds_reg - es_reg]);
52b15da3
JH
14934 oappend (":");
14935 }
14936 }
14937 print_operand_value (scratchbuf, 1, off);
252b5132
RH
14938 oappend (scratchbuf);
14939}
14940
14941static void
26ca5450 14942ptr_reg (int code, int sizeflag)
252b5132 14943{
2da11e11 14944 const char *s;
d708bcba 14945
1d9f512f 14946 *obufp++ = open_char;
20f0a1fc 14947 used_prefixes |= (prefixes & PREFIX_ADDR);
cb712a9e 14948 if (address_mode == mode_64bit)
c1a64871
JH
14949 {
14950 if (!(sizeflag & AFLAG))
db6eb5be 14951 s = names32[code - eAX_reg];
c1a64871 14952 else
db6eb5be 14953 s = names64[code - eAX_reg];
c1a64871 14954 }
52b15da3 14955 else if (sizeflag & AFLAG)
252b5132
RH
14956 s = names32[code - eAX_reg];
14957 else
14958 s = names16[code - eAX_reg];
14959 oappend (s);
1d9f512f
AM
14960 *obufp++ = close_char;
14961 *obufp = 0;
252b5132
RH
14962}
14963
14964static void
26ca5450 14965OP_ESreg (int code, int sizeflag)
252b5132 14966{
9306ca4a 14967 if (intel_syntax)
52fd6d94
JB
14968 {
14969 switch (codep[-1])
14970 {
14971 case 0x6d: /* insw/insl */
14972 intel_operand_size (z_mode, sizeflag);
14973 break;
14974 case 0xa5: /* movsw/movsl/movsq */
14975 case 0xa7: /* cmpsw/cmpsl/cmpsq */
14976 case 0xab: /* stosw/stosl */
14977 case 0xaf: /* scasw/scasl */
14978 intel_operand_size (v_mode, sizeflag);
14979 break;
14980 default:
14981 intel_operand_size (b_mode, sizeflag);
14982 }
14983 }
9ce09ba2 14984 oappend_maybe_intel ("%es:");
252b5132
RH
14985 ptr_reg (code, sizeflag);
14986}
14987
14988static void
26ca5450 14989OP_DSreg (int code, int sizeflag)
252b5132 14990{
9306ca4a 14991 if (intel_syntax)
52fd6d94
JB
14992 {
14993 switch (codep[-1])
14994 {
14995 case 0x6f: /* outsw/outsl */
14996 intel_operand_size (z_mode, sizeflag);
14997 break;
14998 case 0xa5: /* movsw/movsl/movsq */
14999 case 0xa7: /* cmpsw/cmpsl/cmpsq */
15000 case 0xad: /* lodsw/lodsl/lodsq */
15001 intel_operand_size (v_mode, sizeflag);
15002 break;
15003 default:
15004 intel_operand_size (b_mode, sizeflag);
15005 }
15006 }
285ca992
L
15007 /* Set active_seg_prefix to PREFIX_DS if it is unset so that the
15008 default segment register DS is printed. */
15009 if (!active_seg_prefix)
15010 active_seg_prefix = PREFIX_DS;
6608db57 15011 append_seg ();
252b5132
RH
15012 ptr_reg (code, sizeflag);
15013}
15014
252b5132 15015static void
26ca5450 15016OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15017{
9b60702d 15018 int add;
161a04f6 15019 if (rex & REX_R)
c4a530c5 15020 {
161a04f6 15021 USED_REX (REX_R);
c4a530c5
JB
15022 add = 8;
15023 }
cb712a9e 15024 else if (address_mode != mode_64bit && (prefixes & PREFIX_LOCK))
c4a530c5 15025 {
f16cd0d5 15026 all_prefixes[last_lock_prefix] = 0;
c4a530c5
JB
15027 used_prefixes |= PREFIX_LOCK;
15028 add = 8;
15029 }
9b60702d
L
15030 else
15031 add = 0;
7967e09e 15032 sprintf (scratchbuf, "%%cr%d", modrm.reg + add);
9ce09ba2 15033 oappend_maybe_intel (scratchbuf);
252b5132
RH
15034}
15035
252b5132 15036static void
26ca5450 15037OP_D (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15038{
9b60702d 15039 int add;
161a04f6
L
15040 USED_REX (REX_R);
15041 if (rex & REX_R)
52b15da3 15042 add = 8;
9b60702d
L
15043 else
15044 add = 0;
d708bcba 15045 if (intel_syntax)
7967e09e 15046 sprintf (scratchbuf, "db%d", modrm.reg + add);
d708bcba 15047 else
7967e09e 15048 sprintf (scratchbuf, "%%db%d", modrm.reg + add);
252b5132
RH
15049 oappend (scratchbuf);
15050}
15051
252b5132 15052static void
26ca5450 15053OP_T (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15054{
7967e09e 15055 sprintf (scratchbuf, "%%tr%d", modrm.reg);
9ce09ba2 15056 oappend_maybe_intel (scratchbuf);
252b5132
RH
15057}
15058
15059static void
6f74c397 15060OP_R (int bytemode, int sizeflag)
252b5132 15061{
68f34464
L
15062 /* Skip mod/rm byte. */
15063 MODRM_CHECK;
15064 codep++;
15065 OP_E_register (bytemode, sizeflag);
252b5132
RH
15066}
15067
15068static void
26ca5450 15069OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15070{
b9733481
L
15071 int reg = modrm.reg;
15072 const char **names;
15073
041bd2e0
JH
15074 used_prefixes |= (prefixes & PREFIX_DATA);
15075 if (prefixes & PREFIX_DATA)
20f0a1fc 15076 {
b9733481 15077 names = names_xmm;
161a04f6
L
15078 USED_REX (REX_R);
15079 if (rex & REX_R)
b9733481 15080 reg += 8;
20f0a1fc 15081 }
041bd2e0 15082 else
b9733481
L
15083 names = names_mm;
15084 oappend (names[reg]);
252b5132
RH
15085}
15086
c608c12e 15087static void
c0f3af97 15088OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
c608c12e 15089{
b9733481
L
15090 int reg = modrm.reg;
15091 const char **names;
15092
161a04f6
L
15093 USED_REX (REX_R);
15094 if (rex & REX_R)
b9733481 15095 reg += 8;
43234a1e
L
15096 if (vex.evex)
15097 {
15098 if (!vex.r)
15099 reg += 16;
15100 }
15101
539f890d
L
15102 if (need_vex
15103 && bytemode != xmm_mode
43234a1e
L
15104 && bytemode != xmmq_mode
15105 && bytemode != evex_half_bcst_xmmq_mode
15106 && bytemode != ymm_mode
539f890d 15107 && bytemode != scalar_mode)
c0f3af97
L
15108 {
15109 switch (vex.length)
15110 {
15111 case 128:
b9733481 15112 names = names_xmm;
c0f3af97
L
15113 break;
15114 case 256:
5fc35d96
IT
15115 if (vex.w
15116 || (bytemode != vex_vsib_q_w_dq_mode
15117 && bytemode != vex_vsib_q_w_d_mode))
6c30d220
L
15118 names = names_ymm;
15119 else
15120 names = names_xmm;
c0f3af97 15121 break;
43234a1e
L
15122 case 512:
15123 names = names_zmm;
15124 break;
c0f3af97
L
15125 default:
15126 abort ();
15127 }
15128 }
43234a1e
L
15129 else if (bytemode == xmmq_mode
15130 || bytemode == evex_half_bcst_xmmq_mode)
15131 {
15132 switch (vex.length)
15133 {
15134 case 128:
15135 case 256:
15136 names = names_xmm;
15137 break;
15138 case 512:
15139 names = names_ymm;
15140 break;
15141 default:
15142 abort ();
15143 }
15144 }
15145 else if (bytemode == ymm_mode)
15146 names = names_ymm;
c0f3af97 15147 else
b9733481
L
15148 names = names_xmm;
15149 oappend (names[reg]);
c608c12e
AM
15150}
15151
252b5132 15152static void
26ca5450 15153OP_EM (int bytemode, int sizeflag)
252b5132 15154{
b9733481
L
15155 int reg;
15156 const char **names;
15157
7967e09e 15158 if (modrm.mod != 3)
252b5132 15159 {
b6169b20
L
15160 if (intel_syntax
15161 && (bytemode == v_mode || bytemode == v_swap_mode))
9306ca4a
JB
15162 {
15163 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
15164 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 15165 }
252b5132
RH
15166 OP_E (bytemode, sizeflag);
15167 return;
15168 }
15169
b6169b20
L
15170 if ((sizeflag & SUFFIX_ALWAYS) && bytemode == v_swap_mode)
15171 swap_operand ();
15172
6608db57 15173 /* Skip mod/rm byte. */
4bba6815 15174 MODRM_CHECK;
252b5132 15175 codep++;
041bd2e0 15176 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 15177 reg = modrm.rm;
041bd2e0 15178 if (prefixes & PREFIX_DATA)
20f0a1fc 15179 {
b9733481 15180 names = names_xmm;
161a04f6
L
15181 USED_REX (REX_B);
15182 if (rex & REX_B)
b9733481 15183 reg += 8;
20f0a1fc 15184 }
041bd2e0 15185 else
b9733481
L
15186 names = names_mm;
15187 oappend (names[reg]);
252b5132
RH
15188}
15189
246c51aa
L
15190/* cvt* are the only instructions in sse2 which have
15191 both SSE and MMX operands and also have 0x66 prefix
15192 in their opcode. 0x66 was originally used to differentiate
15193 between SSE and MMX instruction(operands). So we have to handle the
4d9567e0
MM
15194 cvt* separately using OP_EMC and OP_MXC */
15195static void
15196OP_EMC (int bytemode, int sizeflag)
15197{
7967e09e 15198 if (modrm.mod != 3)
4d9567e0
MM
15199 {
15200 if (intel_syntax && bytemode == v_mode)
15201 {
15202 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
15203 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 15204 }
4d9567e0
MM
15205 OP_E (bytemode, sizeflag);
15206 return;
15207 }
246c51aa 15208
4d9567e0
MM
15209 /* Skip mod/rm byte. */
15210 MODRM_CHECK;
15211 codep++;
15212 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 15213 oappend (names_mm[modrm.rm]);
4d9567e0
MM
15214}
15215
15216static void
15217OP_MXC (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15218{
15219 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 15220 oappend (names_mm[modrm.reg]);
4d9567e0
MM
15221}
15222
c608c12e 15223static void
26ca5450 15224OP_EX (int bytemode, int sizeflag)
c608c12e 15225{
b9733481
L
15226 int reg;
15227 const char **names;
d6f574e0
L
15228
15229 /* Skip mod/rm byte. */
15230 MODRM_CHECK;
15231 codep++;
15232
7967e09e 15233 if (modrm.mod != 3)
c608c12e 15234 {
c1e679ec 15235 OP_E_memory (bytemode, sizeflag);
c608c12e
AM
15236 return;
15237 }
d6f574e0 15238
b9733481 15239 reg = modrm.rm;
161a04f6
L
15240 USED_REX (REX_B);
15241 if (rex & REX_B)
b9733481 15242 reg += 8;
43234a1e
L
15243 if (vex.evex)
15244 {
15245 USED_REX (REX_X);
15246 if ((rex & REX_X))
15247 reg += 16;
15248 }
c608c12e 15249
b6169b20 15250 if ((sizeflag & SUFFIX_ALWAYS)
fa99fab2
L
15251 && (bytemode == x_swap_mode
15252 || bytemode == d_swap_mode
7bb15c6f 15253 || bytemode == d_scalar_swap_mode
539f890d
L
15254 || bytemode == q_swap_mode
15255 || bytemode == q_scalar_swap_mode))
b6169b20
L
15256 swap_operand ();
15257
c0f3af97
L
15258 if (need_vex
15259 && bytemode != xmm_mode
6c30d220
L
15260 && bytemode != xmmdw_mode
15261 && bytemode != xmmqd_mode
15262 && bytemode != xmm_mb_mode
15263 && bytemode != xmm_mw_mode
15264 && bytemode != xmm_md_mode
15265 && bytemode != xmm_mq_mode
43234a1e 15266 && bytemode != xmm_mdq_mode
539f890d 15267 && bytemode != xmmq_mode
43234a1e
L
15268 && bytemode != evex_half_bcst_xmmq_mode
15269 && bytemode != ymm_mode
539f890d 15270 && bytemode != d_scalar_mode
7bb15c6f 15271 && bytemode != d_scalar_swap_mode
539f890d 15272 && bytemode != q_scalar_mode
1c480963
L
15273 && bytemode != q_scalar_swap_mode
15274 && bytemode != vex_scalar_w_dq_mode)
c0f3af97
L
15275 {
15276 switch (vex.length)
15277 {
15278 case 128:
b9733481 15279 names = names_xmm;
c0f3af97
L
15280 break;
15281 case 256:
b9733481 15282 names = names_ymm;
c0f3af97 15283 break;
43234a1e
L
15284 case 512:
15285 names = names_zmm;
15286 break;
c0f3af97
L
15287 default:
15288 abort ();
15289 }
15290 }
43234a1e
L
15291 else if (bytemode == xmmq_mode
15292 || bytemode == evex_half_bcst_xmmq_mode)
15293 {
15294 switch (vex.length)
15295 {
15296 case 128:
15297 case 256:
15298 names = names_xmm;
15299 break;
15300 case 512:
15301 names = names_ymm;
15302 break;
15303 default:
15304 abort ();
15305 }
15306 }
15307 else if (bytemode == ymm_mode)
15308 names = names_ymm;
c0f3af97 15309 else
b9733481
L
15310 names = names_xmm;
15311 oappend (names[reg]);
c608c12e
AM
15312}
15313
252b5132 15314static void
26ca5450 15315OP_MS (int bytemode, int sizeflag)
252b5132 15316{
7967e09e 15317 if (modrm.mod == 3)
2da11e11
AM
15318 OP_EM (bytemode, sizeflag);
15319 else
6608db57 15320 BadOp ();
252b5132
RH
15321}
15322
992aaec9 15323static void
26ca5450 15324OP_XS (int bytemode, int sizeflag)
992aaec9 15325{
7967e09e 15326 if (modrm.mod == 3)
992aaec9
AM
15327 OP_EX (bytemode, sizeflag);
15328 else
6608db57 15329 BadOp ();
992aaec9
AM
15330}
15331
cc0ec051
AM
15332static void
15333OP_M (int bytemode, int sizeflag)
15334{
7967e09e 15335 if (modrm.mod == 3)
75413a22
L
15336 /* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */
15337 BadOp ();
cc0ec051
AM
15338 else
15339 OP_E (bytemode, sizeflag);
15340}
15341
15342static void
15343OP_0f07 (int bytemode, int sizeflag)
15344{
7967e09e 15345 if (modrm.mod != 3 || modrm.rm != 0)
cc0ec051
AM
15346 BadOp ();
15347 else
15348 OP_E (bytemode, sizeflag);
15349}
15350
46e883c5 15351/* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
246c51aa 15352 32bit mode and "xchg %rax,%rax" in 64bit mode. */
46e883c5 15353
cc0ec051 15354static void
46e883c5 15355NOP_Fixup1 (int bytemode, int sizeflag)
cc0ec051 15356{
8b38ad71
L
15357 if ((prefixes & PREFIX_DATA) != 0
15358 || (rex != 0
15359 && rex != 0x48
15360 && address_mode == mode_64bit))
46e883c5
L
15361 OP_REG (bytemode, sizeflag);
15362 else
15363 strcpy (obuf, "nop");
15364}
15365
15366static void
15367NOP_Fixup2 (int bytemode, int sizeflag)
15368{
8b38ad71
L
15369 if ((prefixes & PREFIX_DATA) != 0
15370 || (rex != 0
15371 && rex != 0x48
15372 && address_mode == mode_64bit))
46e883c5 15373 OP_IMREG (bytemode, sizeflag);
cc0ec051
AM
15374}
15375
84037f8c 15376static const char *const Suffix3DNow[] = {
252b5132
RH
15377/* 00 */ NULL, NULL, NULL, NULL,
15378/* 04 */ NULL, NULL, NULL, NULL,
15379/* 08 */ NULL, NULL, NULL, NULL,
9e525108 15380/* 0C */ "pi2fw", "pi2fd", NULL, NULL,
252b5132
RH
15381/* 10 */ NULL, NULL, NULL, NULL,
15382/* 14 */ NULL, NULL, NULL, NULL,
15383/* 18 */ NULL, NULL, NULL, NULL,
9e525108 15384/* 1C */ "pf2iw", "pf2id", NULL, NULL,
252b5132
RH
15385/* 20 */ NULL, NULL, NULL, NULL,
15386/* 24 */ NULL, NULL, NULL, NULL,
15387/* 28 */ NULL, NULL, NULL, NULL,
15388/* 2C */ NULL, NULL, NULL, NULL,
15389/* 30 */ NULL, NULL, NULL, NULL,
15390/* 34 */ NULL, NULL, NULL, NULL,
15391/* 38 */ NULL, NULL, NULL, NULL,
15392/* 3C */ NULL, NULL, NULL, NULL,
15393/* 40 */ NULL, NULL, NULL, NULL,
15394/* 44 */ NULL, NULL, NULL, NULL,
15395/* 48 */ NULL, NULL, NULL, NULL,
15396/* 4C */ NULL, NULL, NULL, NULL,
15397/* 50 */ NULL, NULL, NULL, NULL,
15398/* 54 */ NULL, NULL, NULL, NULL,
15399/* 58 */ NULL, NULL, NULL, NULL,
15400/* 5C */ NULL, NULL, NULL, NULL,
15401/* 60 */ NULL, NULL, NULL, NULL,
15402/* 64 */ NULL, NULL, NULL, NULL,
15403/* 68 */ NULL, NULL, NULL, NULL,
15404/* 6C */ NULL, NULL, NULL, NULL,
15405/* 70 */ NULL, NULL, NULL, NULL,
15406/* 74 */ NULL, NULL, NULL, NULL,
15407/* 78 */ NULL, NULL, NULL, NULL,
15408/* 7C */ NULL, NULL, NULL, NULL,
15409/* 80 */ NULL, NULL, NULL, NULL,
15410/* 84 */ NULL, NULL, NULL, NULL,
9e525108
AM
15411/* 88 */ NULL, NULL, "pfnacc", NULL,
15412/* 8C */ NULL, NULL, "pfpnacc", NULL,
252b5132
RH
15413/* 90 */ "pfcmpge", NULL, NULL, NULL,
15414/* 94 */ "pfmin", NULL, "pfrcp", "pfrsqrt",
15415/* 98 */ NULL, NULL, "pfsub", NULL,
15416/* 9C */ NULL, NULL, "pfadd", NULL,
15417/* A0 */ "pfcmpgt", NULL, NULL, NULL,
15418/* A4 */ "pfmax", NULL, "pfrcpit1", "pfrsqit1",
15419/* A8 */ NULL, NULL, "pfsubr", NULL,
15420/* AC */ NULL, NULL, "pfacc", NULL,
15421/* B0 */ "pfcmpeq", NULL, NULL, NULL,
9beff690 15422/* B4 */ "pfmul", NULL, "pfrcpit2", "pmulhrw",
9e525108 15423/* B8 */ NULL, NULL, NULL, "pswapd",
252b5132
RH
15424/* BC */ NULL, NULL, NULL, "pavgusb",
15425/* C0 */ NULL, NULL, NULL, NULL,
15426/* C4 */ NULL, NULL, NULL, NULL,
15427/* C8 */ NULL, NULL, NULL, NULL,
15428/* CC */ NULL, NULL, NULL, NULL,
15429/* D0 */ NULL, NULL, NULL, NULL,
15430/* D4 */ NULL, NULL, NULL, NULL,
15431/* D8 */ NULL, NULL, NULL, NULL,
15432/* DC */ NULL, NULL, NULL, NULL,
15433/* E0 */ NULL, NULL, NULL, NULL,
15434/* E4 */ NULL, NULL, NULL, NULL,
15435/* E8 */ NULL, NULL, NULL, NULL,
15436/* EC */ NULL, NULL, NULL, NULL,
15437/* F0 */ NULL, NULL, NULL, NULL,
15438/* F4 */ NULL, NULL, NULL, NULL,
15439/* F8 */ NULL, NULL, NULL, NULL,
15440/* FC */ NULL, NULL, NULL, NULL,
15441};
15442
15443static void
26ca5450 15444OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132
RH
15445{
15446 const char *mnemonic;
15447
15448 FETCH_DATA (the_info, codep + 1);
15449 /* AMD 3DNow! instructions are specified by an opcode suffix in the
15450 place where an 8-bit immediate would normally go. ie. the last
15451 byte of the instruction. */
ea397f5b 15452 obufp = mnemonicendp;
c608c12e 15453 mnemonic = Suffix3DNow[*codep++ & 0xff];
252b5132 15454 if (mnemonic)
2da11e11 15455 oappend (mnemonic);
252b5132
RH
15456 else
15457 {
15458 /* Since a variable sized modrm/sib chunk is between the start
15459 of the opcode (0x0f0f) and the opcode suffix, we need to do
15460 all the modrm processing first, and don't know until now that
15461 we have a bad opcode. This necessitates some cleaning up. */
ce518a5f
L
15462 op_out[0][0] = '\0';
15463 op_out[1][0] = '\0';
6608db57 15464 BadOp ();
252b5132 15465 }
ea397f5b 15466 mnemonicendp = obufp;
252b5132 15467}
c608c12e 15468
ea397f5b
L
15469static struct op simd_cmp_op[] =
15470{
15471 { STRING_COMMA_LEN ("eq") },
15472 { STRING_COMMA_LEN ("lt") },
15473 { STRING_COMMA_LEN ("le") },
15474 { STRING_COMMA_LEN ("unord") },
15475 { STRING_COMMA_LEN ("neq") },
15476 { STRING_COMMA_LEN ("nlt") },
15477 { STRING_COMMA_LEN ("nle") },
15478 { STRING_COMMA_LEN ("ord") }
c608c12e
AM
15479};
15480
15481static void
ad19981d 15482CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
c608c12e
AM
15483{
15484 unsigned int cmp_type;
15485
15486 FETCH_DATA (the_info, codep + 1);
15487 cmp_type = *codep++ & 0xff;
c0f3af97 15488 if (cmp_type < ARRAY_SIZE (simd_cmp_op))
c608c12e 15489 {
ad19981d 15490 char suffix [3];
ea397f5b 15491 char *p = mnemonicendp - 2;
ad19981d
L
15492 suffix[0] = p[0];
15493 suffix[1] = p[1];
15494 suffix[2] = '\0';
ea397f5b
L
15495 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
15496 mnemonicendp += simd_cmp_op[cmp_type].len;
c608c12e
AM
15497 }
15498 else
15499 {
ad19981d
L
15500 /* We have a reserved extension byte. Output it directly. */
15501 scratchbuf[0] = '$';
15502 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 15503 oappend_maybe_intel (scratchbuf);
ad19981d 15504 scratchbuf[0] = '\0';
c608c12e
AM
15505 }
15506}
15507
9916071f
AP
15508static void
15509OP_Mwaitx (int bytemode ATTRIBUTE_UNUSED,
15510 int sizeflag ATTRIBUTE_UNUSED)
15511{
15512 /* mwaitx %eax,%ecx,%ebx */
15513 if (!intel_syntax)
15514 {
15515 const char **names = (address_mode == mode_64bit
15516 ? names64 : names32);
15517 strcpy (op_out[0], names[0]);
15518 strcpy (op_out[1], names[1]);
15519 strcpy (op_out[2], names[3]);
15520 two_source_ops = 1;
15521 }
15522 /* Skip mod/rm byte. */
15523 MODRM_CHECK;
15524 codep++;
15525}
15526
ca164297 15527static void
b844680a
L
15528OP_Mwait (int bytemode ATTRIBUTE_UNUSED,
15529 int sizeflag ATTRIBUTE_UNUSED)
15530{
15531 /* mwait %eax,%ecx */
15532 if (!intel_syntax)
15533 {
15534 const char **names = (address_mode == mode_64bit
15535 ? names64 : names32);
15536 strcpy (op_out[0], names[0]);
15537 strcpy (op_out[1], names[1]);
15538 two_source_ops = 1;
15539 }
15540 /* Skip mod/rm byte. */
15541 MODRM_CHECK;
15542 codep++;
15543}
15544
15545static void
15546OP_Monitor (int bytemode ATTRIBUTE_UNUSED,
15547 int sizeflag ATTRIBUTE_UNUSED)
ca164297 15548{
b844680a
L
15549 /* monitor %eax,%ecx,%edx" */
15550 if (!intel_syntax)
ca164297 15551 {
b844680a 15552 const char **op1_names;
cb712a9e
L
15553 const char **names = (address_mode == mode_64bit
15554 ? names64 : names32);
1d9f512f 15555
b844680a
L
15556 if (!(prefixes & PREFIX_ADDR))
15557 op1_names = (address_mode == mode_16bit
15558 ? names16 : names);
ca164297
L
15559 else
15560 {
b844680a 15561 /* Remove "addr16/addr32". */
f16cd0d5 15562 all_prefixes[last_addr_prefix] = 0;
b844680a
L
15563 op1_names = (address_mode != mode_32bit
15564 ? names32 : names16);
15565 used_prefixes |= PREFIX_ADDR;
ca164297 15566 }
b844680a
L
15567 strcpy (op_out[0], op1_names[0]);
15568 strcpy (op_out[1], names[1]);
15569 strcpy (op_out[2], names[2]);
15570 two_source_ops = 1;
ca164297 15571 }
b844680a
L
15572 /* Skip mod/rm byte. */
15573 MODRM_CHECK;
15574 codep++;
30123838
JB
15575}
15576
6608db57
KH
15577static void
15578BadOp (void)
2da11e11 15579{
6608db57
KH
15580 /* Throw away prefixes and 1st. opcode byte. */
15581 codep = insn_codep + 1;
2da11e11
AM
15582 oappend ("(bad)");
15583}
4cc91dba 15584
35c52694
L
15585static void
15586REP_Fixup (int bytemode, int sizeflag)
15587{
15588 /* The 0xf3 prefix should be displayed as "rep" for ins, outs, movs,
15589 lods and stos. */
35c52694 15590 if (prefixes & PREFIX_REPZ)
f16cd0d5 15591 all_prefixes[last_repz_prefix] = REP_PREFIX;
35c52694
L
15592
15593 switch (bytemode)
15594 {
15595 case al_reg:
15596 case eAX_reg:
15597 case indir_dx_reg:
15598 OP_IMREG (bytemode, sizeflag);
15599 break;
15600 case eDI_reg:
15601 OP_ESreg (bytemode, sizeflag);
15602 break;
15603 case eSI_reg:
15604 OP_DSreg (bytemode, sizeflag);
15605 break;
15606 default:
15607 abort ();
15608 break;
15609 }
15610}
f5804c90 15611
7e8b059b
L
15612/* For BND-prefixed instructions 0xF2 prefix should be displayed as
15613 "bnd". */
15614
15615static void
15616BND_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15617{
15618 if (prefixes & PREFIX_REPNZ)
15619 all_prefixes[last_repnz_prefix] = BND_PREFIX;
15620}
15621
04ef582a
L
15622/* For NOTRACK-prefixed instructions, 0x3E prefix should be displayed as
15623 "notrack". */
15624
15625static void
15626NOTRACK_Fixup (int bytemode ATTRIBUTE_UNUSED,
15627 int sizeflag ATTRIBUTE_UNUSED)
15628{
9fef80d6 15629 if (active_seg_prefix == PREFIX_DS
04ef582a
L
15630 && (address_mode != mode_64bit || last_data_prefix < 0))
15631 {
4e9ac44a 15632 /* NOTRACK prefix is only valid on indirect branch instructions.
9fef80d6 15633 NB: DATA prefix is unsupported for Intel64. */
04ef582a
L
15634 active_seg_prefix = 0;
15635 all_prefixes[last_seg_prefix] = NOTRACK_PREFIX;
15636 }
15637}
15638
42164a71
L
15639/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
15640 "xacquire"/"xrelease" for memory operand if there is a LOCK prefix.
15641 */
15642
15643static void
15644HLE_Fixup1 (int bytemode, int sizeflag)
15645{
15646 if (modrm.mod != 3
15647 && (prefixes & PREFIX_LOCK) != 0)
15648 {
15649 if (prefixes & PREFIX_REPZ)
15650 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15651 if (prefixes & PREFIX_REPNZ)
15652 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
15653 }
15654
15655 OP_E (bytemode, sizeflag);
15656}
15657
15658/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
15659 "xacquire"/"xrelease" for memory operand. No check for LOCK prefix.
15660 */
15661
15662static void
15663HLE_Fixup2 (int bytemode, int sizeflag)
15664{
15665 if (modrm.mod != 3)
15666 {
15667 if (prefixes & PREFIX_REPZ)
15668 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15669 if (prefixes & PREFIX_REPNZ)
15670 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
15671 }
15672
15673 OP_E (bytemode, sizeflag);
15674}
15675
15676/* Similar to OP_E. But the 0xf3 prefixes should be displayed as
15677 "xrelease" for memory operand. No check for LOCK prefix. */
15678
15679static void
15680HLE_Fixup3 (int bytemode, int sizeflag)
15681{
15682 if (modrm.mod != 3
15683 && last_repz_prefix > last_repnz_prefix
15684 && (prefixes & PREFIX_REPZ) != 0)
15685 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15686
15687 OP_E (bytemode, sizeflag);
15688}
15689
f5804c90
L
15690static void
15691CMPXCHG8B_Fixup (int bytemode, int sizeflag)
15692{
161a04f6
L
15693 USED_REX (REX_W);
15694 if (rex & REX_W)
f5804c90
L
15695 {
15696 /* Change cmpxchg8b to cmpxchg16b. */
ea397f5b
L
15697 char *p = mnemonicendp - 2;
15698 mnemonicendp = stpcpy (p, "16b");
fb9c77c7 15699 bytemode = o_mode;
f5804c90 15700 }
42164a71
L
15701 else if ((prefixes & PREFIX_LOCK) != 0)
15702 {
15703 if (prefixes & PREFIX_REPZ)
15704 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15705 if (prefixes & PREFIX_REPNZ)
15706 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
15707 }
15708
f5804c90
L
15709 OP_M (bytemode, sizeflag);
15710}
42903f7f
L
15711
15712static void
15713XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED)
15714{
b9733481
L
15715 const char **names;
15716
c0f3af97
L
15717 if (need_vex)
15718 {
15719 switch (vex.length)
15720 {
15721 case 128:
b9733481 15722 names = names_xmm;
c0f3af97
L
15723 break;
15724 case 256:
b9733481 15725 names = names_ymm;
c0f3af97
L
15726 break;
15727 default:
15728 abort ();
15729 }
15730 }
15731 else
b9733481
L
15732 names = names_xmm;
15733 oappend (names[reg]);
42903f7f 15734}
381d071f
L
15735
15736static void
15737CRC32_Fixup (int bytemode, int sizeflag)
15738{
15739 /* Add proper suffix to "crc32". */
ea397f5b 15740 char *p = mnemonicendp;
381d071f
L
15741
15742 switch (bytemode)
15743 {
15744 case b_mode:
20592a94 15745 if (intel_syntax)
ea397f5b 15746 goto skip;
20592a94 15747
381d071f
L
15748 *p++ = 'b';
15749 break;
15750 case v_mode:
20592a94 15751 if (intel_syntax)
ea397f5b 15752 goto skip;
20592a94 15753
381d071f
L
15754 USED_REX (REX_W);
15755 if (rex & REX_W)
15756 *p++ = 'q';
7bb15c6f 15757 else
f16cd0d5
L
15758 {
15759 if (sizeflag & DFLAG)
15760 *p++ = 'l';
15761 else
15762 *p++ = 'w';
15763 used_prefixes |= (prefixes & PREFIX_DATA);
15764 }
381d071f
L
15765 break;
15766 default:
15767 oappend (INTERNAL_DISASSEMBLER_ERROR);
15768 break;
15769 }
ea397f5b 15770 mnemonicendp = p;
381d071f
L
15771 *p = '\0';
15772
ea397f5b 15773skip:
381d071f
L
15774 if (modrm.mod == 3)
15775 {
15776 int add;
15777
15778 /* Skip mod/rm byte. */
15779 MODRM_CHECK;
15780 codep++;
15781
15782 USED_REX (REX_B);
15783 add = (rex & REX_B) ? 8 : 0;
15784 if (bytemode == b_mode)
15785 {
15786 USED_REX (0);
15787 if (rex)
15788 oappend (names8rex[modrm.rm + add]);
15789 else
15790 oappend (names8[modrm.rm + add]);
15791 }
15792 else
15793 {
15794 USED_REX (REX_W);
15795 if (rex & REX_W)
15796 oappend (names64[modrm.rm + add]);
15797 else if ((prefixes & PREFIX_DATA))
15798 oappend (names16[modrm.rm + add]);
15799 else
15800 oappend (names32[modrm.rm + add]);
15801 }
15802 }
15803 else
9344ff29 15804 OP_E (bytemode, sizeflag);
381d071f 15805}
85f10a01 15806
eacc9c89
L
15807static void
15808FXSAVE_Fixup (int bytemode, int sizeflag)
15809{
15810 /* Add proper suffix to "fxsave" and "fxrstor". */
15811 USED_REX (REX_W);
15812 if (rex & REX_W)
15813 {
15814 char *p = mnemonicendp;
15815 *p++ = '6';
15816 *p++ = '4';
15817 *p = '\0';
15818 mnemonicendp = p;
15819 }
15820 OP_M (bytemode, sizeflag);
15821}
15822
15c7c1d8
JB
15823static void
15824PCMPESTR_Fixup (int bytemode, int sizeflag)
15825{
15826 /* Add proper suffix to "{,v}pcmpestr{i,m}". */
15827 if (!intel_syntax)
15828 {
15829 char *p = mnemonicendp;
15830
15831 USED_REX (REX_W);
15832 if (rex & REX_W)
15833 *p++ = 'q';
15834 else if (sizeflag & SUFFIX_ALWAYS)
15835 *p++ = 'l';
15836
15837 *p = '\0';
15838 mnemonicendp = p;
15839 }
15840
15841 OP_EX (bytemode, sizeflag);
15842}
15843
c0f3af97
L
15844/* Display the destination register operand for instructions with
15845 VEX. */
15846
15847static void
15848OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
15849{
539f890d 15850 int reg;
b9733481
L
15851 const char **names;
15852
c0f3af97
L
15853 if (!need_vex)
15854 abort ();
15855
15856 if (!need_vex_reg)
15857 return;
15858
539f890d 15859 reg = vex.register_specifier;
63c6fc6c 15860 vex.register_specifier = 0;
5f847646
JB
15861 if (address_mode != mode_64bit)
15862 reg &= 7;
15863 else if (vex.evex && !vex.v)
15864 reg += 16;
43234a1e 15865
539f890d
L
15866 if (bytemode == vex_scalar_mode)
15867 {
15868 oappend (names_xmm[reg]);
15869 return;
15870 }
15871
c0f3af97
L
15872 switch (vex.length)
15873 {
15874 case 128:
15875 switch (bytemode)
15876 {
15877 case vex_mode:
15878 case vex128_mode:
6c30d220 15879 case vex_vsib_q_w_dq_mode:
5fc35d96 15880 case vex_vsib_q_w_d_mode:
cb21baef
L
15881 names = names_xmm;
15882 break;
15883 case dq_mode:
390a6789 15884 if (rex & REX_W)
cb21baef
L
15885 names = names64;
15886 else
15887 names = names32;
c0f3af97 15888 break;
1ba585e8 15889 case mask_bd_mode:
43234a1e 15890 case mask_mode:
9889cbb1
L
15891 if (reg > 0x7)
15892 {
15893 oappend ("(bad)");
15894 return;
15895 }
43234a1e
L
15896 names = names_mask;
15897 break;
c0f3af97
L
15898 default:
15899 abort ();
15900 return;
15901 }
c0f3af97
L
15902 break;
15903 case 256:
15904 switch (bytemode)
15905 {
15906 case vex_mode:
15907 case vex256_mode:
6c30d220
L
15908 names = names_ymm;
15909 break;
15910 case vex_vsib_q_w_dq_mode:
5fc35d96 15911 case vex_vsib_q_w_d_mode:
6c30d220 15912 names = vex.w ? names_ymm : names_xmm;
c0f3af97 15913 break;
1ba585e8 15914 case mask_bd_mode:
43234a1e 15915 case mask_mode:
9889cbb1
L
15916 if (reg > 0x7)
15917 {
15918 oappend ("(bad)");
15919 return;
15920 }
43234a1e
L
15921 names = names_mask;
15922 break;
c0f3af97 15923 default:
a37a2806
NC
15924 /* See PR binutils/20893 for a reproducer. */
15925 oappend ("(bad)");
c0f3af97
L
15926 return;
15927 }
c0f3af97 15928 break;
43234a1e
L
15929 case 512:
15930 names = names_zmm;
15931 break;
c0f3af97
L
15932 default:
15933 abort ();
15934 break;
15935 }
539f890d 15936 oappend (names[reg]);
c0f3af97
L
15937}
15938
922d8de8
DR
15939/* Get the VEX immediate byte without moving codep. */
15940
15941static unsigned char
ccc5981b 15942get_vex_imm8 (int sizeflag, int opnum)
922d8de8
DR
15943{
15944 int bytes_before_imm = 0;
15945
922d8de8
DR
15946 if (modrm.mod != 3)
15947 {
15948 /* There are SIB/displacement bytes. */
15949 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
6c067bbb 15950 {
922d8de8 15951 /* 32/64 bit address mode */
6c067bbb 15952 int base = modrm.rm;
922d8de8
DR
15953
15954 /* Check SIB byte. */
6c067bbb
RM
15955 if (base == 4)
15956 {
15957 FETCH_DATA (the_info, codep + 1);
15958 base = *codep & 7;
15959 /* When decoding the third source, don't increase
15960 bytes_before_imm as this has already been incremented
15961 by one in OP_E_memory while decoding the second
15962 source operand. */
15963 if (opnum == 0)
15964 bytes_before_imm++;
15965 }
15966
15967 /* Don't increase bytes_before_imm when decoding the third source,
15968 it has already been incremented by OP_E_memory while decoding
15969 the second source operand. */
15970 if (opnum == 0)
15971 {
15972 switch (modrm.mod)
15973 {
15974 case 0:
15975 /* When modrm.rm == 5 or modrm.rm == 4 and base in
15976 SIB == 5, there is a 4 byte displacement. */
15977 if (base != 5)
15978 /* No displacement. */
15979 break;
1a0670f3 15980 /* Fall through. */
6c067bbb
RM
15981 case 2:
15982 /* 4 byte displacement. */
15983 bytes_before_imm += 4;
15984 break;
15985 case 1:
15986 /* 1 byte displacement. */
15987 bytes_before_imm++;
15988 break;
15989 }
15990 }
15991 }
922d8de8 15992 else
02e647f9
SP
15993 {
15994 /* 16 bit address mode */
6c067bbb
RM
15995 /* Don't increase bytes_before_imm when decoding the third source,
15996 it has already been incremented by OP_E_memory while decoding
15997 the second source operand. */
15998 if (opnum == 0)
15999 {
02e647f9
SP
16000 switch (modrm.mod)
16001 {
16002 case 0:
16003 /* When modrm.rm == 6, there is a 2 byte displacement. */
16004 if (modrm.rm != 6)
16005 /* No displacement. */
16006 break;
1a0670f3 16007 /* Fall through. */
02e647f9
SP
16008 case 2:
16009 /* 2 byte displacement. */
16010 bytes_before_imm += 2;
16011 break;
16012 case 1:
16013 /* 1 byte displacement: when decoding the third source,
16014 don't increase bytes_before_imm as this has already
16015 been incremented by one in OP_E_memory while decoding
16016 the second source operand. */
16017 if (opnum == 0)
16018 bytes_before_imm++;
ccc5981b 16019
02e647f9
SP
16020 break;
16021 }
922d8de8
DR
16022 }
16023 }
16024 }
16025
16026 FETCH_DATA (the_info, codep + bytes_before_imm + 1);
16027 return codep [bytes_before_imm];
16028}
16029
16030static void
16031OP_EX_VexReg (int bytemode, int sizeflag, int reg)
16032{
b9733481
L
16033 const char **names;
16034
922d8de8
DR
16035 if (reg == -1 && modrm.mod != 3)
16036 {
16037 OP_E_memory (bytemode, sizeflag);
16038 return;
16039 }
16040 else
16041 {
16042 if (reg == -1)
16043 {
16044 reg = modrm.rm;
16045 USED_REX (REX_B);
16046 if (rex & REX_B)
16047 reg += 8;
16048 }
5f847646
JB
16049 if (address_mode != mode_64bit)
16050 reg &= 7;
922d8de8
DR
16051 }
16052
16053 switch (vex.length)
16054 {
16055 case 128:
b9733481 16056 names = names_xmm;
922d8de8
DR
16057 break;
16058 case 256:
b9733481 16059 names = names_ymm;
922d8de8
DR
16060 break;
16061 default:
16062 abort ();
16063 }
b9733481 16064 oappend (names[reg]);
922d8de8
DR
16065}
16066
a683cc34
SP
16067static void
16068OP_EX_VexImmW (int bytemode, int sizeflag)
16069{
16070 int reg = -1;
16071 static unsigned char vex_imm8;
16072
16073 if (vex_w_done == 0)
16074 {
16075 vex_w_done = 1;
16076
16077 /* Skip mod/rm byte. */
16078 MODRM_CHECK;
16079 codep++;
16080
16081 vex_imm8 = get_vex_imm8 (sizeflag, 0);
16082
16083 if (vex.w)
16084 reg = vex_imm8 >> 4;
16085
16086 OP_EX_VexReg (bytemode, sizeflag, reg);
16087 }
16088 else if (vex_w_done == 1)
16089 {
16090 vex_w_done = 2;
16091
16092 if (!vex.w)
16093 reg = vex_imm8 >> 4;
16094
16095 OP_EX_VexReg (bytemode, sizeflag, reg);
16096 }
16097 else
16098 {
16099 /* Output the imm8 directly. */
16100 scratchbuf[0] = '$';
16101 print_operand_value (scratchbuf + 1, 1, vex_imm8 & 0xf);
9ce09ba2 16102 oappend_maybe_intel (scratchbuf);
a683cc34
SP
16103 scratchbuf[0] = '\0';
16104 codep++;
16105 }
16106}
16107
5dd85c99
SP
16108static void
16109OP_Vex_2src (int bytemode, int sizeflag)
16110{
16111 if (modrm.mod == 3)
16112 {
b9733481 16113 int reg = modrm.rm;
5dd85c99 16114 USED_REX (REX_B);
b9733481
L
16115 if (rex & REX_B)
16116 reg += 8;
16117 oappend (names_xmm[reg]);
5dd85c99
SP
16118 }
16119 else
16120 {
16121 if (intel_syntax
16122 && (bytemode == v_mode || bytemode == v_swap_mode))
16123 {
16124 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
16125 used_prefixes |= (prefixes & PREFIX_DATA);
16126 }
16127 OP_E (bytemode, sizeflag);
16128 }
16129}
16130
16131static void
16132OP_Vex_2src_1 (int bytemode, int sizeflag)
16133{
16134 if (modrm.mod == 3)
16135 {
16136 /* Skip mod/rm byte. */
16137 MODRM_CHECK;
16138 codep++;
16139 }
16140
16141 if (vex.w)
5f847646
JB
16142 {
16143 unsigned int reg = vex.register_specifier;
63c6fc6c 16144 vex.register_specifier = 0;
5f847646
JB
16145
16146 if (address_mode != mode_64bit)
16147 reg &= 7;
16148 oappend (names_xmm[reg]);
16149 }
5dd85c99
SP
16150 else
16151 OP_Vex_2src (bytemode, sizeflag);
16152}
16153
16154static void
16155OP_Vex_2src_2 (int bytemode, int sizeflag)
16156{
16157 if (vex.w)
16158 OP_Vex_2src (bytemode, sizeflag);
16159 else
5f847646
JB
16160 {
16161 unsigned int reg = vex.register_specifier;
63c6fc6c 16162 vex.register_specifier = 0;
5f847646
JB
16163
16164 if (address_mode != mode_64bit)
16165 reg &= 7;
16166 oappend (names_xmm[reg]);
16167 }
5dd85c99
SP
16168}
16169
922d8de8
DR
16170static void
16171OP_EX_VexW (int bytemode, int sizeflag)
16172{
16173 int reg = -1;
16174
16175 if (!vex_w_done)
16176 {
41effecb
SP
16177 /* Skip mod/rm byte. */
16178 MODRM_CHECK;
16179 codep++;
16180
922d8de8 16181 if (vex.w)
ccc5981b 16182 reg = get_vex_imm8 (sizeflag, 0) >> 4;
922d8de8
DR
16183 }
16184 else
16185 {
16186 if (!vex.w)
ccc5981b 16187 reg = get_vex_imm8 (sizeflag, 1) >> 4;
922d8de8
DR
16188 }
16189
16190 OP_EX_VexReg (bytemode, sizeflag, reg);
922d8de8 16191
3a2430e0
JB
16192 if (vex_w_done)
16193 codep++;
16194 vex_w_done = 1;
922d8de8
DR
16195}
16196
c0f3af97
L
16197static void
16198OP_REG_VexI4 (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16199{
16200 int reg;
b9733481
L
16201 const char **names;
16202
c0f3af97
L
16203 FETCH_DATA (the_info, codep + 1);
16204 reg = *codep++;
16205
16206 if (bytemode != x_mode)
16207 abort ();
16208
c0f3af97 16209 reg >>= 4;
5f847646
JB
16210 if (address_mode != mode_64bit)
16211 reg &= 7;
dae39acc 16212
c0f3af97
L
16213 switch (vex.length)
16214 {
16215 case 128:
b9733481 16216 names = names_xmm;
c0f3af97
L
16217 break;
16218 case 256:
b9733481 16219 names = names_ymm;
c0f3af97
L
16220 break;
16221 default:
16222 abort ();
16223 }
b9733481 16224 oappend (names[reg]);
c0f3af97
L
16225}
16226
922d8de8
DR
16227static void
16228OP_XMM_VexW (int bytemode, int sizeflag)
16229{
16230 /* Turn off the REX.W bit since it is used for swapping operands
16231 now. */
16232 rex &= ~REX_W;
16233 OP_XMM (bytemode, sizeflag);
16234}
16235
c0f3af97
L
16236static void
16237OP_EX_Vex (int bytemode, int sizeflag)
16238{
16239 if (modrm.mod != 3)
63c6fc6c 16240 need_vex_reg = 0;
c0f3af97
L
16241 OP_EX (bytemode, sizeflag);
16242}
16243
16244static void
16245OP_XMM_Vex (int bytemode, int sizeflag)
16246{
16247 if (modrm.mod != 3)
63c6fc6c 16248 need_vex_reg = 0;
c0f3af97
L
16249 OP_XMM (bytemode, sizeflag);
16250}
16251
ea397f5b
L
16252static struct op vex_cmp_op[] =
16253{
16254 { STRING_COMMA_LEN ("eq") },
16255 { STRING_COMMA_LEN ("lt") },
16256 { STRING_COMMA_LEN ("le") },
16257 { STRING_COMMA_LEN ("unord") },
16258 { STRING_COMMA_LEN ("neq") },
16259 { STRING_COMMA_LEN ("nlt") },
16260 { STRING_COMMA_LEN ("nle") },
16261 { STRING_COMMA_LEN ("ord") },
16262 { STRING_COMMA_LEN ("eq_uq") },
16263 { STRING_COMMA_LEN ("nge") },
16264 { STRING_COMMA_LEN ("ngt") },
16265 { STRING_COMMA_LEN ("false") },
16266 { STRING_COMMA_LEN ("neq_oq") },
16267 { STRING_COMMA_LEN ("ge") },
16268 { STRING_COMMA_LEN ("gt") },
16269 { STRING_COMMA_LEN ("true") },
16270 { STRING_COMMA_LEN ("eq_os") },
16271 { STRING_COMMA_LEN ("lt_oq") },
16272 { STRING_COMMA_LEN ("le_oq") },
16273 { STRING_COMMA_LEN ("unord_s") },
16274 { STRING_COMMA_LEN ("neq_us") },
16275 { STRING_COMMA_LEN ("nlt_uq") },
16276 { STRING_COMMA_LEN ("nle_uq") },
16277 { STRING_COMMA_LEN ("ord_s") },
16278 { STRING_COMMA_LEN ("eq_us") },
16279 { STRING_COMMA_LEN ("nge_uq") },
16280 { STRING_COMMA_LEN ("ngt_uq") },
16281 { STRING_COMMA_LEN ("false_os") },
16282 { STRING_COMMA_LEN ("neq_os") },
16283 { STRING_COMMA_LEN ("ge_oq") },
16284 { STRING_COMMA_LEN ("gt_oq") },
16285 { STRING_COMMA_LEN ("true_us") },
c0f3af97
L
16286};
16287
16288static void
16289VCMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16290{
16291 unsigned int cmp_type;
16292
16293 FETCH_DATA (the_info, codep + 1);
16294 cmp_type = *codep++ & 0xff;
16295 if (cmp_type < ARRAY_SIZE (vex_cmp_op))
16296 {
16297 char suffix [3];
ea397f5b 16298 char *p = mnemonicendp - 2;
c0f3af97
L
16299 suffix[0] = p[0];
16300 suffix[1] = p[1];
16301 suffix[2] = '\0';
ea397f5b
L
16302 sprintf (p, "%s%s", vex_cmp_op[cmp_type].name, suffix);
16303 mnemonicendp += vex_cmp_op[cmp_type].len;
c0f3af97
L
16304 }
16305 else
16306 {
16307 /* We have a reserved extension byte. Output it directly. */
16308 scratchbuf[0] = '$';
16309 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 16310 oappend_maybe_intel (scratchbuf);
c0f3af97
L
16311 scratchbuf[0] = '\0';
16312 }
16313}
16314
43234a1e
L
16315static void
16316VPCMP_Fixup (int bytemode ATTRIBUTE_UNUSED,
16317 int sizeflag ATTRIBUTE_UNUSED)
16318{
16319 unsigned int cmp_type;
16320
16321 if (!vex.evex)
16322 abort ();
16323
16324 FETCH_DATA (the_info, codep + 1);
16325 cmp_type = *codep++ & 0xff;
16326 /* There are aliases for immediates 0, 1, 2, 4, 5, 6.
16327 If it's the case, print suffix, otherwise - print the immediate. */
16328 if (cmp_type < ARRAY_SIZE (simd_cmp_op)
16329 && cmp_type != 3
16330 && cmp_type != 7)
16331 {
16332 char suffix [3];
16333 char *p = mnemonicendp - 2;
16334
16335 /* vpcmp* can have both one- and two-lettered suffix. */
16336 if (p[0] == 'p')
16337 {
16338 p++;
16339 suffix[0] = p[0];
16340 suffix[1] = '\0';
16341 }
16342 else
16343 {
16344 suffix[0] = p[0];
16345 suffix[1] = p[1];
16346 suffix[2] = '\0';
16347 }
16348
16349 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
16350 mnemonicendp += simd_cmp_op[cmp_type].len;
16351 }
be92cb14
JB
16352 else
16353 {
16354 /* We have a reserved extension byte. Output it directly. */
16355 scratchbuf[0] = '$';
16356 print_operand_value (scratchbuf + 1, 1, cmp_type);
16357 oappend_maybe_intel (scratchbuf);
16358 scratchbuf[0] = '\0';
16359 }
16360}
16361
16362static const struct op xop_cmp_op[] =
16363{
16364 { STRING_COMMA_LEN ("lt") },
16365 { STRING_COMMA_LEN ("le") },
16366 { STRING_COMMA_LEN ("gt") },
16367 { STRING_COMMA_LEN ("ge") },
16368 { STRING_COMMA_LEN ("eq") },
16369 { STRING_COMMA_LEN ("neq") },
16370 { STRING_COMMA_LEN ("false") },
16371 { STRING_COMMA_LEN ("true") }
16372};
16373
16374static void
16375VPCOM_Fixup (int bytemode ATTRIBUTE_UNUSED,
16376 int sizeflag ATTRIBUTE_UNUSED)
16377{
16378 unsigned int cmp_type;
16379
16380 FETCH_DATA (the_info, codep + 1);
16381 cmp_type = *codep++ & 0xff;
16382 if (cmp_type < ARRAY_SIZE (xop_cmp_op))
16383 {
16384 char suffix[3];
16385 char *p = mnemonicendp - 2;
16386
16387 /* vpcom* can have both one- and two-lettered suffix. */
16388 if (p[0] == 'm')
16389 {
16390 p++;
16391 suffix[0] = p[0];
16392 suffix[1] = '\0';
16393 }
16394 else
16395 {
16396 suffix[0] = p[0];
16397 suffix[1] = p[1];
16398 suffix[2] = '\0';
16399 }
16400
16401 sprintf (p, "%s%s", xop_cmp_op[cmp_type].name, suffix);
16402 mnemonicendp += xop_cmp_op[cmp_type].len;
16403 }
43234a1e
L
16404 else
16405 {
16406 /* We have a reserved extension byte. Output it directly. */
16407 scratchbuf[0] = '$';
16408 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 16409 oappend_maybe_intel (scratchbuf);
43234a1e
L
16410 scratchbuf[0] = '\0';
16411 }
16412}
16413
ea397f5b
L
16414static const struct op pclmul_op[] =
16415{
16416 { STRING_COMMA_LEN ("lql") },
16417 { STRING_COMMA_LEN ("hql") },
16418 { STRING_COMMA_LEN ("lqh") },
16419 { STRING_COMMA_LEN ("hqh") }
c0f3af97
L
16420};
16421
16422static void
16423PCLMUL_Fixup (int bytemode ATTRIBUTE_UNUSED,
16424 int sizeflag ATTRIBUTE_UNUSED)
16425{
16426 unsigned int pclmul_type;
16427
16428 FETCH_DATA (the_info, codep + 1);
16429 pclmul_type = *codep++ & 0xff;
16430 switch (pclmul_type)
16431 {
16432 case 0x10:
16433 pclmul_type = 2;
16434 break;
16435 case 0x11:
16436 pclmul_type = 3;
16437 break;
16438 default:
16439 break;
7bb15c6f 16440 }
c0f3af97
L
16441 if (pclmul_type < ARRAY_SIZE (pclmul_op))
16442 {
16443 char suffix [4];
ea397f5b 16444 char *p = mnemonicendp - 3;
c0f3af97
L
16445 suffix[0] = p[0];
16446 suffix[1] = p[1];
16447 suffix[2] = p[2];
16448 suffix[3] = '\0';
ea397f5b
L
16449 sprintf (p, "%s%s", pclmul_op[pclmul_type].name, suffix);
16450 mnemonicendp += pclmul_op[pclmul_type].len;
c0f3af97
L
16451 }
16452 else
16453 {
16454 /* We have a reserved extension byte. Output it directly. */
16455 scratchbuf[0] = '$';
16456 print_operand_value (scratchbuf + 1, 1, pclmul_type);
9ce09ba2 16457 oappend_maybe_intel (scratchbuf);
c0f3af97
L
16458 scratchbuf[0] = '\0';
16459 }
16460}
16461
f1f8f695
L
16462static void
16463MOVBE_Fixup (int bytemode, int sizeflag)
16464{
16465 /* Add proper suffix to "movbe". */
ea397f5b 16466 char *p = mnemonicendp;
f1f8f695
L
16467
16468 switch (bytemode)
16469 {
16470 case v_mode:
16471 if (intel_syntax)
ea397f5b 16472 goto skip;
f1f8f695
L
16473
16474 USED_REX (REX_W);
16475 if (sizeflag & SUFFIX_ALWAYS)
16476 {
16477 if (rex & REX_W)
16478 *p++ = 'q';
f1f8f695 16479 else
f16cd0d5
L
16480 {
16481 if (sizeflag & DFLAG)
16482 *p++ = 'l';
16483 else
16484 *p++ = 'w';
16485 used_prefixes |= (prefixes & PREFIX_DATA);
16486 }
f1f8f695 16487 }
f1f8f695
L
16488 break;
16489 default:
16490 oappend (INTERNAL_DISASSEMBLER_ERROR);
16491 break;
16492 }
ea397f5b 16493 mnemonicendp = p;
f1f8f695
L
16494 *p = '\0';
16495
ea397f5b 16496skip:
f1f8f695
L
16497 OP_M (bytemode, sizeflag);
16498}
f88c9eb0
SP
16499
16500static void
16501OP_LWPCB_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16502{
16503 int reg;
16504 const char **names;
16505
16506 /* Skip mod/rm byte. */
16507 MODRM_CHECK;
16508 codep++;
16509
390a6789 16510 if (rex & REX_W)
f88c9eb0 16511 names = names64;
f88c9eb0 16512 else
ce7d077e 16513 names = names32;
f88c9eb0
SP
16514
16515 reg = modrm.rm;
16516 USED_REX (REX_B);
16517 if (rex & REX_B)
16518 reg += 8;
16519
16520 oappend (names[reg]);
16521}
16522
16523static void
16524OP_LWP_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16525{
16526 const char **names;
5f847646 16527 unsigned int reg = vex.register_specifier;
63c6fc6c 16528 vex.register_specifier = 0;
f88c9eb0 16529
390a6789 16530 if (rex & REX_W)
f88c9eb0 16531 names = names64;
f88c9eb0 16532 else
ce7d077e 16533 names = names32;
f88c9eb0 16534
5f847646
JB
16535 if (address_mode != mode_64bit)
16536 reg &= 7;
16537 oappend (names[reg]);
f88c9eb0 16538}
43234a1e
L
16539
16540static void
16541OP_Mask (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16542{
16543 if (!vex.evex
1ba585e8 16544 || (bytemode != mask_mode && bytemode != mask_bd_mode))
43234a1e
L
16545 abort ();
16546
16547 USED_REX (REX_R);
16548 if ((rex & REX_R) != 0 || !vex.r)
16549 {
16550 BadOp ();
16551 return;
16552 }
16553
16554 oappend (names_mask [modrm.reg]);
16555}
16556
16557static void
16558OP_Rounding (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16559{
16560 if (!vex.evex
16561 || (bytemode != evex_rounding_mode
70df6fc9 16562 && bytemode != evex_rounding_64_mode
43234a1e
L
16563 && bytemode != evex_sae_mode))
16564 abort ();
16565 if (modrm.mod == 3 && vex.b)
16566 switch (bytemode)
16567 {
70df6fc9
L
16568 case evex_rounding_64_mode:
16569 if (address_mode != mode_64bit)
16570 {
16571 oappend ("(bad)");
16572 break;
16573 }
16574 /* Fall through. */
43234a1e
L
16575 case evex_rounding_mode:
16576 oappend (names_rounding[vex.ll]);
16577 break;
16578 case evex_sae_mode:
16579 oappend ("{sae}");
16580 break;
16581 default:
16582 break;
16583 }
16584}
This page took 3.801574 seconds and 4 git commands to generate.