x86: Add Intel ENCLV to assembler and disassembler
[deliverable/binutils-gdb.git] / opcodes / i386-dis.c
CommitLineData
252b5132 1/* Print i386 instructions for GDB, the GNU debugger.
219d1afa 2 Copyright (C) 1988-2018 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 }
d20dee9e 262#define Edqa { OP_E, dqa_mode }
09335d05 263#define Eq { OP_E, q_mode }
07f5af7d 264#define indirEv { OP_indirE, indir_v_mode }
ce518a5f
L
265#define indirEp { OP_indirE, f_mode }
266#define stackEv { OP_E, stack_v_mode }
267#define Em { OP_E, m_mode }
268#define Ew { OP_E, w_mode }
269#define M { OP_M, 0 } /* lea, lgdt, etc. */
34b772a6 270#define Ma { OP_M, a_mode }
b844680a 271#define Mb { OP_M, b_mode }
d9a5e5e5 272#define Md { OP_M, d_mode }
f1f8f695 273#define Mo { OP_M, o_mode }
ce518a5f
L
274#define Mp { OP_M, f_mode } /* 32 or 48 bit memory operand for LDS, LES etc */
275#define Mq { OP_M, q_mode }
d276ec69 276#define Mv_bnd { OP_M, v_bndmk_mode }
4ee52178 277#define Mx { OP_M, x_mode }
c0f3af97 278#define Mxmm { OP_M, xmm_mode }
ce518a5f 279#define Gb { OP_G, b_mode }
7e8b059b 280#define Gbnd { OP_G, bnd_mode }
ce518a5f
L
281#define Gv { OP_G, v_mode }
282#define Gd { OP_G, d_mode }
283#define Gdq { OP_G, dq_mode }
284#define Gm { OP_G, m_mode }
c0a30a9f 285#define Gva { OP_G, va_mode }
ce518a5f 286#define Gw { OP_G, w_mode }
6f74c397 287#define Rd { OP_R, d_mode }
43234a1e 288#define Rdq { OP_R, dq_mode }
6f74c397 289#define Rm { OP_R, m_mode }
ce518a5f
L
290#define Ib { OP_I, b_mode }
291#define sIb { OP_sI, b_mode } /* sign extened byte */
e3949f17 292#define sIbT { OP_sI, b_T_mode } /* sign extened byte like 'T' */
ce518a5f 293#define Iv { OP_I, v_mode }
7bb15c6f 294#define sIv { OP_sI, v_mode }
ce518a5f
L
295#define Iq { OP_I, q_mode }
296#define Iv64 { OP_I64, v_mode }
297#define Iw { OP_I, w_mode }
298#define I1 { OP_I, const_1_mode }
299#define Jb { OP_J, b_mode }
300#define Jv { OP_J, v_mode }
301#define Cm { OP_C, m_mode }
302#define Dm { OP_D, m_mode }
303#define Td { OP_T, d_mode }
b844680a 304#define Skip_MODRM { OP_Skip_MODRM, 0 }
ce518a5f
L
305
306#define RMeAX { OP_REG, eAX_reg }
307#define RMeBX { OP_REG, eBX_reg }
308#define RMeCX { OP_REG, eCX_reg }
309#define RMeDX { OP_REG, eDX_reg }
310#define RMeSP { OP_REG, eSP_reg }
311#define RMeBP { OP_REG, eBP_reg }
312#define RMeSI { OP_REG, eSI_reg }
313#define RMeDI { OP_REG, eDI_reg }
314#define RMrAX { OP_REG, rAX_reg }
315#define RMrBX { OP_REG, rBX_reg }
316#define RMrCX { OP_REG, rCX_reg }
317#define RMrDX { OP_REG, rDX_reg }
318#define RMrSP { OP_REG, rSP_reg }
319#define RMrBP { OP_REG, rBP_reg }
320#define RMrSI { OP_REG, rSI_reg }
321#define RMrDI { OP_REG, rDI_reg }
322#define RMAL { OP_REG, al_reg }
ce518a5f
L
323#define RMCL { OP_REG, cl_reg }
324#define RMDL { OP_REG, dl_reg }
325#define RMBL { OP_REG, bl_reg }
326#define RMAH { OP_REG, ah_reg }
327#define RMCH { OP_REG, ch_reg }
328#define RMDH { OP_REG, dh_reg }
329#define RMBH { OP_REG, bh_reg }
330#define RMAX { OP_REG, ax_reg }
331#define RMDX { OP_REG, dx_reg }
332
333#define eAX { OP_IMREG, eAX_reg }
334#define eBX { OP_IMREG, eBX_reg }
335#define eCX { OP_IMREG, eCX_reg }
336#define eDX { OP_IMREG, eDX_reg }
337#define eSP { OP_IMREG, eSP_reg }
338#define eBP { OP_IMREG, eBP_reg }
339#define eSI { OP_IMREG, eSI_reg }
340#define eDI { OP_IMREG, eDI_reg }
341#define AL { OP_IMREG, al_reg }
342#define CL { OP_IMREG, cl_reg }
343#define DL { OP_IMREG, dl_reg }
344#define BL { OP_IMREG, bl_reg }
345#define AH { OP_IMREG, ah_reg }
346#define CH { OP_IMREG, ch_reg }
347#define DH { OP_IMREG, dh_reg }
348#define BH { OP_IMREG, bh_reg }
349#define AX { OP_IMREG, ax_reg }
350#define DX { OP_IMREG, dx_reg }
351#define zAX { OP_IMREG, z_mode_ax_reg }
352#define indirDX { OP_IMREG, indir_dx_reg }
353
354#define Sw { OP_SEG, w_mode }
355#define Sv { OP_SEG, v_mode }
356#define Ap { OP_DIR, 0 }
357#define Ob { OP_OFF64, b_mode }
358#define Ov { OP_OFF64, v_mode }
359#define Xb { OP_DSreg, eSI_reg }
360#define Xv { OP_DSreg, eSI_reg }
361#define Xz { OP_DSreg, eSI_reg }
362#define Yb { OP_ESreg, eDI_reg }
363#define Yv { OP_ESreg, eDI_reg }
364#define DSBX { OP_DSreg, eBX_reg }
365
366#define es { OP_REG, es_reg }
367#define ss { OP_REG, ss_reg }
368#define cs { OP_REG, cs_reg }
369#define ds { OP_REG, ds_reg }
370#define fs { OP_REG, fs_reg }
371#define gs { OP_REG, gs_reg }
372
373#define MX { OP_MMX, 0 }
374#define XM { OP_XMM, 0 }
539f890d 375#define XMScalar { OP_XMM, scalar_mode }
6c30d220 376#define XMGatherQ { OP_XMM, vex_vsib_q_w_dq_mode }
c0f3af97 377#define XMM { OP_XMM, xmm_mode }
43234a1e 378#define XMxmmq { OP_XMM, xmmq_mode }
ce518a5f 379#define EM { OP_EM, v_mode }
b6169b20 380#define EMS { OP_EM, v_swap_mode }
09a2c6cf 381#define EMd { OP_EM, d_mode }
14051056 382#define EMx { OP_EM, x_mode }
53467f57 383#define EXbScalar { OP_EX, b_scalar_mode }
8976381e 384#define EXw { OP_EX, w_mode }
53467f57 385#define EXwScalar { OP_EX, w_scalar_mode }
09a2c6cf 386#define EXd { OP_EX, d_mode }
539f890d 387#define EXdScalar { OP_EX, d_scalar_mode }
fa99fab2 388#define EXdS { OP_EX, d_swap_mode }
43234a1e 389#define EXdScalarS { OP_EX, d_scalar_swap_mode }
09a2c6cf 390#define EXq { OP_EX, q_mode }
539f890d
L
391#define EXqScalar { OP_EX, q_scalar_mode }
392#define EXqScalarS { OP_EX, q_scalar_swap_mode }
b6169b20 393#define EXqS { OP_EX, q_swap_mode }
09a2c6cf 394#define EXx { OP_EX, x_mode }
b6169b20 395#define EXxS { OP_EX, x_swap_mode }
c0f3af97 396#define EXxmm { OP_EX, xmm_mode }
43234a1e 397#define EXymm { OP_EX, ymm_mode }
c0f3af97 398#define EXxmmq { OP_EX, xmmq_mode }
43234a1e 399#define EXEvexHalfBcstXmmq { OP_EX, evex_half_bcst_xmmq_mode }
6c30d220
L
400#define EXxmm_mb { OP_EX, xmm_mb_mode }
401#define EXxmm_mw { OP_EX, xmm_mw_mode }
402#define EXxmm_md { OP_EX, xmm_md_mode }
403#define EXxmm_mq { OP_EX, xmm_mq_mode }
43234a1e 404#define EXxmm_mdq { OP_EX, xmm_mdq_mode }
6c30d220
L
405#define EXxmmdw { OP_EX, xmmdw_mode }
406#define EXxmmqd { OP_EX, xmmqd_mode }
c0f3af97 407#define EXymmq { OP_EX, ymmq_mode }
0bfee649 408#define EXVexWdq { OP_EX, vex_w_dq_mode }
1c480963 409#define EXVexWdqScalar { OP_EX, vex_scalar_w_dq_mode }
43234a1e
L
410#define EXEvexXGscat { OP_EX, evex_x_gscat_mode }
411#define EXEvexXNoBcst { OP_EX, evex_x_nobcst_mode }
ce518a5f
L
412#define MS { OP_MS, v_mode }
413#define XS { OP_XS, v_mode }
09335d05 414#define EMCq { OP_EMC, q_mode }
ce518a5f 415#define MXC { OP_MXC, 0 }
ce518a5f 416#define OPSUF { OP_3DNowSuffix, 0 }
ad19981d 417#define CMP { CMP_Fixup, 0 }
42903f7f 418#define XMM0 { XMM_Fixup, 0 }
eacc9c89 419#define FXSAVE { FXSAVE_Fixup, 0 }
5dd85c99
SP
420#define Vex_2src_1 { OP_Vex_2src_1, 0 }
421#define Vex_2src_2 { OP_Vex_2src_2, 0 }
252b5132 422
c0f3af97 423#define Vex { OP_VEX, vex_mode }
539f890d 424#define VexScalar { OP_VEX, vex_scalar_mode }
6c30d220 425#define VexGatherQ { OP_VEX, vex_vsib_q_w_dq_mode }
c0f3af97
L
426#define Vex128 { OP_VEX, vex128_mode }
427#define Vex256 { OP_VEX, vex256_mode }
cb21baef 428#define VexGdq { OP_VEX, dq_mode }
c0f3af97 429#define EXdVex { OP_EX_Vex, d_mode }
fa99fab2 430#define EXdVexS { OP_EX_Vex, d_swap_mode }
539f890d 431#define EXdVexScalarS { OP_EX_Vex, d_scalar_swap_mode }
c0f3af97 432#define EXqVex { OP_EX_Vex, q_mode }
fa99fab2 433#define EXqVexS { OP_EX_Vex, q_swap_mode }
539f890d 434#define EXqVexScalarS { OP_EX_Vex, q_scalar_swap_mode }
922d8de8
DR
435#define EXVexW { OP_EX_VexW, x_mode }
436#define EXdVexW { OP_EX_VexW, d_mode }
437#define EXqVexW { OP_EX_VexW, q_mode }
a683cc34 438#define EXVexImmW { OP_EX_VexImmW, x_mode }
c0f3af97 439#define XMVex { OP_XMM_Vex, 0 }
539f890d 440#define XMVexScalar { OP_XMM_Vex, scalar_mode }
922d8de8 441#define XMVexW { OP_XMM_VexW, 0 }
c0f3af97
L
442#define XMVexI4 { OP_REG_VexI4, x_mode }
443#define PCLMUL { PCLMUL_Fixup, 0 }
c0f3af97 444#define VCMP { VCMP_Fixup, 0 }
43234a1e 445#define VPCMP { VPCMP_Fixup, 0 }
be92cb14 446#define VPCOM { VPCOM_Fixup, 0 }
43234a1e
L
447
448#define EXxEVexR { OP_Rounding, evex_rounding_mode }
70df6fc9 449#define EXxEVexR64 { OP_Rounding, evex_rounding_64_mode }
43234a1e
L
450#define EXxEVexS { OP_Rounding, evex_sae_mode }
451
452#define XMask { OP_Mask, mask_mode }
453#define MaskG { OP_G, mask_mode }
454#define MaskE { OP_E, mask_mode }
1ba585e8 455#define MaskBDE { OP_E, mask_bd_mode }
43234a1e
L
456#define MaskR { OP_R, mask_mode }
457#define MaskVex { OP_VEX, mask_mode }
c0f3af97 458
6c30d220 459#define MVexVSIBDWpX { OP_M, vex_vsib_d_w_dq_mode }
5fc35d96 460#define MVexVSIBDQWpX { OP_M, vex_vsib_d_w_d_mode }
6c30d220 461#define MVexVSIBQWpX { OP_M, vex_vsib_q_w_dq_mode }
5fc35d96 462#define MVexVSIBQDWpX { OP_M, vex_vsib_q_w_d_mode }
6c30d220 463
35c52694 464/* Used handle "rep" prefix for string instructions. */
ce518a5f
L
465#define Xbr { REP_Fixup, eSI_reg }
466#define Xvr { REP_Fixup, eSI_reg }
467#define Ybr { REP_Fixup, eDI_reg }
468#define Yvr { REP_Fixup, eDI_reg }
469#define Yzr { REP_Fixup, eDI_reg }
470#define indirDXr { REP_Fixup, indir_dx_reg }
471#define ALr { REP_Fixup, al_reg }
472#define eAXr { REP_Fixup, eAX_reg }
473
42164a71
L
474/* Used handle HLE prefix for lockable instructions. */
475#define Ebh1 { HLE_Fixup1, b_mode }
476#define Evh1 { HLE_Fixup1, v_mode }
477#define Ebh2 { HLE_Fixup2, b_mode }
478#define Evh2 { HLE_Fixup2, v_mode }
479#define Ebh3 { HLE_Fixup3, b_mode }
480#define Evh3 { HLE_Fixup3, v_mode }
481
7e8b059b 482#define BND { BND_Fixup, 0 }
04ef582a 483#define NOTRACK { NOTRACK_Fixup, 0 }
7e8b059b 484
ce518a5f
L
485#define cond_jump_flag { NULL, cond_jump_mode }
486#define loop_jcxz_flag { NULL, loop_jcxz_mode }
3ffd33cf 487
252b5132 488/* bits in sizeflag */
252b5132 489#define SUFFIX_ALWAYS 4
252b5132
RH
490#define AFLAG 2
491#define DFLAG 1
492
51e7da1b
L
493enum
494{
495 /* byte operand */
496 b_mode = 1,
497 /* byte operand with operand swapped */
3873ba12 498 b_swap_mode,
e3949f17
L
499 /* byte operand, sign extend like 'T' suffix */
500 b_T_mode,
51e7da1b 501 /* operand size depends on prefixes */
3873ba12 502 v_mode,
51e7da1b 503 /* operand size depends on prefixes with operand swapped */
3873ba12 504 v_swap_mode,
de89d0a3
IT
505 /* operand size depends on address prefix */
506 va_mode,
51e7da1b 507 /* word operand */
3873ba12 508 w_mode,
51e7da1b 509 /* double word operand */
3873ba12 510 d_mode,
51e7da1b 511 /* double word operand with operand swapped */
3873ba12 512 d_swap_mode,
51e7da1b 513 /* quad word operand */
3873ba12 514 q_mode,
51e7da1b 515 /* quad word operand with operand swapped */
3873ba12 516 q_swap_mode,
51e7da1b 517 /* ten-byte operand */
3873ba12 518 t_mode,
43234a1e
L
519 /* 16-byte XMM, 32-byte YMM or 64-byte ZMM operand. In EVEX with
520 broadcast enabled. */
3873ba12 521 x_mode,
43234a1e
L
522 /* Similar to x_mode, but with different EVEX mem shifts. */
523 evex_x_gscat_mode,
524 /* Similar to x_mode, but with disabled broadcast. */
525 evex_x_nobcst_mode,
526 /* Similar to x_mode, but with operands swapped and disabled broadcast
527 in EVEX. */
3873ba12 528 x_swap_mode,
51e7da1b 529 /* 16-byte XMM operand */
3873ba12 530 xmm_mode,
43234a1e
L
531 /* XMM, XMM or YMM register operand, or quad word, xmmword or ymmword
532 memory operand (depending on vector length). Broadcast isn't
533 allowed. */
3873ba12 534 xmmq_mode,
43234a1e
L
535 /* Same as xmmq_mode, but broadcast is allowed. */
536 evex_half_bcst_xmmq_mode,
6c30d220
L
537 /* XMM register or byte memory operand */
538 xmm_mb_mode,
539 /* XMM register or word memory operand */
540 xmm_mw_mode,
541 /* XMM register or double word memory operand */
542 xmm_md_mode,
543 /* XMM register or quad word memory operand */
544 xmm_mq_mode,
43234a1e
L
545 /* XMM register or double/quad word memory operand, depending on
546 VEX.W. */
547 xmm_mdq_mode,
548 /* 16-byte XMM, word, double word or quad word operand. */
6c30d220 549 xmmdw_mode,
43234a1e 550 /* 16-byte XMM, double word, quad word operand or xmm word operand. */
6c30d220 551 xmmqd_mode,
43234a1e
L
552 /* 32-byte YMM operand */
553 ymm_mode,
554 /* quad word, ymmword or zmmword memory operand. */
3873ba12 555 ymmq_mode,
6c30d220
L
556 /* 32-byte YMM or 16-byte word operand */
557 ymmxmm_mode,
51e7da1b 558 /* d_mode in 32bit, q_mode in 64bit mode. */
3873ba12 559 m_mode,
51e7da1b 560 /* pair of v_mode operands */
3873ba12
L
561 a_mode,
562 cond_jump_mode,
563 loop_jcxz_mode,
7e8b059b 564 v_bnd_mode,
d276ec69
JB
565 /* like v_bnd_mode in 32bit, no RIP-rel in 64bit mode. */
566 v_bndmk_mode,
51e7da1b 567 /* operand size depends on REX prefixes. */
3873ba12 568 dq_mode,
51e7da1b 569 /* registers like dq_mode, memory like w_mode. */
3873ba12 570 dqw_mode,
9f79e886 571 /* bounds operand */
7e8b059b 572 bnd_mode,
9f79e886
JB
573 /* bounds operand with operand swapped */
574 bnd_swap_mode,
51e7da1b 575 /* 4- or 6-byte pointer operand */
3873ba12
L
576 f_mode,
577 const_1_mode,
07f5af7d
L
578 /* v_mode for indirect branch opcodes. */
579 indir_v_mode,
51e7da1b 580 /* v_mode for stack-related opcodes. */
3873ba12 581 stack_v_mode,
51e7da1b 582 /* non-quad operand size depends on prefixes */
3873ba12 583 z_mode,
51e7da1b 584 /* 16-byte operand */
3873ba12 585 o_mode,
51e7da1b 586 /* registers like dq_mode, memory like b_mode. */
3873ba12 587 dqb_mode,
1ba585e8
IT
588 /* registers like d_mode, memory like b_mode. */
589 db_mode,
590 /* registers like d_mode, memory like w_mode. */
591 dw_mode,
51e7da1b 592 /* registers like dq_mode, memory like d_mode. */
3873ba12 593 dqd_mode,
d20dee9e
L
594 /* operand size depends on the W bit as well as address mode. */
595 dqa_mode,
51e7da1b 596 /* normal vex mode */
3873ba12 597 vex_mode,
51e7da1b 598 /* 128bit vex mode */
3873ba12 599 vex128_mode,
51e7da1b 600 /* 256bit vex mode */
3873ba12 601 vex256_mode,
51e7da1b 602 /* operand size depends on the VEX.W bit. */
3873ba12 603 vex_w_dq_mode,
d55ee72f 604
6c30d220
L
605 /* Similar to vex_w_dq_mode, with VSIB dword indices. */
606 vex_vsib_d_w_dq_mode,
5fc35d96
IT
607 /* Similar to vex_vsib_d_w_dq_mode, with smaller memory. */
608 vex_vsib_d_w_d_mode,
6c30d220
L
609 /* Similar to vex_w_dq_mode, with VSIB qword indices. */
610 vex_vsib_q_w_dq_mode,
5fc35d96
IT
611 /* Similar to vex_vsib_q_w_dq_mode, with smaller memory. */
612 vex_vsib_q_w_d_mode,
6c30d220 613
539f890d
L
614 /* scalar, ignore vector length. */
615 scalar_mode,
53467f57
IT
616 /* like b_mode, ignore vector length. */
617 b_scalar_mode,
618 /* like w_mode, ignore vector length. */
619 w_scalar_mode,
539f890d
L
620 /* like d_mode, ignore vector length. */
621 d_scalar_mode,
622 /* like d_swap_mode, ignore vector length. */
623 d_scalar_swap_mode,
624 /* like q_mode, ignore vector length. */
625 q_scalar_mode,
626 /* like q_swap_mode, ignore vector length. */
627 q_scalar_swap_mode,
628 /* like vex_mode, ignore vector length. */
629 vex_scalar_mode,
1c480963
L
630 /* like vex_w_dq_mode, ignore vector length. */
631 vex_scalar_w_dq_mode,
539f890d 632
43234a1e
L
633 /* Static rounding. */
634 evex_rounding_mode,
70df6fc9
L
635 /* Static rounding, 64-bit mode only. */
636 evex_rounding_64_mode,
43234a1e
L
637 /* Supress all exceptions. */
638 evex_sae_mode,
639
640 /* Mask register operand. */
641 mask_mode,
1ba585e8
IT
642 /* Mask register operand. */
643 mask_bd_mode,
43234a1e 644
3873ba12
L
645 es_reg,
646 cs_reg,
647 ss_reg,
648 ds_reg,
649 fs_reg,
650 gs_reg,
d55ee72f 651
3873ba12
L
652 eAX_reg,
653 eCX_reg,
654 eDX_reg,
655 eBX_reg,
656 eSP_reg,
657 eBP_reg,
658 eSI_reg,
659 eDI_reg,
d55ee72f 660
3873ba12
L
661 al_reg,
662 cl_reg,
663 dl_reg,
664 bl_reg,
665 ah_reg,
666 ch_reg,
667 dh_reg,
668 bh_reg,
d55ee72f 669
3873ba12
L
670 ax_reg,
671 cx_reg,
672 dx_reg,
673 bx_reg,
674 sp_reg,
675 bp_reg,
676 si_reg,
677 di_reg,
d55ee72f 678
3873ba12
L
679 rAX_reg,
680 rCX_reg,
681 rDX_reg,
682 rBX_reg,
683 rSP_reg,
684 rBP_reg,
685 rSI_reg,
686 rDI_reg,
d55ee72f 687
3873ba12
L
688 z_mode_ax_reg,
689 indir_dx_reg
51e7da1b 690};
252b5132 691
51e7da1b
L
692enum
693{
694 FLOATCODE = 1,
3873ba12
L
695 USE_REG_TABLE,
696 USE_MOD_TABLE,
697 USE_RM_TABLE,
698 USE_PREFIX_TABLE,
699 USE_X86_64_TABLE,
700 USE_3BYTE_TABLE,
f88c9eb0 701 USE_XOP_8F_TABLE,
3873ba12
L
702 USE_VEX_C4_TABLE,
703 USE_VEX_C5_TABLE,
9e30b8e0 704 USE_VEX_LEN_TABLE,
43234a1e 705 USE_VEX_W_TABLE,
04e2a182
L
706 USE_EVEX_TABLE,
707 USE_EVEX_LEN_TABLE
51e7da1b 708};
6439fc28 709
bf890a93 710#define FLOAT NULL, { { NULL, FLOATCODE } }, 0
4efba78c 711
bf890a93
IT
712#define DIS386(T, I) NULL, { { NULL, (T)}, { NULL, (I) } }, 0
713#define DIS386_PREFIX(T, I, P) NULL, { { NULL, (T)}, { NULL, (I) } }, P
1ceb70f8
L
714#define REG_TABLE(I) DIS386 (USE_REG_TABLE, (I))
715#define MOD_TABLE(I) DIS386 (USE_MOD_TABLE, (I))
716#define RM_TABLE(I) DIS386 (USE_RM_TABLE, (I))
717#define PREFIX_TABLE(I) DIS386 (USE_PREFIX_TABLE, (I))
4e7d34a6
L
718#define X86_64_TABLE(I) DIS386 (USE_X86_64_TABLE, (I))
719#define THREE_BYTE_TABLE(I) DIS386 (USE_3BYTE_TABLE, (I))
bf890a93 720#define THREE_BYTE_TABLE_PREFIX(I, P) DIS386_PREFIX (USE_3BYTE_TABLE, (I), P)
f88c9eb0 721#define XOP_8F_TABLE(I) DIS386 (USE_XOP_8F_TABLE, (I))
c0f3af97
L
722#define VEX_C4_TABLE(I) DIS386 (USE_VEX_C4_TABLE, (I))
723#define VEX_C5_TABLE(I) DIS386 (USE_VEX_C5_TABLE, (I))
724#define VEX_LEN_TABLE(I) DIS386 (USE_VEX_LEN_TABLE, (I))
9e30b8e0 725#define VEX_W_TABLE(I) DIS386 (USE_VEX_W_TABLE, (I))
43234a1e 726#define EVEX_TABLE(I) DIS386 (USE_EVEX_TABLE, (I))
04e2a182 727#define EVEX_LEN_TABLE(I) DIS386 (USE_EVEX_LEN_TABLE, (I))
1ceb70f8 728
51e7da1b
L
729enum
730{
731 REG_80 = 0,
3873ba12 732 REG_81,
7148c369 733 REG_83,
3873ba12
L
734 REG_8F,
735 REG_C0,
736 REG_C1,
737 REG_C6,
738 REG_C7,
739 REG_D0,
740 REG_D1,
741 REG_D2,
742 REG_D3,
743 REG_F6,
744 REG_F7,
745 REG_FE,
746 REG_FF,
747 REG_0F00,
748 REG_0F01,
749 REG_0F0D,
750 REG_0F18,
c48935d7 751 REG_0F1C_MOD_0,
603555e5 752 REG_0F1E_MOD_3,
3873ba12
L
753 REG_0F71,
754 REG_0F72,
755 REG_0F73,
756 REG_0FA6,
757 REG_0FA7,
758 REG_0FAE,
759 REG_0FBA,
760 REG_0FC7,
592a252b
L
761 REG_VEX_0F71,
762 REG_VEX_0F72,
763 REG_VEX_0F73,
764 REG_VEX_0FAE,
f12dc422 765 REG_VEX_0F38F3,
f88c9eb0 766 REG_XOP_LWPCB,
2a2a0f38
QN
767 REG_XOP_LWP,
768 REG_XOP_TBM_01,
43234a1e
L
769 REG_XOP_TBM_02,
770
1ba585e8 771 REG_EVEX_0F71,
43234a1e
L
772 REG_EVEX_0F72,
773 REG_EVEX_0F73,
774 REG_EVEX_0F38C6,
775 REG_EVEX_0F38C7
51e7da1b 776};
1ceb70f8 777
51e7da1b
L
778enum
779{
780 MOD_8D = 0,
42164a71
L
781 MOD_C6_REG_7,
782 MOD_C7_REG_7,
4a357820
MZ
783 MOD_FF_REG_3,
784 MOD_FF_REG_5,
3873ba12
L
785 MOD_0F01_REG_0,
786 MOD_0F01_REG_1,
787 MOD_0F01_REG_2,
788 MOD_0F01_REG_3,
8eab4136 789 MOD_0F01_REG_5,
3873ba12
L
790 MOD_0F01_REG_7,
791 MOD_0F12_PREFIX_0,
792 MOD_0F13,
793 MOD_0F16_PREFIX_0,
794 MOD_0F17,
795 MOD_0F18_REG_0,
796 MOD_0F18_REG_1,
797 MOD_0F18_REG_2,
798 MOD_0F18_REG_3,
d7189fa5
RM
799 MOD_0F18_REG_4,
800 MOD_0F18_REG_5,
801 MOD_0F18_REG_6,
802 MOD_0F18_REG_7,
7e8b059b
L
803 MOD_0F1A_PREFIX_0,
804 MOD_0F1B_PREFIX_0,
805 MOD_0F1B_PREFIX_1,
c48935d7 806 MOD_0F1C_PREFIX_0,
603555e5 807 MOD_0F1E_PREFIX_1,
3873ba12
L
808 MOD_0F24,
809 MOD_0F26,
810 MOD_0F2B_PREFIX_0,
811 MOD_0F2B_PREFIX_1,
812 MOD_0F2B_PREFIX_2,
813 MOD_0F2B_PREFIX_3,
814 MOD_0F51,
815 MOD_0F71_REG_2,
816 MOD_0F71_REG_4,
817 MOD_0F71_REG_6,
818 MOD_0F72_REG_2,
819 MOD_0F72_REG_4,
820 MOD_0F72_REG_6,
821 MOD_0F73_REG_2,
822 MOD_0F73_REG_3,
823 MOD_0F73_REG_6,
824 MOD_0F73_REG_7,
825 MOD_0FAE_REG_0,
826 MOD_0FAE_REG_1,
827 MOD_0FAE_REG_2,
828 MOD_0FAE_REG_3,
829 MOD_0FAE_REG_4,
830 MOD_0FAE_REG_5,
831 MOD_0FAE_REG_6,
832 MOD_0FAE_REG_7,
833 MOD_0FB2,
834 MOD_0FB4,
835 MOD_0FB5,
a8484f96 836 MOD_0FC3,
963f3586
IT
837 MOD_0FC7_REG_3,
838 MOD_0FC7_REG_4,
839 MOD_0FC7_REG_5,
3873ba12
L
840 MOD_0FC7_REG_6,
841 MOD_0FC7_REG_7,
842 MOD_0FD7,
843 MOD_0FE7_PREFIX_2,
844 MOD_0FF0_PREFIX_3,
845 MOD_0F382A_PREFIX_2,
603555e5
L
846 MOD_0F38F5_PREFIX_2,
847 MOD_0F38F6_PREFIX_0,
c0a30a9f
L
848 MOD_0F38F8_PREFIX_2,
849 MOD_0F38F9_PREFIX_0,
3873ba12
L
850 MOD_62_32BIT,
851 MOD_C4_32BIT,
852 MOD_C5_32BIT,
592a252b
L
853 MOD_VEX_0F12_PREFIX_0,
854 MOD_VEX_0F13,
855 MOD_VEX_0F16_PREFIX_0,
856 MOD_VEX_0F17,
857 MOD_VEX_0F2B,
ab4e4ed5
AF
858 MOD_VEX_W_0_0F41_P_0_LEN_1,
859 MOD_VEX_W_1_0F41_P_0_LEN_1,
860 MOD_VEX_W_0_0F41_P_2_LEN_1,
861 MOD_VEX_W_1_0F41_P_2_LEN_1,
862 MOD_VEX_W_0_0F42_P_0_LEN_1,
863 MOD_VEX_W_1_0F42_P_0_LEN_1,
864 MOD_VEX_W_0_0F42_P_2_LEN_1,
865 MOD_VEX_W_1_0F42_P_2_LEN_1,
866 MOD_VEX_W_0_0F44_P_0_LEN_1,
867 MOD_VEX_W_1_0F44_P_0_LEN_1,
868 MOD_VEX_W_0_0F44_P_2_LEN_1,
869 MOD_VEX_W_1_0F44_P_2_LEN_1,
870 MOD_VEX_W_0_0F45_P_0_LEN_1,
871 MOD_VEX_W_1_0F45_P_0_LEN_1,
872 MOD_VEX_W_0_0F45_P_2_LEN_1,
873 MOD_VEX_W_1_0F45_P_2_LEN_1,
874 MOD_VEX_W_0_0F46_P_0_LEN_1,
875 MOD_VEX_W_1_0F46_P_0_LEN_1,
876 MOD_VEX_W_0_0F46_P_2_LEN_1,
877 MOD_VEX_W_1_0F46_P_2_LEN_1,
878 MOD_VEX_W_0_0F47_P_0_LEN_1,
879 MOD_VEX_W_1_0F47_P_0_LEN_1,
880 MOD_VEX_W_0_0F47_P_2_LEN_1,
881 MOD_VEX_W_1_0F47_P_2_LEN_1,
882 MOD_VEX_W_0_0F4A_P_0_LEN_1,
883 MOD_VEX_W_1_0F4A_P_0_LEN_1,
884 MOD_VEX_W_0_0F4A_P_2_LEN_1,
885 MOD_VEX_W_1_0F4A_P_2_LEN_1,
886 MOD_VEX_W_0_0F4B_P_0_LEN_1,
887 MOD_VEX_W_1_0F4B_P_0_LEN_1,
888 MOD_VEX_W_0_0F4B_P_2_LEN_1,
592a252b
L
889 MOD_VEX_0F50,
890 MOD_VEX_0F71_REG_2,
891 MOD_VEX_0F71_REG_4,
892 MOD_VEX_0F71_REG_6,
893 MOD_VEX_0F72_REG_2,
894 MOD_VEX_0F72_REG_4,
895 MOD_VEX_0F72_REG_6,
896 MOD_VEX_0F73_REG_2,
897 MOD_VEX_0F73_REG_3,
898 MOD_VEX_0F73_REG_6,
899 MOD_VEX_0F73_REG_7,
ab4e4ed5
AF
900 MOD_VEX_W_0_0F91_P_0_LEN_0,
901 MOD_VEX_W_1_0F91_P_0_LEN_0,
902 MOD_VEX_W_0_0F91_P_2_LEN_0,
903 MOD_VEX_W_1_0F91_P_2_LEN_0,
904 MOD_VEX_W_0_0F92_P_0_LEN_0,
905 MOD_VEX_W_0_0F92_P_2_LEN_0,
906 MOD_VEX_W_0_0F92_P_3_LEN_0,
907 MOD_VEX_W_1_0F92_P_3_LEN_0,
908 MOD_VEX_W_0_0F93_P_0_LEN_0,
909 MOD_VEX_W_0_0F93_P_2_LEN_0,
910 MOD_VEX_W_0_0F93_P_3_LEN_0,
911 MOD_VEX_W_1_0F93_P_3_LEN_0,
912 MOD_VEX_W_0_0F98_P_0_LEN_0,
913 MOD_VEX_W_1_0F98_P_0_LEN_0,
914 MOD_VEX_W_0_0F98_P_2_LEN_0,
915 MOD_VEX_W_1_0F98_P_2_LEN_0,
916 MOD_VEX_W_0_0F99_P_0_LEN_0,
917 MOD_VEX_W_1_0F99_P_0_LEN_0,
918 MOD_VEX_W_0_0F99_P_2_LEN_0,
919 MOD_VEX_W_1_0F99_P_2_LEN_0,
592a252b
L
920 MOD_VEX_0FAE_REG_2,
921 MOD_VEX_0FAE_REG_3,
922 MOD_VEX_0FD7_PREFIX_2,
923 MOD_VEX_0FE7_PREFIX_2,
924 MOD_VEX_0FF0_PREFIX_3,
592a252b
L
925 MOD_VEX_0F381A_PREFIX_2,
926 MOD_VEX_0F382A_PREFIX_2,
927 MOD_VEX_0F382C_PREFIX_2,
928 MOD_VEX_0F382D_PREFIX_2,
929 MOD_VEX_0F382E_PREFIX_2,
6c30d220
L
930 MOD_VEX_0F382F_PREFIX_2,
931 MOD_VEX_0F385A_PREFIX_2,
932 MOD_VEX_0F388C_PREFIX_2,
933 MOD_VEX_0F388E_PREFIX_2,
ab4e4ed5
AF
934 MOD_VEX_W_0_0F3A30_P_2_LEN_0,
935 MOD_VEX_W_1_0F3A30_P_2_LEN_0,
936 MOD_VEX_W_0_0F3A31_P_2_LEN_0,
937 MOD_VEX_W_1_0F3A31_P_2_LEN_0,
938 MOD_VEX_W_0_0F3A32_P_2_LEN_0,
939 MOD_VEX_W_1_0F3A32_P_2_LEN_0,
940 MOD_VEX_W_0_0F3A33_P_2_LEN_0,
941 MOD_VEX_W_1_0F3A33_P_2_LEN_0,
43234a1e
L
942
943 MOD_EVEX_0F10_PREFIX_1,
944 MOD_EVEX_0F10_PREFIX_3,
945 MOD_EVEX_0F11_PREFIX_1,
946 MOD_EVEX_0F11_PREFIX_3,
947 MOD_EVEX_0F12_PREFIX_0,
948 MOD_EVEX_0F16_PREFIX_0,
949 MOD_EVEX_0F38C6_REG_1,
950 MOD_EVEX_0F38C6_REG_2,
951 MOD_EVEX_0F38C6_REG_5,
952 MOD_EVEX_0F38C6_REG_6,
953 MOD_EVEX_0F38C7_REG_1,
954 MOD_EVEX_0F38C7_REG_2,
955 MOD_EVEX_0F38C7_REG_5,
956 MOD_EVEX_0F38C7_REG_6
51e7da1b 957};
1ceb70f8 958
51e7da1b
L
959enum
960{
42164a71
L
961 RM_C6_REG_7 = 0,
962 RM_C7_REG_7,
963 RM_0F01_REG_0,
3873ba12
L
964 RM_0F01_REG_1,
965 RM_0F01_REG_2,
966 RM_0F01_REG_3,
8eab4136 967 RM_0F01_REG_5,
3873ba12 968 RM_0F01_REG_7,
603555e5 969 RM_0F1E_MOD_3_REG_7,
3873ba12
L
970 RM_0FAE_REG_6,
971 RM_0FAE_REG_7
51e7da1b 972};
1ceb70f8 973
51e7da1b
L
974enum
975{
976 PREFIX_90 = 0,
603555e5 977 PREFIX_MOD_0_0F01_REG_5,
2234eee6 978 PREFIX_MOD_3_0F01_REG_5_RM_0,
603555e5 979 PREFIX_MOD_3_0F01_REG_5_RM_2,
3233d7d0 980 PREFIX_0F09,
3873ba12
L
981 PREFIX_0F10,
982 PREFIX_0F11,
983 PREFIX_0F12,
984 PREFIX_0F16,
7e8b059b
L
985 PREFIX_0F1A,
986 PREFIX_0F1B,
c48935d7 987 PREFIX_0F1C,
603555e5 988 PREFIX_0F1E,
3873ba12
L
989 PREFIX_0F2A,
990 PREFIX_0F2B,
991 PREFIX_0F2C,
992 PREFIX_0F2D,
993 PREFIX_0F2E,
994 PREFIX_0F2F,
995 PREFIX_0F51,
996 PREFIX_0F52,
997 PREFIX_0F53,
998 PREFIX_0F58,
999 PREFIX_0F59,
1000 PREFIX_0F5A,
1001 PREFIX_0F5B,
1002 PREFIX_0F5C,
1003 PREFIX_0F5D,
1004 PREFIX_0F5E,
1005 PREFIX_0F5F,
1006 PREFIX_0F60,
1007 PREFIX_0F61,
1008 PREFIX_0F62,
1009 PREFIX_0F6C,
1010 PREFIX_0F6D,
1011 PREFIX_0F6F,
1012 PREFIX_0F70,
1013 PREFIX_0F73_REG_3,
1014 PREFIX_0F73_REG_7,
1015 PREFIX_0F78,
1016 PREFIX_0F79,
1017 PREFIX_0F7C,
1018 PREFIX_0F7D,
1019 PREFIX_0F7E,
1020 PREFIX_0F7F,
c7b8aa3a
L
1021 PREFIX_0FAE_REG_0,
1022 PREFIX_0FAE_REG_1,
1023 PREFIX_0FAE_REG_2,
1024 PREFIX_0FAE_REG_3,
6b40c462
L
1025 PREFIX_MOD_0_0FAE_REG_4,
1026 PREFIX_MOD_3_0FAE_REG_4,
603555e5 1027 PREFIX_MOD_0_0FAE_REG_5,
2234eee6 1028 PREFIX_MOD_3_0FAE_REG_5,
de89d0a3
IT
1029 PREFIX_MOD_0_0FAE_REG_6,
1030 PREFIX_MOD_1_0FAE_REG_6,
963f3586 1031 PREFIX_0FAE_REG_7,
3873ba12 1032 PREFIX_0FB8,
f12dc422 1033 PREFIX_0FBC,
3873ba12
L
1034 PREFIX_0FBD,
1035 PREFIX_0FC2,
a8484f96 1036 PREFIX_MOD_0_0FC3,
f24bcbaa
L
1037 PREFIX_MOD_0_0FC7_REG_6,
1038 PREFIX_MOD_3_0FC7_REG_6,
1039 PREFIX_MOD_3_0FC7_REG_7,
3873ba12
L
1040 PREFIX_0FD0,
1041 PREFIX_0FD6,
1042 PREFIX_0FE6,
1043 PREFIX_0FE7,
1044 PREFIX_0FF0,
1045 PREFIX_0FF7,
1046 PREFIX_0F3810,
1047 PREFIX_0F3814,
1048 PREFIX_0F3815,
1049 PREFIX_0F3817,
1050 PREFIX_0F3820,
1051 PREFIX_0F3821,
1052 PREFIX_0F3822,
1053 PREFIX_0F3823,
1054 PREFIX_0F3824,
1055 PREFIX_0F3825,
1056 PREFIX_0F3828,
1057 PREFIX_0F3829,
1058 PREFIX_0F382A,
1059 PREFIX_0F382B,
1060 PREFIX_0F3830,
1061 PREFIX_0F3831,
1062 PREFIX_0F3832,
1063 PREFIX_0F3833,
1064 PREFIX_0F3834,
1065 PREFIX_0F3835,
1066 PREFIX_0F3837,
1067 PREFIX_0F3838,
1068 PREFIX_0F3839,
1069 PREFIX_0F383A,
1070 PREFIX_0F383B,
1071 PREFIX_0F383C,
1072 PREFIX_0F383D,
1073 PREFIX_0F383E,
1074 PREFIX_0F383F,
1075 PREFIX_0F3840,
1076 PREFIX_0F3841,
1077 PREFIX_0F3880,
1078 PREFIX_0F3881,
6c30d220 1079 PREFIX_0F3882,
a0046408
L
1080 PREFIX_0F38C8,
1081 PREFIX_0F38C9,
1082 PREFIX_0F38CA,
1083 PREFIX_0F38CB,
1084 PREFIX_0F38CC,
1085 PREFIX_0F38CD,
48521003 1086 PREFIX_0F38CF,
3873ba12
L
1087 PREFIX_0F38DB,
1088 PREFIX_0F38DC,
1089 PREFIX_0F38DD,
1090 PREFIX_0F38DE,
1091 PREFIX_0F38DF,
1092 PREFIX_0F38F0,
1093 PREFIX_0F38F1,
603555e5 1094 PREFIX_0F38F5,
e2e1fcde 1095 PREFIX_0F38F6,
c0a30a9f
L
1096 PREFIX_0F38F8,
1097 PREFIX_0F38F9,
3873ba12
L
1098 PREFIX_0F3A08,
1099 PREFIX_0F3A09,
1100 PREFIX_0F3A0A,
1101 PREFIX_0F3A0B,
1102 PREFIX_0F3A0C,
1103 PREFIX_0F3A0D,
1104 PREFIX_0F3A0E,
1105 PREFIX_0F3A14,
1106 PREFIX_0F3A15,
1107 PREFIX_0F3A16,
1108 PREFIX_0F3A17,
1109 PREFIX_0F3A20,
1110 PREFIX_0F3A21,
1111 PREFIX_0F3A22,
1112 PREFIX_0F3A40,
1113 PREFIX_0F3A41,
1114 PREFIX_0F3A42,
1115 PREFIX_0F3A44,
1116 PREFIX_0F3A60,
1117 PREFIX_0F3A61,
1118 PREFIX_0F3A62,
1119 PREFIX_0F3A63,
a0046408 1120 PREFIX_0F3ACC,
48521003
IT
1121 PREFIX_0F3ACE,
1122 PREFIX_0F3ACF,
3873ba12 1123 PREFIX_0F3ADF,
592a252b
L
1124 PREFIX_VEX_0F10,
1125 PREFIX_VEX_0F11,
1126 PREFIX_VEX_0F12,
1127 PREFIX_VEX_0F16,
1128 PREFIX_VEX_0F2A,
1129 PREFIX_VEX_0F2C,
1130 PREFIX_VEX_0F2D,
1131 PREFIX_VEX_0F2E,
1132 PREFIX_VEX_0F2F,
43234a1e
L
1133 PREFIX_VEX_0F41,
1134 PREFIX_VEX_0F42,
1135 PREFIX_VEX_0F44,
1136 PREFIX_VEX_0F45,
1137 PREFIX_VEX_0F46,
1138 PREFIX_VEX_0F47,
1ba585e8 1139 PREFIX_VEX_0F4A,
43234a1e 1140 PREFIX_VEX_0F4B,
592a252b
L
1141 PREFIX_VEX_0F51,
1142 PREFIX_VEX_0F52,
1143 PREFIX_VEX_0F53,
1144 PREFIX_VEX_0F58,
1145 PREFIX_VEX_0F59,
1146 PREFIX_VEX_0F5A,
1147 PREFIX_VEX_0F5B,
1148 PREFIX_VEX_0F5C,
1149 PREFIX_VEX_0F5D,
1150 PREFIX_VEX_0F5E,
1151 PREFIX_VEX_0F5F,
1152 PREFIX_VEX_0F60,
1153 PREFIX_VEX_0F61,
1154 PREFIX_VEX_0F62,
1155 PREFIX_VEX_0F63,
1156 PREFIX_VEX_0F64,
1157 PREFIX_VEX_0F65,
1158 PREFIX_VEX_0F66,
1159 PREFIX_VEX_0F67,
1160 PREFIX_VEX_0F68,
1161 PREFIX_VEX_0F69,
1162 PREFIX_VEX_0F6A,
1163 PREFIX_VEX_0F6B,
1164 PREFIX_VEX_0F6C,
1165 PREFIX_VEX_0F6D,
1166 PREFIX_VEX_0F6E,
1167 PREFIX_VEX_0F6F,
1168 PREFIX_VEX_0F70,
1169 PREFIX_VEX_0F71_REG_2,
1170 PREFIX_VEX_0F71_REG_4,
1171 PREFIX_VEX_0F71_REG_6,
1172 PREFIX_VEX_0F72_REG_2,
1173 PREFIX_VEX_0F72_REG_4,
1174 PREFIX_VEX_0F72_REG_6,
1175 PREFIX_VEX_0F73_REG_2,
1176 PREFIX_VEX_0F73_REG_3,
1177 PREFIX_VEX_0F73_REG_6,
1178 PREFIX_VEX_0F73_REG_7,
1179 PREFIX_VEX_0F74,
1180 PREFIX_VEX_0F75,
1181 PREFIX_VEX_0F76,
1182 PREFIX_VEX_0F77,
1183 PREFIX_VEX_0F7C,
1184 PREFIX_VEX_0F7D,
1185 PREFIX_VEX_0F7E,
1186 PREFIX_VEX_0F7F,
43234a1e
L
1187 PREFIX_VEX_0F90,
1188 PREFIX_VEX_0F91,
1189 PREFIX_VEX_0F92,
1190 PREFIX_VEX_0F93,
1191 PREFIX_VEX_0F98,
1ba585e8 1192 PREFIX_VEX_0F99,
592a252b
L
1193 PREFIX_VEX_0FC2,
1194 PREFIX_VEX_0FC4,
1195 PREFIX_VEX_0FC5,
1196 PREFIX_VEX_0FD0,
1197 PREFIX_VEX_0FD1,
1198 PREFIX_VEX_0FD2,
1199 PREFIX_VEX_0FD3,
1200 PREFIX_VEX_0FD4,
1201 PREFIX_VEX_0FD5,
1202 PREFIX_VEX_0FD6,
1203 PREFIX_VEX_0FD7,
1204 PREFIX_VEX_0FD8,
1205 PREFIX_VEX_0FD9,
1206 PREFIX_VEX_0FDA,
1207 PREFIX_VEX_0FDB,
1208 PREFIX_VEX_0FDC,
1209 PREFIX_VEX_0FDD,
1210 PREFIX_VEX_0FDE,
1211 PREFIX_VEX_0FDF,
1212 PREFIX_VEX_0FE0,
1213 PREFIX_VEX_0FE1,
1214 PREFIX_VEX_0FE2,
1215 PREFIX_VEX_0FE3,
1216 PREFIX_VEX_0FE4,
1217 PREFIX_VEX_0FE5,
1218 PREFIX_VEX_0FE6,
1219 PREFIX_VEX_0FE7,
1220 PREFIX_VEX_0FE8,
1221 PREFIX_VEX_0FE9,
1222 PREFIX_VEX_0FEA,
1223 PREFIX_VEX_0FEB,
1224 PREFIX_VEX_0FEC,
1225 PREFIX_VEX_0FED,
1226 PREFIX_VEX_0FEE,
1227 PREFIX_VEX_0FEF,
1228 PREFIX_VEX_0FF0,
1229 PREFIX_VEX_0FF1,
1230 PREFIX_VEX_0FF2,
1231 PREFIX_VEX_0FF3,
1232 PREFIX_VEX_0FF4,
1233 PREFIX_VEX_0FF5,
1234 PREFIX_VEX_0FF6,
1235 PREFIX_VEX_0FF7,
1236 PREFIX_VEX_0FF8,
1237 PREFIX_VEX_0FF9,
1238 PREFIX_VEX_0FFA,
1239 PREFIX_VEX_0FFB,
1240 PREFIX_VEX_0FFC,
1241 PREFIX_VEX_0FFD,
1242 PREFIX_VEX_0FFE,
1243 PREFIX_VEX_0F3800,
1244 PREFIX_VEX_0F3801,
1245 PREFIX_VEX_0F3802,
1246 PREFIX_VEX_0F3803,
1247 PREFIX_VEX_0F3804,
1248 PREFIX_VEX_0F3805,
1249 PREFIX_VEX_0F3806,
1250 PREFIX_VEX_0F3807,
1251 PREFIX_VEX_0F3808,
1252 PREFIX_VEX_0F3809,
1253 PREFIX_VEX_0F380A,
1254 PREFIX_VEX_0F380B,
1255 PREFIX_VEX_0F380C,
1256 PREFIX_VEX_0F380D,
1257 PREFIX_VEX_0F380E,
1258 PREFIX_VEX_0F380F,
1259 PREFIX_VEX_0F3813,
6c30d220 1260 PREFIX_VEX_0F3816,
592a252b
L
1261 PREFIX_VEX_0F3817,
1262 PREFIX_VEX_0F3818,
1263 PREFIX_VEX_0F3819,
1264 PREFIX_VEX_0F381A,
1265 PREFIX_VEX_0F381C,
1266 PREFIX_VEX_0F381D,
1267 PREFIX_VEX_0F381E,
1268 PREFIX_VEX_0F3820,
1269 PREFIX_VEX_0F3821,
1270 PREFIX_VEX_0F3822,
1271 PREFIX_VEX_0F3823,
1272 PREFIX_VEX_0F3824,
1273 PREFIX_VEX_0F3825,
1274 PREFIX_VEX_0F3828,
1275 PREFIX_VEX_0F3829,
1276 PREFIX_VEX_0F382A,
1277 PREFIX_VEX_0F382B,
1278 PREFIX_VEX_0F382C,
1279 PREFIX_VEX_0F382D,
1280 PREFIX_VEX_0F382E,
1281 PREFIX_VEX_0F382F,
1282 PREFIX_VEX_0F3830,
1283 PREFIX_VEX_0F3831,
1284 PREFIX_VEX_0F3832,
1285 PREFIX_VEX_0F3833,
1286 PREFIX_VEX_0F3834,
1287 PREFIX_VEX_0F3835,
6c30d220 1288 PREFIX_VEX_0F3836,
592a252b
L
1289 PREFIX_VEX_0F3837,
1290 PREFIX_VEX_0F3838,
1291 PREFIX_VEX_0F3839,
1292 PREFIX_VEX_0F383A,
1293 PREFIX_VEX_0F383B,
1294 PREFIX_VEX_0F383C,
1295 PREFIX_VEX_0F383D,
1296 PREFIX_VEX_0F383E,
1297 PREFIX_VEX_0F383F,
1298 PREFIX_VEX_0F3840,
1299 PREFIX_VEX_0F3841,
6c30d220
L
1300 PREFIX_VEX_0F3845,
1301 PREFIX_VEX_0F3846,
1302 PREFIX_VEX_0F3847,
1303 PREFIX_VEX_0F3858,
1304 PREFIX_VEX_0F3859,
1305 PREFIX_VEX_0F385A,
1306 PREFIX_VEX_0F3878,
1307 PREFIX_VEX_0F3879,
1308 PREFIX_VEX_0F388C,
1309 PREFIX_VEX_0F388E,
1310 PREFIX_VEX_0F3890,
1311 PREFIX_VEX_0F3891,
1312 PREFIX_VEX_0F3892,
1313 PREFIX_VEX_0F3893,
592a252b
L
1314 PREFIX_VEX_0F3896,
1315 PREFIX_VEX_0F3897,
1316 PREFIX_VEX_0F3898,
1317 PREFIX_VEX_0F3899,
1318 PREFIX_VEX_0F389A,
1319 PREFIX_VEX_0F389B,
1320 PREFIX_VEX_0F389C,
1321 PREFIX_VEX_0F389D,
1322 PREFIX_VEX_0F389E,
1323 PREFIX_VEX_0F389F,
1324 PREFIX_VEX_0F38A6,
1325 PREFIX_VEX_0F38A7,
1326 PREFIX_VEX_0F38A8,
1327 PREFIX_VEX_0F38A9,
1328 PREFIX_VEX_0F38AA,
1329 PREFIX_VEX_0F38AB,
1330 PREFIX_VEX_0F38AC,
1331 PREFIX_VEX_0F38AD,
1332 PREFIX_VEX_0F38AE,
1333 PREFIX_VEX_0F38AF,
1334 PREFIX_VEX_0F38B6,
1335 PREFIX_VEX_0F38B7,
1336 PREFIX_VEX_0F38B8,
1337 PREFIX_VEX_0F38B9,
1338 PREFIX_VEX_0F38BA,
1339 PREFIX_VEX_0F38BB,
1340 PREFIX_VEX_0F38BC,
1341 PREFIX_VEX_0F38BD,
1342 PREFIX_VEX_0F38BE,
1343 PREFIX_VEX_0F38BF,
48521003 1344 PREFIX_VEX_0F38CF,
592a252b
L
1345 PREFIX_VEX_0F38DB,
1346 PREFIX_VEX_0F38DC,
1347 PREFIX_VEX_0F38DD,
1348 PREFIX_VEX_0F38DE,
1349 PREFIX_VEX_0F38DF,
f12dc422
L
1350 PREFIX_VEX_0F38F2,
1351 PREFIX_VEX_0F38F3_REG_1,
1352 PREFIX_VEX_0F38F3_REG_2,
1353 PREFIX_VEX_0F38F3_REG_3,
6c30d220
L
1354 PREFIX_VEX_0F38F5,
1355 PREFIX_VEX_0F38F6,
f12dc422 1356 PREFIX_VEX_0F38F7,
6c30d220
L
1357 PREFIX_VEX_0F3A00,
1358 PREFIX_VEX_0F3A01,
1359 PREFIX_VEX_0F3A02,
592a252b
L
1360 PREFIX_VEX_0F3A04,
1361 PREFIX_VEX_0F3A05,
1362 PREFIX_VEX_0F3A06,
1363 PREFIX_VEX_0F3A08,
1364 PREFIX_VEX_0F3A09,
1365 PREFIX_VEX_0F3A0A,
1366 PREFIX_VEX_0F3A0B,
1367 PREFIX_VEX_0F3A0C,
1368 PREFIX_VEX_0F3A0D,
1369 PREFIX_VEX_0F3A0E,
1370 PREFIX_VEX_0F3A0F,
1371 PREFIX_VEX_0F3A14,
1372 PREFIX_VEX_0F3A15,
1373 PREFIX_VEX_0F3A16,
1374 PREFIX_VEX_0F3A17,
1375 PREFIX_VEX_0F3A18,
1376 PREFIX_VEX_0F3A19,
1377 PREFIX_VEX_0F3A1D,
1378 PREFIX_VEX_0F3A20,
1379 PREFIX_VEX_0F3A21,
1380 PREFIX_VEX_0F3A22,
43234a1e 1381 PREFIX_VEX_0F3A30,
1ba585e8 1382 PREFIX_VEX_0F3A31,
43234a1e 1383 PREFIX_VEX_0F3A32,
1ba585e8 1384 PREFIX_VEX_0F3A33,
6c30d220
L
1385 PREFIX_VEX_0F3A38,
1386 PREFIX_VEX_0F3A39,
592a252b
L
1387 PREFIX_VEX_0F3A40,
1388 PREFIX_VEX_0F3A41,
1389 PREFIX_VEX_0F3A42,
1390 PREFIX_VEX_0F3A44,
6c30d220 1391 PREFIX_VEX_0F3A46,
592a252b
L
1392 PREFIX_VEX_0F3A48,
1393 PREFIX_VEX_0F3A49,
1394 PREFIX_VEX_0F3A4A,
1395 PREFIX_VEX_0F3A4B,
1396 PREFIX_VEX_0F3A4C,
1397 PREFIX_VEX_0F3A5C,
1398 PREFIX_VEX_0F3A5D,
1399 PREFIX_VEX_0F3A5E,
1400 PREFIX_VEX_0F3A5F,
1401 PREFIX_VEX_0F3A60,
1402 PREFIX_VEX_0F3A61,
1403 PREFIX_VEX_0F3A62,
1404 PREFIX_VEX_0F3A63,
1405 PREFIX_VEX_0F3A68,
1406 PREFIX_VEX_0F3A69,
1407 PREFIX_VEX_0F3A6A,
1408 PREFIX_VEX_0F3A6B,
1409 PREFIX_VEX_0F3A6C,
1410 PREFIX_VEX_0F3A6D,
1411 PREFIX_VEX_0F3A6E,
1412 PREFIX_VEX_0F3A6F,
1413 PREFIX_VEX_0F3A78,
1414 PREFIX_VEX_0F3A79,
1415 PREFIX_VEX_0F3A7A,
1416 PREFIX_VEX_0F3A7B,
1417 PREFIX_VEX_0F3A7C,
1418 PREFIX_VEX_0F3A7D,
1419 PREFIX_VEX_0F3A7E,
1420 PREFIX_VEX_0F3A7F,
48521003
IT
1421 PREFIX_VEX_0F3ACE,
1422 PREFIX_VEX_0F3ACF,
6c30d220 1423 PREFIX_VEX_0F3ADF,
43234a1e
L
1424 PREFIX_VEX_0F3AF0,
1425
1426 PREFIX_EVEX_0F10,
1427 PREFIX_EVEX_0F11,
1428 PREFIX_EVEX_0F12,
1429 PREFIX_EVEX_0F13,
1430 PREFIX_EVEX_0F14,
1431 PREFIX_EVEX_0F15,
1432 PREFIX_EVEX_0F16,
1433 PREFIX_EVEX_0F17,
1434 PREFIX_EVEX_0F28,
1435 PREFIX_EVEX_0F29,
1436 PREFIX_EVEX_0F2A,
1437 PREFIX_EVEX_0F2B,
1438 PREFIX_EVEX_0F2C,
1439 PREFIX_EVEX_0F2D,
1440 PREFIX_EVEX_0F2E,
1441 PREFIX_EVEX_0F2F,
1442 PREFIX_EVEX_0F51,
90a915bf
IT
1443 PREFIX_EVEX_0F54,
1444 PREFIX_EVEX_0F55,
1445 PREFIX_EVEX_0F56,
1446 PREFIX_EVEX_0F57,
43234a1e
L
1447 PREFIX_EVEX_0F58,
1448 PREFIX_EVEX_0F59,
1449 PREFIX_EVEX_0F5A,
1450 PREFIX_EVEX_0F5B,
1451 PREFIX_EVEX_0F5C,
1452 PREFIX_EVEX_0F5D,
1453 PREFIX_EVEX_0F5E,
1454 PREFIX_EVEX_0F5F,
1ba585e8
IT
1455 PREFIX_EVEX_0F60,
1456 PREFIX_EVEX_0F61,
43234a1e 1457 PREFIX_EVEX_0F62,
1ba585e8
IT
1458 PREFIX_EVEX_0F63,
1459 PREFIX_EVEX_0F64,
1460 PREFIX_EVEX_0F65,
43234a1e 1461 PREFIX_EVEX_0F66,
1ba585e8
IT
1462 PREFIX_EVEX_0F67,
1463 PREFIX_EVEX_0F68,
1464 PREFIX_EVEX_0F69,
43234a1e 1465 PREFIX_EVEX_0F6A,
1ba585e8 1466 PREFIX_EVEX_0F6B,
43234a1e
L
1467 PREFIX_EVEX_0F6C,
1468 PREFIX_EVEX_0F6D,
1469 PREFIX_EVEX_0F6E,
1470 PREFIX_EVEX_0F6F,
1471 PREFIX_EVEX_0F70,
1ba585e8
IT
1472 PREFIX_EVEX_0F71_REG_2,
1473 PREFIX_EVEX_0F71_REG_4,
1474 PREFIX_EVEX_0F71_REG_6,
43234a1e
L
1475 PREFIX_EVEX_0F72_REG_0,
1476 PREFIX_EVEX_0F72_REG_1,
1477 PREFIX_EVEX_0F72_REG_2,
1478 PREFIX_EVEX_0F72_REG_4,
1479 PREFIX_EVEX_0F72_REG_6,
1480 PREFIX_EVEX_0F73_REG_2,
1ba585e8 1481 PREFIX_EVEX_0F73_REG_3,
43234a1e 1482 PREFIX_EVEX_0F73_REG_6,
1ba585e8
IT
1483 PREFIX_EVEX_0F73_REG_7,
1484 PREFIX_EVEX_0F74,
1485 PREFIX_EVEX_0F75,
43234a1e
L
1486 PREFIX_EVEX_0F76,
1487 PREFIX_EVEX_0F78,
1488 PREFIX_EVEX_0F79,
1489 PREFIX_EVEX_0F7A,
1490 PREFIX_EVEX_0F7B,
1491 PREFIX_EVEX_0F7E,
1492 PREFIX_EVEX_0F7F,
1493 PREFIX_EVEX_0FC2,
1ba585e8
IT
1494 PREFIX_EVEX_0FC4,
1495 PREFIX_EVEX_0FC5,
43234a1e 1496 PREFIX_EVEX_0FC6,
1ba585e8 1497 PREFIX_EVEX_0FD1,
43234a1e
L
1498 PREFIX_EVEX_0FD2,
1499 PREFIX_EVEX_0FD3,
1500 PREFIX_EVEX_0FD4,
1ba585e8 1501 PREFIX_EVEX_0FD5,
43234a1e 1502 PREFIX_EVEX_0FD6,
1ba585e8
IT
1503 PREFIX_EVEX_0FD8,
1504 PREFIX_EVEX_0FD9,
1505 PREFIX_EVEX_0FDA,
43234a1e 1506 PREFIX_EVEX_0FDB,
1ba585e8
IT
1507 PREFIX_EVEX_0FDC,
1508 PREFIX_EVEX_0FDD,
1509 PREFIX_EVEX_0FDE,
43234a1e 1510 PREFIX_EVEX_0FDF,
1ba585e8
IT
1511 PREFIX_EVEX_0FE0,
1512 PREFIX_EVEX_0FE1,
43234a1e 1513 PREFIX_EVEX_0FE2,
1ba585e8
IT
1514 PREFIX_EVEX_0FE3,
1515 PREFIX_EVEX_0FE4,
1516 PREFIX_EVEX_0FE5,
43234a1e
L
1517 PREFIX_EVEX_0FE6,
1518 PREFIX_EVEX_0FE7,
1ba585e8
IT
1519 PREFIX_EVEX_0FE8,
1520 PREFIX_EVEX_0FE9,
1521 PREFIX_EVEX_0FEA,
43234a1e 1522 PREFIX_EVEX_0FEB,
1ba585e8
IT
1523 PREFIX_EVEX_0FEC,
1524 PREFIX_EVEX_0FED,
1525 PREFIX_EVEX_0FEE,
43234a1e 1526 PREFIX_EVEX_0FEF,
1ba585e8 1527 PREFIX_EVEX_0FF1,
43234a1e
L
1528 PREFIX_EVEX_0FF2,
1529 PREFIX_EVEX_0FF3,
1530 PREFIX_EVEX_0FF4,
1ba585e8
IT
1531 PREFIX_EVEX_0FF5,
1532 PREFIX_EVEX_0FF6,
1533 PREFIX_EVEX_0FF8,
1534 PREFIX_EVEX_0FF9,
43234a1e
L
1535 PREFIX_EVEX_0FFA,
1536 PREFIX_EVEX_0FFB,
1ba585e8
IT
1537 PREFIX_EVEX_0FFC,
1538 PREFIX_EVEX_0FFD,
43234a1e 1539 PREFIX_EVEX_0FFE,
1ba585e8
IT
1540 PREFIX_EVEX_0F3800,
1541 PREFIX_EVEX_0F3804,
1542 PREFIX_EVEX_0F380B,
43234a1e
L
1543 PREFIX_EVEX_0F380C,
1544 PREFIX_EVEX_0F380D,
1ba585e8 1545 PREFIX_EVEX_0F3810,
43234a1e
L
1546 PREFIX_EVEX_0F3811,
1547 PREFIX_EVEX_0F3812,
1548 PREFIX_EVEX_0F3813,
1549 PREFIX_EVEX_0F3814,
1550 PREFIX_EVEX_0F3815,
1551 PREFIX_EVEX_0F3816,
1552 PREFIX_EVEX_0F3818,
1553 PREFIX_EVEX_0F3819,
1554 PREFIX_EVEX_0F381A,
1555 PREFIX_EVEX_0F381B,
1ba585e8
IT
1556 PREFIX_EVEX_0F381C,
1557 PREFIX_EVEX_0F381D,
43234a1e
L
1558 PREFIX_EVEX_0F381E,
1559 PREFIX_EVEX_0F381F,
1ba585e8 1560 PREFIX_EVEX_0F3820,
43234a1e
L
1561 PREFIX_EVEX_0F3821,
1562 PREFIX_EVEX_0F3822,
1563 PREFIX_EVEX_0F3823,
1564 PREFIX_EVEX_0F3824,
1565 PREFIX_EVEX_0F3825,
1ba585e8 1566 PREFIX_EVEX_0F3826,
43234a1e
L
1567 PREFIX_EVEX_0F3827,
1568 PREFIX_EVEX_0F3828,
1569 PREFIX_EVEX_0F3829,
1570 PREFIX_EVEX_0F382A,
1ba585e8 1571 PREFIX_EVEX_0F382B,
43234a1e
L
1572 PREFIX_EVEX_0F382C,
1573 PREFIX_EVEX_0F382D,
1ba585e8 1574 PREFIX_EVEX_0F3830,
43234a1e
L
1575 PREFIX_EVEX_0F3831,
1576 PREFIX_EVEX_0F3832,
1577 PREFIX_EVEX_0F3833,
1578 PREFIX_EVEX_0F3834,
1579 PREFIX_EVEX_0F3835,
1580 PREFIX_EVEX_0F3836,
1581 PREFIX_EVEX_0F3837,
1ba585e8 1582 PREFIX_EVEX_0F3838,
43234a1e
L
1583 PREFIX_EVEX_0F3839,
1584 PREFIX_EVEX_0F383A,
1585 PREFIX_EVEX_0F383B,
1ba585e8 1586 PREFIX_EVEX_0F383C,
43234a1e 1587 PREFIX_EVEX_0F383D,
1ba585e8 1588 PREFIX_EVEX_0F383E,
43234a1e
L
1589 PREFIX_EVEX_0F383F,
1590 PREFIX_EVEX_0F3840,
1591 PREFIX_EVEX_0F3842,
1592 PREFIX_EVEX_0F3843,
1593 PREFIX_EVEX_0F3844,
1594 PREFIX_EVEX_0F3845,
1595 PREFIX_EVEX_0F3846,
1596 PREFIX_EVEX_0F3847,
1597 PREFIX_EVEX_0F384C,
1598 PREFIX_EVEX_0F384D,
1599 PREFIX_EVEX_0F384E,
1600 PREFIX_EVEX_0F384F,
8cfcb765
IT
1601 PREFIX_EVEX_0F3850,
1602 PREFIX_EVEX_0F3851,
47acf0bd
IT
1603 PREFIX_EVEX_0F3852,
1604 PREFIX_EVEX_0F3853,
ee6872be 1605 PREFIX_EVEX_0F3854,
620214f7 1606 PREFIX_EVEX_0F3855,
43234a1e
L
1607 PREFIX_EVEX_0F3858,
1608 PREFIX_EVEX_0F3859,
1609 PREFIX_EVEX_0F385A,
1610 PREFIX_EVEX_0F385B,
53467f57
IT
1611 PREFIX_EVEX_0F3862,
1612 PREFIX_EVEX_0F3863,
43234a1e
L
1613 PREFIX_EVEX_0F3864,
1614 PREFIX_EVEX_0F3865,
1ba585e8 1615 PREFIX_EVEX_0F3866,
53467f57
IT
1616 PREFIX_EVEX_0F3870,
1617 PREFIX_EVEX_0F3871,
1618 PREFIX_EVEX_0F3872,
1619 PREFIX_EVEX_0F3873,
1ba585e8 1620 PREFIX_EVEX_0F3875,
43234a1e
L
1621 PREFIX_EVEX_0F3876,
1622 PREFIX_EVEX_0F3877,
1ba585e8
IT
1623 PREFIX_EVEX_0F3878,
1624 PREFIX_EVEX_0F3879,
1625 PREFIX_EVEX_0F387A,
1626 PREFIX_EVEX_0F387B,
43234a1e 1627 PREFIX_EVEX_0F387C,
1ba585e8 1628 PREFIX_EVEX_0F387D,
43234a1e
L
1629 PREFIX_EVEX_0F387E,
1630 PREFIX_EVEX_0F387F,
14f195c9 1631 PREFIX_EVEX_0F3883,
43234a1e
L
1632 PREFIX_EVEX_0F3888,
1633 PREFIX_EVEX_0F3889,
1634 PREFIX_EVEX_0F388A,
1635 PREFIX_EVEX_0F388B,
1ba585e8 1636 PREFIX_EVEX_0F388D,
ee6872be 1637 PREFIX_EVEX_0F388F,
43234a1e
L
1638 PREFIX_EVEX_0F3890,
1639 PREFIX_EVEX_0F3891,
1640 PREFIX_EVEX_0F3892,
1641 PREFIX_EVEX_0F3893,
1642 PREFIX_EVEX_0F3896,
1643 PREFIX_EVEX_0F3897,
1644 PREFIX_EVEX_0F3898,
1645 PREFIX_EVEX_0F3899,
1646 PREFIX_EVEX_0F389A,
1647 PREFIX_EVEX_0F389B,
1648 PREFIX_EVEX_0F389C,
1649 PREFIX_EVEX_0F389D,
1650 PREFIX_EVEX_0F389E,
1651 PREFIX_EVEX_0F389F,
1652 PREFIX_EVEX_0F38A0,
1653 PREFIX_EVEX_0F38A1,
1654 PREFIX_EVEX_0F38A2,
1655 PREFIX_EVEX_0F38A3,
1656 PREFIX_EVEX_0F38A6,
1657 PREFIX_EVEX_0F38A7,
1658 PREFIX_EVEX_0F38A8,
1659 PREFIX_EVEX_0F38A9,
1660 PREFIX_EVEX_0F38AA,
1661 PREFIX_EVEX_0F38AB,
1662 PREFIX_EVEX_0F38AC,
1663 PREFIX_EVEX_0F38AD,
1664 PREFIX_EVEX_0F38AE,
1665 PREFIX_EVEX_0F38AF,
2cc1b5aa
IT
1666 PREFIX_EVEX_0F38B4,
1667 PREFIX_EVEX_0F38B5,
43234a1e
L
1668 PREFIX_EVEX_0F38B6,
1669 PREFIX_EVEX_0F38B7,
1670 PREFIX_EVEX_0F38B8,
1671 PREFIX_EVEX_0F38B9,
1672 PREFIX_EVEX_0F38BA,
1673 PREFIX_EVEX_0F38BB,
1674 PREFIX_EVEX_0F38BC,
1675 PREFIX_EVEX_0F38BD,
1676 PREFIX_EVEX_0F38BE,
1677 PREFIX_EVEX_0F38BF,
1678 PREFIX_EVEX_0F38C4,
1679 PREFIX_EVEX_0F38C6_REG_1,
1680 PREFIX_EVEX_0F38C6_REG_2,
1681 PREFIX_EVEX_0F38C6_REG_5,
1682 PREFIX_EVEX_0F38C6_REG_6,
1683 PREFIX_EVEX_0F38C7_REG_1,
1684 PREFIX_EVEX_0F38C7_REG_2,
1685 PREFIX_EVEX_0F38C7_REG_5,
1686 PREFIX_EVEX_0F38C7_REG_6,
1687 PREFIX_EVEX_0F38C8,
1688 PREFIX_EVEX_0F38CA,
1689 PREFIX_EVEX_0F38CB,
1690 PREFIX_EVEX_0F38CC,
1691 PREFIX_EVEX_0F38CD,
48521003 1692 PREFIX_EVEX_0F38CF,
8dcf1fad
IT
1693 PREFIX_EVEX_0F38DC,
1694 PREFIX_EVEX_0F38DD,
1695 PREFIX_EVEX_0F38DE,
1696 PREFIX_EVEX_0F38DF,
43234a1e
L
1697
1698 PREFIX_EVEX_0F3A00,
1699 PREFIX_EVEX_0F3A01,
1700 PREFIX_EVEX_0F3A03,
1701 PREFIX_EVEX_0F3A04,
1702 PREFIX_EVEX_0F3A05,
1703 PREFIX_EVEX_0F3A08,
1704 PREFIX_EVEX_0F3A09,
1705 PREFIX_EVEX_0F3A0A,
1706 PREFIX_EVEX_0F3A0B,
1ba585e8
IT
1707 PREFIX_EVEX_0F3A0F,
1708 PREFIX_EVEX_0F3A14,
1709 PREFIX_EVEX_0F3A15,
90a915bf 1710 PREFIX_EVEX_0F3A16,
43234a1e
L
1711 PREFIX_EVEX_0F3A17,
1712 PREFIX_EVEX_0F3A18,
1713 PREFIX_EVEX_0F3A19,
1714 PREFIX_EVEX_0F3A1A,
1715 PREFIX_EVEX_0F3A1B,
1716 PREFIX_EVEX_0F3A1D,
1717 PREFIX_EVEX_0F3A1E,
1718 PREFIX_EVEX_0F3A1F,
1ba585e8 1719 PREFIX_EVEX_0F3A20,
43234a1e 1720 PREFIX_EVEX_0F3A21,
90a915bf 1721 PREFIX_EVEX_0F3A22,
43234a1e
L
1722 PREFIX_EVEX_0F3A23,
1723 PREFIX_EVEX_0F3A25,
1724 PREFIX_EVEX_0F3A26,
1725 PREFIX_EVEX_0F3A27,
1726 PREFIX_EVEX_0F3A38,
1727 PREFIX_EVEX_0F3A39,
1728 PREFIX_EVEX_0F3A3A,
1729 PREFIX_EVEX_0F3A3B,
1ba585e8
IT
1730 PREFIX_EVEX_0F3A3E,
1731 PREFIX_EVEX_0F3A3F,
1732 PREFIX_EVEX_0F3A42,
43234a1e 1733 PREFIX_EVEX_0F3A43,
ff1982d5 1734 PREFIX_EVEX_0F3A44,
90a915bf
IT
1735 PREFIX_EVEX_0F3A50,
1736 PREFIX_EVEX_0F3A51,
43234a1e 1737 PREFIX_EVEX_0F3A54,
90a915bf
IT
1738 PREFIX_EVEX_0F3A55,
1739 PREFIX_EVEX_0F3A56,
1740 PREFIX_EVEX_0F3A57,
1741 PREFIX_EVEX_0F3A66,
53467f57
IT
1742 PREFIX_EVEX_0F3A67,
1743 PREFIX_EVEX_0F3A70,
1744 PREFIX_EVEX_0F3A71,
1745 PREFIX_EVEX_0F3A72,
48521003
IT
1746 PREFIX_EVEX_0F3A73,
1747 PREFIX_EVEX_0F3ACE,
1748 PREFIX_EVEX_0F3ACF
51e7da1b 1749};
4e7d34a6 1750
51e7da1b
L
1751enum
1752{
1753 X86_64_06 = 0,
3873ba12
L
1754 X86_64_07,
1755 X86_64_0D,
1756 X86_64_16,
1757 X86_64_17,
1758 X86_64_1E,
1759 X86_64_1F,
1760 X86_64_27,
1761 X86_64_2F,
1762 X86_64_37,
1763 X86_64_3F,
1764 X86_64_60,
1765 X86_64_61,
1766 X86_64_62,
1767 X86_64_63,
1768 X86_64_6D,
1769 X86_64_6F,
d039fef3 1770 X86_64_82,
3873ba12
L
1771 X86_64_9A,
1772 X86_64_C4,
1773 X86_64_C5,
1774 X86_64_CE,
1775 X86_64_D4,
1776 X86_64_D5,
a72d2af2
L
1777 X86_64_E8,
1778 X86_64_E9,
3873ba12
L
1779 X86_64_EA,
1780 X86_64_0F01_REG_0,
1781 X86_64_0F01_REG_1,
1782 X86_64_0F01_REG_2,
1783 X86_64_0F01_REG_3
51e7da1b 1784};
4e7d34a6 1785
51e7da1b
L
1786enum
1787{
1788 THREE_BYTE_0F38 = 0,
1f334aeb 1789 THREE_BYTE_0F3A
51e7da1b 1790};
4e7d34a6 1791
f88c9eb0
SP
1792enum
1793{
5dd85c99
SP
1794 XOP_08 = 0,
1795 XOP_09,
f88c9eb0
SP
1796 XOP_0A
1797};
1798
51e7da1b
L
1799enum
1800{
1801 VEX_0F = 0,
3873ba12
L
1802 VEX_0F38,
1803 VEX_0F3A
51e7da1b 1804};
c0f3af97 1805
43234a1e
L
1806enum
1807{
1808 EVEX_0F = 0,
1809 EVEX_0F38,
1810 EVEX_0F3A
1811};
1812
51e7da1b
L
1813enum
1814{
ec6f095a 1815 VEX_LEN_0F12_P_0_M_0 = 0,
592a252b
L
1816 VEX_LEN_0F12_P_0_M_1,
1817 VEX_LEN_0F12_P_2,
1818 VEX_LEN_0F13_M_0,
1819 VEX_LEN_0F16_P_0_M_0,
1820 VEX_LEN_0F16_P_0_M_1,
1821 VEX_LEN_0F16_P_2,
1822 VEX_LEN_0F17_M_0,
1823 VEX_LEN_0F2A_P_1,
1824 VEX_LEN_0F2A_P_3,
1825 VEX_LEN_0F2C_P_1,
1826 VEX_LEN_0F2C_P_3,
1827 VEX_LEN_0F2D_P_1,
1828 VEX_LEN_0F2D_P_3,
43234a1e 1829 VEX_LEN_0F41_P_0,
1ba585e8 1830 VEX_LEN_0F41_P_2,
43234a1e 1831 VEX_LEN_0F42_P_0,
1ba585e8 1832 VEX_LEN_0F42_P_2,
43234a1e 1833 VEX_LEN_0F44_P_0,
1ba585e8 1834 VEX_LEN_0F44_P_2,
43234a1e 1835 VEX_LEN_0F45_P_0,
1ba585e8 1836 VEX_LEN_0F45_P_2,
43234a1e 1837 VEX_LEN_0F46_P_0,
1ba585e8 1838 VEX_LEN_0F46_P_2,
43234a1e 1839 VEX_LEN_0F47_P_0,
1ba585e8
IT
1840 VEX_LEN_0F47_P_2,
1841 VEX_LEN_0F4A_P_0,
1842 VEX_LEN_0F4A_P_2,
1843 VEX_LEN_0F4B_P_0,
43234a1e 1844 VEX_LEN_0F4B_P_2,
592a252b 1845 VEX_LEN_0F6E_P_2,
ec6f095a 1846 VEX_LEN_0F77_P_0,
592a252b
L
1847 VEX_LEN_0F7E_P_1,
1848 VEX_LEN_0F7E_P_2,
43234a1e 1849 VEX_LEN_0F90_P_0,
1ba585e8 1850 VEX_LEN_0F90_P_2,
43234a1e 1851 VEX_LEN_0F91_P_0,
1ba585e8 1852 VEX_LEN_0F91_P_2,
43234a1e 1853 VEX_LEN_0F92_P_0,
90a915bf 1854 VEX_LEN_0F92_P_2,
1ba585e8 1855 VEX_LEN_0F92_P_3,
43234a1e 1856 VEX_LEN_0F93_P_0,
90a915bf 1857 VEX_LEN_0F93_P_2,
1ba585e8 1858 VEX_LEN_0F93_P_3,
43234a1e 1859 VEX_LEN_0F98_P_0,
1ba585e8
IT
1860 VEX_LEN_0F98_P_2,
1861 VEX_LEN_0F99_P_0,
1862 VEX_LEN_0F99_P_2,
592a252b
L
1863 VEX_LEN_0FAE_R_2_M_0,
1864 VEX_LEN_0FAE_R_3_M_0,
592a252b
L
1865 VEX_LEN_0FC4_P_2,
1866 VEX_LEN_0FC5_P_2,
592a252b 1867 VEX_LEN_0FD6_P_2,
592a252b 1868 VEX_LEN_0FF7_P_2,
6c30d220
L
1869 VEX_LEN_0F3816_P_2,
1870 VEX_LEN_0F3819_P_2,
592a252b 1871 VEX_LEN_0F381A_P_2_M_0,
6c30d220 1872 VEX_LEN_0F3836_P_2,
592a252b 1873 VEX_LEN_0F3841_P_2,
6c30d220 1874 VEX_LEN_0F385A_P_2_M_0,
592a252b 1875 VEX_LEN_0F38DB_P_2,
f12dc422
L
1876 VEX_LEN_0F38F2_P_0,
1877 VEX_LEN_0F38F3_R_1_P_0,
1878 VEX_LEN_0F38F3_R_2_P_0,
1879 VEX_LEN_0F38F3_R_3_P_0,
6c30d220
L
1880 VEX_LEN_0F38F5_P_0,
1881 VEX_LEN_0F38F5_P_1,
1882 VEX_LEN_0F38F5_P_3,
1883 VEX_LEN_0F38F6_P_3,
f12dc422 1884 VEX_LEN_0F38F7_P_0,
6c30d220
L
1885 VEX_LEN_0F38F7_P_1,
1886 VEX_LEN_0F38F7_P_2,
1887 VEX_LEN_0F38F7_P_3,
1888 VEX_LEN_0F3A00_P_2,
1889 VEX_LEN_0F3A01_P_2,
592a252b 1890 VEX_LEN_0F3A06_P_2,
592a252b
L
1891 VEX_LEN_0F3A14_P_2,
1892 VEX_LEN_0F3A15_P_2,
1893 VEX_LEN_0F3A16_P_2,
1894 VEX_LEN_0F3A17_P_2,
1895 VEX_LEN_0F3A18_P_2,
1896 VEX_LEN_0F3A19_P_2,
1897 VEX_LEN_0F3A20_P_2,
1898 VEX_LEN_0F3A21_P_2,
1899 VEX_LEN_0F3A22_P_2,
43234a1e 1900 VEX_LEN_0F3A30_P_2,
1ba585e8 1901 VEX_LEN_0F3A31_P_2,
43234a1e 1902 VEX_LEN_0F3A32_P_2,
1ba585e8 1903 VEX_LEN_0F3A33_P_2,
6c30d220
L
1904 VEX_LEN_0F3A38_P_2,
1905 VEX_LEN_0F3A39_P_2,
592a252b 1906 VEX_LEN_0F3A41_P_2,
6c30d220 1907 VEX_LEN_0F3A46_P_2,
592a252b
L
1908 VEX_LEN_0F3A60_P_2,
1909 VEX_LEN_0F3A61_P_2,
1910 VEX_LEN_0F3A62_P_2,
1911 VEX_LEN_0F3A63_P_2,
1912 VEX_LEN_0F3A6A_P_2,
1913 VEX_LEN_0F3A6B_P_2,
1914 VEX_LEN_0F3A6E_P_2,
1915 VEX_LEN_0F3A6F_P_2,
1916 VEX_LEN_0F3A7A_P_2,
1917 VEX_LEN_0F3A7B_P_2,
1918 VEX_LEN_0F3A7E_P_2,
1919 VEX_LEN_0F3A7F_P_2,
1920 VEX_LEN_0F3ADF_P_2,
6c30d220 1921 VEX_LEN_0F3AF0_P_3,
ff688e1f
L
1922 VEX_LEN_0FXOP_08_CC,
1923 VEX_LEN_0FXOP_08_CD,
1924 VEX_LEN_0FXOP_08_CE,
1925 VEX_LEN_0FXOP_08_CF,
1926 VEX_LEN_0FXOP_08_EC,
1927 VEX_LEN_0FXOP_08_ED,
1928 VEX_LEN_0FXOP_08_EE,
1929 VEX_LEN_0FXOP_08_EF,
592a252b
L
1930 VEX_LEN_0FXOP_09_80,
1931 VEX_LEN_0FXOP_09_81
51e7da1b 1932};
c0f3af97 1933
04e2a182
L
1934enum
1935{
1936 EVEX_LEN_0F6E_P_2 = 0,
1937 EVEX_LEN_0F7E_P_1,
1938 EVEX_LEN_0F7E_P_2,
1939 EVEX_LEN_0FD6_P_2
1940};
1941
9e30b8e0
L
1942enum
1943{
ec6f095a 1944 VEX_W_0F41_P_0_LEN_1 = 0,
1ba585e8 1945 VEX_W_0F41_P_2_LEN_1,
43234a1e 1946 VEX_W_0F42_P_0_LEN_1,
1ba585e8 1947 VEX_W_0F42_P_2_LEN_1,
43234a1e 1948 VEX_W_0F44_P_0_LEN_0,
1ba585e8 1949 VEX_W_0F44_P_2_LEN_0,
43234a1e 1950 VEX_W_0F45_P_0_LEN_1,
1ba585e8 1951 VEX_W_0F45_P_2_LEN_1,
43234a1e 1952 VEX_W_0F46_P_0_LEN_1,
1ba585e8 1953 VEX_W_0F46_P_2_LEN_1,
43234a1e 1954 VEX_W_0F47_P_0_LEN_1,
1ba585e8
IT
1955 VEX_W_0F47_P_2_LEN_1,
1956 VEX_W_0F4A_P_0_LEN_1,
1957 VEX_W_0F4A_P_2_LEN_1,
1958 VEX_W_0F4B_P_0_LEN_1,
43234a1e 1959 VEX_W_0F4B_P_2_LEN_1,
43234a1e 1960 VEX_W_0F90_P_0_LEN_0,
1ba585e8 1961 VEX_W_0F90_P_2_LEN_0,
43234a1e 1962 VEX_W_0F91_P_0_LEN_0,
1ba585e8 1963 VEX_W_0F91_P_2_LEN_0,
43234a1e 1964 VEX_W_0F92_P_0_LEN_0,
90a915bf 1965 VEX_W_0F92_P_2_LEN_0,
1ba585e8 1966 VEX_W_0F92_P_3_LEN_0,
43234a1e 1967 VEX_W_0F93_P_0_LEN_0,
90a915bf 1968 VEX_W_0F93_P_2_LEN_0,
1ba585e8 1969 VEX_W_0F93_P_3_LEN_0,
43234a1e 1970 VEX_W_0F98_P_0_LEN_0,
1ba585e8
IT
1971 VEX_W_0F98_P_2_LEN_0,
1972 VEX_W_0F99_P_0_LEN_0,
1973 VEX_W_0F99_P_2_LEN_0,
592a252b
L
1974 VEX_W_0FC4_P_2,
1975 VEX_W_0FC5_P_2,
592a252b
L
1976 VEX_W_0F380C_P_2,
1977 VEX_W_0F380D_P_2,
1978 VEX_W_0F380E_P_2,
1979 VEX_W_0F380F_P_2,
6c30d220 1980 VEX_W_0F3816_P_2,
6c30d220
L
1981 VEX_W_0F3818_P_2,
1982 VEX_W_0F3819_P_2,
592a252b 1983 VEX_W_0F381A_P_2_M_0,
592a252b
L
1984 VEX_W_0F382C_P_2_M_0,
1985 VEX_W_0F382D_P_2_M_0,
1986 VEX_W_0F382E_P_2_M_0,
1987 VEX_W_0F382F_P_2_M_0,
6c30d220 1988 VEX_W_0F3836_P_2,
6c30d220
L
1989 VEX_W_0F3846_P_2,
1990 VEX_W_0F3858_P_2,
1991 VEX_W_0F3859_P_2,
1992 VEX_W_0F385A_P_2_M_0,
1993 VEX_W_0F3878_P_2,
1994 VEX_W_0F3879_P_2,
48521003 1995 VEX_W_0F38CF_P_2,
6c30d220
L
1996 VEX_W_0F3A00_P_2,
1997 VEX_W_0F3A01_P_2,
1998 VEX_W_0F3A02_P_2,
592a252b
L
1999 VEX_W_0F3A04_P_2,
2000 VEX_W_0F3A05_P_2,
2001 VEX_W_0F3A06_P_2,
592a252b
L
2002 VEX_W_0F3A14_P_2,
2003 VEX_W_0F3A15_P_2,
2004 VEX_W_0F3A18_P_2,
2005 VEX_W_0F3A19_P_2,
2006 VEX_W_0F3A20_P_2,
43234a1e 2007 VEX_W_0F3A30_P_2_LEN_0,
1ba585e8 2008 VEX_W_0F3A31_P_2_LEN_0,
43234a1e 2009 VEX_W_0F3A32_P_2_LEN_0,
1ba585e8 2010 VEX_W_0F3A33_P_2_LEN_0,
6c30d220
L
2011 VEX_W_0F3A38_P_2,
2012 VEX_W_0F3A39_P_2,
6c30d220 2013 VEX_W_0F3A46_P_2,
592a252b
L
2014 VEX_W_0F3A48_P_2,
2015 VEX_W_0F3A49_P_2,
2016 VEX_W_0F3A4A_P_2,
2017 VEX_W_0F3A4B_P_2,
2018 VEX_W_0F3A4C_P_2,
48521003
IT
2019 VEX_W_0F3ACE_P_2,
2020 VEX_W_0F3ACF_P_2,
43234a1e
L
2021
2022 EVEX_W_0F10_P_0,
2023 EVEX_W_0F10_P_1_M_0,
2024 EVEX_W_0F10_P_1_M_1,
2025 EVEX_W_0F10_P_2,
2026 EVEX_W_0F10_P_3_M_0,
2027 EVEX_W_0F10_P_3_M_1,
2028 EVEX_W_0F11_P_0,
2029 EVEX_W_0F11_P_1_M_0,
2030 EVEX_W_0F11_P_1_M_1,
2031 EVEX_W_0F11_P_2,
2032 EVEX_W_0F11_P_3_M_0,
2033 EVEX_W_0F11_P_3_M_1,
2034 EVEX_W_0F12_P_0_M_0,
2035 EVEX_W_0F12_P_0_M_1,
2036 EVEX_W_0F12_P_1,
2037 EVEX_W_0F12_P_2,
2038 EVEX_W_0F12_P_3,
2039 EVEX_W_0F13_P_0,
2040 EVEX_W_0F13_P_2,
2041 EVEX_W_0F14_P_0,
2042 EVEX_W_0F14_P_2,
2043 EVEX_W_0F15_P_0,
2044 EVEX_W_0F15_P_2,
2045 EVEX_W_0F16_P_0_M_0,
2046 EVEX_W_0F16_P_0_M_1,
2047 EVEX_W_0F16_P_1,
2048 EVEX_W_0F16_P_2,
2049 EVEX_W_0F17_P_0,
2050 EVEX_W_0F17_P_2,
2051 EVEX_W_0F28_P_0,
2052 EVEX_W_0F28_P_2,
2053 EVEX_W_0F29_P_0,
2054 EVEX_W_0F29_P_2,
2055 EVEX_W_0F2A_P_1,
2056 EVEX_W_0F2A_P_3,
2057 EVEX_W_0F2B_P_0,
2058 EVEX_W_0F2B_P_2,
2059 EVEX_W_0F2E_P_0,
2060 EVEX_W_0F2E_P_2,
2061 EVEX_W_0F2F_P_0,
2062 EVEX_W_0F2F_P_2,
2063 EVEX_W_0F51_P_0,
2064 EVEX_W_0F51_P_1,
2065 EVEX_W_0F51_P_2,
2066 EVEX_W_0F51_P_3,
90a915bf
IT
2067 EVEX_W_0F54_P_0,
2068 EVEX_W_0F54_P_2,
2069 EVEX_W_0F55_P_0,
2070 EVEX_W_0F55_P_2,
2071 EVEX_W_0F56_P_0,
2072 EVEX_W_0F56_P_2,
2073 EVEX_W_0F57_P_0,
2074 EVEX_W_0F57_P_2,
43234a1e
L
2075 EVEX_W_0F58_P_0,
2076 EVEX_W_0F58_P_1,
2077 EVEX_W_0F58_P_2,
2078 EVEX_W_0F58_P_3,
2079 EVEX_W_0F59_P_0,
2080 EVEX_W_0F59_P_1,
2081 EVEX_W_0F59_P_2,
2082 EVEX_W_0F59_P_3,
2083 EVEX_W_0F5A_P_0,
2084 EVEX_W_0F5A_P_1,
2085 EVEX_W_0F5A_P_2,
2086 EVEX_W_0F5A_P_3,
2087 EVEX_W_0F5B_P_0,
2088 EVEX_W_0F5B_P_1,
2089 EVEX_W_0F5B_P_2,
2090 EVEX_W_0F5C_P_0,
2091 EVEX_W_0F5C_P_1,
2092 EVEX_W_0F5C_P_2,
2093 EVEX_W_0F5C_P_3,
2094 EVEX_W_0F5D_P_0,
2095 EVEX_W_0F5D_P_1,
2096 EVEX_W_0F5D_P_2,
2097 EVEX_W_0F5D_P_3,
2098 EVEX_W_0F5E_P_0,
2099 EVEX_W_0F5E_P_1,
2100 EVEX_W_0F5E_P_2,
2101 EVEX_W_0F5E_P_3,
2102 EVEX_W_0F5F_P_0,
2103 EVEX_W_0F5F_P_1,
2104 EVEX_W_0F5F_P_2,
2105 EVEX_W_0F5F_P_3,
2106 EVEX_W_0F62_P_2,
2107 EVEX_W_0F66_P_2,
2108 EVEX_W_0F6A_P_2,
1ba585e8 2109 EVEX_W_0F6B_P_2,
43234a1e
L
2110 EVEX_W_0F6C_P_2,
2111 EVEX_W_0F6D_P_2,
2112 EVEX_W_0F6E_P_2,
2113 EVEX_W_0F6F_P_1,
2114 EVEX_W_0F6F_P_2,
1ba585e8 2115 EVEX_W_0F6F_P_3,
43234a1e
L
2116 EVEX_W_0F70_P_2,
2117 EVEX_W_0F72_R_2_P_2,
2118 EVEX_W_0F72_R_6_P_2,
2119 EVEX_W_0F73_R_2_P_2,
2120 EVEX_W_0F73_R_6_P_2,
2121 EVEX_W_0F76_P_2,
2122 EVEX_W_0F78_P_0,
90a915bf 2123 EVEX_W_0F78_P_2,
43234a1e 2124 EVEX_W_0F79_P_0,
90a915bf 2125 EVEX_W_0F79_P_2,
43234a1e 2126 EVEX_W_0F7A_P_1,
90a915bf 2127 EVEX_W_0F7A_P_2,
43234a1e
L
2128 EVEX_W_0F7A_P_3,
2129 EVEX_W_0F7B_P_1,
90a915bf 2130 EVEX_W_0F7B_P_2,
43234a1e
L
2131 EVEX_W_0F7B_P_3,
2132 EVEX_W_0F7E_P_1,
2133 EVEX_W_0F7E_P_2,
2134 EVEX_W_0F7F_P_1,
2135 EVEX_W_0F7F_P_2,
1ba585e8 2136 EVEX_W_0F7F_P_3,
43234a1e
L
2137 EVEX_W_0FC2_P_0,
2138 EVEX_W_0FC2_P_1,
2139 EVEX_W_0FC2_P_2,
2140 EVEX_W_0FC2_P_3,
2141 EVEX_W_0FC6_P_0,
2142 EVEX_W_0FC6_P_2,
2143 EVEX_W_0FD2_P_2,
2144 EVEX_W_0FD3_P_2,
2145 EVEX_W_0FD4_P_2,
2146 EVEX_W_0FD6_P_2,
2147 EVEX_W_0FE6_P_1,
2148 EVEX_W_0FE6_P_2,
2149 EVEX_W_0FE6_P_3,
2150 EVEX_W_0FE7_P_2,
2151 EVEX_W_0FF2_P_2,
2152 EVEX_W_0FF3_P_2,
2153 EVEX_W_0FF4_P_2,
2154 EVEX_W_0FFA_P_2,
2155 EVEX_W_0FFB_P_2,
2156 EVEX_W_0FFE_P_2,
2157 EVEX_W_0F380C_P_2,
2158 EVEX_W_0F380D_P_2,
1ba585e8
IT
2159 EVEX_W_0F3810_P_1,
2160 EVEX_W_0F3810_P_2,
43234a1e 2161 EVEX_W_0F3811_P_1,
1ba585e8 2162 EVEX_W_0F3811_P_2,
43234a1e 2163 EVEX_W_0F3812_P_1,
1ba585e8 2164 EVEX_W_0F3812_P_2,
43234a1e
L
2165 EVEX_W_0F3813_P_1,
2166 EVEX_W_0F3813_P_2,
2167 EVEX_W_0F3814_P_1,
2168 EVEX_W_0F3815_P_1,
2169 EVEX_W_0F3818_P_2,
2170 EVEX_W_0F3819_P_2,
2171 EVEX_W_0F381A_P_2,
2172 EVEX_W_0F381B_P_2,
2173 EVEX_W_0F381E_P_2,
2174 EVEX_W_0F381F_P_2,
1ba585e8 2175 EVEX_W_0F3820_P_1,
43234a1e
L
2176 EVEX_W_0F3821_P_1,
2177 EVEX_W_0F3822_P_1,
2178 EVEX_W_0F3823_P_1,
2179 EVEX_W_0F3824_P_1,
2180 EVEX_W_0F3825_P_1,
2181 EVEX_W_0F3825_P_2,
1ba585e8
IT
2182 EVEX_W_0F3826_P_1,
2183 EVEX_W_0F3826_P_2,
2184 EVEX_W_0F3828_P_1,
43234a1e 2185 EVEX_W_0F3828_P_2,
1ba585e8 2186 EVEX_W_0F3829_P_1,
43234a1e
L
2187 EVEX_W_0F3829_P_2,
2188 EVEX_W_0F382A_P_1,
2189 EVEX_W_0F382A_P_2,
1ba585e8
IT
2190 EVEX_W_0F382B_P_2,
2191 EVEX_W_0F3830_P_1,
43234a1e
L
2192 EVEX_W_0F3831_P_1,
2193 EVEX_W_0F3832_P_1,
2194 EVEX_W_0F3833_P_1,
2195 EVEX_W_0F3834_P_1,
2196 EVEX_W_0F3835_P_1,
2197 EVEX_W_0F3835_P_2,
2198 EVEX_W_0F3837_P_2,
90a915bf
IT
2199 EVEX_W_0F3838_P_1,
2200 EVEX_W_0F3839_P_1,
43234a1e
L
2201 EVEX_W_0F383A_P_1,
2202 EVEX_W_0F3840_P_2,
ee6872be 2203 EVEX_W_0F3854_P_2,
620214f7 2204 EVEX_W_0F3855_P_2,
43234a1e
L
2205 EVEX_W_0F3858_P_2,
2206 EVEX_W_0F3859_P_2,
2207 EVEX_W_0F385A_P_2,
2208 EVEX_W_0F385B_P_2,
53467f57
IT
2209 EVEX_W_0F3862_P_2,
2210 EVEX_W_0F3863_P_2,
1ba585e8 2211 EVEX_W_0F3866_P_2,
53467f57
IT
2212 EVEX_W_0F3870_P_2,
2213 EVEX_W_0F3871_P_2,
2214 EVEX_W_0F3872_P_2,
2215 EVEX_W_0F3873_P_2,
1ba585e8
IT
2216 EVEX_W_0F3875_P_2,
2217 EVEX_W_0F3878_P_2,
2218 EVEX_W_0F3879_P_2,
2219 EVEX_W_0F387A_P_2,
2220 EVEX_W_0F387B_P_2,
2221 EVEX_W_0F387D_P_2,
14f195c9 2222 EVEX_W_0F3883_P_2,
1ba585e8 2223 EVEX_W_0F388D_P_2,
43234a1e
L
2224 EVEX_W_0F3891_P_2,
2225 EVEX_W_0F3893_P_2,
2226 EVEX_W_0F38A1_P_2,
2227 EVEX_W_0F38A3_P_2,
2228 EVEX_W_0F38C7_R_1_P_2,
2229 EVEX_W_0F38C7_R_2_P_2,
2230 EVEX_W_0F38C7_R_5_P_2,
2231 EVEX_W_0F38C7_R_6_P_2,
2232
2233 EVEX_W_0F3A00_P_2,
2234 EVEX_W_0F3A01_P_2,
2235 EVEX_W_0F3A04_P_2,
2236 EVEX_W_0F3A05_P_2,
2237 EVEX_W_0F3A08_P_2,
2238 EVEX_W_0F3A09_P_2,
2239 EVEX_W_0F3A0A_P_2,
2240 EVEX_W_0F3A0B_P_2,
90a915bf 2241 EVEX_W_0F3A16_P_2,
43234a1e
L
2242 EVEX_W_0F3A18_P_2,
2243 EVEX_W_0F3A19_P_2,
2244 EVEX_W_0F3A1A_P_2,
2245 EVEX_W_0F3A1B_P_2,
2246 EVEX_W_0F3A1D_P_2,
2247 EVEX_W_0F3A21_P_2,
90a915bf 2248 EVEX_W_0F3A22_P_2,
43234a1e
L
2249 EVEX_W_0F3A23_P_2,
2250 EVEX_W_0F3A38_P_2,
2251 EVEX_W_0F3A39_P_2,
2252 EVEX_W_0F3A3A_P_2,
2253 EVEX_W_0F3A3B_P_2,
1ba585e8
IT
2254 EVEX_W_0F3A3E_P_2,
2255 EVEX_W_0F3A3F_P_2,
2256 EVEX_W_0F3A42_P_2,
90a915bf
IT
2257 EVEX_W_0F3A43_P_2,
2258 EVEX_W_0F3A50_P_2,
2259 EVEX_W_0F3A51_P_2,
2260 EVEX_W_0F3A56_P_2,
2261 EVEX_W_0F3A57_P_2,
2262 EVEX_W_0F3A66_P_2,
53467f57
IT
2263 EVEX_W_0F3A67_P_2,
2264 EVEX_W_0F3A70_P_2,
2265 EVEX_W_0F3A71_P_2,
2266 EVEX_W_0F3A72_P_2,
48521003
IT
2267 EVEX_W_0F3A73_P_2,
2268 EVEX_W_0F3ACE_P_2,
2269 EVEX_W_0F3ACF_P_2
9e30b8e0
L
2270};
2271
26ca5450 2272typedef void (*op_rtn) (int bytemode, int sizeflag);
252b5132
RH
2273
2274struct dis386 {
2da11e11 2275 const char *name;
ce518a5f
L
2276 struct
2277 {
2278 op_rtn rtn;
2279 int bytemode;
2280 } op[MAX_OPERANDS];
bf890a93 2281 unsigned int prefix_requirement;
252b5132
RH
2282};
2283
2284/* Upper case letters in the instruction names here are macros.
2285 'A' => print 'b' if no register operands or suffix_always is true
2286 'B' => print 'b' if suffix_always is true
9306ca4a 2287 'C' => print 's' or 'l' ('w' or 'd' in Intel mode) depending on operand
98b528ac 2288 size prefix
ed7841b3 2289 'D' => print 'w' if no register operands or 'w', 'l' or 'q', if
98b528ac 2290 suffix_always is true
252b5132 2291 'E' => print 'e' if 32-bit form of jcxz
3ffd33cf 2292 'F' => print 'w' or 'l' depending on address size prefix (loop insns)
52fd6d94 2293 'G' => print 'w' or 'l' depending on operand size prefix (i/o insns)
5dd0794d 2294 'H' => print ",pt" or ",pn" branch hint
9306ca4a 2295 'I' => honor following macro letter even in Intel mode (implemented only
98b528ac 2296 for some of the macro letters)
9306ca4a 2297 'J' => print 'l'
42903f7f 2298 'K' => print 'd' or 'q' if rex prefix is present.
252b5132 2299 'L' => print 'l' if suffix_always is true
9d141669 2300 'M' => print 'r' if intel_mnemonic is false.
252b5132 2301 'N' => print 'n' if instruction has no wait "prefix"
a35ca55a 2302 'O' => print 'd' or 'o' (or 'q' in Intel mode)
52b15da3 2303 'P' => print 'w', 'l' or 'q' if instruction has an operand size prefix,
98b528ac
L
2304 or suffix_always is true. print 'q' if rex prefix is present.
2305 'Q' => print 'w', 'l' or 'q' for memory operand or suffix_always
2306 is true
a35ca55a 2307 'R' => print 'w', 'l' or 'q' ('d' for 'l' and 'e' in Intel mode)
52b15da3 2308 'S' => print 'w', 'l' or 'q' if suffix_always is true
a72d2af2
L
2309 'T' => print 'q' in 64bit mode if instruction has no operand size
2310 prefix and behave as 'P' otherwise
2311 'U' => print 'q' in 64bit mode if instruction has no operand size
2312 prefix and behave as 'Q' otherwise
2313 'V' => print 'q' in 64bit mode if instruction has no operand size
2314 prefix and behave as 'S' otherwise
a35ca55a 2315 'W' => print 'b', 'w' or 'l' ('d' in Intel mode)
9306ca4a 2316 'X' => print 's', 'd' depending on data16 prefix (for XMM)
9646c87b 2317 'Y' unused.
6dd5059a 2318 'Z' => print 'q' in 64bit mode and behave as 'L' otherwise
9d141669 2319 '!' => change condition from true to false or from false to true.
98b528ac 2320 '%' => add 1 upper case letter to the macro.
a72d2af2
L
2321 '^' => print 'w' or 'l' depending on operand size prefix or
2322 suffix_always is true (lcall/ljmp).
5db04b09
L
2323 '@' => print 'q' for Intel64 ISA, 'w' or 'q' for AMD64 ISA depending
2324 on operand size prefix.
07f5af7d
L
2325 '&' => print 'q' in 64bit mode for Intel64 ISA or if instruction
2326 has no operand size prefix for AMD64 ISA, behave as 'P'
2327 otherwise
98b528ac
L
2328
2329 2 upper case letter macros:
04d824a4
JB
2330 "XY" => print 'x' or 'y' if suffix_always is true or no register
2331 operands and no broadcast.
2332 "XZ" => print 'x', 'y', or 'z' if suffix_always is true or no
2333 register operands and no broadcast.
4b06377f
L
2334 "XW" => print 's', 'd' depending on the VEX.W bit (for FMA)
2335 "LQ" => print 'l' ('d' in Intel mode) or 'q' for memory operand
98b528ac 2336 or suffix_always is true
4b06377f
L
2337 "LB" => print "abs" in 64bit mode and behave as 'B' otherwise
2338 "LS" => print "abs" in 64bit mode and behave as 'S' otherwise
2339 "LV" => print "abs" for 64bit operand and behave as 'S' otherwise
6c30d220 2340 "LW" => print 'd', 'q' depending on the VEX.W bit
4b4c407a
L
2341 "LP" => print 'w' or 'l' ('d' in Intel mode) if instruction has
2342 an operand size prefix, or suffix_always is true. print
2343 'q' if rex prefix is present.
52b15da3 2344
6439fc28
AM
2345 Many of the above letters print nothing in Intel mode. See "putop"
2346 for the details.
52b15da3 2347
6439fc28 2348 Braces '{' and '}', and vertical bars '|', indicate alternative
7c52e0e8 2349 mnemonic strings for AT&T and Intel. */
252b5132 2350
6439fc28 2351static const struct dis386 dis386[] = {
252b5132 2352 /* 00 */
bf890a93
IT
2353 { "addB", { Ebh1, Gb }, 0 },
2354 { "addS", { Evh1, Gv }, 0 },
2355 { "addB", { Gb, EbS }, 0 },
2356 { "addS", { Gv, EvS }, 0 },
2357 { "addB", { AL, Ib }, 0 },
2358 { "addS", { eAX, Iv }, 0 },
4e7d34a6
L
2359 { X86_64_TABLE (X86_64_06) },
2360 { X86_64_TABLE (X86_64_07) },
252b5132 2361 /* 08 */
bf890a93
IT
2362 { "orB", { Ebh1, Gb }, 0 },
2363 { "orS", { Evh1, Gv }, 0 },
2364 { "orB", { Gb, EbS }, 0 },
2365 { "orS", { Gv, EvS }, 0 },
2366 { "orB", { AL, Ib }, 0 },
2367 { "orS", { eAX, Iv }, 0 },
4e7d34a6 2368 { X86_64_TABLE (X86_64_0D) },
592d1631 2369 { Bad_Opcode }, /* 0x0f extended opcode escape */
252b5132 2370 /* 10 */
bf890a93
IT
2371 { "adcB", { Ebh1, Gb }, 0 },
2372 { "adcS", { Evh1, Gv }, 0 },
2373 { "adcB", { Gb, EbS }, 0 },
2374 { "adcS", { Gv, EvS }, 0 },
2375 { "adcB", { AL, Ib }, 0 },
2376 { "adcS", { eAX, Iv }, 0 },
4e7d34a6
L
2377 { X86_64_TABLE (X86_64_16) },
2378 { X86_64_TABLE (X86_64_17) },
252b5132 2379 /* 18 */
bf890a93
IT
2380 { "sbbB", { Ebh1, Gb }, 0 },
2381 { "sbbS", { Evh1, Gv }, 0 },
2382 { "sbbB", { Gb, EbS }, 0 },
2383 { "sbbS", { Gv, EvS }, 0 },
2384 { "sbbB", { AL, Ib }, 0 },
2385 { "sbbS", { eAX, Iv }, 0 },
4e7d34a6
L
2386 { X86_64_TABLE (X86_64_1E) },
2387 { X86_64_TABLE (X86_64_1F) },
252b5132 2388 /* 20 */
bf890a93
IT
2389 { "andB", { Ebh1, Gb }, 0 },
2390 { "andS", { Evh1, Gv }, 0 },
2391 { "andB", { Gb, EbS }, 0 },
2392 { "andS", { Gv, EvS }, 0 },
2393 { "andB", { AL, Ib }, 0 },
2394 { "andS", { eAX, Iv }, 0 },
592d1631 2395 { Bad_Opcode }, /* SEG ES prefix */
4e7d34a6 2396 { X86_64_TABLE (X86_64_27) },
252b5132 2397 /* 28 */
bf890a93
IT
2398 { "subB", { Ebh1, Gb }, 0 },
2399 { "subS", { Evh1, Gv }, 0 },
2400 { "subB", { Gb, EbS }, 0 },
2401 { "subS", { Gv, EvS }, 0 },
2402 { "subB", { AL, Ib }, 0 },
2403 { "subS", { eAX, Iv }, 0 },
592d1631 2404 { Bad_Opcode }, /* SEG CS prefix */
4e7d34a6 2405 { X86_64_TABLE (X86_64_2F) },
252b5132 2406 /* 30 */
bf890a93
IT
2407 { "xorB", { Ebh1, Gb }, 0 },
2408 { "xorS", { Evh1, Gv }, 0 },
2409 { "xorB", { Gb, EbS }, 0 },
2410 { "xorS", { Gv, EvS }, 0 },
2411 { "xorB", { AL, Ib }, 0 },
2412 { "xorS", { eAX, Iv }, 0 },
592d1631 2413 { Bad_Opcode }, /* SEG SS prefix */
4e7d34a6 2414 { X86_64_TABLE (X86_64_37) },
252b5132 2415 /* 38 */
bf890a93
IT
2416 { "cmpB", { Eb, Gb }, 0 },
2417 { "cmpS", { Ev, Gv }, 0 },
2418 { "cmpB", { Gb, EbS }, 0 },
2419 { "cmpS", { Gv, EvS }, 0 },
2420 { "cmpB", { AL, Ib }, 0 },
2421 { "cmpS", { eAX, Iv }, 0 },
592d1631 2422 { Bad_Opcode }, /* SEG DS prefix */
4e7d34a6 2423 { X86_64_TABLE (X86_64_3F) },
252b5132 2424 /* 40 */
bf890a93
IT
2425 { "inc{S|}", { RMeAX }, 0 },
2426 { "inc{S|}", { RMeCX }, 0 },
2427 { "inc{S|}", { RMeDX }, 0 },
2428 { "inc{S|}", { RMeBX }, 0 },
2429 { "inc{S|}", { RMeSP }, 0 },
2430 { "inc{S|}", { RMeBP }, 0 },
2431 { "inc{S|}", { RMeSI }, 0 },
2432 { "inc{S|}", { RMeDI }, 0 },
252b5132 2433 /* 48 */
bf890a93
IT
2434 { "dec{S|}", { RMeAX }, 0 },
2435 { "dec{S|}", { RMeCX }, 0 },
2436 { "dec{S|}", { RMeDX }, 0 },
2437 { "dec{S|}", { RMeBX }, 0 },
2438 { "dec{S|}", { RMeSP }, 0 },
2439 { "dec{S|}", { RMeBP }, 0 },
2440 { "dec{S|}", { RMeSI }, 0 },
2441 { "dec{S|}", { RMeDI }, 0 },
252b5132 2442 /* 50 */
bf890a93
IT
2443 { "pushV", { RMrAX }, 0 },
2444 { "pushV", { RMrCX }, 0 },
2445 { "pushV", { RMrDX }, 0 },
2446 { "pushV", { RMrBX }, 0 },
2447 { "pushV", { RMrSP }, 0 },
2448 { "pushV", { RMrBP }, 0 },
2449 { "pushV", { RMrSI }, 0 },
2450 { "pushV", { RMrDI }, 0 },
252b5132 2451 /* 58 */
bf890a93
IT
2452 { "popV", { RMrAX }, 0 },
2453 { "popV", { RMrCX }, 0 },
2454 { "popV", { RMrDX }, 0 },
2455 { "popV", { RMrBX }, 0 },
2456 { "popV", { RMrSP }, 0 },
2457 { "popV", { RMrBP }, 0 },
2458 { "popV", { RMrSI }, 0 },
2459 { "popV", { RMrDI }, 0 },
252b5132 2460 /* 60 */
4e7d34a6
L
2461 { X86_64_TABLE (X86_64_60) },
2462 { X86_64_TABLE (X86_64_61) },
2463 { X86_64_TABLE (X86_64_62) },
2464 { X86_64_TABLE (X86_64_63) },
592d1631
L
2465 { Bad_Opcode }, /* seg fs */
2466 { Bad_Opcode }, /* seg gs */
2467 { Bad_Opcode }, /* op size prefix */
2468 { Bad_Opcode }, /* adr size prefix */
252b5132 2469 /* 68 */
bf890a93
IT
2470 { "pushT", { sIv }, 0 },
2471 { "imulS", { Gv, Ev, Iv }, 0 },
2472 { "pushT", { sIbT }, 0 },
2473 { "imulS", { Gv, Ev, sIb }, 0 },
2474 { "ins{b|}", { Ybr, indirDX }, 0 },
4e7d34a6 2475 { X86_64_TABLE (X86_64_6D) },
bf890a93 2476 { "outs{b|}", { indirDXr, Xb }, 0 },
4e7d34a6 2477 { X86_64_TABLE (X86_64_6F) },
252b5132 2478 /* 70 */
bf890a93
IT
2479 { "joH", { Jb, BND, cond_jump_flag }, 0 },
2480 { "jnoH", { Jb, BND, cond_jump_flag }, 0 },
2481 { "jbH", { Jb, BND, cond_jump_flag }, 0 },
2482 { "jaeH", { Jb, BND, cond_jump_flag }, 0 },
2483 { "jeH", { Jb, BND, cond_jump_flag }, 0 },
2484 { "jneH", { Jb, BND, cond_jump_flag }, 0 },
2485 { "jbeH", { Jb, BND, cond_jump_flag }, 0 },
2486 { "jaH", { Jb, BND, cond_jump_flag }, 0 },
252b5132 2487 /* 78 */
bf890a93
IT
2488 { "jsH", { Jb, BND, cond_jump_flag }, 0 },
2489 { "jnsH", { Jb, BND, cond_jump_flag }, 0 },
2490 { "jpH", { Jb, BND, cond_jump_flag }, 0 },
2491 { "jnpH", { Jb, BND, cond_jump_flag }, 0 },
2492 { "jlH", { Jb, BND, cond_jump_flag }, 0 },
2493 { "jgeH", { Jb, BND, cond_jump_flag }, 0 },
2494 { "jleH", { Jb, BND, cond_jump_flag }, 0 },
2495 { "jgH", { Jb, BND, cond_jump_flag }, 0 },
252b5132 2496 /* 80 */
1ceb70f8
L
2497 { REG_TABLE (REG_80) },
2498 { REG_TABLE (REG_81) },
d039fef3 2499 { X86_64_TABLE (X86_64_82) },
7148c369 2500 { REG_TABLE (REG_83) },
bf890a93
IT
2501 { "testB", { Eb, Gb }, 0 },
2502 { "testS", { Ev, Gv }, 0 },
2503 { "xchgB", { Ebh2, Gb }, 0 },
2504 { "xchgS", { Evh2, Gv }, 0 },
252b5132 2505 /* 88 */
bf890a93
IT
2506 { "movB", { Ebh3, Gb }, 0 },
2507 { "movS", { Evh3, Gv }, 0 },
2508 { "movB", { Gb, EbS }, 0 },
2509 { "movS", { Gv, EvS }, 0 },
2510 { "movD", { Sv, Sw }, 0 },
1ceb70f8 2511 { MOD_TABLE (MOD_8D) },
bf890a93 2512 { "movD", { Sw, Sv }, 0 },
1ceb70f8 2513 { REG_TABLE (REG_8F) },
252b5132 2514 /* 90 */
1ceb70f8 2515 { PREFIX_TABLE (PREFIX_90) },
bf890a93
IT
2516 { "xchgS", { RMeCX, eAX }, 0 },
2517 { "xchgS", { RMeDX, eAX }, 0 },
2518 { "xchgS", { RMeBX, eAX }, 0 },
2519 { "xchgS", { RMeSP, eAX }, 0 },
2520 { "xchgS", { RMeBP, eAX }, 0 },
2521 { "xchgS", { RMeSI, eAX }, 0 },
2522 { "xchgS", { RMeDI, eAX }, 0 },
252b5132 2523 /* 98 */
bf890a93
IT
2524 { "cW{t|}R", { XX }, 0 },
2525 { "cR{t|}O", { XX }, 0 },
4e7d34a6 2526 { X86_64_TABLE (X86_64_9A) },
592d1631 2527 { Bad_Opcode }, /* fwait */
bf890a93
IT
2528 { "pushfT", { XX }, 0 },
2529 { "popfT", { XX }, 0 },
2530 { "sahf", { XX }, 0 },
2531 { "lahf", { XX }, 0 },
252b5132 2532 /* a0 */
bf890a93
IT
2533 { "mov%LB", { AL, Ob }, 0 },
2534 { "mov%LS", { eAX, Ov }, 0 },
2535 { "mov%LB", { Ob, AL }, 0 },
2536 { "mov%LS", { Ov, eAX }, 0 },
2537 { "movs{b|}", { Ybr, Xb }, 0 },
2538 { "movs{R|}", { Yvr, Xv }, 0 },
2539 { "cmps{b|}", { Xb, Yb }, 0 },
2540 { "cmps{R|}", { Xv, Yv }, 0 },
252b5132 2541 /* a8 */
bf890a93
IT
2542 { "testB", { AL, Ib }, 0 },
2543 { "testS", { eAX, Iv }, 0 },
2544 { "stosB", { Ybr, AL }, 0 },
2545 { "stosS", { Yvr, eAX }, 0 },
2546 { "lodsB", { ALr, Xb }, 0 },
2547 { "lodsS", { eAXr, Xv }, 0 },
2548 { "scasB", { AL, Yb }, 0 },
2549 { "scasS", { eAX, Yv }, 0 },
252b5132 2550 /* b0 */
bf890a93
IT
2551 { "movB", { RMAL, Ib }, 0 },
2552 { "movB", { RMCL, Ib }, 0 },
2553 { "movB", { RMDL, Ib }, 0 },
2554 { "movB", { RMBL, Ib }, 0 },
2555 { "movB", { RMAH, Ib }, 0 },
2556 { "movB", { RMCH, Ib }, 0 },
2557 { "movB", { RMDH, Ib }, 0 },
2558 { "movB", { RMBH, Ib }, 0 },
252b5132 2559 /* b8 */
bf890a93
IT
2560 { "mov%LV", { RMeAX, Iv64 }, 0 },
2561 { "mov%LV", { RMeCX, Iv64 }, 0 },
2562 { "mov%LV", { RMeDX, Iv64 }, 0 },
2563 { "mov%LV", { RMeBX, Iv64 }, 0 },
2564 { "mov%LV", { RMeSP, Iv64 }, 0 },
2565 { "mov%LV", { RMeBP, Iv64 }, 0 },
2566 { "mov%LV", { RMeSI, Iv64 }, 0 },
2567 { "mov%LV", { RMeDI, Iv64 }, 0 },
252b5132 2568 /* c0 */
1ceb70f8
L
2569 { REG_TABLE (REG_C0) },
2570 { REG_TABLE (REG_C1) },
bf890a93
IT
2571 { "retT", { Iw, BND }, 0 },
2572 { "retT", { BND }, 0 },
4e7d34a6
L
2573 { X86_64_TABLE (X86_64_C4) },
2574 { X86_64_TABLE (X86_64_C5) },
1ceb70f8
L
2575 { REG_TABLE (REG_C6) },
2576 { REG_TABLE (REG_C7) },
252b5132 2577 /* c8 */
bf890a93
IT
2578 { "enterT", { Iw, Ib }, 0 },
2579 { "leaveT", { XX }, 0 },
2580 { "Jret{|f}P", { Iw }, 0 },
2581 { "Jret{|f}P", { XX }, 0 },
2582 { "int3", { XX }, 0 },
2583 { "int", { Ib }, 0 },
4e7d34a6 2584 { X86_64_TABLE (X86_64_CE) },
bf890a93 2585 { "iret%LP", { XX }, 0 },
252b5132 2586 /* d0 */
1ceb70f8
L
2587 { REG_TABLE (REG_D0) },
2588 { REG_TABLE (REG_D1) },
2589 { REG_TABLE (REG_D2) },
2590 { REG_TABLE (REG_D3) },
4e7d34a6
L
2591 { X86_64_TABLE (X86_64_D4) },
2592 { X86_64_TABLE (X86_64_D5) },
592d1631 2593 { Bad_Opcode },
bf890a93 2594 { "xlat", { DSBX }, 0 },
252b5132
RH
2595 /* d8 */
2596 { FLOAT },
2597 { FLOAT },
2598 { FLOAT },
2599 { FLOAT },
2600 { FLOAT },
2601 { FLOAT },
2602 { FLOAT },
2603 { FLOAT },
2604 /* e0 */
bf890a93
IT
2605 { "loopneFH", { Jb, XX, loop_jcxz_flag }, 0 },
2606 { "loopeFH", { Jb, XX, loop_jcxz_flag }, 0 },
2607 { "loopFH", { Jb, XX, loop_jcxz_flag }, 0 },
2608 { "jEcxzH", { Jb, XX, loop_jcxz_flag }, 0 },
2609 { "inB", { AL, Ib }, 0 },
2610 { "inG", { zAX, Ib }, 0 },
2611 { "outB", { Ib, AL }, 0 },
2612 { "outG", { Ib, zAX }, 0 },
252b5132 2613 /* e8 */
a72d2af2
L
2614 { X86_64_TABLE (X86_64_E8) },
2615 { X86_64_TABLE (X86_64_E9) },
4e7d34a6 2616 { X86_64_TABLE (X86_64_EA) },
bf890a93
IT
2617 { "jmp", { Jb, BND }, 0 },
2618 { "inB", { AL, indirDX }, 0 },
2619 { "inG", { zAX, indirDX }, 0 },
2620 { "outB", { indirDX, AL }, 0 },
2621 { "outG", { indirDX, zAX }, 0 },
252b5132 2622 /* f0 */
592d1631 2623 { Bad_Opcode }, /* lock prefix */
bf890a93 2624 { "icebp", { XX }, 0 },
592d1631
L
2625 { Bad_Opcode }, /* repne */
2626 { Bad_Opcode }, /* repz */
bf890a93
IT
2627 { "hlt", { XX }, 0 },
2628 { "cmc", { XX }, 0 },
1ceb70f8
L
2629 { REG_TABLE (REG_F6) },
2630 { REG_TABLE (REG_F7) },
252b5132 2631 /* f8 */
bf890a93
IT
2632 { "clc", { XX }, 0 },
2633 { "stc", { XX }, 0 },
2634 { "cli", { XX }, 0 },
2635 { "sti", { XX }, 0 },
2636 { "cld", { XX }, 0 },
2637 { "std", { XX }, 0 },
1ceb70f8
L
2638 { REG_TABLE (REG_FE) },
2639 { REG_TABLE (REG_FF) },
252b5132
RH
2640};
2641
6439fc28 2642static const struct dis386 dis386_twobyte[] = {
252b5132 2643 /* 00 */
1ceb70f8
L
2644 { REG_TABLE (REG_0F00 ) },
2645 { REG_TABLE (REG_0F01 ) },
bf890a93
IT
2646 { "larS", { Gv, Ew }, 0 },
2647 { "lslS", { Gv, Ew }, 0 },
592d1631 2648 { Bad_Opcode },
bf890a93
IT
2649 { "syscall", { XX }, 0 },
2650 { "clts", { XX }, 0 },
2651 { "sysret%LP", { XX }, 0 },
252b5132 2652 /* 08 */
bf890a93 2653 { "invd", { XX }, 0 },
3233d7d0 2654 { PREFIX_TABLE (PREFIX_0F09) },
592d1631 2655 { Bad_Opcode },
bf890a93 2656 { "ud2", { XX }, 0 },
592d1631 2657 { Bad_Opcode },
b5b1fc4f 2658 { REG_TABLE (REG_0F0D) },
bf890a93
IT
2659 { "femms", { XX }, 0 },
2660 { "", { MX, EM, OPSUF }, 0 }, /* See OP_3DNowSuffix. */
252b5132 2661 /* 10 */
1ceb70f8
L
2662 { PREFIX_TABLE (PREFIX_0F10) },
2663 { PREFIX_TABLE (PREFIX_0F11) },
2664 { PREFIX_TABLE (PREFIX_0F12) },
2665 { MOD_TABLE (MOD_0F13) },
507bd325
L
2666 { "unpcklpX", { XM, EXx }, PREFIX_OPCODE },
2667 { "unpckhpX", { XM, EXx }, PREFIX_OPCODE },
1ceb70f8
L
2668 { PREFIX_TABLE (PREFIX_0F16) },
2669 { MOD_TABLE (MOD_0F17) },
252b5132 2670 /* 18 */
1ceb70f8 2671 { REG_TABLE (REG_0F18) },
bf890a93 2672 { "nopQ", { Ev }, 0 },
7e8b059b
L
2673 { PREFIX_TABLE (PREFIX_0F1A) },
2674 { PREFIX_TABLE (PREFIX_0F1B) },
c48935d7 2675 { PREFIX_TABLE (PREFIX_0F1C) },
bf890a93 2676 { "nopQ", { Ev }, 0 },
603555e5 2677 { PREFIX_TABLE (PREFIX_0F1E) },
bf890a93 2678 { "nopQ", { Ev }, 0 },
252b5132 2679 /* 20 */
bf890a93
IT
2680 { "movZ", { Rm, Cm }, 0 },
2681 { "movZ", { Rm, Dm }, 0 },
2682 { "movZ", { Cm, Rm }, 0 },
2683 { "movZ", { Dm, Rm }, 0 },
1ceb70f8 2684 { MOD_TABLE (MOD_0F24) },
592d1631 2685 { Bad_Opcode },
1ceb70f8 2686 { MOD_TABLE (MOD_0F26) },
592d1631 2687 { Bad_Opcode },
252b5132 2688 /* 28 */
507bd325
L
2689 { "movapX", { XM, EXx }, PREFIX_OPCODE },
2690 { "movapX", { EXxS, XM }, PREFIX_OPCODE },
1ceb70f8
L
2691 { PREFIX_TABLE (PREFIX_0F2A) },
2692 { PREFIX_TABLE (PREFIX_0F2B) },
2693 { PREFIX_TABLE (PREFIX_0F2C) },
2694 { PREFIX_TABLE (PREFIX_0F2D) },
2695 { PREFIX_TABLE (PREFIX_0F2E) },
2696 { PREFIX_TABLE (PREFIX_0F2F) },
252b5132 2697 /* 30 */
bf890a93
IT
2698 { "wrmsr", { XX }, 0 },
2699 { "rdtsc", { XX }, 0 },
2700 { "rdmsr", { XX }, 0 },
2701 { "rdpmc", { XX }, 0 },
2702 { "sysenter", { XX }, 0 },
2703 { "sysexit", { XX }, 0 },
592d1631 2704 { Bad_Opcode },
bf890a93 2705 { "getsec", { XX }, 0 },
252b5132 2706 /* 38 */
507bd325 2707 { THREE_BYTE_TABLE_PREFIX (THREE_BYTE_0F38, PREFIX_OPCODE) },
592d1631 2708 { Bad_Opcode },
507bd325 2709 { THREE_BYTE_TABLE_PREFIX (THREE_BYTE_0F3A, PREFIX_OPCODE) },
592d1631
L
2710 { Bad_Opcode },
2711 { Bad_Opcode },
2712 { Bad_Opcode },
2713 { Bad_Opcode },
2714 { Bad_Opcode },
252b5132 2715 /* 40 */
bf890a93
IT
2716 { "cmovoS", { Gv, Ev }, 0 },
2717 { "cmovnoS", { Gv, Ev }, 0 },
2718 { "cmovbS", { Gv, Ev }, 0 },
2719 { "cmovaeS", { Gv, Ev }, 0 },
2720 { "cmoveS", { Gv, Ev }, 0 },
2721 { "cmovneS", { Gv, Ev }, 0 },
2722 { "cmovbeS", { Gv, Ev }, 0 },
2723 { "cmovaS", { Gv, Ev }, 0 },
252b5132 2724 /* 48 */
bf890a93
IT
2725 { "cmovsS", { Gv, Ev }, 0 },
2726 { "cmovnsS", { Gv, Ev }, 0 },
2727 { "cmovpS", { Gv, Ev }, 0 },
2728 { "cmovnpS", { Gv, Ev }, 0 },
2729 { "cmovlS", { Gv, Ev }, 0 },
2730 { "cmovgeS", { Gv, Ev }, 0 },
2731 { "cmovleS", { Gv, Ev }, 0 },
2732 { "cmovgS", { Gv, Ev }, 0 },
252b5132 2733 /* 50 */
75c135a8 2734 { MOD_TABLE (MOD_0F51) },
1ceb70f8
L
2735 { PREFIX_TABLE (PREFIX_0F51) },
2736 { PREFIX_TABLE (PREFIX_0F52) },
2737 { PREFIX_TABLE (PREFIX_0F53) },
507bd325
L
2738 { "andpX", { XM, EXx }, PREFIX_OPCODE },
2739 { "andnpX", { XM, EXx }, PREFIX_OPCODE },
2740 { "orpX", { XM, EXx }, PREFIX_OPCODE },
2741 { "xorpX", { XM, EXx }, PREFIX_OPCODE },
252b5132 2742 /* 58 */
1ceb70f8
L
2743 { PREFIX_TABLE (PREFIX_0F58) },
2744 { PREFIX_TABLE (PREFIX_0F59) },
2745 { PREFIX_TABLE (PREFIX_0F5A) },
2746 { PREFIX_TABLE (PREFIX_0F5B) },
2747 { PREFIX_TABLE (PREFIX_0F5C) },
2748 { PREFIX_TABLE (PREFIX_0F5D) },
2749 { PREFIX_TABLE (PREFIX_0F5E) },
2750 { PREFIX_TABLE (PREFIX_0F5F) },
252b5132 2751 /* 60 */
1ceb70f8
L
2752 { PREFIX_TABLE (PREFIX_0F60) },
2753 { PREFIX_TABLE (PREFIX_0F61) },
2754 { PREFIX_TABLE (PREFIX_0F62) },
507bd325
L
2755 { "packsswb", { MX, EM }, PREFIX_OPCODE },
2756 { "pcmpgtb", { MX, EM }, PREFIX_OPCODE },
2757 { "pcmpgtw", { MX, EM }, PREFIX_OPCODE },
2758 { "pcmpgtd", { MX, EM }, PREFIX_OPCODE },
2759 { "packuswb", { MX, EM }, PREFIX_OPCODE },
252b5132 2760 /* 68 */
507bd325
L
2761 { "punpckhbw", { MX, EM }, PREFIX_OPCODE },
2762 { "punpckhwd", { MX, EM }, PREFIX_OPCODE },
2763 { "punpckhdq", { MX, EM }, PREFIX_OPCODE },
2764 { "packssdw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8
L
2765 { PREFIX_TABLE (PREFIX_0F6C) },
2766 { PREFIX_TABLE (PREFIX_0F6D) },
507bd325 2767 { "movK", { MX, Edq }, PREFIX_OPCODE },
1ceb70f8 2768 { PREFIX_TABLE (PREFIX_0F6F) },
252b5132 2769 /* 70 */
1ceb70f8
L
2770 { PREFIX_TABLE (PREFIX_0F70) },
2771 { REG_TABLE (REG_0F71) },
2772 { REG_TABLE (REG_0F72) },
2773 { REG_TABLE (REG_0F73) },
507bd325
L
2774 { "pcmpeqb", { MX, EM }, PREFIX_OPCODE },
2775 { "pcmpeqw", { MX, EM }, PREFIX_OPCODE },
2776 { "pcmpeqd", { MX, EM }, PREFIX_OPCODE },
2777 { "emms", { XX }, PREFIX_OPCODE },
252b5132 2778 /* 78 */
1ceb70f8
L
2779 { PREFIX_TABLE (PREFIX_0F78) },
2780 { PREFIX_TABLE (PREFIX_0F79) },
1f334aeb 2781 { Bad_Opcode },
592d1631 2782 { Bad_Opcode },
1ceb70f8
L
2783 { PREFIX_TABLE (PREFIX_0F7C) },
2784 { PREFIX_TABLE (PREFIX_0F7D) },
2785 { PREFIX_TABLE (PREFIX_0F7E) },
2786 { PREFIX_TABLE (PREFIX_0F7F) },
252b5132 2787 /* 80 */
bf890a93
IT
2788 { "joH", { Jv, BND, cond_jump_flag }, 0 },
2789 { "jnoH", { Jv, BND, cond_jump_flag }, 0 },
2790 { "jbH", { Jv, BND, cond_jump_flag }, 0 },
2791 { "jaeH", { Jv, BND, cond_jump_flag }, 0 },
2792 { "jeH", { Jv, BND, cond_jump_flag }, 0 },
2793 { "jneH", { Jv, BND, cond_jump_flag }, 0 },
2794 { "jbeH", { Jv, BND, cond_jump_flag }, 0 },
2795 { "jaH", { Jv, BND, cond_jump_flag }, 0 },
252b5132 2796 /* 88 */
bf890a93
IT
2797 { "jsH", { Jv, BND, cond_jump_flag }, 0 },
2798 { "jnsH", { Jv, BND, cond_jump_flag }, 0 },
2799 { "jpH", { Jv, BND, cond_jump_flag }, 0 },
2800 { "jnpH", { Jv, BND, cond_jump_flag }, 0 },
2801 { "jlH", { Jv, BND, cond_jump_flag }, 0 },
2802 { "jgeH", { Jv, BND, cond_jump_flag }, 0 },
2803 { "jleH", { Jv, BND, cond_jump_flag }, 0 },
2804 { "jgH", { Jv, BND, cond_jump_flag }, 0 },
252b5132 2805 /* 90 */
bf890a93
IT
2806 { "seto", { Eb }, 0 },
2807 { "setno", { Eb }, 0 },
2808 { "setb", { Eb }, 0 },
2809 { "setae", { Eb }, 0 },
2810 { "sete", { Eb }, 0 },
2811 { "setne", { Eb }, 0 },
2812 { "setbe", { Eb }, 0 },
2813 { "seta", { Eb }, 0 },
252b5132 2814 /* 98 */
bf890a93
IT
2815 { "sets", { Eb }, 0 },
2816 { "setns", { Eb }, 0 },
2817 { "setp", { Eb }, 0 },
2818 { "setnp", { Eb }, 0 },
2819 { "setl", { Eb }, 0 },
2820 { "setge", { Eb }, 0 },
2821 { "setle", { Eb }, 0 },
2822 { "setg", { Eb }, 0 },
252b5132 2823 /* a0 */
bf890a93
IT
2824 { "pushT", { fs }, 0 },
2825 { "popT", { fs }, 0 },
2826 { "cpuid", { XX }, 0 },
2827 { "btS", { Ev, Gv }, 0 },
2828 { "shldS", { Ev, Gv, Ib }, 0 },
2829 { "shldS", { Ev, Gv, CL }, 0 },
1ceb70f8
L
2830 { REG_TABLE (REG_0FA6) },
2831 { REG_TABLE (REG_0FA7) },
252b5132 2832 /* a8 */
bf890a93
IT
2833 { "pushT", { gs }, 0 },
2834 { "popT", { gs }, 0 },
2835 { "rsm", { XX }, 0 },
2836 { "btsS", { Evh1, Gv }, 0 },
2837 { "shrdS", { Ev, Gv, Ib }, 0 },
2838 { "shrdS", { Ev, Gv, CL }, 0 },
1ceb70f8 2839 { REG_TABLE (REG_0FAE) },
bf890a93 2840 { "imulS", { Gv, Ev }, 0 },
252b5132 2841 /* b0 */
bf890a93
IT
2842 { "cmpxchgB", { Ebh1, Gb }, 0 },
2843 { "cmpxchgS", { Evh1, Gv }, 0 },
1ceb70f8 2844 { MOD_TABLE (MOD_0FB2) },
bf890a93 2845 { "btrS", { Evh1, Gv }, 0 },
1ceb70f8
L
2846 { MOD_TABLE (MOD_0FB4) },
2847 { MOD_TABLE (MOD_0FB5) },
bf890a93
IT
2848 { "movz{bR|x}", { Gv, Eb }, 0 },
2849 { "movz{wR|x}", { Gv, Ew }, 0 }, /* yes, there really is movzww ! */
252b5132 2850 /* b8 */
1ceb70f8 2851 { PREFIX_TABLE (PREFIX_0FB8) },
66f1eba0 2852 { "ud1S", { Gv, Ev }, 0 },
1ceb70f8 2853 { REG_TABLE (REG_0FBA) },
bf890a93 2854 { "btcS", { Evh1, Gv }, 0 },
f12dc422 2855 { PREFIX_TABLE (PREFIX_0FBC) },
1ceb70f8 2856 { PREFIX_TABLE (PREFIX_0FBD) },
bf890a93
IT
2857 { "movs{bR|x}", { Gv, Eb }, 0 },
2858 { "movs{wR|x}", { Gv, Ew }, 0 }, /* yes, there really is movsww ! */
252b5132 2859 /* c0 */
bf890a93
IT
2860 { "xaddB", { Ebh1, Gb }, 0 },
2861 { "xaddS", { Evh1, Gv }, 0 },
1ceb70f8 2862 { PREFIX_TABLE (PREFIX_0FC2) },
a8484f96 2863 { MOD_TABLE (MOD_0FC3) },
507bd325
L
2864 { "pinsrw", { MX, Edqw, Ib }, PREFIX_OPCODE },
2865 { "pextrw", { Gdq, MS, Ib }, PREFIX_OPCODE },
2866 { "shufpX", { XM, EXx, Ib }, PREFIX_OPCODE },
1ceb70f8 2867 { REG_TABLE (REG_0FC7) },
252b5132 2868 /* c8 */
bf890a93
IT
2869 { "bswap", { RMeAX }, 0 },
2870 { "bswap", { RMeCX }, 0 },
2871 { "bswap", { RMeDX }, 0 },
2872 { "bswap", { RMeBX }, 0 },
2873 { "bswap", { RMeSP }, 0 },
2874 { "bswap", { RMeBP }, 0 },
2875 { "bswap", { RMeSI }, 0 },
2876 { "bswap", { RMeDI }, 0 },
252b5132 2877 /* d0 */
1ceb70f8 2878 { PREFIX_TABLE (PREFIX_0FD0) },
507bd325
L
2879 { "psrlw", { MX, EM }, PREFIX_OPCODE },
2880 { "psrld", { MX, EM }, PREFIX_OPCODE },
2881 { "psrlq", { MX, EM }, PREFIX_OPCODE },
2882 { "paddq", { MX, EM }, PREFIX_OPCODE },
2883 { "pmullw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8 2884 { PREFIX_TABLE (PREFIX_0FD6) },
75c135a8 2885 { MOD_TABLE (MOD_0FD7) },
252b5132 2886 /* d8 */
507bd325
L
2887 { "psubusb", { MX, EM }, PREFIX_OPCODE },
2888 { "psubusw", { MX, EM }, PREFIX_OPCODE },
2889 { "pminub", { MX, EM }, PREFIX_OPCODE },
2890 { "pand", { MX, EM }, PREFIX_OPCODE },
2891 { "paddusb", { MX, EM }, PREFIX_OPCODE },
2892 { "paddusw", { MX, EM }, PREFIX_OPCODE },
2893 { "pmaxub", { MX, EM }, PREFIX_OPCODE },
2894 { "pandn", { MX, EM }, PREFIX_OPCODE },
252b5132 2895 /* e0 */
507bd325
L
2896 { "pavgb", { MX, EM }, PREFIX_OPCODE },
2897 { "psraw", { MX, EM }, PREFIX_OPCODE },
2898 { "psrad", { MX, EM }, PREFIX_OPCODE },
2899 { "pavgw", { MX, EM }, PREFIX_OPCODE },
2900 { "pmulhuw", { MX, EM }, PREFIX_OPCODE },
2901 { "pmulhw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8
L
2902 { PREFIX_TABLE (PREFIX_0FE6) },
2903 { PREFIX_TABLE (PREFIX_0FE7) },
252b5132 2904 /* e8 */
507bd325
L
2905 { "psubsb", { MX, EM }, PREFIX_OPCODE },
2906 { "psubsw", { MX, EM }, PREFIX_OPCODE },
2907 { "pminsw", { MX, EM }, PREFIX_OPCODE },
2908 { "por", { MX, EM }, PREFIX_OPCODE },
2909 { "paddsb", { MX, EM }, PREFIX_OPCODE },
2910 { "paddsw", { MX, EM }, PREFIX_OPCODE },
2911 { "pmaxsw", { MX, EM }, PREFIX_OPCODE },
2912 { "pxor", { MX, EM }, PREFIX_OPCODE },
252b5132 2913 /* f0 */
1ceb70f8 2914 { PREFIX_TABLE (PREFIX_0FF0) },
507bd325
L
2915 { "psllw", { MX, EM }, PREFIX_OPCODE },
2916 { "pslld", { MX, EM }, PREFIX_OPCODE },
2917 { "psllq", { MX, EM }, PREFIX_OPCODE },
2918 { "pmuludq", { MX, EM }, PREFIX_OPCODE },
2919 { "pmaddwd", { MX, EM }, PREFIX_OPCODE },
2920 { "psadbw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8 2921 { PREFIX_TABLE (PREFIX_0FF7) },
252b5132 2922 /* f8 */
507bd325
L
2923 { "psubb", { MX, EM }, PREFIX_OPCODE },
2924 { "psubw", { MX, EM }, PREFIX_OPCODE },
2925 { "psubd", { MX, EM }, PREFIX_OPCODE },
2926 { "psubq", { MX, EM }, PREFIX_OPCODE },
2927 { "paddb", { MX, EM }, PREFIX_OPCODE },
2928 { "paddw", { MX, EM }, PREFIX_OPCODE },
2929 { "paddd", { MX, EM }, PREFIX_OPCODE },
66f1eba0 2930 { "ud0S", { Gv, Ev }, 0 },
252b5132
RH
2931};
2932
2933static const unsigned char onebyte_has_modrm[256] = {
c608c12e
AM
2934 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2935 /* ------------------------------- */
2936 /* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 00 */
2937 /* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 10 */
2938 /* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 20 */
2939 /* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 30 */
2940 /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40 */
2941 /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50 */
2942 /* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, /* 60 */
2943 /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70 */
2944 /* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 80 */
2945 /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 90 */
2946 /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* a0 */
2947 /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* b0 */
2948 /* c0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* c0 */
2949 /* d0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* d0 */
2950 /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* e0 */
2951 /* f0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1 /* f0 */
2952 /* ------------------------------- */
2953 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
252b5132
RH
2954};
2955
2956static const unsigned char twobyte_has_modrm[256] = {
c608c12e
AM
2957 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2958 /* ------------------------------- */
252b5132 2959 /* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */
b5b1fc4f 2960 /* 10 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1f */
85f10a01 2961 /* 20 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 2f */
331d2d0d 2962 /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
252b5132 2963 /* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */
4bba6815
AM
2964 /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */
2965 /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */
85f10a01 2966 /* 70 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 7f */
252b5132
RH
2967 /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
2968 /* 90 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9f */
30d1c836 2969 /* a0 */ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1, /* af */
66f1eba0 2970 /* b0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* bf */
252b5132 2971 /* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */
ca164297 2972 /* d0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
4bba6815 2973 /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
66f1eba0 2974 /* f0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 /* ff */
c608c12e
AM
2975 /* ------------------------------- */
2976 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2977};
2978
252b5132
RH
2979static char obuf[100];
2980static char *obufp;
ea397f5b 2981static char *mnemonicendp;
252b5132
RH
2982static char scratchbuf[100];
2983static unsigned char *start_codep;
2984static unsigned char *insn_codep;
2985static unsigned char *codep;
285ca992 2986static unsigned char *end_codep;
f16cd0d5
L
2987static int last_lock_prefix;
2988static int last_repz_prefix;
2989static int last_repnz_prefix;
2990static int last_data_prefix;
2991static int last_addr_prefix;
2992static int last_rex_prefix;
2993static int last_seg_prefix;
d9949a36 2994static int fwait_prefix;
285ca992
L
2995/* The active segment register prefix. */
2996static int active_seg_prefix;
f16cd0d5
L
2997#define MAX_CODE_LENGTH 15
2998/* We can up to 14 prefixes since the maximum instruction length is
2999 15bytes. */
3000static int all_prefixes[MAX_CODE_LENGTH - 1];
252b5132 3001static disassemble_info *the_info;
7967e09e
L
3002static struct
3003 {
3004 int mod;
7967e09e 3005 int reg;
484c222e 3006 int rm;
7967e09e
L
3007 }
3008modrm;
4bba6815 3009static unsigned char need_modrm;
dfc8cf43
L
3010static struct
3011 {
3012 int scale;
3013 int index;
3014 int base;
3015 }
3016sib;
c0f3af97
L
3017static struct
3018 {
3019 int register_specifier;
3020 int length;
3021 int prefix;
3022 int w;
43234a1e
L
3023 int evex;
3024 int r;
3025 int v;
3026 int mask_register_specifier;
3027 int zeroing;
3028 int ll;
3029 int b;
c0f3af97
L
3030 }
3031vex;
3032static unsigned char need_vex;
3033static unsigned char need_vex_reg;
dae39acc 3034static unsigned char vex_w_done;
252b5132 3035
ea397f5b
L
3036struct op
3037 {
3038 const char *name;
3039 unsigned int len;
3040 };
3041
4bba6815
AM
3042/* If we are accessing mod/rm/reg without need_modrm set, then the
3043 values are stale. Hitting this abort likely indicates that you
3044 need to update onebyte_has_modrm or twobyte_has_modrm. */
3045#define MODRM_CHECK if (!need_modrm) abort ()
3046
d708bcba
AM
3047static const char **names64;
3048static const char **names32;
3049static const char **names16;
3050static const char **names8;
3051static const char **names8rex;
3052static const char **names_seg;
db51cc60
L
3053static const char *index64;
3054static const char *index32;
d708bcba 3055static const char **index16;
7e8b059b 3056static const char **names_bnd;
d708bcba
AM
3057
3058static const char *intel_names64[] = {
3059 "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
3060 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
3061};
3062static const char *intel_names32[] = {
3063 "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
3064 "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"
3065};
3066static const char *intel_names16[] = {
3067 "ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
3068 "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
3069};
3070static const char *intel_names8[] = {
3071 "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh",
3072};
3073static const char *intel_names8rex[] = {
3074 "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
3075 "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"
3076};
3077static const char *intel_names_seg[] = {
3078 "es", "cs", "ss", "ds", "fs", "gs", "?", "?",
3079};
db51cc60
L
3080static const char *intel_index64 = "riz";
3081static const char *intel_index32 = "eiz";
d708bcba
AM
3082static const char *intel_index16[] = {
3083 "bx+si", "bx+di", "bp+si", "bp+di", "si", "di", "bp", "bx"
3084};
3085
3086static const char *att_names64[] = {
3087 "%rax", "%rcx", "%rdx", "%rbx", "%rsp", "%rbp", "%rsi", "%rdi",
52b15da3
JH
3088 "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
3089};
d708bcba
AM
3090static const char *att_names32[] = {
3091 "%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi",
52b15da3 3092 "%r8d", "%r9d", "%r10d", "%r11d", "%r12d", "%r13d", "%r14d", "%r15d"
252b5132 3093};
d708bcba
AM
3094static const char *att_names16[] = {
3095 "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di",
52b15da3 3096 "%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w"
252b5132 3097};
d708bcba
AM
3098static const char *att_names8[] = {
3099 "%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh",
252b5132 3100};
d708bcba
AM
3101static const char *att_names8rex[] = {
3102 "%al", "%cl", "%dl", "%bl", "%spl", "%bpl", "%sil", "%dil",
52b15da3
JH
3103 "%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b"
3104};
d708bcba
AM
3105static const char *att_names_seg[] = {
3106 "%es", "%cs", "%ss", "%ds", "%fs", "%gs", "%?", "%?",
252b5132 3107};
db51cc60
L
3108static const char *att_index64 = "%riz";
3109static const char *att_index32 = "%eiz";
d708bcba
AM
3110static const char *att_index16[] = {
3111 "%bx,%si", "%bx,%di", "%bp,%si", "%bp,%di", "%si", "%di", "%bp", "%bx"
252b5132
RH
3112};
3113
b9733481
L
3114static const char **names_mm;
3115static const char *intel_names_mm[] = {
3116 "mm0", "mm1", "mm2", "mm3",
3117 "mm4", "mm5", "mm6", "mm7"
3118};
3119static const char *att_names_mm[] = {
3120 "%mm0", "%mm1", "%mm2", "%mm3",
3121 "%mm4", "%mm5", "%mm6", "%mm7"
3122};
3123
7e8b059b
L
3124static const char *intel_names_bnd[] = {
3125 "bnd0", "bnd1", "bnd2", "bnd3"
3126};
3127
3128static const char *att_names_bnd[] = {
3129 "%bnd0", "%bnd1", "%bnd2", "%bnd3"
3130};
3131
b9733481
L
3132static const char **names_xmm;
3133static const char *intel_names_xmm[] = {
3134 "xmm0", "xmm1", "xmm2", "xmm3",
3135 "xmm4", "xmm5", "xmm6", "xmm7",
3136 "xmm8", "xmm9", "xmm10", "xmm11",
43234a1e
L
3137 "xmm12", "xmm13", "xmm14", "xmm15",
3138 "xmm16", "xmm17", "xmm18", "xmm19",
3139 "xmm20", "xmm21", "xmm22", "xmm23",
3140 "xmm24", "xmm25", "xmm26", "xmm27",
3141 "xmm28", "xmm29", "xmm30", "xmm31"
b9733481
L
3142};
3143static const char *att_names_xmm[] = {
3144 "%xmm0", "%xmm1", "%xmm2", "%xmm3",
3145 "%xmm4", "%xmm5", "%xmm6", "%xmm7",
3146 "%xmm8", "%xmm9", "%xmm10", "%xmm11",
43234a1e
L
3147 "%xmm12", "%xmm13", "%xmm14", "%xmm15",
3148 "%xmm16", "%xmm17", "%xmm18", "%xmm19",
3149 "%xmm20", "%xmm21", "%xmm22", "%xmm23",
3150 "%xmm24", "%xmm25", "%xmm26", "%xmm27",
3151 "%xmm28", "%xmm29", "%xmm30", "%xmm31"
b9733481
L
3152};
3153
3154static const char **names_ymm;
3155static const char *intel_names_ymm[] = {
3156 "ymm0", "ymm1", "ymm2", "ymm3",
3157 "ymm4", "ymm5", "ymm6", "ymm7",
3158 "ymm8", "ymm9", "ymm10", "ymm11",
43234a1e
L
3159 "ymm12", "ymm13", "ymm14", "ymm15",
3160 "ymm16", "ymm17", "ymm18", "ymm19",
3161 "ymm20", "ymm21", "ymm22", "ymm23",
3162 "ymm24", "ymm25", "ymm26", "ymm27",
3163 "ymm28", "ymm29", "ymm30", "ymm31"
b9733481
L
3164};
3165static const char *att_names_ymm[] = {
3166 "%ymm0", "%ymm1", "%ymm2", "%ymm3",
3167 "%ymm4", "%ymm5", "%ymm6", "%ymm7",
3168 "%ymm8", "%ymm9", "%ymm10", "%ymm11",
43234a1e
L
3169 "%ymm12", "%ymm13", "%ymm14", "%ymm15",
3170 "%ymm16", "%ymm17", "%ymm18", "%ymm19",
3171 "%ymm20", "%ymm21", "%ymm22", "%ymm23",
3172 "%ymm24", "%ymm25", "%ymm26", "%ymm27",
3173 "%ymm28", "%ymm29", "%ymm30", "%ymm31"
3174};
3175
3176static const char **names_zmm;
3177static const char *intel_names_zmm[] = {
3178 "zmm0", "zmm1", "zmm2", "zmm3",
3179 "zmm4", "zmm5", "zmm6", "zmm7",
3180 "zmm8", "zmm9", "zmm10", "zmm11",
3181 "zmm12", "zmm13", "zmm14", "zmm15",
3182 "zmm16", "zmm17", "zmm18", "zmm19",
3183 "zmm20", "zmm21", "zmm22", "zmm23",
3184 "zmm24", "zmm25", "zmm26", "zmm27",
3185 "zmm28", "zmm29", "zmm30", "zmm31"
3186};
3187static const char *att_names_zmm[] = {
3188 "%zmm0", "%zmm1", "%zmm2", "%zmm3",
3189 "%zmm4", "%zmm5", "%zmm6", "%zmm7",
3190 "%zmm8", "%zmm9", "%zmm10", "%zmm11",
3191 "%zmm12", "%zmm13", "%zmm14", "%zmm15",
3192 "%zmm16", "%zmm17", "%zmm18", "%zmm19",
3193 "%zmm20", "%zmm21", "%zmm22", "%zmm23",
3194 "%zmm24", "%zmm25", "%zmm26", "%zmm27",
3195 "%zmm28", "%zmm29", "%zmm30", "%zmm31"
3196};
3197
3198static const char **names_mask;
3199static const char *intel_names_mask[] = {
3200 "k0", "k1", "k2", "k3", "k4", "k5", "k6", "k7"
3201};
3202static const char *att_names_mask[] = {
3203 "%k0", "%k1", "%k2", "%k3", "%k4", "%k5", "%k6", "%k7"
3204};
3205
3206static const char *names_rounding[] =
3207{
3208 "{rn-sae}",
3209 "{rd-sae}",
3210 "{ru-sae}",
3211 "{rz-sae}"
b9733481
L
3212};
3213
1ceb70f8
L
3214static const struct dis386 reg_table[][8] = {
3215 /* REG_80 */
252b5132 3216 {
bf890a93
IT
3217 { "addA", { Ebh1, Ib }, 0 },
3218 { "orA", { Ebh1, Ib }, 0 },
3219 { "adcA", { Ebh1, Ib }, 0 },
3220 { "sbbA", { Ebh1, Ib }, 0 },
3221 { "andA", { Ebh1, Ib }, 0 },
3222 { "subA", { Ebh1, Ib }, 0 },
3223 { "xorA", { Ebh1, Ib }, 0 },
3224 { "cmpA", { Eb, Ib }, 0 },
252b5132 3225 },
1ceb70f8 3226 /* REG_81 */
252b5132 3227 {
bf890a93
IT
3228 { "addQ", { Evh1, Iv }, 0 },
3229 { "orQ", { Evh1, Iv }, 0 },
3230 { "adcQ", { Evh1, Iv }, 0 },
3231 { "sbbQ", { Evh1, Iv }, 0 },
3232 { "andQ", { Evh1, Iv }, 0 },
3233 { "subQ", { Evh1, Iv }, 0 },
3234 { "xorQ", { Evh1, Iv }, 0 },
3235 { "cmpQ", { Ev, Iv }, 0 },
252b5132 3236 },
7148c369 3237 /* REG_83 */
252b5132 3238 {
bf890a93
IT
3239 { "addQ", { Evh1, sIb }, 0 },
3240 { "orQ", { Evh1, sIb }, 0 },
3241 { "adcQ", { Evh1, sIb }, 0 },
3242 { "sbbQ", { Evh1, sIb }, 0 },
3243 { "andQ", { Evh1, sIb }, 0 },
3244 { "subQ", { Evh1, sIb }, 0 },
3245 { "xorQ", { Evh1, sIb }, 0 },
3246 { "cmpQ", { Ev, sIb }, 0 },
252b5132 3247 },
1ceb70f8 3248 /* REG_8F */
4e7d34a6 3249 {
bf890a93 3250 { "popU", { stackEv }, 0 },
c48244a5 3251 { XOP_8F_TABLE (XOP_09) },
592d1631
L
3252 { Bad_Opcode },
3253 { Bad_Opcode },
3254 { Bad_Opcode },
f88c9eb0 3255 { XOP_8F_TABLE (XOP_09) },
4e7d34a6 3256 },
1ceb70f8 3257 /* REG_C0 */
252b5132 3258 {
bf890a93
IT
3259 { "rolA", { Eb, Ib }, 0 },
3260 { "rorA", { Eb, Ib }, 0 },
3261 { "rclA", { Eb, Ib }, 0 },
3262 { "rcrA", { Eb, Ib }, 0 },
3263 { "shlA", { Eb, Ib }, 0 },
3264 { "shrA", { Eb, Ib }, 0 },
e4bdd679 3265 { "shlA", { Eb, Ib }, 0 },
bf890a93 3266 { "sarA", { Eb, Ib }, 0 },
252b5132 3267 },
1ceb70f8 3268 /* REG_C1 */
252b5132 3269 {
bf890a93
IT
3270 { "rolQ", { Ev, Ib }, 0 },
3271 { "rorQ", { Ev, Ib }, 0 },
3272 { "rclQ", { Ev, Ib }, 0 },
3273 { "rcrQ", { Ev, Ib }, 0 },
3274 { "shlQ", { Ev, Ib }, 0 },
3275 { "shrQ", { Ev, Ib }, 0 },
e4bdd679 3276 { "shlQ", { Ev, Ib }, 0 },
bf890a93 3277 { "sarQ", { Ev, Ib }, 0 },
252b5132 3278 },
1ceb70f8 3279 /* REG_C6 */
4e7d34a6 3280 {
bf890a93 3281 { "movA", { Ebh3, Ib }, 0 },
42164a71
L
3282 { Bad_Opcode },
3283 { Bad_Opcode },
3284 { Bad_Opcode },
3285 { Bad_Opcode },
3286 { Bad_Opcode },
3287 { Bad_Opcode },
3288 { MOD_TABLE (MOD_C6_REG_7) },
4e7d34a6 3289 },
1ceb70f8 3290 /* REG_C7 */
4e7d34a6 3291 {
bf890a93 3292 { "movQ", { Evh3, Iv }, 0 },
42164a71
L
3293 { Bad_Opcode },
3294 { Bad_Opcode },
3295 { Bad_Opcode },
3296 { Bad_Opcode },
3297 { Bad_Opcode },
3298 { Bad_Opcode },
3299 { MOD_TABLE (MOD_C7_REG_7) },
4e7d34a6 3300 },
1ceb70f8 3301 /* REG_D0 */
252b5132 3302 {
bf890a93
IT
3303 { "rolA", { Eb, I1 }, 0 },
3304 { "rorA", { Eb, I1 }, 0 },
3305 { "rclA", { Eb, I1 }, 0 },
3306 { "rcrA", { Eb, I1 }, 0 },
3307 { "shlA", { Eb, I1 }, 0 },
3308 { "shrA", { Eb, I1 }, 0 },
e4bdd679 3309 { "shlA", { Eb, I1 }, 0 },
bf890a93 3310 { "sarA", { Eb, I1 }, 0 },
252b5132 3311 },
1ceb70f8 3312 /* REG_D1 */
252b5132 3313 {
bf890a93
IT
3314 { "rolQ", { Ev, I1 }, 0 },
3315 { "rorQ", { Ev, I1 }, 0 },
3316 { "rclQ", { Ev, I1 }, 0 },
3317 { "rcrQ", { Ev, I1 }, 0 },
3318 { "shlQ", { Ev, I1 }, 0 },
3319 { "shrQ", { Ev, I1 }, 0 },
e4bdd679 3320 { "shlQ", { Ev, I1 }, 0 },
bf890a93 3321 { "sarQ", { Ev, I1 }, 0 },
252b5132 3322 },
1ceb70f8 3323 /* REG_D2 */
252b5132 3324 {
bf890a93
IT
3325 { "rolA", { Eb, CL }, 0 },
3326 { "rorA", { Eb, CL }, 0 },
3327 { "rclA", { Eb, CL }, 0 },
3328 { "rcrA", { Eb, CL }, 0 },
3329 { "shlA", { Eb, CL }, 0 },
3330 { "shrA", { Eb, CL }, 0 },
e4bdd679 3331 { "shlA", { Eb, CL }, 0 },
bf890a93 3332 { "sarA", { Eb, CL }, 0 },
252b5132 3333 },
1ceb70f8 3334 /* REG_D3 */
252b5132 3335 {
bf890a93
IT
3336 { "rolQ", { Ev, CL }, 0 },
3337 { "rorQ", { Ev, CL }, 0 },
3338 { "rclQ", { Ev, CL }, 0 },
3339 { "rcrQ", { Ev, CL }, 0 },
3340 { "shlQ", { Ev, CL }, 0 },
3341 { "shrQ", { Ev, CL }, 0 },
e4bdd679 3342 { "shlQ", { Ev, CL }, 0 },
bf890a93 3343 { "sarQ", { Ev, CL }, 0 },
252b5132 3344 },
1ceb70f8 3345 /* REG_F6 */
252b5132 3346 {
bf890a93 3347 { "testA", { Eb, Ib }, 0 },
7db2c588 3348 { "testA", { Eb, Ib }, 0 },
bf890a93
IT
3349 { "notA", { Ebh1 }, 0 },
3350 { "negA", { Ebh1 }, 0 },
3351 { "mulA", { Eb }, 0 }, /* Don't print the implicit %al register, */
3352 { "imulA", { Eb }, 0 }, /* to distinguish these opcodes from other */
3353 { "divA", { Eb }, 0 }, /* mul/imul opcodes. Do the same for div */
3354 { "idivA", { Eb }, 0 }, /* and idiv for consistency. */
252b5132 3355 },
1ceb70f8 3356 /* REG_F7 */
252b5132 3357 {
bf890a93 3358 { "testQ", { Ev, Iv }, 0 },
7db2c588 3359 { "testQ", { Ev, Iv }, 0 },
bf890a93
IT
3360 { "notQ", { Evh1 }, 0 },
3361 { "negQ", { Evh1 }, 0 },
3362 { "mulQ", { Ev }, 0 }, /* Don't print the implicit register. */
3363 { "imulQ", { Ev }, 0 },
3364 { "divQ", { Ev }, 0 },
3365 { "idivQ", { Ev }, 0 },
252b5132 3366 },
1ceb70f8 3367 /* REG_FE */
252b5132 3368 {
bf890a93
IT
3369 { "incA", { Ebh1 }, 0 },
3370 { "decA", { Ebh1 }, 0 },
252b5132 3371 },
1ceb70f8 3372 /* REG_FF */
252b5132 3373 {
bf890a93
IT
3374 { "incQ", { Evh1 }, 0 },
3375 { "decQ", { Evh1 }, 0 },
9fef80d6 3376 { "call{&|}", { NOTRACK, indirEv, BND }, 0 },
4a357820 3377 { MOD_TABLE (MOD_FF_REG_3) },
9fef80d6 3378 { "jmp{&|}", { NOTRACK, indirEv, BND }, 0 },
4a357820 3379 { MOD_TABLE (MOD_FF_REG_5) },
bf890a93 3380 { "pushU", { stackEv }, 0 },
592d1631 3381 { Bad_Opcode },
252b5132 3382 },
1ceb70f8 3383 /* REG_0F00 */
252b5132 3384 {
bf890a93
IT
3385 { "sldtD", { Sv }, 0 },
3386 { "strD", { Sv }, 0 },
3387 { "lldt", { Ew }, 0 },
3388 { "ltr", { Ew }, 0 },
3389 { "verr", { Ew }, 0 },
3390 { "verw", { Ew }, 0 },
592d1631
L
3391 { Bad_Opcode },
3392 { Bad_Opcode },
252b5132 3393 },
1ceb70f8 3394 /* REG_0F01 */
252b5132 3395 {
1ceb70f8
L
3396 { MOD_TABLE (MOD_0F01_REG_0) },
3397 { MOD_TABLE (MOD_0F01_REG_1) },
3398 { MOD_TABLE (MOD_0F01_REG_2) },
3399 { MOD_TABLE (MOD_0F01_REG_3) },
bf890a93 3400 { "smswD", { Sv }, 0 },
8eab4136 3401 { MOD_TABLE (MOD_0F01_REG_5) },
bf890a93 3402 { "lmsw", { Ew }, 0 },
1ceb70f8 3403 { MOD_TABLE (MOD_0F01_REG_7) },
252b5132 3404 },
b5b1fc4f 3405 /* REG_0F0D */
252b5132 3406 {
bf890a93
IT
3407 { "prefetch", { Mb }, 0 },
3408 { "prefetchw", { Mb }, 0 },
3409 { "prefetchwt1", { Mb }, 0 },
3410 { "prefetch", { Mb }, 0 },
3411 { "prefetch", { Mb }, 0 },
3412 { "prefetch", { Mb }, 0 },
3413 { "prefetch", { Mb }, 0 },
3414 { "prefetch", { Mb }, 0 },
252b5132 3415 },
1ceb70f8 3416 /* REG_0F18 */
252b5132 3417 {
1ceb70f8
L
3418 { MOD_TABLE (MOD_0F18_REG_0) },
3419 { MOD_TABLE (MOD_0F18_REG_1) },
3420 { MOD_TABLE (MOD_0F18_REG_2) },
3421 { MOD_TABLE (MOD_0F18_REG_3) },
d7189fa5
RM
3422 { MOD_TABLE (MOD_0F18_REG_4) },
3423 { MOD_TABLE (MOD_0F18_REG_5) },
3424 { MOD_TABLE (MOD_0F18_REG_6) },
3425 { MOD_TABLE (MOD_0F18_REG_7) },
252b5132 3426 },
c48935d7
IT
3427 /* REG_0F1C_MOD_0 */
3428 {
3429 { "cldemote", { Mb }, 0 },
3430 { "nopQ", { Ev }, 0 },
3431 { "nopQ", { Ev }, 0 },
3432 { "nopQ", { Ev }, 0 },
3433 { "nopQ", { Ev }, 0 },
3434 { "nopQ", { Ev }, 0 },
3435 { "nopQ", { Ev }, 0 },
3436 { "nopQ", { Ev }, 0 },
3437 },
603555e5
L
3438 /* REG_0F1E_MOD_3 */
3439 {
3440 { "nopQ", { Ev }, 0 },
3441 { "rdsspK", { Rdq }, PREFIX_OPCODE },
3442 { "nopQ", { Ev }, 0 },
3443 { "nopQ", { Ev }, 0 },
3444 { "nopQ", { Ev }, 0 },
3445 { "nopQ", { Ev }, 0 },
3446 { "nopQ", { Ev }, 0 },
3447 { RM_TABLE (RM_0F1E_MOD_3_REG_7) },
3448 },
1ceb70f8 3449 /* REG_0F71 */
a6bd098c 3450 {
592d1631
L
3451 { Bad_Opcode },
3452 { Bad_Opcode },
1ceb70f8 3453 { MOD_TABLE (MOD_0F71_REG_2) },
592d1631 3454 { Bad_Opcode },
1ceb70f8 3455 { MOD_TABLE (MOD_0F71_REG_4) },
592d1631 3456 { Bad_Opcode },
1ceb70f8 3457 { MOD_TABLE (MOD_0F71_REG_6) },
a6bd098c 3458 },
1ceb70f8 3459 /* REG_0F72 */
a6bd098c 3460 {
592d1631
L
3461 { Bad_Opcode },
3462 { Bad_Opcode },
1ceb70f8 3463 { MOD_TABLE (MOD_0F72_REG_2) },
592d1631 3464 { Bad_Opcode },
1ceb70f8 3465 { MOD_TABLE (MOD_0F72_REG_4) },
592d1631 3466 { Bad_Opcode },
1ceb70f8 3467 { MOD_TABLE (MOD_0F72_REG_6) },
a6bd098c 3468 },
1ceb70f8 3469 /* REG_0F73 */
252b5132 3470 {
592d1631
L
3471 { Bad_Opcode },
3472 { Bad_Opcode },
1ceb70f8
L
3473 { MOD_TABLE (MOD_0F73_REG_2) },
3474 { MOD_TABLE (MOD_0F73_REG_3) },
592d1631
L
3475 { Bad_Opcode },
3476 { Bad_Opcode },
1ceb70f8
L
3477 { MOD_TABLE (MOD_0F73_REG_6) },
3478 { MOD_TABLE (MOD_0F73_REG_7) },
252b5132 3479 },
1ceb70f8 3480 /* REG_0FA6 */
252b5132 3481 {
bf890a93
IT
3482 { "montmul", { { OP_0f07, 0 } }, 0 },
3483 { "xsha1", { { OP_0f07, 0 } }, 0 },
3484 { "xsha256", { { OP_0f07, 0 } }, 0 },
4e7d34a6 3485 },
1ceb70f8 3486 /* REG_0FA7 */
4e7d34a6 3487 {
bf890a93
IT
3488 { "xstore-rng", { { OP_0f07, 0 } }, 0 },
3489 { "xcrypt-ecb", { { OP_0f07, 0 } }, 0 },
3490 { "xcrypt-cbc", { { OP_0f07, 0 } }, 0 },
3491 { "xcrypt-ctr", { { OP_0f07, 0 } }, 0 },
3492 { "xcrypt-cfb", { { OP_0f07, 0 } }, 0 },
3493 { "xcrypt-ofb", { { OP_0f07, 0 } }, 0 },
4e7d34a6 3494 },
1ceb70f8 3495 /* REG_0FAE */
4e7d34a6 3496 {
1ceb70f8
L
3497 { MOD_TABLE (MOD_0FAE_REG_0) },
3498 { MOD_TABLE (MOD_0FAE_REG_1) },
3499 { MOD_TABLE (MOD_0FAE_REG_2) },
3500 { MOD_TABLE (MOD_0FAE_REG_3) },
475a2301 3501 { MOD_TABLE (MOD_0FAE_REG_4) },
1ceb70f8
L
3502 { MOD_TABLE (MOD_0FAE_REG_5) },
3503 { MOD_TABLE (MOD_0FAE_REG_6) },
3504 { MOD_TABLE (MOD_0FAE_REG_7) },
252b5132 3505 },
1ceb70f8 3506 /* REG_0FBA */
252b5132 3507 {
592d1631
L
3508 { Bad_Opcode },
3509 { Bad_Opcode },
3510 { Bad_Opcode },
3511 { Bad_Opcode },
bf890a93
IT
3512 { "btQ", { Ev, Ib }, 0 },
3513 { "btsQ", { Evh1, Ib }, 0 },
3514 { "btrQ", { Evh1, Ib }, 0 },
3515 { "btcQ", { Evh1, Ib }, 0 },
c608c12e 3516 },
1ceb70f8 3517 /* REG_0FC7 */
c608c12e 3518 {
592d1631 3519 { Bad_Opcode },
bf890a93 3520 { "cmpxchg8b", { { CMPXCHG8B_Fixup, q_mode } }, 0 },
592d1631 3521 { Bad_Opcode },
963f3586
IT
3522 { MOD_TABLE (MOD_0FC7_REG_3) },
3523 { MOD_TABLE (MOD_0FC7_REG_4) },
3524 { MOD_TABLE (MOD_0FC7_REG_5) },
1ceb70f8
L
3525 { MOD_TABLE (MOD_0FC7_REG_6) },
3526 { MOD_TABLE (MOD_0FC7_REG_7) },
252b5132 3527 },
592a252b 3528 /* REG_VEX_0F71 */
c0f3af97 3529 {
592d1631
L
3530 { Bad_Opcode },
3531 { Bad_Opcode },
592a252b 3532 { MOD_TABLE (MOD_VEX_0F71_REG_2) },
592d1631 3533 { Bad_Opcode },
592a252b 3534 { MOD_TABLE (MOD_VEX_0F71_REG_4) },
592d1631 3535 { Bad_Opcode },
592a252b 3536 { MOD_TABLE (MOD_VEX_0F71_REG_6) },
c0f3af97 3537 },
592a252b 3538 /* REG_VEX_0F72 */
c0f3af97 3539 {
592d1631
L
3540 { Bad_Opcode },
3541 { Bad_Opcode },
592a252b 3542 { MOD_TABLE (MOD_VEX_0F72_REG_2) },
592d1631 3543 { Bad_Opcode },
592a252b 3544 { MOD_TABLE (MOD_VEX_0F72_REG_4) },
592d1631 3545 { Bad_Opcode },
592a252b 3546 { MOD_TABLE (MOD_VEX_0F72_REG_6) },
c0f3af97 3547 },
592a252b 3548 /* REG_VEX_0F73 */
c0f3af97 3549 {
592d1631
L
3550 { Bad_Opcode },
3551 { Bad_Opcode },
592a252b
L
3552 { MOD_TABLE (MOD_VEX_0F73_REG_2) },
3553 { MOD_TABLE (MOD_VEX_0F73_REG_3) },
592d1631
L
3554 { Bad_Opcode },
3555 { Bad_Opcode },
592a252b
L
3556 { MOD_TABLE (MOD_VEX_0F73_REG_6) },
3557 { MOD_TABLE (MOD_VEX_0F73_REG_7) },
c0f3af97 3558 },
592a252b 3559 /* REG_VEX_0FAE */
c0f3af97 3560 {
592d1631
L
3561 { Bad_Opcode },
3562 { Bad_Opcode },
592a252b
L
3563 { MOD_TABLE (MOD_VEX_0FAE_REG_2) },
3564 { MOD_TABLE (MOD_VEX_0FAE_REG_3) },
c0f3af97 3565 },
f12dc422
L
3566 /* REG_VEX_0F38F3 */
3567 {
3568 { Bad_Opcode },
3569 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_1) },
3570 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_2) },
3571 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_3) },
3572 },
f88c9eb0
SP
3573 /* REG_XOP_LWPCB */
3574 {
bf890a93
IT
3575 { "llwpcb", { { OP_LWPCB_E, 0 } }, 0 },
3576 { "slwpcb", { { OP_LWPCB_E, 0 } }, 0 },
f88c9eb0
SP
3577 },
3578 /* REG_XOP_LWP */
3579 {
bf890a93
IT
3580 { "lwpins", { { OP_LWP_E, 0 }, Ed, Iq }, 0 },
3581 { "lwpval", { { OP_LWP_E, 0 }, Ed, Iq }, 0 },
f88c9eb0 3582 },
2a2a0f38
QN
3583 /* REG_XOP_TBM_01 */
3584 {
3585 { Bad_Opcode },
bf890a93
IT
3586 { "blcfill", { { OP_LWP_E, 0 }, Ev }, 0 },
3587 { "blsfill", { { OP_LWP_E, 0 }, Ev }, 0 },
3588 { "blcs", { { OP_LWP_E, 0 }, Ev }, 0 },
3589 { "tzmsk", { { OP_LWP_E, 0 }, Ev }, 0 },
3590 { "blcic", { { OP_LWP_E, 0 }, Ev }, 0 },
3591 { "blsic", { { OP_LWP_E, 0 }, Ev }, 0 },
3592 { "t1mskc", { { OP_LWP_E, 0 }, Ev }, 0 },
2a2a0f38
QN
3593 },
3594 /* REG_XOP_TBM_02 */
3595 {
3596 { Bad_Opcode },
bf890a93 3597 { "blcmsk", { { OP_LWP_E, 0 }, Ev }, 0 },
2a2a0f38
QN
3598 { Bad_Opcode },
3599 { Bad_Opcode },
3600 { Bad_Opcode },
3601 { Bad_Opcode },
bf890a93 3602 { "blci", { { OP_LWP_E, 0 }, Ev }, 0 },
2a2a0f38 3603 },
43234a1e
L
3604#define NEED_REG_TABLE
3605#include "i386-dis-evex.h"
3606#undef NEED_REG_TABLE
4e7d34a6
L
3607};
3608
1ceb70f8
L
3609static const struct dis386 prefix_table[][4] = {
3610 /* PREFIX_90 */
252b5132 3611 {
bf890a93
IT
3612 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } }, 0 },
3613 { "pause", { XX }, 0 },
3614 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } }, 0 },
507bd325 3615 { NULL, { { NULL, 0 } }, PREFIX_IGNORED }
0f10071e 3616 },
4e7d34a6 3617
603555e5
L
3618 /* PREFIX_MOD_0_0F01_REG_5 */
3619 {
3620 { Bad_Opcode },
3621 { "rstorssp", { Mq }, PREFIX_OPCODE },
3622 },
3623
2234eee6 3624 /* PREFIX_MOD_3_0F01_REG_5_RM_0 */
603555e5
L
3625 {
3626 { Bad_Opcode },
2234eee6 3627 { "setssbsy", { Skip_MODRM }, PREFIX_OPCODE },
603555e5
L
3628 },
3629
3630 /* PREFIX_MOD_3_0F01_REG_5_RM_2 */
3631 {
3632 { Bad_Opcode },
c2f76402 3633 { "saveprevssp", { Skip_MODRM }, PREFIX_OPCODE },
603555e5
L
3634 },
3635
3233d7d0
IT
3636 /* PREFIX_0F09 */
3637 {
3638 { "wbinvd", { XX }, 0 },
3639 { "wbnoinvd", { XX }, 0 },
3640 },
3641
1ceb70f8 3642 /* PREFIX_0F10 */
cc0ec051 3643 {
507bd325
L
3644 { "movups", { XM, EXx }, PREFIX_OPCODE },
3645 { "movss", { XM, EXd }, PREFIX_OPCODE },
3646 { "movupd", { XM, EXx }, PREFIX_OPCODE },
3647 { "movsd", { XM, EXq }, PREFIX_OPCODE },
30d1c836 3648 },
4e7d34a6 3649
1ceb70f8 3650 /* PREFIX_0F11 */
30d1c836 3651 {
507bd325
L
3652 { "movups", { EXxS, XM }, PREFIX_OPCODE },
3653 { "movss", { EXdS, XM }, PREFIX_OPCODE },
3654 { "movupd", { EXxS, XM }, PREFIX_OPCODE },
3655 { "movsd", { EXqS, XM }, PREFIX_OPCODE },
4e7d34a6 3656 },
252b5132 3657
1ceb70f8 3658 /* PREFIX_0F12 */
c608c12e 3659 {
1ceb70f8 3660 { MOD_TABLE (MOD_0F12_PREFIX_0) },
507bd325
L
3661 { "movsldup", { XM, EXx }, PREFIX_OPCODE },
3662 { "movlpd", { XM, EXq }, PREFIX_OPCODE },
3663 { "movddup", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3664 },
4e7d34a6 3665
1ceb70f8 3666 /* PREFIX_0F16 */
c608c12e 3667 {
1ceb70f8 3668 { MOD_TABLE (MOD_0F16_PREFIX_0) },
507bd325
L
3669 { "movshdup", { XM, EXx }, PREFIX_OPCODE },
3670 { "movhpd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3671 },
4e7d34a6 3672
7e8b059b
L
3673 /* PREFIX_0F1A */
3674 {
3675 { MOD_TABLE (MOD_0F1A_PREFIX_0) },
bf890a93
IT
3676 { "bndcl", { Gbnd, Ev_bnd }, 0 },
3677 { "bndmov", { Gbnd, Ebnd }, 0 },
3678 { "bndcu", { Gbnd, Ev_bnd }, 0 },
7e8b059b
L
3679 },
3680
3681 /* PREFIX_0F1B */
3682 {
3683 { MOD_TABLE (MOD_0F1B_PREFIX_0) },
3684 { MOD_TABLE (MOD_0F1B_PREFIX_1) },
9f79e886 3685 { "bndmov", { EbndS, Gbnd }, 0 },
bf890a93 3686 { "bndcn", { Gbnd, Ev_bnd }, 0 },
7e8b059b
L
3687 },
3688
c48935d7
IT
3689 /* PREFIX_0F1C */
3690 {
3691 { MOD_TABLE (MOD_0F1C_PREFIX_0) },
3692 { "nopQ", { Ev }, PREFIX_OPCODE },
3693 { "nopQ", { Ev }, PREFIX_OPCODE },
3694 { "nopQ", { Ev }, PREFIX_OPCODE },
3695 },
3696
603555e5
L
3697 /* PREFIX_0F1E */
3698 {
3699 { "nopQ", { Ev }, PREFIX_OPCODE },
3700 { MOD_TABLE (MOD_0F1E_PREFIX_1) },
3701 { "nopQ", { Ev }, PREFIX_OPCODE },
3702 { "nopQ", { Ev }, PREFIX_OPCODE },
3703 },
3704
1ceb70f8 3705 /* PREFIX_0F2A */
c608c12e 3706 {
507bd325
L
3707 { "cvtpi2ps", { XM, EMCq }, PREFIX_OPCODE },
3708 { "cvtsi2ss%LQ", { XM, Ev }, PREFIX_OPCODE },
3709 { "cvtpi2pd", { XM, EMCq }, PREFIX_OPCODE },
bf890a93 3710 { "cvtsi2sd%LQ", { XM, Ev }, 0 },
c608c12e 3711 },
4e7d34a6 3712
1ceb70f8 3713 /* PREFIX_0F2B */
c608c12e 3714 {
75c135a8
L
3715 { MOD_TABLE (MOD_0F2B_PREFIX_0) },
3716 { MOD_TABLE (MOD_0F2B_PREFIX_1) },
3717 { MOD_TABLE (MOD_0F2B_PREFIX_2) },
3718 { MOD_TABLE (MOD_0F2B_PREFIX_3) },
c608c12e 3719 },
4e7d34a6 3720
1ceb70f8 3721 /* PREFIX_0F2C */
c608c12e 3722 {
507bd325 3723 { "cvttps2pi", { MXC, EXq }, PREFIX_OPCODE },
9646c87b 3724 { "cvttss2si", { Gv, EXd }, PREFIX_OPCODE },
507bd325 3725 { "cvttpd2pi", { MXC, EXx }, PREFIX_OPCODE },
9646c87b 3726 { "cvttsd2si", { Gv, EXq }, PREFIX_OPCODE },
c608c12e 3727 },
4e7d34a6 3728
1ceb70f8 3729 /* PREFIX_0F2D */
c608c12e 3730 {
507bd325 3731 { "cvtps2pi", { MXC, EXq }, PREFIX_OPCODE },
9646c87b 3732 { "cvtss2si", { Gv, EXd }, PREFIX_OPCODE },
507bd325 3733 { "cvtpd2pi", { MXC, EXx }, PREFIX_OPCODE },
9646c87b 3734 { "cvtsd2si", { Gv, EXq }, PREFIX_OPCODE },
c608c12e 3735 },
4e7d34a6 3736
1ceb70f8 3737 /* PREFIX_0F2E */
c608c12e 3738 {
bf890a93 3739 { "ucomiss",{ XM, EXd }, 0 },
592d1631 3740 { Bad_Opcode },
bf890a93 3741 { "ucomisd",{ XM, EXq }, 0 },
c608c12e 3742 },
4e7d34a6 3743
1ceb70f8 3744 /* PREFIX_0F2F */
c608c12e 3745 {
bf890a93 3746 { "comiss", { XM, EXd }, 0 },
592d1631 3747 { Bad_Opcode },
bf890a93 3748 { "comisd", { XM, EXq }, 0 },
c608c12e 3749 },
4e7d34a6 3750
1ceb70f8 3751 /* PREFIX_0F51 */
c608c12e 3752 {
507bd325
L
3753 { "sqrtps", { XM, EXx }, PREFIX_OPCODE },
3754 { "sqrtss", { XM, EXd }, PREFIX_OPCODE },
3755 { "sqrtpd", { XM, EXx }, PREFIX_OPCODE },
3756 { "sqrtsd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3757 },
4e7d34a6 3758
1ceb70f8 3759 /* PREFIX_0F52 */
c608c12e 3760 {
507bd325
L
3761 { "rsqrtps",{ XM, EXx }, PREFIX_OPCODE },
3762 { "rsqrtss",{ XM, EXd }, PREFIX_OPCODE },
c608c12e 3763 },
4e7d34a6 3764
1ceb70f8 3765 /* PREFIX_0F53 */
c608c12e 3766 {
507bd325
L
3767 { "rcpps", { XM, EXx }, PREFIX_OPCODE },
3768 { "rcpss", { XM, EXd }, PREFIX_OPCODE },
c608c12e 3769 },
4e7d34a6 3770
1ceb70f8 3771 /* PREFIX_0F58 */
c608c12e 3772 {
507bd325
L
3773 { "addps", { XM, EXx }, PREFIX_OPCODE },
3774 { "addss", { XM, EXd }, PREFIX_OPCODE },
3775 { "addpd", { XM, EXx }, PREFIX_OPCODE },
3776 { "addsd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3777 },
4e7d34a6 3778
1ceb70f8 3779 /* PREFIX_0F59 */
c608c12e 3780 {
507bd325
L
3781 { "mulps", { XM, EXx }, PREFIX_OPCODE },
3782 { "mulss", { XM, EXd }, PREFIX_OPCODE },
3783 { "mulpd", { XM, EXx }, PREFIX_OPCODE },
3784 { "mulsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3785 },
4e7d34a6 3786
1ceb70f8 3787 /* PREFIX_0F5A */
041bd2e0 3788 {
507bd325
L
3789 { "cvtps2pd", { XM, EXq }, PREFIX_OPCODE },
3790 { "cvtss2sd", { XM, EXd }, PREFIX_OPCODE },
3791 { "cvtpd2ps", { XM, EXx }, PREFIX_OPCODE },
3792 { "cvtsd2ss", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3793 },
4e7d34a6 3794
1ceb70f8 3795 /* PREFIX_0F5B */
041bd2e0 3796 {
507bd325
L
3797 { "cvtdq2ps", { XM, EXx }, PREFIX_OPCODE },
3798 { "cvttps2dq", { XM, EXx }, PREFIX_OPCODE },
3799 { "cvtps2dq", { XM, EXx }, PREFIX_OPCODE },
041bd2e0 3800 },
4e7d34a6 3801
1ceb70f8 3802 /* PREFIX_0F5C */
041bd2e0 3803 {
507bd325
L
3804 { "subps", { XM, EXx }, PREFIX_OPCODE },
3805 { "subss", { XM, EXd }, PREFIX_OPCODE },
3806 { "subpd", { XM, EXx }, PREFIX_OPCODE },
3807 { "subsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3808 },
4e7d34a6 3809
1ceb70f8 3810 /* PREFIX_0F5D */
041bd2e0 3811 {
507bd325
L
3812 { "minps", { XM, EXx }, PREFIX_OPCODE },
3813 { "minss", { XM, EXd }, PREFIX_OPCODE },
3814 { "minpd", { XM, EXx }, PREFIX_OPCODE },
3815 { "minsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3816 },
4e7d34a6 3817
1ceb70f8 3818 /* PREFIX_0F5E */
041bd2e0 3819 {
507bd325
L
3820 { "divps", { XM, EXx }, PREFIX_OPCODE },
3821 { "divss", { XM, EXd }, PREFIX_OPCODE },
3822 { "divpd", { XM, EXx }, PREFIX_OPCODE },
3823 { "divsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3824 },
4e7d34a6 3825
1ceb70f8 3826 /* PREFIX_0F5F */
041bd2e0 3827 {
507bd325
L
3828 { "maxps", { XM, EXx }, PREFIX_OPCODE },
3829 { "maxss", { XM, EXd }, PREFIX_OPCODE },
3830 { "maxpd", { XM, EXx }, PREFIX_OPCODE },
3831 { "maxsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3832 },
4e7d34a6 3833
1ceb70f8 3834 /* PREFIX_0F60 */
041bd2e0 3835 {
507bd325 3836 { "punpcklbw",{ MX, EMd }, PREFIX_OPCODE },
592d1631 3837 { Bad_Opcode },
507bd325 3838 { "punpcklbw",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 3839 },
4e7d34a6 3840
1ceb70f8 3841 /* PREFIX_0F61 */
041bd2e0 3842 {
507bd325 3843 { "punpcklwd",{ MX, EMd }, PREFIX_OPCODE },
592d1631 3844 { Bad_Opcode },
507bd325 3845 { "punpcklwd",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 3846 },
4e7d34a6 3847
1ceb70f8 3848 /* PREFIX_0F62 */
041bd2e0 3849 {
507bd325 3850 { "punpckldq",{ MX, EMd }, PREFIX_OPCODE },
592d1631 3851 { Bad_Opcode },
507bd325 3852 { "punpckldq",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 3853 },
4e7d34a6 3854
1ceb70f8 3855 /* PREFIX_0F6C */
041bd2e0 3856 {
592d1631
L
3857 { Bad_Opcode },
3858 { Bad_Opcode },
507bd325 3859 { "punpcklqdq", { XM, EXx }, PREFIX_OPCODE },
0f17484f 3860 },
4e7d34a6 3861
1ceb70f8 3862 /* PREFIX_0F6D */
0f17484f 3863 {
592d1631
L
3864 { Bad_Opcode },
3865 { Bad_Opcode },
507bd325 3866 { "punpckhqdq", { XM, EXx }, PREFIX_OPCODE },
041bd2e0 3867 },
4e7d34a6 3868
1ceb70f8 3869 /* PREFIX_0F6F */
ca164297 3870 {
507bd325
L
3871 { "movq", { MX, EM }, PREFIX_OPCODE },
3872 { "movdqu", { XM, EXx }, PREFIX_OPCODE },
3873 { "movdqa", { XM, EXx }, PREFIX_OPCODE },
ca164297 3874 },
4e7d34a6 3875
1ceb70f8 3876 /* PREFIX_0F70 */
4e7d34a6 3877 {
507bd325
L
3878 { "pshufw", { MX, EM, Ib }, PREFIX_OPCODE },
3879 { "pshufhw",{ XM, EXx, Ib }, PREFIX_OPCODE },
3880 { "pshufd", { XM, EXx, Ib }, PREFIX_OPCODE },
3881 { "pshuflw",{ XM, EXx, Ib }, PREFIX_OPCODE },
4e7d34a6
L
3882 },
3883
92fddf8e
L
3884 /* PREFIX_0F73_REG_3 */
3885 {
592d1631
L
3886 { Bad_Opcode },
3887 { Bad_Opcode },
bf890a93 3888 { "psrldq", { XS, Ib }, 0 },
92fddf8e
L
3889 },
3890
3891 /* PREFIX_0F73_REG_7 */
3892 {
592d1631
L
3893 { Bad_Opcode },
3894 { Bad_Opcode },
bf890a93 3895 { "pslldq", { XS, Ib }, 0 },
92fddf8e
L
3896 },
3897
1ceb70f8 3898 /* PREFIX_0F78 */
4e7d34a6 3899 {
bf890a93 3900 {"vmread", { Em, Gm }, 0 },
592d1631 3901 { Bad_Opcode },
bf890a93
IT
3902 {"extrq", { XS, Ib, Ib }, 0 },
3903 {"insertq", { XM, XS, Ib, Ib }, 0 },
4e7d34a6
L
3904 },
3905
1ceb70f8 3906 /* PREFIX_0F79 */
4e7d34a6 3907 {
bf890a93 3908 {"vmwrite", { Gm, Em }, 0 },
592d1631 3909 { Bad_Opcode },
bf890a93
IT
3910 {"extrq", { XM, XS }, 0 },
3911 {"insertq", { XM, XS }, 0 },
4e7d34a6
L
3912 },
3913
1ceb70f8 3914 /* PREFIX_0F7C */
ca164297 3915 {
592d1631
L
3916 { Bad_Opcode },
3917 { Bad_Opcode },
507bd325
L
3918 { "haddpd", { XM, EXx }, PREFIX_OPCODE },
3919 { "haddps", { XM, EXx }, PREFIX_OPCODE },
ca164297 3920 },
4e7d34a6 3921
1ceb70f8 3922 /* PREFIX_0F7D */
ca164297 3923 {
592d1631
L
3924 { Bad_Opcode },
3925 { Bad_Opcode },
507bd325
L
3926 { "hsubpd", { XM, EXx }, PREFIX_OPCODE },
3927 { "hsubps", { XM, EXx }, PREFIX_OPCODE },
ca164297 3928 },
4e7d34a6 3929
1ceb70f8 3930 /* PREFIX_0F7E */
ca164297 3931 {
507bd325
L
3932 { "movK", { Edq, MX }, PREFIX_OPCODE },
3933 { "movq", { XM, EXq }, PREFIX_OPCODE },
3934 { "movK", { Edq, XM }, PREFIX_OPCODE },
ca164297 3935 },
4e7d34a6 3936
1ceb70f8 3937 /* PREFIX_0F7F */
ca164297 3938 {
507bd325
L
3939 { "movq", { EMS, MX }, PREFIX_OPCODE },
3940 { "movdqu", { EXxS, XM }, PREFIX_OPCODE },
3941 { "movdqa", { EXxS, XM }, PREFIX_OPCODE },
ca164297 3942 },
4e7d34a6 3943
c7b8aa3a
L
3944 /* PREFIX_0FAE_REG_0 */
3945 {
3946 { Bad_Opcode },
bf890a93 3947 { "rdfsbase", { Ev }, 0 },
c7b8aa3a
L
3948 },
3949
3950 /* PREFIX_0FAE_REG_1 */
3951 {
3952 { Bad_Opcode },
bf890a93 3953 { "rdgsbase", { Ev }, 0 },
c7b8aa3a
L
3954 },
3955
3956 /* PREFIX_0FAE_REG_2 */
3957 {
3958 { Bad_Opcode },
bf890a93 3959 { "wrfsbase", { Ev }, 0 },
c7b8aa3a
L
3960 },
3961
3962 /* PREFIX_0FAE_REG_3 */
3963 {
3964 { Bad_Opcode },
bf890a93 3965 { "wrgsbase", { Ev }, 0 },
c7b8aa3a
L
3966 },
3967
6b40c462
L
3968 /* PREFIX_MOD_0_0FAE_REG_4 */
3969 {
3970 { "xsave", { FXSAVE }, 0 },
3971 { "ptwrite%LQ", { Edq }, 0 },
3972 },
3973
3974 /* PREFIX_MOD_3_0FAE_REG_4 */
3975 {
3976 { Bad_Opcode },
3977 { "ptwrite%LQ", { Edq }, 0 },
3978 },
3979
603555e5
L
3980 /* PREFIX_MOD_0_0FAE_REG_5 */
3981 {
3982 { "xrstor", { FXSAVE }, PREFIX_OPCODE },
2234eee6
L
3983 },
3984
3985 /* PREFIX_MOD_3_0FAE_REG_5 */
3986 {
3987 { "lfence", { Skip_MODRM }, 0 },
3988 { "incsspK", { Rdq }, PREFIX_OPCODE },
603555e5
L
3989 },
3990
de89d0a3 3991 /* PREFIX_MOD_0_0FAE_REG_6 */
c5e7287a 3992 {
603555e5
L
3993 { "xsaveopt", { FXSAVE }, PREFIX_OPCODE },
3994 { "clrssbsy", { Mq }, PREFIX_OPCODE },
3995 { "clwb", { Mb }, PREFIX_OPCODE },
c5e7287a
IT
3996 },
3997
de89d0a3
IT
3998 /* PREFIX_MOD_1_0FAE_REG_6 */
3999 {
4000 { RM_TABLE (RM_0FAE_REG_6) },
4001 { "umonitor", { Eva }, PREFIX_OPCODE },
ae1d3843
L
4002 { "tpause", { Edq }, PREFIX_OPCODE },
4003 { "umwait", { Edq }, PREFIX_OPCODE },
de89d0a3
IT
4004 },
4005
963f3586
IT
4006 /* PREFIX_0FAE_REG_7 */
4007 {
bf890a93 4008 { "clflush", { Mb }, 0 },
963f3586 4009 { Bad_Opcode },
bf890a93 4010 { "clflushopt", { Mb }, 0 },
963f3586
IT
4011 },
4012
1ceb70f8 4013 /* PREFIX_0FB8 */
ca164297 4014 {
592d1631 4015 { Bad_Opcode },
bf890a93 4016 { "popcntS", { Gv, Ev }, 0 },
ca164297 4017 },
4e7d34a6 4018
f12dc422
L
4019 /* PREFIX_0FBC */
4020 {
bf890a93
IT
4021 { "bsfS", { Gv, Ev }, 0 },
4022 { "tzcntS", { Gv, Ev }, 0 },
4023 { "bsfS", { Gv, Ev }, 0 },
f12dc422
L
4024 },
4025
1ceb70f8 4026 /* PREFIX_0FBD */
050dfa73 4027 {
bf890a93
IT
4028 { "bsrS", { Gv, Ev }, 0 },
4029 { "lzcntS", { Gv, Ev }, 0 },
4030 { "bsrS", { Gv, Ev }, 0 },
050dfa73
MM
4031 },
4032
1ceb70f8 4033 /* PREFIX_0FC2 */
050dfa73 4034 {
507bd325
L
4035 { "cmpps", { XM, EXx, CMP }, PREFIX_OPCODE },
4036 { "cmpss", { XM, EXd, CMP }, PREFIX_OPCODE },
4037 { "cmppd", { XM, EXx, CMP }, PREFIX_OPCODE },
4038 { "cmpsd", { XM, EXq, CMP }, PREFIX_OPCODE },
050dfa73 4039 },
246c51aa 4040
a8484f96 4041 /* PREFIX_MOD_0_0FC3 */
4ee52178 4042 {
a8484f96 4043 { "movntiS", { Ev, Gv }, PREFIX_OPCODE },
4ee52178
L
4044 },
4045
f24bcbaa 4046 /* PREFIX_MOD_0_0FC7_REG_6 */
92fddf8e 4047 {
bf890a93
IT
4048 { "vmptrld",{ Mq }, 0 },
4049 { "vmxon", { Mq }, 0 },
4050 { "vmclear",{ Mq }, 0 },
92fddf8e
L
4051 },
4052
f24bcbaa
L
4053 /* PREFIX_MOD_3_0FC7_REG_6 */
4054 {
4055 { "rdrand", { Ev }, 0 },
4056 { Bad_Opcode },
4057 { "rdrand", { Ev }, 0 }
4058 },
4059
4060 /* PREFIX_MOD_3_0FC7_REG_7 */
4061 {
4062 { "rdseed", { Ev }, 0 },
8bc52696 4063 { "rdpid", { Em }, 0 },
f24bcbaa
L
4064 { "rdseed", { Ev }, 0 },
4065 },
4066
1ceb70f8 4067 /* PREFIX_0FD0 */
050dfa73 4068 {
592d1631
L
4069 { Bad_Opcode },
4070 { Bad_Opcode },
bf890a93
IT
4071 { "addsubpd", { XM, EXx }, 0 },
4072 { "addsubps", { XM, EXx }, 0 },
246c51aa 4073 },
050dfa73 4074
1ceb70f8 4075 /* PREFIX_0FD6 */
050dfa73 4076 {
592d1631 4077 { Bad_Opcode },
bf890a93
IT
4078 { "movq2dq",{ XM, MS }, 0 },
4079 { "movq", { EXqS, XM }, 0 },
4080 { "movdq2q",{ MX, XS }, 0 },
050dfa73
MM
4081 },
4082
1ceb70f8 4083 /* PREFIX_0FE6 */
7918206c 4084 {
592d1631 4085 { Bad_Opcode },
507bd325
L
4086 { "cvtdq2pd", { XM, EXq }, PREFIX_OPCODE },
4087 { "cvttpd2dq", { XM, EXx }, PREFIX_OPCODE },
4088 { "cvtpd2dq", { XM, EXx }, PREFIX_OPCODE },
7918206c 4089 },
8b38ad71 4090
1ceb70f8 4091 /* PREFIX_0FE7 */
8b38ad71 4092 {
507bd325 4093 { "movntq", { Mq, MX }, PREFIX_OPCODE },
592d1631 4094 { Bad_Opcode },
75c135a8 4095 { MOD_TABLE (MOD_0FE7_PREFIX_2) },
4e7d34a6
L
4096 },
4097
1ceb70f8 4098 /* PREFIX_0FF0 */
4e7d34a6 4099 {
592d1631
L
4100 { Bad_Opcode },
4101 { Bad_Opcode },
4102 { Bad_Opcode },
1ceb70f8 4103 { MOD_TABLE (MOD_0FF0_PREFIX_3) },
4e7d34a6
L
4104 },
4105
1ceb70f8 4106 /* PREFIX_0FF7 */
4e7d34a6 4107 {
507bd325 4108 { "maskmovq", { MX, MS }, PREFIX_OPCODE },
592d1631 4109 { Bad_Opcode },
507bd325 4110 { "maskmovdqu", { XM, XS }, PREFIX_OPCODE },
8b38ad71 4111 },
42903f7f 4112
1ceb70f8 4113 /* PREFIX_0F3810 */
42903f7f 4114 {
592d1631
L
4115 { Bad_Opcode },
4116 { Bad_Opcode },
507bd325 4117 { "pblendvb", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4118 },
4119
1ceb70f8 4120 /* PREFIX_0F3814 */
42903f7f 4121 {
592d1631
L
4122 { Bad_Opcode },
4123 { Bad_Opcode },
507bd325 4124 { "blendvps", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4125 },
4126
1ceb70f8 4127 /* PREFIX_0F3815 */
42903f7f 4128 {
592d1631
L
4129 { Bad_Opcode },
4130 { Bad_Opcode },
507bd325 4131 { "blendvpd", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4132 },
4133
1ceb70f8 4134 /* PREFIX_0F3817 */
42903f7f 4135 {
592d1631
L
4136 { Bad_Opcode },
4137 { Bad_Opcode },
507bd325 4138 { "ptest", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4139 },
4140
1ceb70f8 4141 /* PREFIX_0F3820 */
42903f7f 4142 {
592d1631
L
4143 { Bad_Opcode },
4144 { Bad_Opcode },
507bd325 4145 { "pmovsxbw", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4146 },
4147
1ceb70f8 4148 /* PREFIX_0F3821 */
42903f7f 4149 {
592d1631
L
4150 { Bad_Opcode },
4151 { Bad_Opcode },
507bd325 4152 { "pmovsxbd", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4153 },
4154
1ceb70f8 4155 /* PREFIX_0F3822 */
42903f7f 4156 {
592d1631
L
4157 { Bad_Opcode },
4158 { Bad_Opcode },
507bd325 4159 { "pmovsxbq", { XM, EXw }, PREFIX_OPCODE },
42903f7f
L
4160 },
4161
1ceb70f8 4162 /* PREFIX_0F3823 */
42903f7f 4163 {
592d1631
L
4164 { Bad_Opcode },
4165 { Bad_Opcode },
507bd325 4166 { "pmovsxwd", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4167 },
4168
1ceb70f8 4169 /* PREFIX_0F3824 */
42903f7f 4170 {
592d1631
L
4171 { Bad_Opcode },
4172 { Bad_Opcode },
507bd325 4173 { "pmovsxwq", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4174 },
4175
1ceb70f8 4176 /* PREFIX_0F3825 */
42903f7f 4177 {
592d1631
L
4178 { Bad_Opcode },
4179 { Bad_Opcode },
507bd325 4180 { "pmovsxdq", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4181 },
4182
1ceb70f8 4183 /* PREFIX_0F3828 */
42903f7f 4184 {
592d1631
L
4185 { Bad_Opcode },
4186 { Bad_Opcode },
507bd325 4187 { "pmuldq", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4188 },
4189
1ceb70f8 4190 /* PREFIX_0F3829 */
42903f7f 4191 {
592d1631
L
4192 { Bad_Opcode },
4193 { Bad_Opcode },
507bd325 4194 { "pcmpeqq", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4195 },
4196
1ceb70f8 4197 /* PREFIX_0F382A */
42903f7f 4198 {
592d1631
L
4199 { Bad_Opcode },
4200 { Bad_Opcode },
75c135a8 4201 { MOD_TABLE (MOD_0F382A_PREFIX_2) },
42903f7f
L
4202 },
4203
1ceb70f8 4204 /* PREFIX_0F382B */
42903f7f 4205 {
592d1631
L
4206 { Bad_Opcode },
4207 { Bad_Opcode },
507bd325 4208 { "packusdw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4209 },
4210
1ceb70f8 4211 /* PREFIX_0F3830 */
42903f7f 4212 {
592d1631
L
4213 { Bad_Opcode },
4214 { Bad_Opcode },
507bd325 4215 { "pmovzxbw", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4216 },
4217
1ceb70f8 4218 /* PREFIX_0F3831 */
42903f7f 4219 {
592d1631
L
4220 { Bad_Opcode },
4221 { Bad_Opcode },
507bd325 4222 { "pmovzxbd", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4223 },
4224
1ceb70f8 4225 /* PREFIX_0F3832 */
42903f7f 4226 {
592d1631
L
4227 { Bad_Opcode },
4228 { Bad_Opcode },
507bd325 4229 { "pmovzxbq", { XM, EXw }, PREFIX_OPCODE },
42903f7f
L
4230 },
4231
1ceb70f8 4232 /* PREFIX_0F3833 */
42903f7f 4233 {
592d1631
L
4234 { Bad_Opcode },
4235 { Bad_Opcode },
507bd325 4236 { "pmovzxwd", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4237 },
4238
1ceb70f8 4239 /* PREFIX_0F3834 */
42903f7f 4240 {
592d1631
L
4241 { Bad_Opcode },
4242 { Bad_Opcode },
507bd325 4243 { "pmovzxwq", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4244 },
4245
1ceb70f8 4246 /* PREFIX_0F3835 */
42903f7f 4247 {
592d1631
L
4248 { Bad_Opcode },
4249 { Bad_Opcode },
507bd325 4250 { "pmovzxdq", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4251 },
4252
1ceb70f8 4253 /* PREFIX_0F3837 */
4e7d34a6 4254 {
592d1631
L
4255 { Bad_Opcode },
4256 { Bad_Opcode },
507bd325 4257 { "pcmpgtq", { XM, EXx }, PREFIX_OPCODE },
4e7d34a6
L
4258 },
4259
1ceb70f8 4260 /* PREFIX_0F3838 */
42903f7f 4261 {
592d1631
L
4262 { Bad_Opcode },
4263 { Bad_Opcode },
507bd325 4264 { "pminsb", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4265 },
4266
1ceb70f8 4267 /* PREFIX_0F3839 */
42903f7f 4268 {
592d1631
L
4269 { Bad_Opcode },
4270 { Bad_Opcode },
507bd325 4271 { "pminsd", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4272 },
4273
1ceb70f8 4274 /* PREFIX_0F383A */
42903f7f 4275 {
592d1631
L
4276 { Bad_Opcode },
4277 { Bad_Opcode },
507bd325 4278 { "pminuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4279 },
4280
1ceb70f8 4281 /* PREFIX_0F383B */
42903f7f 4282 {
592d1631
L
4283 { Bad_Opcode },
4284 { Bad_Opcode },
507bd325 4285 { "pminud", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4286 },
4287
1ceb70f8 4288 /* PREFIX_0F383C */
42903f7f 4289 {
592d1631
L
4290 { Bad_Opcode },
4291 { Bad_Opcode },
507bd325 4292 { "pmaxsb", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4293 },
4294
1ceb70f8 4295 /* PREFIX_0F383D */
42903f7f 4296 {
592d1631
L
4297 { Bad_Opcode },
4298 { Bad_Opcode },
507bd325 4299 { "pmaxsd", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4300 },
4301
1ceb70f8 4302 /* PREFIX_0F383E */
42903f7f 4303 {
592d1631
L
4304 { Bad_Opcode },
4305 { Bad_Opcode },
507bd325 4306 { "pmaxuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4307 },
4308
1ceb70f8 4309 /* PREFIX_0F383F */
42903f7f 4310 {
592d1631
L
4311 { Bad_Opcode },
4312 { Bad_Opcode },
507bd325 4313 { "pmaxud", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4314 },
4315
1ceb70f8 4316 /* PREFIX_0F3840 */
42903f7f 4317 {
592d1631
L
4318 { Bad_Opcode },
4319 { Bad_Opcode },
507bd325 4320 { "pmulld", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4321 },
4322
1ceb70f8 4323 /* PREFIX_0F3841 */
42903f7f 4324 {
592d1631
L
4325 { Bad_Opcode },
4326 { Bad_Opcode },
507bd325 4327 { "phminposuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4328 },
4329
f1f8f695
L
4330 /* PREFIX_0F3880 */
4331 {
592d1631
L
4332 { Bad_Opcode },
4333 { Bad_Opcode },
507bd325 4334 { "invept", { Gm, Mo }, PREFIX_OPCODE },
f1f8f695
L
4335 },
4336
4337 /* PREFIX_0F3881 */
4338 {
592d1631
L
4339 { Bad_Opcode },
4340 { Bad_Opcode },
507bd325 4341 { "invvpid", { Gm, Mo }, PREFIX_OPCODE },
f1f8f695
L
4342 },
4343
6c30d220
L
4344 /* PREFIX_0F3882 */
4345 {
4346 { Bad_Opcode },
4347 { Bad_Opcode },
507bd325 4348 { "invpcid", { Gm, M }, PREFIX_OPCODE },
6c30d220
L
4349 },
4350
a0046408
L
4351 /* PREFIX_0F38C8 */
4352 {
507bd325 4353 { "sha1nexte", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4354 },
4355
4356 /* PREFIX_0F38C9 */
4357 {
507bd325 4358 { "sha1msg1", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4359 },
4360
4361 /* PREFIX_0F38CA */
4362 {
507bd325 4363 { "sha1msg2", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4364 },
4365
4366 /* PREFIX_0F38CB */
4367 {
507bd325 4368 { "sha256rnds2", { XM, EXxmm, XMM0 }, PREFIX_OPCODE },
a0046408
L
4369 },
4370
4371 /* PREFIX_0F38CC */
4372 {
507bd325 4373 { "sha256msg1", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4374 },
4375
4376 /* PREFIX_0F38CD */
4377 {
507bd325 4378 { "sha256msg2", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4379 },
4380
48521003
IT
4381 /* PREFIX_0F38CF */
4382 {
4383 { Bad_Opcode },
4384 { Bad_Opcode },
4385 { "gf2p8mulb", { XM, EXxmm }, PREFIX_OPCODE },
4386 },
4387
c0f3af97
L
4388 /* PREFIX_0F38DB */
4389 {
592d1631
L
4390 { Bad_Opcode },
4391 { Bad_Opcode },
507bd325 4392 { "aesimc", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4393 },
4394
4395 /* PREFIX_0F38DC */
4396 {
592d1631
L
4397 { Bad_Opcode },
4398 { Bad_Opcode },
507bd325 4399 { "aesenc", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4400 },
4401
4402 /* PREFIX_0F38DD */
4403 {
592d1631
L
4404 { Bad_Opcode },
4405 { Bad_Opcode },
507bd325 4406 { "aesenclast", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4407 },
4408
4409 /* PREFIX_0F38DE */
4410 {
592d1631
L
4411 { Bad_Opcode },
4412 { Bad_Opcode },
507bd325 4413 { "aesdec", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4414 },
4415
4416 /* PREFIX_0F38DF */
4417 {
592d1631
L
4418 { Bad_Opcode },
4419 { Bad_Opcode },
507bd325 4420 { "aesdeclast", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4421 },
4422
1ceb70f8 4423 /* PREFIX_0F38F0 */
4e7d34a6 4424 {
507bd325 4425 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } }, PREFIX_OPCODE },
592d1631 4426 { Bad_Opcode },
507bd325
L
4427 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } }, PREFIX_OPCODE },
4428 { "crc32", { Gdq, { CRC32_Fixup, b_mode } }, PREFIX_OPCODE },
4e7d34a6
L
4429 },
4430
1ceb70f8 4431 /* PREFIX_0F38F1 */
4e7d34a6 4432 {
507bd325 4433 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv }, PREFIX_OPCODE },
592d1631 4434 { Bad_Opcode },
507bd325
L
4435 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv }, PREFIX_OPCODE },
4436 { "crc32", { Gdq, { CRC32_Fixup, v_mode } }, PREFIX_OPCODE },
4e7d34a6
L
4437 },
4438
603555e5 4439 /* PREFIX_0F38F5 */
e2e1fcde
L
4440 {
4441 { Bad_Opcode },
603555e5
L
4442 { Bad_Opcode },
4443 { MOD_TABLE (MOD_0F38F5_PREFIX_2) },
4444 },
4445
4446 /* PREFIX_0F38F6 */
4447 {
4448 { MOD_TABLE (MOD_0F38F6_PREFIX_0) },
507bd325
L
4449 { "adoxS", { Gdq, Edq}, PREFIX_OPCODE },
4450 { "adcxS", { Gdq, Edq}, PREFIX_OPCODE },
e2e1fcde
L
4451 { Bad_Opcode },
4452 },
4453
c0a30a9f
L
4454 /* PREFIX_0F38F8 */
4455 {
4456 { Bad_Opcode },
4457 { Bad_Opcode },
4458 { MOD_TABLE (MOD_0F38F8_PREFIX_2) },
4459 },
4460
4461 /* PREFIX_0F38F9 */
4462 {
4463 { MOD_TABLE (MOD_0F38F9_PREFIX_0) },
4464 },
4465
1ceb70f8 4466 /* PREFIX_0F3A08 */
42903f7f 4467 {
592d1631
L
4468 { Bad_Opcode },
4469 { Bad_Opcode },
507bd325 4470 { "roundps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4471 },
4472
1ceb70f8 4473 /* PREFIX_0F3A09 */
42903f7f 4474 {
592d1631
L
4475 { Bad_Opcode },
4476 { Bad_Opcode },
507bd325 4477 { "roundpd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4478 },
4479
1ceb70f8 4480 /* PREFIX_0F3A0A */
42903f7f 4481 {
592d1631
L
4482 { Bad_Opcode },
4483 { Bad_Opcode },
507bd325 4484 { "roundss", { XM, EXd, Ib }, PREFIX_OPCODE },
42903f7f
L
4485 },
4486
1ceb70f8 4487 /* PREFIX_0F3A0B */
42903f7f 4488 {
592d1631
L
4489 { Bad_Opcode },
4490 { Bad_Opcode },
507bd325 4491 { "roundsd", { XM, EXq, Ib }, PREFIX_OPCODE },
42903f7f
L
4492 },
4493
1ceb70f8 4494 /* PREFIX_0F3A0C */
42903f7f 4495 {
592d1631
L
4496 { Bad_Opcode },
4497 { Bad_Opcode },
507bd325 4498 { "blendps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4499 },
4500
1ceb70f8 4501 /* PREFIX_0F3A0D */
42903f7f 4502 {
592d1631
L
4503 { Bad_Opcode },
4504 { Bad_Opcode },
507bd325 4505 { "blendpd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4506 },
4507
1ceb70f8 4508 /* PREFIX_0F3A0E */
42903f7f 4509 {
592d1631
L
4510 { Bad_Opcode },
4511 { Bad_Opcode },
507bd325 4512 { "pblendw", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4513 },
4514
1ceb70f8 4515 /* PREFIX_0F3A14 */
42903f7f 4516 {
592d1631
L
4517 { Bad_Opcode },
4518 { Bad_Opcode },
507bd325 4519 { "pextrb", { Edqb, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4520 },
4521
1ceb70f8 4522 /* PREFIX_0F3A15 */
42903f7f 4523 {
592d1631
L
4524 { Bad_Opcode },
4525 { Bad_Opcode },
507bd325 4526 { "pextrw", { Edqw, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4527 },
4528
1ceb70f8 4529 /* PREFIX_0F3A16 */
42903f7f 4530 {
592d1631
L
4531 { Bad_Opcode },
4532 { Bad_Opcode },
507bd325 4533 { "pextrK", { Edq, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4534 },
4535
1ceb70f8 4536 /* PREFIX_0F3A17 */
42903f7f 4537 {
592d1631
L
4538 { Bad_Opcode },
4539 { Bad_Opcode },
507bd325 4540 { "extractps", { Edqd, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4541 },
4542
1ceb70f8 4543 /* PREFIX_0F3A20 */
42903f7f 4544 {
592d1631
L
4545 { Bad_Opcode },
4546 { Bad_Opcode },
507bd325 4547 { "pinsrb", { XM, Edqb, Ib }, PREFIX_OPCODE },
42903f7f
L
4548 },
4549
1ceb70f8 4550 /* PREFIX_0F3A21 */
42903f7f 4551 {
592d1631
L
4552 { Bad_Opcode },
4553 { Bad_Opcode },
507bd325 4554 { "insertps", { XM, EXd, Ib }, PREFIX_OPCODE },
42903f7f
L
4555 },
4556
1ceb70f8 4557 /* PREFIX_0F3A22 */
42903f7f 4558 {
592d1631
L
4559 { Bad_Opcode },
4560 { Bad_Opcode },
507bd325 4561 { "pinsrK", { XM, Edq, Ib }, PREFIX_OPCODE },
42903f7f
L
4562 },
4563
1ceb70f8 4564 /* PREFIX_0F3A40 */
42903f7f 4565 {
592d1631
L
4566 { Bad_Opcode },
4567 { Bad_Opcode },
507bd325 4568 { "dpps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4569 },
4570
1ceb70f8 4571 /* PREFIX_0F3A41 */
42903f7f 4572 {
592d1631
L
4573 { Bad_Opcode },
4574 { Bad_Opcode },
507bd325 4575 { "dppd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4576 },
4577
1ceb70f8 4578 /* PREFIX_0F3A42 */
42903f7f 4579 {
592d1631
L
4580 { Bad_Opcode },
4581 { Bad_Opcode },
507bd325 4582 { "mpsadbw", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f 4583 },
381d071f 4584
c0f3af97
L
4585 /* PREFIX_0F3A44 */
4586 {
592d1631
L
4587 { Bad_Opcode },
4588 { Bad_Opcode },
507bd325 4589 { "pclmulqdq", { XM, EXx, PCLMUL }, PREFIX_OPCODE },
c0f3af97
L
4590 },
4591
1ceb70f8 4592 /* PREFIX_0F3A60 */
381d071f 4593 {
592d1631
L
4594 { Bad_Opcode },
4595 { Bad_Opcode },
15c7c1d8 4596 { "pcmpestrm", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, PREFIX_OPCODE },
381d071f
L
4597 },
4598
1ceb70f8 4599 /* PREFIX_0F3A61 */
381d071f 4600 {
592d1631
L
4601 { Bad_Opcode },
4602 { Bad_Opcode },
15c7c1d8 4603 { "pcmpestri", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, PREFIX_OPCODE },
381d071f
L
4604 },
4605
1ceb70f8 4606 /* PREFIX_0F3A62 */
381d071f 4607 {
592d1631
L
4608 { Bad_Opcode },
4609 { Bad_Opcode },
507bd325 4610 { "pcmpistrm", { XM, EXx, Ib }, PREFIX_OPCODE },
381d071f
L
4611 },
4612
1ceb70f8 4613 /* PREFIX_0F3A63 */
381d071f 4614 {
592d1631
L
4615 { Bad_Opcode },
4616 { Bad_Opcode },
507bd325 4617 { "pcmpistri", { XM, EXx, Ib }, PREFIX_OPCODE },
381d071f 4618 },
09a2c6cf 4619
a0046408
L
4620 /* PREFIX_0F3ACC */
4621 {
507bd325 4622 { "sha1rnds4", { XM, EXxmm, Ib }, PREFIX_OPCODE },
a0046408
L
4623 },
4624
48521003
IT
4625 /* PREFIX_0F3ACE */
4626 {
4627 { Bad_Opcode },
4628 { Bad_Opcode },
4629 { "gf2p8affineqb", { XM, EXxmm, Ib }, PREFIX_OPCODE },
4630 },
4631
4632 /* PREFIX_0F3ACF */
4633 {
4634 { Bad_Opcode },
4635 { Bad_Opcode },
4636 { "gf2p8affineinvqb", { XM, EXxmm, Ib }, PREFIX_OPCODE },
4637 },
4638
c0f3af97 4639 /* PREFIX_0F3ADF */
09a2c6cf 4640 {
592d1631
L
4641 { Bad_Opcode },
4642 { Bad_Opcode },
507bd325 4643 { "aeskeygenassist", { XM, EXx, Ib }, PREFIX_OPCODE },
09a2c6cf
L
4644 },
4645
592a252b 4646 /* PREFIX_VEX_0F10 */
09a2c6cf 4647 {
ec6f095a
L
4648 { "vmovups", { XM, EXx }, 0 },
4649 { "vmovss", { XMVexScalar, VexScalar, EXdScalar }, 0 },
4650 { "vmovupd", { XM, EXx }, 0 },
4651 { "vmovsd", { XMVexScalar, VexScalar, EXqScalar }, 0 },
09a2c6cf
L
4652 },
4653
592a252b 4654 /* PREFIX_VEX_0F11 */
09a2c6cf 4655 {
ec6f095a
L
4656 { "vmovups", { EXxS, XM }, 0 },
4657 { "vmovss", { EXdVexScalarS, VexScalar, XMScalar }, 0 },
4658 { "vmovupd", { EXxS, XM }, 0 },
4659 { "vmovsd", { EXqVexScalarS, VexScalar, XMScalar }, 0 },
09a2c6cf
L
4660 },
4661
592a252b 4662 /* PREFIX_VEX_0F12 */
09a2c6cf 4663 {
592a252b 4664 { MOD_TABLE (MOD_VEX_0F12_PREFIX_0) },
ec6f095a 4665 { "vmovsldup", { XM, EXx }, 0 },
592a252b 4666 { VEX_LEN_TABLE (VEX_LEN_0F12_P_2) },
ec6f095a 4667 { "vmovddup", { XM, EXymmq }, 0 },
09a2c6cf
L
4668 },
4669
592a252b 4670 /* PREFIX_VEX_0F16 */
09a2c6cf 4671 {
592a252b 4672 { MOD_TABLE (MOD_VEX_0F16_PREFIX_0) },
ec6f095a 4673 { "vmovshdup", { XM, EXx }, 0 },
592a252b 4674 { VEX_LEN_TABLE (VEX_LEN_0F16_P_2) },
5f754f58 4675 },
7c52e0e8 4676
592a252b 4677 /* PREFIX_VEX_0F2A */
5f754f58 4678 {
592d1631 4679 { Bad_Opcode },
592a252b 4680 { VEX_LEN_TABLE (VEX_LEN_0F2A_P_1) },
592d1631 4681 { Bad_Opcode },
592a252b 4682 { VEX_LEN_TABLE (VEX_LEN_0F2A_P_3) },
5f754f58 4683 },
7c52e0e8 4684
592a252b 4685 /* PREFIX_VEX_0F2C */
5f754f58 4686 {
592d1631 4687 { Bad_Opcode },
592a252b 4688 { VEX_LEN_TABLE (VEX_LEN_0F2C_P_1) },
592d1631 4689 { Bad_Opcode },
592a252b 4690 { VEX_LEN_TABLE (VEX_LEN_0F2C_P_3) },
5f754f58 4691 },
7c52e0e8 4692
592a252b 4693 /* PREFIX_VEX_0F2D */
7c52e0e8 4694 {
592d1631 4695 { Bad_Opcode },
592a252b 4696 { VEX_LEN_TABLE (VEX_LEN_0F2D_P_1) },
592d1631 4697 { Bad_Opcode },
592a252b 4698 { VEX_LEN_TABLE (VEX_LEN_0F2D_P_3) },
7c52e0e8
L
4699 },
4700
592a252b 4701 /* PREFIX_VEX_0F2E */
7c52e0e8 4702 {
ec6f095a 4703 { "vucomiss", { XMScalar, EXdScalar }, 0 },
592d1631 4704 { Bad_Opcode },
ec6f095a 4705 { "vucomisd", { XMScalar, EXqScalar }, 0 },
7c52e0e8
L
4706 },
4707
592a252b 4708 /* PREFIX_VEX_0F2F */
7c52e0e8 4709 {
ec6f095a 4710 { "vcomiss", { XMScalar, EXdScalar }, 0 },
592d1631 4711 { Bad_Opcode },
ec6f095a 4712 { "vcomisd", { XMScalar, EXqScalar }, 0 },
7c52e0e8
L
4713 },
4714
43234a1e
L
4715 /* PREFIX_VEX_0F41 */
4716 {
4717 { VEX_LEN_TABLE (VEX_LEN_0F41_P_0) },
1ba585e8
IT
4718 { Bad_Opcode },
4719 { VEX_LEN_TABLE (VEX_LEN_0F41_P_2) },
43234a1e
L
4720 },
4721
4722 /* PREFIX_VEX_0F42 */
4723 {
4724 { VEX_LEN_TABLE (VEX_LEN_0F42_P_0) },
1ba585e8
IT
4725 { Bad_Opcode },
4726 { VEX_LEN_TABLE (VEX_LEN_0F42_P_2) },
43234a1e
L
4727 },
4728
4729 /* PREFIX_VEX_0F44 */
4730 {
4731 { VEX_LEN_TABLE (VEX_LEN_0F44_P_0) },
1ba585e8
IT
4732 { Bad_Opcode },
4733 { VEX_LEN_TABLE (VEX_LEN_0F44_P_2) },
43234a1e
L
4734 },
4735
4736 /* PREFIX_VEX_0F45 */
4737 {
4738 { VEX_LEN_TABLE (VEX_LEN_0F45_P_0) },
1ba585e8
IT
4739 { Bad_Opcode },
4740 { VEX_LEN_TABLE (VEX_LEN_0F45_P_2) },
43234a1e
L
4741 },
4742
4743 /* PREFIX_VEX_0F46 */
4744 {
4745 { VEX_LEN_TABLE (VEX_LEN_0F46_P_0) },
1ba585e8
IT
4746 { Bad_Opcode },
4747 { VEX_LEN_TABLE (VEX_LEN_0F46_P_2) },
43234a1e
L
4748 },
4749
4750 /* PREFIX_VEX_0F47 */
4751 {
4752 { VEX_LEN_TABLE (VEX_LEN_0F47_P_0) },
1ba585e8
IT
4753 { Bad_Opcode },
4754 { VEX_LEN_TABLE (VEX_LEN_0F47_P_2) },
43234a1e
L
4755 },
4756
1ba585e8 4757 /* PREFIX_VEX_0F4A */
43234a1e 4758 {
1ba585e8 4759 { VEX_LEN_TABLE (VEX_LEN_0F4A_P_0) },
43234a1e 4760 { Bad_Opcode },
1ba585e8
IT
4761 { VEX_LEN_TABLE (VEX_LEN_0F4A_P_2) },
4762 },
4763
4764 /* PREFIX_VEX_0F4B */
4765 {
4766 { VEX_LEN_TABLE (VEX_LEN_0F4B_P_0) },
43234a1e
L
4767 { Bad_Opcode },
4768 { VEX_LEN_TABLE (VEX_LEN_0F4B_P_2) },
4769 },
4770
592a252b 4771 /* PREFIX_VEX_0F51 */
7c52e0e8 4772 {
ec6f095a
L
4773 { "vsqrtps", { XM, EXx }, 0 },
4774 { "vsqrtss", { XMScalar, VexScalar, EXdScalar }, 0 },
4775 { "vsqrtpd", { XM, EXx }, 0 },
4776 { "vsqrtsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4777 },
4778
592a252b 4779 /* PREFIX_VEX_0F52 */
7c52e0e8 4780 {
ec6f095a
L
4781 { "vrsqrtps", { XM, EXx }, 0 },
4782 { "vrsqrtss", { XMScalar, VexScalar, EXdScalar }, 0 },
7c52e0e8
L
4783 },
4784
592a252b 4785 /* PREFIX_VEX_0F53 */
7c52e0e8 4786 {
ec6f095a
L
4787 { "vrcpps", { XM, EXx }, 0 },
4788 { "vrcpss", { XMScalar, VexScalar, EXdScalar }, 0 },
7c52e0e8
L
4789 },
4790
592a252b 4791 /* PREFIX_VEX_0F58 */
7c52e0e8 4792 {
ec6f095a
L
4793 { "vaddps", { XM, Vex, EXx }, 0 },
4794 { "vaddss", { XMScalar, VexScalar, EXdScalar }, 0 },
4795 { "vaddpd", { XM, Vex, EXx }, 0 },
4796 { "vaddsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4797 },
4798
592a252b 4799 /* PREFIX_VEX_0F59 */
7c52e0e8 4800 {
ec6f095a
L
4801 { "vmulps", { XM, Vex, EXx }, 0 },
4802 { "vmulss", { XMScalar, VexScalar, EXdScalar }, 0 },
4803 { "vmulpd", { XM, Vex, EXx }, 0 },
4804 { "vmulsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4805 },
4806
592a252b 4807 /* PREFIX_VEX_0F5A */
7c52e0e8 4808 {
ec6f095a
L
4809 { "vcvtps2pd", { XM, EXxmmq }, 0 },
4810 { "vcvtss2sd", { XMScalar, VexScalar, EXdScalar }, 0 },
4811 { "vcvtpd2ps%XY",{ XMM, EXx }, 0 },
4812 { "vcvtsd2ss", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4813 },
4814
592a252b 4815 /* PREFIX_VEX_0F5B */
7c52e0e8 4816 {
ec6f095a
L
4817 { "vcvtdq2ps", { XM, EXx }, 0 },
4818 { "vcvttps2dq", { XM, EXx }, 0 },
4819 { "vcvtps2dq", { XM, EXx }, 0 },
7c52e0e8
L
4820 },
4821
592a252b 4822 /* PREFIX_VEX_0F5C */
7c52e0e8 4823 {
ec6f095a
L
4824 { "vsubps", { XM, Vex, EXx }, 0 },
4825 { "vsubss", { XMScalar, VexScalar, EXdScalar }, 0 },
4826 { "vsubpd", { XM, Vex, EXx }, 0 },
4827 { "vsubsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4828 },
4829
592a252b 4830 /* PREFIX_VEX_0F5D */
7c52e0e8 4831 {
ec6f095a
L
4832 { "vminps", { XM, Vex, EXx }, 0 },
4833 { "vminss", { XMScalar, VexScalar, EXdScalar }, 0 },
4834 { "vminpd", { XM, Vex, EXx }, 0 },
4835 { "vminsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4836 },
4837
592a252b 4838 /* PREFIX_VEX_0F5E */
7c52e0e8 4839 {
ec6f095a
L
4840 { "vdivps", { XM, Vex, EXx }, 0 },
4841 { "vdivss", { XMScalar, VexScalar, EXdScalar }, 0 },
4842 { "vdivpd", { XM, Vex, EXx }, 0 },
4843 { "vdivsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4844 },
4845
592a252b 4846 /* PREFIX_VEX_0F5F */
7c52e0e8 4847 {
ec6f095a
L
4848 { "vmaxps", { XM, Vex, EXx }, 0 },
4849 { "vmaxss", { XMScalar, VexScalar, EXdScalar }, 0 },
4850 { "vmaxpd", { XM, Vex, EXx }, 0 },
4851 { "vmaxsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4852 },
4853
592a252b 4854 /* PREFIX_VEX_0F60 */
7c52e0e8 4855 {
592d1631
L
4856 { Bad_Opcode },
4857 { Bad_Opcode },
ec6f095a 4858 { "vpunpcklbw", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4859 },
4860
592a252b 4861 /* PREFIX_VEX_0F61 */
7c52e0e8 4862 {
592d1631
L
4863 { Bad_Opcode },
4864 { Bad_Opcode },
ec6f095a 4865 { "vpunpcklwd", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4866 },
4867
592a252b 4868 /* PREFIX_VEX_0F62 */
7c52e0e8 4869 {
592d1631
L
4870 { Bad_Opcode },
4871 { Bad_Opcode },
ec6f095a 4872 { "vpunpckldq", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4873 },
4874
592a252b 4875 /* PREFIX_VEX_0F63 */
7c52e0e8 4876 {
592d1631
L
4877 { Bad_Opcode },
4878 { Bad_Opcode },
ec6f095a 4879 { "vpacksswb", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4880 },
4881
592a252b 4882 /* PREFIX_VEX_0F64 */
7c52e0e8 4883 {
592d1631
L
4884 { Bad_Opcode },
4885 { Bad_Opcode },
ec6f095a 4886 { "vpcmpgtb", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4887 },
4888
592a252b 4889 /* PREFIX_VEX_0F65 */
7c52e0e8 4890 {
592d1631
L
4891 { Bad_Opcode },
4892 { Bad_Opcode },
ec6f095a 4893 { "vpcmpgtw", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4894 },
4895
592a252b 4896 /* PREFIX_VEX_0F66 */
7c52e0e8 4897 {
592d1631
L
4898 { Bad_Opcode },
4899 { Bad_Opcode },
ec6f095a 4900 { "vpcmpgtd", { XM, Vex, EXx }, 0 },
7c52e0e8 4901 },
6439fc28 4902
592a252b 4903 /* PREFIX_VEX_0F67 */
331d2d0d 4904 {
592d1631
L
4905 { Bad_Opcode },
4906 { Bad_Opcode },
ec6f095a 4907 { "vpackuswb", { XM, Vex, EXx }, 0 },
c0f3af97
L
4908 },
4909
592a252b 4910 /* PREFIX_VEX_0F68 */
c0f3af97 4911 {
592d1631
L
4912 { Bad_Opcode },
4913 { Bad_Opcode },
ec6f095a 4914 { "vpunpckhbw", { XM, Vex, EXx }, 0 },
c0f3af97
L
4915 },
4916
592a252b 4917 /* PREFIX_VEX_0F69 */
c0f3af97 4918 {
592d1631
L
4919 { Bad_Opcode },
4920 { Bad_Opcode },
ec6f095a 4921 { "vpunpckhwd", { XM, Vex, EXx }, 0 },
c0f3af97
L
4922 },
4923
592a252b 4924 /* PREFIX_VEX_0F6A */
c0f3af97 4925 {
592d1631
L
4926 { Bad_Opcode },
4927 { Bad_Opcode },
ec6f095a 4928 { "vpunpckhdq", { XM, Vex, EXx }, 0 },
c0f3af97
L
4929 },
4930
592a252b 4931 /* PREFIX_VEX_0F6B */
c0f3af97 4932 {
592d1631
L
4933 { Bad_Opcode },
4934 { Bad_Opcode },
ec6f095a 4935 { "vpackssdw", { XM, Vex, EXx }, 0 },
c0f3af97
L
4936 },
4937
592a252b 4938 /* PREFIX_VEX_0F6C */
c0f3af97 4939 {
592d1631
L
4940 { Bad_Opcode },
4941 { Bad_Opcode },
ec6f095a 4942 { "vpunpcklqdq", { XM, Vex, EXx }, 0 },
c0f3af97
L
4943 },
4944
592a252b 4945 /* PREFIX_VEX_0F6D */
c0f3af97 4946 {
592d1631
L
4947 { Bad_Opcode },
4948 { Bad_Opcode },
ec6f095a 4949 { "vpunpckhqdq", { XM, Vex, EXx }, 0 },
c0f3af97
L
4950 },
4951
592a252b 4952 /* PREFIX_VEX_0F6E */
c0f3af97 4953 {
592d1631
L
4954 { Bad_Opcode },
4955 { Bad_Opcode },
592a252b 4956 { VEX_LEN_TABLE (VEX_LEN_0F6E_P_2) },
c0f3af97
L
4957 },
4958
592a252b 4959 /* PREFIX_VEX_0F6F */
c0f3af97 4960 {
592d1631 4961 { Bad_Opcode },
ec6f095a
L
4962 { "vmovdqu", { XM, EXx }, 0 },
4963 { "vmovdqa", { XM, EXx }, 0 },
c0f3af97
L
4964 },
4965
592a252b 4966 /* PREFIX_VEX_0F70 */
c0f3af97 4967 {
592d1631 4968 { Bad_Opcode },
ec6f095a
L
4969 { "vpshufhw", { XM, EXx, Ib }, 0 },
4970 { "vpshufd", { XM, EXx, Ib }, 0 },
4971 { "vpshuflw", { XM, EXx, Ib }, 0 },
c0f3af97
L
4972 },
4973
592a252b 4974 /* PREFIX_VEX_0F71_REG_2 */
c0f3af97 4975 {
592d1631
L
4976 { Bad_Opcode },
4977 { Bad_Opcode },
ec6f095a 4978 { "vpsrlw", { Vex, XS, Ib }, 0 },
c0f3af97
L
4979 },
4980
592a252b 4981 /* PREFIX_VEX_0F71_REG_4 */
c0f3af97 4982 {
592d1631
L
4983 { Bad_Opcode },
4984 { Bad_Opcode },
ec6f095a 4985 { "vpsraw", { Vex, XS, Ib }, 0 },
c0f3af97
L
4986 },
4987
592a252b 4988 /* PREFIX_VEX_0F71_REG_6 */
c0f3af97 4989 {
592d1631
L
4990 { Bad_Opcode },
4991 { Bad_Opcode },
ec6f095a 4992 { "vpsllw", { Vex, XS, Ib }, 0 },
c0f3af97
L
4993 },
4994
592a252b 4995 /* PREFIX_VEX_0F72_REG_2 */
c0f3af97 4996 {
592d1631
L
4997 { Bad_Opcode },
4998 { Bad_Opcode },
ec6f095a 4999 { "vpsrld", { Vex, XS, Ib }, 0 },
c0f3af97
L
5000 },
5001
592a252b 5002 /* PREFIX_VEX_0F72_REG_4 */
c0f3af97 5003 {
592d1631
L
5004 { Bad_Opcode },
5005 { Bad_Opcode },
ec6f095a 5006 { "vpsrad", { Vex, XS, Ib }, 0 },
c0f3af97
L
5007 },
5008
592a252b 5009 /* PREFIX_VEX_0F72_REG_6 */
c0f3af97 5010 {
592d1631
L
5011 { Bad_Opcode },
5012 { Bad_Opcode },
ec6f095a 5013 { "vpslld", { Vex, XS, Ib }, 0 },
c0f3af97
L
5014 },
5015
592a252b 5016 /* PREFIX_VEX_0F73_REG_2 */
c0f3af97 5017 {
592d1631
L
5018 { Bad_Opcode },
5019 { Bad_Opcode },
ec6f095a 5020 { "vpsrlq", { Vex, XS, Ib }, 0 },
c0f3af97
L
5021 },
5022
592a252b 5023 /* PREFIX_VEX_0F73_REG_3 */
c0f3af97 5024 {
592d1631
L
5025 { Bad_Opcode },
5026 { Bad_Opcode },
ec6f095a 5027 { "vpsrldq", { Vex, XS, Ib }, 0 },
c0f3af97
L
5028 },
5029
592a252b 5030 /* PREFIX_VEX_0F73_REG_6 */
c0f3af97 5031 {
592d1631
L
5032 { Bad_Opcode },
5033 { Bad_Opcode },
ec6f095a 5034 { "vpsllq", { Vex, XS, Ib }, 0 },
c0f3af97
L
5035 },
5036
592a252b 5037 /* PREFIX_VEX_0F73_REG_7 */
c0f3af97 5038 {
592d1631
L
5039 { Bad_Opcode },
5040 { Bad_Opcode },
ec6f095a 5041 { "vpslldq", { Vex, XS, Ib }, 0 },
c0f3af97
L
5042 },
5043
592a252b 5044 /* PREFIX_VEX_0F74 */
c0f3af97 5045 {
592d1631
L
5046 { Bad_Opcode },
5047 { Bad_Opcode },
ec6f095a 5048 { "vpcmpeqb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5049 },
5050
592a252b 5051 /* PREFIX_VEX_0F75 */
c0f3af97 5052 {
592d1631
L
5053 { Bad_Opcode },
5054 { Bad_Opcode },
ec6f095a 5055 { "vpcmpeqw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5056 },
5057
592a252b 5058 /* PREFIX_VEX_0F76 */
c0f3af97 5059 {
592d1631
L
5060 { Bad_Opcode },
5061 { Bad_Opcode },
ec6f095a 5062 { "vpcmpeqd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5063 },
5064
592a252b 5065 /* PREFIX_VEX_0F77 */
c0f3af97 5066 {
ec6f095a 5067 { VEX_LEN_TABLE (VEX_LEN_0F77_P_0) },
c0f3af97
L
5068 },
5069
592a252b 5070 /* PREFIX_VEX_0F7C */
c0f3af97 5071 {
592d1631
L
5072 { Bad_Opcode },
5073 { Bad_Opcode },
ec6f095a
L
5074 { "vhaddpd", { XM, Vex, EXx }, 0 },
5075 { "vhaddps", { XM, Vex, EXx }, 0 },
c0f3af97
L
5076 },
5077
592a252b 5078 /* PREFIX_VEX_0F7D */
c0f3af97 5079 {
592d1631
L
5080 { Bad_Opcode },
5081 { Bad_Opcode },
ec6f095a
L
5082 { "vhsubpd", { XM, Vex, EXx }, 0 },
5083 { "vhsubps", { XM, Vex, EXx }, 0 },
c0f3af97
L
5084 },
5085
592a252b 5086 /* PREFIX_VEX_0F7E */
c0f3af97 5087 {
592d1631 5088 { Bad_Opcode },
592a252b
L
5089 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_1) },
5090 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_2) },
c0f3af97
L
5091 },
5092
592a252b 5093 /* PREFIX_VEX_0F7F */
c0f3af97 5094 {
592d1631 5095 { Bad_Opcode },
ec6f095a
L
5096 { "vmovdqu", { EXxS, XM }, 0 },
5097 { "vmovdqa", { EXxS, XM }, 0 },
c0f3af97
L
5098 },
5099
43234a1e
L
5100 /* PREFIX_VEX_0F90 */
5101 {
5102 { VEX_LEN_TABLE (VEX_LEN_0F90_P_0) },
1ba585e8
IT
5103 { Bad_Opcode },
5104 { VEX_LEN_TABLE (VEX_LEN_0F90_P_2) },
43234a1e
L
5105 },
5106
5107 /* PREFIX_VEX_0F91 */
5108 {
5109 { VEX_LEN_TABLE (VEX_LEN_0F91_P_0) },
1ba585e8
IT
5110 { Bad_Opcode },
5111 { VEX_LEN_TABLE (VEX_LEN_0F91_P_2) },
43234a1e
L
5112 },
5113
5114 /* PREFIX_VEX_0F92 */
5115 {
5116 { VEX_LEN_TABLE (VEX_LEN_0F92_P_0) },
1ba585e8 5117 { Bad_Opcode },
90a915bf 5118 { VEX_LEN_TABLE (VEX_LEN_0F92_P_2) },
1ba585e8 5119 { VEX_LEN_TABLE (VEX_LEN_0F92_P_3) },
43234a1e
L
5120 },
5121
5122 /* PREFIX_VEX_0F93 */
5123 {
5124 { VEX_LEN_TABLE (VEX_LEN_0F93_P_0) },
1ba585e8 5125 { Bad_Opcode },
90a915bf 5126 { VEX_LEN_TABLE (VEX_LEN_0F93_P_2) },
1ba585e8 5127 { VEX_LEN_TABLE (VEX_LEN_0F93_P_3) },
43234a1e
L
5128 },
5129
5130 /* PREFIX_VEX_0F98 */
5131 {
5132 { VEX_LEN_TABLE (VEX_LEN_0F98_P_0) },
1ba585e8
IT
5133 { Bad_Opcode },
5134 { VEX_LEN_TABLE (VEX_LEN_0F98_P_2) },
5135 },
5136
5137 /* PREFIX_VEX_0F99 */
5138 {
5139 { VEX_LEN_TABLE (VEX_LEN_0F99_P_0) },
5140 { Bad_Opcode },
5141 { VEX_LEN_TABLE (VEX_LEN_0F99_P_2) },
43234a1e
L
5142 },
5143
592a252b 5144 /* PREFIX_VEX_0FC2 */
c0f3af97 5145 {
ec6f095a
L
5146 { "vcmpps", { XM, Vex, EXx, VCMP }, 0 },
5147 { "vcmpss", { XMScalar, VexScalar, EXdScalar, VCMP }, 0 },
5148 { "vcmppd", { XM, Vex, EXx, VCMP }, 0 },
5149 { "vcmpsd", { XMScalar, VexScalar, EXqScalar, VCMP }, 0 },
c0f3af97
L
5150 },
5151
592a252b 5152 /* PREFIX_VEX_0FC4 */
c0f3af97 5153 {
592d1631
L
5154 { Bad_Opcode },
5155 { Bad_Opcode },
592a252b 5156 { VEX_LEN_TABLE (VEX_LEN_0FC4_P_2) },
c0f3af97
L
5157 },
5158
592a252b 5159 /* PREFIX_VEX_0FC5 */
c0f3af97 5160 {
592d1631
L
5161 { Bad_Opcode },
5162 { Bad_Opcode },
592a252b 5163 { VEX_LEN_TABLE (VEX_LEN_0FC5_P_2) },
c0f3af97
L
5164 },
5165
592a252b 5166 /* PREFIX_VEX_0FD0 */
c0f3af97 5167 {
592d1631
L
5168 { Bad_Opcode },
5169 { Bad_Opcode },
ec6f095a
L
5170 { "vaddsubpd", { XM, Vex, EXx }, 0 },
5171 { "vaddsubps", { XM, Vex, EXx }, 0 },
c0f3af97
L
5172 },
5173
592a252b 5174 /* PREFIX_VEX_0FD1 */
c0f3af97 5175 {
592d1631
L
5176 { Bad_Opcode },
5177 { Bad_Opcode },
ec6f095a 5178 { "vpsrlw", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5179 },
5180
592a252b 5181 /* PREFIX_VEX_0FD2 */
c0f3af97 5182 {
592d1631
L
5183 { Bad_Opcode },
5184 { Bad_Opcode },
ec6f095a 5185 { "vpsrld", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5186 },
5187
592a252b 5188 /* PREFIX_VEX_0FD3 */
c0f3af97 5189 {
592d1631
L
5190 { Bad_Opcode },
5191 { Bad_Opcode },
ec6f095a 5192 { "vpsrlq", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5193 },
5194
592a252b 5195 /* PREFIX_VEX_0FD4 */
c0f3af97 5196 {
592d1631
L
5197 { Bad_Opcode },
5198 { Bad_Opcode },
ec6f095a 5199 { "vpaddq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5200 },
5201
592a252b 5202 /* PREFIX_VEX_0FD5 */
c0f3af97 5203 {
592d1631
L
5204 { Bad_Opcode },
5205 { Bad_Opcode },
ec6f095a 5206 { "vpmullw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5207 },
5208
592a252b 5209 /* PREFIX_VEX_0FD6 */
c0f3af97 5210 {
592d1631
L
5211 { Bad_Opcode },
5212 { Bad_Opcode },
592a252b 5213 { VEX_LEN_TABLE (VEX_LEN_0FD6_P_2) },
c0f3af97
L
5214 },
5215
592a252b 5216 /* PREFIX_VEX_0FD7 */
c0f3af97 5217 {
592d1631
L
5218 { Bad_Opcode },
5219 { Bad_Opcode },
592a252b 5220 { MOD_TABLE (MOD_VEX_0FD7_PREFIX_2) },
c0f3af97
L
5221 },
5222
592a252b 5223 /* PREFIX_VEX_0FD8 */
c0f3af97 5224 {
592d1631
L
5225 { Bad_Opcode },
5226 { Bad_Opcode },
ec6f095a 5227 { "vpsubusb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5228 },
5229
592a252b 5230 /* PREFIX_VEX_0FD9 */
c0f3af97 5231 {
592d1631
L
5232 { Bad_Opcode },
5233 { Bad_Opcode },
ec6f095a 5234 { "vpsubusw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5235 },
5236
592a252b 5237 /* PREFIX_VEX_0FDA */
c0f3af97 5238 {
592d1631
L
5239 { Bad_Opcode },
5240 { Bad_Opcode },
ec6f095a 5241 { "vpminub", { XM, Vex, EXx }, 0 },
c0f3af97
L
5242 },
5243
592a252b 5244 /* PREFIX_VEX_0FDB */
c0f3af97 5245 {
592d1631
L
5246 { Bad_Opcode },
5247 { Bad_Opcode },
ec6f095a 5248 { "vpand", { XM, Vex, EXx }, 0 },
c0f3af97
L
5249 },
5250
592a252b 5251 /* PREFIX_VEX_0FDC */
c0f3af97 5252 {
592d1631
L
5253 { Bad_Opcode },
5254 { Bad_Opcode },
ec6f095a 5255 { "vpaddusb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5256 },
5257
592a252b 5258 /* PREFIX_VEX_0FDD */
c0f3af97 5259 {
592d1631
L
5260 { Bad_Opcode },
5261 { Bad_Opcode },
ec6f095a 5262 { "vpaddusw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5263 },
5264
592a252b 5265 /* PREFIX_VEX_0FDE */
c0f3af97 5266 {
592d1631
L
5267 { Bad_Opcode },
5268 { Bad_Opcode },
ec6f095a 5269 { "vpmaxub", { XM, Vex, EXx }, 0 },
c0f3af97
L
5270 },
5271
592a252b 5272 /* PREFIX_VEX_0FDF */
c0f3af97 5273 {
592d1631
L
5274 { Bad_Opcode },
5275 { Bad_Opcode },
ec6f095a 5276 { "vpandn", { XM, Vex, EXx }, 0 },
c0f3af97
L
5277 },
5278
592a252b 5279 /* PREFIX_VEX_0FE0 */
c0f3af97 5280 {
592d1631
L
5281 { Bad_Opcode },
5282 { Bad_Opcode },
ec6f095a 5283 { "vpavgb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5284 },
5285
592a252b 5286 /* PREFIX_VEX_0FE1 */
c0f3af97 5287 {
592d1631
L
5288 { Bad_Opcode },
5289 { Bad_Opcode },
ec6f095a 5290 { "vpsraw", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5291 },
5292
592a252b 5293 /* PREFIX_VEX_0FE2 */
c0f3af97 5294 {
592d1631
L
5295 { Bad_Opcode },
5296 { Bad_Opcode },
ec6f095a 5297 { "vpsrad", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5298 },
5299
592a252b 5300 /* PREFIX_VEX_0FE3 */
c0f3af97 5301 {
592d1631
L
5302 { Bad_Opcode },
5303 { Bad_Opcode },
ec6f095a 5304 { "vpavgw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5305 },
5306
592a252b 5307 /* PREFIX_VEX_0FE4 */
c0f3af97 5308 {
592d1631
L
5309 { Bad_Opcode },
5310 { Bad_Opcode },
ec6f095a 5311 { "vpmulhuw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5312 },
5313
592a252b 5314 /* PREFIX_VEX_0FE5 */
c0f3af97 5315 {
592d1631
L
5316 { Bad_Opcode },
5317 { Bad_Opcode },
ec6f095a 5318 { "vpmulhw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5319 },
5320
592a252b 5321 /* PREFIX_VEX_0FE6 */
c0f3af97 5322 {
592d1631 5323 { Bad_Opcode },
ec6f095a
L
5324 { "vcvtdq2pd", { XM, EXxmmq }, 0 },
5325 { "vcvttpd2dq%XY", { XMM, EXx }, 0 },
5326 { "vcvtpd2dq%XY", { XMM, EXx }, 0 },
c0f3af97
L
5327 },
5328
592a252b 5329 /* PREFIX_VEX_0FE7 */
c0f3af97 5330 {
592d1631
L
5331 { Bad_Opcode },
5332 { Bad_Opcode },
592a252b 5333 { MOD_TABLE (MOD_VEX_0FE7_PREFIX_2) },
c0f3af97
L
5334 },
5335
592a252b 5336 /* PREFIX_VEX_0FE8 */
c0f3af97 5337 {
592d1631
L
5338 { Bad_Opcode },
5339 { Bad_Opcode },
ec6f095a 5340 { "vpsubsb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5341 },
5342
592a252b 5343 /* PREFIX_VEX_0FE9 */
c0f3af97 5344 {
592d1631
L
5345 { Bad_Opcode },
5346 { Bad_Opcode },
ec6f095a 5347 { "vpsubsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5348 },
5349
592a252b 5350 /* PREFIX_VEX_0FEA */
c0f3af97 5351 {
592d1631
L
5352 { Bad_Opcode },
5353 { Bad_Opcode },
ec6f095a 5354 { "vpminsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5355 },
5356
592a252b 5357 /* PREFIX_VEX_0FEB */
c0f3af97 5358 {
592d1631
L
5359 { Bad_Opcode },
5360 { Bad_Opcode },
ec6f095a 5361 { "vpor", { XM, Vex, EXx }, 0 },
c0f3af97
L
5362 },
5363
592a252b 5364 /* PREFIX_VEX_0FEC */
c0f3af97 5365 {
592d1631
L
5366 { Bad_Opcode },
5367 { Bad_Opcode },
ec6f095a 5368 { "vpaddsb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5369 },
5370
592a252b 5371 /* PREFIX_VEX_0FED */
c0f3af97 5372 {
592d1631
L
5373 { Bad_Opcode },
5374 { Bad_Opcode },
ec6f095a 5375 { "vpaddsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5376 },
5377
592a252b 5378 /* PREFIX_VEX_0FEE */
c0f3af97 5379 {
592d1631
L
5380 { Bad_Opcode },
5381 { Bad_Opcode },
ec6f095a 5382 { "vpmaxsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5383 },
5384
592a252b 5385 /* PREFIX_VEX_0FEF */
c0f3af97 5386 {
592d1631
L
5387 { Bad_Opcode },
5388 { Bad_Opcode },
ec6f095a 5389 { "vpxor", { XM, Vex, EXx }, 0 },
c0f3af97
L
5390 },
5391
592a252b 5392 /* PREFIX_VEX_0FF0 */
c0f3af97 5393 {
592d1631
L
5394 { Bad_Opcode },
5395 { Bad_Opcode },
5396 { Bad_Opcode },
592a252b 5397 { MOD_TABLE (MOD_VEX_0FF0_PREFIX_3) },
c0f3af97
L
5398 },
5399
592a252b 5400 /* PREFIX_VEX_0FF1 */
c0f3af97 5401 {
592d1631
L
5402 { Bad_Opcode },
5403 { Bad_Opcode },
ec6f095a 5404 { "vpsllw", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5405 },
5406
592a252b 5407 /* PREFIX_VEX_0FF2 */
c0f3af97 5408 {
592d1631
L
5409 { Bad_Opcode },
5410 { Bad_Opcode },
ec6f095a 5411 { "vpslld", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5412 },
5413
592a252b 5414 /* PREFIX_VEX_0FF3 */
c0f3af97 5415 {
592d1631
L
5416 { Bad_Opcode },
5417 { Bad_Opcode },
ec6f095a 5418 { "vpsllq", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5419 },
5420
592a252b 5421 /* PREFIX_VEX_0FF4 */
c0f3af97 5422 {
592d1631
L
5423 { Bad_Opcode },
5424 { Bad_Opcode },
ec6f095a 5425 { "vpmuludq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5426 },
5427
592a252b 5428 /* PREFIX_VEX_0FF5 */
c0f3af97 5429 {
592d1631
L
5430 { Bad_Opcode },
5431 { Bad_Opcode },
ec6f095a 5432 { "vpmaddwd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5433 },
5434
592a252b 5435 /* PREFIX_VEX_0FF6 */
c0f3af97 5436 {
592d1631
L
5437 { Bad_Opcode },
5438 { Bad_Opcode },
ec6f095a 5439 { "vpsadbw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5440 },
5441
592a252b 5442 /* PREFIX_VEX_0FF7 */
c0f3af97 5443 {
592d1631
L
5444 { Bad_Opcode },
5445 { Bad_Opcode },
592a252b 5446 { VEX_LEN_TABLE (VEX_LEN_0FF7_P_2) },
c0f3af97
L
5447 },
5448
592a252b 5449 /* PREFIX_VEX_0FF8 */
c0f3af97 5450 {
592d1631
L
5451 { Bad_Opcode },
5452 { Bad_Opcode },
ec6f095a 5453 { "vpsubb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5454 },
5455
592a252b 5456 /* PREFIX_VEX_0FF9 */
c0f3af97 5457 {
592d1631
L
5458 { Bad_Opcode },
5459 { Bad_Opcode },
ec6f095a 5460 { "vpsubw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5461 },
5462
592a252b 5463 /* PREFIX_VEX_0FFA */
c0f3af97 5464 {
592d1631
L
5465 { Bad_Opcode },
5466 { Bad_Opcode },
ec6f095a 5467 { "vpsubd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5468 },
5469
592a252b 5470 /* PREFIX_VEX_0FFB */
c0f3af97 5471 {
592d1631
L
5472 { Bad_Opcode },
5473 { Bad_Opcode },
ec6f095a 5474 { "vpsubq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5475 },
5476
592a252b 5477 /* PREFIX_VEX_0FFC */
c0f3af97 5478 {
592d1631
L
5479 { Bad_Opcode },
5480 { Bad_Opcode },
ec6f095a 5481 { "vpaddb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5482 },
5483
592a252b 5484 /* PREFIX_VEX_0FFD */
c0f3af97 5485 {
592d1631
L
5486 { Bad_Opcode },
5487 { Bad_Opcode },
ec6f095a 5488 { "vpaddw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5489 },
5490
592a252b 5491 /* PREFIX_VEX_0FFE */
c0f3af97 5492 {
592d1631
L
5493 { Bad_Opcode },
5494 { Bad_Opcode },
ec6f095a 5495 { "vpaddd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5496 },
5497
592a252b 5498 /* PREFIX_VEX_0F3800 */
c0f3af97 5499 {
592d1631
L
5500 { Bad_Opcode },
5501 { Bad_Opcode },
ec6f095a 5502 { "vpshufb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5503 },
5504
592a252b 5505 /* PREFIX_VEX_0F3801 */
c0f3af97 5506 {
592d1631
L
5507 { Bad_Opcode },
5508 { Bad_Opcode },
ec6f095a 5509 { "vphaddw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5510 },
5511
592a252b 5512 /* PREFIX_VEX_0F3802 */
c0f3af97 5513 {
592d1631
L
5514 { Bad_Opcode },
5515 { Bad_Opcode },
ec6f095a 5516 { "vphaddd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5517 },
5518
592a252b 5519 /* PREFIX_VEX_0F3803 */
c0f3af97 5520 {
592d1631
L
5521 { Bad_Opcode },
5522 { Bad_Opcode },
ec6f095a 5523 { "vphaddsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5524 },
5525
592a252b 5526 /* PREFIX_VEX_0F3804 */
c0f3af97 5527 {
592d1631
L
5528 { Bad_Opcode },
5529 { Bad_Opcode },
ec6f095a 5530 { "vpmaddubsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5531 },
5532
592a252b 5533 /* PREFIX_VEX_0F3805 */
c0f3af97 5534 {
592d1631
L
5535 { Bad_Opcode },
5536 { Bad_Opcode },
ec6f095a 5537 { "vphsubw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5538 },
5539
592a252b 5540 /* PREFIX_VEX_0F3806 */
c0f3af97 5541 {
592d1631
L
5542 { Bad_Opcode },
5543 { Bad_Opcode },
ec6f095a 5544 { "vphsubd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5545 },
5546
592a252b 5547 /* PREFIX_VEX_0F3807 */
c0f3af97 5548 {
592d1631
L
5549 { Bad_Opcode },
5550 { Bad_Opcode },
ec6f095a 5551 { "vphsubsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5552 },
5553
592a252b 5554 /* PREFIX_VEX_0F3808 */
c0f3af97 5555 {
592d1631
L
5556 { Bad_Opcode },
5557 { Bad_Opcode },
ec6f095a 5558 { "vpsignb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5559 },
5560
592a252b 5561 /* PREFIX_VEX_0F3809 */
c0f3af97 5562 {
592d1631
L
5563 { Bad_Opcode },
5564 { Bad_Opcode },
ec6f095a 5565 { "vpsignw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5566 },
5567
592a252b 5568 /* PREFIX_VEX_0F380A */
c0f3af97 5569 {
592d1631
L
5570 { Bad_Opcode },
5571 { Bad_Opcode },
ec6f095a 5572 { "vpsignd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5573 },
5574
592a252b 5575 /* PREFIX_VEX_0F380B */
c0f3af97 5576 {
592d1631
L
5577 { Bad_Opcode },
5578 { Bad_Opcode },
ec6f095a 5579 { "vpmulhrsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5580 },
5581
592a252b 5582 /* PREFIX_VEX_0F380C */
c0f3af97 5583 {
592d1631
L
5584 { Bad_Opcode },
5585 { Bad_Opcode },
592a252b 5586 { VEX_W_TABLE (VEX_W_0F380C_P_2) },
c0f3af97
L
5587 },
5588
592a252b 5589 /* PREFIX_VEX_0F380D */
c0f3af97 5590 {
592d1631
L
5591 { Bad_Opcode },
5592 { Bad_Opcode },
592a252b 5593 { VEX_W_TABLE (VEX_W_0F380D_P_2) },
c0f3af97
L
5594 },
5595
592a252b 5596 /* PREFIX_VEX_0F380E */
c0f3af97 5597 {
592d1631
L
5598 { Bad_Opcode },
5599 { Bad_Opcode },
592a252b 5600 { VEX_W_TABLE (VEX_W_0F380E_P_2) },
c0f3af97
L
5601 },
5602
592a252b 5603 /* PREFIX_VEX_0F380F */
c0f3af97 5604 {
592d1631
L
5605 { Bad_Opcode },
5606 { Bad_Opcode },
592a252b 5607 { VEX_W_TABLE (VEX_W_0F380F_P_2) },
c0f3af97
L
5608 },
5609
592a252b 5610 /* PREFIX_VEX_0F3813 */
c7b8aa3a
L
5611 {
5612 { Bad_Opcode },
5613 { Bad_Opcode },
bf890a93 5614 { "vcvtph2ps", { XM, EXxmmq }, 0 },
c7b8aa3a
L
5615 },
5616
6c30d220
L
5617 /* PREFIX_VEX_0F3816 */
5618 {
5619 { Bad_Opcode },
5620 { Bad_Opcode },
5621 { VEX_LEN_TABLE (VEX_LEN_0F3816_P_2) },
5622 },
5623
592a252b 5624 /* PREFIX_VEX_0F3817 */
c0f3af97 5625 {
592d1631
L
5626 { Bad_Opcode },
5627 { Bad_Opcode },
ec6f095a 5628 { "vptest", { XM, EXx }, 0 },
c0f3af97
L
5629 },
5630
592a252b 5631 /* PREFIX_VEX_0F3818 */
c0f3af97 5632 {
592d1631
L
5633 { Bad_Opcode },
5634 { Bad_Opcode },
6c30d220 5635 { VEX_W_TABLE (VEX_W_0F3818_P_2) },
c0f3af97
L
5636 },
5637
592a252b 5638 /* PREFIX_VEX_0F3819 */
c0f3af97 5639 {
592d1631
L
5640 { Bad_Opcode },
5641 { Bad_Opcode },
6c30d220 5642 { VEX_LEN_TABLE (VEX_LEN_0F3819_P_2) },
c0f3af97
L
5643 },
5644
592a252b 5645 /* PREFIX_VEX_0F381A */
c0f3af97 5646 {
592d1631
L
5647 { Bad_Opcode },
5648 { Bad_Opcode },
592a252b 5649 { MOD_TABLE (MOD_VEX_0F381A_PREFIX_2) },
c0f3af97
L
5650 },
5651
592a252b 5652 /* PREFIX_VEX_0F381C */
c0f3af97 5653 {
592d1631
L
5654 { Bad_Opcode },
5655 { Bad_Opcode },
ec6f095a 5656 { "vpabsb", { XM, EXx }, 0 },
c0f3af97
L
5657 },
5658
592a252b 5659 /* PREFIX_VEX_0F381D */
c0f3af97 5660 {
592d1631
L
5661 { Bad_Opcode },
5662 { Bad_Opcode },
ec6f095a 5663 { "vpabsw", { XM, EXx }, 0 },
c0f3af97
L
5664 },
5665
592a252b 5666 /* PREFIX_VEX_0F381E */
c0f3af97 5667 {
592d1631
L
5668 { Bad_Opcode },
5669 { Bad_Opcode },
ec6f095a 5670 { "vpabsd", { XM, EXx }, 0 },
c0f3af97
L
5671 },
5672
592a252b 5673 /* PREFIX_VEX_0F3820 */
c0f3af97 5674 {
592d1631
L
5675 { Bad_Opcode },
5676 { Bad_Opcode },
ec6f095a 5677 { "vpmovsxbw", { XM, EXxmmq }, 0 },
c0f3af97
L
5678 },
5679
592a252b 5680 /* PREFIX_VEX_0F3821 */
c0f3af97 5681 {
592d1631
L
5682 { Bad_Opcode },
5683 { Bad_Opcode },
ec6f095a 5684 { "vpmovsxbd", { XM, EXxmmqd }, 0 },
c0f3af97
L
5685 },
5686
592a252b 5687 /* PREFIX_VEX_0F3822 */
c0f3af97 5688 {
592d1631
L
5689 { Bad_Opcode },
5690 { Bad_Opcode },
ec6f095a 5691 { "vpmovsxbq", { XM, EXxmmdw }, 0 },
c0f3af97
L
5692 },
5693
592a252b 5694 /* PREFIX_VEX_0F3823 */
c0f3af97 5695 {
592d1631
L
5696 { Bad_Opcode },
5697 { Bad_Opcode },
ec6f095a 5698 { "vpmovsxwd", { XM, EXxmmq }, 0 },
c0f3af97
L
5699 },
5700
592a252b 5701 /* PREFIX_VEX_0F3824 */
c0f3af97 5702 {
592d1631
L
5703 { Bad_Opcode },
5704 { Bad_Opcode },
ec6f095a 5705 { "vpmovsxwq", { XM, EXxmmqd }, 0 },
c0f3af97
L
5706 },
5707
592a252b 5708 /* PREFIX_VEX_0F3825 */
c0f3af97 5709 {
592d1631
L
5710 { Bad_Opcode },
5711 { Bad_Opcode },
ec6f095a 5712 { "vpmovsxdq", { XM, EXxmmq }, 0 },
c0f3af97
L
5713 },
5714
592a252b 5715 /* PREFIX_VEX_0F3828 */
c0f3af97 5716 {
592d1631
L
5717 { Bad_Opcode },
5718 { Bad_Opcode },
ec6f095a 5719 { "vpmuldq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5720 },
5721
592a252b 5722 /* PREFIX_VEX_0F3829 */
c0f3af97 5723 {
592d1631
L
5724 { Bad_Opcode },
5725 { Bad_Opcode },
ec6f095a 5726 { "vpcmpeqq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5727 },
5728
592a252b 5729 /* PREFIX_VEX_0F382A */
c0f3af97 5730 {
592d1631
L
5731 { Bad_Opcode },
5732 { Bad_Opcode },
592a252b 5733 { MOD_TABLE (MOD_VEX_0F382A_PREFIX_2) },
c0f3af97
L
5734 },
5735
592a252b 5736 /* PREFIX_VEX_0F382B */
c0f3af97 5737 {
592d1631
L
5738 { Bad_Opcode },
5739 { Bad_Opcode },
ec6f095a 5740 { "vpackusdw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5741 },
5742
592a252b 5743 /* PREFIX_VEX_0F382C */
c0f3af97 5744 {
592d1631
L
5745 { Bad_Opcode },
5746 { Bad_Opcode },
592a252b 5747 { MOD_TABLE (MOD_VEX_0F382C_PREFIX_2) },
c0f3af97
L
5748 },
5749
592a252b 5750 /* PREFIX_VEX_0F382D */
c0f3af97 5751 {
592d1631
L
5752 { Bad_Opcode },
5753 { Bad_Opcode },
592a252b 5754 { MOD_TABLE (MOD_VEX_0F382D_PREFIX_2) },
c0f3af97
L
5755 },
5756
592a252b 5757 /* PREFIX_VEX_0F382E */
c0f3af97 5758 {
592d1631
L
5759 { Bad_Opcode },
5760 { Bad_Opcode },
592a252b 5761 { MOD_TABLE (MOD_VEX_0F382E_PREFIX_2) },
c0f3af97
L
5762 },
5763
592a252b 5764 /* PREFIX_VEX_0F382F */
c0f3af97 5765 {
592d1631
L
5766 { Bad_Opcode },
5767 { Bad_Opcode },
592a252b 5768 { MOD_TABLE (MOD_VEX_0F382F_PREFIX_2) },
c0f3af97
L
5769 },
5770
592a252b 5771 /* PREFIX_VEX_0F3830 */
c0f3af97 5772 {
592d1631
L
5773 { Bad_Opcode },
5774 { Bad_Opcode },
ec6f095a 5775 { "vpmovzxbw", { XM, EXxmmq }, 0 },
c0f3af97
L
5776 },
5777
592a252b 5778 /* PREFIX_VEX_0F3831 */
c0f3af97 5779 {
592d1631
L
5780 { Bad_Opcode },
5781 { Bad_Opcode },
ec6f095a 5782 { "vpmovzxbd", { XM, EXxmmqd }, 0 },
c0f3af97
L
5783 },
5784
592a252b 5785 /* PREFIX_VEX_0F3832 */
c0f3af97 5786 {
592d1631
L
5787 { Bad_Opcode },
5788 { Bad_Opcode },
ec6f095a 5789 { "vpmovzxbq", { XM, EXxmmdw }, 0 },
c0f3af97
L
5790 },
5791
592a252b 5792 /* PREFIX_VEX_0F3833 */
c0f3af97 5793 {
592d1631
L
5794 { Bad_Opcode },
5795 { Bad_Opcode },
ec6f095a 5796 { "vpmovzxwd", { XM, EXxmmq }, 0 },
c0f3af97
L
5797 },
5798
592a252b 5799 /* PREFIX_VEX_0F3834 */
c0f3af97 5800 {
592d1631
L
5801 { Bad_Opcode },
5802 { Bad_Opcode },
ec6f095a 5803 { "vpmovzxwq", { XM, EXxmmqd }, 0 },
c0f3af97
L
5804 },
5805
592a252b 5806 /* PREFIX_VEX_0F3835 */
c0f3af97 5807 {
592d1631
L
5808 { Bad_Opcode },
5809 { Bad_Opcode },
ec6f095a 5810 { "vpmovzxdq", { XM, EXxmmq }, 0 },
6c30d220
L
5811 },
5812
5813 /* PREFIX_VEX_0F3836 */
5814 {
5815 { Bad_Opcode },
5816 { Bad_Opcode },
5817 { VEX_LEN_TABLE (VEX_LEN_0F3836_P_2) },
c0f3af97
L
5818 },
5819
592a252b 5820 /* PREFIX_VEX_0F3837 */
c0f3af97 5821 {
592d1631
L
5822 { Bad_Opcode },
5823 { Bad_Opcode },
ec6f095a 5824 { "vpcmpgtq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5825 },
5826
592a252b 5827 /* PREFIX_VEX_0F3838 */
c0f3af97 5828 {
592d1631
L
5829 { Bad_Opcode },
5830 { Bad_Opcode },
ec6f095a 5831 { "vpminsb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5832 },
5833
592a252b 5834 /* PREFIX_VEX_0F3839 */
c0f3af97 5835 {
592d1631
L
5836 { Bad_Opcode },
5837 { Bad_Opcode },
ec6f095a 5838 { "vpminsd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5839 },
5840
592a252b 5841 /* PREFIX_VEX_0F383A */
c0f3af97 5842 {
592d1631
L
5843 { Bad_Opcode },
5844 { Bad_Opcode },
ec6f095a 5845 { "vpminuw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5846 },
5847
592a252b 5848 /* PREFIX_VEX_0F383B */
c0f3af97 5849 {
592d1631
L
5850 { Bad_Opcode },
5851 { Bad_Opcode },
ec6f095a 5852 { "vpminud", { XM, Vex, EXx }, 0 },
c0f3af97
L
5853 },
5854
592a252b 5855 /* PREFIX_VEX_0F383C */
c0f3af97 5856 {
592d1631
L
5857 { Bad_Opcode },
5858 { Bad_Opcode },
ec6f095a 5859 { "vpmaxsb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5860 },
5861
592a252b 5862 /* PREFIX_VEX_0F383D */
c0f3af97 5863 {
592d1631
L
5864 { Bad_Opcode },
5865 { Bad_Opcode },
ec6f095a 5866 { "vpmaxsd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5867 },
5868
592a252b 5869 /* PREFIX_VEX_0F383E */
c0f3af97 5870 {
592d1631
L
5871 { Bad_Opcode },
5872 { Bad_Opcode },
ec6f095a 5873 { "vpmaxuw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5874 },
5875
592a252b 5876 /* PREFIX_VEX_0F383F */
c0f3af97 5877 {
592d1631
L
5878 { Bad_Opcode },
5879 { Bad_Opcode },
ec6f095a 5880 { "vpmaxud", { XM, Vex, EXx }, 0 },
c0f3af97
L
5881 },
5882
592a252b 5883 /* PREFIX_VEX_0F3840 */
c0f3af97 5884 {
592d1631
L
5885 { Bad_Opcode },
5886 { Bad_Opcode },
ec6f095a 5887 { "vpmulld", { XM, Vex, EXx }, 0 },
c0f3af97
L
5888 },
5889
592a252b 5890 /* PREFIX_VEX_0F3841 */
c0f3af97 5891 {
592d1631
L
5892 { Bad_Opcode },
5893 { Bad_Opcode },
592a252b 5894 { VEX_LEN_TABLE (VEX_LEN_0F3841_P_2) },
c0f3af97
L
5895 },
5896
6c30d220
L
5897 /* PREFIX_VEX_0F3845 */
5898 {
5899 { Bad_Opcode },
5900 { Bad_Opcode },
bf890a93 5901 { "vpsrlv%LW", { XM, Vex, EXx }, 0 },
6c30d220
L
5902 },
5903
5904 /* PREFIX_VEX_0F3846 */
5905 {
5906 { Bad_Opcode },
5907 { Bad_Opcode },
5908 { VEX_W_TABLE (VEX_W_0F3846_P_2) },
5909 },
5910
5911 /* PREFIX_VEX_0F3847 */
5912 {
5913 { Bad_Opcode },
5914 { Bad_Opcode },
bf890a93 5915 { "vpsllv%LW", { XM, Vex, EXx }, 0 },
6c30d220
L
5916 },
5917
5918 /* PREFIX_VEX_0F3858 */
5919 {
5920 { Bad_Opcode },
5921 { Bad_Opcode },
5922 { VEX_W_TABLE (VEX_W_0F3858_P_2) },
5923 },
5924
5925 /* PREFIX_VEX_0F3859 */
5926 {
5927 { Bad_Opcode },
5928 { Bad_Opcode },
5929 { VEX_W_TABLE (VEX_W_0F3859_P_2) },
5930 },
5931
5932 /* PREFIX_VEX_0F385A */
5933 {
5934 { Bad_Opcode },
5935 { Bad_Opcode },
5936 { MOD_TABLE (MOD_VEX_0F385A_PREFIX_2) },
5937 },
5938
5939 /* PREFIX_VEX_0F3878 */
5940 {
5941 { Bad_Opcode },
5942 { Bad_Opcode },
5943 { VEX_W_TABLE (VEX_W_0F3878_P_2) },
5944 },
5945
5946 /* PREFIX_VEX_0F3879 */
5947 {
5948 { Bad_Opcode },
5949 { Bad_Opcode },
5950 { VEX_W_TABLE (VEX_W_0F3879_P_2) },
5951 },
5952
5953 /* PREFIX_VEX_0F388C */
5954 {
5955 { Bad_Opcode },
5956 { Bad_Opcode },
f7002f42 5957 { MOD_TABLE (MOD_VEX_0F388C_PREFIX_2) },
6c30d220
L
5958 },
5959
5960 /* PREFIX_VEX_0F388E */
5961 {
5962 { Bad_Opcode },
5963 { Bad_Opcode },
f7002f42 5964 { MOD_TABLE (MOD_VEX_0F388E_PREFIX_2) },
6c30d220
L
5965 },
5966
5967 /* PREFIX_VEX_0F3890 */
5968 {
5969 { Bad_Opcode },
5970 { Bad_Opcode },
bf890a93 5971 { "vpgatherd%LW", { XM, MVexVSIBDWpX, Vex }, 0 },
6c30d220
L
5972 },
5973
5974 /* PREFIX_VEX_0F3891 */
5975 {
5976 { Bad_Opcode },
5977 { Bad_Opcode },
bf890a93 5978 { "vpgatherq%LW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ }, 0 },
6c30d220
L
5979 },
5980
5981 /* PREFIX_VEX_0F3892 */
5982 {
5983 { Bad_Opcode },
5984 { Bad_Opcode },
bf890a93 5985 { "vgatherdp%XW", { XM, MVexVSIBDWpX, Vex }, 0 },
6c30d220
L
5986 },
5987
5988 /* PREFIX_VEX_0F3893 */
5989 {
5990 { Bad_Opcode },
5991 { Bad_Opcode },
bf890a93 5992 { "vgatherqp%XW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ }, 0 },
6c30d220
L
5993 },
5994
592a252b 5995 /* PREFIX_VEX_0F3896 */
a5ff0eb2 5996 {
592d1631
L
5997 { Bad_Opcode },
5998 { Bad_Opcode },
bf890a93 5999 { "vfmaddsub132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6000 },
6001
592a252b 6002 /* PREFIX_VEX_0F3897 */
a5ff0eb2 6003 {
592d1631
L
6004 { Bad_Opcode },
6005 { Bad_Opcode },
bf890a93 6006 { "vfmsubadd132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6007 },
6008
592a252b 6009 /* PREFIX_VEX_0F3898 */
a5ff0eb2 6010 {
592d1631
L
6011 { Bad_Opcode },
6012 { Bad_Opcode },
bf890a93 6013 { "vfmadd132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6014 },
6015
592a252b 6016 /* PREFIX_VEX_0F3899 */
a5ff0eb2 6017 {
592d1631
L
6018 { Bad_Opcode },
6019 { Bad_Opcode },
bf890a93 6020 { "vfmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
a5ff0eb2
L
6021 },
6022
592a252b 6023 /* PREFIX_VEX_0F389A */
a5ff0eb2 6024 {
592d1631
L
6025 { Bad_Opcode },
6026 { Bad_Opcode },
bf890a93 6027 { "vfmsub132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6028 },
6029
592a252b 6030 /* PREFIX_VEX_0F389B */
c0f3af97 6031 {
592d1631
L
6032 { Bad_Opcode },
6033 { Bad_Opcode },
bf890a93 6034 { "vfmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6035 },
6036
592a252b 6037 /* PREFIX_VEX_0F389C */
c0f3af97 6038 {
592d1631
L
6039 { Bad_Opcode },
6040 { Bad_Opcode },
bf890a93 6041 { "vfnmadd132p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6042 },
6043
592a252b 6044 /* PREFIX_VEX_0F389D */
c0f3af97 6045 {
592d1631
L
6046 { Bad_Opcode },
6047 { Bad_Opcode },
bf890a93 6048 { "vfnmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6049 },
6050
592a252b 6051 /* PREFIX_VEX_0F389E */
c0f3af97 6052 {
592d1631
L
6053 { Bad_Opcode },
6054 { Bad_Opcode },
bf890a93 6055 { "vfnmsub132p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6056 },
6057
592a252b 6058 /* PREFIX_VEX_0F389F */
c0f3af97 6059 {
592d1631
L
6060 { Bad_Opcode },
6061 { Bad_Opcode },
bf890a93 6062 { "vfnmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6063 },
6064
592a252b 6065 /* PREFIX_VEX_0F38A6 */
c0f3af97 6066 {
592d1631
L
6067 { Bad_Opcode },
6068 { Bad_Opcode },
bf890a93 6069 { "vfmaddsub213p%XW", { XM, Vex, EXx }, 0 },
592d1631 6070 { Bad_Opcode },
c0f3af97
L
6071 },
6072
592a252b 6073 /* PREFIX_VEX_0F38A7 */
c0f3af97 6074 {
592d1631
L
6075 { Bad_Opcode },
6076 { Bad_Opcode },
bf890a93 6077 { "vfmsubadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6078 },
6079
592a252b 6080 /* PREFIX_VEX_0F38A8 */
c0f3af97 6081 {
592d1631
L
6082 { Bad_Opcode },
6083 { Bad_Opcode },
bf890a93 6084 { "vfmadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6085 },
6086
592a252b 6087 /* PREFIX_VEX_0F38A9 */
c0f3af97 6088 {
592d1631
L
6089 { Bad_Opcode },
6090 { Bad_Opcode },
bf890a93 6091 { "vfmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6092 },
6093
592a252b 6094 /* PREFIX_VEX_0F38AA */
c0f3af97 6095 {
592d1631
L
6096 { Bad_Opcode },
6097 { Bad_Opcode },
bf890a93 6098 { "vfmsub213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6099 },
6100
592a252b 6101 /* PREFIX_VEX_0F38AB */
c0f3af97 6102 {
592d1631
L
6103 { Bad_Opcode },
6104 { Bad_Opcode },
bf890a93 6105 { "vfmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6106 },
6107
592a252b 6108 /* PREFIX_VEX_0F38AC */
c0f3af97 6109 {
592d1631
L
6110 { Bad_Opcode },
6111 { Bad_Opcode },
bf890a93 6112 { "vfnmadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6113 },
6114
592a252b 6115 /* PREFIX_VEX_0F38AD */
c0f3af97 6116 {
592d1631
L
6117 { Bad_Opcode },
6118 { Bad_Opcode },
bf890a93 6119 { "vfnmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6120 },
6121
592a252b 6122 /* PREFIX_VEX_0F38AE */
c0f3af97 6123 {
592d1631
L
6124 { Bad_Opcode },
6125 { Bad_Opcode },
bf890a93 6126 { "vfnmsub213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6127 },
6128
592a252b 6129 /* PREFIX_VEX_0F38AF */
c0f3af97 6130 {
592d1631
L
6131 { Bad_Opcode },
6132 { Bad_Opcode },
bf890a93 6133 { "vfnmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6134 },
6135
592a252b 6136 /* PREFIX_VEX_0F38B6 */
c0f3af97 6137 {
592d1631
L
6138 { Bad_Opcode },
6139 { Bad_Opcode },
bf890a93 6140 { "vfmaddsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6141 },
6142
592a252b 6143 /* PREFIX_VEX_0F38B7 */
c0f3af97 6144 {
592d1631
L
6145 { Bad_Opcode },
6146 { Bad_Opcode },
bf890a93 6147 { "vfmsubadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6148 },
6149
592a252b 6150 /* PREFIX_VEX_0F38B8 */
c0f3af97 6151 {
592d1631
L
6152 { Bad_Opcode },
6153 { Bad_Opcode },
bf890a93 6154 { "vfmadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6155 },
6156
592a252b 6157 /* PREFIX_VEX_0F38B9 */
c0f3af97 6158 {
592d1631
L
6159 { Bad_Opcode },
6160 { Bad_Opcode },
bf890a93 6161 { "vfmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6162 },
6163
592a252b 6164 /* PREFIX_VEX_0F38BA */
c0f3af97 6165 {
592d1631
L
6166 { Bad_Opcode },
6167 { Bad_Opcode },
bf890a93 6168 { "vfmsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6169 },
6170
592a252b 6171 /* PREFIX_VEX_0F38BB */
c0f3af97 6172 {
592d1631
L
6173 { Bad_Opcode },
6174 { Bad_Opcode },
bf890a93 6175 { "vfmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6176 },
6177
592a252b 6178 /* PREFIX_VEX_0F38BC */
c0f3af97 6179 {
592d1631
L
6180 { Bad_Opcode },
6181 { Bad_Opcode },
bf890a93 6182 { "vfnmadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6183 },
6184
592a252b 6185 /* PREFIX_VEX_0F38BD */
c0f3af97 6186 {
592d1631
L
6187 { Bad_Opcode },
6188 { Bad_Opcode },
bf890a93 6189 { "vfnmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6190 },
6191
592a252b 6192 /* PREFIX_VEX_0F38BE */
c0f3af97 6193 {
592d1631
L
6194 { Bad_Opcode },
6195 { Bad_Opcode },
bf890a93 6196 { "vfnmsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6197 },
6198
592a252b 6199 /* PREFIX_VEX_0F38BF */
c0f3af97 6200 {
592d1631
L
6201 { Bad_Opcode },
6202 { Bad_Opcode },
bf890a93 6203 { "vfnmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6204 },
6205
48521003
IT
6206 /* PREFIX_VEX_0F38CF */
6207 {
6208 { Bad_Opcode },
6209 { Bad_Opcode },
6210 { VEX_W_TABLE (VEX_W_0F38CF_P_2) },
6211 },
6212
592a252b 6213 /* PREFIX_VEX_0F38DB */
c0f3af97 6214 {
592d1631
L
6215 { Bad_Opcode },
6216 { Bad_Opcode },
592a252b 6217 { VEX_LEN_TABLE (VEX_LEN_0F38DB_P_2) },
c0f3af97
L
6218 },
6219
592a252b 6220 /* PREFIX_VEX_0F38DC */
c0f3af97 6221 {
592d1631
L
6222 { Bad_Opcode },
6223 { Bad_Opcode },
8dcf1fad 6224 { "vaesenc", { XM, Vex, EXx }, 0 },
c0f3af97
L
6225 },
6226
592a252b 6227 /* PREFIX_VEX_0F38DD */
c0f3af97 6228 {
592d1631
L
6229 { Bad_Opcode },
6230 { Bad_Opcode },
8dcf1fad 6231 { "vaesenclast", { XM, Vex, EXx }, 0 },
c0f3af97
L
6232 },
6233
592a252b 6234 /* PREFIX_VEX_0F38DE */
c0f3af97 6235 {
592d1631
L
6236 { Bad_Opcode },
6237 { Bad_Opcode },
8dcf1fad 6238 { "vaesdec", { XM, Vex, EXx }, 0 },
c0f3af97
L
6239 },
6240
592a252b 6241 /* PREFIX_VEX_0F38DF */
c0f3af97 6242 {
592d1631
L
6243 { Bad_Opcode },
6244 { Bad_Opcode },
8dcf1fad 6245 { "vaesdeclast", { XM, Vex, EXx }, 0 },
c0f3af97
L
6246 },
6247
f12dc422
L
6248 /* PREFIX_VEX_0F38F2 */
6249 {
6250 { VEX_LEN_TABLE (VEX_LEN_0F38F2_P_0) },
6251 },
6252
6253 /* PREFIX_VEX_0F38F3_REG_1 */
6254 {
6255 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_1_P_0) },
6256 },
6257
6258 /* PREFIX_VEX_0F38F3_REG_2 */
6259 {
6260 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_2_P_0) },
6261 },
6262
6263 /* PREFIX_VEX_0F38F3_REG_3 */
6264 {
6265 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_3_P_0) },
6266 },
6267
6c30d220
L
6268 /* PREFIX_VEX_0F38F5 */
6269 {
6270 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_0) },
6271 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_1) },
6272 { Bad_Opcode },
6273 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_3) },
6274 },
6275
6276 /* PREFIX_VEX_0F38F6 */
6277 {
6278 { Bad_Opcode },
6279 { Bad_Opcode },
6280 { Bad_Opcode },
6281 { VEX_LEN_TABLE (VEX_LEN_0F38F6_P_3) },
6282 },
6283
f12dc422
L
6284 /* PREFIX_VEX_0F38F7 */
6285 {
6286 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_0) },
6c30d220
L
6287 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_1) },
6288 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_2) },
6289 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_3) },
6290 },
6291
6292 /* PREFIX_VEX_0F3A00 */
6293 {
6294 { Bad_Opcode },
6295 { Bad_Opcode },
6296 { VEX_LEN_TABLE (VEX_LEN_0F3A00_P_2) },
6297 },
6298
6299 /* PREFIX_VEX_0F3A01 */
6300 {
6301 { Bad_Opcode },
6302 { Bad_Opcode },
6303 { VEX_LEN_TABLE (VEX_LEN_0F3A01_P_2) },
6304 },
6305
6306 /* PREFIX_VEX_0F3A02 */
6307 {
6308 { Bad_Opcode },
6309 { Bad_Opcode },
6310 { VEX_W_TABLE (VEX_W_0F3A02_P_2) },
f12dc422
L
6311 },
6312
592a252b 6313 /* PREFIX_VEX_0F3A04 */
c0f3af97 6314 {
592d1631
L
6315 { Bad_Opcode },
6316 { Bad_Opcode },
592a252b 6317 { VEX_W_TABLE (VEX_W_0F3A04_P_2) },
c0f3af97
L
6318 },
6319
592a252b 6320 /* PREFIX_VEX_0F3A05 */
c0f3af97 6321 {
592d1631
L
6322 { Bad_Opcode },
6323 { Bad_Opcode },
592a252b 6324 { VEX_W_TABLE (VEX_W_0F3A05_P_2) },
c0f3af97
L
6325 },
6326
592a252b 6327 /* PREFIX_VEX_0F3A06 */
c0f3af97 6328 {
592d1631
L
6329 { Bad_Opcode },
6330 { Bad_Opcode },
592a252b 6331 { VEX_LEN_TABLE (VEX_LEN_0F3A06_P_2) },
c0f3af97
L
6332 },
6333
592a252b 6334 /* PREFIX_VEX_0F3A08 */
c0f3af97 6335 {
592d1631
L
6336 { Bad_Opcode },
6337 { Bad_Opcode },
ec6f095a 6338 { "vroundps", { XM, EXx, Ib }, 0 },
c0f3af97
L
6339 },
6340
592a252b 6341 /* PREFIX_VEX_0F3A09 */
c0f3af97 6342 {
592d1631
L
6343 { Bad_Opcode },
6344 { Bad_Opcode },
ec6f095a 6345 { "vroundpd", { XM, EXx, Ib }, 0 },
c0f3af97
L
6346 },
6347
592a252b 6348 /* PREFIX_VEX_0F3A0A */
c0f3af97 6349 {
592d1631
L
6350 { Bad_Opcode },
6351 { Bad_Opcode },
ec6f095a 6352 { "vroundss", { XMScalar, VexScalar, EXdScalar, Ib }, 0 },
0bfee649
L
6353 },
6354
592a252b 6355 /* PREFIX_VEX_0F3A0B */
0bfee649 6356 {
592d1631
L
6357 { Bad_Opcode },
6358 { Bad_Opcode },
ec6f095a 6359 { "vroundsd", { XMScalar, VexScalar, EXqScalar, Ib }, 0 },
0bfee649
L
6360 },
6361
592a252b 6362 /* PREFIX_VEX_0F3A0C */
0bfee649 6363 {
592d1631
L
6364 { Bad_Opcode },
6365 { Bad_Opcode },
ec6f095a 6366 { "vblendps", { XM, Vex, EXx, Ib }, 0 },
0bfee649
L
6367 },
6368
592a252b 6369 /* PREFIX_VEX_0F3A0D */
0bfee649 6370 {
592d1631
L
6371 { Bad_Opcode },
6372 { Bad_Opcode },
ec6f095a 6373 { "vblendpd", { XM, Vex, EXx, Ib }, 0 },
c0f3af97
L
6374 },
6375
592a252b 6376 /* PREFIX_VEX_0F3A0E */
0bfee649 6377 {
592d1631
L
6378 { Bad_Opcode },
6379 { Bad_Opcode },
ec6f095a 6380 { "vpblendw", { XM, Vex, EXx, Ib }, 0 },
0bfee649
L
6381 },
6382
592a252b 6383 /* PREFIX_VEX_0F3A0F */
0bfee649 6384 {
592d1631
L
6385 { Bad_Opcode },
6386 { Bad_Opcode },
ec6f095a 6387 { "vpalignr", { XM, Vex, EXx, Ib }, 0 },
0bfee649
L
6388 },
6389
592a252b 6390 /* PREFIX_VEX_0F3A14 */
0bfee649 6391 {
592d1631
L
6392 { Bad_Opcode },
6393 { Bad_Opcode },
592a252b 6394 { VEX_LEN_TABLE (VEX_LEN_0F3A14_P_2) },
0bfee649
L
6395 },
6396
592a252b 6397 /* PREFIX_VEX_0F3A15 */
0bfee649 6398 {
592d1631
L
6399 { Bad_Opcode },
6400 { Bad_Opcode },
592a252b 6401 { VEX_LEN_TABLE (VEX_LEN_0F3A15_P_2) },
0bfee649
L
6402 },
6403
592a252b 6404 /* PREFIX_VEX_0F3A16 */
c0f3af97 6405 {
592d1631
L
6406 { Bad_Opcode },
6407 { Bad_Opcode },
592a252b 6408 { VEX_LEN_TABLE (VEX_LEN_0F3A16_P_2) },
c0f3af97
L
6409 },
6410
592a252b 6411 /* PREFIX_VEX_0F3A17 */
c0f3af97 6412 {
592d1631
L
6413 { Bad_Opcode },
6414 { Bad_Opcode },
592a252b 6415 { VEX_LEN_TABLE (VEX_LEN_0F3A17_P_2) },
c0f3af97
L
6416 },
6417
592a252b 6418 /* PREFIX_VEX_0F3A18 */
c0f3af97 6419 {
592d1631
L
6420 { Bad_Opcode },
6421 { Bad_Opcode },
592a252b 6422 { VEX_LEN_TABLE (VEX_LEN_0F3A18_P_2) },
c0f3af97
L
6423 },
6424
592a252b 6425 /* PREFIX_VEX_0F3A19 */
c0f3af97 6426 {
592d1631
L
6427 { Bad_Opcode },
6428 { Bad_Opcode },
592a252b 6429 { VEX_LEN_TABLE (VEX_LEN_0F3A19_P_2) },
c0f3af97
L
6430 },
6431
592a252b 6432 /* PREFIX_VEX_0F3A1D */
c7b8aa3a
L
6433 {
6434 { Bad_Opcode },
6435 { Bad_Opcode },
bf890a93 6436 { "vcvtps2ph", { EXxmmq, XM, Ib }, 0 },
c7b8aa3a
L
6437 },
6438
592a252b 6439 /* PREFIX_VEX_0F3A20 */
c0f3af97 6440 {
592d1631
L
6441 { Bad_Opcode },
6442 { Bad_Opcode },
592a252b 6443 { VEX_LEN_TABLE (VEX_LEN_0F3A20_P_2) },
c0f3af97
L
6444 },
6445
592a252b 6446 /* PREFIX_VEX_0F3A21 */
c0f3af97 6447 {
592d1631
L
6448 { Bad_Opcode },
6449 { Bad_Opcode },
592a252b 6450 { VEX_LEN_TABLE (VEX_LEN_0F3A21_P_2) },
c0f3af97
L
6451 },
6452
592a252b 6453 /* PREFIX_VEX_0F3A22 */
0bfee649 6454 {
592d1631
L
6455 { Bad_Opcode },
6456 { Bad_Opcode },
592a252b 6457 { VEX_LEN_TABLE (VEX_LEN_0F3A22_P_2) },
0bfee649
L
6458 },
6459
43234a1e
L
6460 /* PREFIX_VEX_0F3A30 */
6461 {
6462 { Bad_Opcode },
6463 { Bad_Opcode },
6464 { VEX_LEN_TABLE (VEX_LEN_0F3A30_P_2) },
6465 },
6466
1ba585e8
IT
6467 /* PREFIX_VEX_0F3A31 */
6468 {
6469 { Bad_Opcode },
6470 { Bad_Opcode },
6471 { VEX_LEN_TABLE (VEX_LEN_0F3A31_P_2) },
6472 },
6473
43234a1e
L
6474 /* PREFIX_VEX_0F3A32 */
6475 {
6476 { Bad_Opcode },
6477 { Bad_Opcode },
6478 { VEX_LEN_TABLE (VEX_LEN_0F3A32_P_2) },
6479 },
6480
1ba585e8
IT
6481 /* PREFIX_VEX_0F3A33 */
6482 {
6483 { Bad_Opcode },
6484 { Bad_Opcode },
6485 { VEX_LEN_TABLE (VEX_LEN_0F3A33_P_2) },
6486 },
6487
6c30d220
L
6488 /* PREFIX_VEX_0F3A38 */
6489 {
6490 { Bad_Opcode },
6491 { Bad_Opcode },
6492 { VEX_LEN_TABLE (VEX_LEN_0F3A38_P_2) },
6493 },
6494
6495 /* PREFIX_VEX_0F3A39 */
6496 {
6497 { Bad_Opcode },
6498 { Bad_Opcode },
6499 { VEX_LEN_TABLE (VEX_LEN_0F3A39_P_2) },
6500 },
6501
592a252b 6502 /* PREFIX_VEX_0F3A40 */
c0f3af97 6503 {
592d1631
L
6504 { Bad_Opcode },
6505 { Bad_Opcode },
ec6f095a 6506 { "vdpps", { XM, Vex, EXx, Ib }, 0 },
c0f3af97
L
6507 },
6508
592a252b 6509 /* PREFIX_VEX_0F3A41 */
c0f3af97 6510 {
592d1631
L
6511 { Bad_Opcode },
6512 { Bad_Opcode },
592a252b 6513 { VEX_LEN_TABLE (VEX_LEN_0F3A41_P_2) },
c0f3af97
L
6514 },
6515
592a252b 6516 /* PREFIX_VEX_0F3A42 */
c0f3af97 6517 {
592d1631
L
6518 { Bad_Opcode },
6519 { Bad_Opcode },
ec6f095a 6520 { "vmpsadbw", { XM, Vex, EXx, Ib }, 0 },
c0f3af97
L
6521 },
6522
592a252b 6523 /* PREFIX_VEX_0F3A44 */
ce2f5b3c 6524 {
592d1631
L
6525 { Bad_Opcode },
6526 { Bad_Opcode },
ff1982d5 6527 { "vpclmulqdq", { XM, Vex, EXx, PCLMUL }, 0 },
ce2f5b3c
L
6528 },
6529
6c30d220
L
6530 /* PREFIX_VEX_0F3A46 */
6531 {
6532 { Bad_Opcode },
6533 { Bad_Opcode },
6534 { VEX_LEN_TABLE (VEX_LEN_0F3A46_P_2) },
6535 },
6536
592a252b 6537 /* PREFIX_VEX_0F3A48 */
a683cc34
SP
6538 {
6539 { Bad_Opcode },
6540 { Bad_Opcode },
592a252b 6541 { VEX_W_TABLE (VEX_W_0F3A48_P_2) },
a683cc34
SP
6542 },
6543
592a252b 6544 /* PREFIX_VEX_0F3A49 */
a683cc34
SP
6545 {
6546 { Bad_Opcode },
6547 { Bad_Opcode },
592a252b 6548 { VEX_W_TABLE (VEX_W_0F3A49_P_2) },
a683cc34
SP
6549 },
6550
592a252b 6551 /* PREFIX_VEX_0F3A4A */
c0f3af97 6552 {
592d1631
L
6553 { Bad_Opcode },
6554 { Bad_Opcode },
592a252b 6555 { VEX_W_TABLE (VEX_W_0F3A4A_P_2) },
c0f3af97
L
6556 },
6557
592a252b 6558 /* PREFIX_VEX_0F3A4B */
c0f3af97 6559 {
592d1631
L
6560 { Bad_Opcode },
6561 { Bad_Opcode },
592a252b 6562 { VEX_W_TABLE (VEX_W_0F3A4B_P_2) },
c0f3af97
L
6563 },
6564
592a252b 6565 /* PREFIX_VEX_0F3A4C */
c0f3af97 6566 {
592d1631
L
6567 { Bad_Opcode },
6568 { Bad_Opcode },
6c30d220 6569 { VEX_W_TABLE (VEX_W_0F3A4C_P_2) },
c0f3af97
L
6570 },
6571
592a252b 6572 /* PREFIX_VEX_0F3A5C */
922d8de8 6573 {
592d1631
L
6574 { Bad_Opcode },
6575 { Bad_Opcode },
3a2430e0 6576 { "vfmaddsubps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6577 },
6578
592a252b 6579 /* PREFIX_VEX_0F3A5D */
922d8de8 6580 {
592d1631
L
6581 { Bad_Opcode },
6582 { Bad_Opcode },
3a2430e0 6583 { "vfmaddsubpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6584 },
6585
592a252b 6586 /* PREFIX_VEX_0F3A5E */
922d8de8 6587 {
592d1631
L
6588 { Bad_Opcode },
6589 { Bad_Opcode },
3a2430e0 6590 { "vfmsubaddps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6591 },
6592
592a252b 6593 /* PREFIX_VEX_0F3A5F */
922d8de8 6594 {
592d1631
L
6595 { Bad_Opcode },
6596 { Bad_Opcode },
3a2430e0 6597 { "vfmsubaddpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6598 },
6599
592a252b 6600 /* PREFIX_VEX_0F3A60 */
c0f3af97 6601 {
592d1631
L
6602 { Bad_Opcode },
6603 { Bad_Opcode },
592a252b 6604 { VEX_LEN_TABLE (VEX_LEN_0F3A60_P_2) },
592d1631 6605 { Bad_Opcode },
c0f3af97
L
6606 },
6607
592a252b 6608 /* PREFIX_VEX_0F3A61 */
c0f3af97 6609 {
592d1631
L
6610 { Bad_Opcode },
6611 { Bad_Opcode },
592a252b 6612 { VEX_LEN_TABLE (VEX_LEN_0F3A61_P_2) },
c0f3af97
L
6613 },
6614
592a252b 6615 /* PREFIX_VEX_0F3A62 */
c0f3af97 6616 {
592d1631
L
6617 { Bad_Opcode },
6618 { Bad_Opcode },
592a252b 6619 { VEX_LEN_TABLE (VEX_LEN_0F3A62_P_2) },
c0f3af97
L
6620 },
6621
592a252b 6622 /* PREFIX_VEX_0F3A63 */
c0f3af97 6623 {
592d1631
L
6624 { Bad_Opcode },
6625 { Bad_Opcode },
592a252b 6626 { VEX_LEN_TABLE (VEX_LEN_0F3A63_P_2) },
c0f3af97 6627 },
a5ff0eb2 6628
592a252b 6629 /* PREFIX_VEX_0F3A68 */
922d8de8 6630 {
592d1631
L
6631 { Bad_Opcode },
6632 { Bad_Opcode },
3a2430e0 6633 { "vfmaddps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6634 },
6635
592a252b 6636 /* PREFIX_VEX_0F3A69 */
922d8de8 6637 {
592d1631
L
6638 { Bad_Opcode },
6639 { Bad_Opcode },
3a2430e0 6640 { "vfmaddpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6641 },
6642
592a252b 6643 /* PREFIX_VEX_0F3A6A */
922d8de8 6644 {
592d1631
L
6645 { Bad_Opcode },
6646 { Bad_Opcode },
592a252b 6647 { VEX_LEN_TABLE (VEX_LEN_0F3A6A_P_2) },
922d8de8
DR
6648 },
6649
592a252b 6650 /* PREFIX_VEX_0F3A6B */
922d8de8 6651 {
592d1631
L
6652 { Bad_Opcode },
6653 { Bad_Opcode },
592a252b 6654 { VEX_LEN_TABLE (VEX_LEN_0F3A6B_P_2) },
922d8de8
DR
6655 },
6656
592a252b 6657 /* PREFIX_VEX_0F3A6C */
922d8de8 6658 {
592d1631
L
6659 { Bad_Opcode },
6660 { Bad_Opcode },
3a2430e0 6661 { "vfmsubps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6662 },
6663
592a252b 6664 /* PREFIX_VEX_0F3A6D */
922d8de8 6665 {
592d1631
L
6666 { Bad_Opcode },
6667 { Bad_Opcode },
3a2430e0 6668 { "vfmsubpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6669 },
6670
592a252b 6671 /* PREFIX_VEX_0F3A6E */
922d8de8 6672 {
592d1631
L
6673 { Bad_Opcode },
6674 { Bad_Opcode },
592a252b 6675 { VEX_LEN_TABLE (VEX_LEN_0F3A6E_P_2) },
922d8de8
DR
6676 },
6677
592a252b 6678 /* PREFIX_VEX_0F3A6F */
922d8de8 6679 {
592d1631
L
6680 { Bad_Opcode },
6681 { Bad_Opcode },
592a252b 6682 { VEX_LEN_TABLE (VEX_LEN_0F3A6F_P_2) },
922d8de8
DR
6683 },
6684
592a252b 6685 /* PREFIX_VEX_0F3A78 */
922d8de8 6686 {
592d1631
L
6687 { Bad_Opcode },
6688 { Bad_Opcode },
3a2430e0 6689 { "vfnmaddps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6690 },
6691
592a252b 6692 /* PREFIX_VEX_0F3A79 */
922d8de8 6693 {
592d1631
L
6694 { Bad_Opcode },
6695 { Bad_Opcode },
3a2430e0 6696 { "vfnmaddpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6697 },
6698
592a252b 6699 /* PREFIX_VEX_0F3A7A */
922d8de8 6700 {
592d1631
L
6701 { Bad_Opcode },
6702 { Bad_Opcode },
592a252b 6703 { VEX_LEN_TABLE (VEX_LEN_0F3A7A_P_2) },
922d8de8
DR
6704 },
6705
592a252b 6706 /* PREFIX_VEX_0F3A7B */
922d8de8 6707 {
592d1631
L
6708 { Bad_Opcode },
6709 { Bad_Opcode },
592a252b 6710 { VEX_LEN_TABLE (VEX_LEN_0F3A7B_P_2) },
922d8de8
DR
6711 },
6712
592a252b 6713 /* PREFIX_VEX_0F3A7C */
922d8de8 6714 {
592d1631
L
6715 { Bad_Opcode },
6716 { Bad_Opcode },
3a2430e0 6717 { "vfnmsubps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
592d1631 6718 { Bad_Opcode },
922d8de8
DR
6719 },
6720
592a252b 6721 /* PREFIX_VEX_0F3A7D */
922d8de8 6722 {
592d1631
L
6723 { Bad_Opcode },
6724 { Bad_Opcode },
3a2430e0 6725 { "vfnmsubpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6726 },
6727
592a252b 6728 /* PREFIX_VEX_0F3A7E */
922d8de8 6729 {
592d1631
L
6730 { Bad_Opcode },
6731 { Bad_Opcode },
592a252b 6732 { VEX_LEN_TABLE (VEX_LEN_0F3A7E_P_2) },
922d8de8
DR
6733 },
6734
592a252b 6735 /* PREFIX_VEX_0F3A7F */
922d8de8 6736 {
592d1631
L
6737 { Bad_Opcode },
6738 { Bad_Opcode },
592a252b 6739 { VEX_LEN_TABLE (VEX_LEN_0F3A7F_P_2) },
922d8de8
DR
6740 },
6741
48521003
IT
6742 /* PREFIX_VEX_0F3ACE */
6743 {
6744 { Bad_Opcode },
6745 { Bad_Opcode },
6746 { VEX_W_TABLE (VEX_W_0F3ACE_P_2) },
6747 },
6748
6749 /* PREFIX_VEX_0F3ACF */
6750 {
6751 { Bad_Opcode },
6752 { Bad_Opcode },
6753 { VEX_W_TABLE (VEX_W_0F3ACF_P_2) },
6754 },
6755
592a252b 6756 /* PREFIX_VEX_0F3ADF */
a5ff0eb2 6757 {
592d1631
L
6758 { Bad_Opcode },
6759 { Bad_Opcode },
592a252b 6760 { VEX_LEN_TABLE (VEX_LEN_0F3ADF_P_2) },
a5ff0eb2 6761 },
6c30d220
L
6762
6763 /* PREFIX_VEX_0F3AF0 */
6764 {
6765 { Bad_Opcode },
6766 { Bad_Opcode },
6767 { Bad_Opcode },
6768 { VEX_LEN_TABLE (VEX_LEN_0F3AF0_P_3) },
6769 },
43234a1e
L
6770
6771#define NEED_PREFIX_TABLE
6772#include "i386-dis-evex.h"
6773#undef NEED_PREFIX_TABLE
c0f3af97
L
6774};
6775
6776static const struct dis386 x86_64_table[][2] = {
6777 /* X86_64_06 */
6778 {
bf890a93 6779 { "pushP", { es }, 0 },
c0f3af97
L
6780 },
6781
6782 /* X86_64_07 */
6783 {
bf890a93 6784 { "popP", { es }, 0 },
c0f3af97
L
6785 },
6786
6787 /* X86_64_0D */
6788 {
bf890a93 6789 { "pushP", { cs }, 0 },
c0f3af97
L
6790 },
6791
6792 /* X86_64_16 */
6793 {
bf890a93 6794 { "pushP", { ss }, 0 },
c0f3af97
L
6795 },
6796
6797 /* X86_64_17 */
6798 {
bf890a93 6799 { "popP", { ss }, 0 },
c0f3af97
L
6800 },
6801
6802 /* X86_64_1E */
6803 {
bf890a93 6804 { "pushP", { ds }, 0 },
c0f3af97
L
6805 },
6806
6807 /* X86_64_1F */
6808 {
bf890a93 6809 { "popP", { ds }, 0 },
c0f3af97
L
6810 },
6811
6812 /* X86_64_27 */
6813 {
bf890a93 6814 { "daa", { XX }, 0 },
c0f3af97
L
6815 },
6816
6817 /* X86_64_2F */
6818 {
bf890a93 6819 { "das", { XX }, 0 },
c0f3af97
L
6820 },
6821
6822 /* X86_64_37 */
6823 {
bf890a93 6824 { "aaa", { XX }, 0 },
c0f3af97
L
6825 },
6826
6827 /* X86_64_3F */
6828 {
bf890a93 6829 { "aas", { XX }, 0 },
c0f3af97
L
6830 },
6831
6832 /* X86_64_60 */
6833 {
bf890a93 6834 { "pushaP", { XX }, 0 },
c0f3af97
L
6835 },
6836
6837 /* X86_64_61 */
6838 {
bf890a93 6839 { "popaP", { XX }, 0 },
c0f3af97
L
6840 },
6841
6842 /* X86_64_62 */
6843 {
6844 { MOD_TABLE (MOD_62_32BIT) },
43234a1e 6845 { EVEX_TABLE (EVEX_0F) },
c0f3af97
L
6846 },
6847
6848 /* X86_64_63 */
6849 {
bf890a93
IT
6850 { "arpl", { Ew, Gw }, 0 },
6851 { "movs{lq|xd}", { Gv, Ed }, 0 },
c0f3af97
L
6852 },
6853
6854 /* X86_64_6D */
6855 {
bf890a93
IT
6856 { "ins{R|}", { Yzr, indirDX }, 0 },
6857 { "ins{G|}", { Yzr, indirDX }, 0 },
c0f3af97
L
6858 },
6859
6860 /* X86_64_6F */
6861 {
bf890a93
IT
6862 { "outs{R|}", { indirDXr, Xz }, 0 },
6863 { "outs{G|}", { indirDXr, Xz }, 0 },
c0f3af97
L
6864 },
6865
d039fef3 6866 /* X86_64_82 */
8b89fe14 6867 {
de194d85 6868 /* Opcode 0x82 is an alias of opcode 0x80 in 32-bit mode. */
d039fef3 6869 { REG_TABLE (REG_80) },
8b89fe14
L
6870 },
6871
c0f3af97
L
6872 /* X86_64_9A */
6873 {
bf890a93 6874 { "Jcall{T|}", { Ap }, 0 },
c0f3af97
L
6875 },
6876
6877 /* X86_64_C4 */
6878 {
6879 { MOD_TABLE (MOD_C4_32BIT) },
6880 { VEX_C4_TABLE (VEX_0F) },
6881 },
6882
6883 /* X86_64_C5 */
6884 {
6885 { MOD_TABLE (MOD_C5_32BIT) },
6886 { VEX_C5_TABLE (VEX_0F) },
6887 },
6888
6889 /* X86_64_CE */
6890 {
bf890a93 6891 { "into", { XX }, 0 },
c0f3af97
L
6892 },
6893
6894 /* X86_64_D4 */
6895 {
bf890a93 6896 { "aam", { Ib }, 0 },
c0f3af97
L
6897 },
6898
6899 /* X86_64_D5 */
6900 {
bf890a93 6901 { "aad", { Ib }, 0 },
c0f3af97
L
6902 },
6903
a72d2af2
L
6904 /* X86_64_E8 */
6905 {
6906 { "callP", { Jv, BND }, 0 },
5db04b09 6907 { "call@", { Jv, BND }, 0 }
a72d2af2
L
6908 },
6909
6910 /* X86_64_E9 */
6911 {
6912 { "jmpP", { Jv, BND }, 0 },
5db04b09 6913 { "jmp@", { Jv, BND }, 0 }
a72d2af2
L
6914 },
6915
c0f3af97
L
6916 /* X86_64_EA */
6917 {
bf890a93 6918 { "Jjmp{T|}", { Ap }, 0 },
c0f3af97
L
6919 },
6920
6921 /* X86_64_0F01_REG_0 */
6922 {
bf890a93
IT
6923 { "sgdt{Q|IQ}", { M }, 0 },
6924 { "sgdt", { M }, 0 },
c0f3af97
L
6925 },
6926
6927 /* X86_64_0F01_REG_1 */
6928 {
bf890a93
IT
6929 { "sidt{Q|IQ}", { M }, 0 },
6930 { "sidt", { M }, 0 },
c0f3af97
L
6931 },
6932
6933 /* X86_64_0F01_REG_2 */
6934 {
bf890a93
IT
6935 { "lgdt{Q|Q}", { M }, 0 },
6936 { "lgdt", { M }, 0 },
c0f3af97
L
6937 },
6938
6939 /* X86_64_0F01_REG_3 */
6940 {
bf890a93
IT
6941 { "lidt{Q|Q}", { M }, 0 },
6942 { "lidt", { M }, 0 },
c0f3af97
L
6943 },
6944};
6945
6946static const struct dis386 three_byte_table[][256] = {
c1e679ec
DR
6947
6948 /* THREE_BYTE_0F38 */
c0f3af97
L
6949 {
6950 /* 00 */
507bd325
L
6951 { "pshufb", { MX, EM }, PREFIX_OPCODE },
6952 { "phaddw", { MX, EM }, PREFIX_OPCODE },
6953 { "phaddd", { MX, EM }, PREFIX_OPCODE },
6954 { "phaddsw", { MX, EM }, PREFIX_OPCODE },
6955 { "pmaddubsw", { MX, EM }, PREFIX_OPCODE },
6956 { "phsubw", { MX, EM }, PREFIX_OPCODE },
6957 { "phsubd", { MX, EM }, PREFIX_OPCODE },
6958 { "phsubsw", { MX, EM }, PREFIX_OPCODE },
c0f3af97 6959 /* 08 */
507bd325
L
6960 { "psignb", { MX, EM }, PREFIX_OPCODE },
6961 { "psignw", { MX, EM }, PREFIX_OPCODE },
6962 { "psignd", { MX, EM }, PREFIX_OPCODE },
6963 { "pmulhrsw", { MX, EM }, PREFIX_OPCODE },
592d1631
L
6964 { Bad_Opcode },
6965 { Bad_Opcode },
6966 { Bad_Opcode },
6967 { Bad_Opcode },
f88c9eb0
SP
6968 /* 10 */
6969 { PREFIX_TABLE (PREFIX_0F3810) },
592d1631
L
6970 { Bad_Opcode },
6971 { Bad_Opcode },
6972 { Bad_Opcode },
f88c9eb0
SP
6973 { PREFIX_TABLE (PREFIX_0F3814) },
6974 { PREFIX_TABLE (PREFIX_0F3815) },
592d1631 6975 { Bad_Opcode },
f88c9eb0
SP
6976 { PREFIX_TABLE (PREFIX_0F3817) },
6977 /* 18 */
592d1631
L
6978 { Bad_Opcode },
6979 { Bad_Opcode },
6980 { Bad_Opcode },
6981 { Bad_Opcode },
507bd325
L
6982 { "pabsb", { MX, EM }, PREFIX_OPCODE },
6983 { "pabsw", { MX, EM }, PREFIX_OPCODE },
6984 { "pabsd", { MX, EM }, PREFIX_OPCODE },
592d1631 6985 { Bad_Opcode },
f88c9eb0
SP
6986 /* 20 */
6987 { PREFIX_TABLE (PREFIX_0F3820) },
6988 { PREFIX_TABLE (PREFIX_0F3821) },
6989 { PREFIX_TABLE (PREFIX_0F3822) },
6990 { PREFIX_TABLE (PREFIX_0F3823) },
6991 { PREFIX_TABLE (PREFIX_0F3824) },
6992 { PREFIX_TABLE (PREFIX_0F3825) },
592d1631
L
6993 { Bad_Opcode },
6994 { Bad_Opcode },
f88c9eb0
SP
6995 /* 28 */
6996 { PREFIX_TABLE (PREFIX_0F3828) },
6997 { PREFIX_TABLE (PREFIX_0F3829) },
6998 { PREFIX_TABLE (PREFIX_0F382A) },
6999 { PREFIX_TABLE (PREFIX_0F382B) },
592d1631
L
7000 { Bad_Opcode },
7001 { Bad_Opcode },
7002 { Bad_Opcode },
7003 { Bad_Opcode },
f88c9eb0
SP
7004 /* 30 */
7005 { PREFIX_TABLE (PREFIX_0F3830) },
7006 { PREFIX_TABLE (PREFIX_0F3831) },
7007 { PREFIX_TABLE (PREFIX_0F3832) },
7008 { PREFIX_TABLE (PREFIX_0F3833) },
7009 { PREFIX_TABLE (PREFIX_0F3834) },
7010 { PREFIX_TABLE (PREFIX_0F3835) },
592d1631 7011 { Bad_Opcode },
f88c9eb0
SP
7012 { PREFIX_TABLE (PREFIX_0F3837) },
7013 /* 38 */
7014 { PREFIX_TABLE (PREFIX_0F3838) },
7015 { PREFIX_TABLE (PREFIX_0F3839) },
7016 { PREFIX_TABLE (PREFIX_0F383A) },
7017 { PREFIX_TABLE (PREFIX_0F383B) },
7018 { PREFIX_TABLE (PREFIX_0F383C) },
7019 { PREFIX_TABLE (PREFIX_0F383D) },
7020 { PREFIX_TABLE (PREFIX_0F383E) },
7021 { PREFIX_TABLE (PREFIX_0F383F) },
7022 /* 40 */
7023 { PREFIX_TABLE (PREFIX_0F3840) },
7024 { PREFIX_TABLE (PREFIX_0F3841) },
592d1631
L
7025 { Bad_Opcode },
7026 { Bad_Opcode },
7027 { Bad_Opcode },
7028 { Bad_Opcode },
7029 { Bad_Opcode },
7030 { Bad_Opcode },
f88c9eb0 7031 /* 48 */
592d1631
L
7032 { Bad_Opcode },
7033 { Bad_Opcode },
7034 { Bad_Opcode },
7035 { Bad_Opcode },
7036 { Bad_Opcode },
7037 { Bad_Opcode },
7038 { Bad_Opcode },
7039 { Bad_Opcode },
f88c9eb0 7040 /* 50 */
592d1631
L
7041 { Bad_Opcode },
7042 { Bad_Opcode },
7043 { Bad_Opcode },
7044 { Bad_Opcode },
7045 { Bad_Opcode },
7046 { Bad_Opcode },
7047 { Bad_Opcode },
7048 { Bad_Opcode },
f88c9eb0 7049 /* 58 */
592d1631
L
7050 { Bad_Opcode },
7051 { Bad_Opcode },
7052 { Bad_Opcode },
7053 { Bad_Opcode },
7054 { Bad_Opcode },
7055 { Bad_Opcode },
7056 { Bad_Opcode },
7057 { Bad_Opcode },
f88c9eb0 7058 /* 60 */
592d1631
L
7059 { Bad_Opcode },
7060 { Bad_Opcode },
7061 { Bad_Opcode },
7062 { Bad_Opcode },
7063 { Bad_Opcode },
7064 { Bad_Opcode },
7065 { Bad_Opcode },
7066 { Bad_Opcode },
f88c9eb0 7067 /* 68 */
592d1631
L
7068 { Bad_Opcode },
7069 { Bad_Opcode },
7070 { Bad_Opcode },
7071 { Bad_Opcode },
7072 { Bad_Opcode },
7073 { Bad_Opcode },
7074 { Bad_Opcode },
7075 { Bad_Opcode },
f88c9eb0 7076 /* 70 */
592d1631
L
7077 { Bad_Opcode },
7078 { Bad_Opcode },
7079 { Bad_Opcode },
7080 { Bad_Opcode },
7081 { Bad_Opcode },
7082 { Bad_Opcode },
7083 { Bad_Opcode },
7084 { Bad_Opcode },
f88c9eb0 7085 /* 78 */
592d1631
L
7086 { Bad_Opcode },
7087 { Bad_Opcode },
7088 { Bad_Opcode },
7089 { Bad_Opcode },
7090 { Bad_Opcode },
7091 { Bad_Opcode },
7092 { Bad_Opcode },
7093 { Bad_Opcode },
f88c9eb0
SP
7094 /* 80 */
7095 { PREFIX_TABLE (PREFIX_0F3880) },
7096 { PREFIX_TABLE (PREFIX_0F3881) },
6c30d220 7097 { PREFIX_TABLE (PREFIX_0F3882) },
592d1631
L
7098 { Bad_Opcode },
7099 { Bad_Opcode },
7100 { Bad_Opcode },
7101 { Bad_Opcode },
7102 { Bad_Opcode },
f88c9eb0 7103 /* 88 */
592d1631
L
7104 { Bad_Opcode },
7105 { Bad_Opcode },
7106 { Bad_Opcode },
7107 { Bad_Opcode },
7108 { Bad_Opcode },
7109 { Bad_Opcode },
7110 { Bad_Opcode },
7111 { Bad_Opcode },
f88c9eb0 7112 /* 90 */
592d1631
L
7113 { Bad_Opcode },
7114 { Bad_Opcode },
7115 { Bad_Opcode },
7116 { Bad_Opcode },
7117 { Bad_Opcode },
7118 { Bad_Opcode },
7119 { Bad_Opcode },
7120 { Bad_Opcode },
f88c9eb0 7121 /* 98 */
592d1631
L
7122 { Bad_Opcode },
7123 { Bad_Opcode },
7124 { Bad_Opcode },
7125 { Bad_Opcode },
7126 { Bad_Opcode },
7127 { Bad_Opcode },
7128 { Bad_Opcode },
7129 { Bad_Opcode },
f88c9eb0 7130 /* a0 */
592d1631
L
7131 { Bad_Opcode },
7132 { Bad_Opcode },
7133 { Bad_Opcode },
7134 { Bad_Opcode },
7135 { Bad_Opcode },
7136 { Bad_Opcode },
7137 { Bad_Opcode },
7138 { Bad_Opcode },
f88c9eb0 7139 /* a8 */
592d1631
L
7140 { Bad_Opcode },
7141 { Bad_Opcode },
7142 { Bad_Opcode },
7143 { Bad_Opcode },
7144 { Bad_Opcode },
7145 { Bad_Opcode },
7146 { Bad_Opcode },
7147 { Bad_Opcode },
f88c9eb0 7148 /* b0 */
592d1631
L
7149 { Bad_Opcode },
7150 { Bad_Opcode },
7151 { Bad_Opcode },
7152 { Bad_Opcode },
7153 { Bad_Opcode },
7154 { Bad_Opcode },
7155 { Bad_Opcode },
7156 { Bad_Opcode },
f88c9eb0 7157 /* b8 */
592d1631
L
7158 { Bad_Opcode },
7159 { Bad_Opcode },
7160 { Bad_Opcode },
7161 { Bad_Opcode },
7162 { Bad_Opcode },
7163 { Bad_Opcode },
7164 { Bad_Opcode },
7165 { Bad_Opcode },
f88c9eb0 7166 /* c0 */
592d1631
L
7167 { Bad_Opcode },
7168 { Bad_Opcode },
7169 { Bad_Opcode },
7170 { Bad_Opcode },
7171 { Bad_Opcode },
7172 { Bad_Opcode },
7173 { Bad_Opcode },
7174 { Bad_Opcode },
f88c9eb0 7175 /* c8 */
a0046408
L
7176 { PREFIX_TABLE (PREFIX_0F38C8) },
7177 { PREFIX_TABLE (PREFIX_0F38C9) },
7178 { PREFIX_TABLE (PREFIX_0F38CA) },
7179 { PREFIX_TABLE (PREFIX_0F38CB) },
7180 { PREFIX_TABLE (PREFIX_0F38CC) },
7181 { PREFIX_TABLE (PREFIX_0F38CD) },
592d1631 7182 { Bad_Opcode },
48521003 7183 { PREFIX_TABLE (PREFIX_0F38CF) },
f88c9eb0 7184 /* d0 */
592d1631
L
7185 { Bad_Opcode },
7186 { Bad_Opcode },
7187 { Bad_Opcode },
7188 { Bad_Opcode },
7189 { Bad_Opcode },
7190 { Bad_Opcode },
7191 { Bad_Opcode },
7192 { Bad_Opcode },
f88c9eb0 7193 /* d8 */
592d1631
L
7194 { Bad_Opcode },
7195 { Bad_Opcode },
7196 { Bad_Opcode },
f88c9eb0
SP
7197 { PREFIX_TABLE (PREFIX_0F38DB) },
7198 { PREFIX_TABLE (PREFIX_0F38DC) },
7199 { PREFIX_TABLE (PREFIX_0F38DD) },
7200 { PREFIX_TABLE (PREFIX_0F38DE) },
7201 { PREFIX_TABLE (PREFIX_0F38DF) },
7202 /* e0 */
592d1631
L
7203 { Bad_Opcode },
7204 { Bad_Opcode },
7205 { Bad_Opcode },
7206 { Bad_Opcode },
7207 { Bad_Opcode },
7208 { Bad_Opcode },
7209 { Bad_Opcode },
7210 { Bad_Opcode },
f88c9eb0 7211 /* e8 */
592d1631
L
7212 { Bad_Opcode },
7213 { Bad_Opcode },
7214 { Bad_Opcode },
7215 { Bad_Opcode },
7216 { Bad_Opcode },
7217 { Bad_Opcode },
7218 { Bad_Opcode },
7219 { Bad_Opcode },
f88c9eb0
SP
7220 /* f0 */
7221 { PREFIX_TABLE (PREFIX_0F38F0) },
7222 { PREFIX_TABLE (PREFIX_0F38F1) },
592d1631
L
7223 { Bad_Opcode },
7224 { Bad_Opcode },
7225 { Bad_Opcode },
603555e5 7226 { PREFIX_TABLE (PREFIX_0F38F5) },
e2e1fcde 7227 { PREFIX_TABLE (PREFIX_0F38F6) },
592d1631 7228 { Bad_Opcode },
f88c9eb0 7229 /* f8 */
c0a30a9f
L
7230 { PREFIX_TABLE (PREFIX_0F38F8) },
7231 { PREFIX_TABLE (PREFIX_0F38F9) },
592d1631
L
7232 { Bad_Opcode },
7233 { Bad_Opcode },
7234 { Bad_Opcode },
7235 { Bad_Opcode },
7236 { Bad_Opcode },
7237 { Bad_Opcode },
f88c9eb0
SP
7238 },
7239 /* THREE_BYTE_0F3A */
7240 {
7241 /* 00 */
592d1631
L
7242 { Bad_Opcode },
7243 { Bad_Opcode },
7244 { Bad_Opcode },
7245 { Bad_Opcode },
7246 { Bad_Opcode },
7247 { Bad_Opcode },
7248 { Bad_Opcode },
7249 { Bad_Opcode },
f88c9eb0
SP
7250 /* 08 */
7251 { PREFIX_TABLE (PREFIX_0F3A08) },
7252 { PREFIX_TABLE (PREFIX_0F3A09) },
7253 { PREFIX_TABLE (PREFIX_0F3A0A) },
7254 { PREFIX_TABLE (PREFIX_0F3A0B) },
7255 { PREFIX_TABLE (PREFIX_0F3A0C) },
7256 { PREFIX_TABLE (PREFIX_0F3A0D) },
7257 { PREFIX_TABLE (PREFIX_0F3A0E) },
507bd325 7258 { "palignr", { MX, EM, Ib }, PREFIX_OPCODE },
f88c9eb0 7259 /* 10 */
592d1631
L
7260 { Bad_Opcode },
7261 { Bad_Opcode },
7262 { Bad_Opcode },
7263 { Bad_Opcode },
f88c9eb0
SP
7264 { PREFIX_TABLE (PREFIX_0F3A14) },
7265 { PREFIX_TABLE (PREFIX_0F3A15) },
7266 { PREFIX_TABLE (PREFIX_0F3A16) },
7267 { PREFIX_TABLE (PREFIX_0F3A17) },
7268 /* 18 */
592d1631
L
7269 { Bad_Opcode },
7270 { Bad_Opcode },
7271 { Bad_Opcode },
7272 { Bad_Opcode },
7273 { Bad_Opcode },
7274 { Bad_Opcode },
7275 { Bad_Opcode },
7276 { Bad_Opcode },
f88c9eb0
SP
7277 /* 20 */
7278 { PREFIX_TABLE (PREFIX_0F3A20) },
7279 { PREFIX_TABLE (PREFIX_0F3A21) },
7280 { PREFIX_TABLE (PREFIX_0F3A22) },
592d1631
L
7281 { Bad_Opcode },
7282 { Bad_Opcode },
7283 { Bad_Opcode },
7284 { Bad_Opcode },
7285 { Bad_Opcode },
f88c9eb0 7286 /* 28 */
592d1631
L
7287 { Bad_Opcode },
7288 { Bad_Opcode },
7289 { Bad_Opcode },
7290 { Bad_Opcode },
7291 { Bad_Opcode },
7292 { Bad_Opcode },
7293 { Bad_Opcode },
7294 { Bad_Opcode },
f88c9eb0 7295 /* 30 */
592d1631
L
7296 { Bad_Opcode },
7297 { Bad_Opcode },
7298 { Bad_Opcode },
7299 { Bad_Opcode },
7300 { Bad_Opcode },
7301 { Bad_Opcode },
7302 { Bad_Opcode },
7303 { Bad_Opcode },
f88c9eb0 7304 /* 38 */
592d1631
L
7305 { Bad_Opcode },
7306 { Bad_Opcode },
7307 { Bad_Opcode },
7308 { Bad_Opcode },
7309 { Bad_Opcode },
7310 { Bad_Opcode },
7311 { Bad_Opcode },
7312 { Bad_Opcode },
f88c9eb0
SP
7313 /* 40 */
7314 { PREFIX_TABLE (PREFIX_0F3A40) },
7315 { PREFIX_TABLE (PREFIX_0F3A41) },
7316 { PREFIX_TABLE (PREFIX_0F3A42) },
592d1631 7317 { Bad_Opcode },
f88c9eb0 7318 { PREFIX_TABLE (PREFIX_0F3A44) },
592d1631
L
7319 { Bad_Opcode },
7320 { Bad_Opcode },
7321 { Bad_Opcode },
f88c9eb0 7322 /* 48 */
592d1631
L
7323 { Bad_Opcode },
7324 { Bad_Opcode },
7325 { Bad_Opcode },
7326 { Bad_Opcode },
7327 { Bad_Opcode },
7328 { Bad_Opcode },
7329 { Bad_Opcode },
7330 { Bad_Opcode },
f88c9eb0 7331 /* 50 */
592d1631
L
7332 { Bad_Opcode },
7333 { Bad_Opcode },
7334 { Bad_Opcode },
7335 { Bad_Opcode },
7336 { Bad_Opcode },
7337 { Bad_Opcode },
7338 { Bad_Opcode },
7339 { Bad_Opcode },
f88c9eb0 7340 /* 58 */
592d1631
L
7341 { Bad_Opcode },
7342 { Bad_Opcode },
7343 { Bad_Opcode },
7344 { Bad_Opcode },
7345 { Bad_Opcode },
7346 { Bad_Opcode },
7347 { Bad_Opcode },
7348 { Bad_Opcode },
f88c9eb0
SP
7349 /* 60 */
7350 { PREFIX_TABLE (PREFIX_0F3A60) },
7351 { PREFIX_TABLE (PREFIX_0F3A61) },
7352 { PREFIX_TABLE (PREFIX_0F3A62) },
7353 { PREFIX_TABLE (PREFIX_0F3A63) },
592d1631
L
7354 { Bad_Opcode },
7355 { Bad_Opcode },
7356 { Bad_Opcode },
7357 { Bad_Opcode },
f88c9eb0 7358 /* 68 */
592d1631
L
7359 { Bad_Opcode },
7360 { Bad_Opcode },
7361 { Bad_Opcode },
7362 { Bad_Opcode },
7363 { Bad_Opcode },
7364 { Bad_Opcode },
7365 { Bad_Opcode },
7366 { Bad_Opcode },
f88c9eb0 7367 /* 70 */
592d1631
L
7368 { Bad_Opcode },
7369 { Bad_Opcode },
7370 { Bad_Opcode },
7371 { Bad_Opcode },
7372 { Bad_Opcode },
7373 { Bad_Opcode },
7374 { Bad_Opcode },
7375 { Bad_Opcode },
f88c9eb0 7376 /* 78 */
592d1631
L
7377 { Bad_Opcode },
7378 { Bad_Opcode },
7379 { Bad_Opcode },
7380 { Bad_Opcode },
7381 { Bad_Opcode },
7382 { Bad_Opcode },
7383 { Bad_Opcode },
7384 { Bad_Opcode },
f88c9eb0 7385 /* 80 */
592d1631
L
7386 { Bad_Opcode },
7387 { Bad_Opcode },
7388 { Bad_Opcode },
7389 { Bad_Opcode },
7390 { Bad_Opcode },
7391 { Bad_Opcode },
7392 { Bad_Opcode },
7393 { Bad_Opcode },
f88c9eb0 7394 /* 88 */
592d1631
L
7395 { Bad_Opcode },
7396 { Bad_Opcode },
7397 { Bad_Opcode },
7398 { Bad_Opcode },
7399 { Bad_Opcode },
7400 { Bad_Opcode },
7401 { Bad_Opcode },
7402 { Bad_Opcode },
f88c9eb0 7403 /* 90 */
592d1631
L
7404 { Bad_Opcode },
7405 { Bad_Opcode },
7406 { Bad_Opcode },
7407 { Bad_Opcode },
7408 { Bad_Opcode },
7409 { Bad_Opcode },
7410 { Bad_Opcode },
7411 { Bad_Opcode },
f88c9eb0 7412 /* 98 */
592d1631
L
7413 { Bad_Opcode },
7414 { Bad_Opcode },
7415 { Bad_Opcode },
7416 { Bad_Opcode },
7417 { Bad_Opcode },
7418 { Bad_Opcode },
7419 { Bad_Opcode },
7420 { Bad_Opcode },
f88c9eb0 7421 /* a0 */
592d1631
L
7422 { Bad_Opcode },
7423 { Bad_Opcode },
7424 { Bad_Opcode },
7425 { Bad_Opcode },
7426 { Bad_Opcode },
7427 { Bad_Opcode },
7428 { Bad_Opcode },
7429 { Bad_Opcode },
f88c9eb0 7430 /* a8 */
592d1631
L
7431 { Bad_Opcode },
7432 { Bad_Opcode },
7433 { Bad_Opcode },
7434 { Bad_Opcode },
7435 { Bad_Opcode },
7436 { Bad_Opcode },
7437 { Bad_Opcode },
7438 { Bad_Opcode },
f88c9eb0 7439 /* b0 */
592d1631
L
7440 { Bad_Opcode },
7441 { Bad_Opcode },
7442 { Bad_Opcode },
7443 { Bad_Opcode },
7444 { Bad_Opcode },
7445 { Bad_Opcode },
7446 { Bad_Opcode },
7447 { Bad_Opcode },
f88c9eb0 7448 /* b8 */
592d1631
L
7449 { Bad_Opcode },
7450 { Bad_Opcode },
7451 { Bad_Opcode },
7452 { Bad_Opcode },
7453 { Bad_Opcode },
7454 { Bad_Opcode },
7455 { Bad_Opcode },
7456 { Bad_Opcode },
f88c9eb0 7457 /* c0 */
592d1631
L
7458 { Bad_Opcode },
7459 { Bad_Opcode },
7460 { Bad_Opcode },
7461 { Bad_Opcode },
7462 { Bad_Opcode },
7463 { Bad_Opcode },
7464 { Bad_Opcode },
7465 { Bad_Opcode },
f88c9eb0 7466 /* c8 */
592d1631
L
7467 { Bad_Opcode },
7468 { Bad_Opcode },
7469 { Bad_Opcode },
7470 { Bad_Opcode },
a0046408 7471 { PREFIX_TABLE (PREFIX_0F3ACC) },
592d1631 7472 { Bad_Opcode },
48521003
IT
7473 { PREFIX_TABLE (PREFIX_0F3ACE) },
7474 { PREFIX_TABLE (PREFIX_0F3ACF) },
f88c9eb0 7475 /* d0 */
592d1631
L
7476 { Bad_Opcode },
7477 { Bad_Opcode },
7478 { Bad_Opcode },
7479 { Bad_Opcode },
7480 { Bad_Opcode },
7481 { Bad_Opcode },
7482 { Bad_Opcode },
7483 { Bad_Opcode },
f88c9eb0 7484 /* d8 */
592d1631
L
7485 { Bad_Opcode },
7486 { Bad_Opcode },
7487 { Bad_Opcode },
7488 { Bad_Opcode },
7489 { Bad_Opcode },
7490 { Bad_Opcode },
7491 { Bad_Opcode },
f88c9eb0
SP
7492 { PREFIX_TABLE (PREFIX_0F3ADF) },
7493 /* e0 */
592d1631
L
7494 { Bad_Opcode },
7495 { Bad_Opcode },
7496 { Bad_Opcode },
7497 { Bad_Opcode },
7498 { Bad_Opcode },
592d1631
L
7499 { Bad_Opcode },
7500 { Bad_Opcode },
7501 { Bad_Opcode },
85f10a01 7502 /* e8 */
592d1631
L
7503 { Bad_Opcode },
7504 { Bad_Opcode },
7505 { Bad_Opcode },
7506 { Bad_Opcode },
7507 { Bad_Opcode },
7508 { Bad_Opcode },
7509 { Bad_Opcode },
7510 { Bad_Opcode },
85f10a01 7511 /* f0 */
592d1631
L
7512 { Bad_Opcode },
7513 { Bad_Opcode },
7514 { Bad_Opcode },
7515 { Bad_Opcode },
7516 { Bad_Opcode },
7517 { Bad_Opcode },
7518 { Bad_Opcode },
7519 { Bad_Opcode },
85f10a01 7520 /* f8 */
592d1631
L
7521 { Bad_Opcode },
7522 { Bad_Opcode },
7523 { Bad_Opcode },
7524 { Bad_Opcode },
7525 { Bad_Opcode },
7526 { Bad_Opcode },
7527 { Bad_Opcode },
7528 { Bad_Opcode },
85f10a01 7529 },
f88c9eb0
SP
7530};
7531
7532static const struct dis386 xop_table[][256] = {
5dd85c99 7533 /* XOP_08 */
85f10a01
MM
7534 {
7535 /* 00 */
592d1631
L
7536 { Bad_Opcode },
7537 { Bad_Opcode },
7538 { Bad_Opcode },
7539 { Bad_Opcode },
7540 { Bad_Opcode },
7541 { Bad_Opcode },
7542 { Bad_Opcode },
7543 { Bad_Opcode },
85f10a01 7544 /* 08 */
592d1631
L
7545 { Bad_Opcode },
7546 { Bad_Opcode },
7547 { Bad_Opcode },
7548 { Bad_Opcode },
7549 { Bad_Opcode },
7550 { Bad_Opcode },
7551 { Bad_Opcode },
7552 { Bad_Opcode },
85f10a01 7553 /* 10 */
3929df09 7554 { Bad_Opcode },
592d1631
L
7555 { Bad_Opcode },
7556 { Bad_Opcode },
7557 { Bad_Opcode },
7558 { Bad_Opcode },
7559 { Bad_Opcode },
7560 { Bad_Opcode },
7561 { Bad_Opcode },
85f10a01 7562 /* 18 */
592d1631
L
7563 { Bad_Opcode },
7564 { Bad_Opcode },
7565 { Bad_Opcode },
7566 { Bad_Opcode },
7567 { Bad_Opcode },
7568 { Bad_Opcode },
7569 { Bad_Opcode },
7570 { Bad_Opcode },
85f10a01 7571 /* 20 */
592d1631
L
7572 { Bad_Opcode },
7573 { Bad_Opcode },
7574 { Bad_Opcode },
7575 { Bad_Opcode },
7576 { Bad_Opcode },
7577 { Bad_Opcode },
7578 { Bad_Opcode },
7579 { Bad_Opcode },
85f10a01 7580 /* 28 */
592d1631
L
7581 { Bad_Opcode },
7582 { Bad_Opcode },
7583 { Bad_Opcode },
7584 { Bad_Opcode },
7585 { Bad_Opcode },
7586 { Bad_Opcode },
7587 { Bad_Opcode },
7588 { Bad_Opcode },
c0f3af97 7589 /* 30 */
592d1631
L
7590 { Bad_Opcode },
7591 { Bad_Opcode },
7592 { Bad_Opcode },
7593 { Bad_Opcode },
7594 { Bad_Opcode },
7595 { Bad_Opcode },
7596 { Bad_Opcode },
7597 { Bad_Opcode },
c0f3af97 7598 /* 38 */
592d1631
L
7599 { Bad_Opcode },
7600 { Bad_Opcode },
7601 { Bad_Opcode },
7602 { Bad_Opcode },
7603 { Bad_Opcode },
7604 { Bad_Opcode },
7605 { Bad_Opcode },
7606 { Bad_Opcode },
c0f3af97 7607 /* 40 */
592d1631
L
7608 { Bad_Opcode },
7609 { Bad_Opcode },
7610 { Bad_Opcode },
7611 { Bad_Opcode },
7612 { Bad_Opcode },
7613 { Bad_Opcode },
7614 { Bad_Opcode },
7615 { Bad_Opcode },
85f10a01 7616 /* 48 */
592d1631
L
7617 { Bad_Opcode },
7618 { Bad_Opcode },
7619 { Bad_Opcode },
7620 { Bad_Opcode },
7621 { Bad_Opcode },
7622 { Bad_Opcode },
7623 { Bad_Opcode },
7624 { Bad_Opcode },
c0f3af97 7625 /* 50 */
592d1631
L
7626 { Bad_Opcode },
7627 { Bad_Opcode },
7628 { Bad_Opcode },
7629 { Bad_Opcode },
7630 { Bad_Opcode },
7631 { Bad_Opcode },
7632 { Bad_Opcode },
7633 { Bad_Opcode },
85f10a01 7634 /* 58 */
592d1631
L
7635 { Bad_Opcode },
7636 { Bad_Opcode },
7637 { Bad_Opcode },
7638 { Bad_Opcode },
7639 { Bad_Opcode },
7640 { Bad_Opcode },
7641 { Bad_Opcode },
7642 { Bad_Opcode },
c1e679ec 7643 /* 60 */
592d1631
L
7644 { Bad_Opcode },
7645 { Bad_Opcode },
7646 { Bad_Opcode },
7647 { Bad_Opcode },
7648 { Bad_Opcode },
7649 { Bad_Opcode },
7650 { Bad_Opcode },
7651 { Bad_Opcode },
c0f3af97 7652 /* 68 */
592d1631
L
7653 { Bad_Opcode },
7654 { Bad_Opcode },
7655 { Bad_Opcode },
7656 { Bad_Opcode },
7657 { Bad_Opcode },
7658 { Bad_Opcode },
7659 { Bad_Opcode },
7660 { Bad_Opcode },
85f10a01 7661 /* 70 */
592d1631
L
7662 { Bad_Opcode },
7663 { Bad_Opcode },
7664 { Bad_Opcode },
7665 { Bad_Opcode },
7666 { Bad_Opcode },
7667 { Bad_Opcode },
7668 { Bad_Opcode },
7669 { Bad_Opcode },
85f10a01 7670 /* 78 */
592d1631
L
7671 { Bad_Opcode },
7672 { Bad_Opcode },
7673 { Bad_Opcode },
7674 { Bad_Opcode },
7675 { Bad_Opcode },
7676 { Bad_Opcode },
7677 { Bad_Opcode },
7678 { Bad_Opcode },
85f10a01 7679 /* 80 */
592d1631
L
7680 { Bad_Opcode },
7681 { Bad_Opcode },
7682 { Bad_Opcode },
7683 { Bad_Opcode },
7684 { Bad_Opcode },
3a2430e0
JB
7685 { "vpmacssww", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7686 { "vpmacsswd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7687 { "vpmacssdql", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
5dd85c99 7688 /* 88 */
592d1631
L
7689 { Bad_Opcode },
7690 { Bad_Opcode },
7691 { Bad_Opcode },
7692 { Bad_Opcode },
7693 { Bad_Opcode },
7694 { Bad_Opcode },
3a2430e0
JB
7695 { "vpmacssdd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7696 { "vpmacssdqh", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
5dd85c99 7697 /* 90 */
592d1631
L
7698 { Bad_Opcode },
7699 { Bad_Opcode },
7700 { Bad_Opcode },
7701 { Bad_Opcode },
7702 { Bad_Opcode },
3a2430e0
JB
7703 { "vpmacsww", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7704 { "vpmacswd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7705 { "vpmacsdql", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
5dd85c99 7706 /* 98 */
592d1631
L
7707 { Bad_Opcode },
7708 { Bad_Opcode },
7709 { Bad_Opcode },
7710 { Bad_Opcode },
7711 { Bad_Opcode },
7712 { Bad_Opcode },
3a2430e0
JB
7713 { "vpmacsdd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7714 { "vpmacsdqh", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
5dd85c99 7715 /* a0 */
592d1631
L
7716 { Bad_Opcode },
7717 { Bad_Opcode },
3a2430e0
JB
7718 { "vpcmov", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7719 { "vpperm", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
592d1631
L
7720 { Bad_Opcode },
7721 { Bad_Opcode },
3a2430e0 7722 { "vpmadcsswd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
592d1631 7723 { Bad_Opcode },
5dd85c99 7724 /* a8 */
592d1631
L
7725 { Bad_Opcode },
7726 { Bad_Opcode },
7727 { Bad_Opcode },
7728 { Bad_Opcode },
7729 { Bad_Opcode },
7730 { Bad_Opcode },
7731 { Bad_Opcode },
7732 { Bad_Opcode },
5dd85c99 7733 /* b0 */
592d1631
L
7734 { Bad_Opcode },
7735 { Bad_Opcode },
7736 { Bad_Opcode },
7737 { Bad_Opcode },
7738 { Bad_Opcode },
7739 { Bad_Opcode },
3a2430e0 7740 { "vpmadcswd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
592d1631 7741 { Bad_Opcode },
5dd85c99 7742 /* b8 */
592d1631
L
7743 { Bad_Opcode },
7744 { Bad_Opcode },
7745 { Bad_Opcode },
7746 { Bad_Opcode },
7747 { Bad_Opcode },
7748 { Bad_Opcode },
7749 { Bad_Opcode },
7750 { Bad_Opcode },
5dd85c99 7751 /* c0 */
bf890a93
IT
7752 { "vprotb", { XM, Vex_2src_1, Ib }, 0 },
7753 { "vprotw", { XM, Vex_2src_1, Ib }, 0 },
7754 { "vprotd", { XM, Vex_2src_1, Ib }, 0 },
7755 { "vprotq", { XM, Vex_2src_1, Ib }, 0 },
592d1631
L
7756 { Bad_Opcode },
7757 { Bad_Opcode },
7758 { Bad_Opcode },
7759 { Bad_Opcode },
5dd85c99 7760 /* c8 */
592d1631
L
7761 { Bad_Opcode },
7762 { Bad_Opcode },
7763 { Bad_Opcode },
7764 { Bad_Opcode },
ff688e1f
L
7765 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CC) },
7766 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CD) },
7767 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CE) },
7768 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CF) },
5dd85c99 7769 /* d0 */
592d1631
L
7770 { Bad_Opcode },
7771 { Bad_Opcode },
7772 { Bad_Opcode },
7773 { Bad_Opcode },
7774 { Bad_Opcode },
7775 { Bad_Opcode },
7776 { Bad_Opcode },
7777 { Bad_Opcode },
5dd85c99 7778 /* d8 */
592d1631
L
7779 { Bad_Opcode },
7780 { Bad_Opcode },
7781 { Bad_Opcode },
7782 { Bad_Opcode },
7783 { Bad_Opcode },
7784 { Bad_Opcode },
7785 { Bad_Opcode },
7786 { Bad_Opcode },
5dd85c99 7787 /* e0 */
592d1631
L
7788 { Bad_Opcode },
7789 { Bad_Opcode },
7790 { Bad_Opcode },
7791 { Bad_Opcode },
7792 { Bad_Opcode },
7793 { Bad_Opcode },
7794 { Bad_Opcode },
7795 { Bad_Opcode },
5dd85c99 7796 /* e8 */
592d1631
L
7797 { Bad_Opcode },
7798 { Bad_Opcode },
7799 { Bad_Opcode },
7800 { Bad_Opcode },
ff688e1f
L
7801 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EC) },
7802 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_ED) },
7803 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EE) },
7804 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EF) },
5dd85c99 7805 /* f0 */
592d1631
L
7806 { Bad_Opcode },
7807 { Bad_Opcode },
7808 { Bad_Opcode },
7809 { Bad_Opcode },
7810 { Bad_Opcode },
7811 { Bad_Opcode },
7812 { Bad_Opcode },
7813 { Bad_Opcode },
5dd85c99 7814 /* f8 */
592d1631
L
7815 { Bad_Opcode },
7816 { Bad_Opcode },
7817 { Bad_Opcode },
7818 { Bad_Opcode },
7819 { Bad_Opcode },
7820 { Bad_Opcode },
7821 { Bad_Opcode },
7822 { Bad_Opcode },
5dd85c99
SP
7823 },
7824 /* XOP_09 */
7825 {
7826 /* 00 */
592d1631 7827 { Bad_Opcode },
2a2a0f38
QN
7828 { REG_TABLE (REG_XOP_TBM_01) },
7829 { REG_TABLE (REG_XOP_TBM_02) },
592d1631
L
7830 { Bad_Opcode },
7831 { Bad_Opcode },
7832 { Bad_Opcode },
7833 { Bad_Opcode },
7834 { Bad_Opcode },
5dd85c99 7835 /* 08 */
592d1631
L
7836 { Bad_Opcode },
7837 { Bad_Opcode },
7838 { Bad_Opcode },
7839 { Bad_Opcode },
7840 { Bad_Opcode },
7841 { Bad_Opcode },
7842 { Bad_Opcode },
7843 { Bad_Opcode },
5dd85c99 7844 /* 10 */
592d1631
L
7845 { Bad_Opcode },
7846 { Bad_Opcode },
5dd85c99 7847 { REG_TABLE (REG_XOP_LWPCB) },
592d1631
L
7848 { Bad_Opcode },
7849 { Bad_Opcode },
7850 { Bad_Opcode },
7851 { Bad_Opcode },
7852 { Bad_Opcode },
5dd85c99 7853 /* 18 */
592d1631
L
7854 { Bad_Opcode },
7855 { Bad_Opcode },
7856 { Bad_Opcode },
7857 { Bad_Opcode },
7858 { Bad_Opcode },
7859 { Bad_Opcode },
7860 { Bad_Opcode },
7861 { Bad_Opcode },
5dd85c99 7862 /* 20 */
592d1631
L
7863 { Bad_Opcode },
7864 { Bad_Opcode },
7865 { Bad_Opcode },
7866 { Bad_Opcode },
7867 { Bad_Opcode },
7868 { Bad_Opcode },
7869 { Bad_Opcode },
7870 { Bad_Opcode },
5dd85c99 7871 /* 28 */
592d1631
L
7872 { Bad_Opcode },
7873 { Bad_Opcode },
7874 { Bad_Opcode },
7875 { Bad_Opcode },
7876 { Bad_Opcode },
7877 { Bad_Opcode },
7878 { Bad_Opcode },
7879 { Bad_Opcode },
5dd85c99 7880 /* 30 */
592d1631
L
7881 { Bad_Opcode },
7882 { Bad_Opcode },
7883 { Bad_Opcode },
7884 { Bad_Opcode },
7885 { Bad_Opcode },
7886 { Bad_Opcode },
7887 { Bad_Opcode },
7888 { Bad_Opcode },
5dd85c99 7889 /* 38 */
592d1631
L
7890 { Bad_Opcode },
7891 { Bad_Opcode },
7892 { Bad_Opcode },
7893 { Bad_Opcode },
7894 { Bad_Opcode },
7895 { Bad_Opcode },
7896 { Bad_Opcode },
7897 { Bad_Opcode },
5dd85c99 7898 /* 40 */
592d1631
L
7899 { Bad_Opcode },
7900 { Bad_Opcode },
7901 { Bad_Opcode },
7902 { Bad_Opcode },
7903 { Bad_Opcode },
7904 { Bad_Opcode },
7905 { Bad_Opcode },
7906 { Bad_Opcode },
5dd85c99 7907 /* 48 */
592d1631
L
7908 { Bad_Opcode },
7909 { Bad_Opcode },
7910 { Bad_Opcode },
7911 { Bad_Opcode },
7912 { Bad_Opcode },
7913 { Bad_Opcode },
7914 { Bad_Opcode },
7915 { Bad_Opcode },
5dd85c99 7916 /* 50 */
592d1631
L
7917 { Bad_Opcode },
7918 { Bad_Opcode },
7919 { Bad_Opcode },
7920 { Bad_Opcode },
7921 { Bad_Opcode },
7922 { Bad_Opcode },
7923 { Bad_Opcode },
7924 { Bad_Opcode },
5dd85c99 7925 /* 58 */
592d1631
L
7926 { Bad_Opcode },
7927 { Bad_Opcode },
7928 { Bad_Opcode },
7929 { Bad_Opcode },
7930 { Bad_Opcode },
7931 { Bad_Opcode },
7932 { Bad_Opcode },
7933 { Bad_Opcode },
5dd85c99 7934 /* 60 */
592d1631
L
7935 { Bad_Opcode },
7936 { Bad_Opcode },
7937 { Bad_Opcode },
7938 { Bad_Opcode },
7939 { Bad_Opcode },
7940 { Bad_Opcode },
7941 { Bad_Opcode },
7942 { Bad_Opcode },
5dd85c99 7943 /* 68 */
592d1631
L
7944 { Bad_Opcode },
7945 { Bad_Opcode },
7946 { Bad_Opcode },
7947 { Bad_Opcode },
7948 { Bad_Opcode },
7949 { Bad_Opcode },
7950 { Bad_Opcode },
7951 { Bad_Opcode },
5dd85c99 7952 /* 70 */
592d1631
L
7953 { Bad_Opcode },
7954 { Bad_Opcode },
7955 { Bad_Opcode },
7956 { Bad_Opcode },
7957 { Bad_Opcode },
7958 { Bad_Opcode },
7959 { Bad_Opcode },
7960 { Bad_Opcode },
5dd85c99 7961 /* 78 */
592d1631
L
7962 { Bad_Opcode },
7963 { Bad_Opcode },
7964 { Bad_Opcode },
7965 { Bad_Opcode },
7966 { Bad_Opcode },
7967 { Bad_Opcode },
7968 { Bad_Opcode },
7969 { Bad_Opcode },
5dd85c99 7970 /* 80 */
592a252b
L
7971 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_80) },
7972 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_81) },
bf890a93
IT
7973 { "vfrczss", { XM, EXd }, 0 },
7974 { "vfrczsd", { XM, EXq }, 0 },
592d1631
L
7975 { Bad_Opcode },
7976 { Bad_Opcode },
7977 { Bad_Opcode },
7978 { Bad_Opcode },
5dd85c99 7979 /* 88 */
592d1631
L
7980 { Bad_Opcode },
7981 { Bad_Opcode },
7982 { Bad_Opcode },
7983 { Bad_Opcode },
7984 { Bad_Opcode },
7985 { Bad_Opcode },
7986 { Bad_Opcode },
7987 { Bad_Opcode },
5dd85c99 7988 /* 90 */
bf890a93
IT
7989 { "vprotb", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
7990 { "vprotw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
7991 { "vprotd", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
7992 { "vprotq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
7993 { "vpshlb", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
7994 { "vpshlw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
7995 { "vpshld", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
7996 { "vpshlq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
5dd85c99 7997 /* 98 */
bf890a93
IT
7998 { "vpshab", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
7999 { "vpshaw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8000 { "vpshad", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8001 { "vpshaq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
592d1631
L
8002 { Bad_Opcode },
8003 { Bad_Opcode },
8004 { Bad_Opcode },
8005 { Bad_Opcode },
5dd85c99 8006 /* a0 */
592d1631
L
8007 { Bad_Opcode },
8008 { Bad_Opcode },
8009 { Bad_Opcode },
8010 { Bad_Opcode },
8011 { Bad_Opcode },
8012 { Bad_Opcode },
8013 { Bad_Opcode },
8014 { Bad_Opcode },
5dd85c99 8015 /* a8 */
592d1631
L
8016 { Bad_Opcode },
8017 { Bad_Opcode },
8018 { Bad_Opcode },
8019 { Bad_Opcode },
8020 { Bad_Opcode },
8021 { Bad_Opcode },
8022 { Bad_Opcode },
8023 { Bad_Opcode },
5dd85c99 8024 /* b0 */
592d1631
L
8025 { Bad_Opcode },
8026 { Bad_Opcode },
8027 { Bad_Opcode },
8028 { Bad_Opcode },
8029 { Bad_Opcode },
8030 { Bad_Opcode },
8031 { Bad_Opcode },
8032 { Bad_Opcode },
5dd85c99 8033 /* b8 */
592d1631
L
8034 { Bad_Opcode },
8035 { Bad_Opcode },
8036 { Bad_Opcode },
8037 { Bad_Opcode },
8038 { Bad_Opcode },
8039 { Bad_Opcode },
8040 { Bad_Opcode },
8041 { Bad_Opcode },
5dd85c99 8042 /* c0 */
592d1631 8043 { Bad_Opcode },
bf890a93
IT
8044 { "vphaddbw", { XM, EXxmm }, 0 },
8045 { "vphaddbd", { XM, EXxmm }, 0 },
8046 { "vphaddbq", { XM, EXxmm }, 0 },
592d1631
L
8047 { Bad_Opcode },
8048 { Bad_Opcode },
bf890a93
IT
8049 { "vphaddwd", { XM, EXxmm }, 0 },
8050 { "vphaddwq", { XM, EXxmm }, 0 },
5dd85c99 8051 /* c8 */
592d1631
L
8052 { Bad_Opcode },
8053 { Bad_Opcode },
8054 { Bad_Opcode },
bf890a93 8055 { "vphadddq", { XM, EXxmm }, 0 },
592d1631
L
8056 { Bad_Opcode },
8057 { Bad_Opcode },
8058 { Bad_Opcode },
8059 { Bad_Opcode },
5dd85c99 8060 /* d0 */
592d1631 8061 { Bad_Opcode },
bf890a93
IT
8062 { "vphaddubw", { XM, EXxmm }, 0 },
8063 { "vphaddubd", { XM, EXxmm }, 0 },
8064 { "vphaddubq", { XM, EXxmm }, 0 },
592d1631
L
8065 { Bad_Opcode },
8066 { Bad_Opcode },
bf890a93
IT
8067 { "vphadduwd", { XM, EXxmm }, 0 },
8068 { "vphadduwq", { XM, EXxmm }, 0 },
5dd85c99 8069 /* d8 */
592d1631
L
8070 { Bad_Opcode },
8071 { Bad_Opcode },
8072 { Bad_Opcode },
bf890a93 8073 { "vphaddudq", { XM, EXxmm }, 0 },
592d1631
L
8074 { Bad_Opcode },
8075 { Bad_Opcode },
8076 { Bad_Opcode },
8077 { Bad_Opcode },
5dd85c99 8078 /* e0 */
592d1631 8079 { Bad_Opcode },
bf890a93
IT
8080 { "vphsubbw", { XM, EXxmm }, 0 },
8081 { "vphsubwd", { XM, EXxmm }, 0 },
8082 { "vphsubdq", { XM, EXxmm }, 0 },
592d1631
L
8083 { Bad_Opcode },
8084 { Bad_Opcode },
8085 { Bad_Opcode },
8086 { Bad_Opcode },
4e7d34a6 8087 /* e8 */
592d1631
L
8088 { Bad_Opcode },
8089 { Bad_Opcode },
8090 { Bad_Opcode },
8091 { Bad_Opcode },
8092 { Bad_Opcode },
8093 { Bad_Opcode },
8094 { Bad_Opcode },
8095 { Bad_Opcode },
4e7d34a6 8096 /* f0 */
592d1631
L
8097 { Bad_Opcode },
8098 { Bad_Opcode },
8099 { Bad_Opcode },
8100 { Bad_Opcode },
8101 { Bad_Opcode },
8102 { Bad_Opcode },
8103 { Bad_Opcode },
8104 { Bad_Opcode },
4e7d34a6 8105 /* f8 */
592d1631
L
8106 { Bad_Opcode },
8107 { Bad_Opcode },
8108 { Bad_Opcode },
8109 { Bad_Opcode },
8110 { Bad_Opcode },
8111 { Bad_Opcode },
8112 { Bad_Opcode },
8113 { Bad_Opcode },
4e7d34a6 8114 },
f88c9eb0 8115 /* XOP_0A */
4e7d34a6
L
8116 {
8117 /* 00 */
592d1631
L
8118 { Bad_Opcode },
8119 { Bad_Opcode },
8120 { Bad_Opcode },
8121 { Bad_Opcode },
8122 { Bad_Opcode },
8123 { Bad_Opcode },
8124 { Bad_Opcode },
8125 { Bad_Opcode },
4e7d34a6 8126 /* 08 */
592d1631
L
8127 { Bad_Opcode },
8128 { Bad_Opcode },
8129 { Bad_Opcode },
8130 { Bad_Opcode },
8131 { Bad_Opcode },
8132 { Bad_Opcode },
8133 { Bad_Opcode },
8134 { Bad_Opcode },
4e7d34a6 8135 /* 10 */
bf890a93 8136 { "bextr", { Gv, Ev, Iq }, 0 },
592d1631 8137 { Bad_Opcode },
f88c9eb0 8138 { REG_TABLE (REG_XOP_LWP) },
592d1631
L
8139 { Bad_Opcode },
8140 { Bad_Opcode },
8141 { Bad_Opcode },
8142 { Bad_Opcode },
8143 { Bad_Opcode },
4e7d34a6 8144 /* 18 */
592d1631
L
8145 { Bad_Opcode },
8146 { Bad_Opcode },
8147 { Bad_Opcode },
8148 { Bad_Opcode },
8149 { Bad_Opcode },
8150 { Bad_Opcode },
8151 { Bad_Opcode },
8152 { Bad_Opcode },
4e7d34a6 8153 /* 20 */
592d1631
L
8154 { Bad_Opcode },
8155 { Bad_Opcode },
8156 { Bad_Opcode },
8157 { Bad_Opcode },
8158 { Bad_Opcode },
8159 { Bad_Opcode },
8160 { Bad_Opcode },
8161 { Bad_Opcode },
4e7d34a6 8162 /* 28 */
592d1631
L
8163 { Bad_Opcode },
8164 { Bad_Opcode },
8165 { Bad_Opcode },
8166 { Bad_Opcode },
8167 { Bad_Opcode },
8168 { Bad_Opcode },
8169 { Bad_Opcode },
8170 { Bad_Opcode },
4e7d34a6 8171 /* 30 */
592d1631
L
8172 { Bad_Opcode },
8173 { Bad_Opcode },
8174 { Bad_Opcode },
8175 { Bad_Opcode },
8176 { Bad_Opcode },
8177 { Bad_Opcode },
8178 { Bad_Opcode },
8179 { Bad_Opcode },
c0f3af97 8180 /* 38 */
592d1631
L
8181 { Bad_Opcode },
8182 { Bad_Opcode },
8183 { Bad_Opcode },
8184 { Bad_Opcode },
8185 { Bad_Opcode },
8186 { Bad_Opcode },
8187 { Bad_Opcode },
8188 { Bad_Opcode },
c0f3af97 8189 /* 40 */
592d1631
L
8190 { Bad_Opcode },
8191 { Bad_Opcode },
8192 { Bad_Opcode },
8193 { Bad_Opcode },
8194 { Bad_Opcode },
8195 { Bad_Opcode },
8196 { Bad_Opcode },
8197 { Bad_Opcode },
c1e679ec 8198 /* 48 */
592d1631
L
8199 { Bad_Opcode },
8200 { Bad_Opcode },
8201 { Bad_Opcode },
8202 { Bad_Opcode },
8203 { Bad_Opcode },
8204 { Bad_Opcode },
8205 { Bad_Opcode },
8206 { Bad_Opcode },
c1e679ec 8207 /* 50 */
592d1631
L
8208 { Bad_Opcode },
8209 { Bad_Opcode },
8210 { Bad_Opcode },
8211 { Bad_Opcode },
8212 { Bad_Opcode },
8213 { Bad_Opcode },
8214 { Bad_Opcode },
8215 { Bad_Opcode },
4e7d34a6 8216 /* 58 */
592d1631
L
8217 { Bad_Opcode },
8218 { Bad_Opcode },
8219 { Bad_Opcode },
8220 { Bad_Opcode },
8221 { Bad_Opcode },
8222 { Bad_Opcode },
8223 { Bad_Opcode },
8224 { Bad_Opcode },
4e7d34a6 8225 /* 60 */
592d1631
L
8226 { Bad_Opcode },
8227 { Bad_Opcode },
8228 { Bad_Opcode },
8229 { Bad_Opcode },
8230 { Bad_Opcode },
8231 { Bad_Opcode },
8232 { Bad_Opcode },
8233 { Bad_Opcode },
4e7d34a6 8234 /* 68 */
592d1631
L
8235 { Bad_Opcode },
8236 { Bad_Opcode },
8237 { Bad_Opcode },
8238 { Bad_Opcode },
8239 { Bad_Opcode },
8240 { Bad_Opcode },
8241 { Bad_Opcode },
8242 { Bad_Opcode },
4e7d34a6 8243 /* 70 */
592d1631
L
8244 { Bad_Opcode },
8245 { Bad_Opcode },
8246 { Bad_Opcode },
8247 { Bad_Opcode },
8248 { Bad_Opcode },
8249 { Bad_Opcode },
8250 { Bad_Opcode },
8251 { Bad_Opcode },
4e7d34a6 8252 /* 78 */
592d1631
L
8253 { Bad_Opcode },
8254 { Bad_Opcode },
8255 { Bad_Opcode },
8256 { Bad_Opcode },
8257 { Bad_Opcode },
8258 { Bad_Opcode },
8259 { Bad_Opcode },
8260 { Bad_Opcode },
4e7d34a6 8261 /* 80 */
592d1631
L
8262 { Bad_Opcode },
8263 { Bad_Opcode },
8264 { Bad_Opcode },
8265 { Bad_Opcode },
8266 { Bad_Opcode },
8267 { Bad_Opcode },
8268 { Bad_Opcode },
8269 { Bad_Opcode },
4e7d34a6 8270 /* 88 */
592d1631
L
8271 { Bad_Opcode },
8272 { Bad_Opcode },
8273 { Bad_Opcode },
8274 { Bad_Opcode },
8275 { Bad_Opcode },
8276 { Bad_Opcode },
8277 { Bad_Opcode },
8278 { Bad_Opcode },
4e7d34a6 8279 /* 90 */
592d1631
L
8280 { Bad_Opcode },
8281 { Bad_Opcode },
8282 { Bad_Opcode },
8283 { Bad_Opcode },
8284 { Bad_Opcode },
8285 { Bad_Opcode },
8286 { Bad_Opcode },
8287 { Bad_Opcode },
4e7d34a6 8288 /* 98 */
592d1631
L
8289 { Bad_Opcode },
8290 { Bad_Opcode },
8291 { Bad_Opcode },
8292 { Bad_Opcode },
8293 { Bad_Opcode },
8294 { Bad_Opcode },
8295 { Bad_Opcode },
8296 { Bad_Opcode },
4e7d34a6 8297 /* a0 */
592d1631
L
8298 { Bad_Opcode },
8299 { Bad_Opcode },
8300 { Bad_Opcode },
8301 { Bad_Opcode },
8302 { Bad_Opcode },
8303 { Bad_Opcode },
8304 { Bad_Opcode },
8305 { Bad_Opcode },
4e7d34a6 8306 /* a8 */
592d1631
L
8307 { Bad_Opcode },
8308 { Bad_Opcode },
8309 { Bad_Opcode },
8310 { Bad_Opcode },
8311 { Bad_Opcode },
8312 { Bad_Opcode },
8313 { Bad_Opcode },
8314 { Bad_Opcode },
d5d7db8e 8315 /* b0 */
592d1631
L
8316 { Bad_Opcode },
8317 { Bad_Opcode },
8318 { Bad_Opcode },
8319 { Bad_Opcode },
8320 { Bad_Opcode },
8321 { Bad_Opcode },
8322 { Bad_Opcode },
8323 { Bad_Opcode },
85f10a01 8324 /* b8 */
592d1631
L
8325 { Bad_Opcode },
8326 { Bad_Opcode },
8327 { Bad_Opcode },
8328 { Bad_Opcode },
8329 { Bad_Opcode },
8330 { Bad_Opcode },
8331 { Bad_Opcode },
8332 { Bad_Opcode },
85f10a01 8333 /* c0 */
592d1631
L
8334 { Bad_Opcode },
8335 { Bad_Opcode },
8336 { Bad_Opcode },
8337 { Bad_Opcode },
8338 { Bad_Opcode },
8339 { Bad_Opcode },
8340 { Bad_Opcode },
8341 { Bad_Opcode },
85f10a01 8342 /* c8 */
592d1631
L
8343 { Bad_Opcode },
8344 { Bad_Opcode },
8345 { Bad_Opcode },
8346 { Bad_Opcode },
8347 { Bad_Opcode },
8348 { Bad_Opcode },
8349 { Bad_Opcode },
8350 { Bad_Opcode },
85f10a01 8351 /* d0 */
592d1631
L
8352 { Bad_Opcode },
8353 { Bad_Opcode },
8354 { Bad_Opcode },
8355 { Bad_Opcode },
8356 { Bad_Opcode },
8357 { Bad_Opcode },
8358 { Bad_Opcode },
8359 { Bad_Opcode },
85f10a01 8360 /* d8 */
592d1631
L
8361 { Bad_Opcode },
8362 { Bad_Opcode },
8363 { Bad_Opcode },
8364 { Bad_Opcode },
8365 { Bad_Opcode },
8366 { Bad_Opcode },
8367 { Bad_Opcode },
8368 { Bad_Opcode },
85f10a01 8369 /* e0 */
592d1631
L
8370 { Bad_Opcode },
8371 { Bad_Opcode },
8372 { Bad_Opcode },
8373 { Bad_Opcode },
8374 { Bad_Opcode },
8375 { Bad_Opcode },
8376 { Bad_Opcode },
8377 { Bad_Opcode },
85f10a01 8378 /* e8 */
592d1631
L
8379 { Bad_Opcode },
8380 { Bad_Opcode },
8381 { Bad_Opcode },
8382 { Bad_Opcode },
8383 { Bad_Opcode },
8384 { Bad_Opcode },
8385 { Bad_Opcode },
8386 { Bad_Opcode },
85f10a01 8387 /* f0 */
592d1631
L
8388 { Bad_Opcode },
8389 { Bad_Opcode },
8390 { Bad_Opcode },
8391 { Bad_Opcode },
8392 { Bad_Opcode },
8393 { Bad_Opcode },
8394 { Bad_Opcode },
8395 { Bad_Opcode },
85f10a01 8396 /* f8 */
592d1631
L
8397 { Bad_Opcode },
8398 { Bad_Opcode },
8399 { Bad_Opcode },
8400 { Bad_Opcode },
8401 { Bad_Opcode },
8402 { Bad_Opcode },
8403 { Bad_Opcode },
8404 { Bad_Opcode },
85f10a01 8405 },
c0f3af97
L
8406};
8407
8408static const struct dis386 vex_table[][256] = {
8409 /* VEX_0F */
85f10a01
MM
8410 {
8411 /* 00 */
592d1631
L
8412 { Bad_Opcode },
8413 { Bad_Opcode },
8414 { Bad_Opcode },
8415 { Bad_Opcode },
8416 { Bad_Opcode },
8417 { Bad_Opcode },
8418 { Bad_Opcode },
8419 { Bad_Opcode },
85f10a01 8420 /* 08 */
592d1631
L
8421 { Bad_Opcode },
8422 { Bad_Opcode },
8423 { Bad_Opcode },
8424 { Bad_Opcode },
8425 { Bad_Opcode },
8426 { Bad_Opcode },
8427 { Bad_Opcode },
8428 { Bad_Opcode },
c0f3af97 8429 /* 10 */
592a252b
L
8430 { PREFIX_TABLE (PREFIX_VEX_0F10) },
8431 { PREFIX_TABLE (PREFIX_VEX_0F11) },
8432 { PREFIX_TABLE (PREFIX_VEX_0F12) },
8433 { MOD_TABLE (MOD_VEX_0F13) },
ec6f095a
L
8434 { "vunpcklpX", { XM, Vex, EXx }, 0 },
8435 { "vunpckhpX", { XM, Vex, EXx }, 0 },
592a252b
L
8436 { PREFIX_TABLE (PREFIX_VEX_0F16) },
8437 { MOD_TABLE (MOD_VEX_0F17) },
c0f3af97 8438 /* 18 */
592d1631
L
8439 { Bad_Opcode },
8440 { Bad_Opcode },
8441 { Bad_Opcode },
8442 { Bad_Opcode },
8443 { Bad_Opcode },
8444 { Bad_Opcode },
8445 { Bad_Opcode },
8446 { Bad_Opcode },
c0f3af97 8447 /* 20 */
592d1631
L
8448 { Bad_Opcode },
8449 { Bad_Opcode },
8450 { Bad_Opcode },
8451 { Bad_Opcode },
8452 { Bad_Opcode },
8453 { Bad_Opcode },
8454 { Bad_Opcode },
8455 { Bad_Opcode },
c0f3af97 8456 /* 28 */
ec6f095a
L
8457 { "vmovapX", { XM, EXx }, 0 },
8458 { "vmovapX", { EXxS, XM }, 0 },
592a252b
L
8459 { PREFIX_TABLE (PREFIX_VEX_0F2A) },
8460 { MOD_TABLE (MOD_VEX_0F2B) },
8461 { PREFIX_TABLE (PREFIX_VEX_0F2C) },
8462 { PREFIX_TABLE (PREFIX_VEX_0F2D) },
8463 { PREFIX_TABLE (PREFIX_VEX_0F2E) },
8464 { PREFIX_TABLE (PREFIX_VEX_0F2F) },
85f10a01 8465 /* 30 */
592d1631
L
8466 { Bad_Opcode },
8467 { Bad_Opcode },
8468 { Bad_Opcode },
8469 { Bad_Opcode },
8470 { Bad_Opcode },
8471 { Bad_Opcode },
8472 { Bad_Opcode },
8473 { Bad_Opcode },
4e7d34a6 8474 /* 38 */
592d1631
L
8475 { Bad_Opcode },
8476 { Bad_Opcode },
8477 { Bad_Opcode },
8478 { Bad_Opcode },
8479 { Bad_Opcode },
8480 { Bad_Opcode },
8481 { Bad_Opcode },
8482 { Bad_Opcode },
d5d7db8e 8483 /* 40 */
592d1631 8484 { Bad_Opcode },
43234a1e
L
8485 { PREFIX_TABLE (PREFIX_VEX_0F41) },
8486 { PREFIX_TABLE (PREFIX_VEX_0F42) },
592d1631 8487 { Bad_Opcode },
43234a1e
L
8488 { PREFIX_TABLE (PREFIX_VEX_0F44) },
8489 { PREFIX_TABLE (PREFIX_VEX_0F45) },
8490 { PREFIX_TABLE (PREFIX_VEX_0F46) },
8491 { PREFIX_TABLE (PREFIX_VEX_0F47) },
85f10a01 8492 /* 48 */
592d1631
L
8493 { Bad_Opcode },
8494 { Bad_Opcode },
1ba585e8 8495 { PREFIX_TABLE (PREFIX_VEX_0F4A) },
43234a1e 8496 { PREFIX_TABLE (PREFIX_VEX_0F4B) },
592d1631
L
8497 { Bad_Opcode },
8498 { Bad_Opcode },
8499 { Bad_Opcode },
8500 { Bad_Opcode },
d5d7db8e 8501 /* 50 */
592a252b
L
8502 { MOD_TABLE (MOD_VEX_0F50) },
8503 { PREFIX_TABLE (PREFIX_VEX_0F51) },
8504 { PREFIX_TABLE (PREFIX_VEX_0F52) },
8505 { PREFIX_TABLE (PREFIX_VEX_0F53) },
bf890a93
IT
8506 { "vandpX", { XM, Vex, EXx }, 0 },
8507 { "vandnpX", { XM, Vex, EXx }, 0 },
8508 { "vorpX", { XM, Vex, EXx }, 0 },
8509 { "vxorpX", { XM, Vex, EXx }, 0 },
c0f3af97 8510 /* 58 */
592a252b
L
8511 { PREFIX_TABLE (PREFIX_VEX_0F58) },
8512 { PREFIX_TABLE (PREFIX_VEX_0F59) },
8513 { PREFIX_TABLE (PREFIX_VEX_0F5A) },
8514 { PREFIX_TABLE (PREFIX_VEX_0F5B) },
8515 { PREFIX_TABLE (PREFIX_VEX_0F5C) },
8516 { PREFIX_TABLE (PREFIX_VEX_0F5D) },
8517 { PREFIX_TABLE (PREFIX_VEX_0F5E) },
8518 { PREFIX_TABLE (PREFIX_VEX_0F5F) },
c0f3af97 8519 /* 60 */
592a252b
L
8520 { PREFIX_TABLE (PREFIX_VEX_0F60) },
8521 { PREFIX_TABLE (PREFIX_VEX_0F61) },
8522 { PREFIX_TABLE (PREFIX_VEX_0F62) },
8523 { PREFIX_TABLE (PREFIX_VEX_0F63) },
8524 { PREFIX_TABLE (PREFIX_VEX_0F64) },
8525 { PREFIX_TABLE (PREFIX_VEX_0F65) },
8526 { PREFIX_TABLE (PREFIX_VEX_0F66) },
8527 { PREFIX_TABLE (PREFIX_VEX_0F67) },
c0f3af97 8528 /* 68 */
592a252b
L
8529 { PREFIX_TABLE (PREFIX_VEX_0F68) },
8530 { PREFIX_TABLE (PREFIX_VEX_0F69) },
8531 { PREFIX_TABLE (PREFIX_VEX_0F6A) },
8532 { PREFIX_TABLE (PREFIX_VEX_0F6B) },
8533 { PREFIX_TABLE (PREFIX_VEX_0F6C) },
8534 { PREFIX_TABLE (PREFIX_VEX_0F6D) },
8535 { PREFIX_TABLE (PREFIX_VEX_0F6E) },
8536 { PREFIX_TABLE (PREFIX_VEX_0F6F) },
c0f3af97 8537 /* 70 */
592a252b
L
8538 { PREFIX_TABLE (PREFIX_VEX_0F70) },
8539 { REG_TABLE (REG_VEX_0F71) },
8540 { REG_TABLE (REG_VEX_0F72) },
8541 { REG_TABLE (REG_VEX_0F73) },
8542 { PREFIX_TABLE (PREFIX_VEX_0F74) },
8543 { PREFIX_TABLE (PREFIX_VEX_0F75) },
8544 { PREFIX_TABLE (PREFIX_VEX_0F76) },
8545 { PREFIX_TABLE (PREFIX_VEX_0F77) },
c0f3af97 8546 /* 78 */
592d1631
L
8547 { Bad_Opcode },
8548 { Bad_Opcode },
8549 { Bad_Opcode },
8550 { Bad_Opcode },
592a252b
L
8551 { PREFIX_TABLE (PREFIX_VEX_0F7C) },
8552 { PREFIX_TABLE (PREFIX_VEX_0F7D) },
8553 { PREFIX_TABLE (PREFIX_VEX_0F7E) },
8554 { PREFIX_TABLE (PREFIX_VEX_0F7F) },
c0f3af97 8555 /* 80 */
592d1631
L
8556 { Bad_Opcode },
8557 { Bad_Opcode },
8558 { Bad_Opcode },
8559 { Bad_Opcode },
8560 { Bad_Opcode },
8561 { Bad_Opcode },
8562 { Bad_Opcode },
8563 { Bad_Opcode },
c0f3af97 8564 /* 88 */
592d1631
L
8565 { Bad_Opcode },
8566 { Bad_Opcode },
8567 { Bad_Opcode },
8568 { Bad_Opcode },
8569 { Bad_Opcode },
8570 { Bad_Opcode },
8571 { Bad_Opcode },
8572 { Bad_Opcode },
c0f3af97 8573 /* 90 */
43234a1e
L
8574 { PREFIX_TABLE (PREFIX_VEX_0F90) },
8575 { PREFIX_TABLE (PREFIX_VEX_0F91) },
8576 { PREFIX_TABLE (PREFIX_VEX_0F92) },
8577 { PREFIX_TABLE (PREFIX_VEX_0F93) },
592d1631
L
8578 { Bad_Opcode },
8579 { Bad_Opcode },
8580 { Bad_Opcode },
8581 { Bad_Opcode },
c0f3af97 8582 /* 98 */
43234a1e 8583 { PREFIX_TABLE (PREFIX_VEX_0F98) },
1ba585e8 8584 { PREFIX_TABLE (PREFIX_VEX_0F99) },
592d1631
L
8585 { Bad_Opcode },
8586 { Bad_Opcode },
8587 { Bad_Opcode },
8588 { Bad_Opcode },
8589 { Bad_Opcode },
8590 { Bad_Opcode },
c0f3af97 8591 /* a0 */
592d1631
L
8592 { Bad_Opcode },
8593 { Bad_Opcode },
8594 { Bad_Opcode },
8595 { Bad_Opcode },
8596 { Bad_Opcode },
8597 { Bad_Opcode },
8598 { Bad_Opcode },
8599 { Bad_Opcode },
c0f3af97 8600 /* a8 */
592d1631
L
8601 { Bad_Opcode },
8602 { Bad_Opcode },
8603 { Bad_Opcode },
8604 { Bad_Opcode },
8605 { Bad_Opcode },
8606 { Bad_Opcode },
592a252b 8607 { REG_TABLE (REG_VEX_0FAE) },
592d1631 8608 { Bad_Opcode },
c0f3af97 8609 /* b0 */
592d1631
L
8610 { Bad_Opcode },
8611 { Bad_Opcode },
8612 { Bad_Opcode },
8613 { Bad_Opcode },
8614 { Bad_Opcode },
8615 { Bad_Opcode },
8616 { Bad_Opcode },
8617 { Bad_Opcode },
c0f3af97 8618 /* b8 */
592d1631
L
8619 { Bad_Opcode },
8620 { Bad_Opcode },
8621 { Bad_Opcode },
8622 { Bad_Opcode },
8623 { Bad_Opcode },
8624 { Bad_Opcode },
8625 { Bad_Opcode },
8626 { Bad_Opcode },
c0f3af97 8627 /* c0 */
592d1631
L
8628 { Bad_Opcode },
8629 { Bad_Opcode },
592a252b 8630 { PREFIX_TABLE (PREFIX_VEX_0FC2) },
592d1631 8631 { Bad_Opcode },
592a252b
L
8632 { PREFIX_TABLE (PREFIX_VEX_0FC4) },
8633 { PREFIX_TABLE (PREFIX_VEX_0FC5) },
bf890a93 8634 { "vshufpX", { XM, Vex, EXx, Ib }, 0 },
592d1631 8635 { Bad_Opcode },
c0f3af97 8636 /* c8 */
592d1631
L
8637 { Bad_Opcode },
8638 { Bad_Opcode },
8639 { Bad_Opcode },
8640 { Bad_Opcode },
8641 { Bad_Opcode },
8642 { Bad_Opcode },
8643 { Bad_Opcode },
8644 { Bad_Opcode },
c0f3af97 8645 /* d0 */
592a252b
L
8646 { PREFIX_TABLE (PREFIX_VEX_0FD0) },
8647 { PREFIX_TABLE (PREFIX_VEX_0FD1) },
8648 { PREFIX_TABLE (PREFIX_VEX_0FD2) },
8649 { PREFIX_TABLE (PREFIX_VEX_0FD3) },
8650 { PREFIX_TABLE (PREFIX_VEX_0FD4) },
8651 { PREFIX_TABLE (PREFIX_VEX_0FD5) },
8652 { PREFIX_TABLE (PREFIX_VEX_0FD6) },
8653 { PREFIX_TABLE (PREFIX_VEX_0FD7) },
c0f3af97 8654 /* d8 */
592a252b
L
8655 { PREFIX_TABLE (PREFIX_VEX_0FD8) },
8656 { PREFIX_TABLE (PREFIX_VEX_0FD9) },
8657 { PREFIX_TABLE (PREFIX_VEX_0FDA) },
8658 { PREFIX_TABLE (PREFIX_VEX_0FDB) },
8659 { PREFIX_TABLE (PREFIX_VEX_0FDC) },
8660 { PREFIX_TABLE (PREFIX_VEX_0FDD) },
8661 { PREFIX_TABLE (PREFIX_VEX_0FDE) },
8662 { PREFIX_TABLE (PREFIX_VEX_0FDF) },
c0f3af97 8663 /* e0 */
592a252b
L
8664 { PREFIX_TABLE (PREFIX_VEX_0FE0) },
8665 { PREFIX_TABLE (PREFIX_VEX_0FE1) },
8666 { PREFIX_TABLE (PREFIX_VEX_0FE2) },
8667 { PREFIX_TABLE (PREFIX_VEX_0FE3) },
8668 { PREFIX_TABLE (PREFIX_VEX_0FE4) },
8669 { PREFIX_TABLE (PREFIX_VEX_0FE5) },
8670 { PREFIX_TABLE (PREFIX_VEX_0FE6) },
8671 { PREFIX_TABLE (PREFIX_VEX_0FE7) },
c0f3af97 8672 /* e8 */
592a252b
L
8673 { PREFIX_TABLE (PREFIX_VEX_0FE8) },
8674 { PREFIX_TABLE (PREFIX_VEX_0FE9) },
8675 { PREFIX_TABLE (PREFIX_VEX_0FEA) },
8676 { PREFIX_TABLE (PREFIX_VEX_0FEB) },
8677 { PREFIX_TABLE (PREFIX_VEX_0FEC) },
8678 { PREFIX_TABLE (PREFIX_VEX_0FED) },
8679 { PREFIX_TABLE (PREFIX_VEX_0FEE) },
8680 { PREFIX_TABLE (PREFIX_VEX_0FEF) },
c0f3af97 8681 /* f0 */
592a252b
L
8682 { PREFIX_TABLE (PREFIX_VEX_0FF0) },
8683 { PREFIX_TABLE (PREFIX_VEX_0FF1) },
8684 { PREFIX_TABLE (PREFIX_VEX_0FF2) },
8685 { PREFIX_TABLE (PREFIX_VEX_0FF3) },
8686 { PREFIX_TABLE (PREFIX_VEX_0FF4) },
8687 { PREFIX_TABLE (PREFIX_VEX_0FF5) },
8688 { PREFIX_TABLE (PREFIX_VEX_0FF6) },
8689 { PREFIX_TABLE (PREFIX_VEX_0FF7) },
c0f3af97 8690 /* f8 */
592a252b
L
8691 { PREFIX_TABLE (PREFIX_VEX_0FF8) },
8692 { PREFIX_TABLE (PREFIX_VEX_0FF9) },
8693 { PREFIX_TABLE (PREFIX_VEX_0FFA) },
8694 { PREFIX_TABLE (PREFIX_VEX_0FFB) },
8695 { PREFIX_TABLE (PREFIX_VEX_0FFC) },
8696 { PREFIX_TABLE (PREFIX_VEX_0FFD) },
8697 { PREFIX_TABLE (PREFIX_VEX_0FFE) },
592d1631 8698 { Bad_Opcode },
c0f3af97
L
8699 },
8700 /* VEX_0F38 */
8701 {
8702 /* 00 */
592a252b
L
8703 { PREFIX_TABLE (PREFIX_VEX_0F3800) },
8704 { PREFIX_TABLE (PREFIX_VEX_0F3801) },
8705 { PREFIX_TABLE (PREFIX_VEX_0F3802) },
8706 { PREFIX_TABLE (PREFIX_VEX_0F3803) },
8707 { PREFIX_TABLE (PREFIX_VEX_0F3804) },
8708 { PREFIX_TABLE (PREFIX_VEX_0F3805) },
8709 { PREFIX_TABLE (PREFIX_VEX_0F3806) },
8710 { PREFIX_TABLE (PREFIX_VEX_0F3807) },
c0f3af97 8711 /* 08 */
592a252b
L
8712 { PREFIX_TABLE (PREFIX_VEX_0F3808) },
8713 { PREFIX_TABLE (PREFIX_VEX_0F3809) },
8714 { PREFIX_TABLE (PREFIX_VEX_0F380A) },
8715 { PREFIX_TABLE (PREFIX_VEX_0F380B) },
8716 { PREFIX_TABLE (PREFIX_VEX_0F380C) },
8717 { PREFIX_TABLE (PREFIX_VEX_0F380D) },
8718 { PREFIX_TABLE (PREFIX_VEX_0F380E) },
8719 { PREFIX_TABLE (PREFIX_VEX_0F380F) },
c0f3af97 8720 /* 10 */
592d1631
L
8721 { Bad_Opcode },
8722 { Bad_Opcode },
8723 { Bad_Opcode },
592a252b 8724 { PREFIX_TABLE (PREFIX_VEX_0F3813) },
592d1631
L
8725 { Bad_Opcode },
8726 { Bad_Opcode },
6c30d220 8727 { PREFIX_TABLE (PREFIX_VEX_0F3816) },
592a252b 8728 { PREFIX_TABLE (PREFIX_VEX_0F3817) },
c0f3af97 8729 /* 18 */
592a252b
L
8730 { PREFIX_TABLE (PREFIX_VEX_0F3818) },
8731 { PREFIX_TABLE (PREFIX_VEX_0F3819) },
8732 { PREFIX_TABLE (PREFIX_VEX_0F381A) },
592d1631 8733 { Bad_Opcode },
592a252b
L
8734 { PREFIX_TABLE (PREFIX_VEX_0F381C) },
8735 { PREFIX_TABLE (PREFIX_VEX_0F381D) },
8736 { PREFIX_TABLE (PREFIX_VEX_0F381E) },
592d1631 8737 { Bad_Opcode },
c0f3af97 8738 /* 20 */
592a252b
L
8739 { PREFIX_TABLE (PREFIX_VEX_0F3820) },
8740 { PREFIX_TABLE (PREFIX_VEX_0F3821) },
8741 { PREFIX_TABLE (PREFIX_VEX_0F3822) },
8742 { PREFIX_TABLE (PREFIX_VEX_0F3823) },
8743 { PREFIX_TABLE (PREFIX_VEX_0F3824) },
8744 { PREFIX_TABLE (PREFIX_VEX_0F3825) },
592d1631
L
8745 { Bad_Opcode },
8746 { Bad_Opcode },
c0f3af97 8747 /* 28 */
592a252b
L
8748 { PREFIX_TABLE (PREFIX_VEX_0F3828) },
8749 { PREFIX_TABLE (PREFIX_VEX_0F3829) },
8750 { PREFIX_TABLE (PREFIX_VEX_0F382A) },
8751 { PREFIX_TABLE (PREFIX_VEX_0F382B) },
8752 { PREFIX_TABLE (PREFIX_VEX_0F382C) },
8753 { PREFIX_TABLE (PREFIX_VEX_0F382D) },
8754 { PREFIX_TABLE (PREFIX_VEX_0F382E) },
8755 { PREFIX_TABLE (PREFIX_VEX_0F382F) },
c0f3af97 8756 /* 30 */
592a252b
L
8757 { PREFIX_TABLE (PREFIX_VEX_0F3830) },
8758 { PREFIX_TABLE (PREFIX_VEX_0F3831) },
8759 { PREFIX_TABLE (PREFIX_VEX_0F3832) },
8760 { PREFIX_TABLE (PREFIX_VEX_0F3833) },
8761 { PREFIX_TABLE (PREFIX_VEX_0F3834) },
8762 { PREFIX_TABLE (PREFIX_VEX_0F3835) },
6c30d220 8763 { PREFIX_TABLE (PREFIX_VEX_0F3836) },
592a252b 8764 { PREFIX_TABLE (PREFIX_VEX_0F3837) },
c0f3af97 8765 /* 38 */
592a252b
L
8766 { PREFIX_TABLE (PREFIX_VEX_0F3838) },
8767 { PREFIX_TABLE (PREFIX_VEX_0F3839) },
8768 { PREFIX_TABLE (PREFIX_VEX_0F383A) },
8769 { PREFIX_TABLE (PREFIX_VEX_0F383B) },
8770 { PREFIX_TABLE (PREFIX_VEX_0F383C) },
8771 { PREFIX_TABLE (PREFIX_VEX_0F383D) },
8772 { PREFIX_TABLE (PREFIX_VEX_0F383E) },
8773 { PREFIX_TABLE (PREFIX_VEX_0F383F) },
c0f3af97 8774 /* 40 */
592a252b
L
8775 { PREFIX_TABLE (PREFIX_VEX_0F3840) },
8776 { PREFIX_TABLE (PREFIX_VEX_0F3841) },
592d1631
L
8777 { Bad_Opcode },
8778 { Bad_Opcode },
8779 { Bad_Opcode },
6c30d220
L
8780 { PREFIX_TABLE (PREFIX_VEX_0F3845) },
8781 { PREFIX_TABLE (PREFIX_VEX_0F3846) },
8782 { PREFIX_TABLE (PREFIX_VEX_0F3847) },
c0f3af97 8783 /* 48 */
592d1631
L
8784 { Bad_Opcode },
8785 { Bad_Opcode },
8786 { Bad_Opcode },
8787 { Bad_Opcode },
8788 { Bad_Opcode },
8789 { Bad_Opcode },
8790 { Bad_Opcode },
8791 { Bad_Opcode },
c0f3af97 8792 /* 50 */
592d1631
L
8793 { Bad_Opcode },
8794 { Bad_Opcode },
8795 { Bad_Opcode },
8796 { Bad_Opcode },
8797 { Bad_Opcode },
8798 { Bad_Opcode },
8799 { Bad_Opcode },
8800 { Bad_Opcode },
c0f3af97 8801 /* 58 */
6c30d220
L
8802 { PREFIX_TABLE (PREFIX_VEX_0F3858) },
8803 { PREFIX_TABLE (PREFIX_VEX_0F3859) },
8804 { PREFIX_TABLE (PREFIX_VEX_0F385A) },
592d1631
L
8805 { Bad_Opcode },
8806 { Bad_Opcode },
8807 { Bad_Opcode },
8808 { Bad_Opcode },
8809 { Bad_Opcode },
c0f3af97 8810 /* 60 */
592d1631
L
8811 { Bad_Opcode },
8812 { Bad_Opcode },
8813 { Bad_Opcode },
8814 { Bad_Opcode },
8815 { Bad_Opcode },
8816 { Bad_Opcode },
8817 { Bad_Opcode },
8818 { Bad_Opcode },
c0f3af97 8819 /* 68 */
592d1631
L
8820 { Bad_Opcode },
8821 { Bad_Opcode },
8822 { Bad_Opcode },
8823 { Bad_Opcode },
8824 { Bad_Opcode },
8825 { Bad_Opcode },
8826 { Bad_Opcode },
8827 { Bad_Opcode },
c0f3af97 8828 /* 70 */
592d1631
L
8829 { Bad_Opcode },
8830 { Bad_Opcode },
8831 { Bad_Opcode },
8832 { Bad_Opcode },
8833 { Bad_Opcode },
8834 { Bad_Opcode },
8835 { Bad_Opcode },
8836 { Bad_Opcode },
c0f3af97 8837 /* 78 */
6c30d220
L
8838 { PREFIX_TABLE (PREFIX_VEX_0F3878) },
8839 { PREFIX_TABLE (PREFIX_VEX_0F3879) },
592d1631
L
8840 { Bad_Opcode },
8841 { Bad_Opcode },
8842 { Bad_Opcode },
8843 { Bad_Opcode },
8844 { Bad_Opcode },
8845 { Bad_Opcode },
c0f3af97 8846 /* 80 */
592d1631
L
8847 { Bad_Opcode },
8848 { Bad_Opcode },
8849 { Bad_Opcode },
8850 { Bad_Opcode },
8851 { Bad_Opcode },
8852 { Bad_Opcode },
8853 { Bad_Opcode },
8854 { Bad_Opcode },
c0f3af97 8855 /* 88 */
592d1631
L
8856 { Bad_Opcode },
8857 { Bad_Opcode },
8858 { Bad_Opcode },
8859 { Bad_Opcode },
6c30d220 8860 { PREFIX_TABLE (PREFIX_VEX_0F388C) },
592d1631 8861 { Bad_Opcode },
6c30d220 8862 { PREFIX_TABLE (PREFIX_VEX_0F388E) },
592d1631 8863 { Bad_Opcode },
c0f3af97 8864 /* 90 */
6c30d220
L
8865 { PREFIX_TABLE (PREFIX_VEX_0F3890) },
8866 { PREFIX_TABLE (PREFIX_VEX_0F3891) },
8867 { PREFIX_TABLE (PREFIX_VEX_0F3892) },
8868 { PREFIX_TABLE (PREFIX_VEX_0F3893) },
592d1631
L
8869 { Bad_Opcode },
8870 { Bad_Opcode },
592a252b
L
8871 { PREFIX_TABLE (PREFIX_VEX_0F3896) },
8872 { PREFIX_TABLE (PREFIX_VEX_0F3897) },
c0f3af97 8873 /* 98 */
592a252b
L
8874 { PREFIX_TABLE (PREFIX_VEX_0F3898) },
8875 { PREFIX_TABLE (PREFIX_VEX_0F3899) },
8876 { PREFIX_TABLE (PREFIX_VEX_0F389A) },
8877 { PREFIX_TABLE (PREFIX_VEX_0F389B) },
8878 { PREFIX_TABLE (PREFIX_VEX_0F389C) },
8879 { PREFIX_TABLE (PREFIX_VEX_0F389D) },
8880 { PREFIX_TABLE (PREFIX_VEX_0F389E) },
8881 { PREFIX_TABLE (PREFIX_VEX_0F389F) },
c0f3af97 8882 /* a0 */
592d1631
L
8883 { Bad_Opcode },
8884 { Bad_Opcode },
8885 { Bad_Opcode },
8886 { Bad_Opcode },
8887 { Bad_Opcode },
8888 { Bad_Opcode },
592a252b
L
8889 { PREFIX_TABLE (PREFIX_VEX_0F38A6) },
8890 { PREFIX_TABLE (PREFIX_VEX_0F38A7) },
c0f3af97 8891 /* a8 */
592a252b
L
8892 { PREFIX_TABLE (PREFIX_VEX_0F38A8) },
8893 { PREFIX_TABLE (PREFIX_VEX_0F38A9) },
8894 { PREFIX_TABLE (PREFIX_VEX_0F38AA) },
8895 { PREFIX_TABLE (PREFIX_VEX_0F38AB) },
8896 { PREFIX_TABLE (PREFIX_VEX_0F38AC) },
8897 { PREFIX_TABLE (PREFIX_VEX_0F38AD) },
8898 { PREFIX_TABLE (PREFIX_VEX_0F38AE) },
8899 { PREFIX_TABLE (PREFIX_VEX_0F38AF) },
c0f3af97 8900 /* b0 */
592d1631
L
8901 { Bad_Opcode },
8902 { Bad_Opcode },
8903 { Bad_Opcode },
8904 { Bad_Opcode },
8905 { Bad_Opcode },
8906 { Bad_Opcode },
592a252b
L
8907 { PREFIX_TABLE (PREFIX_VEX_0F38B6) },
8908 { PREFIX_TABLE (PREFIX_VEX_0F38B7) },
c0f3af97 8909 /* b8 */
592a252b
L
8910 { PREFIX_TABLE (PREFIX_VEX_0F38B8) },
8911 { PREFIX_TABLE (PREFIX_VEX_0F38B9) },
8912 { PREFIX_TABLE (PREFIX_VEX_0F38BA) },
8913 { PREFIX_TABLE (PREFIX_VEX_0F38BB) },
8914 { PREFIX_TABLE (PREFIX_VEX_0F38BC) },
8915 { PREFIX_TABLE (PREFIX_VEX_0F38BD) },
8916 { PREFIX_TABLE (PREFIX_VEX_0F38BE) },
8917 { PREFIX_TABLE (PREFIX_VEX_0F38BF) },
c0f3af97 8918 /* c0 */
592d1631
L
8919 { Bad_Opcode },
8920 { Bad_Opcode },
8921 { Bad_Opcode },
8922 { Bad_Opcode },
8923 { Bad_Opcode },
8924 { Bad_Opcode },
8925 { Bad_Opcode },
8926 { Bad_Opcode },
c0f3af97 8927 /* c8 */
592d1631
L
8928 { Bad_Opcode },
8929 { Bad_Opcode },
8930 { Bad_Opcode },
8931 { Bad_Opcode },
8932 { Bad_Opcode },
8933 { Bad_Opcode },
8934 { Bad_Opcode },
48521003 8935 { PREFIX_TABLE (PREFIX_VEX_0F38CF) },
c0f3af97 8936 /* d0 */
592d1631
L
8937 { Bad_Opcode },
8938 { Bad_Opcode },
8939 { Bad_Opcode },
8940 { Bad_Opcode },
8941 { Bad_Opcode },
8942 { Bad_Opcode },
8943 { Bad_Opcode },
8944 { Bad_Opcode },
c0f3af97 8945 /* d8 */
592d1631
L
8946 { Bad_Opcode },
8947 { Bad_Opcode },
8948 { Bad_Opcode },
592a252b
L
8949 { PREFIX_TABLE (PREFIX_VEX_0F38DB) },
8950 { PREFIX_TABLE (PREFIX_VEX_0F38DC) },
8951 { PREFIX_TABLE (PREFIX_VEX_0F38DD) },
8952 { PREFIX_TABLE (PREFIX_VEX_0F38DE) },
8953 { PREFIX_TABLE (PREFIX_VEX_0F38DF) },
c0f3af97 8954 /* e0 */
592d1631
L
8955 { Bad_Opcode },
8956 { Bad_Opcode },
8957 { Bad_Opcode },
8958 { Bad_Opcode },
8959 { Bad_Opcode },
8960 { Bad_Opcode },
8961 { Bad_Opcode },
8962 { Bad_Opcode },
c0f3af97 8963 /* e8 */
592d1631
L
8964 { Bad_Opcode },
8965 { Bad_Opcode },
8966 { Bad_Opcode },
8967 { Bad_Opcode },
8968 { Bad_Opcode },
8969 { Bad_Opcode },
8970 { Bad_Opcode },
8971 { Bad_Opcode },
c0f3af97 8972 /* f0 */
592d1631
L
8973 { Bad_Opcode },
8974 { Bad_Opcode },
f12dc422
L
8975 { PREFIX_TABLE (PREFIX_VEX_0F38F2) },
8976 { REG_TABLE (REG_VEX_0F38F3) },
592d1631 8977 { Bad_Opcode },
6c30d220
L
8978 { PREFIX_TABLE (PREFIX_VEX_0F38F5) },
8979 { PREFIX_TABLE (PREFIX_VEX_0F38F6) },
f12dc422 8980 { PREFIX_TABLE (PREFIX_VEX_0F38F7) },
c0f3af97 8981 /* f8 */
592d1631
L
8982 { Bad_Opcode },
8983 { Bad_Opcode },
8984 { Bad_Opcode },
8985 { Bad_Opcode },
8986 { Bad_Opcode },
8987 { Bad_Opcode },
8988 { Bad_Opcode },
8989 { Bad_Opcode },
c0f3af97
L
8990 },
8991 /* VEX_0F3A */
8992 {
8993 /* 00 */
6c30d220
L
8994 { PREFIX_TABLE (PREFIX_VEX_0F3A00) },
8995 { PREFIX_TABLE (PREFIX_VEX_0F3A01) },
8996 { PREFIX_TABLE (PREFIX_VEX_0F3A02) },
592d1631 8997 { Bad_Opcode },
592a252b
L
8998 { PREFIX_TABLE (PREFIX_VEX_0F3A04) },
8999 { PREFIX_TABLE (PREFIX_VEX_0F3A05) },
9000 { PREFIX_TABLE (PREFIX_VEX_0F3A06) },
592d1631 9001 { Bad_Opcode },
c0f3af97 9002 /* 08 */
592a252b
L
9003 { PREFIX_TABLE (PREFIX_VEX_0F3A08) },
9004 { PREFIX_TABLE (PREFIX_VEX_0F3A09) },
9005 { PREFIX_TABLE (PREFIX_VEX_0F3A0A) },
9006 { PREFIX_TABLE (PREFIX_VEX_0F3A0B) },
9007 { PREFIX_TABLE (PREFIX_VEX_0F3A0C) },
9008 { PREFIX_TABLE (PREFIX_VEX_0F3A0D) },
9009 { PREFIX_TABLE (PREFIX_VEX_0F3A0E) },
9010 { PREFIX_TABLE (PREFIX_VEX_0F3A0F) },
c0f3af97 9011 /* 10 */
592d1631
L
9012 { Bad_Opcode },
9013 { Bad_Opcode },
9014 { Bad_Opcode },
9015 { Bad_Opcode },
592a252b
L
9016 { PREFIX_TABLE (PREFIX_VEX_0F3A14) },
9017 { PREFIX_TABLE (PREFIX_VEX_0F3A15) },
9018 { PREFIX_TABLE (PREFIX_VEX_0F3A16) },
9019 { PREFIX_TABLE (PREFIX_VEX_0F3A17) },
c0f3af97 9020 /* 18 */
592a252b
L
9021 { PREFIX_TABLE (PREFIX_VEX_0F3A18) },
9022 { PREFIX_TABLE (PREFIX_VEX_0F3A19) },
592d1631
L
9023 { Bad_Opcode },
9024 { Bad_Opcode },
9025 { Bad_Opcode },
592a252b 9026 { PREFIX_TABLE (PREFIX_VEX_0F3A1D) },
592d1631
L
9027 { Bad_Opcode },
9028 { Bad_Opcode },
c0f3af97 9029 /* 20 */
592a252b
L
9030 { PREFIX_TABLE (PREFIX_VEX_0F3A20) },
9031 { PREFIX_TABLE (PREFIX_VEX_0F3A21) },
9032 { PREFIX_TABLE (PREFIX_VEX_0F3A22) },
592d1631
L
9033 { Bad_Opcode },
9034 { Bad_Opcode },
9035 { Bad_Opcode },
9036 { Bad_Opcode },
9037 { Bad_Opcode },
c0f3af97 9038 /* 28 */
592d1631
L
9039 { Bad_Opcode },
9040 { Bad_Opcode },
9041 { Bad_Opcode },
9042 { Bad_Opcode },
9043 { Bad_Opcode },
9044 { Bad_Opcode },
9045 { Bad_Opcode },
9046 { Bad_Opcode },
c0f3af97 9047 /* 30 */
43234a1e 9048 { PREFIX_TABLE (PREFIX_VEX_0F3A30) },
1ba585e8 9049 { PREFIX_TABLE (PREFIX_VEX_0F3A31) },
43234a1e 9050 { PREFIX_TABLE (PREFIX_VEX_0F3A32) },
1ba585e8 9051 { PREFIX_TABLE (PREFIX_VEX_0F3A33) },
592d1631
L
9052 { Bad_Opcode },
9053 { Bad_Opcode },
9054 { Bad_Opcode },
9055 { Bad_Opcode },
c0f3af97 9056 /* 38 */
6c30d220
L
9057 { PREFIX_TABLE (PREFIX_VEX_0F3A38) },
9058 { PREFIX_TABLE (PREFIX_VEX_0F3A39) },
592d1631
L
9059 { Bad_Opcode },
9060 { Bad_Opcode },
9061 { Bad_Opcode },
9062 { Bad_Opcode },
9063 { Bad_Opcode },
9064 { Bad_Opcode },
c0f3af97 9065 /* 40 */
592a252b
L
9066 { PREFIX_TABLE (PREFIX_VEX_0F3A40) },
9067 { PREFIX_TABLE (PREFIX_VEX_0F3A41) },
9068 { PREFIX_TABLE (PREFIX_VEX_0F3A42) },
592d1631 9069 { Bad_Opcode },
592a252b 9070 { PREFIX_TABLE (PREFIX_VEX_0F3A44) },
592d1631 9071 { Bad_Opcode },
6c30d220 9072 { PREFIX_TABLE (PREFIX_VEX_0F3A46) },
592d1631 9073 { Bad_Opcode },
c0f3af97 9074 /* 48 */
592a252b
L
9075 { PREFIX_TABLE (PREFIX_VEX_0F3A48) },
9076 { PREFIX_TABLE (PREFIX_VEX_0F3A49) },
9077 { PREFIX_TABLE (PREFIX_VEX_0F3A4A) },
9078 { PREFIX_TABLE (PREFIX_VEX_0F3A4B) },
9079 { PREFIX_TABLE (PREFIX_VEX_0F3A4C) },
592d1631
L
9080 { Bad_Opcode },
9081 { Bad_Opcode },
9082 { Bad_Opcode },
c0f3af97 9083 /* 50 */
592d1631
L
9084 { Bad_Opcode },
9085 { Bad_Opcode },
9086 { Bad_Opcode },
9087 { Bad_Opcode },
9088 { Bad_Opcode },
9089 { Bad_Opcode },
9090 { Bad_Opcode },
9091 { Bad_Opcode },
c0f3af97 9092 /* 58 */
592d1631
L
9093 { Bad_Opcode },
9094 { Bad_Opcode },
9095 { Bad_Opcode },
9096 { Bad_Opcode },
592a252b
L
9097 { PREFIX_TABLE (PREFIX_VEX_0F3A5C) },
9098 { PREFIX_TABLE (PREFIX_VEX_0F3A5D) },
9099 { PREFIX_TABLE (PREFIX_VEX_0F3A5E) },
9100 { PREFIX_TABLE (PREFIX_VEX_0F3A5F) },
c0f3af97 9101 /* 60 */
592a252b
L
9102 { PREFIX_TABLE (PREFIX_VEX_0F3A60) },
9103 { PREFIX_TABLE (PREFIX_VEX_0F3A61) },
9104 { PREFIX_TABLE (PREFIX_VEX_0F3A62) },
9105 { PREFIX_TABLE (PREFIX_VEX_0F3A63) },
592d1631
L
9106 { Bad_Opcode },
9107 { Bad_Opcode },
9108 { Bad_Opcode },
9109 { Bad_Opcode },
c0f3af97 9110 /* 68 */
592a252b
L
9111 { PREFIX_TABLE (PREFIX_VEX_0F3A68) },
9112 { PREFIX_TABLE (PREFIX_VEX_0F3A69) },
9113 { PREFIX_TABLE (PREFIX_VEX_0F3A6A) },
9114 { PREFIX_TABLE (PREFIX_VEX_0F3A6B) },
9115 { PREFIX_TABLE (PREFIX_VEX_0F3A6C) },
9116 { PREFIX_TABLE (PREFIX_VEX_0F3A6D) },
9117 { PREFIX_TABLE (PREFIX_VEX_0F3A6E) },
9118 { PREFIX_TABLE (PREFIX_VEX_0F3A6F) },
c0f3af97 9119 /* 70 */
592d1631
L
9120 { Bad_Opcode },
9121 { Bad_Opcode },
9122 { Bad_Opcode },
9123 { Bad_Opcode },
9124 { Bad_Opcode },
9125 { Bad_Opcode },
9126 { Bad_Opcode },
9127 { Bad_Opcode },
c0f3af97 9128 /* 78 */
592a252b
L
9129 { PREFIX_TABLE (PREFIX_VEX_0F3A78) },
9130 { PREFIX_TABLE (PREFIX_VEX_0F3A79) },
9131 { PREFIX_TABLE (PREFIX_VEX_0F3A7A) },
9132 { PREFIX_TABLE (PREFIX_VEX_0F3A7B) },
9133 { PREFIX_TABLE (PREFIX_VEX_0F3A7C) },
9134 { PREFIX_TABLE (PREFIX_VEX_0F3A7D) },
9135 { PREFIX_TABLE (PREFIX_VEX_0F3A7E) },
9136 { PREFIX_TABLE (PREFIX_VEX_0F3A7F) },
c0f3af97 9137 /* 80 */
592d1631
L
9138 { Bad_Opcode },
9139 { Bad_Opcode },
9140 { Bad_Opcode },
9141 { Bad_Opcode },
9142 { Bad_Opcode },
9143 { Bad_Opcode },
9144 { Bad_Opcode },
9145 { Bad_Opcode },
c0f3af97 9146 /* 88 */
592d1631
L
9147 { Bad_Opcode },
9148 { Bad_Opcode },
9149 { Bad_Opcode },
9150 { Bad_Opcode },
9151 { Bad_Opcode },
9152 { Bad_Opcode },
9153 { Bad_Opcode },
9154 { Bad_Opcode },
c0f3af97 9155 /* 90 */
592d1631
L
9156 { Bad_Opcode },
9157 { Bad_Opcode },
9158 { Bad_Opcode },
9159 { Bad_Opcode },
9160 { Bad_Opcode },
9161 { Bad_Opcode },
9162 { Bad_Opcode },
9163 { Bad_Opcode },
c0f3af97 9164 /* 98 */
592d1631
L
9165 { Bad_Opcode },
9166 { Bad_Opcode },
9167 { Bad_Opcode },
9168 { Bad_Opcode },
9169 { Bad_Opcode },
9170 { Bad_Opcode },
9171 { Bad_Opcode },
9172 { Bad_Opcode },
c0f3af97 9173 /* a0 */
592d1631
L
9174 { Bad_Opcode },
9175 { Bad_Opcode },
9176 { Bad_Opcode },
9177 { Bad_Opcode },
9178 { Bad_Opcode },
9179 { Bad_Opcode },
9180 { Bad_Opcode },
9181 { Bad_Opcode },
c0f3af97 9182 /* a8 */
592d1631
L
9183 { Bad_Opcode },
9184 { Bad_Opcode },
9185 { Bad_Opcode },
9186 { Bad_Opcode },
9187 { Bad_Opcode },
9188 { Bad_Opcode },
9189 { Bad_Opcode },
9190 { Bad_Opcode },
c0f3af97 9191 /* b0 */
592d1631
L
9192 { Bad_Opcode },
9193 { Bad_Opcode },
9194 { Bad_Opcode },
9195 { Bad_Opcode },
9196 { Bad_Opcode },
9197 { Bad_Opcode },
9198 { Bad_Opcode },
9199 { Bad_Opcode },
c0f3af97 9200 /* b8 */
592d1631
L
9201 { Bad_Opcode },
9202 { Bad_Opcode },
9203 { Bad_Opcode },
9204 { Bad_Opcode },
9205 { Bad_Opcode },
9206 { Bad_Opcode },
9207 { Bad_Opcode },
9208 { Bad_Opcode },
c0f3af97 9209 /* c0 */
592d1631
L
9210 { Bad_Opcode },
9211 { Bad_Opcode },
9212 { Bad_Opcode },
9213 { Bad_Opcode },
9214 { Bad_Opcode },
9215 { Bad_Opcode },
9216 { Bad_Opcode },
9217 { Bad_Opcode },
c0f3af97 9218 /* c8 */
592d1631
L
9219 { Bad_Opcode },
9220 { Bad_Opcode },
9221 { Bad_Opcode },
9222 { Bad_Opcode },
9223 { Bad_Opcode },
9224 { Bad_Opcode },
48521003
IT
9225 { PREFIX_TABLE(PREFIX_VEX_0F3ACE) },
9226 { PREFIX_TABLE(PREFIX_VEX_0F3ACF) },
c0f3af97 9227 /* d0 */
592d1631
L
9228 { Bad_Opcode },
9229 { Bad_Opcode },
9230 { Bad_Opcode },
9231 { Bad_Opcode },
9232 { Bad_Opcode },
9233 { Bad_Opcode },
9234 { Bad_Opcode },
9235 { Bad_Opcode },
c0f3af97 9236 /* d8 */
592d1631
L
9237 { Bad_Opcode },
9238 { Bad_Opcode },
9239 { Bad_Opcode },
9240 { Bad_Opcode },
9241 { Bad_Opcode },
9242 { Bad_Opcode },
9243 { Bad_Opcode },
592a252b 9244 { PREFIX_TABLE (PREFIX_VEX_0F3ADF) },
c0f3af97 9245 /* e0 */
592d1631
L
9246 { Bad_Opcode },
9247 { Bad_Opcode },
9248 { Bad_Opcode },
9249 { Bad_Opcode },
9250 { Bad_Opcode },
9251 { Bad_Opcode },
9252 { Bad_Opcode },
9253 { Bad_Opcode },
c0f3af97 9254 /* e8 */
592d1631
L
9255 { Bad_Opcode },
9256 { Bad_Opcode },
9257 { Bad_Opcode },
9258 { Bad_Opcode },
9259 { Bad_Opcode },
9260 { Bad_Opcode },
9261 { Bad_Opcode },
9262 { Bad_Opcode },
c0f3af97 9263 /* f0 */
6c30d220 9264 { PREFIX_TABLE (PREFIX_VEX_0F3AF0) },
592d1631
L
9265 { Bad_Opcode },
9266 { Bad_Opcode },
9267 { Bad_Opcode },
9268 { Bad_Opcode },
9269 { Bad_Opcode },
9270 { Bad_Opcode },
9271 { Bad_Opcode },
c0f3af97 9272 /* f8 */
592d1631
L
9273 { Bad_Opcode },
9274 { Bad_Opcode },
9275 { Bad_Opcode },
9276 { Bad_Opcode },
9277 { Bad_Opcode },
9278 { Bad_Opcode },
9279 { Bad_Opcode },
9280 { Bad_Opcode },
c0f3af97
L
9281 },
9282};
9283
43234a1e
L
9284#define NEED_OPCODE_TABLE
9285#include "i386-dis-evex.h"
9286#undef NEED_OPCODE_TABLE
c0f3af97 9287static const struct dis386 vex_len_table[][2] = {
592a252b 9288 /* VEX_LEN_0F12_P_0_M_0 */
c0f3af97 9289 {
ec6f095a 9290 { "vmovlps", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9291 },
9292
592a252b 9293 /* VEX_LEN_0F12_P_0_M_1 */
c0f3af97 9294 {
ec6f095a 9295 { "vmovhlps", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9296 },
9297
592a252b 9298 /* VEX_LEN_0F12_P_2 */
c0f3af97 9299 {
ec6f095a 9300 { "vmovlpd", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9301 },
9302
592a252b 9303 /* VEX_LEN_0F13_M_0 */
c0f3af97 9304 {
ec6f095a 9305 { "vmovlpX", { EXq, XM }, 0 },
c0f3af97
L
9306 },
9307
592a252b 9308 /* VEX_LEN_0F16_P_0_M_0 */
c0f3af97 9309 {
ec6f095a 9310 { "vmovhps", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9311 },
9312
592a252b 9313 /* VEX_LEN_0F16_P_0_M_1 */
c0f3af97 9314 {
ec6f095a 9315 { "vmovlhps", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9316 },
9317
592a252b 9318 /* VEX_LEN_0F16_P_2 */
c0f3af97 9319 {
ec6f095a 9320 { "vmovhpd", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9321 },
9322
592a252b 9323 /* VEX_LEN_0F17_M_0 */
c0f3af97 9324 {
ec6f095a 9325 { "vmovhpX", { EXq, XM }, 0 },
c0f3af97
L
9326 },
9327
592a252b 9328 /* VEX_LEN_0F2A_P_1 */
c0f3af97 9329 {
bf890a93
IT
9330 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev }, 0 },
9331 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev }, 0 },
c0f3af97
L
9332 },
9333
592a252b 9334 /* VEX_LEN_0F2A_P_3 */
c0f3af97 9335 {
bf890a93
IT
9336 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev }, 0 },
9337 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev }, 0 },
c0f3af97
L
9338 },
9339
592a252b 9340 /* VEX_LEN_0F2C_P_1 */
c0f3af97 9341 {
9646c87b
JB
9342 { "vcvttss2si", { Gv, EXdScalar }, 0 },
9343 { "vcvttss2si", { Gv, EXdScalar }, 0 },
c0f3af97
L
9344 },
9345
592a252b 9346 /* VEX_LEN_0F2C_P_3 */
c0f3af97 9347 {
9646c87b
JB
9348 { "vcvttsd2si", { Gv, EXqScalar }, 0 },
9349 { "vcvttsd2si", { Gv, EXqScalar }, 0 },
c0f3af97
L
9350 },
9351
592a252b 9352 /* VEX_LEN_0F2D_P_1 */
c0f3af97 9353 {
9646c87b
JB
9354 { "vcvtss2si", { Gv, EXdScalar }, 0 },
9355 { "vcvtss2si", { Gv, EXdScalar }, 0 },
c0f3af97
L
9356 },
9357
592a252b 9358 /* VEX_LEN_0F2D_P_3 */
c0f3af97 9359 {
9646c87b
JB
9360 { "vcvtsd2si", { Gv, EXqScalar }, 0 },
9361 { "vcvtsd2si", { Gv, EXqScalar }, 0 },
c0f3af97
L
9362 },
9363
43234a1e
L
9364 /* VEX_LEN_0F41_P_0 */
9365 {
9366 { Bad_Opcode },
9367 { VEX_W_TABLE (VEX_W_0F41_P_0_LEN_1) },
9368 },
1ba585e8
IT
9369 /* VEX_LEN_0F41_P_2 */
9370 {
9371 { Bad_Opcode },
9372 { VEX_W_TABLE (VEX_W_0F41_P_2_LEN_1) },
9373 },
43234a1e
L
9374 /* VEX_LEN_0F42_P_0 */
9375 {
9376 { Bad_Opcode },
9377 { VEX_W_TABLE (VEX_W_0F42_P_0_LEN_1) },
9378 },
1ba585e8
IT
9379 /* VEX_LEN_0F42_P_2 */
9380 {
9381 { Bad_Opcode },
9382 { VEX_W_TABLE (VEX_W_0F42_P_2_LEN_1) },
9383 },
43234a1e
L
9384 /* VEX_LEN_0F44_P_0 */
9385 {
9386 { VEX_W_TABLE (VEX_W_0F44_P_0_LEN_0) },
9387 },
1ba585e8
IT
9388 /* VEX_LEN_0F44_P_2 */
9389 {
9390 { VEX_W_TABLE (VEX_W_0F44_P_2_LEN_0) },
9391 },
43234a1e
L
9392 /* VEX_LEN_0F45_P_0 */
9393 {
9394 { Bad_Opcode },
9395 { VEX_W_TABLE (VEX_W_0F45_P_0_LEN_1) },
9396 },
1ba585e8
IT
9397 /* VEX_LEN_0F45_P_2 */
9398 {
9399 { Bad_Opcode },
9400 { VEX_W_TABLE (VEX_W_0F45_P_2_LEN_1) },
9401 },
43234a1e
L
9402 /* VEX_LEN_0F46_P_0 */
9403 {
9404 { Bad_Opcode },
9405 { VEX_W_TABLE (VEX_W_0F46_P_0_LEN_1) },
9406 },
1ba585e8
IT
9407 /* VEX_LEN_0F46_P_2 */
9408 {
9409 { Bad_Opcode },
9410 { VEX_W_TABLE (VEX_W_0F46_P_2_LEN_1) },
9411 },
43234a1e
L
9412 /* VEX_LEN_0F47_P_0 */
9413 {
9414 { Bad_Opcode },
9415 { VEX_W_TABLE (VEX_W_0F47_P_0_LEN_1) },
9416 },
1ba585e8
IT
9417 /* VEX_LEN_0F47_P_2 */
9418 {
9419 { Bad_Opcode },
9420 { VEX_W_TABLE (VEX_W_0F47_P_2_LEN_1) },
9421 },
9422 /* VEX_LEN_0F4A_P_0 */
9423 {
9424 { Bad_Opcode },
9425 { VEX_W_TABLE (VEX_W_0F4A_P_0_LEN_1) },
9426 },
9427 /* VEX_LEN_0F4A_P_2 */
9428 {
9429 { Bad_Opcode },
9430 { VEX_W_TABLE (VEX_W_0F4A_P_2_LEN_1) },
9431 },
9432 /* VEX_LEN_0F4B_P_0 */
9433 {
9434 { Bad_Opcode },
9435 { VEX_W_TABLE (VEX_W_0F4B_P_0_LEN_1) },
9436 },
43234a1e
L
9437 /* VEX_LEN_0F4B_P_2 */
9438 {
9439 { Bad_Opcode },
9440 { VEX_W_TABLE (VEX_W_0F4B_P_2_LEN_1) },
9441 },
9442
ec6f095a 9443 /* VEX_LEN_0F6E_P_2 */
c0f3af97 9444 {
ec6f095a 9445 { "vmovK", { XMScalar, Edq }, 0 },
c0f3af97
L
9446 },
9447
ec6f095a 9448 /* VEX_LEN_0F77_P_1 */
c0f3af97 9449 {
ec6f095a
L
9450 { "vzeroupper", { XX }, 0 },
9451 { "vzeroall", { XX }, 0 },
c0f3af97
L
9452 },
9453
ec6f095a 9454 /* VEX_LEN_0F7E_P_1 */
c0f3af97 9455 {
ec6f095a 9456 { "vmovq", { XMScalar, EXqScalar }, 0 },
c0f3af97
L
9457 },
9458
ec6f095a 9459 /* VEX_LEN_0F7E_P_2 */
c0f3af97 9460 {
ec6f095a 9461 { "vmovK", { Edq, XMScalar }, 0 },
c0f3af97
L
9462 },
9463
ec6f095a 9464 /* VEX_LEN_0F90_P_0 */
c0f3af97 9465 {
ec6f095a 9466 { VEX_W_TABLE (VEX_W_0F90_P_0_LEN_0) },
c0f3af97
L
9467 },
9468
ec6f095a 9469 /* VEX_LEN_0F90_P_2 */
c0f3af97 9470 {
ec6f095a 9471 { VEX_W_TABLE (VEX_W_0F90_P_2_LEN_0) },
c0f3af97
L
9472 },
9473
ec6f095a 9474 /* VEX_LEN_0F91_P_0 */
c0f3af97 9475 {
ec6f095a 9476 { VEX_W_TABLE (VEX_W_0F91_P_0_LEN_0) },
c0f3af97
L
9477 },
9478
ec6f095a 9479 /* VEX_LEN_0F91_P_2 */
c0f3af97 9480 {
ec6f095a 9481 { VEX_W_TABLE (VEX_W_0F91_P_2_LEN_0) },
c0f3af97
L
9482 },
9483
ec6f095a 9484 /* VEX_LEN_0F92_P_0 */
c0f3af97 9485 {
ec6f095a 9486 { VEX_W_TABLE (VEX_W_0F92_P_0_LEN_0) },
c0f3af97
L
9487 },
9488
ec6f095a 9489 /* VEX_LEN_0F92_P_2 */
c0f3af97 9490 {
ec6f095a 9491 { VEX_W_TABLE (VEX_W_0F92_P_2_LEN_0) },
c0f3af97
L
9492 },
9493
ec6f095a 9494 /* VEX_LEN_0F92_P_3 */
c0f3af97 9495 {
ec6f095a 9496 { VEX_W_TABLE (VEX_W_0F92_P_3_LEN_0) },
c0f3af97
L
9497 },
9498
ec6f095a 9499 /* VEX_LEN_0F93_P_0 */
c0f3af97 9500 {
ec6f095a 9501 { VEX_W_TABLE (VEX_W_0F93_P_0_LEN_0) },
c0f3af97
L
9502 },
9503
ec6f095a 9504 /* VEX_LEN_0F93_P_2 */
c0f3af97 9505 {
ec6f095a 9506 { VEX_W_TABLE (VEX_W_0F93_P_2_LEN_0) },
c0f3af97
L
9507 },
9508
ec6f095a 9509 /* VEX_LEN_0F93_P_3 */
c0f3af97 9510 {
ec6f095a 9511 { VEX_W_TABLE (VEX_W_0F93_P_3_LEN_0) },
c0f3af97
L
9512 },
9513
ec6f095a 9514 /* VEX_LEN_0F98_P_0 */
43234a1e
L
9515 {
9516 { VEX_W_TABLE (VEX_W_0F98_P_0_LEN_0) },
9517 },
9518
1ba585e8
IT
9519 /* VEX_LEN_0F98_P_2 */
9520 {
9521 { VEX_W_TABLE (VEX_W_0F98_P_2_LEN_0) },
9522 },
9523
9524 /* VEX_LEN_0F99_P_0 */
9525 {
9526 { VEX_W_TABLE (VEX_W_0F99_P_0_LEN_0) },
9527 },
9528
9529 /* VEX_LEN_0F99_P_2 */
9530 {
9531 { VEX_W_TABLE (VEX_W_0F99_P_2_LEN_0) },
9532 },
9533
6c30d220 9534 /* VEX_LEN_0FAE_R_2_M_0 */
c0f3af97 9535 {
ec6f095a 9536 { "vldmxcsr", { Md }, 0 },
c0f3af97
L
9537 },
9538
6c30d220 9539 /* VEX_LEN_0FAE_R_3_M_0 */
c0f3af97 9540 {
ec6f095a 9541 { "vstmxcsr", { Md }, 0 },
c0f3af97
L
9542 },
9543
6c30d220 9544 /* VEX_LEN_0FC4_P_2 */
c0f3af97 9545 {
6c30d220 9546 { VEX_W_TABLE (VEX_W_0FC4_P_2) },
c0f3af97
L
9547 },
9548
6c30d220 9549 /* VEX_LEN_0FC5_P_2 */
c0f3af97 9550 {
6c30d220 9551 { VEX_W_TABLE (VEX_W_0FC5_P_2) },
c0f3af97
L
9552 },
9553
6c30d220 9554 /* VEX_LEN_0FD6_P_2 */
c0f3af97 9555 {
ec6f095a 9556 { "vmovq", { EXqScalarS, XMScalar }, 0 },
c0f3af97
L
9557 },
9558
6c30d220 9559 /* VEX_LEN_0FF7_P_2 */
c0f3af97 9560 {
ec6f095a 9561 { "vmaskmovdqu", { XM, XS }, 0 },
c0f3af97
L
9562 },
9563
6c30d220 9564 /* VEX_LEN_0F3816_P_2 */
c0f3af97 9565 {
6c30d220
L
9566 { Bad_Opcode },
9567 { VEX_W_TABLE (VEX_W_0F3816_P_2) },
c0f3af97
L
9568 },
9569
6c30d220 9570 /* VEX_LEN_0F3819_P_2 */
c0f3af97 9571 {
6c30d220
L
9572 { Bad_Opcode },
9573 { VEX_W_TABLE (VEX_W_0F3819_P_2) },
c0f3af97
L
9574 },
9575
6c30d220 9576 /* VEX_LEN_0F381A_P_2_M_0 */
c0f3af97 9577 {
6c30d220
L
9578 { Bad_Opcode },
9579 { VEX_W_TABLE (VEX_W_0F381A_P_2_M_0) },
c0f3af97
L
9580 },
9581
6c30d220 9582 /* VEX_LEN_0F3836_P_2 */
c0f3af97 9583 {
6c30d220
L
9584 { Bad_Opcode },
9585 { VEX_W_TABLE (VEX_W_0F3836_P_2) },
c0f3af97
L
9586 },
9587
592a252b 9588 /* VEX_LEN_0F3841_P_2 */
c0f3af97 9589 {
ec6f095a 9590 { "vphminposuw", { XM, EXx }, 0 },
c0f3af97
L
9591 },
9592
6c30d220
L
9593 /* VEX_LEN_0F385A_P_2_M_0 */
9594 {
9595 { Bad_Opcode },
9596 { VEX_W_TABLE (VEX_W_0F385A_P_2_M_0) },
9597 },
9598
592a252b 9599 /* VEX_LEN_0F38DB_P_2 */
a5ff0eb2 9600 {
ec6f095a 9601 { "vaesimc", { XM, EXx }, 0 },
a5ff0eb2
L
9602 },
9603
f12dc422
L
9604 /* VEX_LEN_0F38F2_P_0 */
9605 {
bf890a93 9606 { "andnS", { Gdq, VexGdq, Edq }, 0 },
f12dc422
L
9607 },
9608
9609 /* VEX_LEN_0F38F3_R_1_P_0 */
9610 {
bf890a93 9611 { "blsrS", { VexGdq, Edq }, 0 },
f12dc422
L
9612 },
9613
9614 /* VEX_LEN_0F38F3_R_2_P_0 */
9615 {
bf890a93 9616 { "blsmskS", { VexGdq, Edq }, 0 },
f12dc422
L
9617 },
9618
9619 /* VEX_LEN_0F38F3_R_3_P_0 */
9620 {
bf890a93 9621 { "blsiS", { VexGdq, Edq }, 0 },
f12dc422
L
9622 },
9623
6c30d220
L
9624 /* VEX_LEN_0F38F5_P_0 */
9625 {
bf890a93 9626 { "bzhiS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
9627 },
9628
9629 /* VEX_LEN_0F38F5_P_1 */
9630 {
bf890a93 9631 { "pextS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
9632 },
9633
9634 /* VEX_LEN_0F38F5_P_3 */
9635 {
bf890a93 9636 { "pdepS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
9637 },
9638
9639 /* VEX_LEN_0F38F6_P_3 */
9640 {
bf890a93 9641 { "mulxS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
9642 },
9643
f12dc422
L
9644 /* VEX_LEN_0F38F7_P_0 */
9645 {
bf890a93 9646 { "bextrS", { Gdq, Edq, VexGdq }, 0 },
f12dc422
L
9647 },
9648
6c30d220
L
9649 /* VEX_LEN_0F38F7_P_1 */
9650 {
bf890a93 9651 { "sarxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
9652 },
9653
9654 /* VEX_LEN_0F38F7_P_2 */
9655 {
bf890a93 9656 { "shlxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
9657 },
9658
9659 /* VEX_LEN_0F38F7_P_3 */
9660 {
bf890a93 9661 { "shrxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
9662 },
9663
9664 /* VEX_LEN_0F3A00_P_2 */
9665 {
9666 { Bad_Opcode },
9667 { VEX_W_TABLE (VEX_W_0F3A00_P_2) },
9668 },
9669
9670 /* VEX_LEN_0F3A01_P_2 */
9671 {
9672 { Bad_Opcode },
9673 { VEX_W_TABLE (VEX_W_0F3A01_P_2) },
9674 },
9675
592a252b 9676 /* VEX_LEN_0F3A06_P_2 */
c0f3af97 9677 {
592d1631 9678 { Bad_Opcode },
592a252b 9679 { VEX_W_TABLE (VEX_W_0F3A06_P_2) },
c0f3af97
L
9680 },
9681
592a252b 9682 /* VEX_LEN_0F3A14_P_2 */
c0f3af97 9683 {
592a252b 9684 { VEX_W_TABLE (VEX_W_0F3A14_P_2) },
c0f3af97
L
9685 },
9686
592a252b 9687 /* VEX_LEN_0F3A15_P_2 */
c0f3af97 9688 {
592a252b 9689 { VEX_W_TABLE (VEX_W_0F3A15_P_2) },
c0f3af97
L
9690 },
9691
592a252b 9692 /* VEX_LEN_0F3A16_P_2 */
c0f3af97 9693 {
bf890a93 9694 { "vpextrK", { Edq, XM, Ib }, 0 },
c0f3af97
L
9695 },
9696
592a252b 9697 /* VEX_LEN_0F3A17_P_2 */
c0f3af97 9698 {
bf890a93 9699 { "vextractps", { Edqd, XM, Ib }, 0 },
c0f3af97
L
9700 },
9701
592a252b 9702 /* VEX_LEN_0F3A18_P_2 */
c0f3af97 9703 {
592d1631 9704 { Bad_Opcode },
592a252b 9705 { VEX_W_TABLE (VEX_W_0F3A18_P_2) },
c0f3af97
L
9706 },
9707
592a252b 9708 /* VEX_LEN_0F3A19_P_2 */
c0f3af97 9709 {
592d1631 9710 { Bad_Opcode },
592a252b 9711 { VEX_W_TABLE (VEX_W_0F3A19_P_2) },
c0f3af97
L
9712 },
9713
592a252b 9714 /* VEX_LEN_0F3A20_P_2 */
c0f3af97 9715 {
592a252b 9716 { VEX_W_TABLE (VEX_W_0F3A20_P_2) },
c0f3af97
L
9717 },
9718
592a252b 9719 /* VEX_LEN_0F3A21_P_2 */
c0f3af97 9720 {
ec6f095a 9721 { "vinsertps", { XM, Vex128, EXd, Ib }, 0 },
c0f3af97
L
9722 },
9723
592a252b 9724 /* VEX_LEN_0F3A22_P_2 */
c0f3af97 9725 {
bf890a93 9726 { "vpinsrK", { XM, Vex128, Edq, Ib }, 0 },
c0f3af97
L
9727 },
9728
43234a1e
L
9729 /* VEX_LEN_0F3A30_P_2 */
9730 {
9731 { VEX_W_TABLE (VEX_W_0F3A30_P_2_LEN_0) },
9732 },
9733
1ba585e8
IT
9734 /* VEX_LEN_0F3A31_P_2 */
9735 {
9736 { VEX_W_TABLE (VEX_W_0F3A31_P_2_LEN_0) },
9737 },
9738
43234a1e
L
9739 /* VEX_LEN_0F3A32_P_2 */
9740 {
9741 { VEX_W_TABLE (VEX_W_0F3A32_P_2_LEN_0) },
9742 },
9743
1ba585e8
IT
9744 /* VEX_LEN_0F3A33_P_2 */
9745 {
9746 { VEX_W_TABLE (VEX_W_0F3A33_P_2_LEN_0) },
9747 },
9748
6c30d220 9749 /* VEX_LEN_0F3A38_P_2 */
c0f3af97 9750 {
6c30d220
L
9751 { Bad_Opcode },
9752 { VEX_W_TABLE (VEX_W_0F3A38_P_2) },
c0f3af97
L
9753 },
9754
6c30d220 9755 /* VEX_LEN_0F3A39_P_2 */
c0f3af97 9756 {
6c30d220
L
9757 { Bad_Opcode },
9758 { VEX_W_TABLE (VEX_W_0F3A39_P_2) },
9759 },
9760
9761 /* VEX_LEN_0F3A41_P_2 */
9762 {
ec6f095a 9763 { "vdppd", { XM, Vex128, EXx, Ib }, 0 },
c0f3af97
L
9764 },
9765
6c30d220 9766 /* VEX_LEN_0F3A46_P_2 */
c0f3af97 9767 {
6c30d220
L
9768 { Bad_Opcode },
9769 { VEX_W_TABLE (VEX_W_0F3A46_P_2) },
c0f3af97
L
9770 },
9771
592a252b 9772 /* VEX_LEN_0F3A60_P_2 */
c0f3af97 9773 {
15c7c1d8 9774 { "vpcmpestrm", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, 0 },
c0f3af97
L
9775 },
9776
592a252b 9777 /* VEX_LEN_0F3A61_P_2 */
c0f3af97 9778 {
15c7c1d8 9779 { "vpcmpestri", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, 0 },
c0f3af97
L
9780 },
9781
592a252b 9782 /* VEX_LEN_0F3A62_P_2 */
c0f3af97 9783 {
ec6f095a 9784 { "vpcmpistrm", { XM, EXx, Ib }, 0 },
c0f3af97
L
9785 },
9786
592a252b 9787 /* VEX_LEN_0F3A63_P_2 */
c0f3af97 9788 {
ec6f095a 9789 { "vpcmpistri", { XM, EXx, Ib }, 0 },
c0f3af97
L
9790 },
9791
592a252b 9792 /* VEX_LEN_0F3A6A_P_2 */
922d8de8 9793 {
3a2430e0 9794 { "vfmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 },
922d8de8
DR
9795 },
9796
592a252b 9797 /* VEX_LEN_0F3A6B_P_2 */
922d8de8 9798 {
3a2430e0 9799 { "vfmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 },
922d8de8
DR
9800 },
9801
592a252b 9802 /* VEX_LEN_0F3A6E_P_2 */
922d8de8 9803 {
3a2430e0 9804 { "vfmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 },
922d8de8
DR
9805 },
9806
592a252b 9807 /* VEX_LEN_0F3A6F_P_2 */
922d8de8 9808 {
3a2430e0 9809 { "vfmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 },
922d8de8
DR
9810 },
9811
592a252b 9812 /* VEX_LEN_0F3A7A_P_2 */
922d8de8 9813 {
3a2430e0 9814 { "vfnmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 },
922d8de8
DR
9815 },
9816
592a252b 9817 /* VEX_LEN_0F3A7B_P_2 */
922d8de8 9818 {
3a2430e0 9819 { "vfnmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 },
922d8de8
DR
9820 },
9821
592a252b 9822 /* VEX_LEN_0F3A7E_P_2 */
922d8de8 9823 {
3a2430e0 9824 { "vfnmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 },
922d8de8
DR
9825 },
9826
592a252b 9827 /* VEX_LEN_0F3A7F_P_2 */
922d8de8 9828 {
3a2430e0 9829 { "vfnmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 },
922d8de8
DR
9830 },
9831
592a252b 9832 /* VEX_LEN_0F3ADF_P_2 */
a5ff0eb2 9833 {
ec6f095a 9834 { "vaeskeygenassist", { XM, EXx, Ib }, 0 },
a5ff0eb2 9835 },
4c807e72 9836
6c30d220
L
9837 /* VEX_LEN_0F3AF0_P_3 */
9838 {
bf890a93 9839 { "rorxS", { Gdq, Edq, Ib }, 0 },
6c30d220
L
9840 },
9841
ff688e1f
L
9842 /* VEX_LEN_0FXOP_08_CC */
9843 {
be92cb14 9844 { "vpcomb", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9845 },
9846
9847 /* VEX_LEN_0FXOP_08_CD */
9848 {
be92cb14 9849 { "vpcomw", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9850 },
9851
9852 /* VEX_LEN_0FXOP_08_CE */
9853 {
be92cb14 9854 { "vpcomd", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9855 },
9856
9857 /* VEX_LEN_0FXOP_08_CF */
9858 {
be92cb14 9859 { "vpcomq", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9860 },
9861
9862 /* VEX_LEN_0FXOP_08_EC */
9863 {
be92cb14 9864 { "vpcomub", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9865 },
9866
9867 /* VEX_LEN_0FXOP_08_ED */
9868 {
be92cb14 9869 { "vpcomuw", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9870 },
9871
9872 /* VEX_LEN_0FXOP_08_EE */
9873 {
be92cb14 9874 { "vpcomud", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9875 },
9876
9877 /* VEX_LEN_0FXOP_08_EF */
9878 {
be92cb14 9879 { "vpcomuq", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9880 },
9881
592a252b 9882 /* VEX_LEN_0FXOP_09_80 */
5dd85c99 9883 {
bf890a93
IT
9884 { "vfrczps", { XM, EXxmm }, 0 },
9885 { "vfrczps", { XM, EXymmq }, 0 },
5dd85c99 9886 },
4c807e72 9887
592a252b 9888 /* VEX_LEN_0FXOP_09_81 */
5dd85c99 9889 {
bf890a93
IT
9890 { "vfrczpd", { XM, EXxmm }, 0 },
9891 { "vfrczpd", { XM, EXymmq }, 0 },
5dd85c99 9892 },
331d2d0d
L
9893};
9894
04e2a182
L
9895static const struct dis386 evex_len_table[][3] = {
9896#define NEED_EVEX_LEN_TABLE
9897#include "i386-dis-evex.h"
9898#undef NEED_EVEX_LEN_TABLE
9899};
9900
9e30b8e0 9901static const struct dis386 vex_w_table[][2] = {
43234a1e
L
9902 {
9903 /* VEX_W_0F41_P_0_LEN_1 */
ab4e4ed5
AF
9904 { MOD_TABLE (MOD_VEX_W_0_0F41_P_0_LEN_1) },
9905 { MOD_TABLE (MOD_VEX_W_1_0F41_P_0_LEN_1) },
1ba585e8
IT
9906 },
9907 {
9908 /* VEX_W_0F41_P_2_LEN_1 */
ab4e4ed5
AF
9909 { MOD_TABLE (MOD_VEX_W_0_0F41_P_2_LEN_1) },
9910 { MOD_TABLE (MOD_VEX_W_1_0F41_P_2_LEN_1) }
43234a1e
L
9911 },
9912 {
9913 /* VEX_W_0F42_P_0_LEN_1 */
ab4e4ed5
AF
9914 { MOD_TABLE (MOD_VEX_W_0_0F42_P_0_LEN_1) },
9915 { MOD_TABLE (MOD_VEX_W_1_0F42_P_0_LEN_1) },
1ba585e8
IT
9916 },
9917 {
9918 /* VEX_W_0F42_P_2_LEN_1 */
ab4e4ed5
AF
9919 { MOD_TABLE (MOD_VEX_W_0_0F42_P_2_LEN_1) },
9920 { MOD_TABLE (MOD_VEX_W_1_0F42_P_2_LEN_1) },
43234a1e
L
9921 },
9922 {
9923 /* VEX_W_0F44_P_0_LEN_0 */
ab4e4ed5
AF
9924 { MOD_TABLE (MOD_VEX_W_0_0F44_P_0_LEN_1) },
9925 { MOD_TABLE (MOD_VEX_W_1_0F44_P_0_LEN_1) },
1ba585e8
IT
9926 },
9927 {
9928 /* VEX_W_0F44_P_2_LEN_0 */
ab4e4ed5
AF
9929 { MOD_TABLE (MOD_VEX_W_0_0F44_P_2_LEN_1) },
9930 { MOD_TABLE (MOD_VEX_W_1_0F44_P_2_LEN_1) },
43234a1e
L
9931 },
9932 {
ec6f095a
L
9933 /* VEX_W_0F45_P_0_LEN_1 */
9934 { MOD_TABLE (MOD_VEX_W_0_0F45_P_0_LEN_1) },
9935 { MOD_TABLE (MOD_VEX_W_1_0F45_P_0_LEN_1) },
9e30b8e0
L
9936 },
9937 {
ec6f095a
L
9938 /* VEX_W_0F45_P_2_LEN_1 */
9939 { MOD_TABLE (MOD_VEX_W_0_0F45_P_2_LEN_1) },
9940 { MOD_TABLE (MOD_VEX_W_1_0F45_P_2_LEN_1) },
9e30b8e0
L
9941 },
9942 {
ec6f095a
L
9943 /* VEX_W_0F46_P_0_LEN_1 */
9944 { MOD_TABLE (MOD_VEX_W_0_0F46_P_0_LEN_1) },
9945 { MOD_TABLE (MOD_VEX_W_1_0F46_P_0_LEN_1) },
9e30b8e0
L
9946 },
9947 {
ec6f095a
L
9948 /* VEX_W_0F46_P_2_LEN_1 */
9949 { MOD_TABLE (MOD_VEX_W_0_0F46_P_2_LEN_1) },
9950 { MOD_TABLE (MOD_VEX_W_1_0F46_P_2_LEN_1) },
9e30b8e0
L
9951 },
9952 {
ec6f095a
L
9953 /* VEX_W_0F47_P_0_LEN_1 */
9954 { MOD_TABLE (MOD_VEX_W_0_0F47_P_0_LEN_1) },
9955 { MOD_TABLE (MOD_VEX_W_1_0F47_P_0_LEN_1) },
9e30b8e0
L
9956 },
9957 {
ec6f095a
L
9958 /* VEX_W_0F47_P_2_LEN_1 */
9959 { MOD_TABLE (MOD_VEX_W_0_0F47_P_2_LEN_1) },
9960 { MOD_TABLE (MOD_VEX_W_1_0F47_P_2_LEN_1) },
9e30b8e0
L
9961 },
9962 {
ec6f095a
L
9963 /* VEX_W_0F4A_P_0_LEN_1 */
9964 { MOD_TABLE (MOD_VEX_W_0_0F4A_P_0_LEN_1) },
9965 { MOD_TABLE (MOD_VEX_W_1_0F4A_P_0_LEN_1) },
9e30b8e0
L
9966 },
9967 {
ec6f095a
L
9968 /* VEX_W_0F4A_P_2_LEN_1 */
9969 { MOD_TABLE (MOD_VEX_W_0_0F4A_P_2_LEN_1) },
9970 { MOD_TABLE (MOD_VEX_W_1_0F4A_P_2_LEN_1) },
9e30b8e0
L
9971 },
9972 {
ec6f095a
L
9973 /* VEX_W_0F4B_P_0_LEN_1 */
9974 { MOD_TABLE (MOD_VEX_W_0_0F4B_P_0_LEN_1) },
9975 { MOD_TABLE (MOD_VEX_W_1_0F4B_P_0_LEN_1) },
9e30b8e0
L
9976 },
9977 {
ec6f095a
L
9978 /* VEX_W_0F4B_P_2_LEN_1 */
9979 { MOD_TABLE (MOD_VEX_W_0_0F4B_P_2_LEN_1) },
9e30b8e0
L
9980 },
9981 {
ec6f095a
L
9982 /* VEX_W_0F90_P_0_LEN_0 */
9983 { "kmovw", { MaskG, MaskE }, 0 },
9984 { "kmovq", { MaskG, MaskE }, 0 },
9e30b8e0
L
9985 },
9986 {
ec6f095a
L
9987 /* VEX_W_0F90_P_2_LEN_0 */
9988 { "kmovb", { MaskG, MaskBDE }, 0 },
9989 { "kmovd", { MaskG, MaskBDE }, 0 },
9e30b8e0
L
9990 },
9991 {
ec6f095a
L
9992 /* VEX_W_0F91_P_0_LEN_0 */
9993 { MOD_TABLE (MOD_VEX_W_0_0F91_P_0_LEN_0) },
9994 { MOD_TABLE (MOD_VEX_W_1_0F91_P_0_LEN_0) },
9e30b8e0
L
9995 },
9996 {
ec6f095a
L
9997 /* VEX_W_0F91_P_2_LEN_0 */
9998 { MOD_TABLE (MOD_VEX_W_0_0F91_P_2_LEN_0) },
9999 { MOD_TABLE (MOD_VEX_W_1_0F91_P_2_LEN_0) },
9e30b8e0
L
10000 },
10001 {
ec6f095a
L
10002 /* VEX_W_0F92_P_0_LEN_0 */
10003 { MOD_TABLE (MOD_VEX_W_0_0F92_P_0_LEN_0) },
9e30b8e0
L
10004 },
10005 {
ec6f095a
L
10006 /* VEX_W_0F92_P_2_LEN_0 */
10007 { MOD_TABLE (MOD_VEX_W_0_0F92_P_2_LEN_0) },
9e30b8e0
L
10008 },
10009 {
ec6f095a
L
10010 /* VEX_W_0F92_P_3_LEN_0 */
10011 { MOD_TABLE (MOD_VEX_W_0_0F92_P_3_LEN_0) },
10012 { MOD_TABLE (MOD_VEX_W_1_0F92_P_3_LEN_0) },
9e30b8e0
L
10013 },
10014 {
ec6f095a
L
10015 /* VEX_W_0F93_P_0_LEN_0 */
10016 { MOD_TABLE (MOD_VEX_W_0_0F93_P_0_LEN_0) },
9e30b8e0
L
10017 },
10018 {
ec6f095a
L
10019 /* VEX_W_0F93_P_2_LEN_0 */
10020 { MOD_TABLE (MOD_VEX_W_0_0F93_P_2_LEN_0) },
9e30b8e0
L
10021 },
10022 {
ec6f095a
L
10023 /* VEX_W_0F93_P_3_LEN_0 */
10024 { MOD_TABLE (MOD_VEX_W_0_0F93_P_3_LEN_0) },
10025 { MOD_TABLE (MOD_VEX_W_1_0F93_P_3_LEN_0) },
9e30b8e0
L
10026 },
10027 {
ec6f095a
L
10028 /* VEX_W_0F98_P_0_LEN_0 */
10029 { MOD_TABLE (MOD_VEX_W_0_0F98_P_0_LEN_0) },
10030 { MOD_TABLE (MOD_VEX_W_1_0F98_P_0_LEN_0) },
9e30b8e0
L
10031 },
10032 {
ec6f095a
L
10033 /* VEX_W_0F98_P_2_LEN_0 */
10034 { MOD_TABLE (MOD_VEX_W_0_0F98_P_2_LEN_0) },
10035 { MOD_TABLE (MOD_VEX_W_1_0F98_P_2_LEN_0) },
9e30b8e0
L
10036 },
10037 {
ec6f095a
L
10038 /* VEX_W_0F99_P_0_LEN_0 */
10039 { MOD_TABLE (MOD_VEX_W_0_0F99_P_0_LEN_0) },
10040 { MOD_TABLE (MOD_VEX_W_1_0F99_P_0_LEN_0) },
9e30b8e0
L
10041 },
10042 {
ec6f095a
L
10043 /* VEX_W_0F99_P_2_LEN_0 */
10044 { MOD_TABLE (MOD_VEX_W_0_0F99_P_2_LEN_0) },
10045 { MOD_TABLE (MOD_VEX_W_1_0F99_P_2_LEN_0) },
9e30b8e0
L
10046 },
10047 {
ec6f095a
L
10048 /* VEX_W_0FC4_P_2 */
10049 { "vpinsrw", { XM, Vex128, Edqw, Ib }, 0 },
9e30b8e0
L
10050 },
10051 {
ec6f095a
L
10052 /* VEX_W_0FC5_P_2 */
10053 { "vpextrw", { Gdq, XS, Ib }, 0 },
9e30b8e0
L
10054 },
10055 {
592a252b 10056 /* VEX_W_0F380C_P_2 */
bf890a93 10057 { "vpermilps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10058 },
10059 {
592a252b 10060 /* VEX_W_0F380D_P_2 */
bf890a93 10061 { "vpermilpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10062 },
10063 {
592a252b 10064 /* VEX_W_0F380E_P_2 */
bf890a93 10065 { "vtestps", { XM, EXx }, 0 },
9e30b8e0
L
10066 },
10067 {
592a252b 10068 /* VEX_W_0F380F_P_2 */
bf890a93 10069 { "vtestpd", { XM, EXx }, 0 },
9e30b8e0 10070 },
6c30d220
L
10071 {
10072 /* VEX_W_0F3816_P_2 */
bf890a93 10073 { "vpermps", { XM, Vex, EXx }, 0 },
6c30d220 10074 },
bcf2684f 10075 {
6c30d220 10076 /* VEX_W_0F3818_P_2 */
bf890a93 10077 { "vbroadcastss", { XM, EXxmm_md }, 0 },
bcf2684f 10078 },
9e30b8e0 10079 {
6c30d220 10080 /* VEX_W_0F3819_P_2 */
bf890a93 10081 { "vbroadcastsd", { XM, EXxmm_mq }, 0 },
9e30b8e0
L
10082 },
10083 {
592a252b 10084 /* VEX_W_0F381A_P_2_M_0 */
bf890a93 10085 { "vbroadcastf128", { XM, Mxmm }, 0 },
9e30b8e0 10086 },
53aa04a0 10087 {
592a252b 10088 /* VEX_W_0F382C_P_2_M_0 */
bf890a93 10089 { "vmaskmovps", { XM, Vex, Mx }, 0 },
53aa04a0
L
10090 },
10091 {
592a252b 10092 /* VEX_W_0F382D_P_2_M_0 */
bf890a93 10093 { "vmaskmovpd", { XM, Vex, Mx }, 0 },
53aa04a0
L
10094 },
10095 {
592a252b 10096 /* VEX_W_0F382E_P_2_M_0 */
bf890a93 10097 { "vmaskmovps", { Mx, Vex, XM }, 0 },
53aa04a0
L
10098 },
10099 {
592a252b 10100 /* VEX_W_0F382F_P_2_M_0 */
bf890a93 10101 { "vmaskmovpd", { Mx, Vex, XM }, 0 },
53aa04a0 10102 },
6c30d220
L
10103 {
10104 /* VEX_W_0F3836_P_2 */
bf890a93 10105 { "vpermd", { XM, Vex, EXx }, 0 },
9e30b8e0 10106 },
6c30d220
L
10107 {
10108 /* VEX_W_0F3846_P_2 */
bf890a93 10109 { "vpsravd", { XM, Vex, EXx }, 0 },
6c30d220
L
10110 },
10111 {
10112 /* VEX_W_0F3858_P_2 */
bf890a93 10113 { "vpbroadcastd", { XM, EXxmm_md }, 0 },
6c30d220
L
10114 },
10115 {
10116 /* VEX_W_0F3859_P_2 */
bf890a93 10117 { "vpbroadcastq", { XM, EXxmm_mq }, 0 },
6c30d220
L
10118 },
10119 {
10120 /* VEX_W_0F385A_P_2_M_0 */
bf890a93 10121 { "vbroadcasti128", { XM, Mxmm }, 0 },
6c30d220
L
10122 },
10123 {
10124 /* VEX_W_0F3878_P_2 */
bf890a93 10125 { "vpbroadcastb", { XM, EXxmm_mb }, 0 },
6c30d220
L
10126 },
10127 {
10128 /* VEX_W_0F3879_P_2 */
bf890a93 10129 { "vpbroadcastw", { XM, EXxmm_mw }, 0 },
6c30d220 10130 },
48521003
IT
10131 {
10132 /* VEX_W_0F38CF_P_2 */
10133 { "vgf2p8mulb", { XM, Vex, EXx }, 0 },
10134 },
6c30d220
L
10135 {
10136 /* VEX_W_0F3A00_P_2 */
10137 { Bad_Opcode },
bf890a93 10138 { "vpermq", { XM, EXx, Ib }, 0 },
6c30d220
L
10139 },
10140 {
10141 /* VEX_W_0F3A01_P_2 */
10142 { Bad_Opcode },
bf890a93 10143 { "vpermpd", { XM, EXx, Ib }, 0 },
6c30d220
L
10144 },
10145 {
10146 /* VEX_W_0F3A02_P_2 */
bf890a93 10147 { "vpblendd", { XM, Vex, EXx, Ib }, 0 },
6c30d220 10148 },
9e30b8e0 10149 {
592a252b 10150 /* VEX_W_0F3A04_P_2 */
bf890a93 10151 { "vpermilps", { XM, EXx, Ib }, 0 },
9e30b8e0
L
10152 },
10153 {
592a252b 10154 /* VEX_W_0F3A05_P_2 */
bf890a93 10155 { "vpermilpd", { XM, EXx, Ib }, 0 },
9e30b8e0
L
10156 },
10157 {
592a252b 10158 /* VEX_W_0F3A06_P_2 */
bf890a93 10159 { "vperm2f128", { XM, Vex256, EXx, Ib }, 0 },
9e30b8e0 10160 },
9e30b8e0 10161 {
592a252b 10162 /* VEX_W_0F3A14_P_2 */
bf890a93 10163 { "vpextrb", { Edqb, XM, Ib }, 0 },
9e30b8e0
L
10164 },
10165 {
592a252b 10166 /* VEX_W_0F3A15_P_2 */
bf890a93 10167 { "vpextrw", { Edqw, XM, Ib }, 0 },
9e30b8e0
L
10168 },
10169 {
592a252b 10170 /* VEX_W_0F3A18_P_2 */
bf890a93 10171 { "vinsertf128", { XM, Vex256, EXxmm, Ib }, 0 },
9e30b8e0
L
10172 },
10173 {
592a252b 10174 /* VEX_W_0F3A19_P_2 */
bf890a93 10175 { "vextractf128", { EXxmm, XM, Ib }, 0 },
9e30b8e0
L
10176 },
10177 {
592a252b 10178 /* VEX_W_0F3A20_P_2 */
bf890a93 10179 { "vpinsrb", { XM, Vex128, Edqb, Ib }, 0 },
9e30b8e0 10180 },
43234a1e 10181 {
1ba585e8 10182 /* VEX_W_0F3A30_P_2_LEN_0 */
ab4e4ed5
AF
10183 { MOD_TABLE (MOD_VEX_W_0_0F3A30_P_2_LEN_0) },
10184 { MOD_TABLE (MOD_VEX_W_1_0F3A30_P_2_LEN_0) },
43234a1e
L
10185 },
10186 {
1ba585e8 10187 /* VEX_W_0F3A31_P_2_LEN_0 */
ab4e4ed5
AF
10188 { MOD_TABLE (MOD_VEX_W_0_0F3A31_P_2_LEN_0) },
10189 { MOD_TABLE (MOD_VEX_W_1_0F3A31_P_2_LEN_0) },
1ba585e8
IT
10190 },
10191 {
10192 /* VEX_W_0F3A32_P_2_LEN_0 */
ab4e4ed5
AF
10193 { MOD_TABLE (MOD_VEX_W_0_0F3A32_P_2_LEN_0) },
10194 { MOD_TABLE (MOD_VEX_W_1_0F3A32_P_2_LEN_0) },
43234a1e 10195 },
1ba585e8
IT
10196 {
10197 /* VEX_W_0F3A33_P_2_LEN_0 */
ab4e4ed5
AF
10198 { MOD_TABLE (MOD_VEX_W_0_0F3A33_P_2_LEN_0) },
10199 { MOD_TABLE (MOD_VEX_W_1_0F3A33_P_2_LEN_0) },
1ba585e8 10200 },
6c30d220
L
10201 {
10202 /* VEX_W_0F3A38_P_2 */
bf890a93 10203 { "vinserti128", { XM, Vex256, EXxmm, Ib }, 0 },
6c30d220
L
10204 },
10205 {
10206 /* VEX_W_0F3A39_P_2 */
bf890a93 10207 { "vextracti128", { EXxmm, XM, Ib }, 0 },
6c30d220 10208 },
6c30d220
L
10209 {
10210 /* VEX_W_0F3A46_P_2 */
bf890a93 10211 { "vperm2i128", { XM, Vex256, EXx, Ib }, 0 },
6c30d220 10212 },
a683cc34 10213 {
592a252b 10214 /* VEX_W_0F3A48_P_2 */
bf890a93
IT
10215 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
10216 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
a683cc34
SP
10217 },
10218 {
592a252b 10219 /* VEX_W_0F3A49_P_2 */
bf890a93
IT
10220 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
10221 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
a683cc34 10222 },
9e30b8e0 10223 {
592a252b 10224 /* VEX_W_0F3A4A_P_2 */
bf890a93 10225 { "vblendvps", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0
L
10226 },
10227 {
592a252b 10228 /* VEX_W_0F3A4B_P_2 */
bf890a93 10229 { "vblendvpd", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0
L
10230 },
10231 {
592a252b 10232 /* VEX_W_0F3A4C_P_2 */
bf890a93 10233 { "vpblendvb", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0 10234 },
48521003
IT
10235 {
10236 /* VEX_W_0F3ACE_P_2 */
10237 { Bad_Opcode },
10238 { "vgf2p8affineqb", { XM, Vex, EXx, Ib }, 0 },
10239 },
10240 {
10241 /* VEX_W_0F3ACF_P_2 */
10242 { Bad_Opcode },
10243 { "vgf2p8affineinvqb", { XM, Vex, EXx, Ib }, 0 },
10244 },
43234a1e
L
10245#define NEED_VEX_W_TABLE
10246#include "i386-dis-evex.h"
10247#undef NEED_VEX_W_TABLE
9e30b8e0
L
10248};
10249
10250static const struct dis386 mod_table[][2] = {
10251 {
10252 /* MOD_8D */
bf890a93 10253 { "leaS", { Gv, M }, 0 },
9e30b8e0 10254 },
42164a71
L
10255 {
10256 /* MOD_C6_REG_7 */
10257 { Bad_Opcode },
10258 { RM_TABLE (RM_C6_REG_7) },
10259 },
10260 {
10261 /* MOD_C7_REG_7 */
10262 { Bad_Opcode },
10263 { RM_TABLE (RM_C7_REG_7) },
10264 },
4a357820
MZ
10265 {
10266 /* MOD_FF_REG_3 */
a72d2af2 10267 { "Jcall^", { indirEp }, 0 },
4a357820
MZ
10268 },
10269 {
10270 /* MOD_FF_REG_5 */
a72d2af2 10271 { "Jjmp^", { indirEp }, 0 },
4a357820 10272 },
9e30b8e0
L
10273 {
10274 /* MOD_0F01_REG_0 */
10275 { X86_64_TABLE (X86_64_0F01_REG_0) },
10276 { RM_TABLE (RM_0F01_REG_0) },
10277 },
10278 {
10279 /* MOD_0F01_REG_1 */
10280 { X86_64_TABLE (X86_64_0F01_REG_1) },
10281 { RM_TABLE (RM_0F01_REG_1) },
10282 },
10283 {
10284 /* MOD_0F01_REG_2 */
10285 { X86_64_TABLE (X86_64_0F01_REG_2) },
10286 { RM_TABLE (RM_0F01_REG_2) },
10287 },
10288 {
10289 /* MOD_0F01_REG_3 */
10290 { X86_64_TABLE (X86_64_0F01_REG_3) },
10291 { RM_TABLE (RM_0F01_REG_3) },
10292 },
8eab4136
L
10293 {
10294 /* MOD_0F01_REG_5 */
603555e5 10295 { PREFIX_TABLE (PREFIX_MOD_0_0F01_REG_5) },
8eab4136
L
10296 { RM_TABLE (RM_0F01_REG_5) },
10297 },
9e30b8e0
L
10298 {
10299 /* MOD_0F01_REG_7 */
bf890a93 10300 { "invlpg", { Mb }, 0 },
9e30b8e0
L
10301 { RM_TABLE (RM_0F01_REG_7) },
10302 },
10303 {
10304 /* MOD_0F12_PREFIX_0 */
507bd325
L
10305 { "movlps", { XM, EXq }, PREFIX_OPCODE },
10306 { "movhlps", { XM, EXq }, PREFIX_OPCODE },
9e30b8e0
L
10307 },
10308 {
10309 /* MOD_0F13 */
507bd325 10310 { "movlpX", { EXq, XM }, PREFIX_OPCODE },
9e30b8e0
L
10311 },
10312 {
10313 /* MOD_0F16_PREFIX_0 */
bf890a93
IT
10314 { "movhps", { XM, EXq }, 0 },
10315 { "movlhps", { XM, EXq }, 0 },
9e30b8e0
L
10316 },
10317 {
10318 /* MOD_0F17 */
507bd325 10319 { "movhpX", { EXq, XM }, PREFIX_OPCODE },
9e30b8e0
L
10320 },
10321 {
10322 /* MOD_0F18_REG_0 */
bf890a93 10323 { "prefetchnta", { Mb }, 0 },
9e30b8e0
L
10324 },
10325 {
10326 /* MOD_0F18_REG_1 */
bf890a93 10327 { "prefetcht0", { Mb }, 0 },
9e30b8e0
L
10328 },
10329 {
10330 /* MOD_0F18_REG_2 */
bf890a93 10331 { "prefetcht1", { Mb }, 0 },
9e30b8e0
L
10332 },
10333 {
10334 /* MOD_0F18_REG_3 */
bf890a93 10335 { "prefetcht2", { Mb }, 0 },
9e30b8e0 10336 },
d7189fa5
RM
10337 {
10338 /* MOD_0F18_REG_4 */
bf890a93 10339 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
10340 },
10341 {
10342 /* MOD_0F18_REG_5 */
bf890a93 10343 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
10344 },
10345 {
10346 /* MOD_0F18_REG_6 */
bf890a93 10347 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
10348 },
10349 {
10350 /* MOD_0F18_REG_7 */
bf890a93 10351 { "nop/reserved", { Mb }, 0 },
d7189fa5 10352 },
7e8b059b
L
10353 {
10354 /* MOD_0F1A_PREFIX_0 */
d276ec69 10355 { "bndldx", { Gbnd, Mv_bnd }, 0 },
bf890a93 10356 { "nopQ", { Ev }, 0 },
7e8b059b
L
10357 },
10358 {
10359 /* MOD_0F1B_PREFIX_0 */
d276ec69 10360 { "bndstx", { Mv_bnd, Gbnd }, 0 },
bf890a93 10361 { "nopQ", { Ev }, 0 },
7e8b059b
L
10362 },
10363 {
10364 /* MOD_0F1B_PREFIX_1 */
d276ec69 10365 { "bndmk", { Gbnd, Mv_bnd }, 0 },
bf890a93 10366 { "nopQ", { Ev }, 0 },
7e8b059b 10367 },
c48935d7
IT
10368 {
10369 /* MOD_0F1C_PREFIX_0 */
10370 { REG_TABLE (REG_0F1C_MOD_0) },
10371 { "nopQ", { Ev }, 0 },
10372 },
603555e5
L
10373 {
10374 /* MOD_0F1E_PREFIX_1 */
10375 { "nopQ", { Ev }, 0 },
10376 { REG_TABLE (REG_0F1E_MOD_3) },
10377 },
b844680a 10378 {
92fddf8e 10379 /* MOD_0F24 */
7bb15c6f 10380 { Bad_Opcode },
bf890a93 10381 { "movL", { Rd, Td }, 0 },
b844680a
L
10382 },
10383 {
92fddf8e 10384 /* MOD_0F26 */
592d1631 10385 { Bad_Opcode },
bf890a93 10386 { "movL", { Td, Rd }, 0 },
b844680a 10387 },
75c135a8
L
10388 {
10389 /* MOD_0F2B_PREFIX_0 */
507bd325 10390 {"movntps", { Mx, XM }, PREFIX_OPCODE },
75c135a8
L
10391 },
10392 {
10393 /* MOD_0F2B_PREFIX_1 */
507bd325 10394 {"movntss", { Md, XM }, PREFIX_OPCODE },
75c135a8
L
10395 },
10396 {
10397 /* MOD_0F2B_PREFIX_2 */
507bd325 10398 {"movntpd", { Mx, XM }, PREFIX_OPCODE },
75c135a8
L
10399 },
10400 {
10401 /* MOD_0F2B_PREFIX_3 */
507bd325 10402 {"movntsd", { Mq, XM }, PREFIX_OPCODE },
75c135a8
L
10403 },
10404 {
10405 /* MOD_0F51 */
592d1631 10406 { Bad_Opcode },
507bd325 10407 { "movmskpX", { Gdq, XS }, PREFIX_OPCODE },
75c135a8 10408 },
b844680a 10409 {
1ceb70f8 10410 /* MOD_0F71_REG_2 */
592d1631 10411 { Bad_Opcode },
bf890a93 10412 { "psrlw", { MS, Ib }, 0 },
b844680a
L
10413 },
10414 {
1ceb70f8 10415 /* MOD_0F71_REG_4 */
592d1631 10416 { Bad_Opcode },
bf890a93 10417 { "psraw", { MS, Ib }, 0 },
b844680a
L
10418 },
10419 {
1ceb70f8 10420 /* MOD_0F71_REG_6 */
592d1631 10421 { Bad_Opcode },
bf890a93 10422 { "psllw", { MS, Ib }, 0 },
b844680a
L
10423 },
10424 {
1ceb70f8 10425 /* MOD_0F72_REG_2 */
592d1631 10426 { Bad_Opcode },
bf890a93 10427 { "psrld", { MS, Ib }, 0 },
b844680a
L
10428 },
10429 {
1ceb70f8 10430 /* MOD_0F72_REG_4 */
592d1631 10431 { Bad_Opcode },
bf890a93 10432 { "psrad", { MS, Ib }, 0 },
b844680a
L
10433 },
10434 {
1ceb70f8 10435 /* MOD_0F72_REG_6 */
592d1631 10436 { Bad_Opcode },
bf890a93 10437 { "pslld", { MS, Ib }, 0 },
b844680a
L
10438 },
10439 {
1ceb70f8 10440 /* MOD_0F73_REG_2 */
592d1631 10441 { Bad_Opcode },
bf890a93 10442 { "psrlq", { MS, Ib }, 0 },
b844680a
L
10443 },
10444 {
1ceb70f8 10445 /* MOD_0F73_REG_3 */
592d1631 10446 { Bad_Opcode },
c0f3af97
L
10447 { PREFIX_TABLE (PREFIX_0F73_REG_3) },
10448 },
10449 {
10450 /* MOD_0F73_REG_6 */
592d1631 10451 { Bad_Opcode },
bf890a93 10452 { "psllq", { MS, Ib }, 0 },
c0f3af97
L
10453 },
10454 {
10455 /* MOD_0F73_REG_7 */
592d1631 10456 { Bad_Opcode },
c0f3af97
L
10457 { PREFIX_TABLE (PREFIX_0F73_REG_7) },
10458 },
10459 {
10460 /* MOD_0FAE_REG_0 */
bf890a93 10461 { "fxsave", { FXSAVE }, 0 },
c7b8aa3a 10462 { PREFIX_TABLE (PREFIX_0FAE_REG_0) },
c0f3af97
L
10463 },
10464 {
10465 /* MOD_0FAE_REG_1 */
bf890a93 10466 { "fxrstor", { FXSAVE }, 0 },
c7b8aa3a 10467 { PREFIX_TABLE (PREFIX_0FAE_REG_1) },
c0f3af97
L
10468 },
10469 {
10470 /* MOD_0FAE_REG_2 */
bf890a93 10471 { "ldmxcsr", { Md }, 0 },
c7b8aa3a 10472 { PREFIX_TABLE (PREFIX_0FAE_REG_2) },
c0f3af97
L
10473 },
10474 {
10475 /* MOD_0FAE_REG_3 */
bf890a93 10476 { "stmxcsr", { Md }, 0 },
c7b8aa3a 10477 { PREFIX_TABLE (PREFIX_0FAE_REG_3) },
c0f3af97
L
10478 },
10479 {
10480 /* MOD_0FAE_REG_4 */
6b40c462
L
10481 { PREFIX_TABLE (PREFIX_MOD_0_0FAE_REG_4) },
10482 { PREFIX_TABLE (PREFIX_MOD_3_0FAE_REG_4) },
c0f3af97
L
10483 },
10484 {
10485 /* MOD_0FAE_REG_5 */
603555e5 10486 { PREFIX_TABLE (PREFIX_MOD_0_0FAE_REG_5) },
2234eee6 10487 { PREFIX_TABLE (PREFIX_MOD_3_0FAE_REG_5) },
c0f3af97
L
10488 },
10489 {
10490 /* MOD_0FAE_REG_6 */
de89d0a3
IT
10491 { PREFIX_TABLE (PREFIX_MOD_0_0FAE_REG_6) },
10492 { PREFIX_TABLE (PREFIX_MOD_1_0FAE_REG_6) },
c0f3af97
L
10493 },
10494 {
10495 /* MOD_0FAE_REG_7 */
963f3586 10496 { PREFIX_TABLE (PREFIX_0FAE_REG_7) },
c0f3af97
L
10497 { RM_TABLE (RM_0FAE_REG_7) },
10498 },
10499 {
10500 /* MOD_0FB2 */
bf890a93 10501 { "lssS", { Gv, Mp }, 0 },
c0f3af97
L
10502 },
10503 {
10504 /* MOD_0FB4 */
bf890a93 10505 { "lfsS", { Gv, Mp }, 0 },
c0f3af97
L
10506 },
10507 {
10508 /* MOD_0FB5 */
bf890a93 10509 { "lgsS", { Gv, Mp }, 0 },
c0f3af97 10510 },
a8484f96
L
10511 {
10512 /* MOD_0FC3 */
10513 { PREFIX_TABLE (PREFIX_MOD_0_0FC3) },
10514 },
963f3586
IT
10515 {
10516 /* MOD_0FC7_REG_3 */
a8484f96 10517 { "xrstors", { FXSAVE }, 0 },
963f3586
IT
10518 },
10519 {
10520 /* MOD_0FC7_REG_4 */
bf890a93 10521 { "xsavec", { FXSAVE }, 0 },
963f3586
IT
10522 },
10523 {
10524 /* MOD_0FC7_REG_5 */
bf890a93 10525 { "xsaves", { FXSAVE }, 0 },
963f3586 10526 },
c0f3af97
L
10527 {
10528 /* MOD_0FC7_REG_6 */
f24bcbaa
L
10529 { PREFIX_TABLE (PREFIX_MOD_0_0FC7_REG_6) },
10530 { PREFIX_TABLE (PREFIX_MOD_3_0FC7_REG_6) }
c0f3af97
L
10531 },
10532 {
10533 /* MOD_0FC7_REG_7 */
bf890a93 10534 { "vmptrst", { Mq }, 0 },
f24bcbaa 10535 { PREFIX_TABLE (PREFIX_MOD_3_0FC7_REG_7) }
c0f3af97
L
10536 },
10537 {
10538 /* MOD_0FD7 */
592d1631 10539 { Bad_Opcode },
bf890a93 10540 { "pmovmskb", { Gdq, MS }, 0 },
c0f3af97
L
10541 },
10542 {
10543 /* MOD_0FE7_PREFIX_2 */
bf890a93 10544 { "movntdq", { Mx, XM }, 0 },
c0f3af97
L
10545 },
10546 {
10547 /* MOD_0FF0_PREFIX_3 */
bf890a93 10548 { "lddqu", { XM, M }, 0 },
c0f3af97
L
10549 },
10550 {
10551 /* MOD_0F382A_PREFIX_2 */
bf890a93 10552 { "movntdqa", { XM, Mx }, 0 },
c0f3af97 10553 },
603555e5
L
10554 {
10555 /* MOD_0F38F5_PREFIX_2 */
10556 { "wrussK", { M, Gdq }, PREFIX_OPCODE },
10557 },
10558 {
10559 /* MOD_0F38F6_PREFIX_0 */
10560 { "wrssK", { M, Gdq }, PREFIX_OPCODE },
10561 },
c0a30a9f
L
10562 {
10563 /* MOD_0F38F8_PREFIX_2 */
10564 { "movdir64b", { Gva, M }, PREFIX_OPCODE },
10565 },
10566 {
10567 /* MOD_0F38F9_PREFIX_0 */
10568 { "movdiri", { Em, Gv }, PREFIX_OPCODE },
10569 },
c0f3af97
L
10570 {
10571 /* MOD_62_32BIT */
bf890a93 10572 { "bound{S|}", { Gv, Ma }, 0 },
43234a1e 10573 { EVEX_TABLE (EVEX_0F) },
c0f3af97
L
10574 },
10575 {
10576 /* MOD_C4_32BIT */
bf890a93 10577 { "lesS", { Gv, Mp }, 0 },
c0f3af97
L
10578 { VEX_C4_TABLE (VEX_0F) },
10579 },
10580 {
10581 /* MOD_C5_32BIT */
bf890a93 10582 { "ldsS", { Gv, Mp }, 0 },
c0f3af97
L
10583 { VEX_C5_TABLE (VEX_0F) },
10584 },
10585 {
592a252b
L
10586 /* MOD_VEX_0F12_PREFIX_0 */
10587 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_0) },
10588 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_1) },
c0f3af97
L
10589 },
10590 {
592a252b
L
10591 /* MOD_VEX_0F13 */
10592 { VEX_LEN_TABLE (VEX_LEN_0F13_M_0) },
c0f3af97
L
10593 },
10594 {
592a252b
L
10595 /* MOD_VEX_0F16_PREFIX_0 */
10596 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_0) },
10597 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_1) },
c0f3af97
L
10598 },
10599 {
592a252b
L
10600 /* MOD_VEX_0F17 */
10601 { VEX_LEN_TABLE (VEX_LEN_0F17_M_0) },
c0f3af97
L
10602 },
10603 {
592a252b 10604 /* MOD_VEX_0F2B */
ec6f095a 10605 { "vmovntpX", { Mx, XM }, 0 },
c0f3af97 10606 },
ab4e4ed5
AF
10607 {
10608 /* MOD_VEX_W_0_0F41_P_0_LEN_1 */
10609 { Bad_Opcode },
10610 { "kandw", { MaskG, MaskVex, MaskR }, 0 },
10611 },
10612 {
10613 /* MOD_VEX_W_1_0F41_P_0_LEN_1 */
10614 { Bad_Opcode },
10615 { "kandq", { MaskG, MaskVex, MaskR }, 0 },
10616 },
10617 {
10618 /* MOD_VEX_W_0_0F41_P_2_LEN_1 */
10619 { Bad_Opcode },
10620 { "kandb", { MaskG, MaskVex, MaskR }, 0 },
10621 },
10622 {
10623 /* MOD_VEX_W_1_0F41_P_2_LEN_1 */
10624 { Bad_Opcode },
10625 { "kandd", { MaskG, MaskVex, MaskR }, 0 },
10626 },
10627 {
10628 /* MOD_VEX_W_0_0F42_P_0_LEN_1 */
10629 { Bad_Opcode },
10630 { "kandnw", { MaskG, MaskVex, MaskR }, 0 },
10631 },
10632 {
10633 /* MOD_VEX_W_1_0F42_P_0_LEN_1 */
10634 { Bad_Opcode },
10635 { "kandnq", { MaskG, MaskVex, MaskR }, 0 },
10636 },
10637 {
10638 /* MOD_VEX_W_0_0F42_P_2_LEN_1 */
10639 { Bad_Opcode },
10640 { "kandnb", { MaskG, MaskVex, MaskR }, 0 },
10641 },
10642 {
10643 /* MOD_VEX_W_1_0F42_P_2_LEN_1 */
10644 { Bad_Opcode },
10645 { "kandnd", { MaskG, MaskVex, MaskR }, 0 },
10646 },
10647 {
10648 /* MOD_VEX_W_0_0F44_P_0_LEN_0 */
10649 { Bad_Opcode },
10650 { "knotw", { MaskG, MaskR }, 0 },
10651 },
10652 {
10653 /* MOD_VEX_W_1_0F44_P_0_LEN_0 */
10654 { Bad_Opcode },
10655 { "knotq", { MaskG, MaskR }, 0 },
10656 },
10657 {
10658 /* MOD_VEX_W_0_0F44_P_2_LEN_0 */
10659 { Bad_Opcode },
10660 { "knotb", { MaskG, MaskR }, 0 },
10661 },
10662 {
10663 /* MOD_VEX_W_1_0F44_P_2_LEN_0 */
10664 { Bad_Opcode },
10665 { "knotd", { MaskG, MaskR }, 0 },
10666 },
10667 {
10668 /* MOD_VEX_W_0_0F45_P_0_LEN_1 */
10669 { Bad_Opcode },
10670 { "korw", { MaskG, MaskVex, MaskR }, 0 },
10671 },
10672 {
10673 /* MOD_VEX_W_1_0F45_P_0_LEN_1 */
10674 { Bad_Opcode },
10675 { "korq", { MaskG, MaskVex, MaskR }, 0 },
10676 },
10677 {
10678 /* MOD_VEX_W_0_0F45_P_2_LEN_1 */
10679 { Bad_Opcode },
10680 { "korb", { MaskG, MaskVex, MaskR }, 0 },
10681 },
10682 {
10683 /* MOD_VEX_W_1_0F45_P_2_LEN_1 */
10684 { Bad_Opcode },
10685 { "kord", { MaskG, MaskVex, MaskR }, 0 },
10686 },
10687 {
10688 /* MOD_VEX_W_0_0F46_P_0_LEN_1 */
10689 { Bad_Opcode },
10690 { "kxnorw", { MaskG, MaskVex, MaskR }, 0 },
10691 },
10692 {
10693 /* MOD_VEX_W_1_0F46_P_0_LEN_1 */
10694 { Bad_Opcode },
10695 { "kxnorq", { MaskG, MaskVex, MaskR }, 0 },
10696 },
10697 {
10698 /* MOD_VEX_W_0_0F46_P_2_LEN_1 */
10699 { Bad_Opcode },
10700 { "kxnorb", { MaskG, MaskVex, MaskR }, 0 },
10701 },
10702 {
10703 /* MOD_VEX_W_1_0F46_P_2_LEN_1 */
10704 { Bad_Opcode },
10705 { "kxnord", { MaskG, MaskVex, MaskR }, 0 },
10706 },
10707 {
10708 /* MOD_VEX_W_0_0F47_P_0_LEN_1 */
10709 { Bad_Opcode },
10710 { "kxorw", { MaskG, MaskVex, MaskR }, 0 },
10711 },
10712 {
10713 /* MOD_VEX_W_1_0F47_P_0_LEN_1 */
10714 { Bad_Opcode },
10715 { "kxorq", { MaskG, MaskVex, MaskR }, 0 },
10716 },
10717 {
10718 /* MOD_VEX_W_0_0F47_P_2_LEN_1 */
10719 { Bad_Opcode },
10720 { "kxorb", { MaskG, MaskVex, MaskR }, 0 },
10721 },
10722 {
10723 /* MOD_VEX_W_1_0F47_P_2_LEN_1 */
10724 { Bad_Opcode },
10725 { "kxord", { MaskG, MaskVex, MaskR }, 0 },
10726 },
10727 {
10728 /* MOD_VEX_W_0_0F4A_P_0_LEN_1 */
10729 { Bad_Opcode },
10730 { "kaddw", { MaskG, MaskVex, MaskR }, 0 },
10731 },
10732 {
10733 /* MOD_VEX_W_1_0F4A_P_0_LEN_1 */
10734 { Bad_Opcode },
10735 { "kaddq", { MaskG, MaskVex, MaskR }, 0 },
10736 },
10737 {
10738 /* MOD_VEX_W_0_0F4A_P_2_LEN_1 */
10739 { Bad_Opcode },
10740 { "kaddb", { MaskG, MaskVex, MaskR }, 0 },
10741 },
10742 {
10743 /* MOD_VEX_W_1_0F4A_P_2_LEN_1 */
10744 { Bad_Opcode },
10745 { "kaddd", { MaskG, MaskVex, MaskR }, 0 },
10746 },
10747 {
10748 /* MOD_VEX_W_0_0F4B_P_0_LEN_1 */
10749 { Bad_Opcode },
10750 { "kunpckwd", { MaskG, MaskVex, MaskR }, 0 },
10751 },
10752 {
10753 /* MOD_VEX_W_1_0F4B_P_0_LEN_1 */
10754 { Bad_Opcode },
10755 { "kunpckdq", { MaskG, MaskVex, MaskR }, 0 },
10756 },
10757 {
10758 /* MOD_VEX_W_0_0F4B_P_2_LEN_1 */
10759 { Bad_Opcode },
10760 { "kunpckbw", { MaskG, MaskVex, MaskR }, 0 },
10761 },
c0f3af97 10762 {
592a252b 10763 /* MOD_VEX_0F50 */
592d1631 10764 { Bad_Opcode },
ec6f095a 10765 { "vmovmskpX", { Gdq, XS }, 0 },
c0f3af97
L
10766 },
10767 {
592a252b 10768 /* MOD_VEX_0F71_REG_2 */
592d1631 10769 { Bad_Opcode },
592a252b 10770 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_2) },
b844680a
L
10771 },
10772 {
592a252b 10773 /* MOD_VEX_0F71_REG_4 */
592d1631 10774 { Bad_Opcode },
592a252b 10775 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_4) },
b844680a
L
10776 },
10777 {
592a252b 10778 /* MOD_VEX_0F71_REG_6 */
592d1631 10779 { Bad_Opcode },
592a252b 10780 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_6) },
b844680a
L
10781 },
10782 {
592a252b 10783 /* MOD_VEX_0F72_REG_2 */
592d1631 10784 { Bad_Opcode },
592a252b 10785 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_2) },
b844680a 10786 },
d8faab4e 10787 {
592a252b 10788 /* MOD_VEX_0F72_REG_4 */
592d1631 10789 { Bad_Opcode },
592a252b 10790 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_4) },
d8faab4e
L
10791 },
10792 {
592a252b 10793 /* MOD_VEX_0F72_REG_6 */
592d1631 10794 { Bad_Opcode },
592a252b 10795 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_6) },
d8faab4e 10796 },
876d4bfa 10797 {
592a252b 10798 /* MOD_VEX_0F73_REG_2 */
592d1631 10799 { Bad_Opcode },
592a252b 10800 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_2) },
876d4bfa
L
10801 },
10802 {
592a252b 10803 /* MOD_VEX_0F73_REG_3 */
592d1631 10804 { Bad_Opcode },
592a252b 10805 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_3) },
475a2301
L
10806 },
10807 {
592a252b 10808 /* MOD_VEX_0F73_REG_6 */
592d1631 10809 { Bad_Opcode },
592a252b 10810 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_6) },
876d4bfa
L
10811 },
10812 {
592a252b 10813 /* MOD_VEX_0F73_REG_7 */
592d1631 10814 { Bad_Opcode },
592a252b 10815 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_7) },
876d4bfa 10816 },
ab4e4ed5
AF
10817 {
10818 /* MOD_VEX_W_0_0F91_P_0_LEN_0 */
10819 { "kmovw", { Ew, MaskG }, 0 },
10820 { Bad_Opcode },
10821 },
10822 {
10823 /* MOD_VEX_W_0_0F91_P_0_LEN_0 */
10824 { "kmovq", { Eq, MaskG }, 0 },
10825 { Bad_Opcode },
10826 },
10827 {
10828 /* MOD_VEX_W_0_0F91_P_2_LEN_0 */
10829 { "kmovb", { Eb, MaskG }, 0 },
10830 { Bad_Opcode },
10831 },
10832 {
10833 /* MOD_VEX_W_0_0F91_P_2_LEN_0 */
10834 { "kmovd", { Ed, MaskG }, 0 },
10835 { Bad_Opcode },
10836 },
10837 {
10838 /* MOD_VEX_W_0_0F92_P_0_LEN_0 */
10839 { Bad_Opcode },
10840 { "kmovw", { MaskG, Rdq }, 0 },
10841 },
10842 {
10843 /* MOD_VEX_W_0_0F92_P_2_LEN_0 */
10844 { Bad_Opcode },
10845 { "kmovb", { MaskG, Rdq }, 0 },
10846 },
10847 {
10848 /* MOD_VEX_W_0_0F92_P_3_LEN_0 */
10849 { Bad_Opcode },
10850 { "kmovd", { MaskG, Rdq }, 0 },
10851 },
10852 {
10853 /* MOD_VEX_W_1_0F92_P_3_LEN_0 */
10854 { Bad_Opcode },
10855 { "kmovq", { MaskG, Rdq }, 0 },
10856 },
10857 {
10858 /* MOD_VEX_W_0_0F93_P_0_LEN_0 */
10859 { Bad_Opcode },
10860 { "kmovw", { Gdq, MaskR }, 0 },
10861 },
10862 {
10863 /* MOD_VEX_W_0_0F93_P_2_LEN_0 */
10864 { Bad_Opcode },
10865 { "kmovb", { Gdq, MaskR }, 0 },
10866 },
10867 {
10868 /* MOD_VEX_W_0_0F93_P_3_LEN_0 */
10869 { Bad_Opcode },
10870 { "kmovd", { Gdq, MaskR }, 0 },
10871 },
10872 {
10873 /* MOD_VEX_W_1_0F93_P_3_LEN_0 */
10874 { Bad_Opcode },
10875 { "kmovq", { Gdq, MaskR }, 0 },
10876 },
10877 {
10878 /* MOD_VEX_W_0_0F98_P_0_LEN_0 */
10879 { Bad_Opcode },
10880 { "kortestw", { MaskG, MaskR }, 0 },
10881 },
10882 {
10883 /* MOD_VEX_W_1_0F98_P_0_LEN_0 */
10884 { Bad_Opcode },
10885 { "kortestq", { MaskG, MaskR }, 0 },
10886 },
10887 {
10888 /* MOD_VEX_W_0_0F98_P_2_LEN_0 */
10889 { Bad_Opcode },
10890 { "kortestb", { MaskG, MaskR }, 0 },
10891 },
10892 {
10893 /* MOD_VEX_W_1_0F98_P_2_LEN_0 */
10894 { Bad_Opcode },
10895 { "kortestd", { MaskG, MaskR }, 0 },
10896 },
10897 {
10898 /* MOD_VEX_W_0_0F99_P_0_LEN_0 */
10899 { Bad_Opcode },
10900 { "ktestw", { MaskG, MaskR }, 0 },
10901 },
10902 {
10903 /* MOD_VEX_W_1_0F99_P_0_LEN_0 */
10904 { Bad_Opcode },
10905 { "ktestq", { MaskG, MaskR }, 0 },
10906 },
10907 {
10908 /* MOD_VEX_W_0_0F99_P_2_LEN_0 */
10909 { Bad_Opcode },
10910 { "ktestb", { MaskG, MaskR }, 0 },
10911 },
10912 {
10913 /* MOD_VEX_W_1_0F99_P_2_LEN_0 */
10914 { Bad_Opcode },
10915 { "ktestd", { MaskG, MaskR }, 0 },
10916 },
876d4bfa 10917 {
592a252b
L
10918 /* MOD_VEX_0FAE_REG_2 */
10919 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_2_M_0) },
876d4bfa 10920 },
bbedc832 10921 {
592a252b
L
10922 /* MOD_VEX_0FAE_REG_3 */
10923 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_3_M_0) },
bbedc832 10924 },
144c41d9 10925 {
592a252b 10926 /* MOD_VEX_0FD7_PREFIX_2 */
592d1631 10927 { Bad_Opcode },
ec6f095a 10928 { "vpmovmskb", { Gdq, XS }, 0 },
144c41d9 10929 },
1afd85e3 10930 {
592a252b 10931 /* MOD_VEX_0FE7_PREFIX_2 */
ec6f095a 10932 { "vmovntdq", { Mx, XM }, 0 },
1afd85e3
L
10933 },
10934 {
592a252b 10935 /* MOD_VEX_0FF0_PREFIX_3 */
ec6f095a 10936 { "vlddqu", { XM, M }, 0 },
92fddf8e 10937 },
75c135a8 10938 {
592a252b
L
10939 /* MOD_VEX_0F381A_PREFIX_2 */
10940 { VEX_LEN_TABLE (VEX_LEN_0F381A_P_2_M_0) },
75c135a8 10941 },
1afd85e3 10942 {
592a252b 10943 /* MOD_VEX_0F382A_PREFIX_2 */
ec6f095a 10944 { "vmovntdqa", { XM, Mx }, 0 },
1afd85e3 10945 },
75c135a8 10946 {
592a252b
L
10947 /* MOD_VEX_0F382C_PREFIX_2 */
10948 { VEX_W_TABLE (VEX_W_0F382C_P_2_M_0) },
75c135a8 10949 },
1afd85e3 10950 {
592a252b
L
10951 /* MOD_VEX_0F382D_PREFIX_2 */
10952 { VEX_W_TABLE (VEX_W_0F382D_P_2_M_0) },
1afd85e3
L
10953 },
10954 {
592a252b
L
10955 /* MOD_VEX_0F382E_PREFIX_2 */
10956 { VEX_W_TABLE (VEX_W_0F382E_P_2_M_0) },
1afd85e3
L
10957 },
10958 {
592a252b
L
10959 /* MOD_VEX_0F382F_PREFIX_2 */
10960 { VEX_W_TABLE (VEX_W_0F382F_P_2_M_0) },
1afd85e3 10961 },
6c30d220
L
10962 {
10963 /* MOD_VEX_0F385A_PREFIX_2 */
10964 { VEX_LEN_TABLE (VEX_LEN_0F385A_P_2_M_0) },
10965 },
10966 {
10967 /* MOD_VEX_0F388C_PREFIX_2 */
bf890a93 10968 { "vpmaskmov%LW", { XM, Vex, Mx }, 0 },
6c30d220
L
10969 },
10970 {
10971 /* MOD_VEX_0F388E_PREFIX_2 */
bf890a93 10972 { "vpmaskmov%LW", { Mx, Vex, XM }, 0 },
6c30d220 10973 },
ab4e4ed5
AF
10974 {
10975 /* MOD_VEX_W_0_0F3A30_P_2_LEN_0 */
10976 { Bad_Opcode },
10977 { "kshiftrb", { MaskG, MaskR, Ib }, 0 },
10978 },
10979 {
10980 /* MOD_VEX_W_1_0F3A30_P_2_LEN_0 */
10981 { Bad_Opcode },
10982 { "kshiftrw", { MaskG, MaskR, Ib }, 0 },
10983 },
10984 {
10985 /* MOD_VEX_W_0_0F3A31_P_2_LEN_0 */
10986 { Bad_Opcode },
10987 { "kshiftrd", { MaskG, MaskR, Ib }, 0 },
10988 },
10989 {
10990 /* MOD_VEX_W_1_0F3A31_P_2_LEN_0 */
10991 { Bad_Opcode },
10992 { "kshiftrq", { MaskG, MaskR, Ib }, 0 },
10993 },
10994 {
10995 /* MOD_VEX_W_0_0F3A32_P_2_LEN_0 */
10996 { Bad_Opcode },
10997 { "kshiftlb", { MaskG, MaskR, Ib }, 0 },
10998 },
10999 {
11000 /* MOD_VEX_W_1_0F3A32_P_2_LEN_0 */
11001 { Bad_Opcode },
11002 { "kshiftlw", { MaskG, MaskR, Ib }, 0 },
11003 },
11004 {
11005 /* MOD_VEX_W_0_0F3A33_P_2_LEN_0 */
11006 { Bad_Opcode },
11007 { "kshiftld", { MaskG, MaskR, Ib }, 0 },
11008 },
11009 {
11010 /* MOD_VEX_W_1_0F3A33_P_2_LEN_0 */
11011 { Bad_Opcode },
11012 { "kshiftlq", { MaskG, MaskR, Ib }, 0 },
11013 },
43234a1e
L
11014#define NEED_MOD_TABLE
11015#include "i386-dis-evex.h"
11016#undef NEED_MOD_TABLE
b844680a
L
11017};
11018
1ceb70f8 11019static const struct dis386 rm_table[][8] = {
42164a71
L
11020 {
11021 /* RM_C6_REG_7 */
bf890a93 11022 { "xabort", { Skip_MODRM, Ib }, 0 },
42164a71
L
11023 },
11024 {
11025 /* RM_C7_REG_7 */
bf890a93 11026 { "xbeginT", { Skip_MODRM, Jv }, 0 },
42164a71 11027 },
b844680a 11028 {
1ceb70f8 11029 /* RM_0F01_REG_0 */
a4e78aa5 11030 { "enclv", { Skip_MODRM }, 0 },
bf890a93
IT
11031 { "vmcall", { Skip_MODRM }, 0 },
11032 { "vmlaunch", { Skip_MODRM }, 0 },
11033 { "vmresume", { Skip_MODRM }, 0 },
11034 { "vmxoff", { Skip_MODRM }, 0 },
be3a8dca 11035 { "pconfig", { Skip_MODRM }, 0 },
b844680a
L
11036 },
11037 {
1ceb70f8 11038 /* RM_0F01_REG_1 */
bf890a93
IT
11039 { "monitor", { { OP_Monitor, 0 } }, 0 },
11040 { "mwait", { { OP_Mwait, 0 } }, 0 },
11041 { "clac", { Skip_MODRM }, 0 },
11042 { "stac", { Skip_MODRM }, 0 },
2cf200a4
IT
11043 { Bad_Opcode },
11044 { Bad_Opcode },
11045 { Bad_Opcode },
bf890a93 11046 { "encls", { Skip_MODRM }, 0 },
b844680a 11047 },
475a2301
L
11048 {
11049 /* RM_0F01_REG_2 */
bf890a93
IT
11050 { "xgetbv", { Skip_MODRM }, 0 },
11051 { "xsetbv", { Skip_MODRM }, 0 },
8729a6f6
L
11052 { Bad_Opcode },
11053 { Bad_Opcode },
bf890a93
IT
11054 { "vmfunc", { Skip_MODRM }, 0 },
11055 { "xend", { Skip_MODRM }, 0 },
11056 { "xtest", { Skip_MODRM }, 0 },
11057 { "enclu", { Skip_MODRM }, 0 },
475a2301 11058 },
b844680a 11059 {
1ceb70f8 11060 /* RM_0F01_REG_3 */
bf890a93
IT
11061 { "vmrun", { Skip_MODRM }, 0 },
11062 { "vmmcall", { Skip_MODRM }, 0 },
11063 { "vmload", { Skip_MODRM }, 0 },
11064 { "vmsave", { Skip_MODRM }, 0 },
11065 { "stgi", { Skip_MODRM }, 0 },
11066 { "clgi", { Skip_MODRM }, 0 },
11067 { "skinit", { Skip_MODRM }, 0 },
11068 { "invlpga", { Skip_MODRM }, 0 },
4e7d34a6 11069 },
8eab4136
L
11070 {
11071 /* RM_0F01_REG_5 */
2234eee6 11072 { PREFIX_TABLE (PREFIX_MOD_3_0F01_REG_5_RM_0) },
8eab4136 11073 { Bad_Opcode },
603555e5 11074 { PREFIX_TABLE (PREFIX_MOD_3_0F01_REG_5_RM_2) },
8eab4136
L
11075 { Bad_Opcode },
11076 { Bad_Opcode },
11077 { Bad_Opcode },
11078 { "rdpkru", { Skip_MODRM }, 0 },
11079 { "wrpkru", { Skip_MODRM }, 0 },
11080 },
4e7d34a6 11081 {
1ceb70f8 11082 /* RM_0F01_REG_7 */
bf890a93
IT
11083 { "swapgs", { Skip_MODRM }, 0 },
11084 { "rdtscp", { Skip_MODRM }, 0 },
9916071f
AP
11085 { "monitorx", { { OP_Monitor, 0 } }, 0 },
11086 { "mwaitx", { { OP_Mwaitx, 0 } }, 0 },
bf890a93 11087 { "clzero", { Skip_MODRM }, 0 },
b844680a 11088 },
603555e5
L
11089 {
11090 /* RM_0F1E_MOD_3_REG_7 */
11091 { "nopQ", { Ev }, 0 },
11092 { "nopQ", { Ev }, 0 },
11093 { "endbr64", { Skip_MODRM }, PREFIX_OPCODE },
11094 { "endbr32", { Skip_MODRM }, PREFIX_OPCODE },
11095 { "nopQ", { Ev }, 0 },
11096 { "nopQ", { Ev }, 0 },
11097 { "nopQ", { Ev }, 0 },
11098 { "nopQ", { Ev }, 0 },
11099 },
b844680a 11100 {
1ceb70f8 11101 /* RM_0FAE_REG_6 */
bf890a93 11102 { "mfence", { Skip_MODRM }, 0 },
b844680a 11103 },
bbedc832 11104 {
1ceb70f8 11105 /* RM_0FAE_REG_7 */
b5cefcca
L
11106 { "sfence", { Skip_MODRM }, 0 },
11107
144c41d9 11108 },
b844680a
L
11109};
11110
c608c12e
AM
11111#define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")
11112
f16cd0d5
L
11113/* We use the high bit to indicate different name for the same
11114 prefix. */
f16cd0d5 11115#define REP_PREFIX (0xf3 | 0x100)
42164a71
L
11116#define XACQUIRE_PREFIX (0xf2 | 0x200)
11117#define XRELEASE_PREFIX (0xf3 | 0x400)
7e8b059b 11118#define BND_PREFIX (0xf2 | 0x400)
04ef582a 11119#define NOTRACK_PREFIX (0x3e | 0x100)
f16cd0d5
L
11120
11121static int
26ca5450 11122ckprefix (void)
252b5132 11123{
f16cd0d5 11124 int newrex, i, length;
52b15da3 11125 rex = 0;
c0f3af97 11126 rex_ignored = 0;
252b5132 11127 prefixes = 0;
7d421014 11128 used_prefixes = 0;
52b15da3 11129 rex_used = 0;
f16cd0d5
L
11130 last_lock_prefix = -1;
11131 last_repz_prefix = -1;
11132 last_repnz_prefix = -1;
11133 last_data_prefix = -1;
11134 last_addr_prefix = -1;
11135 last_rex_prefix = -1;
11136 last_seg_prefix = -1;
d9949a36 11137 fwait_prefix = -1;
285ca992 11138 active_seg_prefix = 0;
f310f33d
L
11139 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
11140 all_prefixes[i] = 0;
11141 i = 0;
f16cd0d5
L
11142 length = 0;
11143 /* The maximum instruction length is 15bytes. */
11144 while (length < MAX_CODE_LENGTH - 1)
252b5132
RH
11145 {
11146 FETCH_DATA (the_info, codep + 1);
52b15da3 11147 newrex = 0;
252b5132
RH
11148 switch (*codep)
11149 {
52b15da3
JH
11150 /* REX prefixes family. */
11151 case 0x40:
11152 case 0x41:
11153 case 0x42:
11154 case 0x43:
11155 case 0x44:
11156 case 0x45:
11157 case 0x46:
11158 case 0x47:
11159 case 0x48:
11160 case 0x49:
11161 case 0x4a:
11162 case 0x4b:
11163 case 0x4c:
11164 case 0x4d:
11165 case 0x4e:
11166 case 0x4f:
f16cd0d5
L
11167 if (address_mode == mode_64bit)
11168 newrex = *codep;
11169 else
11170 return 1;
11171 last_rex_prefix = i;
52b15da3 11172 break;
252b5132
RH
11173 case 0xf3:
11174 prefixes |= PREFIX_REPZ;
f16cd0d5 11175 last_repz_prefix = i;
252b5132
RH
11176 break;
11177 case 0xf2:
11178 prefixes |= PREFIX_REPNZ;
f16cd0d5 11179 last_repnz_prefix = i;
252b5132
RH
11180 break;
11181 case 0xf0:
11182 prefixes |= PREFIX_LOCK;
f16cd0d5 11183 last_lock_prefix = i;
252b5132
RH
11184 break;
11185 case 0x2e:
11186 prefixes |= PREFIX_CS;
f16cd0d5 11187 last_seg_prefix = i;
285ca992 11188 active_seg_prefix = PREFIX_CS;
252b5132
RH
11189 break;
11190 case 0x36:
11191 prefixes |= PREFIX_SS;
f16cd0d5 11192 last_seg_prefix = i;
285ca992 11193 active_seg_prefix = PREFIX_SS;
252b5132
RH
11194 break;
11195 case 0x3e:
11196 prefixes |= PREFIX_DS;
f16cd0d5 11197 last_seg_prefix = i;
285ca992 11198 active_seg_prefix = PREFIX_DS;
252b5132
RH
11199 break;
11200 case 0x26:
11201 prefixes |= PREFIX_ES;
f16cd0d5 11202 last_seg_prefix = i;
285ca992 11203 active_seg_prefix = PREFIX_ES;
252b5132
RH
11204 break;
11205 case 0x64:
11206 prefixes |= PREFIX_FS;
f16cd0d5 11207 last_seg_prefix = i;
285ca992 11208 active_seg_prefix = PREFIX_FS;
252b5132
RH
11209 break;
11210 case 0x65:
11211 prefixes |= PREFIX_GS;
f16cd0d5 11212 last_seg_prefix = i;
285ca992 11213 active_seg_prefix = PREFIX_GS;
252b5132
RH
11214 break;
11215 case 0x66:
11216 prefixes |= PREFIX_DATA;
f16cd0d5 11217 last_data_prefix = i;
252b5132
RH
11218 break;
11219 case 0x67:
11220 prefixes |= PREFIX_ADDR;
f16cd0d5 11221 last_addr_prefix = i;
252b5132 11222 break;
5076851f 11223 case FWAIT_OPCODE:
252b5132
RH
11224 /* fwait is really an instruction. If there are prefixes
11225 before the fwait, they belong to the fwait, *not* to the
11226 following instruction. */
d9949a36 11227 fwait_prefix = i;
3e7d61b2 11228 if (prefixes || rex)
252b5132
RH
11229 {
11230 prefixes |= PREFIX_FWAIT;
11231 codep++;
6c067bbb
RM
11232 /* This ensures that the previous REX prefixes are noticed
11233 as unused prefixes, as in the return case below. */
11234 rex_used = rex;
f16cd0d5 11235 return 1;
252b5132
RH
11236 }
11237 prefixes = PREFIX_FWAIT;
11238 break;
11239 default:
f16cd0d5 11240 return 1;
252b5132 11241 }
52b15da3
JH
11242 /* Rex is ignored when followed by another prefix. */
11243 if (rex)
11244 {
3e7d61b2 11245 rex_used = rex;
f16cd0d5 11246 return 1;
52b15da3 11247 }
f16cd0d5 11248 if (*codep != FWAIT_OPCODE)
4e9ac44a 11249 all_prefixes[i++] = *codep;
52b15da3 11250 rex = newrex;
252b5132 11251 codep++;
f16cd0d5
L
11252 length++;
11253 }
11254 return 0;
11255}
11256
7d421014
ILT
11257/* Return the name of the prefix byte PREF, or NULL if PREF is not a
11258 prefix byte. */
11259
11260static const char *
26ca5450 11261prefix_name (int pref, int sizeflag)
7d421014 11262{
0003779b
L
11263 static const char *rexes [16] =
11264 {
11265 "rex", /* 0x40 */
11266 "rex.B", /* 0x41 */
11267 "rex.X", /* 0x42 */
11268 "rex.XB", /* 0x43 */
11269 "rex.R", /* 0x44 */
11270 "rex.RB", /* 0x45 */
11271 "rex.RX", /* 0x46 */
11272 "rex.RXB", /* 0x47 */
11273 "rex.W", /* 0x48 */
11274 "rex.WB", /* 0x49 */
11275 "rex.WX", /* 0x4a */
11276 "rex.WXB", /* 0x4b */
11277 "rex.WR", /* 0x4c */
11278 "rex.WRB", /* 0x4d */
11279 "rex.WRX", /* 0x4e */
11280 "rex.WRXB", /* 0x4f */
11281 };
11282
7d421014
ILT
11283 switch (pref)
11284 {
52b15da3
JH
11285 /* REX prefixes family. */
11286 case 0x40:
52b15da3 11287 case 0x41:
52b15da3 11288 case 0x42:
52b15da3 11289 case 0x43:
52b15da3 11290 case 0x44:
52b15da3 11291 case 0x45:
52b15da3 11292 case 0x46:
52b15da3 11293 case 0x47:
52b15da3 11294 case 0x48:
52b15da3 11295 case 0x49:
52b15da3 11296 case 0x4a:
52b15da3 11297 case 0x4b:
52b15da3 11298 case 0x4c:
52b15da3 11299 case 0x4d:
52b15da3 11300 case 0x4e:
52b15da3 11301 case 0x4f:
0003779b 11302 return rexes [pref - 0x40];
7d421014
ILT
11303 case 0xf3:
11304 return "repz";
11305 case 0xf2:
11306 return "repnz";
11307 case 0xf0:
11308 return "lock";
11309 case 0x2e:
11310 return "cs";
11311 case 0x36:
11312 return "ss";
11313 case 0x3e:
11314 return "ds";
11315 case 0x26:
11316 return "es";
11317 case 0x64:
11318 return "fs";
11319 case 0x65:
11320 return "gs";
11321 case 0x66:
11322 return (sizeflag & DFLAG) ? "data16" : "data32";
11323 case 0x67:
cb712a9e 11324 if (address_mode == mode_64bit)
db6eb5be 11325 return (sizeflag & AFLAG) ? "addr32" : "addr64";
c1a64871 11326 else
2888cb7a 11327 return (sizeflag & AFLAG) ? "addr16" : "addr32";
7d421014
ILT
11328 case FWAIT_OPCODE:
11329 return "fwait";
f16cd0d5
L
11330 case REP_PREFIX:
11331 return "rep";
42164a71
L
11332 case XACQUIRE_PREFIX:
11333 return "xacquire";
11334 case XRELEASE_PREFIX:
11335 return "xrelease";
7e8b059b
L
11336 case BND_PREFIX:
11337 return "bnd";
04ef582a
L
11338 case NOTRACK_PREFIX:
11339 return "notrack";
7d421014
ILT
11340 default:
11341 return NULL;
11342 }
11343}
11344
ce518a5f
L
11345static char op_out[MAX_OPERANDS][100];
11346static int op_ad, op_index[MAX_OPERANDS];
1d9f512f 11347static int two_source_ops;
ce518a5f
L
11348static bfd_vma op_address[MAX_OPERANDS];
11349static bfd_vma op_riprel[MAX_OPERANDS];
52b15da3 11350static bfd_vma start_pc;
ce518a5f 11351
252b5132
RH
11352/*
11353 * On the 386's of 1988, the maximum length of an instruction is 15 bytes.
11354 * (see topic "Redundant prefixes" in the "Differences from 8086"
11355 * section of the "Virtual 8086 Mode" chapter.)
11356 * 'pc' should be the address of this instruction, it will
11357 * be used to print the target address if this is a relative jump or call
11358 * The function returns the length of this instruction in bytes.
11359 */
11360
252b5132 11361static char intel_syntax;
9d141669 11362static char intel_mnemonic = !SYSV386_COMPAT;
252b5132
RH
11363static char open_char;
11364static char close_char;
11365static char separator_char;
11366static char scale_char;
11367
5db04b09
L
11368enum x86_64_isa
11369{
11370 amd64 = 0,
11371 intel64
11372};
11373
11374static enum x86_64_isa isa64;
11375
e396998b
AM
11376/* Here for backwards compatibility. When gdb stops using
11377 print_insn_i386_att and print_insn_i386_intel these functions can
11378 disappear, and print_insn_i386 be merged into print_insn. */
252b5132 11379int
26ca5450 11380print_insn_i386_att (bfd_vma pc, disassemble_info *info)
252b5132
RH
11381{
11382 intel_syntax = 0;
e396998b
AM
11383
11384 return print_insn (pc, info);
252b5132
RH
11385}
11386
11387int
26ca5450 11388print_insn_i386_intel (bfd_vma pc, disassemble_info *info)
252b5132
RH
11389{
11390 intel_syntax = 1;
e396998b
AM
11391
11392 return print_insn (pc, info);
252b5132
RH
11393}
11394
e396998b 11395int
26ca5450 11396print_insn_i386 (bfd_vma pc, disassemble_info *info)
e396998b
AM
11397{
11398 intel_syntax = -1;
11399
11400 return print_insn (pc, info);
11401}
11402
f59a29b9
L
11403void
11404print_i386_disassembler_options (FILE *stream)
11405{
11406 fprintf (stream, _("\n\
11407The following i386/x86-64 specific disassembler options are supported for use\n\
11408with the -M switch (multiple options should be separated by commas):\n"));
11409
11410 fprintf (stream, _(" x86-64 Disassemble in 64bit mode\n"));
11411 fprintf (stream, _(" i386 Disassemble in 32bit mode\n"));
11412 fprintf (stream, _(" i8086 Disassemble in 16bit mode\n"));
11413 fprintf (stream, _(" att Display instruction in AT&T syntax\n"));
11414 fprintf (stream, _(" intel Display instruction in Intel syntax\n"));
9d141669
L
11415 fprintf (stream, _(" att-mnemonic\n"
11416 " Display instruction in AT&T mnemonic\n"));
11417 fprintf (stream, _(" intel-mnemonic\n"
11418 " Display instruction in Intel mnemonic\n"));
f59a29b9
L
11419 fprintf (stream, _(" addr64 Assume 64bit address size\n"));
11420 fprintf (stream, _(" addr32 Assume 32bit address size\n"));
11421 fprintf (stream, _(" addr16 Assume 16bit address size\n"));
11422 fprintf (stream, _(" data32 Assume 32bit data size\n"));
11423 fprintf (stream, _(" data16 Assume 16bit data size\n"));
11424 fprintf (stream, _(" suffix Always display instruction suffix in AT&T syntax\n"));
5db04b09
L
11425 fprintf (stream, _(" amd64 Display instruction in AMD64 ISA\n"));
11426 fprintf (stream, _(" intel64 Display instruction in Intel64 ISA\n"));
f59a29b9
L
11427}
11428
592d1631 11429/* Bad opcode. */
bf890a93 11430static const struct dis386 bad_opcode = { "(bad)", { XX }, 0 };
592d1631 11431
b844680a
L
11432/* Get a pointer to struct dis386 with a valid name. */
11433
11434static const struct dis386 *
8bb15339 11435get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
b844680a 11436{
91d6fa6a 11437 int vindex, vex_table_index;
b844680a
L
11438
11439 if (dp->name != NULL)
11440 return dp;
11441
11442 switch (dp->op[0].bytemode)
11443 {
1ceb70f8
L
11444 case USE_REG_TABLE:
11445 dp = &reg_table[dp->op[1].bytemode][modrm.reg];
11446 break;
11447
11448 case USE_MOD_TABLE:
91d6fa6a
NC
11449 vindex = modrm.mod == 0x3 ? 1 : 0;
11450 dp = &mod_table[dp->op[1].bytemode][vindex];
1ceb70f8
L
11451 break;
11452
11453 case USE_RM_TABLE:
11454 dp = &rm_table[dp->op[1].bytemode][modrm.rm];
b844680a
L
11455 break;
11456
4e7d34a6 11457 case USE_PREFIX_TABLE:
c0f3af97 11458 if (need_vex)
b844680a 11459 {
c0f3af97
L
11460 /* The prefix in VEX is implicit. */
11461 switch (vex.prefix)
11462 {
11463 case 0:
91d6fa6a 11464 vindex = 0;
c0f3af97
L
11465 break;
11466 case REPE_PREFIX_OPCODE:
91d6fa6a 11467 vindex = 1;
c0f3af97
L
11468 break;
11469 case DATA_PREFIX_OPCODE:
91d6fa6a 11470 vindex = 2;
c0f3af97
L
11471 break;
11472 case REPNE_PREFIX_OPCODE:
91d6fa6a 11473 vindex = 3;
c0f3af97
L
11474 break;
11475 default:
11476 abort ();
11477 break;
11478 }
b844680a 11479 }
7bb15c6f 11480 else
b844680a 11481 {
285ca992
L
11482 int last_prefix = -1;
11483 int prefix = 0;
91d6fa6a 11484 vindex = 0;
285ca992
L
11485 /* We check PREFIX_REPNZ and PREFIX_REPZ before PREFIX_DATA.
11486 When there are multiple PREFIX_REPNZ and PREFIX_REPZ, the
11487 last one wins. */
11488 if ((prefixes & (PREFIX_REPZ | PREFIX_REPNZ)) != 0)
b844680a 11489 {
285ca992 11490 if (last_repz_prefix > last_repnz_prefix)
c0f3af97 11491 {
285ca992
L
11492 vindex = 1;
11493 prefix = PREFIX_REPZ;
11494 last_prefix = last_repz_prefix;
c0f3af97
L
11495 }
11496 else
b844680a 11497 {
285ca992
L
11498 vindex = 3;
11499 prefix = PREFIX_REPNZ;
11500 last_prefix = last_repnz_prefix;
b844680a 11501 }
285ca992 11502
507bd325
L
11503 /* Check if prefix should be ignored. */
11504 if ((((prefix_table[dp->op[1].bytemode][vindex].prefix_requirement
11505 & PREFIX_IGNORED) >> PREFIX_IGNORED_SHIFT)
11506 & prefix) != 0)
285ca992
L
11507 vindex = 0;
11508 }
11509
11510 if (vindex == 0 && (prefixes & PREFIX_DATA) != 0)
11511 {
11512 vindex = 2;
11513 prefix = PREFIX_DATA;
11514 last_prefix = last_data_prefix;
11515 }
11516
11517 if (vindex != 0)
11518 {
11519 used_prefixes |= prefix;
11520 all_prefixes[last_prefix] = 0;
b844680a
L
11521 }
11522 }
91d6fa6a 11523 dp = &prefix_table[dp->op[1].bytemode][vindex];
b844680a
L
11524 break;
11525
4e7d34a6 11526 case USE_X86_64_TABLE:
91d6fa6a
NC
11527 vindex = address_mode == mode_64bit ? 1 : 0;
11528 dp = &x86_64_table[dp->op[1].bytemode][vindex];
b844680a
L
11529 break;
11530
4e7d34a6 11531 case USE_3BYTE_TABLE:
8bb15339 11532 FETCH_DATA (info, codep + 2);
91d6fa6a
NC
11533 vindex = *codep++;
11534 dp = &three_byte_table[dp->op[1].bytemode][vindex];
285ca992 11535 end_codep = codep;
8bb15339
L
11536 modrm.mod = (*codep >> 6) & 3;
11537 modrm.reg = (*codep >> 3) & 7;
11538 modrm.rm = *codep & 7;
11539 break;
11540
c0f3af97
L
11541 case USE_VEX_LEN_TABLE:
11542 if (!need_vex)
11543 abort ();
11544
11545 switch (vex.length)
11546 {
11547 case 128:
91d6fa6a 11548 vindex = 0;
c0f3af97
L
11549 break;
11550 case 256:
91d6fa6a 11551 vindex = 1;
c0f3af97
L
11552 break;
11553 default:
11554 abort ();
11555 break;
11556 }
11557
91d6fa6a 11558 dp = &vex_len_table[dp->op[1].bytemode][vindex];
c0f3af97
L
11559 break;
11560
04e2a182
L
11561 case USE_EVEX_LEN_TABLE:
11562 if (!vex.evex)
11563 abort ();
11564
11565 switch (vex.length)
11566 {
11567 case 128:
11568 vindex = 0;
11569 break;
11570 case 256:
11571 vindex = 1;
11572 break;
11573 case 512:
11574 vindex = 2;
11575 break;
11576 default:
11577 abort ();
11578 break;
11579 }
11580
11581 dp = &evex_len_table[dp->op[1].bytemode][vindex];
11582 break;
11583
f88c9eb0
SP
11584 case USE_XOP_8F_TABLE:
11585 FETCH_DATA (info, codep + 3);
11586 /* All bits in the REX prefix are ignored. */
11587 rex_ignored = rex;
11588 rex = ~(*codep >> 5) & 0x7;
11589
11590 /* VEX_TABLE_INDEX is the mmmmm part of the XOP byte 1 "RCB.mmmmm". */
11591 switch ((*codep & 0x1f))
11592 {
11593 default:
f07af43e
L
11594 dp = &bad_opcode;
11595 return dp;
5dd85c99
SP
11596 case 0x8:
11597 vex_table_index = XOP_08;
11598 break;
f88c9eb0
SP
11599 case 0x9:
11600 vex_table_index = XOP_09;
11601 break;
11602 case 0xa:
11603 vex_table_index = XOP_0A;
11604 break;
11605 }
11606 codep++;
11607 vex.w = *codep & 0x80;
11608 if (vex.w && address_mode == mode_64bit)
11609 rex |= REX_W;
11610
11611 vex.register_specifier = (~(*codep >> 3)) & 0xf;
abfcb414 11612 if (address_mode != mode_64bit)
f07af43e 11613 {
abfcb414
AP
11614 /* In 16/32-bit mode REX_B is silently ignored. */
11615 rex &= ~REX_B;
f07af43e 11616 }
f88c9eb0
SP
11617
11618 vex.length = (*codep & 0x4) ? 256 : 128;
11619 switch ((*codep & 0x3))
11620 {
11621 case 0:
f88c9eb0
SP
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 = &xop_table[vex_table_index][vindex];
c48244a5 11638
285ca992 11639 end_codep = codep;
c48244a5
SP
11640 FETCH_DATA (info, codep + 1);
11641 modrm.mod = (*codep >> 6) & 3;
11642 modrm.reg = (*codep >> 3) & 7;
11643 modrm.rm = *codep & 7;
f88c9eb0
SP
11644 break;
11645
c0f3af97 11646 case USE_VEX_C4_TABLE:
43234a1e 11647 /* VEX prefix. */
c0f3af97
L
11648 FETCH_DATA (info, codep + 3);
11649 /* All bits in the REX prefix are ignored. */
11650 rex_ignored = rex;
11651 rex = ~(*codep >> 5) & 0x7;
11652 switch ((*codep & 0x1f))
11653 {
11654 default:
f07af43e
L
11655 dp = &bad_opcode;
11656 return dp;
c0f3af97 11657 case 0x1:
f88c9eb0 11658 vex_table_index = VEX_0F;
c0f3af97
L
11659 break;
11660 case 0x2:
f88c9eb0 11661 vex_table_index = VEX_0F38;
c0f3af97
L
11662 break;
11663 case 0x3:
f88c9eb0 11664 vex_table_index = VEX_0F3A;
c0f3af97
L
11665 break;
11666 }
11667 codep++;
11668 vex.w = *codep & 0x80;
9889cbb1 11669 if (address_mode == mode_64bit)
f07af43e 11670 {
9889cbb1
L
11671 if (vex.w)
11672 rex |= REX_W;
9889cbb1
L
11673 }
11674 else
11675 {
11676 /* For the 3-byte VEX prefix in 32-bit mode, the REX_B bit
11677 is ignored, other REX bits are 0 and the highest bit in
5f847646 11678 VEX.vvvv is also ignored (but we mustn't clear it here). */
9889cbb1 11679 rex = 0;
f07af43e 11680 }
5f847646 11681 vex.register_specifier = (~(*codep >> 3)) & 0xf;
c0f3af97
L
11682 vex.length = (*codep & 0x4) ? 256 : 128;
11683 switch ((*codep & 0x3))
11684 {
11685 case 0:
c0f3af97
L
11686 break;
11687 case 1:
11688 vex.prefix = DATA_PREFIX_OPCODE;
11689 break;
11690 case 2:
11691 vex.prefix = REPE_PREFIX_OPCODE;
11692 break;
11693 case 3:
11694 vex.prefix = REPNE_PREFIX_OPCODE;
11695 break;
11696 }
11697 need_vex = 1;
11698 need_vex_reg = 1;
11699 codep++;
91d6fa6a
NC
11700 vindex = *codep++;
11701 dp = &vex_table[vex_table_index][vindex];
285ca992 11702 end_codep = codep;
53c4d625
JB
11703 /* There is no MODRM byte for VEX0F 77. */
11704 if (vex_table_index != VEX_0F || vindex != 0x77)
c0f3af97
L
11705 {
11706 FETCH_DATA (info, codep + 1);
11707 modrm.mod = (*codep >> 6) & 3;
11708 modrm.reg = (*codep >> 3) & 7;
11709 modrm.rm = *codep & 7;
11710 }
11711 break;
11712
11713 case USE_VEX_C5_TABLE:
43234a1e 11714 /* VEX prefix. */
c0f3af97
L
11715 FETCH_DATA (info, codep + 2);
11716 /* All bits in the REX prefix are ignored. */
11717 rex_ignored = rex;
11718 rex = (*codep & 0x80) ? 0 : REX_R;
11719
9889cbb1
L
11720 /* For the 2-byte VEX prefix in 32-bit mode, the highest bit in
11721 VEX.vvvv is 1. */
c0f3af97 11722 vex.register_specifier = (~(*codep >> 3)) & 0xf;
c0f3af97
L
11723 vex.length = (*codep & 0x4) ? 256 : 128;
11724 switch ((*codep & 0x3))
11725 {
11726 case 0:
c0f3af97
L
11727 break;
11728 case 1:
11729 vex.prefix = DATA_PREFIX_OPCODE;
11730 break;
11731 case 2:
11732 vex.prefix = REPE_PREFIX_OPCODE;
11733 break;
11734 case 3:
11735 vex.prefix = REPNE_PREFIX_OPCODE;
11736 break;
11737 }
11738 need_vex = 1;
11739 need_vex_reg = 1;
11740 codep++;
91d6fa6a
NC
11741 vindex = *codep++;
11742 dp = &vex_table[dp->op[1].bytemode][vindex];
285ca992 11743 end_codep = codep;
53c4d625
JB
11744 /* There is no MODRM byte for VEX 77. */
11745 if (vindex != 0x77)
c0f3af97
L
11746 {
11747 FETCH_DATA (info, codep + 1);
11748 modrm.mod = (*codep >> 6) & 3;
11749 modrm.reg = (*codep >> 3) & 7;
11750 modrm.rm = *codep & 7;
11751 }
11752 break;
11753
9e30b8e0
L
11754 case USE_VEX_W_TABLE:
11755 if (!need_vex)
11756 abort ();
11757
11758 dp = &vex_w_table[dp->op[1].bytemode][vex.w ? 1 : 0];
11759 break;
11760
43234a1e
L
11761 case USE_EVEX_TABLE:
11762 two_source_ops = 0;
11763 /* EVEX prefix. */
11764 vex.evex = 1;
11765 FETCH_DATA (info, codep + 4);
11766 /* All bits in the REX prefix are ignored. */
11767 rex_ignored = rex;
11768 /* The first byte after 0x62. */
11769 rex = ~(*codep >> 5) & 0x7;
11770 vex.r = *codep & 0x10;
11771 switch ((*codep & 0xf))
11772 {
11773 default:
11774 return &bad_opcode;
11775 case 0x1:
11776 vex_table_index = EVEX_0F;
11777 break;
11778 case 0x2:
11779 vex_table_index = EVEX_0F38;
11780 break;
11781 case 0x3:
11782 vex_table_index = EVEX_0F3A;
11783 break;
11784 }
11785
11786 /* The second byte after 0x62. */
11787 codep++;
11788 vex.w = *codep & 0x80;
11789 if (vex.w && address_mode == mode_64bit)
11790 rex |= REX_W;
11791
11792 vex.register_specifier = (~(*codep >> 3)) & 0xf;
43234a1e
L
11793
11794 /* The U bit. */
11795 if (!(*codep & 0x4))
11796 return &bad_opcode;
11797
11798 switch ((*codep & 0x3))
11799 {
11800 case 0:
43234a1e
L
11801 break;
11802 case 1:
11803 vex.prefix = DATA_PREFIX_OPCODE;
11804 break;
11805 case 2:
11806 vex.prefix = REPE_PREFIX_OPCODE;
11807 break;
11808 case 3:
11809 vex.prefix = REPNE_PREFIX_OPCODE;
11810 break;
11811 }
11812
11813 /* The third byte after 0x62. */
11814 codep++;
11815
11816 /* Remember the static rounding bits. */
11817 vex.ll = (*codep >> 5) & 3;
11818 vex.b = (*codep & 0x10) != 0;
11819
11820 vex.v = *codep & 0x8;
11821 vex.mask_register_specifier = *codep & 0x7;
11822 vex.zeroing = *codep & 0x80;
11823
5f847646
JB
11824 if (address_mode != mode_64bit)
11825 {
11826 /* In 16/32-bit mode silently ignore following bits. */
11827 rex &= ~REX_B;
11828 vex.r = 1;
11829 vex.v = 1;
11830 }
11831
43234a1e
L
11832 need_vex = 1;
11833 need_vex_reg = 1;
11834 codep++;
11835 vindex = *codep++;
11836 dp = &evex_table[vex_table_index][vindex];
285ca992 11837 end_codep = codep;
43234a1e
L
11838 FETCH_DATA (info, codep + 1);
11839 modrm.mod = (*codep >> 6) & 3;
11840 modrm.reg = (*codep >> 3) & 7;
11841 modrm.rm = *codep & 7;
11842
11843 /* Set vector length. */
11844 if (modrm.mod == 3 && vex.b)
11845 vex.length = 512;
11846 else
11847 {
11848 switch (vex.ll)
11849 {
11850 case 0x0:
11851 vex.length = 128;
11852 break;
11853 case 0x1:
11854 vex.length = 256;
11855 break;
11856 case 0x2:
11857 vex.length = 512;
11858 break;
11859 default:
11860 return &bad_opcode;
11861 }
11862 }
11863 break;
11864
592d1631
L
11865 case 0:
11866 dp = &bad_opcode;
11867 break;
11868
b844680a 11869 default:
d34b5006 11870 abort ();
b844680a
L
11871 }
11872
11873 if (dp->name != NULL)
11874 return dp;
11875 else
8bb15339 11876 return get_valid_dis386 (dp, info);
b844680a
L
11877}
11878
dfc8cf43 11879static void
55cf16e1 11880get_sib (disassemble_info *info, int sizeflag)
dfc8cf43
L
11881{
11882 /* If modrm.mod == 3, operand must be register. */
11883 if (need_modrm
55cf16e1 11884 && ((sizeflag & AFLAG) || address_mode == mode_64bit)
dfc8cf43
L
11885 && modrm.mod != 3
11886 && modrm.rm == 4)
11887 {
11888 FETCH_DATA (info, codep + 2);
11889 sib.index = (codep [1] >> 3) & 7;
11890 sib.scale = (codep [1] >> 6) & 3;
11891 sib.base = codep [1] & 7;
11892 }
11893}
11894
e396998b 11895static int
26ca5450 11896print_insn (bfd_vma pc, disassemble_info *info)
252b5132 11897{
2da11e11 11898 const struct dis386 *dp;
252b5132 11899 int i;
ce518a5f 11900 char *op_txt[MAX_OPERANDS];
252b5132 11901 int needcomma;
df18fdba 11902 int sizeflag, orig_sizeflag;
e396998b 11903 const char *p;
252b5132 11904 struct dis_private priv;
f16cd0d5 11905 int prefix_length;
252b5132 11906
d7921315
L
11907 priv.orig_sizeflag = AFLAG | DFLAG;
11908 if ((info->mach & bfd_mach_i386_i386) != 0)
cb712a9e 11909 address_mode = mode_32bit;
2da11e11 11910 else if (info->mach == bfd_mach_i386_i8086)
d7921315
L
11911 {
11912 address_mode = mode_16bit;
11913 priv.orig_sizeflag = 0;
11914 }
2da11e11 11915 else
d7921315
L
11916 address_mode = mode_64bit;
11917
11918 if (intel_syntax == (char) -1)
11919 intel_syntax = (info->mach & bfd_mach_i386_intel_syntax) != 0;
e396998b
AM
11920
11921 for (p = info->disassembler_options; p != NULL; )
11922 {
5db04b09
L
11923 if (CONST_STRNEQ (p, "amd64"))
11924 isa64 = amd64;
11925 else if (CONST_STRNEQ (p, "intel64"))
11926 isa64 = intel64;
11927 else if (CONST_STRNEQ (p, "x86-64"))
e396998b 11928 {
cb712a9e 11929 address_mode = mode_64bit;
e396998b
AM
11930 priv.orig_sizeflag = AFLAG | DFLAG;
11931 }
0112cd26 11932 else if (CONST_STRNEQ (p, "i386"))
e396998b 11933 {
cb712a9e 11934 address_mode = mode_32bit;
e396998b
AM
11935 priv.orig_sizeflag = AFLAG | DFLAG;
11936 }
0112cd26 11937 else if (CONST_STRNEQ (p, "i8086"))
e396998b 11938 {
cb712a9e 11939 address_mode = mode_16bit;
e396998b
AM
11940 priv.orig_sizeflag = 0;
11941 }
0112cd26 11942 else if (CONST_STRNEQ (p, "intel"))
e396998b
AM
11943 {
11944 intel_syntax = 1;
9d141669
L
11945 if (CONST_STRNEQ (p + 5, "-mnemonic"))
11946 intel_mnemonic = 1;
e396998b 11947 }
0112cd26 11948 else if (CONST_STRNEQ (p, "att"))
e396998b
AM
11949 {
11950 intel_syntax = 0;
9d141669
L
11951 if (CONST_STRNEQ (p + 3, "-mnemonic"))
11952 intel_mnemonic = 0;
e396998b 11953 }
0112cd26 11954 else if (CONST_STRNEQ (p, "addr"))
e396998b 11955 {
f59a29b9
L
11956 if (address_mode == mode_64bit)
11957 {
11958 if (p[4] == '3' && p[5] == '2')
11959 priv.orig_sizeflag &= ~AFLAG;
11960 else if (p[4] == '6' && p[5] == '4')
11961 priv.orig_sizeflag |= AFLAG;
11962 }
11963 else
11964 {
11965 if (p[4] == '1' && p[5] == '6')
11966 priv.orig_sizeflag &= ~AFLAG;
11967 else if (p[4] == '3' && p[5] == '2')
11968 priv.orig_sizeflag |= AFLAG;
11969 }
e396998b 11970 }
0112cd26 11971 else if (CONST_STRNEQ (p, "data"))
e396998b
AM
11972 {
11973 if (p[4] == '1' && p[5] == '6')
11974 priv.orig_sizeflag &= ~DFLAG;
11975 else if (p[4] == '3' && p[5] == '2')
11976 priv.orig_sizeflag |= DFLAG;
11977 }
0112cd26 11978 else if (CONST_STRNEQ (p, "suffix"))
e396998b
AM
11979 priv.orig_sizeflag |= SUFFIX_ALWAYS;
11980
11981 p = strchr (p, ',');
11982 if (p != NULL)
11983 p++;
11984 }
11985
c0f92bf9
L
11986 if (address_mode == mode_64bit && sizeof (bfd_vma) < 8)
11987 {
11988 (*info->fprintf_func) (info->stream,
11989 _("64-bit address is disabled"));
11990 return -1;
11991 }
11992
e396998b
AM
11993 if (intel_syntax)
11994 {
11995 names64 = intel_names64;
11996 names32 = intel_names32;
11997 names16 = intel_names16;
11998 names8 = intel_names8;
11999 names8rex = intel_names8rex;
12000 names_seg = intel_names_seg;
b9733481 12001 names_mm = intel_names_mm;
7e8b059b 12002 names_bnd = intel_names_bnd;
b9733481
L
12003 names_xmm = intel_names_xmm;
12004 names_ymm = intel_names_ymm;
43234a1e 12005 names_zmm = intel_names_zmm;
db51cc60
L
12006 index64 = intel_index64;
12007 index32 = intel_index32;
43234a1e 12008 names_mask = intel_names_mask;
e396998b
AM
12009 index16 = intel_index16;
12010 open_char = '[';
12011 close_char = ']';
12012 separator_char = '+';
12013 scale_char = '*';
12014 }
12015 else
12016 {
12017 names64 = att_names64;
12018 names32 = att_names32;
12019 names16 = att_names16;
12020 names8 = att_names8;
12021 names8rex = att_names8rex;
12022 names_seg = att_names_seg;
b9733481 12023 names_mm = att_names_mm;
7e8b059b 12024 names_bnd = att_names_bnd;
b9733481
L
12025 names_xmm = att_names_xmm;
12026 names_ymm = att_names_ymm;
43234a1e 12027 names_zmm = att_names_zmm;
db51cc60
L
12028 index64 = att_index64;
12029 index32 = att_index32;
43234a1e 12030 names_mask = att_names_mask;
e396998b
AM
12031 index16 = att_index16;
12032 open_char = '(';
12033 close_char = ')';
12034 separator_char = ',';
12035 scale_char = ',';
12036 }
2da11e11 12037
4fe53c98 12038 /* The output looks better if we put 7 bytes on a line, since that
8a9036a4
L
12039 puts most long word instructions on a single line. Use 8 bytes
12040 for Intel L1OM. */
d7921315 12041 if ((info->mach & bfd_mach_l1om) != 0)
8a9036a4
L
12042 info->bytes_per_line = 8;
12043 else
12044 info->bytes_per_line = 7;
252b5132 12045
26ca5450 12046 info->private_data = &priv;
252b5132
RH
12047 priv.max_fetched = priv.the_buffer;
12048 priv.insn_start = pc;
252b5132
RH
12049
12050 obuf[0] = 0;
ce518a5f
L
12051 for (i = 0; i < MAX_OPERANDS; ++i)
12052 {
12053 op_out[i][0] = 0;
12054 op_index[i] = -1;
12055 }
252b5132
RH
12056
12057 the_info = info;
12058 start_pc = pc;
e396998b
AM
12059 start_codep = priv.the_buffer;
12060 codep = priv.the_buffer;
252b5132 12061
8df14d78 12062 if (OPCODES_SIGSETJMP (priv.bailout) != 0)
5076851f 12063 {
7d421014
ILT
12064 const char *name;
12065
5076851f 12066 /* Getting here means we tried for data but didn't get it. That
e396998b
AM
12067 means we have an incomplete instruction of some sort. Just
12068 print the first byte as a prefix or a .byte pseudo-op. */
12069 if (codep > priv.the_buffer)
5076851f 12070 {
e396998b 12071 name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
7d421014
ILT
12072 if (name != NULL)
12073 (*info->fprintf_func) (info->stream, "%s", name);
12074 else
5076851f 12075 {
7d421014
ILT
12076 /* Just print the first byte as a .byte instruction. */
12077 (*info->fprintf_func) (info->stream, ".byte 0x%x",
e396998b 12078 (unsigned int) priv.the_buffer[0]);
5076851f 12079 }
5076851f 12080
7d421014 12081 return 1;
5076851f
ILT
12082 }
12083
12084 return -1;
12085 }
12086
52b15da3 12087 obufp = obuf;
f16cd0d5
L
12088 sizeflag = priv.orig_sizeflag;
12089
12090 if (!ckprefix () || rex_used)
12091 {
12092 /* Too many prefixes or unused REX prefixes. */
12093 for (i = 0;
f6dd4781 12094 i < (int) ARRAY_SIZE (all_prefixes) && all_prefixes[i];
f16cd0d5 12095 i++)
de882298 12096 (*info->fprintf_func) (info->stream, "%s%s",
6c067bbb 12097 i == 0 ? "" : " ",
f16cd0d5 12098 prefix_name (all_prefixes[i], sizeflag));
de882298 12099 return i;
f16cd0d5 12100 }
252b5132
RH
12101
12102 insn_codep = codep;
12103
12104 FETCH_DATA (info, codep + 1);
12105 two_source_ops = (*codep == 0x62) || (*codep == 0xc8);
12106
3e7d61b2 12107 if (((prefixes & PREFIX_FWAIT)
f16cd0d5 12108 && ((*codep < 0xd8) || (*codep > 0xdf))))
252b5132 12109 {
86a80a50 12110 /* Handle prefixes before fwait. */
d9949a36 12111 for (i = 0; i < fwait_prefix && all_prefixes[i];
86a80a50
L
12112 i++)
12113 (*info->fprintf_func) (info->stream, "%s ",
12114 prefix_name (all_prefixes[i], sizeflag));
f16cd0d5 12115 (*info->fprintf_func) (info->stream, "fwait");
86a80a50 12116 return i + 1;
252b5132
RH
12117 }
12118
252b5132
RH
12119 if (*codep == 0x0f)
12120 {
eec0f4ca 12121 unsigned char threebyte;
5f40e14d
JS
12122
12123 codep++;
12124 FETCH_DATA (info, codep + 1);
12125 threebyte = *codep;
eec0f4ca 12126 dp = &dis386_twobyte[threebyte];
252b5132 12127 need_modrm = twobyte_has_modrm[*codep];
eec0f4ca 12128 codep++;
252b5132
RH
12129 }
12130 else
12131 {
6439fc28 12132 dp = &dis386[*codep];
252b5132 12133 need_modrm = onebyte_has_modrm[*codep];
eec0f4ca 12134 codep++;
252b5132 12135 }
246c51aa 12136
df18fdba
L
12137 /* Save sizeflag for printing the extra prefixes later before updating
12138 it for mnemonic and operand processing. The prefix names depend
12139 only on the address mode. */
12140 orig_sizeflag = sizeflag;
c608c12e 12141 if (prefixes & PREFIX_ADDR)
df18fdba 12142 sizeflag ^= AFLAG;
b844680a 12143 if ((prefixes & PREFIX_DATA))
df18fdba 12144 sizeflag ^= DFLAG;
3ffd33cf 12145
285ca992 12146 end_codep = codep;
8bb15339 12147 if (need_modrm)
252b5132
RH
12148 {
12149 FETCH_DATA (info, codep + 1);
7967e09e
L
12150 modrm.mod = (*codep >> 6) & 3;
12151 modrm.reg = (*codep >> 3) & 7;
12152 modrm.rm = *codep & 7;
252b5132
RH
12153 }
12154
42d5f9c6
MS
12155 need_vex = 0;
12156 need_vex_reg = 0;
12157 vex_w_done = 0;
caf0678c 12158 memset (&vex, 0, sizeof (vex));
55b126d4 12159
ce518a5f 12160 if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE)
252b5132 12161 {
55cf16e1 12162 get_sib (info, sizeflag);
252b5132
RH
12163 dofloat (sizeflag);
12164 }
12165 else
12166 {
8bb15339 12167 dp = get_valid_dis386 (dp, info);
b844680a 12168 if (dp != NULL && putop (dp->name, sizeflag) == 0)
6c067bbb 12169 {
55cf16e1 12170 get_sib (info, sizeflag);
ce518a5f
L
12171 for (i = 0; i < MAX_OPERANDS; ++i)
12172 {
246c51aa 12173 obufp = op_out[i];
ce518a5f
L
12174 op_ad = MAX_OPERANDS - 1 - i;
12175 if (dp->op[i].rtn)
12176 (*dp->op[i].rtn) (dp->op[i].bytemode, sizeflag);
43234a1e
L
12177 /* For EVEX instruction after the last operand masking
12178 should be printed. */
12179 if (i == 0 && vex.evex)
12180 {
12181 /* Don't print {%k0}. */
12182 if (vex.mask_register_specifier)
12183 {
12184 oappend ("{");
12185 oappend (names_mask[vex.mask_register_specifier]);
12186 oappend ("}");
12187 }
12188 if (vex.zeroing)
12189 oappend ("{z}");
12190 }
ce518a5f 12191 }
6439fc28 12192 }
252b5132
RH
12193 }
12194
d869730d 12195 /* Check if the REX prefix is used. */
e2e6193d 12196 if (rex_ignored == 0 && (rex ^ rex_used) == 0 && last_rex_prefix >= 0)
f16cd0d5
L
12197 all_prefixes[last_rex_prefix] = 0;
12198
5e6718e4 12199 /* Check if the SEG prefix is used. */
f16cd0d5
L
12200 if ((prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS | PREFIX_ES
12201 | PREFIX_FS | PREFIX_GS)) != 0
285ca992 12202 && (used_prefixes & active_seg_prefix) != 0)
f16cd0d5
L
12203 all_prefixes[last_seg_prefix] = 0;
12204
5e6718e4 12205 /* Check if the ADDR prefix is used. */
f16cd0d5
L
12206 if ((prefixes & PREFIX_ADDR) != 0
12207 && (used_prefixes & PREFIX_ADDR) != 0)
12208 all_prefixes[last_addr_prefix] = 0;
12209
df18fdba
L
12210 /* Check if the DATA prefix is used. */
12211 if ((prefixes & PREFIX_DATA) != 0
12212 && (used_prefixes & PREFIX_DATA) != 0)
12213 all_prefixes[last_data_prefix] = 0;
f16cd0d5 12214
df18fdba 12215 /* Print the extra prefixes. */
f16cd0d5 12216 prefix_length = 0;
f310f33d 12217 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
f16cd0d5
L
12218 if (all_prefixes[i])
12219 {
12220 const char *name;
df18fdba 12221 name = prefix_name (all_prefixes[i], orig_sizeflag);
f16cd0d5
L
12222 if (name == NULL)
12223 abort ();
12224 prefix_length += strlen (name) + 1;
12225 (*info->fprintf_func) (info->stream, "%s ", name);
12226 }
b844680a 12227
285ca992
L
12228 /* If the mandatory PREFIX_REPZ/PREFIX_REPNZ/PREFIX_DATA prefix is
12229 unused, opcode is invalid. Since the PREFIX_DATA prefix may be
12230 used by putop and MMX/SSE operand and may be overriden by the
12231 PREFIX_REPZ/PREFIX_REPNZ fix, we check the PREFIX_DATA prefix
12232 separately. */
3888916d 12233 if (dp->prefix_requirement == PREFIX_OPCODE
285ca992
L
12234 && dp != &bad_opcode
12235 && (((prefixes
12236 & (PREFIX_REPZ | PREFIX_REPNZ)) != 0
12237 && (used_prefixes
12238 & (PREFIX_REPZ | PREFIX_REPNZ)) == 0)
12239 || ((((prefixes
12240 & (PREFIX_REPZ | PREFIX_REPNZ | PREFIX_DATA))
12241 == PREFIX_DATA)
12242 && (used_prefixes & PREFIX_DATA) == 0))))
12243 {
12244 (*info->fprintf_func) (info->stream, "(bad)");
12245 return end_codep - priv.the_buffer;
12246 }
12247
f16cd0d5
L
12248 /* Check maximum code length. */
12249 if ((codep - start_codep) > MAX_CODE_LENGTH)
12250 {
12251 (*info->fprintf_func) (info->stream, "(bad)");
12252 return MAX_CODE_LENGTH;
12253 }
b844680a 12254
ea397f5b 12255 obufp = mnemonicendp;
f16cd0d5 12256 for (i = strlen (obuf) + prefix_length; i < 6; i++)
252b5132
RH
12257 oappend (" ");
12258 oappend (" ");
12259 (*info->fprintf_func) (info->stream, "%s", obuf);
12260
12261 /* The enter and bound instructions are printed with operands in the same
12262 order as the intel book; everything else is printed in reverse order. */
2da11e11 12263 if (intel_syntax || two_source_ops)
252b5132 12264 {
185b1163
L
12265 bfd_vma riprel;
12266
ce518a5f 12267 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 12268 op_txt[i] = op_out[i];
246c51aa 12269
3a8547d2
JB
12270 if (intel_syntax && dp && dp->op[2].rtn == OP_Rounding
12271 && dp->op[3].rtn == OP_E && dp->op[4].rtn == NULL)
12272 {
12273 op_txt[2] = op_out[3];
12274 op_txt[3] = op_out[2];
12275 }
12276
ce518a5f
L
12277 for (i = 0; i < (MAX_OPERANDS >> 1); ++i)
12278 {
6c067bbb
RM
12279 op_ad = op_index[i];
12280 op_index[i] = op_index[MAX_OPERANDS - 1 - i];
12281 op_index[MAX_OPERANDS - 1 - i] = op_ad;
185b1163
L
12282 riprel = op_riprel[i];
12283 op_riprel[i] = op_riprel [MAX_OPERANDS - 1 - i];
12284 op_riprel[MAX_OPERANDS - 1 - i] = riprel;
ce518a5f 12285 }
252b5132
RH
12286 }
12287 else
12288 {
ce518a5f 12289 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 12290 op_txt[MAX_OPERANDS - 1 - i] = op_out[i];
050dfa73
MM
12291 }
12292
ce518a5f
L
12293 needcomma = 0;
12294 for (i = 0; i < MAX_OPERANDS; ++i)
12295 if (*op_txt[i])
12296 {
12297 if (needcomma)
12298 (*info->fprintf_func) (info->stream, ",");
12299 if (op_index[i] != -1 && !op_riprel[i])
12300 (*info->print_address_func) ((bfd_vma) op_address[op_index[i]], info);
12301 else
12302 (*info->fprintf_func) (info->stream, "%s", op_txt[i]);
12303 needcomma = 1;
12304 }
050dfa73 12305
ce518a5f 12306 for (i = 0; i < MAX_OPERANDS; i++)
52b15da3
JH
12307 if (op_index[i] != -1 && op_riprel[i])
12308 {
12309 (*info->fprintf_func) (info->stream, " # ");
4fd7268a 12310 (*info->print_address_func) ((bfd_vma) (start_pc + (codep - start_codep)
52b15da3 12311 + op_address[op_index[i]]), info);
185b1163 12312 break;
52b15da3 12313 }
e396998b 12314 return codep - priv.the_buffer;
252b5132
RH
12315}
12316
6439fc28 12317static const char *float_mem[] = {
252b5132 12318 /* d8 */
7c52e0e8
L
12319 "fadd{s|}",
12320 "fmul{s|}",
12321 "fcom{s|}",
12322 "fcomp{s|}",
12323 "fsub{s|}",
12324 "fsubr{s|}",
12325 "fdiv{s|}",
12326 "fdivr{s|}",
db6eb5be 12327 /* d9 */
7c52e0e8 12328 "fld{s|}",
252b5132 12329 "(bad)",
7c52e0e8
L
12330 "fst{s|}",
12331 "fstp{s|}",
9306ca4a 12332 "fldenvIC",
252b5132 12333 "fldcw",
9306ca4a 12334 "fNstenvIC",
252b5132
RH
12335 "fNstcw",
12336 /* da */
7c52e0e8
L
12337 "fiadd{l|}",
12338 "fimul{l|}",
12339 "ficom{l|}",
12340 "ficomp{l|}",
12341 "fisub{l|}",
12342 "fisubr{l|}",
12343 "fidiv{l|}",
12344 "fidivr{l|}",
252b5132 12345 /* db */
7c52e0e8
L
12346 "fild{l|}",
12347 "fisttp{l|}",
12348 "fist{l|}",
12349 "fistp{l|}",
252b5132 12350 "(bad)",
6439fc28 12351 "fld{t||t|}",
252b5132 12352 "(bad)",
6439fc28 12353 "fstp{t||t|}",
252b5132 12354 /* dc */
7c52e0e8
L
12355 "fadd{l|}",
12356 "fmul{l|}",
12357 "fcom{l|}",
12358 "fcomp{l|}",
12359 "fsub{l|}",
12360 "fsubr{l|}",
12361 "fdiv{l|}",
12362 "fdivr{l|}",
252b5132 12363 /* dd */
7c52e0e8
L
12364 "fld{l|}",
12365 "fisttp{ll|}",
12366 "fst{l||}",
12367 "fstp{l|}",
9306ca4a 12368 "frstorIC",
252b5132 12369 "(bad)",
9306ca4a 12370 "fNsaveIC",
252b5132
RH
12371 "fNstsw",
12372 /* de */
ac465521
JB
12373 "fiadd{s|}",
12374 "fimul{s|}",
12375 "ficom{s|}",
12376 "ficomp{s|}",
12377 "fisub{s|}",
12378 "fisubr{s|}",
12379 "fidiv{s|}",
12380 "fidivr{s|}",
252b5132 12381 /* df */
ac465521
JB
12382 "fild{s|}",
12383 "fisttp{s|}",
12384 "fist{s|}",
12385 "fistp{s|}",
252b5132 12386 "fbld",
7c52e0e8 12387 "fild{ll|}",
252b5132 12388 "fbstp",
7c52e0e8 12389 "fistp{ll|}",
1d9f512f
AM
12390};
12391
12392static const unsigned char float_mem_mode[] = {
12393 /* d8 */
12394 d_mode,
12395 d_mode,
12396 d_mode,
12397 d_mode,
12398 d_mode,
12399 d_mode,
12400 d_mode,
12401 d_mode,
12402 /* d9 */
12403 d_mode,
12404 0,
12405 d_mode,
12406 d_mode,
12407 0,
12408 w_mode,
12409 0,
12410 w_mode,
12411 /* da */
12412 d_mode,
12413 d_mode,
12414 d_mode,
12415 d_mode,
12416 d_mode,
12417 d_mode,
12418 d_mode,
12419 d_mode,
12420 /* db */
12421 d_mode,
12422 d_mode,
12423 d_mode,
12424 d_mode,
12425 0,
9306ca4a 12426 t_mode,
1d9f512f 12427 0,
9306ca4a 12428 t_mode,
1d9f512f
AM
12429 /* dc */
12430 q_mode,
12431 q_mode,
12432 q_mode,
12433 q_mode,
12434 q_mode,
12435 q_mode,
12436 q_mode,
12437 q_mode,
12438 /* dd */
12439 q_mode,
12440 q_mode,
12441 q_mode,
12442 q_mode,
12443 0,
12444 0,
12445 0,
12446 w_mode,
12447 /* de */
12448 w_mode,
12449 w_mode,
12450 w_mode,
12451 w_mode,
12452 w_mode,
12453 w_mode,
12454 w_mode,
12455 w_mode,
12456 /* df */
12457 w_mode,
12458 w_mode,
12459 w_mode,
12460 w_mode,
9306ca4a 12461 t_mode,
1d9f512f 12462 q_mode,
9306ca4a 12463 t_mode,
1d9f512f 12464 q_mode
252b5132
RH
12465};
12466
ce518a5f
L
12467#define ST { OP_ST, 0 }
12468#define STi { OP_STi, 0 }
252b5132 12469
48c97fa1
L
12470#define FGRPd9_2 NULL, { { NULL, 1 } }, 0
12471#define FGRPd9_4 NULL, { { NULL, 2 } }, 0
12472#define FGRPd9_5 NULL, { { NULL, 3 } }, 0
12473#define FGRPd9_6 NULL, { { NULL, 4 } }, 0
12474#define FGRPd9_7 NULL, { { NULL, 5 } }, 0
12475#define FGRPda_5 NULL, { { NULL, 6 } }, 0
12476#define FGRPdb_4 NULL, { { NULL, 7 } }, 0
12477#define FGRPde_3 NULL, { { NULL, 8 } }, 0
12478#define FGRPdf_4 NULL, { { NULL, 9 } }, 0
252b5132 12479
2da11e11 12480static const struct dis386 float_reg[][8] = {
252b5132
RH
12481 /* d8 */
12482 {
bf890a93
IT
12483 { "fadd", { ST, STi }, 0 },
12484 { "fmul", { ST, STi }, 0 },
12485 { "fcom", { STi }, 0 },
12486 { "fcomp", { STi }, 0 },
12487 { "fsub", { ST, STi }, 0 },
12488 { "fsubr", { ST, STi }, 0 },
12489 { "fdiv", { ST, STi }, 0 },
12490 { "fdivr", { ST, STi }, 0 },
252b5132
RH
12491 },
12492 /* d9 */
12493 {
bf890a93
IT
12494 { "fld", { STi }, 0 },
12495 { "fxch", { STi }, 0 },
252b5132 12496 { FGRPd9_2 },
592d1631 12497 { Bad_Opcode },
252b5132
RH
12498 { FGRPd9_4 },
12499 { FGRPd9_5 },
12500 { FGRPd9_6 },
12501 { FGRPd9_7 },
12502 },
12503 /* da */
12504 {
bf890a93
IT
12505 { "fcmovb", { ST, STi }, 0 },
12506 { "fcmove", { ST, STi }, 0 },
12507 { "fcmovbe",{ ST, STi }, 0 },
12508 { "fcmovu", { ST, STi }, 0 },
592d1631 12509 { Bad_Opcode },
252b5132 12510 { FGRPda_5 },
592d1631
L
12511 { Bad_Opcode },
12512 { Bad_Opcode },
252b5132
RH
12513 },
12514 /* db */
12515 {
bf890a93
IT
12516 { "fcmovnb",{ ST, STi }, 0 },
12517 { "fcmovne",{ ST, STi }, 0 },
12518 { "fcmovnbe",{ ST, STi }, 0 },
12519 { "fcmovnu",{ ST, STi }, 0 },
252b5132 12520 { FGRPdb_4 },
bf890a93
IT
12521 { "fucomi", { ST, STi }, 0 },
12522 { "fcomi", { ST, STi }, 0 },
592d1631 12523 { Bad_Opcode },
252b5132
RH
12524 },
12525 /* dc */
12526 {
bf890a93
IT
12527 { "fadd", { STi, ST }, 0 },
12528 { "fmul", { STi, ST }, 0 },
592d1631
L
12529 { Bad_Opcode },
12530 { Bad_Opcode },
d53e6b98
JB
12531 { "fsub{!M|r}", { STi, ST }, 0 },
12532 { "fsub{M|}", { STi, ST }, 0 },
12533 { "fdiv{!M|r}", { STi, ST }, 0 },
12534 { "fdiv{M|}", { STi, ST }, 0 },
252b5132
RH
12535 },
12536 /* dd */
12537 {
bf890a93 12538 { "ffree", { STi }, 0 },
592d1631 12539 { Bad_Opcode },
bf890a93
IT
12540 { "fst", { STi }, 0 },
12541 { "fstp", { STi }, 0 },
12542 { "fucom", { STi }, 0 },
12543 { "fucomp", { STi }, 0 },
592d1631
L
12544 { Bad_Opcode },
12545 { Bad_Opcode },
252b5132
RH
12546 },
12547 /* de */
12548 {
bf890a93
IT
12549 { "faddp", { STi, ST }, 0 },
12550 { "fmulp", { STi, ST }, 0 },
592d1631 12551 { Bad_Opcode },
252b5132 12552 { FGRPde_3 },
d53e6b98
JB
12553 { "fsub{!M|r}p", { STi, ST }, 0 },
12554 { "fsub{M|}p", { STi, ST }, 0 },
12555 { "fdiv{!M|r}p", { STi, ST }, 0 },
12556 { "fdiv{M|}p", { STi, ST }, 0 },
252b5132
RH
12557 },
12558 /* df */
12559 {
bf890a93 12560 { "ffreep", { STi }, 0 },
592d1631
L
12561 { Bad_Opcode },
12562 { Bad_Opcode },
12563 { Bad_Opcode },
252b5132 12564 { FGRPdf_4 },
bf890a93
IT
12565 { "fucomip", { ST, STi }, 0 },
12566 { "fcomip", { ST, STi }, 0 },
592d1631 12567 { Bad_Opcode },
252b5132
RH
12568 },
12569};
12570
252b5132 12571static char *fgrps[][8] = {
48c97fa1
L
12572 /* Bad opcode 0 */
12573 {
12574 "(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12575 },
12576
12577 /* d9_2 1 */
252b5132
RH
12578 {
12579 "fnop","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12580 },
12581
48c97fa1 12582 /* d9_4 2 */
252b5132
RH
12583 {
12584 "fchs","fabs","(bad)","(bad)","ftst","fxam","(bad)","(bad)",
12585 },
12586
48c97fa1 12587 /* d9_5 3 */
252b5132
RH
12588 {
12589 "fld1","fldl2t","fldl2e","fldpi","fldlg2","fldln2","fldz","(bad)",
12590 },
12591
48c97fa1 12592 /* d9_6 4 */
252b5132
RH
12593 {
12594 "f2xm1","fyl2x","fptan","fpatan","fxtract","fprem1","fdecstp","fincstp",
12595 },
12596
48c97fa1 12597 /* d9_7 5 */
252b5132
RH
12598 {
12599 "fprem","fyl2xp1","fsqrt","fsincos","frndint","fscale","fsin","fcos",
12600 },
12601
48c97fa1 12602 /* da_5 6 */
252b5132
RH
12603 {
12604 "(bad)","fucompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12605 },
12606
48c97fa1 12607 /* db_4 7 */
252b5132 12608 {
309d3373
JB
12609 "fNeni(8087 only)","fNdisi(8087 only)","fNclex","fNinit",
12610 "fNsetpm(287 only)","frstpm(287 only)","(bad)","(bad)",
252b5132
RH
12611 },
12612
48c97fa1 12613 /* de_3 8 */
252b5132
RH
12614 {
12615 "(bad)","fcompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12616 },
12617
48c97fa1 12618 /* df_4 9 */
252b5132
RH
12619 {
12620 "fNstsw","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12621 },
12622};
12623
b6169b20
L
12624static void
12625swap_operand (void)
12626{
12627 mnemonicendp[0] = '.';
12628 mnemonicendp[1] = 's';
12629 mnemonicendp += 2;
12630}
12631
b844680a
L
12632static void
12633OP_Skip_MODRM (int bytemode ATTRIBUTE_UNUSED,
12634 int sizeflag ATTRIBUTE_UNUSED)
12635{
12636 /* Skip mod/rm byte. */
12637 MODRM_CHECK;
12638 codep++;
12639}
12640
252b5132 12641static void
26ca5450 12642dofloat (int sizeflag)
252b5132 12643{
2da11e11 12644 const struct dis386 *dp;
252b5132
RH
12645 unsigned char floatop;
12646
12647 floatop = codep[-1];
12648
7967e09e 12649 if (modrm.mod != 3)
252b5132 12650 {
7967e09e 12651 int fp_indx = (floatop - 0xd8) * 8 + modrm.reg;
1d9f512f
AM
12652
12653 putop (float_mem[fp_indx], sizeflag);
ce518a5f 12654 obufp = op_out[0];
6e50d963 12655 op_ad = 2;
1d9f512f 12656 OP_E (float_mem_mode[fp_indx], sizeflag);
252b5132
RH
12657 return;
12658 }
6608db57 12659 /* Skip mod/rm byte. */
4bba6815 12660 MODRM_CHECK;
252b5132
RH
12661 codep++;
12662
7967e09e 12663 dp = &float_reg[floatop - 0xd8][modrm.reg];
252b5132
RH
12664 if (dp->name == NULL)
12665 {
7967e09e 12666 putop (fgrps[dp->op[0].bytemode][modrm.rm], sizeflag);
252b5132 12667
6608db57 12668 /* Instruction fnstsw is only one with strange arg. */
252b5132 12669 if (floatop == 0xdf && codep[-1] == 0xe0)
ce518a5f 12670 strcpy (op_out[0], names16[0]);
252b5132
RH
12671 }
12672 else
12673 {
12674 putop (dp->name, sizeflag);
12675
ce518a5f 12676 obufp = op_out[0];
6e50d963 12677 op_ad = 2;
ce518a5f
L
12678 if (dp->op[0].rtn)
12679 (*dp->op[0].rtn) (dp->op[0].bytemode, sizeflag);
6e50d963 12680
ce518a5f 12681 obufp = op_out[1];
6e50d963 12682 op_ad = 1;
ce518a5f
L
12683 if (dp->op[1].rtn)
12684 (*dp->op[1].rtn) (dp->op[1].bytemode, sizeflag);
252b5132
RH
12685 }
12686}
12687
9ce09ba2
RM
12688/* Like oappend (below), but S is a string starting with '%'.
12689 In Intel syntax, the '%' is elided. */
12690static void
12691oappend_maybe_intel (const char *s)
12692{
12693 oappend (s + intel_syntax);
12694}
12695
252b5132 12696static void
26ca5450 12697OP_ST (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 12698{
9ce09ba2 12699 oappend_maybe_intel ("%st");
252b5132
RH
12700}
12701
252b5132 12702static void
26ca5450 12703OP_STi (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 12704{
7967e09e 12705 sprintf (scratchbuf, "%%st(%d)", modrm.rm);
9ce09ba2 12706 oappend_maybe_intel (scratchbuf);
252b5132
RH
12707}
12708
6608db57 12709/* Capital letters in template are macros. */
6439fc28 12710static int
d3ce72d0 12711putop (const char *in_template, int sizeflag)
252b5132 12712{
2da11e11 12713 const char *p;
9306ca4a 12714 int alt = 0;
9d141669 12715 int cond = 1;
98b528ac
L
12716 unsigned int l = 0, len = 1;
12717 char last[4];
12718
12719#define SAVE_LAST(c) \
12720 if (l < len && l < sizeof (last)) \
12721 last[l++] = c; \
12722 else \
12723 abort ();
252b5132 12724
d3ce72d0 12725 for (p = in_template; *p; p++)
252b5132
RH
12726 {
12727 switch (*p)
12728 {
12729 default:
12730 *obufp++ = *p;
12731 break;
98b528ac
L
12732 case '%':
12733 len++;
12734 break;
9d141669
L
12735 case '!':
12736 cond = 0;
12737 break;
6439fc28 12738 case '{':
6439fc28 12739 if (intel_syntax)
6439fc28
AM
12740 {
12741 while (*++p != '|')
7c52e0e8
L
12742 if (*p == '}' || *p == '\0')
12743 abort ();
6439fc28 12744 }
9306ca4a
JB
12745 /* Fall through. */
12746 case 'I':
12747 alt = 1;
12748 continue;
6439fc28
AM
12749 case '|':
12750 while (*++p != '}')
12751 {
12752 if (*p == '\0')
12753 abort ();
12754 }
12755 break;
12756 case '}':
12757 break;
252b5132 12758 case 'A':
db6eb5be
AM
12759 if (intel_syntax)
12760 break;
7967e09e 12761 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
252b5132
RH
12762 *obufp++ = 'b';
12763 break;
12764 case 'B':
4b06377f
L
12765 if (l == 0 && len == 1)
12766 {
12767case_B:
12768 if (intel_syntax)
12769 break;
12770 if (sizeflag & SUFFIX_ALWAYS)
12771 *obufp++ = 'b';
12772 }
12773 else
12774 {
12775 if (l != 1
12776 || len != 2
12777 || last[0] != 'L')
12778 {
12779 SAVE_LAST (*p);
12780 break;
12781 }
12782
12783 if (address_mode == mode_64bit
12784 && !(prefixes & PREFIX_ADDR))
12785 {
12786 *obufp++ = 'a';
12787 *obufp++ = 'b';
12788 *obufp++ = 's';
12789 }
12790
12791 goto case_B;
12792 }
252b5132 12793 break;
9306ca4a
JB
12794 case 'C':
12795 if (intel_syntax && !alt)
12796 break;
12797 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
12798 {
12799 if (sizeflag & DFLAG)
12800 *obufp++ = intel_syntax ? 'd' : 'l';
12801 else
12802 *obufp++ = intel_syntax ? 'w' : 's';
12803 used_prefixes |= (prefixes & PREFIX_DATA);
12804 }
12805 break;
ed7841b3
JB
12806 case 'D':
12807 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
12808 break;
161a04f6 12809 USED_REX (REX_W);
7967e09e 12810 if (modrm.mod == 3)
ed7841b3 12811 {
161a04f6 12812 if (rex & REX_W)
ed7841b3 12813 *obufp++ = 'q';
ed7841b3 12814 else
f16cd0d5
L
12815 {
12816 if (sizeflag & DFLAG)
12817 *obufp++ = intel_syntax ? 'd' : 'l';
12818 else
12819 *obufp++ = 'w';
12820 used_prefixes |= (prefixes & PREFIX_DATA);
12821 }
ed7841b3
JB
12822 }
12823 else
12824 *obufp++ = 'w';
12825 break;
252b5132 12826 case 'E': /* For jcxz/jecxz */
cb712a9e 12827 if (address_mode == mode_64bit)
c1a64871
JH
12828 {
12829 if (sizeflag & AFLAG)
12830 *obufp++ = 'r';
12831 else
12832 *obufp++ = 'e';
12833 }
12834 else
12835 if (sizeflag & AFLAG)
12836 *obufp++ = 'e';
3ffd33cf
AM
12837 used_prefixes |= (prefixes & PREFIX_ADDR);
12838 break;
12839 case 'F':
db6eb5be
AM
12840 if (intel_syntax)
12841 break;
e396998b 12842 if ((prefixes & PREFIX_ADDR) || (sizeflag & SUFFIX_ALWAYS))
3ffd33cf
AM
12843 {
12844 if (sizeflag & AFLAG)
cb712a9e 12845 *obufp++ = address_mode == mode_64bit ? 'q' : 'l';
3ffd33cf 12846 else
cb712a9e 12847 *obufp++ = address_mode == mode_64bit ? 'l' : 'w';
3ffd33cf
AM
12848 used_prefixes |= (prefixes & PREFIX_ADDR);
12849 }
252b5132 12850 break;
52fd6d94
JB
12851 case 'G':
12852 if (intel_syntax || (obufp[-1] != 's' && !(sizeflag & SUFFIX_ALWAYS)))
12853 break;
161a04f6 12854 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
12855 *obufp++ = 'l';
12856 else
12857 *obufp++ = 'w';
161a04f6 12858 if (!(rex & REX_W))
52fd6d94
JB
12859 used_prefixes |= (prefixes & PREFIX_DATA);
12860 break;
5dd0794d 12861 case 'H':
db6eb5be
AM
12862 if (intel_syntax)
12863 break;
5dd0794d
AM
12864 if ((prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_CS
12865 || (prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_DS)
12866 {
12867 used_prefixes |= prefixes & (PREFIX_CS | PREFIX_DS);
12868 *obufp++ = ',';
12869 *obufp++ = 'p';
12870 if (prefixes & PREFIX_DS)
12871 *obufp++ = 't';
12872 else
12873 *obufp++ = 'n';
12874 }
12875 break;
9306ca4a
JB
12876 case 'J':
12877 if (intel_syntax)
12878 break;
12879 *obufp++ = 'l';
12880 break;
42903f7f
L
12881 case 'K':
12882 USED_REX (REX_W);
12883 if (rex & REX_W)
12884 *obufp++ = 'q';
12885 else
12886 *obufp++ = 'd';
12887 break;
6dd5059a 12888 case 'Z':
04d824a4
JB
12889 if (l != 0 || len != 1)
12890 {
12891 if (l != 1 || len != 2 || last[0] != 'X')
12892 {
12893 SAVE_LAST (*p);
12894 break;
12895 }
12896 if (!need_vex || !vex.evex)
12897 abort ();
12898 if (intel_syntax
12899 || ((modrm.mod == 3 || vex.b) && !(sizeflag & SUFFIX_ALWAYS)))
12900 break;
12901 switch (vex.length)
12902 {
12903 case 128:
12904 *obufp++ = 'x';
12905 break;
12906 case 256:
12907 *obufp++ = 'y';
12908 break;
12909 case 512:
12910 *obufp++ = 'z';
12911 break;
12912 default:
12913 abort ();
12914 }
12915 break;
12916 }
6dd5059a
L
12917 if (intel_syntax)
12918 break;
12919 if (address_mode == mode_64bit && (sizeflag & SUFFIX_ALWAYS))
12920 {
12921 *obufp++ = 'q';
12922 break;
12923 }
12924 /* Fall through. */
98b528ac 12925 goto case_L;
252b5132 12926 case 'L':
98b528ac
L
12927 if (l != 0 || len != 1)
12928 {
12929 SAVE_LAST (*p);
12930 break;
12931 }
12932case_L:
db6eb5be
AM
12933 if (intel_syntax)
12934 break;
252b5132
RH
12935 if (sizeflag & SUFFIX_ALWAYS)
12936 *obufp++ = 'l';
252b5132 12937 break;
9d141669
L
12938 case 'M':
12939 if (intel_mnemonic != cond)
12940 *obufp++ = 'r';
12941 break;
252b5132
RH
12942 case 'N':
12943 if ((prefixes & PREFIX_FWAIT) == 0)
12944 *obufp++ = 'n';
7d421014
ILT
12945 else
12946 used_prefixes |= PREFIX_FWAIT;
252b5132 12947 break;
52b15da3 12948 case 'O':
161a04f6
L
12949 USED_REX (REX_W);
12950 if (rex & REX_W)
6439fc28 12951 *obufp++ = 'o';
a35ca55a
JB
12952 else if (intel_syntax && (sizeflag & DFLAG))
12953 *obufp++ = 'q';
52b15da3
JH
12954 else
12955 *obufp++ = 'd';
161a04f6 12956 if (!(rex & REX_W))
a35ca55a 12957 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 12958 break;
07f5af7d
L
12959 case '&':
12960 if (!intel_syntax
12961 && address_mode == mode_64bit
12962 && isa64 == intel64)
12963 {
12964 *obufp++ = 'q';
12965 break;
12966 }
12967 /* Fall through. */
6439fc28 12968 case 'T':
d9e3625e
L
12969 if (!intel_syntax
12970 && address_mode == mode_64bit
7bb15c6f 12971 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
12972 {
12973 *obufp++ = 'q';
12974 break;
12975 }
6608db57 12976 /* Fall through. */
4b4c407a 12977 goto case_P;
252b5132 12978 case 'P':
4b4c407a 12979 if (l == 0 && len == 1)
d9e3625e 12980 {
4b4c407a
L
12981case_P:
12982 if (intel_syntax)
d9e3625e 12983 {
4b4c407a
L
12984 if ((rex & REX_W) == 0
12985 && (prefixes & PREFIX_DATA))
12986 {
12987 if ((sizeflag & DFLAG) == 0)
12988 *obufp++ = 'w';
12989 used_prefixes |= (prefixes & PREFIX_DATA);
12990 }
12991 break;
12992 }
12993 if ((prefixes & PREFIX_DATA)
12994 || (rex & REX_W)
12995 || (sizeflag & SUFFIX_ALWAYS))
12996 {
12997 USED_REX (REX_W);
12998 if (rex & REX_W)
12999 *obufp++ = 'q';
13000 else
13001 {
13002 if (sizeflag & DFLAG)
13003 *obufp++ = 'l';
13004 else
13005 *obufp++ = 'w';
13006 used_prefixes |= (prefixes & PREFIX_DATA);
13007 }
d9e3625e 13008 }
d9e3625e 13009 }
4b4c407a 13010 else
252b5132 13011 {
4b4c407a
L
13012 if (l != 1 || len != 2 || last[0] != 'L')
13013 {
13014 SAVE_LAST (*p);
13015 break;
13016 }
13017
13018 if ((prefixes & PREFIX_DATA)
13019 || (rex & REX_W)
13020 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 13021 {
4b4c407a
L
13022 USED_REX (REX_W);
13023 if (rex & REX_W)
13024 *obufp++ = 'q';
13025 else
13026 {
13027 if (sizeflag & DFLAG)
13028 *obufp++ = intel_syntax ? 'd' : 'l';
13029 else
13030 *obufp++ = 'w';
13031 used_prefixes |= (prefixes & PREFIX_DATA);
13032 }
52b15da3 13033 }
252b5132
RH
13034 }
13035 break;
6439fc28 13036 case 'U':
db6eb5be
AM
13037 if (intel_syntax)
13038 break;
7bb15c6f 13039 if (address_mode == mode_64bit
6c067bbb 13040 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28 13041 {
7967e09e 13042 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
1a114b12 13043 *obufp++ = 'q';
6439fc28
AM
13044 break;
13045 }
6608db57 13046 /* Fall through. */
98b528ac 13047 goto case_Q;
252b5132 13048 case 'Q':
98b528ac 13049 if (l == 0 && len == 1)
252b5132 13050 {
98b528ac
L
13051case_Q:
13052 if (intel_syntax && !alt)
13053 break;
13054 USED_REX (REX_W);
13055 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 13056 {
98b528ac
L
13057 if (rex & REX_W)
13058 *obufp++ = 'q';
52b15da3 13059 else
98b528ac
L
13060 {
13061 if (sizeflag & DFLAG)
13062 *obufp++ = intel_syntax ? 'd' : 'l';
13063 else
13064 *obufp++ = 'w';
f16cd0d5 13065 used_prefixes |= (prefixes & PREFIX_DATA);
98b528ac 13066 }
52b15da3 13067 }
98b528ac
L
13068 }
13069 else
13070 {
13071 if (l != 1 || len != 2 || last[0] != 'L')
13072 {
13073 SAVE_LAST (*p);
13074 break;
13075 }
13076 if (intel_syntax
13077 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
13078 break;
13079 if ((rex & REX_W))
13080 {
13081 USED_REX (REX_W);
13082 *obufp++ = 'q';
13083 }
13084 else
13085 *obufp++ = 'l';
252b5132
RH
13086 }
13087 break;
13088 case 'R':
161a04f6
L
13089 USED_REX (REX_W);
13090 if (rex & REX_W)
a35ca55a
JB
13091 *obufp++ = 'q';
13092 else if (sizeflag & DFLAG)
c608c12e 13093 {
a35ca55a 13094 if (intel_syntax)
c608c12e 13095 *obufp++ = 'd';
c608c12e 13096 else
a35ca55a 13097 *obufp++ = 'l';
c608c12e 13098 }
252b5132 13099 else
a35ca55a
JB
13100 *obufp++ = 'w';
13101 if (intel_syntax && !p[1]
161a04f6 13102 && ((rex & REX_W) || (sizeflag & DFLAG)))
a35ca55a 13103 *obufp++ = 'e';
161a04f6 13104 if (!(rex & REX_W))
52b15da3 13105 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132 13106 break;
1a114b12 13107 case 'V':
4b06377f 13108 if (l == 0 && len == 1)
1a114b12 13109 {
4b06377f
L
13110 if (intel_syntax)
13111 break;
7bb15c6f 13112 if (address_mode == mode_64bit
6c067bbb 13113 && ((sizeflag & DFLAG) || (rex & REX_W)))
4b06377f
L
13114 {
13115 if (sizeflag & SUFFIX_ALWAYS)
13116 *obufp++ = 'q';
13117 break;
13118 }
13119 }
13120 else
13121 {
13122 if (l != 1
13123 || len != 2
13124 || last[0] != 'L')
13125 {
13126 SAVE_LAST (*p);
13127 break;
13128 }
13129
13130 if (rex & REX_W)
13131 {
13132 *obufp++ = 'a';
13133 *obufp++ = 'b';
13134 *obufp++ = 's';
13135 }
1a114b12
JB
13136 }
13137 /* Fall through. */
4b06377f 13138 goto case_S;
252b5132 13139 case 'S':
4b06377f 13140 if (l == 0 && len == 1)
252b5132 13141 {
4b06377f
L
13142case_S:
13143 if (intel_syntax)
13144 break;
13145 if (sizeflag & SUFFIX_ALWAYS)
52b15da3 13146 {
4b06377f
L
13147 if (rex & REX_W)
13148 *obufp++ = 'q';
52b15da3 13149 else
4b06377f
L
13150 {
13151 if (sizeflag & DFLAG)
13152 *obufp++ = 'l';
13153 else
13154 *obufp++ = 'w';
13155 used_prefixes |= (prefixes & PREFIX_DATA);
13156 }
13157 }
13158 }
13159 else
13160 {
13161 if (l != 1
13162 || len != 2
13163 || last[0] != 'L')
13164 {
13165 SAVE_LAST (*p);
13166 break;
52b15da3 13167 }
4b06377f
L
13168
13169 if (address_mode == mode_64bit
13170 && !(prefixes & PREFIX_ADDR))
13171 {
13172 *obufp++ = 'a';
13173 *obufp++ = 'b';
13174 *obufp++ = 's';
13175 }
13176
13177 goto case_S;
252b5132 13178 }
252b5132 13179 break;
041bd2e0 13180 case 'X':
c0f3af97
L
13181 if (l != 0 || len != 1)
13182 {
13183 SAVE_LAST (*p);
13184 break;
13185 }
13186 if (need_vex && vex.prefix)
13187 {
13188 if (vex.prefix == DATA_PREFIX_OPCODE)
13189 *obufp++ = 'd';
13190 else
13191 *obufp++ = 's';
13192 }
041bd2e0 13193 else
f16cd0d5
L
13194 {
13195 if (prefixes & PREFIX_DATA)
13196 *obufp++ = 'd';
13197 else
13198 *obufp++ = 's';
13199 used_prefixes |= (prefixes & PREFIX_DATA);
13200 }
041bd2e0 13201 break;
76f227a5 13202 case 'Y':
c0f3af97 13203 if (l == 0 && len == 1)
9646c87b 13204 abort ();
c0f3af97
L
13205 else
13206 {
13207 if (l != 1 || len != 2 || last[0] != 'X')
13208 {
13209 SAVE_LAST (*p);
13210 break;
13211 }
13212 if (!need_vex)
13213 abort ();
13214 if (intel_syntax
04d824a4 13215 || ((modrm.mod == 3 || vex.b) && !(sizeflag & SUFFIX_ALWAYS)))
c0f3af97
L
13216 break;
13217 switch (vex.length)
13218 {
13219 case 128:
13220 *obufp++ = 'x';
13221 break;
13222 case 256:
13223 *obufp++ = 'y';
13224 break;
04d824a4
JB
13225 case 512:
13226 if (!vex.evex)
c0f3af97 13227 default:
04d824a4 13228 abort ();
c0f3af97 13229 }
76f227a5
JH
13230 }
13231 break;
252b5132 13232 case 'W':
0bfee649 13233 if (l == 0 && len == 1)
a35ca55a 13234 {
0bfee649
L
13235 /* operand size flag for cwtl, cbtw */
13236 USED_REX (REX_W);
13237 if (rex & REX_W)
13238 {
13239 if (intel_syntax)
13240 *obufp++ = 'd';
13241 else
13242 *obufp++ = 'l';
13243 }
13244 else if (sizeflag & DFLAG)
13245 *obufp++ = 'w';
a35ca55a 13246 else
0bfee649
L
13247 *obufp++ = 'b';
13248 if (!(rex & REX_W))
13249 used_prefixes |= (prefixes & PREFIX_DATA);
a35ca55a 13250 }
252b5132 13251 else
0bfee649 13252 {
6c30d220
L
13253 if (l != 1
13254 || len != 2
13255 || (last[0] != 'X'
13256 && last[0] != 'L'))
0bfee649
L
13257 {
13258 SAVE_LAST (*p);
13259 break;
13260 }
13261 if (!need_vex)
13262 abort ();
6c30d220
L
13263 if (last[0] == 'X')
13264 *obufp++ = vex.w ? 'd': 's';
13265 else
13266 *obufp++ = vex.w ? 'q': 'd';
0bfee649 13267 }
252b5132 13268 break;
a72d2af2
L
13269 case '^':
13270 if (intel_syntax)
13271 break;
13272 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
13273 {
13274 if (sizeflag & DFLAG)
13275 *obufp++ = 'l';
13276 else
13277 *obufp++ = 'w';
13278 used_prefixes |= (prefixes & PREFIX_DATA);
13279 }
13280 break;
5db04b09
L
13281 case '@':
13282 if (intel_syntax)
13283 break;
13284 if (address_mode == mode_64bit
13285 && (isa64 == intel64
13286 || ((sizeflag & DFLAG) || (rex & REX_W))))
13287 *obufp++ = 'q';
13288 else if ((prefixes & PREFIX_DATA))
13289 {
13290 if (!(sizeflag & DFLAG))
13291 *obufp++ = 'w';
13292 used_prefixes |= (prefixes & PREFIX_DATA);
13293 }
13294 break;
252b5132 13295 }
9306ca4a 13296 alt = 0;
252b5132
RH
13297 }
13298 *obufp = 0;
ea397f5b 13299 mnemonicendp = obufp;
6439fc28 13300 return 0;
252b5132
RH
13301}
13302
13303static void
26ca5450 13304oappend (const char *s)
252b5132 13305{
ea397f5b 13306 obufp = stpcpy (obufp, s);
252b5132
RH
13307}
13308
13309static void
26ca5450 13310append_seg (void)
252b5132 13311{
285ca992
L
13312 /* Only print the active segment register. */
13313 if (!active_seg_prefix)
13314 return;
13315
13316 used_prefixes |= active_seg_prefix;
13317 switch (active_seg_prefix)
7d421014 13318 {
285ca992 13319 case PREFIX_CS:
9ce09ba2 13320 oappend_maybe_intel ("%cs:");
285ca992
L
13321 break;
13322 case PREFIX_DS:
9ce09ba2 13323 oappend_maybe_intel ("%ds:");
285ca992
L
13324 break;
13325 case PREFIX_SS:
9ce09ba2 13326 oappend_maybe_intel ("%ss:");
285ca992
L
13327 break;
13328 case PREFIX_ES:
9ce09ba2 13329 oappend_maybe_intel ("%es:");
285ca992
L
13330 break;
13331 case PREFIX_FS:
9ce09ba2 13332 oappend_maybe_intel ("%fs:");
285ca992
L
13333 break;
13334 case PREFIX_GS:
9ce09ba2 13335 oappend_maybe_intel ("%gs:");
285ca992
L
13336 break;
13337 default:
13338 break;
7d421014 13339 }
252b5132
RH
13340}
13341
13342static void
26ca5450 13343OP_indirE (int bytemode, int sizeflag)
252b5132
RH
13344{
13345 if (!intel_syntax)
13346 oappend ("*");
13347 OP_E (bytemode, sizeflag);
13348}
13349
52b15da3 13350static void
26ca5450 13351print_operand_value (char *buf, int hex, bfd_vma disp)
52b15da3 13352{
cb712a9e 13353 if (address_mode == mode_64bit)
52b15da3
JH
13354 {
13355 if (hex)
13356 {
13357 char tmp[30];
13358 int i;
13359 buf[0] = '0';
13360 buf[1] = 'x';
13361 sprintf_vma (tmp, disp);
6608db57 13362 for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++);
52b15da3
JH
13363 strcpy (buf + 2, tmp + i);
13364 }
13365 else
13366 {
13367 bfd_signed_vma v = disp;
13368 char tmp[30];
13369 int i;
13370 if (v < 0)
13371 {
13372 *(buf++) = '-';
13373 v = -disp;
6608db57 13374 /* Check for possible overflow on 0x8000000000000000. */
52b15da3
JH
13375 if (v < 0)
13376 {
13377 strcpy (buf, "9223372036854775808");
13378 return;
13379 }
13380 }
13381 if (!v)
13382 {
13383 strcpy (buf, "0");
13384 return;
13385 }
13386
13387 i = 0;
13388 tmp[29] = 0;
13389 while (v)
13390 {
6608db57 13391 tmp[28 - i] = (v % 10) + '0';
52b15da3
JH
13392 v /= 10;
13393 i++;
13394 }
13395 strcpy (buf, tmp + 29 - i);
13396 }
13397 }
13398 else
13399 {
13400 if (hex)
13401 sprintf (buf, "0x%x", (unsigned int) disp);
13402 else
13403 sprintf (buf, "%d", (int) disp);
13404 }
13405}
13406
5d669648
L
13407/* Put DISP in BUF as signed hex number. */
13408
13409static void
13410print_displacement (char *buf, bfd_vma disp)
13411{
13412 bfd_signed_vma val = disp;
13413 char tmp[30];
13414 int i, j = 0;
13415
13416 if (val < 0)
13417 {
13418 buf[j++] = '-';
13419 val = -disp;
13420
13421 /* Check for possible overflow. */
13422 if (val < 0)
13423 {
13424 switch (address_mode)
13425 {
13426 case mode_64bit:
13427 strcpy (buf + j, "0x8000000000000000");
13428 break;
13429 case mode_32bit:
13430 strcpy (buf + j, "0x80000000");
13431 break;
13432 case mode_16bit:
13433 strcpy (buf + j, "0x8000");
13434 break;
13435 }
13436 return;
13437 }
13438 }
13439
13440 buf[j++] = '0';
13441 buf[j++] = 'x';
13442
0af1713e 13443 sprintf_vma (tmp, (bfd_vma) val);
5d669648
L
13444 for (i = 0; tmp[i] == '0'; i++)
13445 continue;
13446 if (tmp[i] == '\0')
13447 i--;
13448 strcpy (buf + j, tmp + i);
13449}
13450
3f31e633
JB
13451static void
13452intel_operand_size (int bytemode, int sizeflag)
13453{
43234a1e
L
13454 if (vex.evex
13455 && vex.b
13456 && (bytemode == x_mode
13457 || bytemode == evex_half_bcst_xmmq_mode))
13458 {
13459 if (vex.w)
13460 oappend ("QWORD PTR ");
13461 else
13462 oappend ("DWORD PTR ");
13463 return;
13464 }
3f31e633
JB
13465 switch (bytemode)
13466 {
13467 case b_mode:
b6169b20 13468 case b_swap_mode:
42903f7f 13469 case dqb_mode:
1ba585e8 13470 case db_mode:
3f31e633
JB
13471 oappend ("BYTE PTR ");
13472 break;
13473 case w_mode:
1ba585e8 13474 case dw_mode:
3f31e633
JB
13475 case dqw_mode:
13476 oappend ("WORD PTR ");
13477 break;
07f5af7d
L
13478 case indir_v_mode:
13479 if (address_mode == mode_64bit && isa64 == intel64)
13480 {
13481 oappend ("QWORD PTR ");
13482 break;
13483 }
1a0670f3 13484 /* Fall through. */
1a114b12 13485 case stack_v_mode:
7bb15c6f 13486 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
3f31e633
JB
13487 {
13488 oappend ("QWORD PTR ");
3f31e633
JB
13489 break;
13490 }
1a0670f3 13491 /* Fall through. */
3f31e633 13492 case v_mode:
b6169b20 13493 case v_swap_mode:
3f31e633 13494 case dq_mode:
161a04f6
L
13495 USED_REX (REX_W);
13496 if (rex & REX_W)
3f31e633 13497 oappend ("QWORD PTR ");
3f31e633 13498 else
f16cd0d5
L
13499 {
13500 if ((sizeflag & DFLAG) || bytemode == dq_mode)
13501 oappend ("DWORD PTR ");
13502 else
13503 oappend ("WORD PTR ");
13504 used_prefixes |= (prefixes & PREFIX_DATA);
13505 }
3f31e633 13506 break;
52fd6d94 13507 case z_mode:
161a04f6 13508 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
13509 *obufp++ = 'D';
13510 oappend ("WORD PTR ");
161a04f6 13511 if (!(rex & REX_W))
52fd6d94
JB
13512 used_prefixes |= (prefixes & PREFIX_DATA);
13513 break;
34b772a6
JB
13514 case a_mode:
13515 if (sizeflag & DFLAG)
13516 oappend ("QWORD PTR ");
13517 else
13518 oappend ("DWORD PTR ");
13519 used_prefixes |= (prefixes & PREFIX_DATA);
13520 break;
3f31e633 13521 case d_mode:
539f890d
L
13522 case d_scalar_mode:
13523 case d_scalar_swap_mode:
fa99fab2 13524 case d_swap_mode:
42903f7f 13525 case dqd_mode:
3f31e633
JB
13526 oappend ("DWORD PTR ");
13527 break;
13528 case q_mode:
539f890d
L
13529 case q_scalar_mode:
13530 case q_scalar_swap_mode:
b6169b20 13531 case q_swap_mode:
3f31e633
JB
13532 oappend ("QWORD PTR ");
13533 break;
d20dee9e 13534 case dqa_mode:
3f31e633 13535 case m_mode:
cb712a9e 13536 if (address_mode == mode_64bit)
3f31e633
JB
13537 oappend ("QWORD PTR ");
13538 else
13539 oappend ("DWORD PTR ");
13540 break;
13541 case f_mode:
13542 if (sizeflag & DFLAG)
13543 oappend ("FWORD PTR ");
13544 else
13545 oappend ("DWORD PTR ");
13546 used_prefixes |= (prefixes & PREFIX_DATA);
13547 break;
13548 case t_mode:
13549 oappend ("TBYTE PTR ");
13550 break;
13551 case x_mode:
b6169b20 13552 case x_swap_mode:
43234a1e
L
13553 case evex_x_gscat_mode:
13554 case evex_x_nobcst_mode:
53467f57
IT
13555 case b_scalar_mode:
13556 case w_scalar_mode:
c0f3af97
L
13557 if (need_vex)
13558 {
13559 switch (vex.length)
13560 {
13561 case 128:
13562 oappend ("XMMWORD PTR ");
13563 break;
13564 case 256:
13565 oappend ("YMMWORD PTR ");
13566 break;
43234a1e
L
13567 case 512:
13568 oappend ("ZMMWORD PTR ");
13569 break;
c0f3af97
L
13570 default:
13571 abort ();
13572 }
13573 }
13574 else
13575 oappend ("XMMWORD PTR ");
13576 break;
13577 case xmm_mode:
3f31e633
JB
13578 oappend ("XMMWORD PTR ");
13579 break;
43234a1e
L
13580 case ymm_mode:
13581 oappend ("YMMWORD PTR ");
13582 break;
c0f3af97 13583 case xmmq_mode:
43234a1e 13584 case evex_half_bcst_xmmq_mode:
c0f3af97
L
13585 if (!need_vex)
13586 abort ();
13587
13588 switch (vex.length)
13589 {
13590 case 128:
13591 oappend ("QWORD PTR ");
13592 break;
13593 case 256:
13594 oappend ("XMMWORD PTR ");
13595 break;
43234a1e
L
13596 case 512:
13597 oappend ("YMMWORD PTR ");
13598 break;
c0f3af97
L
13599 default:
13600 abort ();
13601 }
13602 break;
6c30d220
L
13603 case xmm_mb_mode:
13604 if (!need_vex)
13605 abort ();
13606
13607 switch (vex.length)
13608 {
13609 case 128:
13610 case 256:
43234a1e 13611 case 512:
6c30d220
L
13612 oappend ("BYTE PTR ");
13613 break;
13614 default:
13615 abort ();
13616 }
13617 break;
13618 case xmm_mw_mode:
13619 if (!need_vex)
13620 abort ();
13621
13622 switch (vex.length)
13623 {
13624 case 128:
13625 case 256:
43234a1e 13626 case 512:
6c30d220
L
13627 oappend ("WORD PTR ");
13628 break;
13629 default:
13630 abort ();
13631 }
13632 break;
13633 case xmm_md_mode:
13634 if (!need_vex)
13635 abort ();
13636
13637 switch (vex.length)
13638 {
13639 case 128:
13640 case 256:
43234a1e 13641 case 512:
6c30d220
L
13642 oappend ("DWORD PTR ");
13643 break;
13644 default:
13645 abort ();
13646 }
13647 break;
13648 case xmm_mq_mode:
13649 if (!need_vex)
13650 abort ();
13651
13652 switch (vex.length)
13653 {
13654 case 128:
13655 case 256:
43234a1e 13656 case 512:
6c30d220
L
13657 oappend ("QWORD PTR ");
13658 break;
13659 default:
13660 abort ();
13661 }
13662 break;
13663 case xmmdw_mode:
13664 if (!need_vex)
13665 abort ();
13666
13667 switch (vex.length)
13668 {
13669 case 128:
13670 oappend ("WORD PTR ");
13671 break;
13672 case 256:
13673 oappend ("DWORD PTR ");
13674 break;
43234a1e
L
13675 case 512:
13676 oappend ("QWORD PTR ");
13677 break;
6c30d220
L
13678 default:
13679 abort ();
13680 }
13681 break;
13682 case xmmqd_mode:
13683 if (!need_vex)
13684 abort ();
13685
13686 switch (vex.length)
13687 {
13688 case 128:
13689 oappend ("DWORD PTR ");
13690 break;
13691 case 256:
13692 oappend ("QWORD PTR ");
13693 break;
43234a1e
L
13694 case 512:
13695 oappend ("XMMWORD PTR ");
13696 break;
6c30d220
L
13697 default:
13698 abort ();
13699 }
13700 break;
c0f3af97
L
13701 case ymmq_mode:
13702 if (!need_vex)
13703 abort ();
13704
13705 switch (vex.length)
13706 {
13707 case 128:
13708 oappend ("QWORD PTR ");
13709 break;
13710 case 256:
13711 oappend ("YMMWORD PTR ");
13712 break;
43234a1e
L
13713 case 512:
13714 oappend ("ZMMWORD PTR ");
13715 break;
c0f3af97
L
13716 default:
13717 abort ();
13718 }
13719 break;
6c30d220
L
13720 case ymmxmm_mode:
13721 if (!need_vex)
13722 abort ();
13723
13724 switch (vex.length)
13725 {
13726 case 128:
13727 case 256:
13728 oappend ("XMMWORD PTR ");
13729 break;
13730 default:
13731 abort ();
13732 }
13733 break;
fb9c77c7
L
13734 case o_mode:
13735 oappend ("OWORD PTR ");
13736 break;
43234a1e 13737 case xmm_mdq_mode:
0bfee649 13738 case vex_w_dq_mode:
1c480963 13739 case vex_scalar_w_dq_mode:
0bfee649
L
13740 if (!need_vex)
13741 abort ();
13742
13743 if (vex.w)
13744 oappend ("QWORD PTR ");
13745 else
13746 oappend ("DWORD PTR ");
13747 break;
43234a1e
L
13748 case vex_vsib_d_w_dq_mode:
13749 case vex_vsib_q_w_dq_mode:
13750 if (!need_vex)
13751 abort ();
13752
13753 if (!vex.evex)
13754 {
13755 if (vex.w)
13756 oappend ("QWORD PTR ");
13757 else
13758 oappend ("DWORD PTR ");
13759 }
13760 else
13761 {
b28d1bda
IT
13762 switch (vex.length)
13763 {
13764 case 128:
13765 oappend ("XMMWORD PTR ");
13766 break;
13767 case 256:
13768 oappend ("YMMWORD PTR ");
13769 break;
13770 case 512:
13771 oappend ("ZMMWORD PTR ");
13772 break;
13773 default:
13774 abort ();
13775 }
43234a1e
L
13776 }
13777 break;
5fc35d96
IT
13778 case vex_vsib_q_w_d_mode:
13779 case vex_vsib_d_w_d_mode:
b28d1bda 13780 if (!need_vex || !vex.evex)
5fc35d96
IT
13781 abort ();
13782
b28d1bda
IT
13783 switch (vex.length)
13784 {
13785 case 128:
13786 oappend ("QWORD PTR ");
13787 break;
13788 case 256:
13789 oappend ("XMMWORD PTR ");
13790 break;
13791 case 512:
13792 oappend ("YMMWORD PTR ");
13793 break;
13794 default:
13795 abort ();
13796 }
5fc35d96
IT
13797
13798 break;
1ba585e8
IT
13799 case mask_bd_mode:
13800 if (!need_vex || vex.length != 128)
13801 abort ();
13802 if (vex.w)
13803 oappend ("DWORD PTR ");
13804 else
13805 oappend ("BYTE PTR ");
13806 break;
43234a1e
L
13807 case mask_mode:
13808 if (!need_vex)
13809 abort ();
1ba585e8
IT
13810 if (vex.w)
13811 oappend ("QWORD PTR ");
13812 else
13813 oappend ("WORD PTR ");
43234a1e 13814 break;
6c75cc62 13815 case v_bnd_mode:
d276ec69 13816 case v_bndmk_mode:
3f31e633
JB
13817 default:
13818 break;
13819 }
13820}
13821
252b5132 13822static void
c0f3af97 13823OP_E_register (int bytemode, int sizeflag)
252b5132 13824{
c0f3af97
L
13825 int reg = modrm.rm;
13826 const char **names;
252b5132 13827
c0f3af97
L
13828 USED_REX (REX_B);
13829 if ((rex & REX_B))
13830 reg += 8;
252b5132 13831
b6169b20 13832 if ((sizeflag & SUFFIX_ALWAYS)
1ba585e8 13833 && (bytemode == b_swap_mode
9f79e886 13834 || bytemode == bnd_swap_mode
60227d64 13835 || bytemode == v_swap_mode))
b6169b20
L
13836 swap_operand ();
13837
c0f3af97 13838 switch (bytemode)
252b5132 13839 {
c0f3af97 13840 case b_mode:
b6169b20 13841 case b_swap_mode:
c0f3af97
L
13842 USED_REX (0);
13843 if (rex)
13844 names = names8rex;
13845 else
13846 names = names8;
13847 break;
13848 case w_mode:
13849 names = names16;
13850 break;
13851 case d_mode:
1ba585e8
IT
13852 case dw_mode:
13853 case db_mode:
c0f3af97
L
13854 names = names32;
13855 break;
13856 case q_mode:
13857 names = names64;
13858 break;
13859 case m_mode:
6c75cc62 13860 case v_bnd_mode:
c0f3af97
L
13861 names = address_mode == mode_64bit ? names64 : names32;
13862 break;
7e8b059b 13863 case bnd_mode:
9f79e886 13864 case bnd_swap_mode:
0d96e4df
L
13865 if (reg > 0x3)
13866 {
13867 oappend ("(bad)");
13868 return;
13869 }
7e8b059b
L
13870 names = names_bnd;
13871 break;
07f5af7d
L
13872 case indir_v_mode:
13873 if (address_mode == mode_64bit && isa64 == intel64)
13874 {
13875 names = names64;
13876 break;
13877 }
1a0670f3 13878 /* Fall through. */
c0f3af97 13879 case stack_v_mode:
7bb15c6f 13880 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
252b5132 13881 {
c0f3af97 13882 names = names64;
252b5132 13883 break;
252b5132 13884 }
c0f3af97 13885 bytemode = v_mode;
1a0670f3 13886 /* Fall through. */
c0f3af97 13887 case v_mode:
b6169b20 13888 case v_swap_mode:
c0f3af97
L
13889 case dq_mode:
13890 case dqb_mode:
13891 case dqd_mode:
13892 case dqw_mode:
d20dee9e 13893 case dqa_mode:
c0f3af97
L
13894 USED_REX (REX_W);
13895 if (rex & REX_W)
13896 names = names64;
c0f3af97 13897 else
f16cd0d5 13898 {
7bb15c6f 13899 if ((sizeflag & DFLAG)
f16cd0d5
L
13900 || (bytemode != v_mode
13901 && bytemode != v_swap_mode))
13902 names = names32;
13903 else
13904 names = names16;
13905 used_prefixes |= (prefixes & PREFIX_DATA);
13906 }
c0f3af97 13907 break;
de89d0a3
IT
13908 case va_mode:
13909 names = (address_mode == mode_64bit
13910 ? names64 : names32);
13911 if (!(prefixes & PREFIX_ADDR))
aa178437
IT
13912 names = (address_mode == mode_16bit
13913 ? names16 : names);
de89d0a3
IT
13914 else
13915 {
13916 /* Remove "addr16/addr32". */
13917 all_prefixes[last_addr_prefix] = 0;
13918 names = (address_mode != mode_32bit
13919 ? names32 : names16);
13920 used_prefixes |= PREFIX_ADDR;
13921 }
13922 break;
1ba585e8 13923 case mask_bd_mode:
43234a1e 13924 case mask_mode:
9889cbb1
L
13925 if (reg > 0x7)
13926 {
13927 oappend ("(bad)");
13928 return;
13929 }
43234a1e
L
13930 names = names_mask;
13931 break;
c0f3af97
L
13932 case 0:
13933 return;
13934 default:
13935 oappend (INTERNAL_DISASSEMBLER_ERROR);
252b5132
RH
13936 return;
13937 }
c0f3af97
L
13938 oappend (names[reg]);
13939}
13940
13941static void
c1e679ec 13942OP_E_memory (int bytemode, int sizeflag)
c0f3af97
L
13943{
13944 bfd_vma disp = 0;
13945 int add = (rex & REX_B) ? 8 : 0;
13946 int riprel = 0;
43234a1e
L
13947 int shift;
13948
13949 if (vex.evex)
13950 {
13951 /* In EVEX, if operand doesn't allow broadcast, vex.b should be 0. */
13952 if (vex.b
13953 && bytemode != x_mode
90a915bf 13954 && bytemode != xmmq_mode
43234a1e
L
13955 && bytemode != evex_half_bcst_xmmq_mode)
13956 {
13957 BadOp ();
13958 return;
13959 }
13960 switch (bytemode)
13961 {
1ba585e8
IT
13962 case dqw_mode:
13963 case dw_mode:
1ba585e8
IT
13964 shift = 1;
13965 break;
13966 case dqb_mode:
13967 case db_mode:
13968 shift = 0;
13969 break;
43234a1e 13970 case vex_vsib_d_w_dq_mode:
5fc35d96 13971 case vex_vsib_d_w_d_mode:
eaa9d1ad 13972 case vex_vsib_q_w_dq_mode:
5fc35d96 13973 case vex_vsib_q_w_d_mode:
43234a1e
L
13974 case evex_x_gscat_mode:
13975 case xmm_mdq_mode:
13976 shift = vex.w ? 3 : 2;
13977 break;
43234a1e
L
13978 case x_mode:
13979 case evex_half_bcst_xmmq_mode:
90a915bf 13980 case xmmq_mode:
43234a1e
L
13981 if (vex.b)
13982 {
13983 shift = vex.w ? 3 : 2;
13984 break;
13985 }
1a0670f3 13986 /* Fall through. */
43234a1e
L
13987 case xmmqd_mode:
13988 case xmmdw_mode:
43234a1e
L
13989 case ymmq_mode:
13990 case evex_x_nobcst_mode:
13991 case x_swap_mode:
13992 switch (vex.length)
13993 {
13994 case 128:
13995 shift = 4;
13996 break;
13997 case 256:
13998 shift = 5;
13999 break;
14000 case 512:
14001 shift = 6;
14002 break;
14003 default:
14004 abort ();
14005 }
14006 break;
14007 case ymm_mode:
14008 shift = 5;
14009 break;
14010 case xmm_mode:
14011 shift = 4;
14012 break;
14013 case xmm_mq_mode:
14014 case q_mode:
14015 case q_scalar_mode:
14016 case q_swap_mode:
14017 case q_scalar_swap_mode:
14018 shift = 3;
14019 break;
14020 case dqd_mode:
14021 case xmm_md_mode:
14022 case d_mode:
14023 case d_scalar_mode:
14024 case d_swap_mode:
14025 case d_scalar_swap_mode:
14026 shift = 2;
14027 break;
5074ad8a 14028 case w_scalar_mode:
43234a1e
L
14029 case xmm_mw_mode:
14030 shift = 1;
14031 break;
5074ad8a 14032 case b_scalar_mode:
43234a1e
L
14033 case xmm_mb_mode:
14034 shift = 0;
14035 break;
d20dee9e
L
14036 case dqa_mode:
14037 shift = address_mode == mode_64bit ? 3 : 2;
14038 break;
43234a1e
L
14039 default:
14040 abort ();
14041 }
14042 /* Make necessary corrections to shift for modes that need it.
14043 For these modes we currently have shift 4, 5 or 6 depending on
14044 vex.length (it corresponds to xmmword, ymmword or zmmword
14045 operand). We might want to make it 3, 4 or 5 (e.g. for
14046 xmmq_mode). In case of broadcast enabled the corrections
14047 aren't needed, as element size is always 32 or 64 bits. */
90a915bf
IT
14048 if (!vex.b
14049 && (bytemode == xmmq_mode
14050 || bytemode == evex_half_bcst_xmmq_mode))
43234a1e
L
14051 shift -= 1;
14052 else if (bytemode == xmmqd_mode)
14053 shift -= 2;
14054 else if (bytemode == xmmdw_mode)
14055 shift -= 3;
b28d1bda
IT
14056 else if (bytemode == ymmq_mode && vex.length == 128)
14057 shift -= 1;
43234a1e
L
14058 }
14059 else
14060 shift = 0;
252b5132 14061
c0f3af97 14062 USED_REX (REX_B);
3f31e633
JB
14063 if (intel_syntax)
14064 intel_operand_size (bytemode, sizeflag);
252b5132
RH
14065 append_seg ();
14066
5d669648 14067 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132 14068 {
5d669648
L
14069 /* 32/64 bit address mode */
14070 int havedisp;
252b5132
RH
14071 int havesib;
14072 int havebase;
0f7da397 14073 int haveindex;
20afcfb7 14074 int needindex;
1bc60e56 14075 int needaddr32;
82c18208 14076 int base, rbase;
91d6fa6a 14077 int vindex = 0;
252b5132 14078 int scale = 0;
7e8b059b
L
14079 int addr32flag = !((sizeflag & AFLAG)
14080 || bytemode == v_bnd_mode
d276ec69 14081 || bytemode == v_bndmk_mode
9f79e886
JB
14082 || bytemode == bnd_mode
14083 || bytemode == bnd_swap_mode);
6c30d220
L
14084 const char **indexes64 = names64;
14085 const char **indexes32 = names32;
252b5132
RH
14086
14087 havesib = 0;
14088 havebase = 1;
0f7da397 14089 haveindex = 0;
7967e09e 14090 base = modrm.rm;
252b5132
RH
14091
14092 if (base == 4)
14093 {
14094 havesib = 1;
dfc8cf43 14095 vindex = sib.index;
161a04f6
L
14096 USED_REX (REX_X);
14097 if (rex & REX_X)
91d6fa6a 14098 vindex += 8;
6c30d220
L
14099 switch (bytemode)
14100 {
14101 case vex_vsib_d_w_dq_mode:
5fc35d96 14102 case vex_vsib_d_w_d_mode:
6c30d220 14103 case vex_vsib_q_w_dq_mode:
5fc35d96 14104 case vex_vsib_q_w_d_mode:
6c30d220
L
14105 if (!need_vex)
14106 abort ();
43234a1e
L
14107 if (vex.evex)
14108 {
14109 if (!vex.v)
14110 vindex += 16;
14111 }
6c30d220
L
14112
14113 haveindex = 1;
14114 switch (vex.length)
14115 {
14116 case 128:
7bb15c6f 14117 indexes64 = indexes32 = names_xmm;
6c30d220
L
14118 break;
14119 case 256:
5fc35d96
IT
14120 if (!vex.w
14121 || bytemode == vex_vsib_q_w_dq_mode
14122 || bytemode == vex_vsib_q_w_d_mode)
7bb15c6f 14123 indexes64 = indexes32 = names_ymm;
6c30d220 14124 else
7bb15c6f 14125 indexes64 = indexes32 = names_xmm;
6c30d220 14126 break;
43234a1e 14127 case 512:
5fc35d96
IT
14128 if (!vex.w
14129 || bytemode == vex_vsib_q_w_dq_mode
14130 || bytemode == vex_vsib_q_w_d_mode)
43234a1e
L
14131 indexes64 = indexes32 = names_zmm;
14132 else
14133 indexes64 = indexes32 = names_ymm;
14134 break;
6c30d220
L
14135 default:
14136 abort ();
14137 }
14138 break;
14139 default:
14140 haveindex = vindex != 4;
14141 break;
14142 }
14143 scale = sib.scale;
14144 base = sib.base;
252b5132
RH
14145 codep++;
14146 }
82c18208 14147 rbase = base + add;
252b5132 14148
7967e09e 14149 switch (modrm.mod)
252b5132
RH
14150 {
14151 case 0:
82c18208 14152 if (base == 5)
252b5132
RH
14153 {
14154 havebase = 0;
cb712a9e 14155 if (address_mode == mode_64bit && !havesib)
52b15da3
JH
14156 riprel = 1;
14157 disp = get32s ();
d276ec69
JB
14158 if (riprel && bytemode == v_bndmk_mode)
14159 {
14160 oappend ("(bad)");
14161 return;
14162 }
252b5132
RH
14163 }
14164 break;
14165 case 1:
14166 FETCH_DATA (the_info, codep + 1);
14167 disp = *codep++;
14168 if ((disp & 0x80) != 0)
14169 disp -= 0x100;
43234a1e
L
14170 if (vex.evex && shift > 0)
14171 disp <<= shift;
252b5132
RH
14172 break;
14173 case 2:
52b15da3 14174 disp = get32s ();
252b5132
RH
14175 break;
14176 }
14177
1bc60e56
L
14178 needindex = 0;
14179 needaddr32 = 0;
14180 if (havesib
14181 && !havebase
14182 && !haveindex
14183 && address_mode != mode_16bit)
14184 {
14185 if (address_mode == mode_64bit)
14186 {
14187 /* Display eiz instead of addr32. */
14188 needindex = addr32flag;
14189 needaddr32 = 1;
14190 }
14191 else
14192 {
14193 /* In 32-bit mode, we need index register to tell [offset]
14194 from [eiz*1 + offset]. */
14195 needindex = 1;
14196 }
14197 }
14198
20afcfb7
L
14199 havedisp = (havebase
14200 || needindex
14201 || (havesib && (haveindex || scale != 0)));
5d669648 14202
252b5132 14203 if (!intel_syntax)
82c18208 14204 if (modrm.mod != 0 || base == 5)
db6eb5be 14205 {
5d669648
L
14206 if (havedisp || riprel)
14207 print_displacement (scratchbuf, disp);
14208 else
14209 print_operand_value (scratchbuf, 1, disp);
db6eb5be 14210 oappend (scratchbuf);
52b15da3
JH
14211 if (riprel)
14212 {
14213 set_op (disp, 1);
28596323 14214 oappend (!addr32flag ? "(%rip)" : "(%eip)");
52b15da3 14215 }
db6eb5be 14216 }
2da11e11 14217
1bc60e56 14218 if ((havebase || haveindex || needaddr32 || riprel)
7e8b059b 14219 && (bytemode != v_bnd_mode)
d276ec69 14220 && (bytemode != v_bndmk_mode)
9f79e886
JB
14221 && (bytemode != bnd_mode)
14222 && (bytemode != bnd_swap_mode))
87767711
JB
14223 used_prefixes |= PREFIX_ADDR;
14224
5d669648 14225 if (havedisp || (intel_syntax && riprel))
252b5132 14226 {
252b5132 14227 *obufp++ = open_char;
52b15da3 14228 if (intel_syntax && riprel)
185b1163
L
14229 {
14230 set_op (disp, 1);
28596323 14231 oappend (!addr32flag ? "rip" : "eip");
185b1163 14232 }
db6eb5be 14233 *obufp = '\0';
252b5132 14234 if (havebase)
7e8b059b 14235 oappend (address_mode == mode_64bit && !addr32flag
82c18208 14236 ? names64[rbase] : names32[rbase]);
252b5132
RH
14237 if (havesib)
14238 {
db51cc60
L
14239 /* ESP/RSP won't allow index. If base isn't ESP/RSP,
14240 print index to tell base + index from base. */
14241 if (scale != 0
20afcfb7 14242 || needindex
db51cc60
L
14243 || haveindex
14244 || (havebase && base != ESP_REG_NUM))
252b5132 14245 {
9306ca4a 14246 if (!intel_syntax || havebase)
db6eb5be 14247 {
9306ca4a
JB
14248 *obufp++ = separator_char;
14249 *obufp = '\0';
db6eb5be 14250 }
db51cc60 14251 if (haveindex)
7e8b059b 14252 oappend (address_mode == mode_64bit && !addr32flag
6c30d220 14253 ? indexes64[vindex] : indexes32[vindex]);
db51cc60 14254 else
7e8b059b 14255 oappend (address_mode == mode_64bit && !addr32flag
db51cc60
L
14256 ? index64 : index32);
14257
db6eb5be
AM
14258 *obufp++ = scale_char;
14259 *obufp = '\0';
14260 sprintf (scratchbuf, "%d", 1 << scale);
14261 oappend (scratchbuf);
14262 }
252b5132 14263 }
185b1163 14264 if (intel_syntax
82c18208 14265 && (disp || modrm.mod != 0 || base == 5))
3d456fa1 14266 {
db51cc60 14267 if (!havedisp || (bfd_signed_vma) disp >= 0)
3d456fa1
JB
14268 {
14269 *obufp++ = '+';
14270 *obufp = '\0';
14271 }
05203043 14272 else if (modrm.mod != 1 && disp != -disp)
3d456fa1
JB
14273 {
14274 *obufp++ = '-';
14275 *obufp = '\0';
14276 disp = - (bfd_signed_vma) disp;
14277 }
14278
db51cc60
L
14279 if (havedisp)
14280 print_displacement (scratchbuf, disp);
14281 else
14282 print_operand_value (scratchbuf, 1, disp);
3d456fa1
JB
14283 oappend (scratchbuf);
14284 }
252b5132
RH
14285
14286 *obufp++ = close_char;
db6eb5be 14287 *obufp = '\0';
252b5132
RH
14288 }
14289 else if (intel_syntax)
db6eb5be 14290 {
82c18208 14291 if (modrm.mod != 0 || base == 5)
db6eb5be 14292 {
285ca992 14293 if (!active_seg_prefix)
252b5132 14294 {
d708bcba 14295 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
14296 oappend (":");
14297 }
52b15da3 14298 print_operand_value (scratchbuf, 1, disp);
db6eb5be
AM
14299 oappend (scratchbuf);
14300 }
14301 }
252b5132
RH
14302 }
14303 else
f16cd0d5
L
14304 {
14305 /* 16 bit address mode */
14306 used_prefixes |= prefixes & PREFIX_ADDR;
7967e09e 14307 switch (modrm.mod)
252b5132
RH
14308 {
14309 case 0:
7967e09e 14310 if (modrm.rm == 6)
252b5132
RH
14311 {
14312 disp = get16 ();
14313 if ((disp & 0x8000) != 0)
14314 disp -= 0x10000;
14315 }
14316 break;
14317 case 1:
14318 FETCH_DATA (the_info, codep + 1);
14319 disp = *codep++;
14320 if ((disp & 0x80) != 0)
14321 disp -= 0x100;
65f3ed04
JB
14322 if (vex.evex && shift > 0)
14323 disp <<= shift;
252b5132
RH
14324 break;
14325 case 2:
14326 disp = get16 ();
14327 if ((disp & 0x8000) != 0)
14328 disp -= 0x10000;
14329 break;
14330 }
14331
14332 if (!intel_syntax)
7967e09e 14333 if (modrm.mod != 0 || modrm.rm == 6)
db6eb5be 14334 {
5d669648 14335 print_displacement (scratchbuf, disp);
db6eb5be
AM
14336 oappend (scratchbuf);
14337 }
252b5132 14338
7967e09e 14339 if (modrm.mod != 0 || modrm.rm != 6)
252b5132
RH
14340 {
14341 *obufp++ = open_char;
db6eb5be 14342 *obufp = '\0';
7967e09e 14343 oappend (index16[modrm.rm]);
5d669648
L
14344 if (intel_syntax
14345 && (disp || modrm.mod != 0 || modrm.rm == 6))
3d456fa1 14346 {
5d669648 14347 if ((bfd_signed_vma) disp >= 0)
3d456fa1
JB
14348 {
14349 *obufp++ = '+';
14350 *obufp = '\0';
14351 }
7967e09e 14352 else if (modrm.mod != 1)
3d456fa1
JB
14353 {
14354 *obufp++ = '-';
14355 *obufp = '\0';
14356 disp = - (bfd_signed_vma) disp;
14357 }
14358
5d669648 14359 print_displacement (scratchbuf, disp);
3d456fa1
JB
14360 oappend (scratchbuf);
14361 }
14362
db6eb5be
AM
14363 *obufp++ = close_char;
14364 *obufp = '\0';
252b5132 14365 }
3d456fa1
JB
14366 else if (intel_syntax)
14367 {
285ca992 14368 if (!active_seg_prefix)
3d456fa1
JB
14369 {
14370 oappend (names_seg[ds_reg - es_reg]);
14371 oappend (":");
14372 }
14373 print_operand_value (scratchbuf, 1, disp & 0xffff);
14374 oappend (scratchbuf);
14375 }
252b5132 14376 }
43234a1e
L
14377 if (vex.evex && vex.b
14378 && (bytemode == x_mode
90a915bf 14379 || bytemode == xmmq_mode
43234a1e
L
14380 || bytemode == evex_half_bcst_xmmq_mode))
14381 {
90a915bf
IT
14382 if (vex.w
14383 || bytemode == xmmq_mode
14384 || bytemode == evex_half_bcst_xmmq_mode)
b28d1bda
IT
14385 {
14386 switch (vex.length)
14387 {
14388 case 128:
14389 oappend ("{1to2}");
14390 break;
14391 case 256:
14392 oappend ("{1to4}");
14393 break;
14394 case 512:
14395 oappend ("{1to8}");
14396 break;
14397 default:
14398 abort ();
14399 }
14400 }
43234a1e 14401 else
b28d1bda
IT
14402 {
14403 switch (vex.length)
14404 {
14405 case 128:
14406 oappend ("{1to4}");
14407 break;
14408 case 256:
14409 oappend ("{1to8}");
14410 break;
14411 case 512:
14412 oappend ("{1to16}");
14413 break;
14414 default:
14415 abort ();
14416 }
14417 }
43234a1e 14418 }
252b5132
RH
14419}
14420
c0f3af97 14421static void
8b3f93e7 14422OP_E (int bytemode, int sizeflag)
c0f3af97
L
14423{
14424 /* Skip mod/rm byte. */
14425 MODRM_CHECK;
14426 codep++;
14427
14428 if (modrm.mod == 3)
14429 OP_E_register (bytemode, sizeflag);
14430 else
c1e679ec 14431 OP_E_memory (bytemode, sizeflag);
c0f3af97
L
14432}
14433
252b5132 14434static void
26ca5450 14435OP_G (int bytemode, int sizeflag)
252b5132 14436{
52b15da3 14437 int add = 0;
c0a30a9f 14438 const char **names;
161a04f6
L
14439 USED_REX (REX_R);
14440 if (rex & REX_R)
52b15da3 14441 add += 8;
252b5132
RH
14442 switch (bytemode)
14443 {
14444 case b_mode:
52b15da3
JH
14445 USED_REX (0);
14446 if (rex)
7967e09e 14447 oappend (names8rex[modrm.reg + add]);
52b15da3 14448 else
7967e09e 14449 oappend (names8[modrm.reg + add]);
252b5132
RH
14450 break;
14451 case w_mode:
7967e09e 14452 oappend (names16[modrm.reg + add]);
252b5132
RH
14453 break;
14454 case d_mode:
1ba585e8
IT
14455 case db_mode:
14456 case dw_mode:
7967e09e 14457 oappend (names32[modrm.reg + add]);
52b15da3
JH
14458 break;
14459 case q_mode:
7967e09e 14460 oappend (names64[modrm.reg + add]);
252b5132 14461 break;
7e8b059b 14462 case bnd_mode:
0d96e4df
L
14463 if (modrm.reg > 0x3)
14464 {
14465 oappend ("(bad)");
14466 return;
14467 }
7e8b059b
L
14468 oappend (names_bnd[modrm.reg]);
14469 break;
252b5132 14470 case v_mode:
9306ca4a 14471 case dq_mode:
42903f7f
L
14472 case dqb_mode:
14473 case dqd_mode:
9306ca4a 14474 case dqw_mode:
161a04f6
L
14475 USED_REX (REX_W);
14476 if (rex & REX_W)
7967e09e 14477 oappend (names64[modrm.reg + add]);
252b5132 14478 else
f16cd0d5
L
14479 {
14480 if ((sizeflag & DFLAG) || bytemode != v_mode)
14481 oappend (names32[modrm.reg + add]);
14482 else
14483 oappend (names16[modrm.reg + add]);
14484 used_prefixes |= (prefixes & PREFIX_DATA);
14485 }
252b5132 14486 break;
c0a30a9f
L
14487 case va_mode:
14488 names = (address_mode == mode_64bit
14489 ? names64 : names32);
14490 if (!(prefixes & PREFIX_ADDR))
14491 {
14492 if (address_mode == mode_16bit)
14493 names = names16;
14494 }
14495 else
14496 {
14497 /* Remove "addr16/addr32". */
14498 all_prefixes[last_addr_prefix] = 0;
14499 names = (address_mode != mode_32bit
14500 ? names32 : names16);
14501 used_prefixes |= PREFIX_ADDR;
14502 }
14503 oappend (names[modrm.reg + add]);
14504 break;
90700ea2 14505 case m_mode:
cb712a9e 14506 if (address_mode == mode_64bit)
7967e09e 14507 oappend (names64[modrm.reg + add]);
90700ea2 14508 else
7967e09e 14509 oappend (names32[modrm.reg + add]);
90700ea2 14510 break;
1ba585e8 14511 case mask_bd_mode:
43234a1e 14512 case mask_mode:
9889cbb1
L
14513 if ((modrm.reg + add) > 0x7)
14514 {
14515 oappend ("(bad)");
14516 return;
14517 }
43234a1e
L
14518 oappend (names_mask[modrm.reg + add]);
14519 break;
252b5132
RH
14520 default:
14521 oappend (INTERNAL_DISASSEMBLER_ERROR);
14522 break;
14523 }
14524}
14525
52b15da3 14526static bfd_vma
26ca5450 14527get64 (void)
52b15da3 14528{
5dd0794d 14529 bfd_vma x;
52b15da3 14530#ifdef BFD64
5dd0794d
AM
14531 unsigned int a;
14532 unsigned int b;
14533
52b15da3
JH
14534 FETCH_DATA (the_info, codep + 8);
14535 a = *codep++ & 0xff;
14536 a |= (*codep++ & 0xff) << 8;
14537 a |= (*codep++ & 0xff) << 16;
070fe95d 14538 a |= (*codep++ & 0xffu) << 24;
5dd0794d 14539 b = *codep++ & 0xff;
52b15da3
JH
14540 b |= (*codep++ & 0xff) << 8;
14541 b |= (*codep++ & 0xff) << 16;
070fe95d 14542 b |= (*codep++ & 0xffu) << 24;
52b15da3
JH
14543 x = a + ((bfd_vma) b << 32);
14544#else
6608db57 14545 abort ();
5dd0794d 14546 x = 0;
52b15da3
JH
14547#endif
14548 return x;
14549}
14550
14551static bfd_signed_vma
26ca5450 14552get32 (void)
252b5132 14553{
52b15da3 14554 bfd_signed_vma x = 0;
252b5132
RH
14555
14556 FETCH_DATA (the_info, codep + 4);
52b15da3
JH
14557 x = *codep++ & (bfd_signed_vma) 0xff;
14558 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
14559 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
14560 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
14561 return x;
14562}
14563
14564static bfd_signed_vma
26ca5450 14565get32s (void)
52b15da3
JH
14566{
14567 bfd_signed_vma x = 0;
14568
14569 FETCH_DATA (the_info, codep + 4);
14570 x = *codep++ & (bfd_signed_vma) 0xff;
14571 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
14572 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
14573 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
14574
14575 x = (x ^ ((bfd_signed_vma) 1 << 31)) - ((bfd_signed_vma) 1 << 31);
14576
252b5132
RH
14577 return x;
14578}
14579
14580static int
26ca5450 14581get16 (void)
252b5132
RH
14582{
14583 int x = 0;
14584
14585 FETCH_DATA (the_info, codep + 2);
14586 x = *codep++ & 0xff;
14587 x |= (*codep++ & 0xff) << 8;
14588 return x;
14589}
14590
14591static void
26ca5450 14592set_op (bfd_vma op, int riprel)
252b5132
RH
14593{
14594 op_index[op_ad] = op_ad;
cb712a9e 14595 if (address_mode == mode_64bit)
7081ff04
AJ
14596 {
14597 op_address[op_ad] = op;
14598 op_riprel[op_ad] = riprel;
14599 }
14600 else
14601 {
14602 /* Mask to get a 32-bit address. */
14603 op_address[op_ad] = op & 0xffffffff;
14604 op_riprel[op_ad] = riprel & 0xffffffff;
14605 }
252b5132
RH
14606}
14607
14608static void
26ca5450 14609OP_REG (int code, int sizeflag)
252b5132 14610{
2da11e11 14611 const char *s;
9b60702d 14612 int add;
de882298
RM
14613
14614 switch (code)
14615 {
14616 case es_reg: case ss_reg: case cs_reg:
14617 case ds_reg: case fs_reg: case gs_reg:
14618 oappend (names_seg[code - es_reg]);
14619 return;
14620 }
14621
161a04f6
L
14622 USED_REX (REX_B);
14623 if (rex & REX_B)
52b15da3 14624 add = 8;
9b60702d
L
14625 else
14626 add = 0;
52b15da3
JH
14627
14628 switch (code)
14629 {
52b15da3
JH
14630 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
14631 case sp_reg: case bp_reg: case si_reg: case di_reg:
14632 s = names16[code - ax_reg + add];
14633 break;
52b15da3
JH
14634 case al_reg: case ah_reg: case cl_reg: case ch_reg:
14635 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
14636 USED_REX (0);
14637 if (rex)
14638 s = names8rex[code - al_reg + add];
14639 else
14640 s = names8[code - al_reg];
14641 break;
6439fc28
AM
14642 case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg:
14643 case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg:
7bb15c6f 14644 if (address_mode == mode_64bit
6c067bbb 14645 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
14646 {
14647 s = names64[code - rAX_reg + add];
14648 break;
14649 }
14650 code += eAX_reg - rAX_reg;
6608db57 14651 /* Fall through. */
52b15da3
JH
14652 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
14653 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
14654 USED_REX (REX_W);
14655 if (rex & REX_W)
52b15da3 14656 s = names64[code - eAX_reg + add];
52b15da3 14657 else
f16cd0d5
L
14658 {
14659 if (sizeflag & DFLAG)
14660 s = names32[code - eAX_reg + add];
14661 else
14662 s = names16[code - eAX_reg + add];
14663 used_prefixes |= (prefixes & PREFIX_DATA);
14664 }
52b15da3 14665 break;
52b15da3
JH
14666 default:
14667 s = INTERNAL_DISASSEMBLER_ERROR;
14668 break;
14669 }
14670 oappend (s);
14671}
14672
14673static void
26ca5450 14674OP_IMREG (int code, int sizeflag)
52b15da3
JH
14675{
14676 const char *s;
252b5132
RH
14677
14678 switch (code)
14679 {
14680 case indir_dx_reg:
d708bcba 14681 if (intel_syntax)
52fd6d94 14682 s = "dx";
d708bcba 14683 else
db6eb5be 14684 s = "(%dx)";
252b5132
RH
14685 break;
14686 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
14687 case sp_reg: case bp_reg: case si_reg: case di_reg:
14688 s = names16[code - ax_reg];
14689 break;
14690 case es_reg: case ss_reg: case cs_reg:
14691 case ds_reg: case fs_reg: case gs_reg:
14692 s = names_seg[code - es_reg];
14693 break;
14694 case al_reg: case ah_reg: case cl_reg: case ch_reg:
14695 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
52b15da3
JH
14696 USED_REX (0);
14697 if (rex)
14698 s = names8rex[code - al_reg];
14699 else
14700 s = names8[code - al_reg];
252b5132
RH
14701 break;
14702 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
14703 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
14704 USED_REX (REX_W);
14705 if (rex & REX_W)
52b15da3 14706 s = names64[code - eAX_reg];
252b5132 14707 else
f16cd0d5
L
14708 {
14709 if (sizeflag & DFLAG)
14710 s = names32[code - eAX_reg];
14711 else
14712 s = names16[code - eAX_reg];
14713 used_prefixes |= (prefixes & PREFIX_DATA);
14714 }
252b5132 14715 break;
52fd6d94 14716 case z_mode_ax_reg:
161a04f6 14717 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
14718 s = *names32;
14719 else
14720 s = *names16;
161a04f6 14721 if (!(rex & REX_W))
52fd6d94
JB
14722 used_prefixes |= (prefixes & PREFIX_DATA);
14723 break;
252b5132
RH
14724 default:
14725 s = INTERNAL_DISASSEMBLER_ERROR;
14726 break;
14727 }
14728 oappend (s);
14729}
14730
14731static void
26ca5450 14732OP_I (int bytemode, int sizeflag)
252b5132 14733{
52b15da3
JH
14734 bfd_signed_vma op;
14735 bfd_signed_vma mask = -1;
252b5132
RH
14736
14737 switch (bytemode)
14738 {
14739 case b_mode:
14740 FETCH_DATA (the_info, codep + 1);
52b15da3
JH
14741 op = *codep++;
14742 mask = 0xff;
14743 break;
14744 case q_mode:
cb712a9e 14745 if (address_mode == mode_64bit)
6439fc28
AM
14746 {
14747 op = get32s ();
14748 break;
14749 }
6608db57 14750 /* Fall through. */
252b5132 14751 case v_mode:
161a04f6
L
14752 USED_REX (REX_W);
14753 if (rex & REX_W)
52b15da3 14754 op = get32s ();
252b5132 14755 else
52b15da3 14756 {
f16cd0d5
L
14757 if (sizeflag & DFLAG)
14758 {
14759 op = get32 ();
14760 mask = 0xffffffff;
14761 }
14762 else
14763 {
14764 op = get16 ();
14765 mask = 0xfffff;
14766 }
14767 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 14768 }
252b5132
RH
14769 break;
14770 case w_mode:
52b15da3 14771 mask = 0xfffff;
252b5132
RH
14772 op = get16 ();
14773 break;
9306ca4a
JB
14774 case const_1_mode:
14775 if (intel_syntax)
6c067bbb 14776 oappend ("1");
9306ca4a 14777 return;
252b5132
RH
14778 default:
14779 oappend (INTERNAL_DISASSEMBLER_ERROR);
14780 return;
14781 }
14782
52b15da3
JH
14783 op &= mask;
14784 scratchbuf[0] = '$';
d708bcba 14785 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 14786 oappend_maybe_intel (scratchbuf);
52b15da3
JH
14787 scratchbuf[0] = '\0';
14788}
14789
14790static void
26ca5450 14791OP_I64 (int bytemode, int sizeflag)
52b15da3
JH
14792{
14793 bfd_signed_vma op;
14794 bfd_signed_vma mask = -1;
14795
cb712a9e 14796 if (address_mode != mode_64bit)
6439fc28
AM
14797 {
14798 OP_I (bytemode, sizeflag);
14799 return;
14800 }
14801
52b15da3
JH
14802 switch (bytemode)
14803 {
14804 case b_mode:
14805 FETCH_DATA (the_info, codep + 1);
14806 op = *codep++;
14807 mask = 0xff;
14808 break;
14809 case v_mode:
161a04f6
L
14810 USED_REX (REX_W);
14811 if (rex & REX_W)
52b15da3 14812 op = get64 ();
52b15da3
JH
14813 else
14814 {
f16cd0d5
L
14815 if (sizeflag & DFLAG)
14816 {
14817 op = get32 ();
14818 mask = 0xffffffff;
14819 }
14820 else
14821 {
14822 op = get16 ();
14823 mask = 0xfffff;
14824 }
14825 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 14826 }
52b15da3
JH
14827 break;
14828 case w_mode:
14829 mask = 0xfffff;
14830 op = get16 ();
14831 break;
14832 default:
14833 oappend (INTERNAL_DISASSEMBLER_ERROR);
14834 return;
14835 }
14836
14837 op &= mask;
14838 scratchbuf[0] = '$';
d708bcba 14839 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 14840 oappend_maybe_intel (scratchbuf);
252b5132
RH
14841 scratchbuf[0] = '\0';
14842}
14843
14844static void
26ca5450 14845OP_sI (int bytemode, int sizeflag)
252b5132 14846{
52b15da3 14847 bfd_signed_vma op;
252b5132
RH
14848
14849 switch (bytemode)
14850 {
14851 case b_mode:
e3949f17 14852 case b_T_mode:
252b5132
RH
14853 FETCH_DATA (the_info, codep + 1);
14854 op = *codep++;
14855 if ((op & 0x80) != 0)
14856 op -= 0x100;
e3949f17
L
14857 if (bytemode == b_T_mode)
14858 {
14859 if (address_mode != mode_64bit
7bb15c6f 14860 || !((sizeflag & DFLAG) || (rex & REX_W)))
e3949f17 14861 {
6c067bbb
RM
14862 /* The operand-size prefix is overridden by a REX prefix. */
14863 if ((sizeflag & DFLAG) || (rex & REX_W))
e3949f17
L
14864 op &= 0xffffffff;
14865 else
14866 op &= 0xffff;
14867 }
14868 }
14869 else
14870 {
14871 if (!(rex & REX_W))
14872 {
14873 if (sizeflag & DFLAG)
14874 op &= 0xffffffff;
14875 else
14876 op &= 0xffff;
14877 }
14878 }
252b5132
RH
14879 break;
14880 case v_mode:
7bb15c6f
RM
14881 /* The operand-size prefix is overridden by a REX prefix. */
14882 if ((sizeflag & DFLAG) || (rex & REX_W))
52b15da3 14883 op = get32s ();
252b5132 14884 else
d9e3625e 14885 op = get16 ();
252b5132
RH
14886 break;
14887 default:
14888 oappend (INTERNAL_DISASSEMBLER_ERROR);
14889 return;
14890 }
52b15da3
JH
14891
14892 scratchbuf[0] = '$';
14893 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 14894 oappend_maybe_intel (scratchbuf);
252b5132
RH
14895}
14896
14897static void
26ca5450 14898OP_J (int bytemode, int sizeflag)
252b5132 14899{
52b15da3 14900 bfd_vma disp;
7081ff04 14901 bfd_vma mask = -1;
65ca155d 14902 bfd_vma segment = 0;
252b5132
RH
14903
14904 switch (bytemode)
14905 {
14906 case b_mode:
14907 FETCH_DATA (the_info, codep + 1);
14908 disp = *codep++;
14909 if ((disp & 0x80) != 0)
14910 disp -= 0x100;
14911 break;
14912 case v_mode:
5db04b09
L
14913 if (isa64 == amd64)
14914 USED_REX (REX_W);
14915 if ((sizeflag & DFLAG)
14916 || (address_mode == mode_64bit
14917 && (isa64 != amd64 || (rex & REX_W))))
52b15da3 14918 disp = get32s ();
252b5132
RH
14919 else
14920 {
14921 disp = get16 ();
206717e8
L
14922 if ((disp & 0x8000) != 0)
14923 disp -= 0x10000;
65ca155d
L
14924 /* In 16bit mode, address is wrapped around at 64k within
14925 the same segment. Otherwise, a data16 prefix on a jump
14926 instruction means that the pc is masked to 16 bits after
14927 the displacement is added! */
14928 mask = 0xffff;
14929 if ((prefixes & PREFIX_DATA) == 0)
4fd7268a 14930 segment = ((start_pc + (codep - start_codep))
65ca155d 14931 & ~((bfd_vma) 0xffff));
252b5132 14932 }
5db04b09
L
14933 if (address_mode != mode_64bit
14934 || (isa64 == amd64 && !(rex & REX_W)))
f16cd0d5 14935 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132
RH
14936 break;
14937 default:
14938 oappend (INTERNAL_DISASSEMBLER_ERROR);
14939 return;
14940 }
42d5f9c6 14941 disp = ((start_pc + (codep - start_codep) + disp) & mask) | segment;
52b15da3
JH
14942 set_op (disp, 0);
14943 print_operand_value (scratchbuf, 1, disp);
252b5132
RH
14944 oappend (scratchbuf);
14945}
14946
252b5132 14947static void
ed7841b3 14948OP_SEG (int bytemode, int sizeflag)
252b5132 14949{
ed7841b3 14950 if (bytemode == w_mode)
7967e09e 14951 oappend (names_seg[modrm.reg]);
ed7841b3 14952 else
7967e09e 14953 OP_E (modrm.mod == 3 ? bytemode : w_mode, sizeflag);
252b5132
RH
14954}
14955
14956static void
26ca5450 14957OP_DIR (int dummy ATTRIBUTE_UNUSED, int sizeflag)
252b5132
RH
14958{
14959 int seg, offset;
14960
c608c12e 14961 if (sizeflag & DFLAG)
252b5132 14962 {
c608c12e
AM
14963 offset = get32 ();
14964 seg = get16 ();
252b5132 14965 }
c608c12e
AM
14966 else
14967 {
14968 offset = get16 ();
14969 seg = get16 ();
14970 }
7d421014 14971 used_prefixes |= (prefixes & PREFIX_DATA);
d708bcba 14972 if (intel_syntax)
3f31e633 14973 sprintf (scratchbuf, "0x%x:0x%x", seg, offset);
d708bcba
AM
14974 else
14975 sprintf (scratchbuf, "$0x%x,$0x%x", seg, offset);
c608c12e 14976 oappend (scratchbuf);
252b5132
RH
14977}
14978
252b5132 14979static void
3f31e633 14980OP_OFF (int bytemode, int sizeflag)
252b5132 14981{
52b15da3 14982 bfd_vma off;
252b5132 14983
3f31e633
JB
14984 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
14985 intel_operand_size (bytemode, sizeflag);
252b5132
RH
14986 append_seg ();
14987
cb712a9e 14988 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132
RH
14989 off = get32 ();
14990 else
14991 off = get16 ();
14992
14993 if (intel_syntax)
14994 {
285ca992 14995 if (!active_seg_prefix)
252b5132 14996 {
d708bcba 14997 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
14998 oappend (":");
14999 }
15000 }
52b15da3
JH
15001 print_operand_value (scratchbuf, 1, off);
15002 oappend (scratchbuf);
15003}
6439fc28 15004
52b15da3 15005static void
3f31e633 15006OP_OFF64 (int bytemode, int sizeflag)
52b15da3
JH
15007{
15008 bfd_vma off;
15009
539e75ad
L
15010 if (address_mode != mode_64bit
15011 || (prefixes & PREFIX_ADDR))
6439fc28
AM
15012 {
15013 OP_OFF (bytemode, sizeflag);
15014 return;
15015 }
15016
3f31e633
JB
15017 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
15018 intel_operand_size (bytemode, sizeflag);
52b15da3
JH
15019 append_seg ();
15020
6608db57 15021 off = get64 ();
52b15da3
JH
15022
15023 if (intel_syntax)
15024 {
285ca992 15025 if (!active_seg_prefix)
52b15da3 15026 {
d708bcba 15027 oappend (names_seg[ds_reg - es_reg]);
52b15da3
JH
15028 oappend (":");
15029 }
15030 }
15031 print_operand_value (scratchbuf, 1, off);
252b5132
RH
15032 oappend (scratchbuf);
15033}
15034
15035static void
26ca5450 15036ptr_reg (int code, int sizeflag)
252b5132 15037{
2da11e11 15038 const char *s;
d708bcba 15039
1d9f512f 15040 *obufp++ = open_char;
20f0a1fc 15041 used_prefixes |= (prefixes & PREFIX_ADDR);
cb712a9e 15042 if (address_mode == mode_64bit)
c1a64871
JH
15043 {
15044 if (!(sizeflag & AFLAG))
db6eb5be 15045 s = names32[code - eAX_reg];
c1a64871 15046 else
db6eb5be 15047 s = names64[code - eAX_reg];
c1a64871 15048 }
52b15da3 15049 else if (sizeflag & AFLAG)
252b5132
RH
15050 s = names32[code - eAX_reg];
15051 else
15052 s = names16[code - eAX_reg];
15053 oappend (s);
1d9f512f
AM
15054 *obufp++ = close_char;
15055 *obufp = 0;
252b5132
RH
15056}
15057
15058static void
26ca5450 15059OP_ESreg (int code, int sizeflag)
252b5132 15060{
9306ca4a 15061 if (intel_syntax)
52fd6d94
JB
15062 {
15063 switch (codep[-1])
15064 {
15065 case 0x6d: /* insw/insl */
15066 intel_operand_size (z_mode, sizeflag);
15067 break;
15068 case 0xa5: /* movsw/movsl/movsq */
15069 case 0xa7: /* cmpsw/cmpsl/cmpsq */
15070 case 0xab: /* stosw/stosl */
15071 case 0xaf: /* scasw/scasl */
15072 intel_operand_size (v_mode, sizeflag);
15073 break;
15074 default:
15075 intel_operand_size (b_mode, sizeflag);
15076 }
15077 }
9ce09ba2 15078 oappend_maybe_intel ("%es:");
252b5132
RH
15079 ptr_reg (code, sizeflag);
15080}
15081
15082static void
26ca5450 15083OP_DSreg (int code, int sizeflag)
252b5132 15084{
9306ca4a 15085 if (intel_syntax)
52fd6d94
JB
15086 {
15087 switch (codep[-1])
15088 {
15089 case 0x6f: /* outsw/outsl */
15090 intel_operand_size (z_mode, sizeflag);
15091 break;
15092 case 0xa5: /* movsw/movsl/movsq */
15093 case 0xa7: /* cmpsw/cmpsl/cmpsq */
15094 case 0xad: /* lodsw/lodsl/lodsq */
15095 intel_operand_size (v_mode, sizeflag);
15096 break;
15097 default:
15098 intel_operand_size (b_mode, sizeflag);
15099 }
15100 }
285ca992
L
15101 /* Set active_seg_prefix to PREFIX_DS if it is unset so that the
15102 default segment register DS is printed. */
15103 if (!active_seg_prefix)
15104 active_seg_prefix = PREFIX_DS;
6608db57 15105 append_seg ();
252b5132
RH
15106 ptr_reg (code, sizeflag);
15107}
15108
252b5132 15109static void
26ca5450 15110OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15111{
9b60702d 15112 int add;
161a04f6 15113 if (rex & REX_R)
c4a530c5 15114 {
161a04f6 15115 USED_REX (REX_R);
c4a530c5
JB
15116 add = 8;
15117 }
cb712a9e 15118 else if (address_mode != mode_64bit && (prefixes & PREFIX_LOCK))
c4a530c5 15119 {
f16cd0d5 15120 all_prefixes[last_lock_prefix] = 0;
c4a530c5
JB
15121 used_prefixes |= PREFIX_LOCK;
15122 add = 8;
15123 }
9b60702d
L
15124 else
15125 add = 0;
7967e09e 15126 sprintf (scratchbuf, "%%cr%d", modrm.reg + add);
9ce09ba2 15127 oappend_maybe_intel (scratchbuf);
252b5132
RH
15128}
15129
252b5132 15130static void
26ca5450 15131OP_D (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15132{
9b60702d 15133 int add;
161a04f6
L
15134 USED_REX (REX_R);
15135 if (rex & REX_R)
52b15da3 15136 add = 8;
9b60702d
L
15137 else
15138 add = 0;
d708bcba 15139 if (intel_syntax)
7967e09e 15140 sprintf (scratchbuf, "db%d", modrm.reg + add);
d708bcba 15141 else
7967e09e 15142 sprintf (scratchbuf, "%%db%d", modrm.reg + add);
252b5132
RH
15143 oappend (scratchbuf);
15144}
15145
252b5132 15146static void
26ca5450 15147OP_T (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15148{
7967e09e 15149 sprintf (scratchbuf, "%%tr%d", modrm.reg);
9ce09ba2 15150 oappend_maybe_intel (scratchbuf);
252b5132
RH
15151}
15152
15153static void
6f74c397 15154OP_R (int bytemode, int sizeflag)
252b5132 15155{
68f34464
L
15156 /* Skip mod/rm byte. */
15157 MODRM_CHECK;
15158 codep++;
15159 OP_E_register (bytemode, sizeflag);
252b5132
RH
15160}
15161
15162static void
26ca5450 15163OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15164{
b9733481
L
15165 int reg = modrm.reg;
15166 const char **names;
15167
041bd2e0
JH
15168 used_prefixes |= (prefixes & PREFIX_DATA);
15169 if (prefixes & PREFIX_DATA)
20f0a1fc 15170 {
b9733481 15171 names = names_xmm;
161a04f6
L
15172 USED_REX (REX_R);
15173 if (rex & REX_R)
b9733481 15174 reg += 8;
20f0a1fc 15175 }
041bd2e0 15176 else
b9733481
L
15177 names = names_mm;
15178 oappend (names[reg]);
252b5132
RH
15179}
15180
c608c12e 15181static void
c0f3af97 15182OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
c608c12e 15183{
b9733481
L
15184 int reg = modrm.reg;
15185 const char **names;
15186
161a04f6
L
15187 USED_REX (REX_R);
15188 if (rex & REX_R)
b9733481 15189 reg += 8;
43234a1e
L
15190 if (vex.evex)
15191 {
15192 if (!vex.r)
15193 reg += 16;
15194 }
15195
539f890d
L
15196 if (need_vex
15197 && bytemode != xmm_mode
43234a1e
L
15198 && bytemode != xmmq_mode
15199 && bytemode != evex_half_bcst_xmmq_mode
15200 && bytemode != ymm_mode
539f890d 15201 && bytemode != scalar_mode)
c0f3af97
L
15202 {
15203 switch (vex.length)
15204 {
15205 case 128:
b9733481 15206 names = names_xmm;
c0f3af97
L
15207 break;
15208 case 256:
5fc35d96
IT
15209 if (vex.w
15210 || (bytemode != vex_vsib_q_w_dq_mode
15211 && bytemode != vex_vsib_q_w_d_mode))
6c30d220
L
15212 names = names_ymm;
15213 else
15214 names = names_xmm;
c0f3af97 15215 break;
43234a1e
L
15216 case 512:
15217 names = names_zmm;
15218 break;
c0f3af97
L
15219 default:
15220 abort ();
15221 }
15222 }
43234a1e
L
15223 else if (bytemode == xmmq_mode
15224 || bytemode == evex_half_bcst_xmmq_mode)
15225 {
15226 switch (vex.length)
15227 {
15228 case 128:
15229 case 256:
15230 names = names_xmm;
15231 break;
15232 case 512:
15233 names = names_ymm;
15234 break;
15235 default:
15236 abort ();
15237 }
15238 }
15239 else if (bytemode == ymm_mode)
15240 names = names_ymm;
c0f3af97 15241 else
b9733481
L
15242 names = names_xmm;
15243 oappend (names[reg]);
c608c12e
AM
15244}
15245
252b5132 15246static void
26ca5450 15247OP_EM (int bytemode, int sizeflag)
252b5132 15248{
b9733481
L
15249 int reg;
15250 const char **names;
15251
7967e09e 15252 if (modrm.mod != 3)
252b5132 15253 {
b6169b20
L
15254 if (intel_syntax
15255 && (bytemode == v_mode || bytemode == v_swap_mode))
9306ca4a
JB
15256 {
15257 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
15258 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 15259 }
252b5132
RH
15260 OP_E (bytemode, sizeflag);
15261 return;
15262 }
15263
b6169b20
L
15264 if ((sizeflag & SUFFIX_ALWAYS) && bytemode == v_swap_mode)
15265 swap_operand ();
15266
6608db57 15267 /* Skip mod/rm byte. */
4bba6815 15268 MODRM_CHECK;
252b5132 15269 codep++;
041bd2e0 15270 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 15271 reg = modrm.rm;
041bd2e0 15272 if (prefixes & PREFIX_DATA)
20f0a1fc 15273 {
b9733481 15274 names = names_xmm;
161a04f6
L
15275 USED_REX (REX_B);
15276 if (rex & REX_B)
b9733481 15277 reg += 8;
20f0a1fc 15278 }
041bd2e0 15279 else
b9733481
L
15280 names = names_mm;
15281 oappend (names[reg]);
252b5132
RH
15282}
15283
246c51aa
L
15284/* cvt* are the only instructions in sse2 which have
15285 both SSE and MMX operands and also have 0x66 prefix
15286 in their opcode. 0x66 was originally used to differentiate
15287 between SSE and MMX instruction(operands). So we have to handle the
4d9567e0
MM
15288 cvt* separately using OP_EMC and OP_MXC */
15289static void
15290OP_EMC (int bytemode, int sizeflag)
15291{
7967e09e 15292 if (modrm.mod != 3)
4d9567e0
MM
15293 {
15294 if (intel_syntax && bytemode == v_mode)
15295 {
15296 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
15297 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 15298 }
4d9567e0
MM
15299 OP_E (bytemode, sizeflag);
15300 return;
15301 }
246c51aa 15302
4d9567e0
MM
15303 /* Skip mod/rm byte. */
15304 MODRM_CHECK;
15305 codep++;
15306 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 15307 oappend (names_mm[modrm.rm]);
4d9567e0
MM
15308}
15309
15310static void
15311OP_MXC (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15312{
15313 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 15314 oappend (names_mm[modrm.reg]);
4d9567e0
MM
15315}
15316
c608c12e 15317static void
26ca5450 15318OP_EX (int bytemode, int sizeflag)
c608c12e 15319{
b9733481
L
15320 int reg;
15321 const char **names;
d6f574e0
L
15322
15323 /* Skip mod/rm byte. */
15324 MODRM_CHECK;
15325 codep++;
15326
7967e09e 15327 if (modrm.mod != 3)
c608c12e 15328 {
c1e679ec 15329 OP_E_memory (bytemode, sizeflag);
c608c12e
AM
15330 return;
15331 }
d6f574e0 15332
b9733481 15333 reg = modrm.rm;
161a04f6
L
15334 USED_REX (REX_B);
15335 if (rex & REX_B)
b9733481 15336 reg += 8;
43234a1e
L
15337 if (vex.evex)
15338 {
15339 USED_REX (REX_X);
15340 if ((rex & REX_X))
15341 reg += 16;
15342 }
c608c12e 15343
b6169b20 15344 if ((sizeflag & SUFFIX_ALWAYS)
fa99fab2
L
15345 && (bytemode == x_swap_mode
15346 || bytemode == d_swap_mode
7bb15c6f 15347 || bytemode == d_scalar_swap_mode
539f890d
L
15348 || bytemode == q_swap_mode
15349 || bytemode == q_scalar_swap_mode))
b6169b20
L
15350 swap_operand ();
15351
c0f3af97
L
15352 if (need_vex
15353 && bytemode != xmm_mode
6c30d220
L
15354 && bytemode != xmmdw_mode
15355 && bytemode != xmmqd_mode
15356 && bytemode != xmm_mb_mode
15357 && bytemode != xmm_mw_mode
15358 && bytemode != xmm_md_mode
15359 && bytemode != xmm_mq_mode
43234a1e 15360 && bytemode != xmm_mdq_mode
539f890d 15361 && bytemode != xmmq_mode
43234a1e
L
15362 && bytemode != evex_half_bcst_xmmq_mode
15363 && bytemode != ymm_mode
539f890d 15364 && bytemode != d_scalar_mode
7bb15c6f 15365 && bytemode != d_scalar_swap_mode
539f890d 15366 && bytemode != q_scalar_mode
1c480963
L
15367 && bytemode != q_scalar_swap_mode
15368 && bytemode != vex_scalar_w_dq_mode)
c0f3af97
L
15369 {
15370 switch (vex.length)
15371 {
15372 case 128:
b9733481 15373 names = names_xmm;
c0f3af97
L
15374 break;
15375 case 256:
b9733481 15376 names = names_ymm;
c0f3af97 15377 break;
43234a1e
L
15378 case 512:
15379 names = names_zmm;
15380 break;
c0f3af97
L
15381 default:
15382 abort ();
15383 }
15384 }
43234a1e
L
15385 else if (bytemode == xmmq_mode
15386 || bytemode == evex_half_bcst_xmmq_mode)
15387 {
15388 switch (vex.length)
15389 {
15390 case 128:
15391 case 256:
15392 names = names_xmm;
15393 break;
15394 case 512:
15395 names = names_ymm;
15396 break;
15397 default:
15398 abort ();
15399 }
15400 }
15401 else if (bytemode == ymm_mode)
15402 names = names_ymm;
c0f3af97 15403 else
b9733481
L
15404 names = names_xmm;
15405 oappend (names[reg]);
c608c12e
AM
15406}
15407
252b5132 15408static void
26ca5450 15409OP_MS (int bytemode, int sizeflag)
252b5132 15410{
7967e09e 15411 if (modrm.mod == 3)
2da11e11
AM
15412 OP_EM (bytemode, sizeflag);
15413 else
6608db57 15414 BadOp ();
252b5132
RH
15415}
15416
992aaec9 15417static void
26ca5450 15418OP_XS (int bytemode, int sizeflag)
992aaec9 15419{
7967e09e 15420 if (modrm.mod == 3)
992aaec9
AM
15421 OP_EX (bytemode, sizeflag);
15422 else
6608db57 15423 BadOp ();
992aaec9
AM
15424}
15425
cc0ec051
AM
15426static void
15427OP_M (int bytemode, int sizeflag)
15428{
7967e09e 15429 if (modrm.mod == 3)
75413a22
L
15430 /* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */
15431 BadOp ();
cc0ec051
AM
15432 else
15433 OP_E (bytemode, sizeflag);
15434}
15435
15436static void
15437OP_0f07 (int bytemode, int sizeflag)
15438{
7967e09e 15439 if (modrm.mod != 3 || modrm.rm != 0)
cc0ec051
AM
15440 BadOp ();
15441 else
15442 OP_E (bytemode, sizeflag);
15443}
15444
46e883c5 15445/* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
246c51aa 15446 32bit mode and "xchg %rax,%rax" in 64bit mode. */
46e883c5 15447
cc0ec051 15448static void
46e883c5 15449NOP_Fixup1 (int bytemode, int sizeflag)
cc0ec051 15450{
8b38ad71
L
15451 if ((prefixes & PREFIX_DATA) != 0
15452 || (rex != 0
15453 && rex != 0x48
15454 && address_mode == mode_64bit))
46e883c5
L
15455 OP_REG (bytemode, sizeflag);
15456 else
15457 strcpy (obuf, "nop");
15458}
15459
15460static void
15461NOP_Fixup2 (int bytemode, int sizeflag)
15462{
8b38ad71
L
15463 if ((prefixes & PREFIX_DATA) != 0
15464 || (rex != 0
15465 && rex != 0x48
15466 && address_mode == mode_64bit))
46e883c5 15467 OP_IMREG (bytemode, sizeflag);
cc0ec051
AM
15468}
15469
84037f8c 15470static const char *const Suffix3DNow[] = {
252b5132
RH
15471/* 00 */ NULL, NULL, NULL, NULL,
15472/* 04 */ NULL, NULL, NULL, NULL,
15473/* 08 */ NULL, NULL, NULL, NULL,
9e525108 15474/* 0C */ "pi2fw", "pi2fd", NULL, NULL,
252b5132
RH
15475/* 10 */ NULL, NULL, NULL, NULL,
15476/* 14 */ NULL, NULL, NULL, NULL,
15477/* 18 */ NULL, NULL, NULL, NULL,
9e525108 15478/* 1C */ "pf2iw", "pf2id", NULL, NULL,
252b5132
RH
15479/* 20 */ NULL, NULL, NULL, NULL,
15480/* 24 */ NULL, NULL, NULL, NULL,
15481/* 28 */ NULL, NULL, NULL, NULL,
15482/* 2C */ NULL, NULL, NULL, NULL,
15483/* 30 */ NULL, NULL, NULL, NULL,
15484/* 34 */ NULL, NULL, NULL, NULL,
15485/* 38 */ NULL, NULL, NULL, NULL,
15486/* 3C */ NULL, NULL, NULL, NULL,
15487/* 40 */ NULL, NULL, NULL, NULL,
15488/* 44 */ NULL, NULL, NULL, NULL,
15489/* 48 */ NULL, NULL, NULL, NULL,
15490/* 4C */ NULL, NULL, NULL, NULL,
15491/* 50 */ NULL, NULL, NULL, NULL,
15492/* 54 */ NULL, NULL, NULL, NULL,
15493/* 58 */ NULL, NULL, NULL, NULL,
15494/* 5C */ NULL, NULL, NULL, NULL,
15495/* 60 */ NULL, NULL, NULL, NULL,
15496/* 64 */ NULL, NULL, NULL, NULL,
15497/* 68 */ NULL, NULL, NULL, NULL,
15498/* 6C */ NULL, NULL, NULL, NULL,
15499/* 70 */ NULL, NULL, NULL, NULL,
15500/* 74 */ NULL, NULL, NULL, NULL,
15501/* 78 */ NULL, NULL, NULL, NULL,
15502/* 7C */ NULL, NULL, NULL, NULL,
15503/* 80 */ NULL, NULL, NULL, NULL,
15504/* 84 */ NULL, NULL, NULL, NULL,
9e525108
AM
15505/* 88 */ NULL, NULL, "pfnacc", NULL,
15506/* 8C */ NULL, NULL, "pfpnacc", NULL,
252b5132
RH
15507/* 90 */ "pfcmpge", NULL, NULL, NULL,
15508/* 94 */ "pfmin", NULL, "pfrcp", "pfrsqrt",
15509/* 98 */ NULL, NULL, "pfsub", NULL,
15510/* 9C */ NULL, NULL, "pfadd", NULL,
15511/* A0 */ "pfcmpgt", NULL, NULL, NULL,
15512/* A4 */ "pfmax", NULL, "pfrcpit1", "pfrsqit1",
15513/* A8 */ NULL, NULL, "pfsubr", NULL,
15514/* AC */ NULL, NULL, "pfacc", NULL,
15515/* B0 */ "pfcmpeq", NULL, NULL, NULL,
9beff690 15516/* B4 */ "pfmul", NULL, "pfrcpit2", "pmulhrw",
9e525108 15517/* B8 */ NULL, NULL, NULL, "pswapd",
252b5132
RH
15518/* BC */ NULL, NULL, NULL, "pavgusb",
15519/* C0 */ NULL, NULL, NULL, NULL,
15520/* C4 */ NULL, NULL, NULL, NULL,
15521/* C8 */ NULL, NULL, NULL, NULL,
15522/* CC */ NULL, NULL, NULL, NULL,
15523/* D0 */ NULL, NULL, NULL, NULL,
15524/* D4 */ NULL, NULL, NULL, NULL,
15525/* D8 */ NULL, NULL, NULL, NULL,
15526/* DC */ NULL, NULL, NULL, NULL,
15527/* E0 */ NULL, NULL, NULL, NULL,
15528/* E4 */ NULL, NULL, NULL, NULL,
15529/* E8 */ NULL, NULL, NULL, NULL,
15530/* EC */ NULL, NULL, NULL, NULL,
15531/* F0 */ NULL, NULL, NULL, NULL,
15532/* F4 */ NULL, NULL, NULL, NULL,
15533/* F8 */ NULL, NULL, NULL, NULL,
15534/* FC */ NULL, NULL, NULL, NULL,
15535};
15536
15537static void
26ca5450 15538OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132
RH
15539{
15540 const char *mnemonic;
15541
15542 FETCH_DATA (the_info, codep + 1);
15543 /* AMD 3DNow! instructions are specified by an opcode suffix in the
15544 place where an 8-bit immediate would normally go. ie. the last
15545 byte of the instruction. */
ea397f5b 15546 obufp = mnemonicendp;
c608c12e 15547 mnemonic = Suffix3DNow[*codep++ & 0xff];
252b5132 15548 if (mnemonic)
2da11e11 15549 oappend (mnemonic);
252b5132
RH
15550 else
15551 {
15552 /* Since a variable sized modrm/sib chunk is between the start
15553 of the opcode (0x0f0f) and the opcode suffix, we need to do
15554 all the modrm processing first, and don't know until now that
15555 we have a bad opcode. This necessitates some cleaning up. */
ce518a5f
L
15556 op_out[0][0] = '\0';
15557 op_out[1][0] = '\0';
6608db57 15558 BadOp ();
252b5132 15559 }
ea397f5b 15560 mnemonicendp = obufp;
252b5132 15561}
c608c12e 15562
ea397f5b
L
15563static struct op simd_cmp_op[] =
15564{
15565 { STRING_COMMA_LEN ("eq") },
15566 { STRING_COMMA_LEN ("lt") },
15567 { STRING_COMMA_LEN ("le") },
15568 { STRING_COMMA_LEN ("unord") },
15569 { STRING_COMMA_LEN ("neq") },
15570 { STRING_COMMA_LEN ("nlt") },
15571 { STRING_COMMA_LEN ("nle") },
15572 { STRING_COMMA_LEN ("ord") }
c608c12e
AM
15573};
15574
15575static void
ad19981d 15576CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
c608c12e
AM
15577{
15578 unsigned int cmp_type;
15579
15580 FETCH_DATA (the_info, codep + 1);
15581 cmp_type = *codep++ & 0xff;
c0f3af97 15582 if (cmp_type < ARRAY_SIZE (simd_cmp_op))
c608c12e 15583 {
ad19981d 15584 char suffix [3];
ea397f5b 15585 char *p = mnemonicendp - 2;
ad19981d
L
15586 suffix[0] = p[0];
15587 suffix[1] = p[1];
15588 suffix[2] = '\0';
ea397f5b
L
15589 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
15590 mnemonicendp += simd_cmp_op[cmp_type].len;
c608c12e
AM
15591 }
15592 else
15593 {
ad19981d
L
15594 /* We have a reserved extension byte. Output it directly. */
15595 scratchbuf[0] = '$';
15596 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 15597 oappend_maybe_intel (scratchbuf);
ad19981d 15598 scratchbuf[0] = '\0';
c608c12e
AM
15599 }
15600}
15601
9916071f
AP
15602static void
15603OP_Mwaitx (int bytemode ATTRIBUTE_UNUSED,
15604 int sizeflag ATTRIBUTE_UNUSED)
15605{
15606 /* mwaitx %eax,%ecx,%ebx */
15607 if (!intel_syntax)
15608 {
15609 const char **names = (address_mode == mode_64bit
15610 ? names64 : names32);
15611 strcpy (op_out[0], names[0]);
15612 strcpy (op_out[1], names[1]);
15613 strcpy (op_out[2], names[3]);
15614 two_source_ops = 1;
15615 }
15616 /* Skip mod/rm byte. */
15617 MODRM_CHECK;
15618 codep++;
15619}
15620
ca164297 15621static void
b844680a
L
15622OP_Mwait (int bytemode ATTRIBUTE_UNUSED,
15623 int sizeflag ATTRIBUTE_UNUSED)
15624{
15625 /* mwait %eax,%ecx */
15626 if (!intel_syntax)
15627 {
15628 const char **names = (address_mode == mode_64bit
15629 ? names64 : names32);
15630 strcpy (op_out[0], names[0]);
15631 strcpy (op_out[1], names[1]);
15632 two_source_ops = 1;
15633 }
15634 /* Skip mod/rm byte. */
15635 MODRM_CHECK;
15636 codep++;
15637}
15638
15639static void
15640OP_Monitor (int bytemode ATTRIBUTE_UNUSED,
15641 int sizeflag ATTRIBUTE_UNUSED)
ca164297 15642{
b844680a
L
15643 /* monitor %eax,%ecx,%edx" */
15644 if (!intel_syntax)
ca164297 15645 {
b844680a 15646 const char **op1_names;
cb712a9e
L
15647 const char **names = (address_mode == mode_64bit
15648 ? names64 : names32);
1d9f512f 15649
b844680a
L
15650 if (!(prefixes & PREFIX_ADDR))
15651 op1_names = (address_mode == mode_16bit
15652 ? names16 : names);
ca164297
L
15653 else
15654 {
b844680a 15655 /* Remove "addr16/addr32". */
f16cd0d5 15656 all_prefixes[last_addr_prefix] = 0;
b844680a
L
15657 op1_names = (address_mode != mode_32bit
15658 ? names32 : names16);
15659 used_prefixes |= PREFIX_ADDR;
ca164297 15660 }
b844680a
L
15661 strcpy (op_out[0], op1_names[0]);
15662 strcpy (op_out[1], names[1]);
15663 strcpy (op_out[2], names[2]);
15664 two_source_ops = 1;
ca164297 15665 }
b844680a
L
15666 /* Skip mod/rm byte. */
15667 MODRM_CHECK;
15668 codep++;
30123838
JB
15669}
15670
6608db57
KH
15671static void
15672BadOp (void)
2da11e11 15673{
6608db57
KH
15674 /* Throw away prefixes and 1st. opcode byte. */
15675 codep = insn_codep + 1;
2da11e11
AM
15676 oappend ("(bad)");
15677}
4cc91dba 15678
35c52694
L
15679static void
15680REP_Fixup (int bytemode, int sizeflag)
15681{
15682 /* The 0xf3 prefix should be displayed as "rep" for ins, outs, movs,
15683 lods and stos. */
35c52694 15684 if (prefixes & PREFIX_REPZ)
f16cd0d5 15685 all_prefixes[last_repz_prefix] = REP_PREFIX;
35c52694
L
15686
15687 switch (bytemode)
15688 {
15689 case al_reg:
15690 case eAX_reg:
15691 case indir_dx_reg:
15692 OP_IMREG (bytemode, sizeflag);
15693 break;
15694 case eDI_reg:
15695 OP_ESreg (bytemode, sizeflag);
15696 break;
15697 case eSI_reg:
15698 OP_DSreg (bytemode, sizeflag);
15699 break;
15700 default:
15701 abort ();
15702 break;
15703 }
15704}
f5804c90 15705
7e8b059b
L
15706/* For BND-prefixed instructions 0xF2 prefix should be displayed as
15707 "bnd". */
15708
15709static void
15710BND_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15711{
15712 if (prefixes & PREFIX_REPNZ)
15713 all_prefixes[last_repnz_prefix] = BND_PREFIX;
15714}
15715
04ef582a
L
15716/* For NOTRACK-prefixed instructions, 0x3E prefix should be displayed as
15717 "notrack". */
15718
15719static void
15720NOTRACK_Fixup (int bytemode ATTRIBUTE_UNUSED,
15721 int sizeflag ATTRIBUTE_UNUSED)
15722{
9fef80d6 15723 if (active_seg_prefix == PREFIX_DS
04ef582a
L
15724 && (address_mode != mode_64bit || last_data_prefix < 0))
15725 {
4e9ac44a 15726 /* NOTRACK prefix is only valid on indirect branch instructions.
9fef80d6 15727 NB: DATA prefix is unsupported for Intel64. */
04ef582a
L
15728 active_seg_prefix = 0;
15729 all_prefixes[last_seg_prefix] = NOTRACK_PREFIX;
15730 }
15731}
15732
42164a71
L
15733/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
15734 "xacquire"/"xrelease" for memory operand if there is a LOCK prefix.
15735 */
15736
15737static void
15738HLE_Fixup1 (int bytemode, int sizeflag)
15739{
15740 if (modrm.mod != 3
15741 && (prefixes & PREFIX_LOCK) != 0)
15742 {
15743 if (prefixes & PREFIX_REPZ)
15744 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15745 if (prefixes & PREFIX_REPNZ)
15746 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
15747 }
15748
15749 OP_E (bytemode, sizeflag);
15750}
15751
15752/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
15753 "xacquire"/"xrelease" for memory operand. No check for LOCK prefix.
15754 */
15755
15756static void
15757HLE_Fixup2 (int bytemode, int sizeflag)
15758{
15759 if (modrm.mod != 3)
15760 {
15761 if (prefixes & PREFIX_REPZ)
15762 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15763 if (prefixes & PREFIX_REPNZ)
15764 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
15765 }
15766
15767 OP_E (bytemode, sizeflag);
15768}
15769
15770/* Similar to OP_E. But the 0xf3 prefixes should be displayed as
15771 "xrelease" for memory operand. No check for LOCK prefix. */
15772
15773static void
15774HLE_Fixup3 (int bytemode, int sizeflag)
15775{
15776 if (modrm.mod != 3
15777 && last_repz_prefix > last_repnz_prefix
15778 && (prefixes & PREFIX_REPZ) != 0)
15779 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15780
15781 OP_E (bytemode, sizeflag);
15782}
15783
f5804c90
L
15784static void
15785CMPXCHG8B_Fixup (int bytemode, int sizeflag)
15786{
161a04f6
L
15787 USED_REX (REX_W);
15788 if (rex & REX_W)
f5804c90
L
15789 {
15790 /* Change cmpxchg8b to cmpxchg16b. */
ea397f5b
L
15791 char *p = mnemonicendp - 2;
15792 mnemonicendp = stpcpy (p, "16b");
fb9c77c7 15793 bytemode = o_mode;
f5804c90 15794 }
42164a71
L
15795 else if ((prefixes & PREFIX_LOCK) != 0)
15796 {
15797 if (prefixes & PREFIX_REPZ)
15798 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15799 if (prefixes & PREFIX_REPNZ)
15800 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
15801 }
15802
f5804c90
L
15803 OP_M (bytemode, sizeflag);
15804}
42903f7f
L
15805
15806static void
15807XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED)
15808{
b9733481
L
15809 const char **names;
15810
c0f3af97
L
15811 if (need_vex)
15812 {
15813 switch (vex.length)
15814 {
15815 case 128:
b9733481 15816 names = names_xmm;
c0f3af97
L
15817 break;
15818 case 256:
b9733481 15819 names = names_ymm;
c0f3af97
L
15820 break;
15821 default:
15822 abort ();
15823 }
15824 }
15825 else
b9733481
L
15826 names = names_xmm;
15827 oappend (names[reg]);
42903f7f 15828}
381d071f
L
15829
15830static void
15831CRC32_Fixup (int bytemode, int sizeflag)
15832{
15833 /* Add proper suffix to "crc32". */
ea397f5b 15834 char *p = mnemonicendp;
381d071f
L
15835
15836 switch (bytemode)
15837 {
15838 case b_mode:
20592a94 15839 if (intel_syntax)
ea397f5b 15840 goto skip;
20592a94 15841
381d071f
L
15842 *p++ = 'b';
15843 break;
15844 case v_mode:
20592a94 15845 if (intel_syntax)
ea397f5b 15846 goto skip;
20592a94 15847
381d071f
L
15848 USED_REX (REX_W);
15849 if (rex & REX_W)
15850 *p++ = 'q';
7bb15c6f 15851 else
f16cd0d5
L
15852 {
15853 if (sizeflag & DFLAG)
15854 *p++ = 'l';
15855 else
15856 *p++ = 'w';
15857 used_prefixes |= (prefixes & PREFIX_DATA);
15858 }
381d071f
L
15859 break;
15860 default:
15861 oappend (INTERNAL_DISASSEMBLER_ERROR);
15862 break;
15863 }
ea397f5b 15864 mnemonicendp = p;
381d071f
L
15865 *p = '\0';
15866
ea397f5b 15867skip:
381d071f
L
15868 if (modrm.mod == 3)
15869 {
15870 int add;
15871
15872 /* Skip mod/rm byte. */
15873 MODRM_CHECK;
15874 codep++;
15875
15876 USED_REX (REX_B);
15877 add = (rex & REX_B) ? 8 : 0;
15878 if (bytemode == b_mode)
15879 {
15880 USED_REX (0);
15881 if (rex)
15882 oappend (names8rex[modrm.rm + add]);
15883 else
15884 oappend (names8[modrm.rm + add]);
15885 }
15886 else
15887 {
15888 USED_REX (REX_W);
15889 if (rex & REX_W)
15890 oappend (names64[modrm.rm + add]);
15891 else if ((prefixes & PREFIX_DATA))
15892 oappend (names16[modrm.rm + add]);
15893 else
15894 oappend (names32[modrm.rm + add]);
15895 }
15896 }
15897 else
9344ff29 15898 OP_E (bytemode, sizeflag);
381d071f 15899}
85f10a01 15900
eacc9c89
L
15901static void
15902FXSAVE_Fixup (int bytemode, int sizeflag)
15903{
15904 /* Add proper suffix to "fxsave" and "fxrstor". */
15905 USED_REX (REX_W);
15906 if (rex & REX_W)
15907 {
15908 char *p = mnemonicendp;
15909 *p++ = '6';
15910 *p++ = '4';
15911 *p = '\0';
15912 mnemonicendp = p;
15913 }
15914 OP_M (bytemode, sizeflag);
15915}
15916
15c7c1d8
JB
15917static void
15918PCMPESTR_Fixup (int bytemode, int sizeflag)
15919{
15920 /* Add proper suffix to "{,v}pcmpestr{i,m}". */
15921 if (!intel_syntax)
15922 {
15923 char *p = mnemonicendp;
15924
15925 USED_REX (REX_W);
15926 if (rex & REX_W)
15927 *p++ = 'q';
15928 else if (sizeflag & SUFFIX_ALWAYS)
15929 *p++ = 'l';
15930
15931 *p = '\0';
15932 mnemonicendp = p;
15933 }
15934
15935 OP_EX (bytemode, sizeflag);
15936}
15937
c0f3af97
L
15938/* Display the destination register operand for instructions with
15939 VEX. */
15940
15941static void
15942OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
15943{
539f890d 15944 int reg;
b9733481
L
15945 const char **names;
15946
c0f3af97
L
15947 if (!need_vex)
15948 abort ();
15949
15950 if (!need_vex_reg)
15951 return;
15952
539f890d 15953 reg = vex.register_specifier;
5f847646
JB
15954 if (address_mode != mode_64bit)
15955 reg &= 7;
15956 else if (vex.evex && !vex.v)
15957 reg += 16;
43234a1e 15958
539f890d
L
15959 if (bytemode == vex_scalar_mode)
15960 {
15961 oappend (names_xmm[reg]);
15962 return;
15963 }
15964
c0f3af97
L
15965 switch (vex.length)
15966 {
15967 case 128:
15968 switch (bytemode)
15969 {
15970 case vex_mode:
15971 case vex128_mode:
6c30d220 15972 case vex_vsib_q_w_dq_mode:
5fc35d96 15973 case vex_vsib_q_w_d_mode:
cb21baef
L
15974 names = names_xmm;
15975 break;
15976 case dq_mode:
390a6789 15977 if (rex & REX_W)
cb21baef
L
15978 names = names64;
15979 else
15980 names = names32;
c0f3af97 15981 break;
1ba585e8 15982 case mask_bd_mode:
43234a1e 15983 case mask_mode:
9889cbb1
L
15984 if (reg > 0x7)
15985 {
15986 oappend ("(bad)");
15987 return;
15988 }
43234a1e
L
15989 names = names_mask;
15990 break;
c0f3af97
L
15991 default:
15992 abort ();
15993 return;
15994 }
c0f3af97
L
15995 break;
15996 case 256:
15997 switch (bytemode)
15998 {
15999 case vex_mode:
16000 case vex256_mode:
6c30d220
L
16001 names = names_ymm;
16002 break;
16003 case vex_vsib_q_w_dq_mode:
5fc35d96 16004 case vex_vsib_q_w_d_mode:
6c30d220 16005 names = vex.w ? names_ymm : names_xmm;
c0f3af97 16006 break;
1ba585e8 16007 case mask_bd_mode:
43234a1e 16008 case mask_mode:
9889cbb1
L
16009 if (reg > 0x7)
16010 {
16011 oappend ("(bad)");
16012 return;
16013 }
43234a1e
L
16014 names = names_mask;
16015 break;
c0f3af97 16016 default:
a37a2806
NC
16017 /* See PR binutils/20893 for a reproducer. */
16018 oappend ("(bad)");
c0f3af97
L
16019 return;
16020 }
c0f3af97 16021 break;
43234a1e
L
16022 case 512:
16023 names = names_zmm;
16024 break;
c0f3af97
L
16025 default:
16026 abort ();
16027 break;
16028 }
539f890d 16029 oappend (names[reg]);
c0f3af97
L
16030}
16031
922d8de8
DR
16032/* Get the VEX immediate byte without moving codep. */
16033
16034static unsigned char
ccc5981b 16035get_vex_imm8 (int sizeflag, int opnum)
922d8de8
DR
16036{
16037 int bytes_before_imm = 0;
16038
922d8de8
DR
16039 if (modrm.mod != 3)
16040 {
16041 /* There are SIB/displacement bytes. */
16042 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
6c067bbb 16043 {
922d8de8 16044 /* 32/64 bit address mode */
6c067bbb 16045 int base = modrm.rm;
922d8de8
DR
16046
16047 /* Check SIB byte. */
6c067bbb
RM
16048 if (base == 4)
16049 {
16050 FETCH_DATA (the_info, codep + 1);
16051 base = *codep & 7;
16052 /* When decoding the third source, don't increase
16053 bytes_before_imm as this has already been incremented
16054 by one in OP_E_memory while decoding the second
16055 source operand. */
16056 if (opnum == 0)
16057 bytes_before_imm++;
16058 }
16059
16060 /* Don't increase bytes_before_imm when decoding the third source,
16061 it has already been incremented by OP_E_memory while decoding
16062 the second source operand. */
16063 if (opnum == 0)
16064 {
16065 switch (modrm.mod)
16066 {
16067 case 0:
16068 /* When modrm.rm == 5 or modrm.rm == 4 and base in
16069 SIB == 5, there is a 4 byte displacement. */
16070 if (base != 5)
16071 /* No displacement. */
16072 break;
1a0670f3 16073 /* Fall through. */
6c067bbb
RM
16074 case 2:
16075 /* 4 byte displacement. */
16076 bytes_before_imm += 4;
16077 break;
16078 case 1:
16079 /* 1 byte displacement. */
16080 bytes_before_imm++;
16081 break;
16082 }
16083 }
16084 }
922d8de8 16085 else
02e647f9
SP
16086 {
16087 /* 16 bit address mode */
6c067bbb
RM
16088 /* Don't increase bytes_before_imm when decoding the third source,
16089 it has already been incremented by OP_E_memory while decoding
16090 the second source operand. */
16091 if (opnum == 0)
16092 {
02e647f9
SP
16093 switch (modrm.mod)
16094 {
16095 case 0:
16096 /* When modrm.rm == 6, there is a 2 byte displacement. */
16097 if (modrm.rm != 6)
16098 /* No displacement. */
16099 break;
1a0670f3 16100 /* Fall through. */
02e647f9
SP
16101 case 2:
16102 /* 2 byte displacement. */
16103 bytes_before_imm += 2;
16104 break;
16105 case 1:
16106 /* 1 byte displacement: when decoding the third source,
16107 don't increase bytes_before_imm as this has already
16108 been incremented by one in OP_E_memory while decoding
16109 the second source operand. */
16110 if (opnum == 0)
16111 bytes_before_imm++;
ccc5981b 16112
02e647f9
SP
16113 break;
16114 }
922d8de8
DR
16115 }
16116 }
16117 }
16118
16119 FETCH_DATA (the_info, codep + bytes_before_imm + 1);
16120 return codep [bytes_before_imm];
16121}
16122
16123static void
16124OP_EX_VexReg (int bytemode, int sizeflag, int reg)
16125{
b9733481
L
16126 const char **names;
16127
922d8de8
DR
16128 if (reg == -1 && modrm.mod != 3)
16129 {
16130 OP_E_memory (bytemode, sizeflag);
16131 return;
16132 }
16133 else
16134 {
16135 if (reg == -1)
16136 {
16137 reg = modrm.rm;
16138 USED_REX (REX_B);
16139 if (rex & REX_B)
16140 reg += 8;
16141 }
5f847646
JB
16142 if (address_mode != mode_64bit)
16143 reg &= 7;
922d8de8
DR
16144 }
16145
16146 switch (vex.length)
16147 {
16148 case 128:
b9733481 16149 names = names_xmm;
922d8de8
DR
16150 break;
16151 case 256:
b9733481 16152 names = names_ymm;
922d8de8
DR
16153 break;
16154 default:
16155 abort ();
16156 }
b9733481 16157 oappend (names[reg]);
922d8de8
DR
16158}
16159
a683cc34
SP
16160static void
16161OP_EX_VexImmW (int bytemode, int sizeflag)
16162{
16163 int reg = -1;
16164 static unsigned char vex_imm8;
16165
16166 if (vex_w_done == 0)
16167 {
16168 vex_w_done = 1;
16169
16170 /* Skip mod/rm byte. */
16171 MODRM_CHECK;
16172 codep++;
16173
16174 vex_imm8 = get_vex_imm8 (sizeflag, 0);
16175
16176 if (vex.w)
16177 reg = vex_imm8 >> 4;
16178
16179 OP_EX_VexReg (bytemode, sizeflag, reg);
16180 }
16181 else if (vex_w_done == 1)
16182 {
16183 vex_w_done = 2;
16184
16185 if (!vex.w)
16186 reg = vex_imm8 >> 4;
16187
16188 OP_EX_VexReg (bytemode, sizeflag, reg);
16189 }
16190 else
16191 {
16192 /* Output the imm8 directly. */
16193 scratchbuf[0] = '$';
16194 print_operand_value (scratchbuf + 1, 1, vex_imm8 & 0xf);
9ce09ba2 16195 oappend_maybe_intel (scratchbuf);
a683cc34
SP
16196 scratchbuf[0] = '\0';
16197 codep++;
16198 }
16199}
16200
5dd85c99
SP
16201static void
16202OP_Vex_2src (int bytemode, int sizeflag)
16203{
16204 if (modrm.mod == 3)
16205 {
b9733481 16206 int reg = modrm.rm;
5dd85c99 16207 USED_REX (REX_B);
b9733481
L
16208 if (rex & REX_B)
16209 reg += 8;
16210 oappend (names_xmm[reg]);
5dd85c99
SP
16211 }
16212 else
16213 {
16214 if (intel_syntax
16215 && (bytemode == v_mode || bytemode == v_swap_mode))
16216 {
16217 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
16218 used_prefixes |= (prefixes & PREFIX_DATA);
16219 }
16220 OP_E (bytemode, sizeflag);
16221 }
16222}
16223
16224static void
16225OP_Vex_2src_1 (int bytemode, int sizeflag)
16226{
16227 if (modrm.mod == 3)
16228 {
16229 /* Skip mod/rm byte. */
16230 MODRM_CHECK;
16231 codep++;
16232 }
16233
16234 if (vex.w)
5f847646
JB
16235 {
16236 unsigned int reg = vex.register_specifier;
16237
16238 if (address_mode != mode_64bit)
16239 reg &= 7;
16240 oappend (names_xmm[reg]);
16241 }
5dd85c99
SP
16242 else
16243 OP_Vex_2src (bytemode, sizeflag);
16244}
16245
16246static void
16247OP_Vex_2src_2 (int bytemode, int sizeflag)
16248{
16249 if (vex.w)
16250 OP_Vex_2src (bytemode, sizeflag);
16251 else
5f847646
JB
16252 {
16253 unsigned int reg = vex.register_specifier;
16254
16255 if (address_mode != mode_64bit)
16256 reg &= 7;
16257 oappend (names_xmm[reg]);
16258 }
5dd85c99
SP
16259}
16260
922d8de8
DR
16261static void
16262OP_EX_VexW (int bytemode, int sizeflag)
16263{
16264 int reg = -1;
16265
16266 if (!vex_w_done)
16267 {
41effecb
SP
16268 /* Skip mod/rm byte. */
16269 MODRM_CHECK;
16270 codep++;
16271
922d8de8 16272 if (vex.w)
ccc5981b 16273 reg = get_vex_imm8 (sizeflag, 0) >> 4;
922d8de8
DR
16274 }
16275 else
16276 {
16277 if (!vex.w)
ccc5981b 16278 reg = get_vex_imm8 (sizeflag, 1) >> 4;
922d8de8
DR
16279 }
16280
16281 OP_EX_VexReg (bytemode, sizeflag, reg);
922d8de8 16282
3a2430e0
JB
16283 if (vex_w_done)
16284 codep++;
16285 vex_w_done = 1;
922d8de8
DR
16286}
16287
c0f3af97
L
16288static void
16289OP_REG_VexI4 (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16290{
16291 int reg;
b9733481
L
16292 const char **names;
16293
c0f3af97
L
16294 FETCH_DATA (the_info, codep + 1);
16295 reg = *codep++;
16296
16297 if (bytemode != x_mode)
16298 abort ();
16299
c0f3af97 16300 reg >>= 4;
5f847646
JB
16301 if (address_mode != mode_64bit)
16302 reg &= 7;
dae39acc 16303
c0f3af97
L
16304 switch (vex.length)
16305 {
16306 case 128:
b9733481 16307 names = names_xmm;
c0f3af97
L
16308 break;
16309 case 256:
b9733481 16310 names = names_ymm;
c0f3af97
L
16311 break;
16312 default:
16313 abort ();
16314 }
b9733481 16315 oappend (names[reg]);
c0f3af97
L
16316}
16317
922d8de8
DR
16318static void
16319OP_XMM_VexW (int bytemode, int sizeflag)
16320{
16321 /* Turn off the REX.W bit since it is used for swapping operands
16322 now. */
16323 rex &= ~REX_W;
16324 OP_XMM (bytemode, sizeflag);
16325}
16326
c0f3af97
L
16327static void
16328OP_EX_Vex (int bytemode, int sizeflag)
16329{
16330 if (modrm.mod != 3)
16331 {
16332 if (vex.register_specifier != 0)
16333 BadOp ();
16334 need_vex_reg = 0;
16335 }
16336 OP_EX (bytemode, sizeflag);
16337}
16338
16339static void
16340OP_XMM_Vex (int bytemode, int sizeflag)
16341{
16342 if (modrm.mod != 3)
16343 {
16344 if (vex.register_specifier != 0)
16345 BadOp ();
16346 need_vex_reg = 0;
16347 }
16348 OP_XMM (bytemode, sizeflag);
16349}
16350
ea397f5b
L
16351static struct op vex_cmp_op[] =
16352{
16353 { STRING_COMMA_LEN ("eq") },
16354 { STRING_COMMA_LEN ("lt") },
16355 { STRING_COMMA_LEN ("le") },
16356 { STRING_COMMA_LEN ("unord") },
16357 { STRING_COMMA_LEN ("neq") },
16358 { STRING_COMMA_LEN ("nlt") },
16359 { STRING_COMMA_LEN ("nle") },
16360 { STRING_COMMA_LEN ("ord") },
16361 { STRING_COMMA_LEN ("eq_uq") },
16362 { STRING_COMMA_LEN ("nge") },
16363 { STRING_COMMA_LEN ("ngt") },
16364 { STRING_COMMA_LEN ("false") },
16365 { STRING_COMMA_LEN ("neq_oq") },
16366 { STRING_COMMA_LEN ("ge") },
16367 { STRING_COMMA_LEN ("gt") },
16368 { STRING_COMMA_LEN ("true") },
16369 { STRING_COMMA_LEN ("eq_os") },
16370 { STRING_COMMA_LEN ("lt_oq") },
16371 { STRING_COMMA_LEN ("le_oq") },
16372 { STRING_COMMA_LEN ("unord_s") },
16373 { STRING_COMMA_LEN ("neq_us") },
16374 { STRING_COMMA_LEN ("nlt_uq") },
16375 { STRING_COMMA_LEN ("nle_uq") },
16376 { STRING_COMMA_LEN ("ord_s") },
16377 { STRING_COMMA_LEN ("eq_us") },
16378 { STRING_COMMA_LEN ("nge_uq") },
16379 { STRING_COMMA_LEN ("ngt_uq") },
16380 { STRING_COMMA_LEN ("false_os") },
16381 { STRING_COMMA_LEN ("neq_os") },
16382 { STRING_COMMA_LEN ("ge_oq") },
16383 { STRING_COMMA_LEN ("gt_oq") },
16384 { STRING_COMMA_LEN ("true_us") },
c0f3af97
L
16385};
16386
16387static void
16388VCMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16389{
16390 unsigned int cmp_type;
16391
16392 FETCH_DATA (the_info, codep + 1);
16393 cmp_type = *codep++ & 0xff;
16394 if (cmp_type < ARRAY_SIZE (vex_cmp_op))
16395 {
16396 char suffix [3];
ea397f5b 16397 char *p = mnemonicendp - 2;
c0f3af97
L
16398 suffix[0] = p[0];
16399 suffix[1] = p[1];
16400 suffix[2] = '\0';
ea397f5b
L
16401 sprintf (p, "%s%s", vex_cmp_op[cmp_type].name, suffix);
16402 mnemonicendp += vex_cmp_op[cmp_type].len;
c0f3af97
L
16403 }
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);
c0f3af97
L
16410 scratchbuf[0] = '\0';
16411 }
16412}
16413
43234a1e
L
16414static void
16415VPCMP_Fixup (int bytemode ATTRIBUTE_UNUSED,
16416 int sizeflag ATTRIBUTE_UNUSED)
16417{
16418 unsigned int cmp_type;
16419
16420 if (!vex.evex)
16421 abort ();
16422
16423 FETCH_DATA (the_info, codep + 1);
16424 cmp_type = *codep++ & 0xff;
16425 /* There are aliases for immediates 0, 1, 2, 4, 5, 6.
16426 If it's the case, print suffix, otherwise - print the immediate. */
16427 if (cmp_type < ARRAY_SIZE (simd_cmp_op)
16428 && cmp_type != 3
16429 && cmp_type != 7)
16430 {
16431 char suffix [3];
16432 char *p = mnemonicendp - 2;
16433
16434 /* vpcmp* can have both one- and two-lettered suffix. */
16435 if (p[0] == 'p')
16436 {
16437 p++;
16438 suffix[0] = p[0];
16439 suffix[1] = '\0';
16440 }
16441 else
16442 {
16443 suffix[0] = p[0];
16444 suffix[1] = p[1];
16445 suffix[2] = '\0';
16446 }
16447
16448 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
16449 mnemonicendp += simd_cmp_op[cmp_type].len;
16450 }
be92cb14
JB
16451 else
16452 {
16453 /* We have a reserved extension byte. Output it directly. */
16454 scratchbuf[0] = '$';
16455 print_operand_value (scratchbuf + 1, 1, cmp_type);
16456 oappend_maybe_intel (scratchbuf);
16457 scratchbuf[0] = '\0';
16458 }
16459}
16460
16461static const struct op xop_cmp_op[] =
16462{
16463 { STRING_COMMA_LEN ("lt") },
16464 { STRING_COMMA_LEN ("le") },
16465 { STRING_COMMA_LEN ("gt") },
16466 { STRING_COMMA_LEN ("ge") },
16467 { STRING_COMMA_LEN ("eq") },
16468 { STRING_COMMA_LEN ("neq") },
16469 { STRING_COMMA_LEN ("false") },
16470 { STRING_COMMA_LEN ("true") }
16471};
16472
16473static void
16474VPCOM_Fixup (int bytemode ATTRIBUTE_UNUSED,
16475 int sizeflag ATTRIBUTE_UNUSED)
16476{
16477 unsigned int cmp_type;
16478
16479 FETCH_DATA (the_info, codep + 1);
16480 cmp_type = *codep++ & 0xff;
16481 if (cmp_type < ARRAY_SIZE (xop_cmp_op))
16482 {
16483 char suffix[3];
16484 char *p = mnemonicendp - 2;
16485
16486 /* vpcom* can have both one- and two-lettered suffix. */
16487 if (p[0] == 'm')
16488 {
16489 p++;
16490 suffix[0] = p[0];
16491 suffix[1] = '\0';
16492 }
16493 else
16494 {
16495 suffix[0] = p[0];
16496 suffix[1] = p[1];
16497 suffix[2] = '\0';
16498 }
16499
16500 sprintf (p, "%s%s", xop_cmp_op[cmp_type].name, suffix);
16501 mnemonicendp += xop_cmp_op[cmp_type].len;
16502 }
43234a1e
L
16503 else
16504 {
16505 /* We have a reserved extension byte. Output it directly. */
16506 scratchbuf[0] = '$';
16507 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 16508 oappend_maybe_intel (scratchbuf);
43234a1e
L
16509 scratchbuf[0] = '\0';
16510 }
16511}
16512
ea397f5b
L
16513static const struct op pclmul_op[] =
16514{
16515 { STRING_COMMA_LEN ("lql") },
16516 { STRING_COMMA_LEN ("hql") },
16517 { STRING_COMMA_LEN ("lqh") },
16518 { STRING_COMMA_LEN ("hqh") }
c0f3af97
L
16519};
16520
16521static void
16522PCLMUL_Fixup (int bytemode ATTRIBUTE_UNUSED,
16523 int sizeflag ATTRIBUTE_UNUSED)
16524{
16525 unsigned int pclmul_type;
16526
16527 FETCH_DATA (the_info, codep + 1);
16528 pclmul_type = *codep++ & 0xff;
16529 switch (pclmul_type)
16530 {
16531 case 0x10:
16532 pclmul_type = 2;
16533 break;
16534 case 0x11:
16535 pclmul_type = 3;
16536 break;
16537 default:
16538 break;
7bb15c6f 16539 }
c0f3af97
L
16540 if (pclmul_type < ARRAY_SIZE (pclmul_op))
16541 {
16542 char suffix [4];
ea397f5b 16543 char *p = mnemonicendp - 3;
c0f3af97
L
16544 suffix[0] = p[0];
16545 suffix[1] = p[1];
16546 suffix[2] = p[2];
16547 suffix[3] = '\0';
ea397f5b
L
16548 sprintf (p, "%s%s", pclmul_op[pclmul_type].name, suffix);
16549 mnemonicendp += pclmul_op[pclmul_type].len;
c0f3af97
L
16550 }
16551 else
16552 {
16553 /* We have a reserved extension byte. Output it directly. */
16554 scratchbuf[0] = '$';
16555 print_operand_value (scratchbuf + 1, 1, pclmul_type);
9ce09ba2 16556 oappend_maybe_intel (scratchbuf);
c0f3af97
L
16557 scratchbuf[0] = '\0';
16558 }
16559}
16560
f1f8f695
L
16561static void
16562MOVBE_Fixup (int bytemode, int sizeflag)
16563{
16564 /* Add proper suffix to "movbe". */
ea397f5b 16565 char *p = mnemonicendp;
f1f8f695
L
16566
16567 switch (bytemode)
16568 {
16569 case v_mode:
16570 if (intel_syntax)
ea397f5b 16571 goto skip;
f1f8f695
L
16572
16573 USED_REX (REX_W);
16574 if (sizeflag & SUFFIX_ALWAYS)
16575 {
16576 if (rex & REX_W)
16577 *p++ = 'q';
f1f8f695 16578 else
f16cd0d5
L
16579 {
16580 if (sizeflag & DFLAG)
16581 *p++ = 'l';
16582 else
16583 *p++ = 'w';
16584 used_prefixes |= (prefixes & PREFIX_DATA);
16585 }
f1f8f695 16586 }
f1f8f695
L
16587 break;
16588 default:
16589 oappend (INTERNAL_DISASSEMBLER_ERROR);
16590 break;
16591 }
ea397f5b 16592 mnemonicendp = p;
f1f8f695
L
16593 *p = '\0';
16594
ea397f5b 16595skip:
f1f8f695
L
16596 OP_M (bytemode, sizeflag);
16597}
f88c9eb0
SP
16598
16599static void
16600OP_LWPCB_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16601{
16602 int reg;
16603 const char **names;
16604
16605 /* Skip mod/rm byte. */
16606 MODRM_CHECK;
16607 codep++;
16608
390a6789 16609 if (rex & REX_W)
f88c9eb0 16610 names = names64;
f88c9eb0 16611 else
ce7d077e 16612 names = names32;
f88c9eb0
SP
16613
16614 reg = modrm.rm;
16615 USED_REX (REX_B);
16616 if (rex & REX_B)
16617 reg += 8;
16618
16619 oappend (names[reg]);
16620}
16621
16622static void
16623OP_LWP_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16624{
16625 const char **names;
5f847646 16626 unsigned int reg = vex.register_specifier;
f88c9eb0 16627
390a6789 16628 if (rex & REX_W)
f88c9eb0 16629 names = names64;
f88c9eb0 16630 else
ce7d077e 16631 names = names32;
f88c9eb0 16632
5f847646
JB
16633 if (address_mode != mode_64bit)
16634 reg &= 7;
16635 oappend (names[reg]);
f88c9eb0 16636}
43234a1e
L
16637
16638static void
16639OP_Mask (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16640{
16641 if (!vex.evex
1ba585e8 16642 || (bytemode != mask_mode && bytemode != mask_bd_mode))
43234a1e
L
16643 abort ();
16644
16645 USED_REX (REX_R);
16646 if ((rex & REX_R) != 0 || !vex.r)
16647 {
16648 BadOp ();
16649 return;
16650 }
16651
16652 oappend (names_mask [modrm.reg]);
16653}
16654
16655static void
16656OP_Rounding (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16657{
16658 if (!vex.evex
16659 || (bytemode != evex_rounding_mode
70df6fc9 16660 && bytemode != evex_rounding_64_mode
43234a1e
L
16661 && bytemode != evex_sae_mode))
16662 abort ();
16663 if (modrm.mod == 3 && vex.b)
16664 switch (bytemode)
16665 {
70df6fc9
L
16666 case evex_rounding_64_mode:
16667 if (address_mode != mode_64bit)
16668 {
16669 oappend ("(bad)");
16670 break;
16671 }
16672 /* Fall through. */
43234a1e
L
16673 case evex_rounding_mode:
16674 oappend (names_rounding[vex.ll]);
16675 break;
16676 case evex_sae_mode:
16677 oappend ("{sae}");
16678 break;
16679 default:
16680 break;
16681 }
16682}
This page took 3.09539 seconds and 4 git commands to generate.