aarch64: Fix MOVPRFX markup for bf16 conversions
[deliverable/binutils-gdb.git] / opcodes / i386-dis.c
CommitLineData
252b5132 1/* Print i386 instructions for GDB, the GNU debugger.
b3adc24a 2 Copyright (C) 1988-2020 Free Software Foundation, Inc.
252b5132 3
9b201bb5 4 This file is part of the GNU opcodes library.
20f0a1fc 5
9b201bb5 6 This library is free software; you can redistribute it and/or modify
20f0a1fc 7 it under the terms of the GNU General Public License as published by
9b201bb5
NC
8 the Free Software Foundation; either version 3, or (at your option)
9 any later version.
20f0a1fc 10
9b201bb5
NC
11 It is distributed in the hope that it will be useful, but WITHOUT
12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
14 License for more details.
20f0a1fc
NC
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
9b201bb5
NC
18 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
19 MA 02110-1301, USA. */
20
20f0a1fc
NC
21
22/* 80386 instruction printer by Pace Willisson (pace@prep.ai.mit.edu)
23 July 1988
24 modified by John Hassey (hassey@dg-rtp.dg.com)
25 x86-64 support added by Jan Hubicka (jh@suse.cz)
26 VIA PadLock support by Michal Ludvig (mludvig@suse.cz). */
27
28/* The main tables describing the instructions is essentially a copy
29 of the "Opcode Map" chapter (Appendix A) of the Intel 80386
30 Programmers Manual. Usually, there is a capital letter, followed
31 by a small letter. The capital letter tell the addressing mode,
32 and the small letter tells about the operand size. Refer to
33 the Intel manual for details. */
252b5132 34
252b5132 35#include "sysdep.h"
88c1242d 36#include "disassemble.h"
252b5132 37#include "opintl.h"
0b1cf022 38#include "opcode/i386.h"
85f10a01 39#include "libiberty.h"
252b5132
RH
40
41#include <setjmp.h>
42
26ca5450
AJ
43static int print_insn (bfd_vma, disassemble_info *);
44static void dofloat (int);
45static void OP_ST (int, int);
46static void OP_STi (int, int);
47static int putop (const char *, int);
48static void oappend (const char *);
49static void append_seg (void);
50static void OP_indirE (int, int);
51static void print_operand_value (char *, int, bfd_vma);
c0f3af97 52static void OP_E_register (int, int);
c1e679ec 53static void OP_E_memory (int, int);
5d669648 54static void print_displacement (char *, bfd_vma);
26ca5450
AJ
55static void OP_E (int, int);
56static void OP_G (int, int);
57static bfd_vma get64 (void);
58static bfd_signed_vma get32 (void);
59static bfd_signed_vma get32s (void);
60static int get16 (void);
61static void set_op (bfd_vma, int);
b844680a 62static void OP_Skip_MODRM (int, int);
26ca5450
AJ
63static void OP_REG (int, int);
64static void OP_IMREG (int, int);
65static void OP_I (int, int);
66static void OP_I64 (int, int);
67static void OP_sI (int, int);
68static void OP_J (int, int);
69static void OP_SEG (int, int);
70static void OP_DIR (int, int);
71static void OP_OFF (int, int);
72static void OP_OFF64 (int, int);
73static void ptr_reg (int, int);
74static void OP_ESreg (int, int);
75static void OP_DSreg (int, int);
76static void OP_C (int, int);
77static void OP_D (int, int);
78static void OP_T (int, int);
6f74c397 79static void OP_R (int, int);
26ca5450
AJ
80static void OP_MMX (int, int);
81static void OP_XMM (int, int);
82static void OP_EM (int, int);
83static void OP_EX (int, int);
4d9567e0
MM
84static void OP_EMC (int,int);
85static void OP_MXC (int,int);
26ca5450
AJ
86static void OP_MS (int, int);
87static void OP_XS (int, int);
cc0ec051 88static void OP_M (int, int);
c0f3af97
L
89static void OP_VEX (int, int);
90static void OP_EX_Vex (int, int);
922d8de8 91static void OP_EX_VexW (int, int);
a683cc34 92static void OP_EX_VexImmW (int, int);
c0f3af97 93static void OP_XMM_Vex (int, int);
922d8de8 94static void OP_XMM_VexW (int, int);
43234a1e 95static void OP_Rounding (int, int);
c0f3af97
L
96static void OP_REG_VexI4 (int, int);
97static void PCLMUL_Fixup (int, int);
c0f3af97 98static void VCMP_Fixup (int, int);
43234a1e 99static void VPCMP_Fixup (int, int);
be92cb14 100static void VPCOM_Fixup (int, int);
cc0ec051 101static void OP_0f07 (int, int);
b844680a
L
102static void OP_Monitor (int, int);
103static void OP_Mwait (int, int);
46e883c5
L
104static void NOP_Fixup1 (int, int);
105static void NOP_Fixup2 (int, int);
26ca5450 106static void OP_3DNowSuffix (int, int);
ad19981d 107static void CMP_Fixup (int, int);
26ca5450 108static void BadOp (void);
35c52694 109static void REP_Fixup (int, int);
d835a58b 110static void SEP_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);
bc31405e 127static void MOVSXD_Fixup (int, int);
252b5132 128
43234a1e
L
129static void OP_Mask (int, int);
130
6608db57 131struct dis_private {
252b5132
RH
132 /* Points to first byte not fetched. */
133 bfd_byte *max_fetched;
0b1cf022 134 bfd_byte the_buffer[MAX_MNEM_SIZE];
252b5132 135 bfd_vma insn_start;
e396998b 136 int orig_sizeflag;
8df14d78 137 OPCODES_SIGJMP_BUF bailout;
252b5132
RH
138};
139
cb712a9e
L
140enum address_mode
141{
142 mode_16bit,
143 mode_32bit,
144 mode_64bit
145};
146
147enum address_mode address_mode;
52b15da3 148
5076851f
ILT
149/* Flags for the prefixes for the current instruction. See below. */
150static int prefixes;
151
52b15da3
JH
152/* REX prefix the current instruction. See below. */
153static int rex;
154/* Bits of REX we've already used. */
155static int rex_used;
d869730d 156/* REX bits in original REX prefix ignored. */
c0f3af97 157static int rex_ignored;
52b15da3
JH
158/* Mark parts used in the REX prefix. When we are testing for
159 empty prefix (for 8bit register REX extension), just mask it
160 out. Otherwise test for REX bit is excuse for existence of REX
161 only in case value is nonzero. */
162#define USED_REX(value) \
163 { \
164 if (value) \
161a04f6
L
165 { \
166 if ((rex & value)) \
167 rex_used |= (value) | REX_OPCODE; \
168 } \
52b15da3 169 else \
161a04f6 170 rex_used |= REX_OPCODE; \
52b15da3
JH
171 }
172
7d421014
ILT
173/* Flags for prefixes which we somehow handled when printing the
174 current instruction. */
175static int used_prefixes;
176
5076851f
ILT
177/* Flags stored in PREFIXES. */
178#define PREFIX_REPZ 1
179#define PREFIX_REPNZ 2
180#define PREFIX_LOCK 4
181#define PREFIX_CS 8
182#define PREFIX_SS 0x10
183#define PREFIX_DS 0x20
184#define PREFIX_ES 0x40
185#define PREFIX_FS 0x80
186#define PREFIX_GS 0x100
187#define PREFIX_DATA 0x200
188#define PREFIX_ADDR 0x400
189#define PREFIX_FWAIT 0x800
190
252b5132
RH
191/* Make sure that bytes from INFO->PRIVATE_DATA->BUFFER (inclusive)
192 to ADDR (exclusive) are valid. Returns 1 for success, longjmps
193 on error. */
194#define FETCH_DATA(info, addr) \
6608db57 195 ((addr) <= ((struct dis_private *) (info->private_data))->max_fetched \
252b5132
RH
196 ? 1 : fetch_data ((info), (addr)))
197
198static int
26ca5450 199fetch_data (struct disassemble_info *info, bfd_byte *addr)
252b5132
RH
200{
201 int status;
6608db57 202 struct dis_private *priv = (struct dis_private *) info->private_data;
252b5132
RH
203 bfd_vma start = priv->insn_start + (priv->max_fetched - priv->the_buffer);
204
0b1cf022 205 if (addr <= priv->the_buffer + MAX_MNEM_SIZE)
272c9217
JB
206 status = (*info->read_memory_func) (start,
207 priv->max_fetched,
208 addr - priv->max_fetched,
209 info);
210 else
211 status = -1;
252b5132
RH
212 if (status != 0)
213 {
7d421014 214 /* If we did manage to read at least one byte, then
db6eb5be
AM
215 print_insn_i386 will do something sensible. Otherwise, print
216 an error. We do that here because this is where we know
217 STATUS. */
7d421014 218 if (priv->max_fetched == priv->the_buffer)
5076851f 219 (*info->memory_error_func) (status, start, info);
8df14d78 220 OPCODES_SIGLONGJMP (priv->bailout, 1);
252b5132
RH
221 }
222 else
223 priv->max_fetched = addr;
224 return 1;
225}
226
bf890a93 227/* Possible values for prefix requirement. */
507bd325
L
228#define PREFIX_IGNORED_SHIFT 16
229#define PREFIX_IGNORED_REPZ (PREFIX_REPZ << PREFIX_IGNORED_SHIFT)
230#define PREFIX_IGNORED_REPNZ (PREFIX_REPNZ << PREFIX_IGNORED_SHIFT)
231#define PREFIX_IGNORED_DATA (PREFIX_DATA << PREFIX_IGNORED_SHIFT)
232#define PREFIX_IGNORED_ADDR (PREFIX_ADDR << PREFIX_IGNORED_SHIFT)
233#define PREFIX_IGNORED_LOCK (PREFIX_LOCK << PREFIX_IGNORED_SHIFT)
234
235/* Opcode prefixes. */
236#define PREFIX_OPCODE (PREFIX_REPZ \
237 | PREFIX_REPNZ \
238 | PREFIX_DATA)
239
240/* Prefixes ignored. */
241#define PREFIX_IGNORED (PREFIX_IGNORED_REPZ \
242 | PREFIX_IGNORED_REPNZ \
243 | PREFIX_IGNORED_DATA)
bf890a93 244
ce518a5f 245#define XX { NULL, 0 }
507bd325 246#define Bad_Opcode NULL, { { NULL, 0 } }, 0
ce518a5f
L
247
248#define Eb { OP_E, b_mode }
7e8b059b 249#define Ebnd { OP_E, bnd_mode }
b6169b20 250#define EbS { OP_E, b_swap_mode }
9f79e886 251#define EbndS { OP_E, bnd_swap_mode }
ce518a5f 252#define Ev { OP_E, v_mode }
de89d0a3 253#define Eva { OP_E, va_mode }
7e8b059b 254#define Ev_bnd { OP_E, v_bnd_mode }
b6169b20 255#define EvS { OP_E, v_swap_mode }
ce518a5f
L
256#define Ed { OP_E, d_mode }
257#define Edq { OP_E, dq_mode }
258#define Edqw { OP_E, dqw_mode }
42903f7f 259#define Edqb { OP_E, dqb_mode }
1ba585e8
IT
260#define Edb { OP_E, db_mode }
261#define Edw { OP_E, dw_mode }
42903f7f 262#define Edqd { OP_E, dqd_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 295#define Iv64 { OP_I64, v_mode }
c1dc7af5 296#define Id { OP_I, d_mode }
ce518a5f
L
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 }
376cd056 301#define Jdqw { OP_J, dqw_mode }
ce518a5f
L
302#define Cm { OP_C, m_mode }
303#define Dm { OP_D, m_mode }
304#define Td { OP_T, d_mode }
b844680a 305#define Skip_MODRM { OP_Skip_MODRM, 0 }
ce518a5f
L
306
307#define RMeAX { OP_REG, eAX_reg }
308#define RMeBX { OP_REG, eBX_reg }
309#define RMeCX { OP_REG, eCX_reg }
310#define RMeDX { OP_REG, eDX_reg }
311#define RMeSP { OP_REG, eSP_reg }
312#define RMeBP { OP_REG, eBP_reg }
313#define RMeSI { OP_REG, eSI_reg }
314#define RMeDI { OP_REG, eDI_reg }
315#define RMrAX { OP_REG, rAX_reg }
316#define RMrBX { OP_REG, rBX_reg }
317#define RMrCX { OP_REG, rCX_reg }
318#define RMrDX { OP_REG, rDX_reg }
319#define RMrSP { OP_REG, rSP_reg }
320#define RMrBP { OP_REG, rBP_reg }
321#define RMrSI { OP_REG, rSI_reg }
322#define RMrDI { OP_REG, rDI_reg }
323#define RMAL { OP_REG, al_reg }
ce518a5f
L
324#define RMCL { OP_REG, cl_reg }
325#define RMDL { OP_REG, dl_reg }
326#define RMBL { OP_REG, bl_reg }
327#define RMAH { OP_REG, ah_reg }
328#define RMCH { OP_REG, ch_reg }
329#define RMDH { OP_REG, dh_reg }
330#define RMBH { OP_REG, bh_reg }
331#define RMAX { OP_REG, ax_reg }
332#define RMDX { OP_REG, dx_reg }
333
334#define eAX { OP_IMREG, eAX_reg }
335#define eBX { OP_IMREG, eBX_reg }
336#define eCX { OP_IMREG, eCX_reg }
337#define eDX { OP_IMREG, eDX_reg }
338#define eSP { OP_IMREG, eSP_reg }
339#define eBP { OP_IMREG, eBP_reg }
340#define eSI { OP_IMREG, eSI_reg }
341#define eDI { OP_IMREG, eDI_reg }
342#define AL { OP_IMREG, al_reg }
343#define CL { OP_IMREG, cl_reg }
344#define DL { OP_IMREG, dl_reg }
345#define BL { OP_IMREG, bl_reg }
346#define AH { OP_IMREG, ah_reg }
347#define CH { OP_IMREG, ch_reg }
348#define DH { OP_IMREG, dh_reg }
349#define BH { OP_IMREG, bh_reg }
350#define AX { OP_IMREG, ax_reg }
351#define DX { OP_IMREG, dx_reg }
352#define zAX { OP_IMREG, z_mode_ax_reg }
353#define indirDX { OP_IMREG, indir_dx_reg }
354
355#define Sw { OP_SEG, w_mode }
356#define Sv { OP_SEG, v_mode }
357#define Ap { OP_DIR, 0 }
358#define Ob { OP_OFF64, b_mode }
359#define Ov { OP_OFF64, v_mode }
360#define Xb { OP_DSreg, eSI_reg }
361#define Xv { OP_DSreg, eSI_reg }
362#define Xz { OP_DSreg, eSI_reg }
363#define Yb { OP_ESreg, eDI_reg }
364#define Yv { OP_ESreg, eDI_reg }
365#define DSBX { OP_DSreg, eBX_reg }
366
367#define es { OP_REG, es_reg }
368#define ss { OP_REG, ss_reg }
369#define cs { OP_REG, cs_reg }
370#define ds { OP_REG, ds_reg }
371#define fs { OP_REG, fs_reg }
372#define gs { OP_REG, gs_reg }
373
374#define MX { OP_MMX, 0 }
375#define XM { OP_XMM, 0 }
539f890d 376#define XMScalar { OP_XMM, scalar_mode }
6c30d220 377#define XMGatherQ { OP_XMM, vex_vsib_q_w_dq_mode }
c0f3af97 378#define XMM { OP_XMM, xmm_mode }
43234a1e 379#define XMxmmq { OP_XMM, xmmq_mode }
ce518a5f 380#define EM { OP_EM, v_mode }
b6169b20 381#define EMS { OP_EM, v_swap_mode }
09a2c6cf 382#define EMd { OP_EM, d_mode }
14051056 383#define EMx { OP_EM, x_mode }
53467f57 384#define EXbScalar { OP_EX, b_scalar_mode }
8976381e 385#define EXw { OP_EX, w_mode }
53467f57 386#define EXwScalar { OP_EX, w_scalar_mode }
09a2c6cf 387#define EXd { OP_EX, d_mode }
539f890d 388#define EXdScalar { OP_EX, d_scalar_mode }
fa99fab2 389#define EXdS { OP_EX, d_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 }
d835a58b 417#define SEP { SEP_Fixup, 0 }
ad19981d 418#define CMP { CMP_Fixup, 0 }
42903f7f 419#define XMM0 { XMM_Fixup, 0 }
eacc9c89 420#define FXSAVE { FXSAVE_Fixup, 0 }
5dd85c99
SP
421#define Vex_2src_1 { OP_Vex_2src_1, 0 }
422#define Vex_2src_2 { OP_Vex_2src_2, 0 }
252b5132 423
c0f3af97 424#define Vex { OP_VEX, vex_mode }
539f890d 425#define VexScalar { OP_VEX, vex_scalar_mode }
6c30d220 426#define VexGatherQ { OP_VEX, vex_vsib_q_w_dq_mode }
c0f3af97
L
427#define Vex128 { OP_VEX, vex128_mode }
428#define Vex256 { OP_VEX, vex256_mode }
cb21baef 429#define VexGdq { OP_VEX, dq_mode }
539f890d 430#define EXdVexScalarS { OP_EX_Vex, d_scalar_swap_mode }
539f890d 431#define EXqVexScalarS { OP_EX_Vex, q_scalar_swap_mode }
922d8de8
DR
432#define EXVexW { OP_EX_VexW, x_mode }
433#define EXdVexW { OP_EX_VexW, d_mode }
434#define EXqVexW { OP_EX_VexW, q_mode }
a683cc34 435#define EXVexImmW { OP_EX_VexImmW, x_mode }
539f890d 436#define XMVexScalar { OP_XMM_Vex, scalar_mode }
922d8de8 437#define XMVexW { OP_XMM_VexW, 0 }
c0f3af97
L
438#define XMVexI4 { OP_REG_VexI4, x_mode }
439#define PCLMUL { PCLMUL_Fixup, 0 }
c0f3af97 440#define VCMP { VCMP_Fixup, 0 }
43234a1e 441#define VPCMP { VPCMP_Fixup, 0 }
be92cb14 442#define VPCOM { VPCOM_Fixup, 0 }
43234a1e
L
443
444#define EXxEVexR { OP_Rounding, evex_rounding_mode }
70df6fc9 445#define EXxEVexR64 { OP_Rounding, evex_rounding_64_mode }
43234a1e
L
446#define EXxEVexS { OP_Rounding, evex_sae_mode }
447
448#define XMask { OP_Mask, mask_mode }
449#define MaskG { OP_G, mask_mode }
450#define MaskE { OP_E, mask_mode }
1ba585e8 451#define MaskBDE { OP_E, mask_bd_mode }
43234a1e
L
452#define MaskR { OP_R, mask_mode }
453#define MaskVex { OP_VEX, mask_mode }
c0f3af97 454
6c30d220 455#define MVexVSIBDWpX { OP_M, vex_vsib_d_w_dq_mode }
5fc35d96 456#define MVexVSIBDQWpX { OP_M, vex_vsib_d_w_d_mode }
6c30d220 457#define MVexVSIBQWpX { OP_M, vex_vsib_q_w_dq_mode }
5fc35d96 458#define MVexVSIBQDWpX { OP_M, vex_vsib_q_w_d_mode }
6c30d220 459
35c52694 460/* Used handle "rep" prefix for string instructions. */
ce518a5f
L
461#define Xbr { REP_Fixup, eSI_reg }
462#define Xvr { REP_Fixup, eSI_reg }
463#define Ybr { REP_Fixup, eDI_reg }
464#define Yvr { REP_Fixup, eDI_reg }
465#define Yzr { REP_Fixup, eDI_reg }
466#define indirDXr { REP_Fixup, indir_dx_reg }
467#define ALr { REP_Fixup, al_reg }
468#define eAXr { REP_Fixup, eAX_reg }
469
42164a71
L
470/* Used handle HLE prefix for lockable instructions. */
471#define Ebh1 { HLE_Fixup1, b_mode }
472#define Evh1 { HLE_Fixup1, v_mode }
473#define Ebh2 { HLE_Fixup2, b_mode }
474#define Evh2 { HLE_Fixup2, v_mode }
475#define Ebh3 { HLE_Fixup3, b_mode }
476#define Evh3 { HLE_Fixup3, v_mode }
477
7e8b059b 478#define BND { BND_Fixup, 0 }
04ef582a 479#define NOTRACK { NOTRACK_Fixup, 0 }
7e8b059b 480
ce518a5f
L
481#define cond_jump_flag { NULL, cond_jump_mode }
482#define loop_jcxz_flag { NULL, loop_jcxz_mode }
3ffd33cf 483
252b5132 484/* bits in sizeflag */
252b5132 485#define SUFFIX_ALWAYS 4
252b5132
RH
486#define AFLAG 2
487#define DFLAG 1
488
51e7da1b
L
489enum
490{
491 /* byte operand */
492 b_mode = 1,
493 /* byte operand with operand swapped */
3873ba12 494 b_swap_mode,
e3949f17
L
495 /* byte operand, sign extend like 'T' suffix */
496 b_T_mode,
51e7da1b 497 /* operand size depends on prefixes */
3873ba12 498 v_mode,
51e7da1b 499 /* operand size depends on prefixes with operand swapped */
3873ba12 500 v_swap_mode,
de89d0a3
IT
501 /* operand size depends on address prefix */
502 va_mode,
51e7da1b 503 /* word operand */
3873ba12 504 w_mode,
51e7da1b 505 /* double word operand */
3873ba12 506 d_mode,
51e7da1b 507 /* double word operand with operand swapped */
3873ba12 508 d_swap_mode,
51e7da1b 509 /* quad word operand */
3873ba12 510 q_mode,
51e7da1b 511 /* quad word operand with operand swapped */
3873ba12 512 q_swap_mode,
51e7da1b 513 /* ten-byte operand */
3873ba12 514 t_mode,
43234a1e
L
515 /* 16-byte XMM, 32-byte YMM or 64-byte ZMM operand. In EVEX with
516 broadcast enabled. */
3873ba12 517 x_mode,
43234a1e
L
518 /* Similar to x_mode, but with different EVEX mem shifts. */
519 evex_x_gscat_mode,
520 /* Similar to x_mode, but with disabled broadcast. */
521 evex_x_nobcst_mode,
522 /* Similar to x_mode, but with operands swapped and disabled broadcast
523 in EVEX. */
3873ba12 524 x_swap_mode,
51e7da1b 525 /* 16-byte XMM operand */
3873ba12 526 xmm_mode,
43234a1e
L
527 /* XMM, XMM or YMM register operand, or quad word, xmmword or ymmword
528 memory operand (depending on vector length). Broadcast isn't
529 allowed. */
3873ba12 530 xmmq_mode,
43234a1e
L
531 /* Same as xmmq_mode, but broadcast is allowed. */
532 evex_half_bcst_xmmq_mode,
6c30d220
L
533 /* XMM register or byte memory operand */
534 xmm_mb_mode,
535 /* XMM register or word memory operand */
536 xmm_mw_mode,
537 /* XMM register or double word memory operand */
538 xmm_md_mode,
539 /* XMM register or quad word memory operand */
540 xmm_mq_mode,
43234a1e
L
541 /* XMM register or double/quad word memory operand, depending on
542 VEX.W. */
543 xmm_mdq_mode,
544 /* 16-byte XMM, word, double word or quad word operand. */
6c30d220 545 xmmdw_mode,
43234a1e 546 /* 16-byte XMM, double word, quad word operand or xmm word operand. */
6c30d220 547 xmmqd_mode,
43234a1e
L
548 /* 32-byte YMM operand */
549 ymm_mode,
550 /* quad word, ymmword or zmmword memory operand. */
3873ba12 551 ymmq_mode,
6c30d220
L
552 /* 32-byte YMM or 16-byte word operand */
553 ymmxmm_mode,
51e7da1b 554 /* d_mode in 32bit, q_mode in 64bit mode. */
3873ba12 555 m_mode,
51e7da1b 556 /* pair of v_mode operands */
3873ba12
L
557 a_mode,
558 cond_jump_mode,
559 loop_jcxz_mode,
bc31405e 560 movsxd_mode,
7e8b059b 561 v_bnd_mode,
d276ec69
JB
562 /* like v_bnd_mode in 32bit, no RIP-rel in 64bit mode. */
563 v_bndmk_mode,
51e7da1b 564 /* operand size depends on REX prefixes. */
3873ba12 565 dq_mode,
376cd056
JB
566 /* registers like dq_mode, memory like w_mode, displacements like
567 v_mode without considering Intel64 ISA. */
3873ba12 568 dqw_mode,
9f79e886 569 /* bounds operand */
7e8b059b 570 bnd_mode,
9f79e886
JB
571 /* bounds operand with operand swapped */
572 bnd_swap_mode,
51e7da1b 573 /* 4- or 6-byte pointer operand */
3873ba12
L
574 f_mode,
575 const_1_mode,
07f5af7d
L
576 /* v_mode for indirect branch opcodes. */
577 indir_v_mode,
51e7da1b 578 /* v_mode for stack-related opcodes. */
3873ba12 579 stack_v_mode,
51e7da1b 580 /* non-quad operand size depends on prefixes */
3873ba12 581 z_mode,
51e7da1b 582 /* 16-byte operand */
3873ba12 583 o_mode,
51e7da1b 584 /* registers like dq_mode, memory like b_mode. */
3873ba12 585 dqb_mode,
1ba585e8
IT
586 /* registers like d_mode, memory like b_mode. */
587 db_mode,
588 /* registers like d_mode, memory like w_mode. */
589 dw_mode,
51e7da1b 590 /* registers like dq_mode, memory like d_mode. */
3873ba12 591 dqd_mode,
51e7da1b 592 /* normal vex mode */
3873ba12 593 vex_mode,
51e7da1b 594 /* 128bit vex mode */
3873ba12 595 vex128_mode,
51e7da1b 596 /* 256bit vex mode */
3873ba12 597 vex256_mode,
51e7da1b 598 /* operand size depends on the VEX.W bit. */
3873ba12 599 vex_w_dq_mode,
d55ee72f 600
6c30d220
L
601 /* Similar to vex_w_dq_mode, with VSIB dword indices. */
602 vex_vsib_d_w_dq_mode,
5fc35d96
IT
603 /* Similar to vex_vsib_d_w_dq_mode, with smaller memory. */
604 vex_vsib_d_w_d_mode,
6c30d220
L
605 /* Similar to vex_w_dq_mode, with VSIB qword indices. */
606 vex_vsib_q_w_dq_mode,
5fc35d96
IT
607 /* Similar to vex_vsib_q_w_dq_mode, with smaller memory. */
608 vex_vsib_q_w_d_mode,
6c30d220 609
539f890d
L
610 /* scalar, ignore vector length. */
611 scalar_mode,
53467f57
IT
612 /* like b_mode, ignore vector length. */
613 b_scalar_mode,
614 /* like w_mode, ignore vector length. */
615 w_scalar_mode,
539f890d
L
616 /* like d_mode, ignore vector length. */
617 d_scalar_mode,
618 /* like d_swap_mode, ignore vector length. */
619 d_scalar_swap_mode,
620 /* like q_mode, ignore vector length. */
621 q_scalar_mode,
622 /* like q_swap_mode, ignore vector length. */
623 q_scalar_swap_mode,
624 /* like vex_mode, ignore vector length. */
625 vex_scalar_mode,
1c480963
L
626 /* like vex_w_dq_mode, ignore vector length. */
627 vex_scalar_w_dq_mode,
539f890d 628
43234a1e
L
629 /* Static rounding. */
630 evex_rounding_mode,
70df6fc9
L
631 /* Static rounding, 64-bit mode only. */
632 evex_rounding_64_mode,
43234a1e
L
633 /* Supress all exceptions. */
634 evex_sae_mode,
635
636 /* Mask register operand. */
637 mask_mode,
1ba585e8
IT
638 /* Mask register operand. */
639 mask_bd_mode,
43234a1e 640
3873ba12
L
641 es_reg,
642 cs_reg,
643 ss_reg,
644 ds_reg,
645 fs_reg,
646 gs_reg,
d55ee72f 647
3873ba12
L
648 eAX_reg,
649 eCX_reg,
650 eDX_reg,
651 eBX_reg,
652 eSP_reg,
653 eBP_reg,
654 eSI_reg,
655 eDI_reg,
d55ee72f 656
3873ba12
L
657 al_reg,
658 cl_reg,
659 dl_reg,
660 bl_reg,
661 ah_reg,
662 ch_reg,
663 dh_reg,
664 bh_reg,
d55ee72f 665
3873ba12
L
666 ax_reg,
667 cx_reg,
668 dx_reg,
669 bx_reg,
670 sp_reg,
671 bp_reg,
672 si_reg,
673 di_reg,
d55ee72f 674
3873ba12
L
675 rAX_reg,
676 rCX_reg,
677 rDX_reg,
678 rBX_reg,
679 rSP_reg,
680 rBP_reg,
681 rSI_reg,
682 rDI_reg,
d55ee72f 683
3873ba12
L
684 z_mode_ax_reg,
685 indir_dx_reg
51e7da1b 686};
252b5132 687
51e7da1b
L
688enum
689{
690 FLOATCODE = 1,
3873ba12
L
691 USE_REG_TABLE,
692 USE_MOD_TABLE,
693 USE_RM_TABLE,
694 USE_PREFIX_TABLE,
695 USE_X86_64_TABLE,
696 USE_3BYTE_TABLE,
f88c9eb0 697 USE_XOP_8F_TABLE,
3873ba12
L
698 USE_VEX_C4_TABLE,
699 USE_VEX_C5_TABLE,
9e30b8e0 700 USE_VEX_LEN_TABLE,
43234a1e 701 USE_VEX_W_TABLE,
04e2a182
L
702 USE_EVEX_TABLE,
703 USE_EVEX_LEN_TABLE
51e7da1b 704};
6439fc28 705
bf890a93 706#define FLOAT NULL, { { NULL, FLOATCODE } }, 0
4efba78c 707
bf890a93
IT
708#define DIS386(T, I) NULL, { { NULL, (T)}, { NULL, (I) } }, 0
709#define DIS386_PREFIX(T, I, P) NULL, { { NULL, (T)}, { NULL, (I) } }, P
1ceb70f8
L
710#define REG_TABLE(I) DIS386 (USE_REG_TABLE, (I))
711#define MOD_TABLE(I) DIS386 (USE_MOD_TABLE, (I))
712#define RM_TABLE(I) DIS386 (USE_RM_TABLE, (I))
713#define PREFIX_TABLE(I) DIS386 (USE_PREFIX_TABLE, (I))
4e7d34a6
L
714#define X86_64_TABLE(I) DIS386 (USE_X86_64_TABLE, (I))
715#define THREE_BYTE_TABLE(I) DIS386 (USE_3BYTE_TABLE, (I))
bf890a93 716#define THREE_BYTE_TABLE_PREFIX(I, P) DIS386_PREFIX (USE_3BYTE_TABLE, (I), P)
f88c9eb0 717#define XOP_8F_TABLE(I) DIS386 (USE_XOP_8F_TABLE, (I))
c0f3af97
L
718#define VEX_C4_TABLE(I) DIS386 (USE_VEX_C4_TABLE, (I))
719#define VEX_C5_TABLE(I) DIS386 (USE_VEX_C5_TABLE, (I))
720#define VEX_LEN_TABLE(I) DIS386 (USE_VEX_LEN_TABLE, (I))
9e30b8e0 721#define VEX_W_TABLE(I) DIS386 (USE_VEX_W_TABLE, (I))
43234a1e 722#define EVEX_TABLE(I) DIS386 (USE_EVEX_TABLE, (I))
04e2a182 723#define EVEX_LEN_TABLE(I) DIS386 (USE_EVEX_LEN_TABLE, (I))
1ceb70f8 724
51e7da1b
L
725enum
726{
727 REG_80 = 0,
3873ba12 728 REG_81,
7148c369 729 REG_83,
3873ba12
L
730 REG_8F,
731 REG_C0,
732 REG_C1,
733 REG_C6,
734 REG_C7,
735 REG_D0,
736 REG_D1,
737 REG_D2,
738 REG_D3,
739 REG_F6,
740 REG_F7,
741 REG_FE,
742 REG_FF,
743 REG_0F00,
744 REG_0F01,
745 REG_0F0D,
746 REG_0F18,
f8687e93
JB
747 REG_0F1C_P_0_MOD_0,
748 REG_0F1E_P_1_MOD_3,
3873ba12
L
749 REG_0F71,
750 REG_0F72,
751 REG_0F73,
752 REG_0FA6,
753 REG_0FA7,
754 REG_0FAE,
755 REG_0FBA,
756 REG_0FC7,
592a252b
L
757 REG_VEX_0F71,
758 REG_VEX_0F72,
759 REG_VEX_0F73,
760 REG_VEX_0FAE,
f12dc422 761 REG_VEX_0F38F3,
f88c9eb0 762 REG_XOP_LWPCB,
2a2a0f38
QN
763 REG_XOP_LWP,
764 REG_XOP_TBM_01,
43234a1e
L
765 REG_XOP_TBM_02,
766
1ba585e8 767 REG_EVEX_0F71,
43234a1e
L
768 REG_EVEX_0F72,
769 REG_EVEX_0F73,
770 REG_EVEX_0F38C6,
771 REG_EVEX_0F38C7
51e7da1b 772};
1ceb70f8 773
51e7da1b
L
774enum
775{
776 MOD_8D = 0,
42164a71
L
777 MOD_C6_REG_7,
778 MOD_C7_REG_7,
4a357820
MZ
779 MOD_FF_REG_3,
780 MOD_FF_REG_5,
3873ba12
L
781 MOD_0F01_REG_0,
782 MOD_0F01_REG_1,
783 MOD_0F01_REG_2,
784 MOD_0F01_REG_3,
8eab4136 785 MOD_0F01_REG_5,
3873ba12
L
786 MOD_0F01_REG_7,
787 MOD_0F12_PREFIX_0,
788 MOD_0F13,
789 MOD_0F16_PREFIX_0,
790 MOD_0F17,
791 MOD_0F18_REG_0,
792 MOD_0F18_REG_1,
793 MOD_0F18_REG_2,
794 MOD_0F18_REG_3,
d7189fa5
RM
795 MOD_0F18_REG_4,
796 MOD_0F18_REG_5,
797 MOD_0F18_REG_6,
798 MOD_0F18_REG_7,
7e8b059b
L
799 MOD_0F1A_PREFIX_0,
800 MOD_0F1B_PREFIX_0,
801 MOD_0F1B_PREFIX_1,
c48935d7 802 MOD_0F1C_PREFIX_0,
603555e5 803 MOD_0F1E_PREFIX_1,
3873ba12
L
804 MOD_0F24,
805 MOD_0F26,
806 MOD_0F2B_PREFIX_0,
807 MOD_0F2B_PREFIX_1,
808 MOD_0F2B_PREFIX_2,
809 MOD_0F2B_PREFIX_3,
810 MOD_0F51,
811 MOD_0F71_REG_2,
812 MOD_0F71_REG_4,
813 MOD_0F71_REG_6,
814 MOD_0F72_REG_2,
815 MOD_0F72_REG_4,
816 MOD_0F72_REG_6,
817 MOD_0F73_REG_2,
818 MOD_0F73_REG_3,
819 MOD_0F73_REG_6,
820 MOD_0F73_REG_7,
821 MOD_0FAE_REG_0,
822 MOD_0FAE_REG_1,
823 MOD_0FAE_REG_2,
824 MOD_0FAE_REG_3,
825 MOD_0FAE_REG_4,
826 MOD_0FAE_REG_5,
827 MOD_0FAE_REG_6,
828 MOD_0FAE_REG_7,
829 MOD_0FB2,
830 MOD_0FB4,
831 MOD_0FB5,
a8484f96 832 MOD_0FC3,
963f3586
IT
833 MOD_0FC7_REG_3,
834 MOD_0FC7_REG_4,
835 MOD_0FC7_REG_5,
3873ba12
L
836 MOD_0FC7_REG_6,
837 MOD_0FC7_REG_7,
838 MOD_0FD7,
839 MOD_0FE7_PREFIX_2,
840 MOD_0FF0_PREFIX_3,
841 MOD_0F382A_PREFIX_2,
603555e5
L
842 MOD_0F38F5_PREFIX_2,
843 MOD_0F38F6_PREFIX_0,
5d79adc4 844 MOD_0F38F8_PREFIX_1,
c0a30a9f 845 MOD_0F38F8_PREFIX_2,
5d79adc4 846 MOD_0F38F8_PREFIX_3,
c0a30a9f 847 MOD_0F38F9_PREFIX_0,
3873ba12
L
848 MOD_62_32BIT,
849 MOD_C4_32BIT,
850 MOD_C5_32BIT,
592a252b
L
851 MOD_VEX_0F12_PREFIX_0,
852 MOD_VEX_0F13,
853 MOD_VEX_0F16_PREFIX_0,
854 MOD_VEX_0F17,
855 MOD_VEX_0F2B,
ab4e4ed5
AF
856 MOD_VEX_W_0_0F41_P_0_LEN_1,
857 MOD_VEX_W_1_0F41_P_0_LEN_1,
858 MOD_VEX_W_0_0F41_P_2_LEN_1,
859 MOD_VEX_W_1_0F41_P_2_LEN_1,
860 MOD_VEX_W_0_0F42_P_0_LEN_1,
861 MOD_VEX_W_1_0F42_P_0_LEN_1,
862 MOD_VEX_W_0_0F42_P_2_LEN_1,
863 MOD_VEX_W_1_0F42_P_2_LEN_1,
864 MOD_VEX_W_0_0F44_P_0_LEN_1,
865 MOD_VEX_W_1_0F44_P_0_LEN_1,
866 MOD_VEX_W_0_0F44_P_2_LEN_1,
867 MOD_VEX_W_1_0F44_P_2_LEN_1,
868 MOD_VEX_W_0_0F45_P_0_LEN_1,
869 MOD_VEX_W_1_0F45_P_0_LEN_1,
870 MOD_VEX_W_0_0F45_P_2_LEN_1,
871 MOD_VEX_W_1_0F45_P_2_LEN_1,
872 MOD_VEX_W_0_0F46_P_0_LEN_1,
873 MOD_VEX_W_1_0F46_P_0_LEN_1,
874 MOD_VEX_W_0_0F46_P_2_LEN_1,
875 MOD_VEX_W_1_0F46_P_2_LEN_1,
876 MOD_VEX_W_0_0F47_P_0_LEN_1,
877 MOD_VEX_W_1_0F47_P_0_LEN_1,
878 MOD_VEX_W_0_0F47_P_2_LEN_1,
879 MOD_VEX_W_1_0F47_P_2_LEN_1,
880 MOD_VEX_W_0_0F4A_P_0_LEN_1,
881 MOD_VEX_W_1_0F4A_P_0_LEN_1,
882 MOD_VEX_W_0_0F4A_P_2_LEN_1,
883 MOD_VEX_W_1_0F4A_P_2_LEN_1,
884 MOD_VEX_W_0_0F4B_P_0_LEN_1,
885 MOD_VEX_W_1_0F4B_P_0_LEN_1,
886 MOD_VEX_W_0_0F4B_P_2_LEN_1,
592a252b
L
887 MOD_VEX_0F50,
888 MOD_VEX_0F71_REG_2,
889 MOD_VEX_0F71_REG_4,
890 MOD_VEX_0F71_REG_6,
891 MOD_VEX_0F72_REG_2,
892 MOD_VEX_0F72_REG_4,
893 MOD_VEX_0F72_REG_6,
894 MOD_VEX_0F73_REG_2,
895 MOD_VEX_0F73_REG_3,
896 MOD_VEX_0F73_REG_6,
897 MOD_VEX_0F73_REG_7,
ab4e4ed5
AF
898 MOD_VEX_W_0_0F91_P_0_LEN_0,
899 MOD_VEX_W_1_0F91_P_0_LEN_0,
900 MOD_VEX_W_0_0F91_P_2_LEN_0,
901 MOD_VEX_W_1_0F91_P_2_LEN_0,
902 MOD_VEX_W_0_0F92_P_0_LEN_0,
903 MOD_VEX_W_0_0F92_P_2_LEN_0,
58a211d2 904 MOD_VEX_0F92_P_3_LEN_0,
ab4e4ed5
AF
905 MOD_VEX_W_0_0F93_P_0_LEN_0,
906 MOD_VEX_W_0_0F93_P_2_LEN_0,
58a211d2 907 MOD_VEX_0F93_P_3_LEN_0,
ab4e4ed5
AF
908 MOD_VEX_W_0_0F98_P_0_LEN_0,
909 MOD_VEX_W_1_0F98_P_0_LEN_0,
910 MOD_VEX_W_0_0F98_P_2_LEN_0,
911 MOD_VEX_W_1_0F98_P_2_LEN_0,
912 MOD_VEX_W_0_0F99_P_0_LEN_0,
913 MOD_VEX_W_1_0F99_P_0_LEN_0,
914 MOD_VEX_W_0_0F99_P_2_LEN_0,
915 MOD_VEX_W_1_0F99_P_2_LEN_0,
592a252b
L
916 MOD_VEX_0FAE_REG_2,
917 MOD_VEX_0FAE_REG_3,
918 MOD_VEX_0FD7_PREFIX_2,
919 MOD_VEX_0FE7_PREFIX_2,
920 MOD_VEX_0FF0_PREFIX_3,
592a252b
L
921 MOD_VEX_0F381A_PREFIX_2,
922 MOD_VEX_0F382A_PREFIX_2,
923 MOD_VEX_0F382C_PREFIX_2,
924 MOD_VEX_0F382D_PREFIX_2,
925 MOD_VEX_0F382E_PREFIX_2,
6c30d220
L
926 MOD_VEX_0F382F_PREFIX_2,
927 MOD_VEX_0F385A_PREFIX_2,
928 MOD_VEX_0F388C_PREFIX_2,
929 MOD_VEX_0F388E_PREFIX_2,
ab4e4ed5
AF
930 MOD_VEX_W_0_0F3A30_P_2_LEN_0,
931 MOD_VEX_W_1_0F3A30_P_2_LEN_0,
932 MOD_VEX_W_0_0F3A31_P_2_LEN_0,
933 MOD_VEX_W_1_0F3A31_P_2_LEN_0,
934 MOD_VEX_W_0_0F3A32_P_2_LEN_0,
935 MOD_VEX_W_1_0F3A32_P_2_LEN_0,
936 MOD_VEX_W_0_0F3A33_P_2_LEN_0,
937 MOD_VEX_W_1_0F3A33_P_2_LEN_0,
43234a1e 938
43234a1e
L
939 MOD_EVEX_0F12_PREFIX_0,
940 MOD_EVEX_0F16_PREFIX_0,
941 MOD_EVEX_0F38C6_REG_1,
942 MOD_EVEX_0F38C6_REG_2,
943 MOD_EVEX_0F38C6_REG_5,
944 MOD_EVEX_0F38C6_REG_6,
945 MOD_EVEX_0F38C7_REG_1,
946 MOD_EVEX_0F38C7_REG_2,
947 MOD_EVEX_0F38C7_REG_5,
948 MOD_EVEX_0F38C7_REG_6
51e7da1b 949};
1ceb70f8 950
51e7da1b
L
951enum
952{
42164a71
L
953 RM_C6_REG_7 = 0,
954 RM_C7_REG_7,
955 RM_0F01_REG_0,
3873ba12
L
956 RM_0F01_REG_1,
957 RM_0F01_REG_2,
958 RM_0F01_REG_3,
f8687e93
JB
959 RM_0F01_REG_5_MOD_3,
960 RM_0F01_REG_7_MOD_3,
961 RM_0F1E_P_1_MOD_3_REG_7,
962 RM_0FAE_REG_6_MOD_3_P_0,
963 RM_0FAE_REG_7_MOD_3,
51e7da1b 964};
1ceb70f8 965
51e7da1b
L
966enum
967{
968 PREFIX_90 = 0,
f8687e93
JB
969 PREFIX_0F01_REG_5_MOD_0,
970 PREFIX_0F01_REG_5_MOD_3_RM_0,
971 PREFIX_0F01_REG_5_MOD_3_RM_2,
267b8516
JB
972 PREFIX_0F01_REG_7_MOD_3_RM_2,
973 PREFIX_0F01_REG_7_MOD_3_RM_3,
3233d7d0 974 PREFIX_0F09,
3873ba12
L
975 PREFIX_0F10,
976 PREFIX_0F11,
977 PREFIX_0F12,
978 PREFIX_0F16,
7e8b059b
L
979 PREFIX_0F1A,
980 PREFIX_0F1B,
c48935d7 981 PREFIX_0F1C,
603555e5 982 PREFIX_0F1E,
3873ba12
L
983 PREFIX_0F2A,
984 PREFIX_0F2B,
985 PREFIX_0F2C,
986 PREFIX_0F2D,
987 PREFIX_0F2E,
988 PREFIX_0F2F,
989 PREFIX_0F51,
990 PREFIX_0F52,
991 PREFIX_0F53,
992 PREFIX_0F58,
993 PREFIX_0F59,
994 PREFIX_0F5A,
995 PREFIX_0F5B,
996 PREFIX_0F5C,
997 PREFIX_0F5D,
998 PREFIX_0F5E,
999 PREFIX_0F5F,
1000 PREFIX_0F60,
1001 PREFIX_0F61,
1002 PREFIX_0F62,
1003 PREFIX_0F6C,
1004 PREFIX_0F6D,
1005 PREFIX_0F6F,
1006 PREFIX_0F70,
1007 PREFIX_0F73_REG_3,
1008 PREFIX_0F73_REG_7,
1009 PREFIX_0F78,
1010 PREFIX_0F79,
1011 PREFIX_0F7C,
1012 PREFIX_0F7D,
1013 PREFIX_0F7E,
1014 PREFIX_0F7F,
f8687e93
JB
1015 PREFIX_0FAE_REG_0_MOD_3,
1016 PREFIX_0FAE_REG_1_MOD_3,
1017 PREFIX_0FAE_REG_2_MOD_3,
1018 PREFIX_0FAE_REG_3_MOD_3,
1019 PREFIX_0FAE_REG_4_MOD_0,
1020 PREFIX_0FAE_REG_4_MOD_3,
1021 PREFIX_0FAE_REG_5_MOD_0,
1022 PREFIX_0FAE_REG_5_MOD_3,
1023 PREFIX_0FAE_REG_6_MOD_0,
1024 PREFIX_0FAE_REG_6_MOD_3,
1025 PREFIX_0FAE_REG_7_MOD_0,
3873ba12 1026 PREFIX_0FB8,
f12dc422 1027 PREFIX_0FBC,
3873ba12
L
1028 PREFIX_0FBD,
1029 PREFIX_0FC2,
f8687e93
JB
1030 PREFIX_0FC3_MOD_0,
1031 PREFIX_0FC7_REG_6_MOD_0,
1032 PREFIX_0FC7_REG_6_MOD_3,
1033 PREFIX_0FC7_REG_7_MOD_3,
3873ba12
L
1034 PREFIX_0FD0,
1035 PREFIX_0FD6,
1036 PREFIX_0FE6,
1037 PREFIX_0FE7,
1038 PREFIX_0FF0,
1039 PREFIX_0FF7,
1040 PREFIX_0F3810,
1041 PREFIX_0F3814,
1042 PREFIX_0F3815,
1043 PREFIX_0F3817,
1044 PREFIX_0F3820,
1045 PREFIX_0F3821,
1046 PREFIX_0F3822,
1047 PREFIX_0F3823,
1048 PREFIX_0F3824,
1049 PREFIX_0F3825,
1050 PREFIX_0F3828,
1051 PREFIX_0F3829,
1052 PREFIX_0F382A,
1053 PREFIX_0F382B,
1054 PREFIX_0F3830,
1055 PREFIX_0F3831,
1056 PREFIX_0F3832,
1057 PREFIX_0F3833,
1058 PREFIX_0F3834,
1059 PREFIX_0F3835,
1060 PREFIX_0F3837,
1061 PREFIX_0F3838,
1062 PREFIX_0F3839,
1063 PREFIX_0F383A,
1064 PREFIX_0F383B,
1065 PREFIX_0F383C,
1066 PREFIX_0F383D,
1067 PREFIX_0F383E,
1068 PREFIX_0F383F,
1069 PREFIX_0F3840,
1070 PREFIX_0F3841,
1071 PREFIX_0F3880,
1072 PREFIX_0F3881,
6c30d220 1073 PREFIX_0F3882,
a0046408
L
1074 PREFIX_0F38C8,
1075 PREFIX_0F38C9,
1076 PREFIX_0F38CA,
1077 PREFIX_0F38CB,
1078 PREFIX_0F38CC,
1079 PREFIX_0F38CD,
48521003 1080 PREFIX_0F38CF,
3873ba12
L
1081 PREFIX_0F38DB,
1082 PREFIX_0F38DC,
1083 PREFIX_0F38DD,
1084 PREFIX_0F38DE,
1085 PREFIX_0F38DF,
1086 PREFIX_0F38F0,
1087 PREFIX_0F38F1,
603555e5 1088 PREFIX_0F38F5,
e2e1fcde 1089 PREFIX_0F38F6,
c0a30a9f
L
1090 PREFIX_0F38F8,
1091 PREFIX_0F38F9,
3873ba12
L
1092 PREFIX_0F3A08,
1093 PREFIX_0F3A09,
1094 PREFIX_0F3A0A,
1095 PREFIX_0F3A0B,
1096 PREFIX_0F3A0C,
1097 PREFIX_0F3A0D,
1098 PREFIX_0F3A0E,
1099 PREFIX_0F3A14,
1100 PREFIX_0F3A15,
1101 PREFIX_0F3A16,
1102 PREFIX_0F3A17,
1103 PREFIX_0F3A20,
1104 PREFIX_0F3A21,
1105 PREFIX_0F3A22,
1106 PREFIX_0F3A40,
1107 PREFIX_0F3A41,
1108 PREFIX_0F3A42,
1109 PREFIX_0F3A44,
1110 PREFIX_0F3A60,
1111 PREFIX_0F3A61,
1112 PREFIX_0F3A62,
1113 PREFIX_0F3A63,
a0046408 1114 PREFIX_0F3ACC,
48521003
IT
1115 PREFIX_0F3ACE,
1116 PREFIX_0F3ACF,
3873ba12 1117 PREFIX_0F3ADF,
592a252b
L
1118 PREFIX_VEX_0F10,
1119 PREFIX_VEX_0F11,
1120 PREFIX_VEX_0F12,
1121 PREFIX_VEX_0F16,
1122 PREFIX_VEX_0F2A,
1123 PREFIX_VEX_0F2C,
1124 PREFIX_VEX_0F2D,
1125 PREFIX_VEX_0F2E,
1126 PREFIX_VEX_0F2F,
43234a1e
L
1127 PREFIX_VEX_0F41,
1128 PREFIX_VEX_0F42,
1129 PREFIX_VEX_0F44,
1130 PREFIX_VEX_0F45,
1131 PREFIX_VEX_0F46,
1132 PREFIX_VEX_0F47,
1ba585e8 1133 PREFIX_VEX_0F4A,
43234a1e 1134 PREFIX_VEX_0F4B,
592a252b
L
1135 PREFIX_VEX_0F51,
1136 PREFIX_VEX_0F52,
1137 PREFIX_VEX_0F53,
1138 PREFIX_VEX_0F58,
1139 PREFIX_VEX_0F59,
1140 PREFIX_VEX_0F5A,
1141 PREFIX_VEX_0F5B,
1142 PREFIX_VEX_0F5C,
1143 PREFIX_VEX_0F5D,
1144 PREFIX_VEX_0F5E,
1145 PREFIX_VEX_0F5F,
1146 PREFIX_VEX_0F60,
1147 PREFIX_VEX_0F61,
1148 PREFIX_VEX_0F62,
1149 PREFIX_VEX_0F63,
1150 PREFIX_VEX_0F64,
1151 PREFIX_VEX_0F65,
1152 PREFIX_VEX_0F66,
1153 PREFIX_VEX_0F67,
1154 PREFIX_VEX_0F68,
1155 PREFIX_VEX_0F69,
1156 PREFIX_VEX_0F6A,
1157 PREFIX_VEX_0F6B,
1158 PREFIX_VEX_0F6C,
1159 PREFIX_VEX_0F6D,
1160 PREFIX_VEX_0F6E,
1161 PREFIX_VEX_0F6F,
1162 PREFIX_VEX_0F70,
1163 PREFIX_VEX_0F71_REG_2,
1164 PREFIX_VEX_0F71_REG_4,
1165 PREFIX_VEX_0F71_REG_6,
1166 PREFIX_VEX_0F72_REG_2,
1167 PREFIX_VEX_0F72_REG_4,
1168 PREFIX_VEX_0F72_REG_6,
1169 PREFIX_VEX_0F73_REG_2,
1170 PREFIX_VEX_0F73_REG_3,
1171 PREFIX_VEX_0F73_REG_6,
1172 PREFIX_VEX_0F73_REG_7,
1173 PREFIX_VEX_0F74,
1174 PREFIX_VEX_0F75,
1175 PREFIX_VEX_0F76,
1176 PREFIX_VEX_0F77,
1177 PREFIX_VEX_0F7C,
1178 PREFIX_VEX_0F7D,
1179 PREFIX_VEX_0F7E,
1180 PREFIX_VEX_0F7F,
43234a1e
L
1181 PREFIX_VEX_0F90,
1182 PREFIX_VEX_0F91,
1183 PREFIX_VEX_0F92,
1184 PREFIX_VEX_0F93,
1185 PREFIX_VEX_0F98,
1ba585e8 1186 PREFIX_VEX_0F99,
592a252b
L
1187 PREFIX_VEX_0FC2,
1188 PREFIX_VEX_0FC4,
1189 PREFIX_VEX_0FC5,
1190 PREFIX_VEX_0FD0,
1191 PREFIX_VEX_0FD1,
1192 PREFIX_VEX_0FD2,
1193 PREFIX_VEX_0FD3,
1194 PREFIX_VEX_0FD4,
1195 PREFIX_VEX_0FD5,
1196 PREFIX_VEX_0FD6,
1197 PREFIX_VEX_0FD7,
1198 PREFIX_VEX_0FD8,
1199 PREFIX_VEX_0FD9,
1200 PREFIX_VEX_0FDA,
1201 PREFIX_VEX_0FDB,
1202 PREFIX_VEX_0FDC,
1203 PREFIX_VEX_0FDD,
1204 PREFIX_VEX_0FDE,
1205 PREFIX_VEX_0FDF,
1206 PREFIX_VEX_0FE0,
1207 PREFIX_VEX_0FE1,
1208 PREFIX_VEX_0FE2,
1209 PREFIX_VEX_0FE3,
1210 PREFIX_VEX_0FE4,
1211 PREFIX_VEX_0FE5,
1212 PREFIX_VEX_0FE6,
1213 PREFIX_VEX_0FE7,
1214 PREFIX_VEX_0FE8,
1215 PREFIX_VEX_0FE9,
1216 PREFIX_VEX_0FEA,
1217 PREFIX_VEX_0FEB,
1218 PREFIX_VEX_0FEC,
1219 PREFIX_VEX_0FED,
1220 PREFIX_VEX_0FEE,
1221 PREFIX_VEX_0FEF,
1222 PREFIX_VEX_0FF0,
1223 PREFIX_VEX_0FF1,
1224 PREFIX_VEX_0FF2,
1225 PREFIX_VEX_0FF3,
1226 PREFIX_VEX_0FF4,
1227 PREFIX_VEX_0FF5,
1228 PREFIX_VEX_0FF6,
1229 PREFIX_VEX_0FF7,
1230 PREFIX_VEX_0FF8,
1231 PREFIX_VEX_0FF9,
1232 PREFIX_VEX_0FFA,
1233 PREFIX_VEX_0FFB,
1234 PREFIX_VEX_0FFC,
1235 PREFIX_VEX_0FFD,
1236 PREFIX_VEX_0FFE,
1237 PREFIX_VEX_0F3800,
1238 PREFIX_VEX_0F3801,
1239 PREFIX_VEX_0F3802,
1240 PREFIX_VEX_0F3803,
1241 PREFIX_VEX_0F3804,
1242 PREFIX_VEX_0F3805,
1243 PREFIX_VEX_0F3806,
1244 PREFIX_VEX_0F3807,
1245 PREFIX_VEX_0F3808,
1246 PREFIX_VEX_0F3809,
1247 PREFIX_VEX_0F380A,
1248 PREFIX_VEX_0F380B,
1249 PREFIX_VEX_0F380C,
1250 PREFIX_VEX_0F380D,
1251 PREFIX_VEX_0F380E,
1252 PREFIX_VEX_0F380F,
1253 PREFIX_VEX_0F3813,
6c30d220 1254 PREFIX_VEX_0F3816,
592a252b
L
1255 PREFIX_VEX_0F3817,
1256 PREFIX_VEX_0F3818,
1257 PREFIX_VEX_0F3819,
1258 PREFIX_VEX_0F381A,
1259 PREFIX_VEX_0F381C,
1260 PREFIX_VEX_0F381D,
1261 PREFIX_VEX_0F381E,
1262 PREFIX_VEX_0F3820,
1263 PREFIX_VEX_0F3821,
1264 PREFIX_VEX_0F3822,
1265 PREFIX_VEX_0F3823,
1266 PREFIX_VEX_0F3824,
1267 PREFIX_VEX_0F3825,
1268 PREFIX_VEX_0F3828,
1269 PREFIX_VEX_0F3829,
1270 PREFIX_VEX_0F382A,
1271 PREFIX_VEX_0F382B,
1272 PREFIX_VEX_0F382C,
1273 PREFIX_VEX_0F382D,
1274 PREFIX_VEX_0F382E,
1275 PREFIX_VEX_0F382F,
1276 PREFIX_VEX_0F3830,
1277 PREFIX_VEX_0F3831,
1278 PREFIX_VEX_0F3832,
1279 PREFIX_VEX_0F3833,
1280 PREFIX_VEX_0F3834,
1281 PREFIX_VEX_0F3835,
6c30d220 1282 PREFIX_VEX_0F3836,
592a252b
L
1283 PREFIX_VEX_0F3837,
1284 PREFIX_VEX_0F3838,
1285 PREFIX_VEX_0F3839,
1286 PREFIX_VEX_0F383A,
1287 PREFIX_VEX_0F383B,
1288 PREFIX_VEX_0F383C,
1289 PREFIX_VEX_0F383D,
1290 PREFIX_VEX_0F383E,
1291 PREFIX_VEX_0F383F,
1292 PREFIX_VEX_0F3840,
1293 PREFIX_VEX_0F3841,
6c30d220
L
1294 PREFIX_VEX_0F3845,
1295 PREFIX_VEX_0F3846,
1296 PREFIX_VEX_0F3847,
1297 PREFIX_VEX_0F3858,
1298 PREFIX_VEX_0F3859,
1299 PREFIX_VEX_0F385A,
1300 PREFIX_VEX_0F3878,
1301 PREFIX_VEX_0F3879,
1302 PREFIX_VEX_0F388C,
1303 PREFIX_VEX_0F388E,
1304 PREFIX_VEX_0F3890,
1305 PREFIX_VEX_0F3891,
1306 PREFIX_VEX_0F3892,
1307 PREFIX_VEX_0F3893,
592a252b
L
1308 PREFIX_VEX_0F3896,
1309 PREFIX_VEX_0F3897,
1310 PREFIX_VEX_0F3898,
1311 PREFIX_VEX_0F3899,
1312 PREFIX_VEX_0F389A,
1313 PREFIX_VEX_0F389B,
1314 PREFIX_VEX_0F389C,
1315 PREFIX_VEX_0F389D,
1316 PREFIX_VEX_0F389E,
1317 PREFIX_VEX_0F389F,
1318 PREFIX_VEX_0F38A6,
1319 PREFIX_VEX_0F38A7,
1320 PREFIX_VEX_0F38A8,
1321 PREFIX_VEX_0F38A9,
1322 PREFIX_VEX_0F38AA,
1323 PREFIX_VEX_0F38AB,
1324 PREFIX_VEX_0F38AC,
1325 PREFIX_VEX_0F38AD,
1326 PREFIX_VEX_0F38AE,
1327 PREFIX_VEX_0F38AF,
1328 PREFIX_VEX_0F38B6,
1329 PREFIX_VEX_0F38B7,
1330 PREFIX_VEX_0F38B8,
1331 PREFIX_VEX_0F38B9,
1332 PREFIX_VEX_0F38BA,
1333 PREFIX_VEX_0F38BB,
1334 PREFIX_VEX_0F38BC,
1335 PREFIX_VEX_0F38BD,
1336 PREFIX_VEX_0F38BE,
1337 PREFIX_VEX_0F38BF,
48521003 1338 PREFIX_VEX_0F38CF,
592a252b
L
1339 PREFIX_VEX_0F38DB,
1340 PREFIX_VEX_0F38DC,
1341 PREFIX_VEX_0F38DD,
1342 PREFIX_VEX_0F38DE,
1343 PREFIX_VEX_0F38DF,
f12dc422
L
1344 PREFIX_VEX_0F38F2,
1345 PREFIX_VEX_0F38F3_REG_1,
1346 PREFIX_VEX_0F38F3_REG_2,
1347 PREFIX_VEX_0F38F3_REG_3,
6c30d220
L
1348 PREFIX_VEX_0F38F5,
1349 PREFIX_VEX_0F38F6,
f12dc422 1350 PREFIX_VEX_0F38F7,
6c30d220
L
1351 PREFIX_VEX_0F3A00,
1352 PREFIX_VEX_0F3A01,
1353 PREFIX_VEX_0F3A02,
592a252b
L
1354 PREFIX_VEX_0F3A04,
1355 PREFIX_VEX_0F3A05,
1356 PREFIX_VEX_0F3A06,
1357 PREFIX_VEX_0F3A08,
1358 PREFIX_VEX_0F3A09,
1359 PREFIX_VEX_0F3A0A,
1360 PREFIX_VEX_0F3A0B,
1361 PREFIX_VEX_0F3A0C,
1362 PREFIX_VEX_0F3A0D,
1363 PREFIX_VEX_0F3A0E,
1364 PREFIX_VEX_0F3A0F,
1365 PREFIX_VEX_0F3A14,
1366 PREFIX_VEX_0F3A15,
1367 PREFIX_VEX_0F3A16,
1368 PREFIX_VEX_0F3A17,
1369 PREFIX_VEX_0F3A18,
1370 PREFIX_VEX_0F3A19,
1371 PREFIX_VEX_0F3A1D,
1372 PREFIX_VEX_0F3A20,
1373 PREFIX_VEX_0F3A21,
1374 PREFIX_VEX_0F3A22,
43234a1e 1375 PREFIX_VEX_0F3A30,
1ba585e8 1376 PREFIX_VEX_0F3A31,
43234a1e 1377 PREFIX_VEX_0F3A32,
1ba585e8 1378 PREFIX_VEX_0F3A33,
6c30d220
L
1379 PREFIX_VEX_0F3A38,
1380 PREFIX_VEX_0F3A39,
592a252b
L
1381 PREFIX_VEX_0F3A40,
1382 PREFIX_VEX_0F3A41,
1383 PREFIX_VEX_0F3A42,
1384 PREFIX_VEX_0F3A44,
6c30d220 1385 PREFIX_VEX_0F3A46,
592a252b
L
1386 PREFIX_VEX_0F3A48,
1387 PREFIX_VEX_0F3A49,
1388 PREFIX_VEX_0F3A4A,
1389 PREFIX_VEX_0F3A4B,
1390 PREFIX_VEX_0F3A4C,
1391 PREFIX_VEX_0F3A5C,
1392 PREFIX_VEX_0F3A5D,
1393 PREFIX_VEX_0F3A5E,
1394 PREFIX_VEX_0F3A5F,
1395 PREFIX_VEX_0F3A60,
1396 PREFIX_VEX_0F3A61,
1397 PREFIX_VEX_0F3A62,
1398 PREFIX_VEX_0F3A63,
1399 PREFIX_VEX_0F3A68,
1400 PREFIX_VEX_0F3A69,
1401 PREFIX_VEX_0F3A6A,
1402 PREFIX_VEX_0F3A6B,
1403 PREFIX_VEX_0F3A6C,
1404 PREFIX_VEX_0F3A6D,
1405 PREFIX_VEX_0F3A6E,
1406 PREFIX_VEX_0F3A6F,
1407 PREFIX_VEX_0F3A78,
1408 PREFIX_VEX_0F3A79,
1409 PREFIX_VEX_0F3A7A,
1410 PREFIX_VEX_0F3A7B,
1411 PREFIX_VEX_0F3A7C,
1412 PREFIX_VEX_0F3A7D,
1413 PREFIX_VEX_0F3A7E,
1414 PREFIX_VEX_0F3A7F,
48521003
IT
1415 PREFIX_VEX_0F3ACE,
1416 PREFIX_VEX_0F3ACF,
6c30d220 1417 PREFIX_VEX_0F3ADF,
43234a1e
L
1418 PREFIX_VEX_0F3AF0,
1419
1420 PREFIX_EVEX_0F10,
1421 PREFIX_EVEX_0F11,
1422 PREFIX_EVEX_0F12,
1423 PREFIX_EVEX_0F13,
1424 PREFIX_EVEX_0F14,
1425 PREFIX_EVEX_0F15,
1426 PREFIX_EVEX_0F16,
1427 PREFIX_EVEX_0F17,
1428 PREFIX_EVEX_0F28,
1429 PREFIX_EVEX_0F29,
1430 PREFIX_EVEX_0F2A,
1431 PREFIX_EVEX_0F2B,
1432 PREFIX_EVEX_0F2C,
1433 PREFIX_EVEX_0F2D,
1434 PREFIX_EVEX_0F2E,
1435 PREFIX_EVEX_0F2F,
1436 PREFIX_EVEX_0F51,
90a915bf
IT
1437 PREFIX_EVEX_0F54,
1438 PREFIX_EVEX_0F55,
1439 PREFIX_EVEX_0F56,
1440 PREFIX_EVEX_0F57,
43234a1e
L
1441 PREFIX_EVEX_0F58,
1442 PREFIX_EVEX_0F59,
1443 PREFIX_EVEX_0F5A,
1444 PREFIX_EVEX_0F5B,
1445 PREFIX_EVEX_0F5C,
1446 PREFIX_EVEX_0F5D,
1447 PREFIX_EVEX_0F5E,
1448 PREFIX_EVEX_0F5F,
1ba585e8
IT
1449 PREFIX_EVEX_0F60,
1450 PREFIX_EVEX_0F61,
43234a1e 1451 PREFIX_EVEX_0F62,
1ba585e8
IT
1452 PREFIX_EVEX_0F63,
1453 PREFIX_EVEX_0F64,
1454 PREFIX_EVEX_0F65,
43234a1e 1455 PREFIX_EVEX_0F66,
1ba585e8
IT
1456 PREFIX_EVEX_0F67,
1457 PREFIX_EVEX_0F68,
1458 PREFIX_EVEX_0F69,
43234a1e 1459 PREFIX_EVEX_0F6A,
1ba585e8 1460 PREFIX_EVEX_0F6B,
43234a1e
L
1461 PREFIX_EVEX_0F6C,
1462 PREFIX_EVEX_0F6D,
1463 PREFIX_EVEX_0F6E,
1464 PREFIX_EVEX_0F6F,
1465 PREFIX_EVEX_0F70,
1ba585e8
IT
1466 PREFIX_EVEX_0F71_REG_2,
1467 PREFIX_EVEX_0F71_REG_4,
1468 PREFIX_EVEX_0F71_REG_6,
43234a1e
L
1469 PREFIX_EVEX_0F72_REG_0,
1470 PREFIX_EVEX_0F72_REG_1,
1471 PREFIX_EVEX_0F72_REG_2,
1472 PREFIX_EVEX_0F72_REG_4,
1473 PREFIX_EVEX_0F72_REG_6,
1474 PREFIX_EVEX_0F73_REG_2,
1ba585e8 1475 PREFIX_EVEX_0F73_REG_3,
43234a1e 1476 PREFIX_EVEX_0F73_REG_6,
1ba585e8
IT
1477 PREFIX_EVEX_0F73_REG_7,
1478 PREFIX_EVEX_0F74,
1479 PREFIX_EVEX_0F75,
43234a1e
L
1480 PREFIX_EVEX_0F76,
1481 PREFIX_EVEX_0F78,
1482 PREFIX_EVEX_0F79,
1483 PREFIX_EVEX_0F7A,
1484 PREFIX_EVEX_0F7B,
1485 PREFIX_EVEX_0F7E,
1486 PREFIX_EVEX_0F7F,
1487 PREFIX_EVEX_0FC2,
1ba585e8
IT
1488 PREFIX_EVEX_0FC4,
1489 PREFIX_EVEX_0FC5,
43234a1e 1490 PREFIX_EVEX_0FC6,
1ba585e8 1491 PREFIX_EVEX_0FD1,
43234a1e
L
1492 PREFIX_EVEX_0FD2,
1493 PREFIX_EVEX_0FD3,
1494 PREFIX_EVEX_0FD4,
1ba585e8 1495 PREFIX_EVEX_0FD5,
43234a1e 1496 PREFIX_EVEX_0FD6,
1ba585e8
IT
1497 PREFIX_EVEX_0FD8,
1498 PREFIX_EVEX_0FD9,
1499 PREFIX_EVEX_0FDA,
43234a1e 1500 PREFIX_EVEX_0FDB,
1ba585e8
IT
1501 PREFIX_EVEX_0FDC,
1502 PREFIX_EVEX_0FDD,
1503 PREFIX_EVEX_0FDE,
43234a1e 1504 PREFIX_EVEX_0FDF,
1ba585e8
IT
1505 PREFIX_EVEX_0FE0,
1506 PREFIX_EVEX_0FE1,
43234a1e 1507 PREFIX_EVEX_0FE2,
1ba585e8
IT
1508 PREFIX_EVEX_0FE3,
1509 PREFIX_EVEX_0FE4,
1510 PREFIX_EVEX_0FE5,
43234a1e
L
1511 PREFIX_EVEX_0FE6,
1512 PREFIX_EVEX_0FE7,
1ba585e8
IT
1513 PREFIX_EVEX_0FE8,
1514 PREFIX_EVEX_0FE9,
1515 PREFIX_EVEX_0FEA,
43234a1e 1516 PREFIX_EVEX_0FEB,
1ba585e8
IT
1517 PREFIX_EVEX_0FEC,
1518 PREFIX_EVEX_0FED,
1519 PREFIX_EVEX_0FEE,
43234a1e 1520 PREFIX_EVEX_0FEF,
1ba585e8 1521 PREFIX_EVEX_0FF1,
43234a1e
L
1522 PREFIX_EVEX_0FF2,
1523 PREFIX_EVEX_0FF3,
1524 PREFIX_EVEX_0FF4,
1ba585e8
IT
1525 PREFIX_EVEX_0FF5,
1526 PREFIX_EVEX_0FF6,
1527 PREFIX_EVEX_0FF8,
1528 PREFIX_EVEX_0FF9,
43234a1e
L
1529 PREFIX_EVEX_0FFA,
1530 PREFIX_EVEX_0FFB,
1ba585e8
IT
1531 PREFIX_EVEX_0FFC,
1532 PREFIX_EVEX_0FFD,
43234a1e 1533 PREFIX_EVEX_0FFE,
1ba585e8
IT
1534 PREFIX_EVEX_0F3800,
1535 PREFIX_EVEX_0F3804,
1536 PREFIX_EVEX_0F380B,
43234a1e
L
1537 PREFIX_EVEX_0F380C,
1538 PREFIX_EVEX_0F380D,
1ba585e8 1539 PREFIX_EVEX_0F3810,
43234a1e
L
1540 PREFIX_EVEX_0F3811,
1541 PREFIX_EVEX_0F3812,
1542 PREFIX_EVEX_0F3813,
1543 PREFIX_EVEX_0F3814,
1544 PREFIX_EVEX_0F3815,
1545 PREFIX_EVEX_0F3816,
1546 PREFIX_EVEX_0F3818,
1547 PREFIX_EVEX_0F3819,
1548 PREFIX_EVEX_0F381A,
1549 PREFIX_EVEX_0F381B,
1ba585e8
IT
1550 PREFIX_EVEX_0F381C,
1551 PREFIX_EVEX_0F381D,
43234a1e
L
1552 PREFIX_EVEX_0F381E,
1553 PREFIX_EVEX_0F381F,
1ba585e8 1554 PREFIX_EVEX_0F3820,
43234a1e
L
1555 PREFIX_EVEX_0F3821,
1556 PREFIX_EVEX_0F3822,
1557 PREFIX_EVEX_0F3823,
1558 PREFIX_EVEX_0F3824,
1559 PREFIX_EVEX_0F3825,
1ba585e8 1560 PREFIX_EVEX_0F3826,
43234a1e
L
1561 PREFIX_EVEX_0F3827,
1562 PREFIX_EVEX_0F3828,
1563 PREFIX_EVEX_0F3829,
1564 PREFIX_EVEX_0F382A,
1ba585e8 1565 PREFIX_EVEX_0F382B,
43234a1e
L
1566 PREFIX_EVEX_0F382C,
1567 PREFIX_EVEX_0F382D,
1ba585e8 1568 PREFIX_EVEX_0F3830,
43234a1e
L
1569 PREFIX_EVEX_0F3831,
1570 PREFIX_EVEX_0F3832,
1571 PREFIX_EVEX_0F3833,
1572 PREFIX_EVEX_0F3834,
1573 PREFIX_EVEX_0F3835,
1574 PREFIX_EVEX_0F3836,
1575 PREFIX_EVEX_0F3837,
1ba585e8 1576 PREFIX_EVEX_0F3838,
43234a1e
L
1577 PREFIX_EVEX_0F3839,
1578 PREFIX_EVEX_0F383A,
1579 PREFIX_EVEX_0F383B,
1ba585e8 1580 PREFIX_EVEX_0F383C,
43234a1e 1581 PREFIX_EVEX_0F383D,
1ba585e8 1582 PREFIX_EVEX_0F383E,
43234a1e
L
1583 PREFIX_EVEX_0F383F,
1584 PREFIX_EVEX_0F3840,
1585 PREFIX_EVEX_0F3842,
1586 PREFIX_EVEX_0F3843,
1587 PREFIX_EVEX_0F3844,
1588 PREFIX_EVEX_0F3845,
1589 PREFIX_EVEX_0F3846,
1590 PREFIX_EVEX_0F3847,
1591 PREFIX_EVEX_0F384C,
1592 PREFIX_EVEX_0F384D,
1593 PREFIX_EVEX_0F384E,
1594 PREFIX_EVEX_0F384F,
8cfcb765
IT
1595 PREFIX_EVEX_0F3850,
1596 PREFIX_EVEX_0F3851,
47acf0bd
IT
1597 PREFIX_EVEX_0F3852,
1598 PREFIX_EVEX_0F3853,
ee6872be 1599 PREFIX_EVEX_0F3854,
620214f7 1600 PREFIX_EVEX_0F3855,
43234a1e
L
1601 PREFIX_EVEX_0F3858,
1602 PREFIX_EVEX_0F3859,
1603 PREFIX_EVEX_0F385A,
1604 PREFIX_EVEX_0F385B,
53467f57
IT
1605 PREFIX_EVEX_0F3862,
1606 PREFIX_EVEX_0F3863,
43234a1e
L
1607 PREFIX_EVEX_0F3864,
1608 PREFIX_EVEX_0F3865,
1ba585e8 1609 PREFIX_EVEX_0F3866,
9186c494 1610 PREFIX_EVEX_0F3868,
53467f57
IT
1611 PREFIX_EVEX_0F3870,
1612 PREFIX_EVEX_0F3871,
1613 PREFIX_EVEX_0F3872,
1614 PREFIX_EVEX_0F3873,
1ba585e8 1615 PREFIX_EVEX_0F3875,
43234a1e
L
1616 PREFIX_EVEX_0F3876,
1617 PREFIX_EVEX_0F3877,
1ba585e8
IT
1618 PREFIX_EVEX_0F3878,
1619 PREFIX_EVEX_0F3879,
1620 PREFIX_EVEX_0F387A,
1621 PREFIX_EVEX_0F387B,
43234a1e 1622 PREFIX_EVEX_0F387C,
1ba585e8 1623 PREFIX_EVEX_0F387D,
43234a1e
L
1624 PREFIX_EVEX_0F387E,
1625 PREFIX_EVEX_0F387F,
14f195c9 1626 PREFIX_EVEX_0F3883,
43234a1e
L
1627 PREFIX_EVEX_0F3888,
1628 PREFIX_EVEX_0F3889,
1629 PREFIX_EVEX_0F388A,
1630 PREFIX_EVEX_0F388B,
1ba585e8 1631 PREFIX_EVEX_0F388D,
ee6872be 1632 PREFIX_EVEX_0F388F,
43234a1e
L
1633 PREFIX_EVEX_0F3890,
1634 PREFIX_EVEX_0F3891,
1635 PREFIX_EVEX_0F3892,
1636 PREFIX_EVEX_0F3893,
1637 PREFIX_EVEX_0F3896,
1638 PREFIX_EVEX_0F3897,
1639 PREFIX_EVEX_0F3898,
1640 PREFIX_EVEX_0F3899,
1641 PREFIX_EVEX_0F389A,
1642 PREFIX_EVEX_0F389B,
1643 PREFIX_EVEX_0F389C,
1644 PREFIX_EVEX_0F389D,
1645 PREFIX_EVEX_0F389E,
1646 PREFIX_EVEX_0F389F,
1647 PREFIX_EVEX_0F38A0,
1648 PREFIX_EVEX_0F38A1,
1649 PREFIX_EVEX_0F38A2,
1650 PREFIX_EVEX_0F38A3,
1651 PREFIX_EVEX_0F38A6,
1652 PREFIX_EVEX_0F38A7,
1653 PREFIX_EVEX_0F38A8,
1654 PREFIX_EVEX_0F38A9,
1655 PREFIX_EVEX_0F38AA,
1656 PREFIX_EVEX_0F38AB,
1657 PREFIX_EVEX_0F38AC,
1658 PREFIX_EVEX_0F38AD,
1659 PREFIX_EVEX_0F38AE,
1660 PREFIX_EVEX_0F38AF,
2cc1b5aa
IT
1661 PREFIX_EVEX_0F38B4,
1662 PREFIX_EVEX_0F38B5,
43234a1e
L
1663 PREFIX_EVEX_0F38B6,
1664 PREFIX_EVEX_0F38B7,
1665 PREFIX_EVEX_0F38B8,
1666 PREFIX_EVEX_0F38B9,
1667 PREFIX_EVEX_0F38BA,
1668 PREFIX_EVEX_0F38BB,
1669 PREFIX_EVEX_0F38BC,
1670 PREFIX_EVEX_0F38BD,
1671 PREFIX_EVEX_0F38BE,
1672 PREFIX_EVEX_0F38BF,
1673 PREFIX_EVEX_0F38C4,
1674 PREFIX_EVEX_0F38C6_REG_1,
1675 PREFIX_EVEX_0F38C6_REG_2,
1676 PREFIX_EVEX_0F38C6_REG_5,
1677 PREFIX_EVEX_0F38C6_REG_6,
1678 PREFIX_EVEX_0F38C7_REG_1,
1679 PREFIX_EVEX_0F38C7_REG_2,
1680 PREFIX_EVEX_0F38C7_REG_5,
1681 PREFIX_EVEX_0F38C7_REG_6,
1682 PREFIX_EVEX_0F38C8,
1683 PREFIX_EVEX_0F38CA,
1684 PREFIX_EVEX_0F38CB,
1685 PREFIX_EVEX_0F38CC,
1686 PREFIX_EVEX_0F38CD,
48521003 1687 PREFIX_EVEX_0F38CF,
8dcf1fad
IT
1688 PREFIX_EVEX_0F38DC,
1689 PREFIX_EVEX_0F38DD,
1690 PREFIX_EVEX_0F38DE,
1691 PREFIX_EVEX_0F38DF,
43234a1e
L
1692
1693 PREFIX_EVEX_0F3A00,
1694 PREFIX_EVEX_0F3A01,
1695 PREFIX_EVEX_0F3A03,
1696 PREFIX_EVEX_0F3A04,
1697 PREFIX_EVEX_0F3A05,
1698 PREFIX_EVEX_0F3A08,
1699 PREFIX_EVEX_0F3A09,
1700 PREFIX_EVEX_0F3A0A,
1701 PREFIX_EVEX_0F3A0B,
1ba585e8
IT
1702 PREFIX_EVEX_0F3A0F,
1703 PREFIX_EVEX_0F3A14,
1704 PREFIX_EVEX_0F3A15,
90a915bf 1705 PREFIX_EVEX_0F3A16,
43234a1e
L
1706 PREFIX_EVEX_0F3A17,
1707 PREFIX_EVEX_0F3A18,
1708 PREFIX_EVEX_0F3A19,
1709 PREFIX_EVEX_0F3A1A,
1710 PREFIX_EVEX_0F3A1B,
1711 PREFIX_EVEX_0F3A1D,
1712 PREFIX_EVEX_0F3A1E,
1713 PREFIX_EVEX_0F3A1F,
1ba585e8 1714 PREFIX_EVEX_0F3A20,
43234a1e 1715 PREFIX_EVEX_0F3A21,
90a915bf 1716 PREFIX_EVEX_0F3A22,
43234a1e
L
1717 PREFIX_EVEX_0F3A23,
1718 PREFIX_EVEX_0F3A25,
1719 PREFIX_EVEX_0F3A26,
1720 PREFIX_EVEX_0F3A27,
1721 PREFIX_EVEX_0F3A38,
1722 PREFIX_EVEX_0F3A39,
1723 PREFIX_EVEX_0F3A3A,
1724 PREFIX_EVEX_0F3A3B,
1ba585e8
IT
1725 PREFIX_EVEX_0F3A3E,
1726 PREFIX_EVEX_0F3A3F,
1727 PREFIX_EVEX_0F3A42,
43234a1e 1728 PREFIX_EVEX_0F3A43,
ff1982d5 1729 PREFIX_EVEX_0F3A44,
90a915bf
IT
1730 PREFIX_EVEX_0F3A50,
1731 PREFIX_EVEX_0F3A51,
43234a1e 1732 PREFIX_EVEX_0F3A54,
90a915bf
IT
1733 PREFIX_EVEX_0F3A55,
1734 PREFIX_EVEX_0F3A56,
1735 PREFIX_EVEX_0F3A57,
1736 PREFIX_EVEX_0F3A66,
53467f57
IT
1737 PREFIX_EVEX_0F3A67,
1738 PREFIX_EVEX_0F3A70,
1739 PREFIX_EVEX_0F3A71,
1740 PREFIX_EVEX_0F3A72,
48521003
IT
1741 PREFIX_EVEX_0F3A73,
1742 PREFIX_EVEX_0F3ACE,
1743 PREFIX_EVEX_0F3ACF
51e7da1b 1744};
4e7d34a6 1745
51e7da1b
L
1746enum
1747{
1748 X86_64_06 = 0,
3873ba12
L
1749 X86_64_07,
1750 X86_64_0D,
1751 X86_64_16,
1752 X86_64_17,
1753 X86_64_1E,
1754 X86_64_1F,
1755 X86_64_27,
1756 X86_64_2F,
1757 X86_64_37,
1758 X86_64_3F,
1759 X86_64_60,
1760 X86_64_61,
1761 X86_64_62,
1762 X86_64_63,
1763 X86_64_6D,
1764 X86_64_6F,
d039fef3 1765 X86_64_82,
3873ba12 1766 X86_64_9A,
aeab2b26
JB
1767 X86_64_C2,
1768 X86_64_C3,
3873ba12
L
1769 X86_64_C4,
1770 X86_64_C5,
1771 X86_64_CE,
1772 X86_64_D4,
1773 X86_64_D5,
a72d2af2
L
1774 X86_64_E8,
1775 X86_64_E9,
3873ba12
L
1776 X86_64_EA,
1777 X86_64_0F01_REG_0,
1778 X86_64_0F01_REG_1,
1779 X86_64_0F01_REG_2,
1780 X86_64_0F01_REG_3
51e7da1b 1781};
4e7d34a6 1782
51e7da1b
L
1783enum
1784{
1785 THREE_BYTE_0F38 = 0,
1f334aeb 1786 THREE_BYTE_0F3A
51e7da1b 1787};
4e7d34a6 1788
f88c9eb0
SP
1789enum
1790{
5dd85c99
SP
1791 XOP_08 = 0,
1792 XOP_09,
f88c9eb0
SP
1793 XOP_0A
1794};
1795
51e7da1b
L
1796enum
1797{
1798 VEX_0F = 0,
3873ba12
L
1799 VEX_0F38,
1800 VEX_0F3A
51e7da1b 1801};
c0f3af97 1802
43234a1e
L
1803enum
1804{
1805 EVEX_0F = 0,
1806 EVEX_0F38,
1807 EVEX_0F3A
1808};
1809
51e7da1b
L
1810enum
1811{
ec6f095a 1812 VEX_LEN_0F12_P_0_M_0 = 0,
592a252b
L
1813 VEX_LEN_0F12_P_0_M_1,
1814 VEX_LEN_0F12_P_2,
1815 VEX_LEN_0F13_M_0,
1816 VEX_LEN_0F16_P_0_M_0,
1817 VEX_LEN_0F16_P_0_M_1,
1818 VEX_LEN_0F16_P_2,
1819 VEX_LEN_0F17_M_0,
43234a1e 1820 VEX_LEN_0F41_P_0,
1ba585e8 1821 VEX_LEN_0F41_P_2,
43234a1e 1822 VEX_LEN_0F42_P_0,
1ba585e8 1823 VEX_LEN_0F42_P_2,
43234a1e 1824 VEX_LEN_0F44_P_0,
1ba585e8 1825 VEX_LEN_0F44_P_2,
43234a1e 1826 VEX_LEN_0F45_P_0,
1ba585e8 1827 VEX_LEN_0F45_P_2,
43234a1e 1828 VEX_LEN_0F46_P_0,
1ba585e8 1829 VEX_LEN_0F46_P_2,
43234a1e 1830 VEX_LEN_0F47_P_0,
1ba585e8
IT
1831 VEX_LEN_0F47_P_2,
1832 VEX_LEN_0F4A_P_0,
1833 VEX_LEN_0F4A_P_2,
1834 VEX_LEN_0F4B_P_0,
43234a1e 1835 VEX_LEN_0F4B_P_2,
592a252b 1836 VEX_LEN_0F6E_P_2,
ec6f095a 1837 VEX_LEN_0F77_P_0,
592a252b
L
1838 VEX_LEN_0F7E_P_1,
1839 VEX_LEN_0F7E_P_2,
43234a1e 1840 VEX_LEN_0F90_P_0,
1ba585e8 1841 VEX_LEN_0F90_P_2,
43234a1e 1842 VEX_LEN_0F91_P_0,
1ba585e8 1843 VEX_LEN_0F91_P_2,
43234a1e 1844 VEX_LEN_0F92_P_0,
90a915bf 1845 VEX_LEN_0F92_P_2,
1ba585e8 1846 VEX_LEN_0F92_P_3,
43234a1e 1847 VEX_LEN_0F93_P_0,
90a915bf 1848 VEX_LEN_0F93_P_2,
1ba585e8 1849 VEX_LEN_0F93_P_3,
43234a1e 1850 VEX_LEN_0F98_P_0,
1ba585e8
IT
1851 VEX_LEN_0F98_P_2,
1852 VEX_LEN_0F99_P_0,
1853 VEX_LEN_0F99_P_2,
592a252b
L
1854 VEX_LEN_0FAE_R_2_M_0,
1855 VEX_LEN_0FAE_R_3_M_0,
592a252b
L
1856 VEX_LEN_0FC4_P_2,
1857 VEX_LEN_0FC5_P_2,
592a252b 1858 VEX_LEN_0FD6_P_2,
592a252b 1859 VEX_LEN_0FF7_P_2,
6c30d220
L
1860 VEX_LEN_0F3816_P_2,
1861 VEX_LEN_0F3819_P_2,
592a252b 1862 VEX_LEN_0F381A_P_2_M_0,
6c30d220 1863 VEX_LEN_0F3836_P_2,
592a252b 1864 VEX_LEN_0F3841_P_2,
6c30d220 1865 VEX_LEN_0F385A_P_2_M_0,
592a252b 1866 VEX_LEN_0F38DB_P_2,
f12dc422
L
1867 VEX_LEN_0F38F2_P_0,
1868 VEX_LEN_0F38F3_R_1_P_0,
1869 VEX_LEN_0F38F3_R_2_P_0,
1870 VEX_LEN_0F38F3_R_3_P_0,
6c30d220
L
1871 VEX_LEN_0F38F5_P_0,
1872 VEX_LEN_0F38F5_P_1,
1873 VEX_LEN_0F38F5_P_3,
1874 VEX_LEN_0F38F6_P_3,
f12dc422 1875 VEX_LEN_0F38F7_P_0,
6c30d220
L
1876 VEX_LEN_0F38F7_P_1,
1877 VEX_LEN_0F38F7_P_2,
1878 VEX_LEN_0F38F7_P_3,
1879 VEX_LEN_0F3A00_P_2,
1880 VEX_LEN_0F3A01_P_2,
592a252b 1881 VEX_LEN_0F3A06_P_2,
592a252b
L
1882 VEX_LEN_0F3A14_P_2,
1883 VEX_LEN_0F3A15_P_2,
1884 VEX_LEN_0F3A16_P_2,
1885 VEX_LEN_0F3A17_P_2,
1886 VEX_LEN_0F3A18_P_2,
1887 VEX_LEN_0F3A19_P_2,
1888 VEX_LEN_0F3A20_P_2,
1889 VEX_LEN_0F3A21_P_2,
1890 VEX_LEN_0F3A22_P_2,
43234a1e 1891 VEX_LEN_0F3A30_P_2,
1ba585e8 1892 VEX_LEN_0F3A31_P_2,
43234a1e 1893 VEX_LEN_0F3A32_P_2,
1ba585e8 1894 VEX_LEN_0F3A33_P_2,
6c30d220
L
1895 VEX_LEN_0F3A38_P_2,
1896 VEX_LEN_0F3A39_P_2,
592a252b 1897 VEX_LEN_0F3A41_P_2,
6c30d220 1898 VEX_LEN_0F3A46_P_2,
592a252b
L
1899 VEX_LEN_0F3A60_P_2,
1900 VEX_LEN_0F3A61_P_2,
1901 VEX_LEN_0F3A62_P_2,
1902 VEX_LEN_0F3A63_P_2,
1903 VEX_LEN_0F3A6A_P_2,
1904 VEX_LEN_0F3A6B_P_2,
1905 VEX_LEN_0F3A6E_P_2,
1906 VEX_LEN_0F3A6F_P_2,
1907 VEX_LEN_0F3A7A_P_2,
1908 VEX_LEN_0F3A7B_P_2,
1909 VEX_LEN_0F3A7E_P_2,
1910 VEX_LEN_0F3A7F_P_2,
1911 VEX_LEN_0F3ADF_P_2,
6c30d220 1912 VEX_LEN_0F3AF0_P_3,
ff688e1f
L
1913 VEX_LEN_0FXOP_08_CC,
1914 VEX_LEN_0FXOP_08_CD,
1915 VEX_LEN_0FXOP_08_CE,
1916 VEX_LEN_0FXOP_08_CF,
1917 VEX_LEN_0FXOP_08_EC,
1918 VEX_LEN_0FXOP_08_ED,
1919 VEX_LEN_0FXOP_08_EE,
1920 VEX_LEN_0FXOP_08_EF,
592a252b
L
1921 VEX_LEN_0FXOP_09_80,
1922 VEX_LEN_0FXOP_09_81
51e7da1b 1923};
c0f3af97 1924
04e2a182
L
1925enum
1926{
1927 EVEX_LEN_0F6E_P_2 = 0,
1928 EVEX_LEN_0F7E_P_1,
1929 EVEX_LEN_0F7E_P_2,
12efd68d 1930 EVEX_LEN_0FD6_P_2,
f0a6222e
L
1931 EVEX_LEN_0F3819_P_2_W_0,
1932 EVEX_LEN_0F3819_P_2_W_1,
1933 EVEX_LEN_0F381A_P_2_W_0,
1934 EVEX_LEN_0F381A_P_2_W_1,
1935 EVEX_LEN_0F381B_P_2_W_0,
1936 EVEX_LEN_0F381B_P_2_W_1,
1937 EVEX_LEN_0F385A_P_2_W_0,
1938 EVEX_LEN_0F385A_P_2_W_1,
1939 EVEX_LEN_0F385B_P_2_W_0,
1940 EVEX_LEN_0F385B_P_2_W_1,
e395f487
L
1941 EVEX_LEN_0F38C6_REG_1_PREFIX_2,
1942 EVEX_LEN_0F38C6_REG_2_PREFIX_2,
1943 EVEX_LEN_0F38C6_REG_5_PREFIX_2,
1944 EVEX_LEN_0F38C6_REG_6_PREFIX_2,
1945 EVEX_LEN_0F38C7_R_1_P_2_W_0,
1946 EVEX_LEN_0F38C7_R_1_P_2_W_1,
1947 EVEX_LEN_0F38C7_R_2_P_2_W_0,
1948 EVEX_LEN_0F38C7_R_2_P_2_W_1,
1949 EVEX_LEN_0F38C7_R_5_P_2_W_0,
1950 EVEX_LEN_0F38C7_R_5_P_2_W_1,
1951 EVEX_LEN_0F38C7_R_6_P_2_W_0,
1952 EVEX_LEN_0F38C7_R_6_P_2_W_1,
12efd68d
L
1953 EVEX_LEN_0F3A18_P_2_W_0,
1954 EVEX_LEN_0F3A18_P_2_W_1,
1955 EVEX_LEN_0F3A19_P_2_W_0,
1956 EVEX_LEN_0F3A19_P_2_W_1,
1957 EVEX_LEN_0F3A1A_P_2_W_0,
1958 EVEX_LEN_0F3A1A_P_2_W_1,
1959 EVEX_LEN_0F3A1B_P_2_W_0,
6e1c90b7
L
1960 EVEX_LEN_0F3A1B_P_2_W_1,
1961 EVEX_LEN_0F3A23_P_2_W_0,
1962 EVEX_LEN_0F3A23_P_2_W_1,
1963 EVEX_LEN_0F3A38_P_2_W_0,
1964 EVEX_LEN_0F3A38_P_2_W_1,
1965 EVEX_LEN_0F3A39_P_2_W_0,
1966 EVEX_LEN_0F3A39_P_2_W_1,
1967 EVEX_LEN_0F3A3A_P_2_W_0,
1968 EVEX_LEN_0F3A3A_P_2_W_1,
1969 EVEX_LEN_0F3A3B_P_2_W_0,
1970 EVEX_LEN_0F3A3B_P_2_W_1,
1971 EVEX_LEN_0F3A43_P_2_W_0,
1972 EVEX_LEN_0F3A43_P_2_W_1
04e2a182
L
1973};
1974
9e30b8e0
L
1975enum
1976{
ec6f095a 1977 VEX_W_0F41_P_0_LEN_1 = 0,
1ba585e8 1978 VEX_W_0F41_P_2_LEN_1,
43234a1e 1979 VEX_W_0F42_P_0_LEN_1,
1ba585e8 1980 VEX_W_0F42_P_2_LEN_1,
43234a1e 1981 VEX_W_0F44_P_0_LEN_0,
1ba585e8 1982 VEX_W_0F44_P_2_LEN_0,
43234a1e 1983 VEX_W_0F45_P_0_LEN_1,
1ba585e8 1984 VEX_W_0F45_P_2_LEN_1,
43234a1e 1985 VEX_W_0F46_P_0_LEN_1,
1ba585e8 1986 VEX_W_0F46_P_2_LEN_1,
43234a1e 1987 VEX_W_0F47_P_0_LEN_1,
1ba585e8
IT
1988 VEX_W_0F47_P_2_LEN_1,
1989 VEX_W_0F4A_P_0_LEN_1,
1990 VEX_W_0F4A_P_2_LEN_1,
1991 VEX_W_0F4B_P_0_LEN_1,
43234a1e 1992 VEX_W_0F4B_P_2_LEN_1,
43234a1e 1993 VEX_W_0F90_P_0_LEN_0,
1ba585e8 1994 VEX_W_0F90_P_2_LEN_0,
43234a1e 1995 VEX_W_0F91_P_0_LEN_0,
1ba585e8 1996 VEX_W_0F91_P_2_LEN_0,
43234a1e 1997 VEX_W_0F92_P_0_LEN_0,
90a915bf 1998 VEX_W_0F92_P_2_LEN_0,
43234a1e 1999 VEX_W_0F93_P_0_LEN_0,
90a915bf 2000 VEX_W_0F93_P_2_LEN_0,
43234a1e 2001 VEX_W_0F98_P_0_LEN_0,
1ba585e8
IT
2002 VEX_W_0F98_P_2_LEN_0,
2003 VEX_W_0F99_P_0_LEN_0,
2004 VEX_W_0F99_P_2_LEN_0,
592a252b
L
2005 VEX_W_0F380C_P_2,
2006 VEX_W_0F380D_P_2,
2007 VEX_W_0F380E_P_2,
2008 VEX_W_0F380F_P_2,
6c30d220 2009 VEX_W_0F3816_P_2,
6c30d220
L
2010 VEX_W_0F3818_P_2,
2011 VEX_W_0F3819_P_2,
592a252b 2012 VEX_W_0F381A_P_2_M_0,
592a252b
L
2013 VEX_W_0F382C_P_2_M_0,
2014 VEX_W_0F382D_P_2_M_0,
2015 VEX_W_0F382E_P_2_M_0,
2016 VEX_W_0F382F_P_2_M_0,
6c30d220 2017 VEX_W_0F3836_P_2,
6c30d220
L
2018 VEX_W_0F3846_P_2,
2019 VEX_W_0F3858_P_2,
2020 VEX_W_0F3859_P_2,
2021 VEX_W_0F385A_P_2_M_0,
2022 VEX_W_0F3878_P_2,
2023 VEX_W_0F3879_P_2,
48521003 2024 VEX_W_0F38CF_P_2,
6c30d220
L
2025 VEX_W_0F3A00_P_2,
2026 VEX_W_0F3A01_P_2,
2027 VEX_W_0F3A02_P_2,
592a252b
L
2028 VEX_W_0F3A04_P_2,
2029 VEX_W_0F3A05_P_2,
2030 VEX_W_0F3A06_P_2,
592a252b
L
2031 VEX_W_0F3A18_P_2,
2032 VEX_W_0F3A19_P_2,
43234a1e 2033 VEX_W_0F3A30_P_2_LEN_0,
1ba585e8 2034 VEX_W_0F3A31_P_2_LEN_0,
43234a1e 2035 VEX_W_0F3A32_P_2_LEN_0,
1ba585e8 2036 VEX_W_0F3A33_P_2_LEN_0,
6c30d220
L
2037 VEX_W_0F3A38_P_2,
2038 VEX_W_0F3A39_P_2,
6c30d220 2039 VEX_W_0F3A46_P_2,
592a252b
L
2040 VEX_W_0F3A48_P_2,
2041 VEX_W_0F3A49_P_2,
2042 VEX_W_0F3A4A_P_2,
2043 VEX_W_0F3A4B_P_2,
2044 VEX_W_0F3A4C_P_2,
48521003
IT
2045 VEX_W_0F3ACE_P_2,
2046 VEX_W_0F3ACF_P_2,
43234a1e
L
2047
2048 EVEX_W_0F10_P_0,
36cc073e 2049 EVEX_W_0F10_P_1,
43234a1e 2050 EVEX_W_0F10_P_2,
36cc073e 2051 EVEX_W_0F10_P_3,
43234a1e 2052 EVEX_W_0F11_P_0,
36cc073e 2053 EVEX_W_0F11_P_1,
43234a1e 2054 EVEX_W_0F11_P_2,
36cc073e 2055 EVEX_W_0F11_P_3,
43234a1e
L
2056 EVEX_W_0F12_P_0_M_0,
2057 EVEX_W_0F12_P_0_M_1,
2058 EVEX_W_0F12_P_1,
2059 EVEX_W_0F12_P_2,
2060 EVEX_W_0F12_P_3,
2061 EVEX_W_0F13_P_0,
2062 EVEX_W_0F13_P_2,
2063 EVEX_W_0F14_P_0,
2064 EVEX_W_0F14_P_2,
2065 EVEX_W_0F15_P_0,
2066 EVEX_W_0F15_P_2,
2067 EVEX_W_0F16_P_0_M_0,
2068 EVEX_W_0F16_P_0_M_1,
2069 EVEX_W_0F16_P_1,
2070 EVEX_W_0F16_P_2,
2071 EVEX_W_0F17_P_0,
2072 EVEX_W_0F17_P_2,
2073 EVEX_W_0F28_P_0,
2074 EVEX_W_0F28_P_2,
2075 EVEX_W_0F29_P_0,
2076 EVEX_W_0F29_P_2,
43234a1e
L
2077 EVEX_W_0F2A_P_3,
2078 EVEX_W_0F2B_P_0,
2079 EVEX_W_0F2B_P_2,
2080 EVEX_W_0F2E_P_0,
2081 EVEX_W_0F2E_P_2,
2082 EVEX_W_0F2F_P_0,
2083 EVEX_W_0F2F_P_2,
2084 EVEX_W_0F51_P_0,
2085 EVEX_W_0F51_P_1,
2086 EVEX_W_0F51_P_2,
2087 EVEX_W_0F51_P_3,
90a915bf
IT
2088 EVEX_W_0F54_P_0,
2089 EVEX_W_0F54_P_2,
2090 EVEX_W_0F55_P_0,
2091 EVEX_W_0F55_P_2,
2092 EVEX_W_0F56_P_0,
2093 EVEX_W_0F56_P_2,
2094 EVEX_W_0F57_P_0,
2095 EVEX_W_0F57_P_2,
43234a1e
L
2096 EVEX_W_0F58_P_0,
2097 EVEX_W_0F58_P_1,
2098 EVEX_W_0F58_P_2,
2099 EVEX_W_0F58_P_3,
2100 EVEX_W_0F59_P_0,
2101 EVEX_W_0F59_P_1,
2102 EVEX_W_0F59_P_2,
2103 EVEX_W_0F59_P_3,
2104 EVEX_W_0F5A_P_0,
2105 EVEX_W_0F5A_P_1,
2106 EVEX_W_0F5A_P_2,
2107 EVEX_W_0F5A_P_3,
2108 EVEX_W_0F5B_P_0,
2109 EVEX_W_0F5B_P_1,
2110 EVEX_W_0F5B_P_2,
2111 EVEX_W_0F5C_P_0,
2112 EVEX_W_0F5C_P_1,
2113 EVEX_W_0F5C_P_2,
2114 EVEX_W_0F5C_P_3,
2115 EVEX_W_0F5D_P_0,
2116 EVEX_W_0F5D_P_1,
2117 EVEX_W_0F5D_P_2,
2118 EVEX_W_0F5D_P_3,
2119 EVEX_W_0F5E_P_0,
2120 EVEX_W_0F5E_P_1,
2121 EVEX_W_0F5E_P_2,
2122 EVEX_W_0F5E_P_3,
2123 EVEX_W_0F5F_P_0,
2124 EVEX_W_0F5F_P_1,
2125 EVEX_W_0F5F_P_2,
2126 EVEX_W_0F5F_P_3,
2127 EVEX_W_0F62_P_2,
2128 EVEX_W_0F66_P_2,
2129 EVEX_W_0F6A_P_2,
1ba585e8 2130 EVEX_W_0F6B_P_2,
43234a1e
L
2131 EVEX_W_0F6C_P_2,
2132 EVEX_W_0F6D_P_2,
43234a1e
L
2133 EVEX_W_0F6F_P_1,
2134 EVEX_W_0F6F_P_2,
1ba585e8 2135 EVEX_W_0F6F_P_3,
43234a1e
L
2136 EVEX_W_0F70_P_2,
2137 EVEX_W_0F72_R_2_P_2,
2138 EVEX_W_0F72_R_6_P_2,
2139 EVEX_W_0F73_R_2_P_2,
2140 EVEX_W_0F73_R_6_P_2,
2141 EVEX_W_0F76_P_2,
2142 EVEX_W_0F78_P_0,
90a915bf 2143 EVEX_W_0F78_P_2,
43234a1e 2144 EVEX_W_0F79_P_0,
90a915bf 2145 EVEX_W_0F79_P_2,
43234a1e 2146 EVEX_W_0F7A_P_1,
90a915bf 2147 EVEX_W_0F7A_P_2,
43234a1e 2148 EVEX_W_0F7A_P_3,
90a915bf 2149 EVEX_W_0F7B_P_2,
43234a1e
L
2150 EVEX_W_0F7B_P_3,
2151 EVEX_W_0F7E_P_1,
43234a1e
L
2152 EVEX_W_0F7F_P_1,
2153 EVEX_W_0F7F_P_2,
1ba585e8 2154 EVEX_W_0F7F_P_3,
43234a1e
L
2155 EVEX_W_0FC2_P_0,
2156 EVEX_W_0FC2_P_1,
2157 EVEX_W_0FC2_P_2,
2158 EVEX_W_0FC2_P_3,
2159 EVEX_W_0FC6_P_0,
2160 EVEX_W_0FC6_P_2,
2161 EVEX_W_0FD2_P_2,
2162 EVEX_W_0FD3_P_2,
2163 EVEX_W_0FD4_P_2,
2164 EVEX_W_0FD6_P_2,
2165 EVEX_W_0FE6_P_1,
2166 EVEX_W_0FE6_P_2,
2167 EVEX_W_0FE6_P_3,
2168 EVEX_W_0FE7_P_2,
2169 EVEX_W_0FF2_P_2,
2170 EVEX_W_0FF3_P_2,
2171 EVEX_W_0FF4_P_2,
2172 EVEX_W_0FFA_P_2,
2173 EVEX_W_0FFB_P_2,
2174 EVEX_W_0FFE_P_2,
2175 EVEX_W_0F380C_P_2,
2176 EVEX_W_0F380D_P_2,
1ba585e8
IT
2177 EVEX_W_0F3810_P_1,
2178 EVEX_W_0F3810_P_2,
43234a1e 2179 EVEX_W_0F3811_P_1,
1ba585e8 2180 EVEX_W_0F3811_P_2,
43234a1e 2181 EVEX_W_0F3812_P_1,
1ba585e8 2182 EVEX_W_0F3812_P_2,
43234a1e
L
2183 EVEX_W_0F3813_P_1,
2184 EVEX_W_0F3813_P_2,
2185 EVEX_W_0F3814_P_1,
2186 EVEX_W_0F3815_P_1,
2187 EVEX_W_0F3818_P_2,
2188 EVEX_W_0F3819_P_2,
2189 EVEX_W_0F381A_P_2,
2190 EVEX_W_0F381B_P_2,
2191 EVEX_W_0F381E_P_2,
2192 EVEX_W_0F381F_P_2,
1ba585e8 2193 EVEX_W_0F3820_P_1,
43234a1e
L
2194 EVEX_W_0F3821_P_1,
2195 EVEX_W_0F3822_P_1,
2196 EVEX_W_0F3823_P_1,
2197 EVEX_W_0F3824_P_1,
2198 EVEX_W_0F3825_P_1,
2199 EVEX_W_0F3825_P_2,
1ba585e8
IT
2200 EVEX_W_0F3826_P_1,
2201 EVEX_W_0F3826_P_2,
2202 EVEX_W_0F3828_P_1,
43234a1e 2203 EVEX_W_0F3828_P_2,
1ba585e8 2204 EVEX_W_0F3829_P_1,
43234a1e
L
2205 EVEX_W_0F3829_P_2,
2206 EVEX_W_0F382A_P_1,
2207 EVEX_W_0F382A_P_2,
1ba585e8
IT
2208 EVEX_W_0F382B_P_2,
2209 EVEX_W_0F3830_P_1,
43234a1e
L
2210 EVEX_W_0F3831_P_1,
2211 EVEX_W_0F3832_P_1,
2212 EVEX_W_0F3833_P_1,
2213 EVEX_W_0F3834_P_1,
2214 EVEX_W_0F3835_P_1,
2215 EVEX_W_0F3835_P_2,
2216 EVEX_W_0F3837_P_2,
90a915bf
IT
2217 EVEX_W_0F3838_P_1,
2218 EVEX_W_0F3839_P_1,
43234a1e
L
2219 EVEX_W_0F383A_P_1,
2220 EVEX_W_0F3840_P_2,
d6aab7a1 2221 EVEX_W_0F3852_P_1,
ee6872be 2222 EVEX_W_0F3854_P_2,
620214f7 2223 EVEX_W_0F3855_P_2,
43234a1e
L
2224 EVEX_W_0F3858_P_2,
2225 EVEX_W_0F3859_P_2,
2226 EVEX_W_0F385A_P_2,
2227 EVEX_W_0F385B_P_2,
53467f57
IT
2228 EVEX_W_0F3862_P_2,
2229 EVEX_W_0F3863_P_2,
1ba585e8 2230 EVEX_W_0F3866_P_2,
9186c494 2231 EVEX_W_0F3868_P_3,
53467f57
IT
2232 EVEX_W_0F3870_P_2,
2233 EVEX_W_0F3871_P_2,
d6aab7a1 2234 EVEX_W_0F3872_P_1,
53467f57 2235 EVEX_W_0F3872_P_2,
d6aab7a1 2236 EVEX_W_0F3872_P_3,
53467f57 2237 EVEX_W_0F3873_P_2,
1ba585e8
IT
2238 EVEX_W_0F3875_P_2,
2239 EVEX_W_0F3878_P_2,
2240 EVEX_W_0F3879_P_2,
2241 EVEX_W_0F387A_P_2,
2242 EVEX_W_0F387B_P_2,
2243 EVEX_W_0F387D_P_2,
14f195c9 2244 EVEX_W_0F3883_P_2,
1ba585e8 2245 EVEX_W_0F388D_P_2,
43234a1e
L
2246 EVEX_W_0F3891_P_2,
2247 EVEX_W_0F3893_P_2,
2248 EVEX_W_0F38A1_P_2,
2249 EVEX_W_0F38A3_P_2,
2250 EVEX_W_0F38C7_R_1_P_2,
2251 EVEX_W_0F38C7_R_2_P_2,
2252 EVEX_W_0F38C7_R_5_P_2,
2253 EVEX_W_0F38C7_R_6_P_2,
2254
2255 EVEX_W_0F3A00_P_2,
2256 EVEX_W_0F3A01_P_2,
2257 EVEX_W_0F3A04_P_2,
2258 EVEX_W_0F3A05_P_2,
2259 EVEX_W_0F3A08_P_2,
2260 EVEX_W_0F3A09_P_2,
2261 EVEX_W_0F3A0A_P_2,
2262 EVEX_W_0F3A0B_P_2,
2263 EVEX_W_0F3A18_P_2,
2264 EVEX_W_0F3A19_P_2,
2265 EVEX_W_0F3A1A_P_2,
2266 EVEX_W_0F3A1B_P_2,
2267 EVEX_W_0F3A1D_P_2,
2268 EVEX_W_0F3A21_P_2,
2269 EVEX_W_0F3A23_P_2,
2270 EVEX_W_0F3A38_P_2,
2271 EVEX_W_0F3A39_P_2,
2272 EVEX_W_0F3A3A_P_2,
2273 EVEX_W_0F3A3B_P_2,
1ba585e8
IT
2274 EVEX_W_0F3A3E_P_2,
2275 EVEX_W_0F3A3F_P_2,
2276 EVEX_W_0F3A42_P_2,
90a915bf
IT
2277 EVEX_W_0F3A43_P_2,
2278 EVEX_W_0F3A50_P_2,
2279 EVEX_W_0F3A51_P_2,
2280 EVEX_W_0F3A56_P_2,
2281 EVEX_W_0F3A57_P_2,
2282 EVEX_W_0F3A66_P_2,
53467f57
IT
2283 EVEX_W_0F3A67_P_2,
2284 EVEX_W_0F3A70_P_2,
2285 EVEX_W_0F3A71_P_2,
2286 EVEX_W_0F3A72_P_2,
48521003
IT
2287 EVEX_W_0F3A73_P_2,
2288 EVEX_W_0F3ACE_P_2,
2289 EVEX_W_0F3ACF_P_2
9e30b8e0
L
2290};
2291
26ca5450 2292typedef void (*op_rtn) (int bytemode, int sizeflag);
252b5132
RH
2293
2294struct dis386 {
2da11e11 2295 const char *name;
ce518a5f
L
2296 struct
2297 {
2298 op_rtn rtn;
2299 int bytemode;
2300 } op[MAX_OPERANDS];
bf890a93 2301 unsigned int prefix_requirement;
252b5132
RH
2302};
2303
2304/* Upper case letters in the instruction names here are macros.
2305 'A' => print 'b' if no register operands or suffix_always is true
2306 'B' => print 'b' if suffix_always is true
9306ca4a 2307 'C' => print 's' or 'l' ('w' or 'd' in Intel mode) depending on operand
98b528ac 2308 size prefix
ed7841b3 2309 'D' => print 'w' if no register operands or 'w', 'l' or 'q', if
98b528ac 2310 suffix_always is true
252b5132 2311 'E' => print 'e' if 32-bit form of jcxz
3ffd33cf 2312 'F' => print 'w' or 'l' depending on address size prefix (loop insns)
52fd6d94 2313 'G' => print 'w' or 'l' depending on operand size prefix (i/o insns)
5dd0794d 2314 'H' => print ",pt" or ",pn" branch hint
9306ca4a 2315 'I' => honor following macro letter even in Intel mode (implemented only
98b528ac 2316 for some of the macro letters)
9306ca4a 2317 'J' => print 'l'
42903f7f 2318 'K' => print 'd' or 'q' if rex prefix is present.
252b5132 2319 'L' => print 'l' if suffix_always is true
9d141669 2320 'M' => print 'r' if intel_mnemonic is false.
252b5132 2321 'N' => print 'n' if instruction has no wait "prefix"
a35ca55a 2322 'O' => print 'd' or 'o' (or 'q' in Intel mode)
52b15da3 2323 'P' => print 'w', 'l' or 'q' if instruction has an operand size prefix,
98b528ac
L
2324 or suffix_always is true. print 'q' if rex prefix is present.
2325 'Q' => print 'w', 'l' or 'q' for memory operand or suffix_always
2326 is true
a35ca55a 2327 'R' => print 'w', 'l' or 'q' ('d' for 'l' and 'e' in Intel mode)
52b15da3 2328 'S' => print 'w', 'l' or 'q' if suffix_always is true
a72d2af2
L
2329 'T' => print 'q' in 64bit mode if instruction has no operand size
2330 prefix and behave as 'P' otherwise
2331 'U' => print 'q' in 64bit mode if instruction has no operand size
2332 prefix and behave as 'Q' otherwise
2333 'V' => print 'q' in 64bit mode if instruction has no operand size
2334 prefix and behave as 'S' otherwise
a35ca55a 2335 'W' => print 'b', 'w' or 'l' ('d' in Intel mode)
9306ca4a 2336 'X' => print 's', 'd' depending on data16 prefix (for XMM)
9646c87b 2337 'Y' unused.
6dd5059a 2338 'Z' => print 'q' in 64bit mode and behave as 'L' otherwise
9d141669 2339 '!' => change condition from true to false or from false to true.
98b528ac 2340 '%' => add 1 upper case letter to the macro.
a72d2af2
L
2341 '^' => print 'w' or 'l' depending on operand size prefix or
2342 suffix_always is true (lcall/ljmp).
5db04b09
L
2343 '@' => print 'q' for Intel64 ISA, 'w' or 'q' for AMD64 ISA depending
2344 on operand size prefix.
07f5af7d
L
2345 '&' => print 'q' in 64bit mode for Intel64 ISA or if instruction
2346 has no operand size prefix for AMD64 ISA, behave as 'P'
2347 otherwise
98b528ac
L
2348
2349 2 upper case letter macros:
04d824a4
JB
2350 "XY" => print 'x' or 'y' if suffix_always is true or no register
2351 operands and no broadcast.
2352 "XZ" => print 'x', 'y', or 'z' if suffix_always is true or no
2353 register operands and no broadcast.
4b06377f
L
2354 "XW" => print 's', 'd' depending on the VEX.W bit (for FMA)
2355 "LQ" => print 'l' ('d' in Intel mode) or 'q' for memory operand
98b528ac 2356 or suffix_always is true
4b06377f
L
2357 "LB" => print "abs" in 64bit mode and behave as 'B' otherwise
2358 "LS" => print "abs" in 64bit mode and behave as 'S' otherwise
2359 "LV" => print "abs" for 64bit operand and behave as 'S' otherwise
6c30d220 2360 "LW" => print 'd', 'q' depending on the VEX.W bit
4b4c407a
L
2361 "LP" => print 'w' or 'l' ('d' in Intel mode) if instruction has
2362 an operand size prefix, or suffix_always is true. print
2363 'q' if rex prefix is present.
52b15da3 2364
6439fc28
AM
2365 Many of the above letters print nothing in Intel mode. See "putop"
2366 for the details.
52b15da3 2367
6439fc28 2368 Braces '{' and '}', and vertical bars '|', indicate alternative
7c52e0e8 2369 mnemonic strings for AT&T and Intel. */
252b5132 2370
6439fc28 2371static const struct dis386 dis386[] = {
252b5132 2372 /* 00 */
bf890a93
IT
2373 { "addB", { Ebh1, Gb }, 0 },
2374 { "addS", { Evh1, Gv }, 0 },
2375 { "addB", { Gb, EbS }, 0 },
2376 { "addS", { Gv, EvS }, 0 },
2377 { "addB", { AL, Ib }, 0 },
2378 { "addS", { eAX, Iv }, 0 },
4e7d34a6
L
2379 { X86_64_TABLE (X86_64_06) },
2380 { X86_64_TABLE (X86_64_07) },
252b5132 2381 /* 08 */
bf890a93
IT
2382 { "orB", { Ebh1, Gb }, 0 },
2383 { "orS", { Evh1, Gv }, 0 },
2384 { "orB", { Gb, EbS }, 0 },
2385 { "orS", { Gv, EvS }, 0 },
2386 { "orB", { AL, Ib }, 0 },
2387 { "orS", { eAX, Iv }, 0 },
4e7d34a6 2388 { X86_64_TABLE (X86_64_0D) },
592d1631 2389 { Bad_Opcode }, /* 0x0f extended opcode escape */
252b5132 2390 /* 10 */
bf890a93
IT
2391 { "adcB", { Ebh1, Gb }, 0 },
2392 { "adcS", { Evh1, Gv }, 0 },
2393 { "adcB", { Gb, EbS }, 0 },
2394 { "adcS", { Gv, EvS }, 0 },
2395 { "adcB", { AL, Ib }, 0 },
2396 { "adcS", { eAX, Iv }, 0 },
4e7d34a6
L
2397 { X86_64_TABLE (X86_64_16) },
2398 { X86_64_TABLE (X86_64_17) },
252b5132 2399 /* 18 */
bf890a93
IT
2400 { "sbbB", { Ebh1, Gb }, 0 },
2401 { "sbbS", { Evh1, Gv }, 0 },
2402 { "sbbB", { Gb, EbS }, 0 },
2403 { "sbbS", { Gv, EvS }, 0 },
2404 { "sbbB", { AL, Ib }, 0 },
2405 { "sbbS", { eAX, Iv }, 0 },
4e7d34a6
L
2406 { X86_64_TABLE (X86_64_1E) },
2407 { X86_64_TABLE (X86_64_1F) },
252b5132 2408 /* 20 */
bf890a93
IT
2409 { "andB", { Ebh1, Gb }, 0 },
2410 { "andS", { Evh1, Gv }, 0 },
2411 { "andB", { Gb, EbS }, 0 },
2412 { "andS", { Gv, EvS }, 0 },
2413 { "andB", { AL, Ib }, 0 },
2414 { "andS", { eAX, Iv }, 0 },
592d1631 2415 { Bad_Opcode }, /* SEG ES prefix */
4e7d34a6 2416 { X86_64_TABLE (X86_64_27) },
252b5132 2417 /* 28 */
bf890a93
IT
2418 { "subB", { Ebh1, Gb }, 0 },
2419 { "subS", { Evh1, Gv }, 0 },
2420 { "subB", { Gb, EbS }, 0 },
2421 { "subS", { Gv, EvS }, 0 },
2422 { "subB", { AL, Ib }, 0 },
2423 { "subS", { eAX, Iv }, 0 },
592d1631 2424 { Bad_Opcode }, /* SEG CS prefix */
4e7d34a6 2425 { X86_64_TABLE (X86_64_2F) },
252b5132 2426 /* 30 */
bf890a93
IT
2427 { "xorB", { Ebh1, Gb }, 0 },
2428 { "xorS", { Evh1, Gv }, 0 },
2429 { "xorB", { Gb, EbS }, 0 },
2430 { "xorS", { Gv, EvS }, 0 },
2431 { "xorB", { AL, Ib }, 0 },
2432 { "xorS", { eAX, Iv }, 0 },
592d1631 2433 { Bad_Opcode }, /* SEG SS prefix */
4e7d34a6 2434 { X86_64_TABLE (X86_64_37) },
252b5132 2435 /* 38 */
bf890a93
IT
2436 { "cmpB", { Eb, Gb }, 0 },
2437 { "cmpS", { Ev, Gv }, 0 },
2438 { "cmpB", { Gb, EbS }, 0 },
2439 { "cmpS", { Gv, EvS }, 0 },
2440 { "cmpB", { AL, Ib }, 0 },
2441 { "cmpS", { eAX, Iv }, 0 },
592d1631 2442 { Bad_Opcode }, /* SEG DS prefix */
4e7d34a6 2443 { X86_64_TABLE (X86_64_3F) },
252b5132 2444 /* 40 */
bf890a93
IT
2445 { "inc{S|}", { RMeAX }, 0 },
2446 { "inc{S|}", { RMeCX }, 0 },
2447 { "inc{S|}", { RMeDX }, 0 },
2448 { "inc{S|}", { RMeBX }, 0 },
2449 { "inc{S|}", { RMeSP }, 0 },
2450 { "inc{S|}", { RMeBP }, 0 },
2451 { "inc{S|}", { RMeSI }, 0 },
2452 { "inc{S|}", { RMeDI }, 0 },
252b5132 2453 /* 48 */
bf890a93
IT
2454 { "dec{S|}", { RMeAX }, 0 },
2455 { "dec{S|}", { RMeCX }, 0 },
2456 { "dec{S|}", { RMeDX }, 0 },
2457 { "dec{S|}", { RMeBX }, 0 },
2458 { "dec{S|}", { RMeSP }, 0 },
2459 { "dec{S|}", { RMeBP }, 0 },
2460 { "dec{S|}", { RMeSI }, 0 },
2461 { "dec{S|}", { RMeDI }, 0 },
252b5132 2462 /* 50 */
bf890a93
IT
2463 { "pushV", { RMrAX }, 0 },
2464 { "pushV", { RMrCX }, 0 },
2465 { "pushV", { RMrDX }, 0 },
2466 { "pushV", { RMrBX }, 0 },
2467 { "pushV", { RMrSP }, 0 },
2468 { "pushV", { RMrBP }, 0 },
2469 { "pushV", { RMrSI }, 0 },
2470 { "pushV", { RMrDI }, 0 },
252b5132 2471 /* 58 */
bf890a93
IT
2472 { "popV", { RMrAX }, 0 },
2473 { "popV", { RMrCX }, 0 },
2474 { "popV", { RMrDX }, 0 },
2475 { "popV", { RMrBX }, 0 },
2476 { "popV", { RMrSP }, 0 },
2477 { "popV", { RMrBP }, 0 },
2478 { "popV", { RMrSI }, 0 },
2479 { "popV", { RMrDI }, 0 },
252b5132 2480 /* 60 */
4e7d34a6
L
2481 { X86_64_TABLE (X86_64_60) },
2482 { X86_64_TABLE (X86_64_61) },
2483 { X86_64_TABLE (X86_64_62) },
2484 { X86_64_TABLE (X86_64_63) },
592d1631
L
2485 { Bad_Opcode }, /* seg fs */
2486 { Bad_Opcode }, /* seg gs */
2487 { Bad_Opcode }, /* op size prefix */
2488 { Bad_Opcode }, /* adr size prefix */
252b5132 2489 /* 68 */
bf890a93
IT
2490 { "pushT", { sIv }, 0 },
2491 { "imulS", { Gv, Ev, Iv }, 0 },
2492 { "pushT", { sIbT }, 0 },
2493 { "imulS", { Gv, Ev, sIb }, 0 },
2494 { "ins{b|}", { Ybr, indirDX }, 0 },
4e7d34a6 2495 { X86_64_TABLE (X86_64_6D) },
bf890a93 2496 { "outs{b|}", { indirDXr, Xb }, 0 },
4e7d34a6 2497 { X86_64_TABLE (X86_64_6F) },
252b5132 2498 /* 70 */
bf890a93
IT
2499 { "joH", { Jb, BND, cond_jump_flag }, 0 },
2500 { "jnoH", { Jb, BND, cond_jump_flag }, 0 },
2501 { "jbH", { Jb, BND, cond_jump_flag }, 0 },
2502 { "jaeH", { Jb, BND, cond_jump_flag }, 0 },
2503 { "jeH", { Jb, BND, cond_jump_flag }, 0 },
2504 { "jneH", { Jb, BND, cond_jump_flag }, 0 },
2505 { "jbeH", { Jb, BND, cond_jump_flag }, 0 },
2506 { "jaH", { Jb, BND, cond_jump_flag }, 0 },
252b5132 2507 /* 78 */
bf890a93
IT
2508 { "jsH", { Jb, BND, cond_jump_flag }, 0 },
2509 { "jnsH", { Jb, BND, cond_jump_flag }, 0 },
2510 { "jpH", { Jb, BND, cond_jump_flag }, 0 },
2511 { "jnpH", { Jb, BND, cond_jump_flag }, 0 },
2512 { "jlH", { Jb, BND, cond_jump_flag }, 0 },
2513 { "jgeH", { Jb, BND, cond_jump_flag }, 0 },
2514 { "jleH", { Jb, BND, cond_jump_flag }, 0 },
2515 { "jgH", { Jb, BND, cond_jump_flag }, 0 },
252b5132 2516 /* 80 */
1ceb70f8
L
2517 { REG_TABLE (REG_80) },
2518 { REG_TABLE (REG_81) },
d039fef3 2519 { X86_64_TABLE (X86_64_82) },
7148c369 2520 { REG_TABLE (REG_83) },
bf890a93
IT
2521 { "testB", { Eb, Gb }, 0 },
2522 { "testS", { Ev, Gv }, 0 },
2523 { "xchgB", { Ebh2, Gb }, 0 },
2524 { "xchgS", { Evh2, Gv }, 0 },
252b5132 2525 /* 88 */
bf890a93
IT
2526 { "movB", { Ebh3, Gb }, 0 },
2527 { "movS", { Evh3, Gv }, 0 },
2528 { "movB", { Gb, EbS }, 0 },
2529 { "movS", { Gv, EvS }, 0 },
2530 { "movD", { Sv, Sw }, 0 },
1ceb70f8 2531 { MOD_TABLE (MOD_8D) },
bf890a93 2532 { "movD", { Sw, Sv }, 0 },
1ceb70f8 2533 { REG_TABLE (REG_8F) },
252b5132 2534 /* 90 */
1ceb70f8 2535 { PREFIX_TABLE (PREFIX_90) },
bf890a93
IT
2536 { "xchgS", { RMeCX, eAX }, 0 },
2537 { "xchgS", { RMeDX, eAX }, 0 },
2538 { "xchgS", { RMeBX, eAX }, 0 },
2539 { "xchgS", { RMeSP, eAX }, 0 },
2540 { "xchgS", { RMeBP, eAX }, 0 },
2541 { "xchgS", { RMeSI, eAX }, 0 },
2542 { "xchgS", { RMeDI, eAX }, 0 },
252b5132 2543 /* 98 */
bf890a93
IT
2544 { "cW{t|}R", { XX }, 0 },
2545 { "cR{t|}O", { XX }, 0 },
4e7d34a6 2546 { X86_64_TABLE (X86_64_9A) },
592d1631 2547 { Bad_Opcode }, /* fwait */
bf890a93
IT
2548 { "pushfT", { XX }, 0 },
2549 { "popfT", { XX }, 0 },
2550 { "sahf", { XX }, 0 },
2551 { "lahf", { XX }, 0 },
252b5132 2552 /* a0 */
bf890a93
IT
2553 { "mov%LB", { AL, Ob }, 0 },
2554 { "mov%LS", { eAX, Ov }, 0 },
2555 { "mov%LB", { Ob, AL }, 0 },
2556 { "mov%LS", { Ov, eAX }, 0 },
2557 { "movs{b|}", { Ybr, Xb }, 0 },
2558 { "movs{R|}", { Yvr, Xv }, 0 },
2559 { "cmps{b|}", { Xb, Yb }, 0 },
2560 { "cmps{R|}", { Xv, Yv }, 0 },
252b5132 2561 /* a8 */
bf890a93
IT
2562 { "testB", { AL, Ib }, 0 },
2563 { "testS", { eAX, Iv }, 0 },
2564 { "stosB", { Ybr, AL }, 0 },
2565 { "stosS", { Yvr, eAX }, 0 },
2566 { "lodsB", { ALr, Xb }, 0 },
2567 { "lodsS", { eAXr, Xv }, 0 },
2568 { "scasB", { AL, Yb }, 0 },
2569 { "scasS", { eAX, Yv }, 0 },
252b5132 2570 /* b0 */
bf890a93
IT
2571 { "movB", { RMAL, Ib }, 0 },
2572 { "movB", { RMCL, Ib }, 0 },
2573 { "movB", { RMDL, Ib }, 0 },
2574 { "movB", { RMBL, Ib }, 0 },
2575 { "movB", { RMAH, Ib }, 0 },
2576 { "movB", { RMCH, Ib }, 0 },
2577 { "movB", { RMDH, Ib }, 0 },
2578 { "movB", { RMBH, Ib }, 0 },
252b5132 2579 /* b8 */
bf890a93
IT
2580 { "mov%LV", { RMeAX, Iv64 }, 0 },
2581 { "mov%LV", { RMeCX, Iv64 }, 0 },
2582 { "mov%LV", { RMeDX, Iv64 }, 0 },
2583 { "mov%LV", { RMeBX, Iv64 }, 0 },
2584 { "mov%LV", { RMeSP, Iv64 }, 0 },
2585 { "mov%LV", { RMeBP, Iv64 }, 0 },
2586 { "mov%LV", { RMeSI, Iv64 }, 0 },
2587 { "mov%LV", { RMeDI, Iv64 }, 0 },
252b5132 2588 /* c0 */
1ceb70f8
L
2589 { REG_TABLE (REG_C0) },
2590 { REG_TABLE (REG_C1) },
aeab2b26
JB
2591 { X86_64_TABLE (X86_64_C2) },
2592 { X86_64_TABLE (X86_64_C3) },
4e7d34a6
L
2593 { X86_64_TABLE (X86_64_C4) },
2594 { X86_64_TABLE (X86_64_C5) },
1ceb70f8
L
2595 { REG_TABLE (REG_C6) },
2596 { REG_TABLE (REG_C7) },
252b5132 2597 /* c8 */
bf890a93
IT
2598 { "enterT", { Iw, Ib }, 0 },
2599 { "leaveT", { XX }, 0 },
2600 { "Jret{|f}P", { Iw }, 0 },
2601 { "Jret{|f}P", { XX }, 0 },
2602 { "int3", { XX }, 0 },
2603 { "int", { Ib }, 0 },
4e7d34a6 2604 { X86_64_TABLE (X86_64_CE) },
bf890a93 2605 { "iret%LP", { XX }, 0 },
252b5132 2606 /* d0 */
1ceb70f8
L
2607 { REG_TABLE (REG_D0) },
2608 { REG_TABLE (REG_D1) },
2609 { REG_TABLE (REG_D2) },
2610 { REG_TABLE (REG_D3) },
4e7d34a6
L
2611 { X86_64_TABLE (X86_64_D4) },
2612 { X86_64_TABLE (X86_64_D5) },
592d1631 2613 { Bad_Opcode },
bf890a93 2614 { "xlat", { DSBX }, 0 },
252b5132
RH
2615 /* d8 */
2616 { FLOAT },
2617 { FLOAT },
2618 { FLOAT },
2619 { FLOAT },
2620 { FLOAT },
2621 { FLOAT },
2622 { FLOAT },
2623 { FLOAT },
2624 /* e0 */
bf890a93
IT
2625 { "loopneFH", { Jb, XX, loop_jcxz_flag }, 0 },
2626 { "loopeFH", { Jb, XX, loop_jcxz_flag }, 0 },
2627 { "loopFH", { Jb, XX, loop_jcxz_flag }, 0 },
2628 { "jEcxzH", { Jb, XX, loop_jcxz_flag }, 0 },
2629 { "inB", { AL, Ib }, 0 },
2630 { "inG", { zAX, Ib }, 0 },
2631 { "outB", { Ib, AL }, 0 },
2632 { "outG", { Ib, zAX }, 0 },
252b5132 2633 /* e8 */
a72d2af2
L
2634 { X86_64_TABLE (X86_64_E8) },
2635 { X86_64_TABLE (X86_64_E9) },
4e7d34a6 2636 { X86_64_TABLE (X86_64_EA) },
bf890a93
IT
2637 { "jmp", { Jb, BND }, 0 },
2638 { "inB", { AL, indirDX }, 0 },
2639 { "inG", { zAX, indirDX }, 0 },
2640 { "outB", { indirDX, AL }, 0 },
2641 { "outG", { indirDX, zAX }, 0 },
252b5132 2642 /* f0 */
592d1631 2643 { Bad_Opcode }, /* lock prefix */
bf890a93 2644 { "icebp", { XX }, 0 },
592d1631
L
2645 { Bad_Opcode }, /* repne */
2646 { Bad_Opcode }, /* repz */
bf890a93
IT
2647 { "hlt", { XX }, 0 },
2648 { "cmc", { XX }, 0 },
1ceb70f8
L
2649 { REG_TABLE (REG_F6) },
2650 { REG_TABLE (REG_F7) },
252b5132 2651 /* f8 */
bf890a93
IT
2652 { "clc", { XX }, 0 },
2653 { "stc", { XX }, 0 },
2654 { "cli", { XX }, 0 },
2655 { "sti", { XX }, 0 },
2656 { "cld", { XX }, 0 },
2657 { "std", { XX }, 0 },
1ceb70f8
L
2658 { REG_TABLE (REG_FE) },
2659 { REG_TABLE (REG_FF) },
252b5132
RH
2660};
2661
6439fc28 2662static const struct dis386 dis386_twobyte[] = {
252b5132 2663 /* 00 */
1ceb70f8
L
2664 { REG_TABLE (REG_0F00 ) },
2665 { REG_TABLE (REG_0F01 ) },
bf890a93
IT
2666 { "larS", { Gv, Ew }, 0 },
2667 { "lslS", { Gv, Ew }, 0 },
592d1631 2668 { Bad_Opcode },
bf890a93
IT
2669 { "syscall", { XX }, 0 },
2670 { "clts", { XX }, 0 },
2671 { "sysret%LP", { XX }, 0 },
252b5132 2672 /* 08 */
bf890a93 2673 { "invd", { XX }, 0 },
3233d7d0 2674 { PREFIX_TABLE (PREFIX_0F09) },
592d1631 2675 { Bad_Opcode },
bf890a93 2676 { "ud2", { XX }, 0 },
592d1631 2677 { Bad_Opcode },
b5b1fc4f 2678 { REG_TABLE (REG_0F0D) },
bf890a93
IT
2679 { "femms", { XX }, 0 },
2680 { "", { MX, EM, OPSUF }, 0 }, /* See OP_3DNowSuffix. */
252b5132 2681 /* 10 */
1ceb70f8
L
2682 { PREFIX_TABLE (PREFIX_0F10) },
2683 { PREFIX_TABLE (PREFIX_0F11) },
2684 { PREFIX_TABLE (PREFIX_0F12) },
2685 { MOD_TABLE (MOD_0F13) },
507bd325
L
2686 { "unpcklpX", { XM, EXx }, PREFIX_OPCODE },
2687 { "unpckhpX", { XM, EXx }, PREFIX_OPCODE },
1ceb70f8
L
2688 { PREFIX_TABLE (PREFIX_0F16) },
2689 { MOD_TABLE (MOD_0F17) },
252b5132 2690 /* 18 */
1ceb70f8 2691 { REG_TABLE (REG_0F18) },
bf890a93 2692 { "nopQ", { Ev }, 0 },
7e8b059b
L
2693 { PREFIX_TABLE (PREFIX_0F1A) },
2694 { PREFIX_TABLE (PREFIX_0F1B) },
c48935d7 2695 { PREFIX_TABLE (PREFIX_0F1C) },
bf890a93 2696 { "nopQ", { Ev }, 0 },
603555e5 2697 { PREFIX_TABLE (PREFIX_0F1E) },
bf890a93 2698 { "nopQ", { Ev }, 0 },
252b5132 2699 /* 20 */
bf890a93
IT
2700 { "movZ", { Rm, Cm }, 0 },
2701 { "movZ", { Rm, Dm }, 0 },
2702 { "movZ", { Cm, Rm }, 0 },
2703 { "movZ", { Dm, Rm }, 0 },
1ceb70f8 2704 { MOD_TABLE (MOD_0F24) },
592d1631 2705 { Bad_Opcode },
1ceb70f8 2706 { MOD_TABLE (MOD_0F26) },
592d1631 2707 { Bad_Opcode },
252b5132 2708 /* 28 */
507bd325
L
2709 { "movapX", { XM, EXx }, PREFIX_OPCODE },
2710 { "movapX", { EXxS, XM }, PREFIX_OPCODE },
1ceb70f8
L
2711 { PREFIX_TABLE (PREFIX_0F2A) },
2712 { PREFIX_TABLE (PREFIX_0F2B) },
2713 { PREFIX_TABLE (PREFIX_0F2C) },
2714 { PREFIX_TABLE (PREFIX_0F2D) },
2715 { PREFIX_TABLE (PREFIX_0F2E) },
2716 { PREFIX_TABLE (PREFIX_0F2F) },
252b5132 2717 /* 30 */
bf890a93
IT
2718 { "wrmsr", { XX }, 0 },
2719 { "rdtsc", { XX }, 0 },
2720 { "rdmsr", { XX }, 0 },
2721 { "rdpmc", { XX }, 0 },
d835a58b
JB
2722 { "sysenter", { SEP }, 0 },
2723 { "sysexit", { SEP }, 0 },
592d1631 2724 { Bad_Opcode },
bf890a93 2725 { "getsec", { XX }, 0 },
252b5132 2726 /* 38 */
507bd325 2727 { THREE_BYTE_TABLE_PREFIX (THREE_BYTE_0F38, PREFIX_OPCODE) },
592d1631 2728 { Bad_Opcode },
507bd325 2729 { THREE_BYTE_TABLE_PREFIX (THREE_BYTE_0F3A, PREFIX_OPCODE) },
592d1631
L
2730 { Bad_Opcode },
2731 { Bad_Opcode },
2732 { Bad_Opcode },
2733 { Bad_Opcode },
2734 { Bad_Opcode },
252b5132 2735 /* 40 */
bf890a93
IT
2736 { "cmovoS", { Gv, Ev }, 0 },
2737 { "cmovnoS", { Gv, Ev }, 0 },
2738 { "cmovbS", { Gv, Ev }, 0 },
2739 { "cmovaeS", { Gv, Ev }, 0 },
2740 { "cmoveS", { Gv, Ev }, 0 },
2741 { "cmovneS", { Gv, Ev }, 0 },
2742 { "cmovbeS", { Gv, Ev }, 0 },
2743 { "cmovaS", { Gv, Ev }, 0 },
252b5132 2744 /* 48 */
bf890a93
IT
2745 { "cmovsS", { Gv, Ev }, 0 },
2746 { "cmovnsS", { Gv, Ev }, 0 },
2747 { "cmovpS", { Gv, Ev }, 0 },
2748 { "cmovnpS", { Gv, Ev }, 0 },
2749 { "cmovlS", { Gv, Ev }, 0 },
2750 { "cmovgeS", { Gv, Ev }, 0 },
2751 { "cmovleS", { Gv, Ev }, 0 },
2752 { "cmovgS", { Gv, Ev }, 0 },
252b5132 2753 /* 50 */
75c135a8 2754 { MOD_TABLE (MOD_0F51) },
1ceb70f8
L
2755 { PREFIX_TABLE (PREFIX_0F51) },
2756 { PREFIX_TABLE (PREFIX_0F52) },
2757 { PREFIX_TABLE (PREFIX_0F53) },
507bd325
L
2758 { "andpX", { XM, EXx }, PREFIX_OPCODE },
2759 { "andnpX", { XM, EXx }, PREFIX_OPCODE },
2760 { "orpX", { XM, EXx }, PREFIX_OPCODE },
2761 { "xorpX", { XM, EXx }, PREFIX_OPCODE },
252b5132 2762 /* 58 */
1ceb70f8
L
2763 { PREFIX_TABLE (PREFIX_0F58) },
2764 { PREFIX_TABLE (PREFIX_0F59) },
2765 { PREFIX_TABLE (PREFIX_0F5A) },
2766 { PREFIX_TABLE (PREFIX_0F5B) },
2767 { PREFIX_TABLE (PREFIX_0F5C) },
2768 { PREFIX_TABLE (PREFIX_0F5D) },
2769 { PREFIX_TABLE (PREFIX_0F5E) },
2770 { PREFIX_TABLE (PREFIX_0F5F) },
252b5132 2771 /* 60 */
1ceb70f8
L
2772 { PREFIX_TABLE (PREFIX_0F60) },
2773 { PREFIX_TABLE (PREFIX_0F61) },
2774 { PREFIX_TABLE (PREFIX_0F62) },
507bd325
L
2775 { "packsswb", { MX, EM }, PREFIX_OPCODE },
2776 { "pcmpgtb", { MX, EM }, PREFIX_OPCODE },
2777 { "pcmpgtw", { MX, EM }, PREFIX_OPCODE },
2778 { "pcmpgtd", { MX, EM }, PREFIX_OPCODE },
2779 { "packuswb", { MX, EM }, PREFIX_OPCODE },
252b5132 2780 /* 68 */
507bd325
L
2781 { "punpckhbw", { MX, EM }, PREFIX_OPCODE },
2782 { "punpckhwd", { MX, EM }, PREFIX_OPCODE },
2783 { "punpckhdq", { MX, EM }, PREFIX_OPCODE },
2784 { "packssdw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8
L
2785 { PREFIX_TABLE (PREFIX_0F6C) },
2786 { PREFIX_TABLE (PREFIX_0F6D) },
507bd325 2787 { "movK", { MX, Edq }, PREFIX_OPCODE },
1ceb70f8 2788 { PREFIX_TABLE (PREFIX_0F6F) },
252b5132 2789 /* 70 */
1ceb70f8
L
2790 { PREFIX_TABLE (PREFIX_0F70) },
2791 { REG_TABLE (REG_0F71) },
2792 { REG_TABLE (REG_0F72) },
2793 { REG_TABLE (REG_0F73) },
507bd325
L
2794 { "pcmpeqb", { MX, EM }, PREFIX_OPCODE },
2795 { "pcmpeqw", { MX, EM }, PREFIX_OPCODE },
2796 { "pcmpeqd", { MX, EM }, PREFIX_OPCODE },
2797 { "emms", { XX }, PREFIX_OPCODE },
252b5132 2798 /* 78 */
1ceb70f8
L
2799 { PREFIX_TABLE (PREFIX_0F78) },
2800 { PREFIX_TABLE (PREFIX_0F79) },
1f334aeb 2801 { Bad_Opcode },
592d1631 2802 { Bad_Opcode },
1ceb70f8
L
2803 { PREFIX_TABLE (PREFIX_0F7C) },
2804 { PREFIX_TABLE (PREFIX_0F7D) },
2805 { PREFIX_TABLE (PREFIX_0F7E) },
2806 { PREFIX_TABLE (PREFIX_0F7F) },
252b5132 2807 /* 80 */
bf890a93
IT
2808 { "joH", { Jv, BND, cond_jump_flag }, 0 },
2809 { "jnoH", { Jv, BND, cond_jump_flag }, 0 },
2810 { "jbH", { Jv, BND, cond_jump_flag }, 0 },
2811 { "jaeH", { Jv, BND, cond_jump_flag }, 0 },
2812 { "jeH", { Jv, BND, cond_jump_flag }, 0 },
2813 { "jneH", { Jv, BND, cond_jump_flag }, 0 },
2814 { "jbeH", { Jv, BND, cond_jump_flag }, 0 },
2815 { "jaH", { Jv, BND, cond_jump_flag }, 0 },
252b5132 2816 /* 88 */
bf890a93
IT
2817 { "jsH", { Jv, BND, cond_jump_flag }, 0 },
2818 { "jnsH", { Jv, BND, cond_jump_flag }, 0 },
2819 { "jpH", { Jv, BND, cond_jump_flag }, 0 },
2820 { "jnpH", { Jv, BND, cond_jump_flag }, 0 },
2821 { "jlH", { Jv, BND, cond_jump_flag }, 0 },
2822 { "jgeH", { Jv, BND, cond_jump_flag }, 0 },
2823 { "jleH", { Jv, BND, cond_jump_flag }, 0 },
2824 { "jgH", { Jv, BND, cond_jump_flag }, 0 },
252b5132 2825 /* 90 */
bf890a93
IT
2826 { "seto", { Eb }, 0 },
2827 { "setno", { Eb }, 0 },
2828 { "setb", { Eb }, 0 },
2829 { "setae", { Eb }, 0 },
2830 { "sete", { Eb }, 0 },
2831 { "setne", { Eb }, 0 },
2832 { "setbe", { Eb }, 0 },
2833 { "seta", { Eb }, 0 },
252b5132 2834 /* 98 */
bf890a93
IT
2835 { "sets", { Eb }, 0 },
2836 { "setns", { Eb }, 0 },
2837 { "setp", { Eb }, 0 },
2838 { "setnp", { Eb }, 0 },
2839 { "setl", { Eb }, 0 },
2840 { "setge", { Eb }, 0 },
2841 { "setle", { Eb }, 0 },
2842 { "setg", { Eb }, 0 },
252b5132 2843 /* a0 */
bf890a93
IT
2844 { "pushT", { fs }, 0 },
2845 { "popT", { fs }, 0 },
2846 { "cpuid", { XX }, 0 },
2847 { "btS", { Ev, Gv }, 0 },
2848 { "shldS", { Ev, Gv, Ib }, 0 },
2849 { "shldS", { Ev, Gv, CL }, 0 },
1ceb70f8
L
2850 { REG_TABLE (REG_0FA6) },
2851 { REG_TABLE (REG_0FA7) },
252b5132 2852 /* a8 */
bf890a93
IT
2853 { "pushT", { gs }, 0 },
2854 { "popT", { gs }, 0 },
2855 { "rsm", { XX }, 0 },
2856 { "btsS", { Evh1, Gv }, 0 },
2857 { "shrdS", { Ev, Gv, Ib }, 0 },
2858 { "shrdS", { Ev, Gv, CL }, 0 },
1ceb70f8 2859 { REG_TABLE (REG_0FAE) },
bf890a93 2860 { "imulS", { Gv, Ev }, 0 },
252b5132 2861 /* b0 */
bf890a93
IT
2862 { "cmpxchgB", { Ebh1, Gb }, 0 },
2863 { "cmpxchgS", { Evh1, Gv }, 0 },
1ceb70f8 2864 { MOD_TABLE (MOD_0FB2) },
bf890a93 2865 { "btrS", { Evh1, Gv }, 0 },
1ceb70f8
L
2866 { MOD_TABLE (MOD_0FB4) },
2867 { MOD_TABLE (MOD_0FB5) },
bf890a93
IT
2868 { "movz{bR|x}", { Gv, Eb }, 0 },
2869 { "movz{wR|x}", { Gv, Ew }, 0 }, /* yes, there really is movzww ! */
252b5132 2870 /* b8 */
1ceb70f8 2871 { PREFIX_TABLE (PREFIX_0FB8) },
66f1eba0 2872 { "ud1S", { Gv, Ev }, 0 },
1ceb70f8 2873 { REG_TABLE (REG_0FBA) },
bf890a93 2874 { "btcS", { Evh1, Gv }, 0 },
f12dc422 2875 { PREFIX_TABLE (PREFIX_0FBC) },
1ceb70f8 2876 { PREFIX_TABLE (PREFIX_0FBD) },
bf890a93
IT
2877 { "movs{bR|x}", { Gv, Eb }, 0 },
2878 { "movs{wR|x}", { Gv, Ew }, 0 }, /* yes, there really is movsww ! */
252b5132 2879 /* c0 */
bf890a93
IT
2880 { "xaddB", { Ebh1, Gb }, 0 },
2881 { "xaddS", { Evh1, Gv }, 0 },
1ceb70f8 2882 { PREFIX_TABLE (PREFIX_0FC2) },
a8484f96 2883 { MOD_TABLE (MOD_0FC3) },
507bd325
L
2884 { "pinsrw", { MX, Edqw, Ib }, PREFIX_OPCODE },
2885 { "pextrw", { Gdq, MS, Ib }, PREFIX_OPCODE },
2886 { "shufpX", { XM, EXx, Ib }, PREFIX_OPCODE },
1ceb70f8 2887 { REG_TABLE (REG_0FC7) },
252b5132 2888 /* c8 */
bf890a93
IT
2889 { "bswap", { RMeAX }, 0 },
2890 { "bswap", { RMeCX }, 0 },
2891 { "bswap", { RMeDX }, 0 },
2892 { "bswap", { RMeBX }, 0 },
2893 { "bswap", { RMeSP }, 0 },
2894 { "bswap", { RMeBP }, 0 },
2895 { "bswap", { RMeSI }, 0 },
2896 { "bswap", { RMeDI }, 0 },
252b5132 2897 /* d0 */
1ceb70f8 2898 { PREFIX_TABLE (PREFIX_0FD0) },
507bd325
L
2899 { "psrlw", { MX, EM }, PREFIX_OPCODE },
2900 { "psrld", { MX, EM }, PREFIX_OPCODE },
2901 { "psrlq", { MX, EM }, PREFIX_OPCODE },
2902 { "paddq", { MX, EM }, PREFIX_OPCODE },
2903 { "pmullw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8 2904 { PREFIX_TABLE (PREFIX_0FD6) },
75c135a8 2905 { MOD_TABLE (MOD_0FD7) },
252b5132 2906 /* d8 */
507bd325
L
2907 { "psubusb", { MX, EM }, PREFIX_OPCODE },
2908 { "psubusw", { MX, EM }, PREFIX_OPCODE },
2909 { "pminub", { MX, EM }, PREFIX_OPCODE },
2910 { "pand", { MX, EM }, PREFIX_OPCODE },
2911 { "paddusb", { MX, EM }, PREFIX_OPCODE },
2912 { "paddusw", { MX, EM }, PREFIX_OPCODE },
2913 { "pmaxub", { MX, EM }, PREFIX_OPCODE },
2914 { "pandn", { MX, EM }, PREFIX_OPCODE },
252b5132 2915 /* e0 */
507bd325
L
2916 { "pavgb", { MX, EM }, PREFIX_OPCODE },
2917 { "psraw", { MX, EM }, PREFIX_OPCODE },
2918 { "psrad", { MX, EM }, PREFIX_OPCODE },
2919 { "pavgw", { MX, EM }, PREFIX_OPCODE },
2920 { "pmulhuw", { MX, EM }, PREFIX_OPCODE },
2921 { "pmulhw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8
L
2922 { PREFIX_TABLE (PREFIX_0FE6) },
2923 { PREFIX_TABLE (PREFIX_0FE7) },
252b5132 2924 /* e8 */
507bd325
L
2925 { "psubsb", { MX, EM }, PREFIX_OPCODE },
2926 { "psubsw", { MX, EM }, PREFIX_OPCODE },
2927 { "pminsw", { MX, EM }, PREFIX_OPCODE },
2928 { "por", { MX, EM }, PREFIX_OPCODE },
2929 { "paddsb", { MX, EM }, PREFIX_OPCODE },
2930 { "paddsw", { MX, EM }, PREFIX_OPCODE },
2931 { "pmaxsw", { MX, EM }, PREFIX_OPCODE },
2932 { "pxor", { MX, EM }, PREFIX_OPCODE },
252b5132 2933 /* f0 */
1ceb70f8 2934 { PREFIX_TABLE (PREFIX_0FF0) },
507bd325
L
2935 { "psllw", { MX, EM }, PREFIX_OPCODE },
2936 { "pslld", { MX, EM }, PREFIX_OPCODE },
2937 { "psllq", { MX, EM }, PREFIX_OPCODE },
2938 { "pmuludq", { MX, EM }, PREFIX_OPCODE },
2939 { "pmaddwd", { MX, EM }, PREFIX_OPCODE },
2940 { "psadbw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8 2941 { PREFIX_TABLE (PREFIX_0FF7) },
252b5132 2942 /* f8 */
507bd325
L
2943 { "psubb", { MX, EM }, PREFIX_OPCODE },
2944 { "psubw", { MX, EM }, PREFIX_OPCODE },
2945 { "psubd", { MX, EM }, PREFIX_OPCODE },
2946 { "psubq", { MX, EM }, PREFIX_OPCODE },
2947 { "paddb", { MX, EM }, PREFIX_OPCODE },
2948 { "paddw", { MX, EM }, PREFIX_OPCODE },
2949 { "paddd", { MX, EM }, PREFIX_OPCODE },
66f1eba0 2950 { "ud0S", { Gv, Ev }, 0 },
252b5132
RH
2951};
2952
2953static const unsigned char onebyte_has_modrm[256] = {
c608c12e
AM
2954 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2955 /* ------------------------------- */
2956 /* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 00 */
2957 /* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 10 */
2958 /* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 20 */
2959 /* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 30 */
2960 /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40 */
2961 /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50 */
2962 /* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, /* 60 */
2963 /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70 */
2964 /* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 80 */
2965 /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 90 */
2966 /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* a0 */
2967 /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* b0 */
2968 /* c0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* c0 */
2969 /* d0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* d0 */
2970 /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* e0 */
2971 /* f0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1 /* f0 */
2972 /* ------------------------------- */
2973 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
252b5132
RH
2974};
2975
2976static const unsigned char twobyte_has_modrm[256] = {
c608c12e
AM
2977 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2978 /* ------------------------------- */
252b5132 2979 /* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */
b5b1fc4f 2980 /* 10 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1f */
85f10a01 2981 /* 20 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 2f */
331d2d0d 2982 /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
252b5132 2983 /* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */
4bba6815
AM
2984 /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */
2985 /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */
85f10a01 2986 /* 70 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 7f */
252b5132
RH
2987 /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
2988 /* 90 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9f */
30d1c836 2989 /* a0 */ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1, /* af */
66f1eba0 2990 /* b0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* bf */
252b5132 2991 /* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */
ca164297 2992 /* d0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
4bba6815 2993 /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
66f1eba0 2994 /* f0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 /* ff */
c608c12e
AM
2995 /* ------------------------------- */
2996 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2997};
2998
252b5132
RH
2999static char obuf[100];
3000static char *obufp;
ea397f5b 3001static char *mnemonicendp;
252b5132
RH
3002static char scratchbuf[100];
3003static unsigned char *start_codep;
3004static unsigned char *insn_codep;
3005static unsigned char *codep;
285ca992 3006static unsigned char *end_codep;
f16cd0d5
L
3007static int last_lock_prefix;
3008static int last_repz_prefix;
3009static int last_repnz_prefix;
3010static int last_data_prefix;
3011static int last_addr_prefix;
3012static int last_rex_prefix;
3013static int last_seg_prefix;
d9949a36 3014static int fwait_prefix;
285ca992
L
3015/* The active segment register prefix. */
3016static int active_seg_prefix;
f16cd0d5
L
3017#define MAX_CODE_LENGTH 15
3018/* We can up to 14 prefixes since the maximum instruction length is
3019 15bytes. */
3020static int all_prefixes[MAX_CODE_LENGTH - 1];
252b5132 3021static disassemble_info *the_info;
7967e09e
L
3022static struct
3023 {
3024 int mod;
7967e09e 3025 int reg;
484c222e 3026 int rm;
7967e09e
L
3027 }
3028modrm;
4bba6815 3029static unsigned char need_modrm;
dfc8cf43
L
3030static struct
3031 {
3032 int scale;
3033 int index;
3034 int base;
3035 }
3036sib;
c0f3af97
L
3037static struct
3038 {
3039 int register_specifier;
3040 int length;
3041 int prefix;
3042 int w;
43234a1e
L
3043 int evex;
3044 int r;
3045 int v;
3046 int mask_register_specifier;
3047 int zeroing;
3048 int ll;
3049 int b;
c0f3af97
L
3050 }
3051vex;
3052static unsigned char need_vex;
3053static unsigned char need_vex_reg;
dae39acc 3054static unsigned char vex_w_done;
252b5132 3055
ea397f5b
L
3056struct op
3057 {
3058 const char *name;
3059 unsigned int len;
3060 };
3061
4bba6815
AM
3062/* If we are accessing mod/rm/reg without need_modrm set, then the
3063 values are stale. Hitting this abort likely indicates that you
3064 need to update onebyte_has_modrm or twobyte_has_modrm. */
3065#define MODRM_CHECK if (!need_modrm) abort ()
3066
d708bcba
AM
3067static const char **names64;
3068static const char **names32;
3069static const char **names16;
3070static const char **names8;
3071static const char **names8rex;
3072static const char **names_seg;
db51cc60
L
3073static const char *index64;
3074static const char *index32;
d708bcba 3075static const char **index16;
7e8b059b 3076static const char **names_bnd;
d708bcba
AM
3077
3078static const char *intel_names64[] = {
3079 "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
3080 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
3081};
3082static const char *intel_names32[] = {
3083 "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
3084 "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"
3085};
3086static const char *intel_names16[] = {
3087 "ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
3088 "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
3089};
3090static const char *intel_names8[] = {
3091 "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh",
3092};
3093static const char *intel_names8rex[] = {
3094 "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
3095 "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"
3096};
3097static const char *intel_names_seg[] = {
3098 "es", "cs", "ss", "ds", "fs", "gs", "?", "?",
3099};
db51cc60
L
3100static const char *intel_index64 = "riz";
3101static const char *intel_index32 = "eiz";
d708bcba
AM
3102static const char *intel_index16[] = {
3103 "bx+si", "bx+di", "bp+si", "bp+di", "si", "di", "bp", "bx"
3104};
3105
3106static const char *att_names64[] = {
3107 "%rax", "%rcx", "%rdx", "%rbx", "%rsp", "%rbp", "%rsi", "%rdi",
52b15da3
JH
3108 "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
3109};
d708bcba
AM
3110static const char *att_names32[] = {
3111 "%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi",
52b15da3 3112 "%r8d", "%r9d", "%r10d", "%r11d", "%r12d", "%r13d", "%r14d", "%r15d"
252b5132 3113};
d708bcba
AM
3114static const char *att_names16[] = {
3115 "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di",
52b15da3 3116 "%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w"
252b5132 3117};
d708bcba
AM
3118static const char *att_names8[] = {
3119 "%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh",
252b5132 3120};
d708bcba
AM
3121static const char *att_names8rex[] = {
3122 "%al", "%cl", "%dl", "%bl", "%spl", "%bpl", "%sil", "%dil",
52b15da3
JH
3123 "%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b"
3124};
d708bcba
AM
3125static const char *att_names_seg[] = {
3126 "%es", "%cs", "%ss", "%ds", "%fs", "%gs", "%?", "%?",
252b5132 3127};
db51cc60
L
3128static const char *att_index64 = "%riz";
3129static const char *att_index32 = "%eiz";
d708bcba
AM
3130static const char *att_index16[] = {
3131 "%bx,%si", "%bx,%di", "%bp,%si", "%bp,%di", "%si", "%di", "%bp", "%bx"
252b5132
RH
3132};
3133
b9733481
L
3134static const char **names_mm;
3135static const char *intel_names_mm[] = {
3136 "mm0", "mm1", "mm2", "mm3",
3137 "mm4", "mm5", "mm6", "mm7"
3138};
3139static const char *att_names_mm[] = {
3140 "%mm0", "%mm1", "%mm2", "%mm3",
3141 "%mm4", "%mm5", "%mm6", "%mm7"
3142};
3143
7e8b059b
L
3144static const char *intel_names_bnd[] = {
3145 "bnd0", "bnd1", "bnd2", "bnd3"
3146};
3147
3148static const char *att_names_bnd[] = {
3149 "%bnd0", "%bnd1", "%bnd2", "%bnd3"
3150};
3151
b9733481
L
3152static const char **names_xmm;
3153static const char *intel_names_xmm[] = {
3154 "xmm0", "xmm1", "xmm2", "xmm3",
3155 "xmm4", "xmm5", "xmm6", "xmm7",
3156 "xmm8", "xmm9", "xmm10", "xmm11",
43234a1e
L
3157 "xmm12", "xmm13", "xmm14", "xmm15",
3158 "xmm16", "xmm17", "xmm18", "xmm19",
3159 "xmm20", "xmm21", "xmm22", "xmm23",
3160 "xmm24", "xmm25", "xmm26", "xmm27",
3161 "xmm28", "xmm29", "xmm30", "xmm31"
b9733481
L
3162};
3163static const char *att_names_xmm[] = {
3164 "%xmm0", "%xmm1", "%xmm2", "%xmm3",
3165 "%xmm4", "%xmm5", "%xmm6", "%xmm7",
3166 "%xmm8", "%xmm9", "%xmm10", "%xmm11",
43234a1e
L
3167 "%xmm12", "%xmm13", "%xmm14", "%xmm15",
3168 "%xmm16", "%xmm17", "%xmm18", "%xmm19",
3169 "%xmm20", "%xmm21", "%xmm22", "%xmm23",
3170 "%xmm24", "%xmm25", "%xmm26", "%xmm27",
3171 "%xmm28", "%xmm29", "%xmm30", "%xmm31"
b9733481
L
3172};
3173
3174static const char **names_ymm;
3175static const char *intel_names_ymm[] = {
3176 "ymm0", "ymm1", "ymm2", "ymm3",
3177 "ymm4", "ymm5", "ymm6", "ymm7",
3178 "ymm8", "ymm9", "ymm10", "ymm11",
43234a1e
L
3179 "ymm12", "ymm13", "ymm14", "ymm15",
3180 "ymm16", "ymm17", "ymm18", "ymm19",
3181 "ymm20", "ymm21", "ymm22", "ymm23",
3182 "ymm24", "ymm25", "ymm26", "ymm27",
3183 "ymm28", "ymm29", "ymm30", "ymm31"
b9733481
L
3184};
3185static const char *att_names_ymm[] = {
3186 "%ymm0", "%ymm1", "%ymm2", "%ymm3",
3187 "%ymm4", "%ymm5", "%ymm6", "%ymm7",
3188 "%ymm8", "%ymm9", "%ymm10", "%ymm11",
43234a1e
L
3189 "%ymm12", "%ymm13", "%ymm14", "%ymm15",
3190 "%ymm16", "%ymm17", "%ymm18", "%ymm19",
3191 "%ymm20", "%ymm21", "%ymm22", "%ymm23",
3192 "%ymm24", "%ymm25", "%ymm26", "%ymm27",
3193 "%ymm28", "%ymm29", "%ymm30", "%ymm31"
3194};
3195
3196static const char **names_zmm;
3197static const char *intel_names_zmm[] = {
3198 "zmm0", "zmm1", "zmm2", "zmm3",
3199 "zmm4", "zmm5", "zmm6", "zmm7",
3200 "zmm8", "zmm9", "zmm10", "zmm11",
3201 "zmm12", "zmm13", "zmm14", "zmm15",
3202 "zmm16", "zmm17", "zmm18", "zmm19",
3203 "zmm20", "zmm21", "zmm22", "zmm23",
3204 "zmm24", "zmm25", "zmm26", "zmm27",
3205 "zmm28", "zmm29", "zmm30", "zmm31"
3206};
3207static const char *att_names_zmm[] = {
3208 "%zmm0", "%zmm1", "%zmm2", "%zmm3",
3209 "%zmm4", "%zmm5", "%zmm6", "%zmm7",
3210 "%zmm8", "%zmm9", "%zmm10", "%zmm11",
3211 "%zmm12", "%zmm13", "%zmm14", "%zmm15",
3212 "%zmm16", "%zmm17", "%zmm18", "%zmm19",
3213 "%zmm20", "%zmm21", "%zmm22", "%zmm23",
3214 "%zmm24", "%zmm25", "%zmm26", "%zmm27",
3215 "%zmm28", "%zmm29", "%zmm30", "%zmm31"
3216};
3217
3218static const char **names_mask;
3219static const char *intel_names_mask[] = {
3220 "k0", "k1", "k2", "k3", "k4", "k5", "k6", "k7"
3221};
3222static const char *att_names_mask[] = {
3223 "%k0", "%k1", "%k2", "%k3", "%k4", "%k5", "%k6", "%k7"
3224};
3225
3226static const char *names_rounding[] =
3227{
3228 "{rn-sae}",
3229 "{rd-sae}",
3230 "{ru-sae}",
3231 "{rz-sae}"
b9733481
L
3232};
3233
1ceb70f8
L
3234static const struct dis386 reg_table[][8] = {
3235 /* REG_80 */
252b5132 3236 {
bf890a93
IT
3237 { "addA", { Ebh1, Ib }, 0 },
3238 { "orA", { Ebh1, Ib }, 0 },
3239 { "adcA", { Ebh1, Ib }, 0 },
3240 { "sbbA", { Ebh1, Ib }, 0 },
3241 { "andA", { Ebh1, Ib }, 0 },
3242 { "subA", { Ebh1, Ib }, 0 },
3243 { "xorA", { Ebh1, Ib }, 0 },
3244 { "cmpA", { Eb, Ib }, 0 },
252b5132 3245 },
1ceb70f8 3246 /* REG_81 */
252b5132 3247 {
bf890a93
IT
3248 { "addQ", { Evh1, Iv }, 0 },
3249 { "orQ", { Evh1, Iv }, 0 },
3250 { "adcQ", { Evh1, Iv }, 0 },
3251 { "sbbQ", { Evh1, Iv }, 0 },
3252 { "andQ", { Evh1, Iv }, 0 },
3253 { "subQ", { Evh1, Iv }, 0 },
3254 { "xorQ", { Evh1, Iv }, 0 },
3255 { "cmpQ", { Ev, Iv }, 0 },
252b5132 3256 },
7148c369 3257 /* REG_83 */
252b5132 3258 {
bf890a93
IT
3259 { "addQ", { Evh1, sIb }, 0 },
3260 { "orQ", { Evh1, sIb }, 0 },
3261 { "adcQ", { Evh1, sIb }, 0 },
3262 { "sbbQ", { Evh1, sIb }, 0 },
3263 { "andQ", { Evh1, sIb }, 0 },
3264 { "subQ", { Evh1, sIb }, 0 },
3265 { "xorQ", { Evh1, sIb }, 0 },
3266 { "cmpQ", { Ev, sIb }, 0 },
252b5132 3267 },
1ceb70f8 3268 /* REG_8F */
4e7d34a6 3269 {
bf890a93 3270 { "popU", { stackEv }, 0 },
c48244a5 3271 { XOP_8F_TABLE (XOP_09) },
592d1631
L
3272 { Bad_Opcode },
3273 { Bad_Opcode },
3274 { Bad_Opcode },
f88c9eb0 3275 { XOP_8F_TABLE (XOP_09) },
4e7d34a6 3276 },
1ceb70f8 3277 /* REG_C0 */
252b5132 3278 {
bf890a93
IT
3279 { "rolA", { Eb, Ib }, 0 },
3280 { "rorA", { Eb, Ib }, 0 },
3281 { "rclA", { Eb, Ib }, 0 },
3282 { "rcrA", { Eb, Ib }, 0 },
3283 { "shlA", { Eb, Ib }, 0 },
3284 { "shrA", { Eb, Ib }, 0 },
e4bdd679 3285 { "shlA", { Eb, Ib }, 0 },
bf890a93 3286 { "sarA", { Eb, Ib }, 0 },
252b5132 3287 },
1ceb70f8 3288 /* REG_C1 */
252b5132 3289 {
bf890a93
IT
3290 { "rolQ", { Ev, Ib }, 0 },
3291 { "rorQ", { Ev, Ib }, 0 },
3292 { "rclQ", { Ev, Ib }, 0 },
3293 { "rcrQ", { Ev, Ib }, 0 },
3294 { "shlQ", { Ev, Ib }, 0 },
3295 { "shrQ", { Ev, Ib }, 0 },
e4bdd679 3296 { "shlQ", { Ev, Ib }, 0 },
bf890a93 3297 { "sarQ", { Ev, Ib }, 0 },
252b5132 3298 },
1ceb70f8 3299 /* REG_C6 */
4e7d34a6 3300 {
bf890a93 3301 { "movA", { Ebh3, Ib }, 0 },
42164a71
L
3302 { Bad_Opcode },
3303 { Bad_Opcode },
3304 { Bad_Opcode },
3305 { Bad_Opcode },
3306 { Bad_Opcode },
3307 { Bad_Opcode },
3308 { MOD_TABLE (MOD_C6_REG_7) },
4e7d34a6 3309 },
1ceb70f8 3310 /* REG_C7 */
4e7d34a6 3311 {
bf890a93 3312 { "movQ", { Evh3, Iv }, 0 },
42164a71
L
3313 { Bad_Opcode },
3314 { Bad_Opcode },
3315 { Bad_Opcode },
3316 { Bad_Opcode },
3317 { Bad_Opcode },
3318 { Bad_Opcode },
3319 { MOD_TABLE (MOD_C7_REG_7) },
4e7d34a6 3320 },
1ceb70f8 3321 /* REG_D0 */
252b5132 3322 {
bf890a93
IT
3323 { "rolA", { Eb, I1 }, 0 },
3324 { "rorA", { Eb, I1 }, 0 },
3325 { "rclA", { Eb, I1 }, 0 },
3326 { "rcrA", { Eb, I1 }, 0 },
3327 { "shlA", { Eb, I1 }, 0 },
3328 { "shrA", { Eb, I1 }, 0 },
e4bdd679 3329 { "shlA", { Eb, I1 }, 0 },
bf890a93 3330 { "sarA", { Eb, I1 }, 0 },
252b5132 3331 },
1ceb70f8 3332 /* REG_D1 */
252b5132 3333 {
bf890a93
IT
3334 { "rolQ", { Ev, I1 }, 0 },
3335 { "rorQ", { Ev, I1 }, 0 },
3336 { "rclQ", { Ev, I1 }, 0 },
3337 { "rcrQ", { Ev, I1 }, 0 },
3338 { "shlQ", { Ev, I1 }, 0 },
3339 { "shrQ", { Ev, I1 }, 0 },
e4bdd679 3340 { "shlQ", { Ev, I1 }, 0 },
bf890a93 3341 { "sarQ", { Ev, I1 }, 0 },
252b5132 3342 },
1ceb70f8 3343 /* REG_D2 */
252b5132 3344 {
bf890a93
IT
3345 { "rolA", { Eb, CL }, 0 },
3346 { "rorA", { Eb, CL }, 0 },
3347 { "rclA", { Eb, CL }, 0 },
3348 { "rcrA", { Eb, CL }, 0 },
3349 { "shlA", { Eb, CL }, 0 },
3350 { "shrA", { Eb, CL }, 0 },
e4bdd679 3351 { "shlA", { Eb, CL }, 0 },
bf890a93 3352 { "sarA", { Eb, CL }, 0 },
252b5132 3353 },
1ceb70f8 3354 /* REG_D3 */
252b5132 3355 {
bf890a93
IT
3356 { "rolQ", { Ev, CL }, 0 },
3357 { "rorQ", { Ev, CL }, 0 },
3358 { "rclQ", { Ev, CL }, 0 },
3359 { "rcrQ", { Ev, CL }, 0 },
3360 { "shlQ", { Ev, CL }, 0 },
3361 { "shrQ", { Ev, CL }, 0 },
e4bdd679 3362 { "shlQ", { Ev, CL }, 0 },
bf890a93 3363 { "sarQ", { Ev, CL }, 0 },
252b5132 3364 },
1ceb70f8 3365 /* REG_F6 */
252b5132 3366 {
bf890a93 3367 { "testA", { Eb, Ib }, 0 },
7db2c588 3368 { "testA", { Eb, Ib }, 0 },
bf890a93
IT
3369 { "notA", { Ebh1 }, 0 },
3370 { "negA", { Ebh1 }, 0 },
3371 { "mulA", { Eb }, 0 }, /* Don't print the implicit %al register, */
3372 { "imulA", { Eb }, 0 }, /* to distinguish these opcodes from other */
3373 { "divA", { Eb }, 0 }, /* mul/imul opcodes. Do the same for div */
3374 { "idivA", { Eb }, 0 }, /* and idiv for consistency. */
252b5132 3375 },
1ceb70f8 3376 /* REG_F7 */
252b5132 3377 {
bf890a93 3378 { "testQ", { Ev, Iv }, 0 },
7db2c588 3379 { "testQ", { Ev, Iv }, 0 },
bf890a93
IT
3380 { "notQ", { Evh1 }, 0 },
3381 { "negQ", { Evh1 }, 0 },
3382 { "mulQ", { Ev }, 0 }, /* Don't print the implicit register. */
3383 { "imulQ", { Ev }, 0 },
3384 { "divQ", { Ev }, 0 },
3385 { "idivQ", { Ev }, 0 },
252b5132 3386 },
1ceb70f8 3387 /* REG_FE */
252b5132 3388 {
bf890a93
IT
3389 { "incA", { Ebh1 }, 0 },
3390 { "decA", { Ebh1 }, 0 },
252b5132 3391 },
1ceb70f8 3392 /* REG_FF */
252b5132 3393 {
bf890a93
IT
3394 { "incQ", { Evh1 }, 0 },
3395 { "decQ", { Evh1 }, 0 },
9fef80d6 3396 { "call{&|}", { NOTRACK, indirEv, BND }, 0 },
4a357820 3397 { MOD_TABLE (MOD_FF_REG_3) },
9fef80d6 3398 { "jmp{&|}", { NOTRACK, indirEv, BND }, 0 },
4a357820 3399 { MOD_TABLE (MOD_FF_REG_5) },
bf890a93 3400 { "pushU", { stackEv }, 0 },
592d1631 3401 { Bad_Opcode },
252b5132 3402 },
1ceb70f8 3403 /* REG_0F00 */
252b5132 3404 {
bf890a93
IT
3405 { "sldtD", { Sv }, 0 },
3406 { "strD", { Sv }, 0 },
3407 { "lldt", { Ew }, 0 },
3408 { "ltr", { Ew }, 0 },
3409 { "verr", { Ew }, 0 },
3410 { "verw", { Ew }, 0 },
592d1631
L
3411 { Bad_Opcode },
3412 { Bad_Opcode },
252b5132 3413 },
1ceb70f8 3414 /* REG_0F01 */
252b5132 3415 {
1ceb70f8
L
3416 { MOD_TABLE (MOD_0F01_REG_0) },
3417 { MOD_TABLE (MOD_0F01_REG_1) },
3418 { MOD_TABLE (MOD_0F01_REG_2) },
3419 { MOD_TABLE (MOD_0F01_REG_3) },
bf890a93 3420 { "smswD", { Sv }, 0 },
8eab4136 3421 { MOD_TABLE (MOD_0F01_REG_5) },
bf890a93 3422 { "lmsw", { Ew }, 0 },
1ceb70f8 3423 { MOD_TABLE (MOD_0F01_REG_7) },
252b5132 3424 },
b5b1fc4f 3425 /* REG_0F0D */
252b5132 3426 {
bf890a93
IT
3427 { "prefetch", { Mb }, 0 },
3428 { "prefetchw", { Mb }, 0 },
3429 { "prefetchwt1", { Mb }, 0 },
3430 { "prefetch", { Mb }, 0 },
3431 { "prefetch", { Mb }, 0 },
3432 { "prefetch", { Mb }, 0 },
3433 { "prefetch", { Mb }, 0 },
3434 { "prefetch", { Mb }, 0 },
252b5132 3435 },
1ceb70f8 3436 /* REG_0F18 */
252b5132 3437 {
1ceb70f8
L
3438 { MOD_TABLE (MOD_0F18_REG_0) },
3439 { MOD_TABLE (MOD_0F18_REG_1) },
3440 { MOD_TABLE (MOD_0F18_REG_2) },
3441 { MOD_TABLE (MOD_0F18_REG_3) },
d7189fa5
RM
3442 { MOD_TABLE (MOD_0F18_REG_4) },
3443 { MOD_TABLE (MOD_0F18_REG_5) },
3444 { MOD_TABLE (MOD_0F18_REG_6) },
3445 { MOD_TABLE (MOD_0F18_REG_7) },
252b5132 3446 },
f8687e93 3447 /* REG_0F1C_P_0_MOD_0 */
c48935d7
IT
3448 {
3449 { "cldemote", { Mb }, 0 },
3450 { "nopQ", { Ev }, 0 },
3451 { "nopQ", { Ev }, 0 },
3452 { "nopQ", { Ev }, 0 },
3453 { "nopQ", { Ev }, 0 },
3454 { "nopQ", { Ev }, 0 },
3455 { "nopQ", { Ev }, 0 },
3456 { "nopQ", { Ev }, 0 },
3457 },
f8687e93 3458 /* REG_0F1E_P_1_MOD_3 */
603555e5
L
3459 {
3460 { "nopQ", { Ev }, 0 },
3461 { "rdsspK", { Rdq }, PREFIX_OPCODE },
3462 { "nopQ", { Ev }, 0 },
3463 { "nopQ", { Ev }, 0 },
3464 { "nopQ", { Ev }, 0 },
3465 { "nopQ", { Ev }, 0 },
3466 { "nopQ", { Ev }, 0 },
f8687e93 3467 { RM_TABLE (RM_0F1E_P_1_MOD_3_REG_7) },
603555e5 3468 },
1ceb70f8 3469 /* REG_0F71 */
a6bd098c 3470 {
592d1631
L
3471 { Bad_Opcode },
3472 { Bad_Opcode },
1ceb70f8 3473 { MOD_TABLE (MOD_0F71_REG_2) },
592d1631 3474 { Bad_Opcode },
1ceb70f8 3475 { MOD_TABLE (MOD_0F71_REG_4) },
592d1631 3476 { Bad_Opcode },
1ceb70f8 3477 { MOD_TABLE (MOD_0F71_REG_6) },
a6bd098c 3478 },
1ceb70f8 3479 /* REG_0F72 */
a6bd098c 3480 {
592d1631
L
3481 { Bad_Opcode },
3482 { Bad_Opcode },
1ceb70f8 3483 { MOD_TABLE (MOD_0F72_REG_2) },
592d1631 3484 { Bad_Opcode },
1ceb70f8 3485 { MOD_TABLE (MOD_0F72_REG_4) },
592d1631 3486 { Bad_Opcode },
1ceb70f8 3487 { MOD_TABLE (MOD_0F72_REG_6) },
a6bd098c 3488 },
1ceb70f8 3489 /* REG_0F73 */
252b5132 3490 {
592d1631
L
3491 { Bad_Opcode },
3492 { Bad_Opcode },
1ceb70f8
L
3493 { MOD_TABLE (MOD_0F73_REG_2) },
3494 { MOD_TABLE (MOD_0F73_REG_3) },
592d1631
L
3495 { Bad_Opcode },
3496 { Bad_Opcode },
1ceb70f8
L
3497 { MOD_TABLE (MOD_0F73_REG_6) },
3498 { MOD_TABLE (MOD_0F73_REG_7) },
252b5132 3499 },
1ceb70f8 3500 /* REG_0FA6 */
252b5132 3501 {
bf890a93
IT
3502 { "montmul", { { OP_0f07, 0 } }, 0 },
3503 { "xsha1", { { OP_0f07, 0 } }, 0 },
3504 { "xsha256", { { OP_0f07, 0 } }, 0 },
4e7d34a6 3505 },
1ceb70f8 3506 /* REG_0FA7 */
4e7d34a6 3507 {
bf890a93
IT
3508 { "xstore-rng", { { OP_0f07, 0 } }, 0 },
3509 { "xcrypt-ecb", { { OP_0f07, 0 } }, 0 },
3510 { "xcrypt-cbc", { { OP_0f07, 0 } }, 0 },
3511 { "xcrypt-ctr", { { OP_0f07, 0 } }, 0 },
3512 { "xcrypt-cfb", { { OP_0f07, 0 } }, 0 },
3513 { "xcrypt-ofb", { { OP_0f07, 0 } }, 0 },
4e7d34a6 3514 },
1ceb70f8 3515 /* REG_0FAE */
4e7d34a6 3516 {
1ceb70f8
L
3517 { MOD_TABLE (MOD_0FAE_REG_0) },
3518 { MOD_TABLE (MOD_0FAE_REG_1) },
3519 { MOD_TABLE (MOD_0FAE_REG_2) },
3520 { MOD_TABLE (MOD_0FAE_REG_3) },
475a2301 3521 { MOD_TABLE (MOD_0FAE_REG_4) },
1ceb70f8
L
3522 { MOD_TABLE (MOD_0FAE_REG_5) },
3523 { MOD_TABLE (MOD_0FAE_REG_6) },
3524 { MOD_TABLE (MOD_0FAE_REG_7) },
252b5132 3525 },
1ceb70f8 3526 /* REG_0FBA */
252b5132 3527 {
592d1631
L
3528 { Bad_Opcode },
3529 { Bad_Opcode },
3530 { Bad_Opcode },
3531 { Bad_Opcode },
bf890a93
IT
3532 { "btQ", { Ev, Ib }, 0 },
3533 { "btsQ", { Evh1, Ib }, 0 },
3534 { "btrQ", { Evh1, Ib }, 0 },
3535 { "btcQ", { Evh1, Ib }, 0 },
c608c12e 3536 },
1ceb70f8 3537 /* REG_0FC7 */
c608c12e 3538 {
592d1631 3539 { Bad_Opcode },
bf890a93 3540 { "cmpxchg8b", { { CMPXCHG8B_Fixup, q_mode } }, 0 },
592d1631 3541 { Bad_Opcode },
963f3586
IT
3542 { MOD_TABLE (MOD_0FC7_REG_3) },
3543 { MOD_TABLE (MOD_0FC7_REG_4) },
3544 { MOD_TABLE (MOD_0FC7_REG_5) },
1ceb70f8
L
3545 { MOD_TABLE (MOD_0FC7_REG_6) },
3546 { MOD_TABLE (MOD_0FC7_REG_7) },
252b5132 3547 },
592a252b 3548 /* REG_VEX_0F71 */
c0f3af97 3549 {
592d1631
L
3550 { Bad_Opcode },
3551 { Bad_Opcode },
592a252b 3552 { MOD_TABLE (MOD_VEX_0F71_REG_2) },
592d1631 3553 { Bad_Opcode },
592a252b 3554 { MOD_TABLE (MOD_VEX_0F71_REG_4) },
592d1631 3555 { Bad_Opcode },
592a252b 3556 { MOD_TABLE (MOD_VEX_0F71_REG_6) },
c0f3af97 3557 },
592a252b 3558 /* REG_VEX_0F72 */
c0f3af97 3559 {
592d1631
L
3560 { Bad_Opcode },
3561 { Bad_Opcode },
592a252b 3562 { MOD_TABLE (MOD_VEX_0F72_REG_2) },
592d1631 3563 { Bad_Opcode },
592a252b 3564 { MOD_TABLE (MOD_VEX_0F72_REG_4) },
592d1631 3565 { Bad_Opcode },
592a252b 3566 { MOD_TABLE (MOD_VEX_0F72_REG_6) },
c0f3af97 3567 },
592a252b 3568 /* REG_VEX_0F73 */
c0f3af97 3569 {
592d1631
L
3570 { Bad_Opcode },
3571 { Bad_Opcode },
592a252b
L
3572 { MOD_TABLE (MOD_VEX_0F73_REG_2) },
3573 { MOD_TABLE (MOD_VEX_0F73_REG_3) },
592d1631
L
3574 { Bad_Opcode },
3575 { Bad_Opcode },
592a252b
L
3576 { MOD_TABLE (MOD_VEX_0F73_REG_6) },
3577 { MOD_TABLE (MOD_VEX_0F73_REG_7) },
c0f3af97 3578 },
592a252b 3579 /* REG_VEX_0FAE */
c0f3af97 3580 {
592d1631
L
3581 { Bad_Opcode },
3582 { Bad_Opcode },
592a252b
L
3583 { MOD_TABLE (MOD_VEX_0FAE_REG_2) },
3584 { MOD_TABLE (MOD_VEX_0FAE_REG_3) },
c0f3af97 3585 },
f12dc422
L
3586 /* REG_VEX_0F38F3 */
3587 {
3588 { Bad_Opcode },
3589 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_1) },
3590 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_2) },
3591 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_3) },
3592 },
f88c9eb0
SP
3593 /* REG_XOP_LWPCB */
3594 {
bf890a93
IT
3595 { "llwpcb", { { OP_LWPCB_E, 0 } }, 0 },
3596 { "slwpcb", { { OP_LWPCB_E, 0 } }, 0 },
f88c9eb0
SP
3597 },
3598 /* REG_XOP_LWP */
3599 {
c1dc7af5
JB
3600 { "lwpins", { { OP_LWP_E, 0 }, Ed, Id }, 0 },
3601 { "lwpval", { { OP_LWP_E, 0 }, Ed, Id }, 0 },
f88c9eb0 3602 },
2a2a0f38
QN
3603 /* REG_XOP_TBM_01 */
3604 {
3605 { Bad_Opcode },
c1dc7af5
JB
3606 { "blcfill", { { OP_LWP_E, 0 }, Edq }, 0 },
3607 { "blsfill", { { OP_LWP_E, 0 }, Edq }, 0 },
3608 { "blcs", { { OP_LWP_E, 0 }, Edq }, 0 },
3609 { "tzmsk", { { OP_LWP_E, 0 }, Edq }, 0 },
3610 { "blcic", { { OP_LWP_E, 0 }, Edq }, 0 },
3611 { "blsic", { { OP_LWP_E, 0 }, Edq }, 0 },
3612 { "t1mskc", { { OP_LWP_E, 0 }, Edq }, 0 },
2a2a0f38
QN
3613 },
3614 /* REG_XOP_TBM_02 */
3615 {
3616 { Bad_Opcode },
c1dc7af5 3617 { "blcmsk", { { OP_LWP_E, 0 }, Edq }, 0 },
2a2a0f38
QN
3618 { Bad_Opcode },
3619 { Bad_Opcode },
3620 { Bad_Opcode },
3621 { Bad_Opcode },
c1dc7af5 3622 { "blci", { { OP_LWP_E, 0 }, Edq }, 0 },
2a2a0f38 3623 },
ad692897
L
3624
3625#include "i386-dis-evex-reg.h"
4e7d34a6
L
3626};
3627
1ceb70f8
L
3628static const struct dis386 prefix_table[][4] = {
3629 /* PREFIX_90 */
252b5132 3630 {
bf890a93
IT
3631 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } }, 0 },
3632 { "pause", { XX }, 0 },
3633 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } }, 0 },
507bd325 3634 { NULL, { { NULL, 0 } }, PREFIX_IGNORED }
0f10071e 3635 },
4e7d34a6 3636
f8687e93 3637 /* PREFIX_0F01_REG_5_MOD_0 */
603555e5
L
3638 {
3639 { Bad_Opcode },
3640 { "rstorssp", { Mq }, PREFIX_OPCODE },
3641 },
3642
f8687e93 3643 /* PREFIX_0F01_REG_5_MOD_3_RM_0 */
603555e5
L
3644 {
3645 { Bad_Opcode },
2234eee6 3646 { "setssbsy", { Skip_MODRM }, PREFIX_OPCODE },
603555e5
L
3647 },
3648
f8687e93 3649 /* PREFIX_0F01_REG_5_MOD_3_RM_2 */
603555e5
L
3650 {
3651 { Bad_Opcode },
c2f76402 3652 { "saveprevssp", { Skip_MODRM }, PREFIX_OPCODE },
603555e5
L
3653 },
3654
267b8516
JB
3655 /* PREFIX_0F01_REG_7_MOD_3_RM_2 */
3656 {
3657 { "monitorx", { { OP_Monitor, 0 } }, 0 },
142861df 3658 { "mcommit", { Skip_MODRM }, 0 },
267b8516
JB
3659 },
3660
3661 /* PREFIX_0F01_REG_7_MOD_3_RM_3 */
3662 {
7abb8d81 3663 { "mwaitx", { { OP_Mwait, eBX_reg } }, 0 },
267b8516
JB
3664 },
3665
3233d7d0
IT
3666 /* PREFIX_0F09 */
3667 {
3668 { "wbinvd", { XX }, 0 },
3669 { "wbnoinvd", { XX }, 0 },
3670 },
3671
1ceb70f8 3672 /* PREFIX_0F10 */
cc0ec051 3673 {
507bd325
L
3674 { "movups", { XM, EXx }, PREFIX_OPCODE },
3675 { "movss", { XM, EXd }, PREFIX_OPCODE },
3676 { "movupd", { XM, EXx }, PREFIX_OPCODE },
3677 { "movsd", { XM, EXq }, PREFIX_OPCODE },
30d1c836 3678 },
4e7d34a6 3679
1ceb70f8 3680 /* PREFIX_0F11 */
30d1c836 3681 {
507bd325
L
3682 { "movups", { EXxS, XM }, PREFIX_OPCODE },
3683 { "movss", { EXdS, XM }, PREFIX_OPCODE },
3684 { "movupd", { EXxS, XM }, PREFIX_OPCODE },
3685 { "movsd", { EXqS, XM }, PREFIX_OPCODE },
4e7d34a6 3686 },
252b5132 3687
1ceb70f8 3688 /* PREFIX_0F12 */
c608c12e 3689 {
1ceb70f8 3690 { MOD_TABLE (MOD_0F12_PREFIX_0) },
507bd325
L
3691 { "movsldup", { XM, EXx }, PREFIX_OPCODE },
3692 { "movlpd", { XM, EXq }, PREFIX_OPCODE },
3693 { "movddup", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3694 },
4e7d34a6 3695
1ceb70f8 3696 /* PREFIX_0F16 */
c608c12e 3697 {
1ceb70f8 3698 { MOD_TABLE (MOD_0F16_PREFIX_0) },
507bd325
L
3699 { "movshdup", { XM, EXx }, PREFIX_OPCODE },
3700 { "movhpd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3701 },
4e7d34a6 3702
7e8b059b
L
3703 /* PREFIX_0F1A */
3704 {
3705 { MOD_TABLE (MOD_0F1A_PREFIX_0) },
bf890a93
IT
3706 { "bndcl", { Gbnd, Ev_bnd }, 0 },
3707 { "bndmov", { Gbnd, Ebnd }, 0 },
3708 { "bndcu", { Gbnd, Ev_bnd }, 0 },
7e8b059b
L
3709 },
3710
3711 /* PREFIX_0F1B */
3712 {
3713 { MOD_TABLE (MOD_0F1B_PREFIX_0) },
3714 { MOD_TABLE (MOD_0F1B_PREFIX_1) },
9f79e886 3715 { "bndmov", { EbndS, Gbnd }, 0 },
bf890a93 3716 { "bndcn", { Gbnd, Ev_bnd }, 0 },
7e8b059b
L
3717 },
3718
c48935d7
IT
3719 /* PREFIX_0F1C */
3720 {
3721 { MOD_TABLE (MOD_0F1C_PREFIX_0) },
3722 { "nopQ", { Ev }, PREFIX_OPCODE },
3723 { "nopQ", { Ev }, PREFIX_OPCODE },
3724 { "nopQ", { Ev }, PREFIX_OPCODE },
3725 },
3726
603555e5
L
3727 /* PREFIX_0F1E */
3728 {
3729 { "nopQ", { Ev }, PREFIX_OPCODE },
3730 { MOD_TABLE (MOD_0F1E_PREFIX_1) },
3731 { "nopQ", { Ev }, PREFIX_OPCODE },
3732 { "nopQ", { Ev }, PREFIX_OPCODE },
3733 },
3734
1ceb70f8 3735 /* PREFIX_0F2A */
c608c12e 3736 {
507bd325 3737 { "cvtpi2ps", { XM, EMCq }, PREFIX_OPCODE },
e1a1babd 3738 { "cvtsi2ss%LQ", { XM, Edq }, PREFIX_OPCODE },
507bd325 3739 { "cvtpi2pd", { XM, EMCq }, PREFIX_OPCODE },
e1a1babd 3740 { "cvtsi2sd%LQ", { XM, Edq }, 0 },
c608c12e 3741 },
4e7d34a6 3742
1ceb70f8 3743 /* PREFIX_0F2B */
c608c12e 3744 {
75c135a8
L
3745 { MOD_TABLE (MOD_0F2B_PREFIX_0) },
3746 { MOD_TABLE (MOD_0F2B_PREFIX_1) },
3747 { MOD_TABLE (MOD_0F2B_PREFIX_2) },
3748 { MOD_TABLE (MOD_0F2B_PREFIX_3) },
c608c12e 3749 },
4e7d34a6 3750
1ceb70f8 3751 /* PREFIX_0F2C */
c608c12e 3752 {
507bd325 3753 { "cvttps2pi", { MXC, EXq }, PREFIX_OPCODE },
e1a1babd 3754 { "cvttss2si", { Gdq, EXd }, PREFIX_OPCODE },
507bd325 3755 { "cvttpd2pi", { MXC, EXx }, PREFIX_OPCODE },
e1a1babd 3756 { "cvttsd2si", { Gdq, EXq }, PREFIX_OPCODE },
c608c12e 3757 },
4e7d34a6 3758
1ceb70f8 3759 /* PREFIX_0F2D */
c608c12e 3760 {
507bd325 3761 { "cvtps2pi", { MXC, EXq }, PREFIX_OPCODE },
e1a1babd 3762 { "cvtss2si", { Gdq, EXd }, PREFIX_OPCODE },
507bd325 3763 { "cvtpd2pi", { MXC, EXx }, PREFIX_OPCODE },
e1a1babd 3764 { "cvtsd2si", { Gdq, EXq }, PREFIX_OPCODE },
c608c12e 3765 },
4e7d34a6 3766
1ceb70f8 3767 /* PREFIX_0F2E */
c608c12e 3768 {
bf890a93 3769 { "ucomiss",{ XM, EXd }, 0 },
592d1631 3770 { Bad_Opcode },
bf890a93 3771 { "ucomisd",{ XM, EXq }, 0 },
c608c12e 3772 },
4e7d34a6 3773
1ceb70f8 3774 /* PREFIX_0F2F */
c608c12e 3775 {
bf890a93 3776 { "comiss", { XM, EXd }, 0 },
592d1631 3777 { Bad_Opcode },
bf890a93 3778 { "comisd", { XM, EXq }, 0 },
c608c12e 3779 },
4e7d34a6 3780
1ceb70f8 3781 /* PREFIX_0F51 */
c608c12e 3782 {
507bd325
L
3783 { "sqrtps", { XM, EXx }, PREFIX_OPCODE },
3784 { "sqrtss", { XM, EXd }, PREFIX_OPCODE },
3785 { "sqrtpd", { XM, EXx }, PREFIX_OPCODE },
3786 { "sqrtsd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3787 },
4e7d34a6 3788
1ceb70f8 3789 /* PREFIX_0F52 */
c608c12e 3790 {
507bd325
L
3791 { "rsqrtps",{ XM, EXx }, PREFIX_OPCODE },
3792 { "rsqrtss",{ XM, EXd }, PREFIX_OPCODE },
c608c12e 3793 },
4e7d34a6 3794
1ceb70f8 3795 /* PREFIX_0F53 */
c608c12e 3796 {
507bd325
L
3797 { "rcpps", { XM, EXx }, PREFIX_OPCODE },
3798 { "rcpss", { XM, EXd }, PREFIX_OPCODE },
c608c12e 3799 },
4e7d34a6 3800
1ceb70f8 3801 /* PREFIX_0F58 */
c608c12e 3802 {
507bd325
L
3803 { "addps", { XM, EXx }, PREFIX_OPCODE },
3804 { "addss", { XM, EXd }, PREFIX_OPCODE },
3805 { "addpd", { XM, EXx }, PREFIX_OPCODE },
3806 { "addsd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3807 },
4e7d34a6 3808
1ceb70f8 3809 /* PREFIX_0F59 */
c608c12e 3810 {
507bd325
L
3811 { "mulps", { XM, EXx }, PREFIX_OPCODE },
3812 { "mulss", { XM, EXd }, PREFIX_OPCODE },
3813 { "mulpd", { XM, EXx }, PREFIX_OPCODE },
3814 { "mulsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3815 },
4e7d34a6 3816
1ceb70f8 3817 /* PREFIX_0F5A */
041bd2e0 3818 {
507bd325
L
3819 { "cvtps2pd", { XM, EXq }, PREFIX_OPCODE },
3820 { "cvtss2sd", { XM, EXd }, PREFIX_OPCODE },
3821 { "cvtpd2ps", { XM, EXx }, PREFIX_OPCODE },
3822 { "cvtsd2ss", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3823 },
4e7d34a6 3824
1ceb70f8 3825 /* PREFIX_0F5B */
041bd2e0 3826 {
507bd325
L
3827 { "cvtdq2ps", { XM, EXx }, PREFIX_OPCODE },
3828 { "cvttps2dq", { XM, EXx }, PREFIX_OPCODE },
3829 { "cvtps2dq", { XM, EXx }, PREFIX_OPCODE },
041bd2e0 3830 },
4e7d34a6 3831
1ceb70f8 3832 /* PREFIX_0F5C */
041bd2e0 3833 {
507bd325
L
3834 { "subps", { XM, EXx }, PREFIX_OPCODE },
3835 { "subss", { XM, EXd }, PREFIX_OPCODE },
3836 { "subpd", { XM, EXx }, PREFIX_OPCODE },
3837 { "subsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3838 },
4e7d34a6 3839
1ceb70f8 3840 /* PREFIX_0F5D */
041bd2e0 3841 {
507bd325
L
3842 { "minps", { XM, EXx }, PREFIX_OPCODE },
3843 { "minss", { XM, EXd }, PREFIX_OPCODE },
3844 { "minpd", { XM, EXx }, PREFIX_OPCODE },
3845 { "minsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3846 },
4e7d34a6 3847
1ceb70f8 3848 /* PREFIX_0F5E */
041bd2e0 3849 {
507bd325
L
3850 { "divps", { XM, EXx }, PREFIX_OPCODE },
3851 { "divss", { XM, EXd }, PREFIX_OPCODE },
3852 { "divpd", { XM, EXx }, PREFIX_OPCODE },
3853 { "divsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3854 },
4e7d34a6 3855
1ceb70f8 3856 /* PREFIX_0F5F */
041bd2e0 3857 {
507bd325
L
3858 { "maxps", { XM, EXx }, PREFIX_OPCODE },
3859 { "maxss", { XM, EXd }, PREFIX_OPCODE },
3860 { "maxpd", { XM, EXx }, PREFIX_OPCODE },
3861 { "maxsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3862 },
4e7d34a6 3863
1ceb70f8 3864 /* PREFIX_0F60 */
041bd2e0 3865 {
507bd325 3866 { "punpcklbw",{ MX, EMd }, PREFIX_OPCODE },
592d1631 3867 { Bad_Opcode },
507bd325 3868 { "punpcklbw",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 3869 },
4e7d34a6 3870
1ceb70f8 3871 /* PREFIX_0F61 */
041bd2e0 3872 {
507bd325 3873 { "punpcklwd",{ MX, EMd }, PREFIX_OPCODE },
592d1631 3874 { Bad_Opcode },
507bd325 3875 { "punpcklwd",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 3876 },
4e7d34a6 3877
1ceb70f8 3878 /* PREFIX_0F62 */
041bd2e0 3879 {
507bd325 3880 { "punpckldq",{ MX, EMd }, PREFIX_OPCODE },
592d1631 3881 { Bad_Opcode },
507bd325 3882 { "punpckldq",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 3883 },
4e7d34a6 3884
1ceb70f8 3885 /* PREFIX_0F6C */
041bd2e0 3886 {
592d1631
L
3887 { Bad_Opcode },
3888 { Bad_Opcode },
507bd325 3889 { "punpcklqdq", { XM, EXx }, PREFIX_OPCODE },
0f17484f 3890 },
4e7d34a6 3891
1ceb70f8 3892 /* PREFIX_0F6D */
0f17484f 3893 {
592d1631
L
3894 { Bad_Opcode },
3895 { Bad_Opcode },
507bd325 3896 { "punpckhqdq", { XM, EXx }, PREFIX_OPCODE },
041bd2e0 3897 },
4e7d34a6 3898
1ceb70f8 3899 /* PREFIX_0F6F */
ca164297 3900 {
507bd325
L
3901 { "movq", { MX, EM }, PREFIX_OPCODE },
3902 { "movdqu", { XM, EXx }, PREFIX_OPCODE },
3903 { "movdqa", { XM, EXx }, PREFIX_OPCODE },
ca164297 3904 },
4e7d34a6 3905
1ceb70f8 3906 /* PREFIX_0F70 */
4e7d34a6 3907 {
507bd325
L
3908 { "pshufw", { MX, EM, Ib }, PREFIX_OPCODE },
3909 { "pshufhw",{ XM, EXx, Ib }, PREFIX_OPCODE },
3910 { "pshufd", { XM, EXx, Ib }, PREFIX_OPCODE },
3911 { "pshuflw",{ XM, EXx, Ib }, PREFIX_OPCODE },
4e7d34a6
L
3912 },
3913
92fddf8e
L
3914 /* PREFIX_0F73_REG_3 */
3915 {
592d1631
L
3916 { Bad_Opcode },
3917 { Bad_Opcode },
bf890a93 3918 { "psrldq", { XS, Ib }, 0 },
92fddf8e
L
3919 },
3920
3921 /* PREFIX_0F73_REG_7 */
3922 {
592d1631
L
3923 { Bad_Opcode },
3924 { Bad_Opcode },
bf890a93 3925 { "pslldq", { XS, Ib }, 0 },
92fddf8e
L
3926 },
3927
1ceb70f8 3928 /* PREFIX_0F78 */
4e7d34a6 3929 {
bf890a93 3930 {"vmread", { Em, Gm }, 0 },
592d1631 3931 { Bad_Opcode },
bf890a93
IT
3932 {"extrq", { XS, Ib, Ib }, 0 },
3933 {"insertq", { XM, XS, Ib, Ib }, 0 },
4e7d34a6
L
3934 },
3935
1ceb70f8 3936 /* PREFIX_0F79 */
4e7d34a6 3937 {
bf890a93 3938 {"vmwrite", { Gm, Em }, 0 },
592d1631 3939 { Bad_Opcode },
bf890a93
IT
3940 {"extrq", { XM, XS }, 0 },
3941 {"insertq", { XM, XS }, 0 },
4e7d34a6
L
3942 },
3943
1ceb70f8 3944 /* PREFIX_0F7C */
ca164297 3945 {
592d1631
L
3946 { Bad_Opcode },
3947 { Bad_Opcode },
507bd325
L
3948 { "haddpd", { XM, EXx }, PREFIX_OPCODE },
3949 { "haddps", { XM, EXx }, PREFIX_OPCODE },
ca164297 3950 },
4e7d34a6 3951
1ceb70f8 3952 /* PREFIX_0F7D */
ca164297 3953 {
592d1631
L
3954 { Bad_Opcode },
3955 { Bad_Opcode },
507bd325
L
3956 { "hsubpd", { XM, EXx }, PREFIX_OPCODE },
3957 { "hsubps", { XM, EXx }, PREFIX_OPCODE },
ca164297 3958 },
4e7d34a6 3959
1ceb70f8 3960 /* PREFIX_0F7E */
ca164297 3961 {
507bd325
L
3962 { "movK", { Edq, MX }, PREFIX_OPCODE },
3963 { "movq", { XM, EXq }, PREFIX_OPCODE },
3964 { "movK", { Edq, XM }, PREFIX_OPCODE },
ca164297 3965 },
4e7d34a6 3966
1ceb70f8 3967 /* PREFIX_0F7F */
ca164297 3968 {
507bd325
L
3969 { "movq", { EMS, MX }, PREFIX_OPCODE },
3970 { "movdqu", { EXxS, XM }, PREFIX_OPCODE },
3971 { "movdqa", { EXxS, XM }, PREFIX_OPCODE },
ca164297 3972 },
4e7d34a6 3973
f8687e93 3974 /* PREFIX_0FAE_REG_0_MOD_3 */
c7b8aa3a
L
3975 {
3976 { Bad_Opcode },
bf890a93 3977 { "rdfsbase", { Ev }, 0 },
c7b8aa3a
L
3978 },
3979
f8687e93 3980 /* PREFIX_0FAE_REG_1_MOD_3 */
c7b8aa3a
L
3981 {
3982 { Bad_Opcode },
bf890a93 3983 { "rdgsbase", { Ev }, 0 },
c7b8aa3a
L
3984 },
3985
f8687e93 3986 /* PREFIX_0FAE_REG_2_MOD_3 */
c7b8aa3a
L
3987 {
3988 { Bad_Opcode },
bf890a93 3989 { "wrfsbase", { Ev }, 0 },
c7b8aa3a
L
3990 },
3991
f8687e93 3992 /* PREFIX_0FAE_REG_3_MOD_3 */
c7b8aa3a
L
3993 {
3994 { Bad_Opcode },
bf890a93 3995 { "wrgsbase", { Ev }, 0 },
c7b8aa3a
L
3996 },
3997
f8687e93 3998 /* PREFIX_0FAE_REG_4_MOD_0 */
6b40c462
L
3999 {
4000 { "xsave", { FXSAVE }, 0 },
4001 { "ptwrite%LQ", { Edq }, 0 },
4002 },
4003
f8687e93 4004 /* PREFIX_0FAE_REG_4_MOD_3 */
6b40c462
L
4005 {
4006 { Bad_Opcode },
4007 { "ptwrite%LQ", { Edq }, 0 },
4008 },
4009
f8687e93 4010 /* PREFIX_0FAE_REG_5_MOD_0 */
603555e5
L
4011 {
4012 { "xrstor", { FXSAVE }, PREFIX_OPCODE },
2234eee6
L
4013 },
4014
f8687e93 4015 /* PREFIX_0FAE_REG_5_MOD_3 */
2234eee6
L
4016 {
4017 { "lfence", { Skip_MODRM }, 0 },
4018 { "incsspK", { Rdq }, PREFIX_OPCODE },
603555e5
L
4019 },
4020
f8687e93 4021 /* PREFIX_0FAE_REG_6_MOD_0 */
c5e7287a 4022 {
603555e5
L
4023 { "xsaveopt", { FXSAVE }, PREFIX_OPCODE },
4024 { "clrssbsy", { Mq }, PREFIX_OPCODE },
4025 { "clwb", { Mb }, PREFIX_OPCODE },
c5e7287a
IT
4026 },
4027
f8687e93 4028 /* PREFIX_0FAE_REG_6_MOD_3 */
de89d0a3 4029 {
f8687e93 4030 { RM_TABLE (RM_0FAE_REG_6_MOD_3_P_0) },
de89d0a3 4031 { "umonitor", { Eva }, PREFIX_OPCODE },
ae1d3843
L
4032 { "tpause", { Edq }, PREFIX_OPCODE },
4033 { "umwait", { Edq }, PREFIX_OPCODE },
de89d0a3
IT
4034 },
4035
f8687e93 4036 /* PREFIX_0FAE_REG_7_MOD_0 */
963f3586 4037 {
bf890a93 4038 { "clflush", { Mb }, 0 },
963f3586 4039 { Bad_Opcode },
bf890a93 4040 { "clflushopt", { Mb }, 0 },
963f3586
IT
4041 },
4042
1ceb70f8 4043 /* PREFIX_0FB8 */
ca164297 4044 {
592d1631 4045 { Bad_Opcode },
bf890a93 4046 { "popcntS", { Gv, Ev }, 0 },
ca164297 4047 },
4e7d34a6 4048
f12dc422
L
4049 /* PREFIX_0FBC */
4050 {
bf890a93
IT
4051 { "bsfS", { Gv, Ev }, 0 },
4052 { "tzcntS", { Gv, Ev }, 0 },
4053 { "bsfS", { Gv, Ev }, 0 },
f12dc422
L
4054 },
4055
1ceb70f8 4056 /* PREFIX_0FBD */
050dfa73 4057 {
bf890a93
IT
4058 { "bsrS", { Gv, Ev }, 0 },
4059 { "lzcntS", { Gv, Ev }, 0 },
4060 { "bsrS", { Gv, Ev }, 0 },
050dfa73
MM
4061 },
4062
1ceb70f8 4063 /* PREFIX_0FC2 */
050dfa73 4064 {
507bd325
L
4065 { "cmpps", { XM, EXx, CMP }, PREFIX_OPCODE },
4066 { "cmpss", { XM, EXd, CMP }, PREFIX_OPCODE },
4067 { "cmppd", { XM, EXx, CMP }, PREFIX_OPCODE },
4068 { "cmpsd", { XM, EXq, CMP }, PREFIX_OPCODE },
050dfa73 4069 },
246c51aa 4070
f8687e93 4071 /* PREFIX_0FC3_MOD_0 */
4ee52178 4072 {
e1a1babd 4073 { "movntiS", { Edq, Gdq }, PREFIX_OPCODE },
4ee52178
L
4074 },
4075
f8687e93 4076 /* PREFIX_0FC7_REG_6_MOD_0 */
92fddf8e 4077 {
bf890a93
IT
4078 { "vmptrld",{ Mq }, 0 },
4079 { "vmxon", { Mq }, 0 },
4080 { "vmclear",{ Mq }, 0 },
92fddf8e
L
4081 },
4082
f8687e93 4083 /* PREFIX_0FC7_REG_6_MOD_3 */
f24bcbaa
L
4084 {
4085 { "rdrand", { Ev }, 0 },
4086 { Bad_Opcode },
4087 { "rdrand", { Ev }, 0 }
4088 },
4089
f8687e93 4090 /* PREFIX_0FC7_REG_7_MOD_3 */
f24bcbaa
L
4091 {
4092 { "rdseed", { Ev }, 0 },
8bc52696 4093 { "rdpid", { Em }, 0 },
f24bcbaa
L
4094 { "rdseed", { Ev }, 0 },
4095 },
4096
1ceb70f8 4097 /* PREFIX_0FD0 */
050dfa73 4098 {
592d1631
L
4099 { Bad_Opcode },
4100 { Bad_Opcode },
bf890a93
IT
4101 { "addsubpd", { XM, EXx }, 0 },
4102 { "addsubps", { XM, EXx }, 0 },
246c51aa 4103 },
050dfa73 4104
1ceb70f8 4105 /* PREFIX_0FD6 */
050dfa73 4106 {
592d1631 4107 { Bad_Opcode },
bf890a93
IT
4108 { "movq2dq",{ XM, MS }, 0 },
4109 { "movq", { EXqS, XM }, 0 },
4110 { "movdq2q",{ MX, XS }, 0 },
050dfa73
MM
4111 },
4112
1ceb70f8 4113 /* PREFIX_0FE6 */
7918206c 4114 {
592d1631 4115 { Bad_Opcode },
507bd325
L
4116 { "cvtdq2pd", { XM, EXq }, PREFIX_OPCODE },
4117 { "cvttpd2dq", { XM, EXx }, PREFIX_OPCODE },
4118 { "cvtpd2dq", { XM, EXx }, PREFIX_OPCODE },
7918206c 4119 },
8b38ad71 4120
1ceb70f8 4121 /* PREFIX_0FE7 */
8b38ad71 4122 {
507bd325 4123 { "movntq", { Mq, MX }, PREFIX_OPCODE },
592d1631 4124 { Bad_Opcode },
75c135a8 4125 { MOD_TABLE (MOD_0FE7_PREFIX_2) },
4e7d34a6
L
4126 },
4127
1ceb70f8 4128 /* PREFIX_0FF0 */
4e7d34a6 4129 {
592d1631
L
4130 { Bad_Opcode },
4131 { Bad_Opcode },
4132 { Bad_Opcode },
1ceb70f8 4133 { MOD_TABLE (MOD_0FF0_PREFIX_3) },
4e7d34a6
L
4134 },
4135
1ceb70f8 4136 /* PREFIX_0FF7 */
4e7d34a6 4137 {
507bd325 4138 { "maskmovq", { MX, MS }, PREFIX_OPCODE },
592d1631 4139 { Bad_Opcode },
507bd325 4140 { "maskmovdqu", { XM, XS }, PREFIX_OPCODE },
8b38ad71 4141 },
42903f7f 4142
1ceb70f8 4143 /* PREFIX_0F3810 */
42903f7f 4144 {
592d1631
L
4145 { Bad_Opcode },
4146 { Bad_Opcode },
507bd325 4147 { "pblendvb", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4148 },
4149
1ceb70f8 4150 /* PREFIX_0F3814 */
42903f7f 4151 {
592d1631
L
4152 { Bad_Opcode },
4153 { Bad_Opcode },
507bd325 4154 { "blendvps", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4155 },
4156
1ceb70f8 4157 /* PREFIX_0F3815 */
42903f7f 4158 {
592d1631
L
4159 { Bad_Opcode },
4160 { Bad_Opcode },
507bd325 4161 { "blendvpd", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4162 },
4163
1ceb70f8 4164 /* PREFIX_0F3817 */
42903f7f 4165 {
592d1631
L
4166 { Bad_Opcode },
4167 { Bad_Opcode },
507bd325 4168 { "ptest", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4169 },
4170
1ceb70f8 4171 /* PREFIX_0F3820 */
42903f7f 4172 {
592d1631
L
4173 { Bad_Opcode },
4174 { Bad_Opcode },
507bd325 4175 { "pmovsxbw", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4176 },
4177
1ceb70f8 4178 /* PREFIX_0F3821 */
42903f7f 4179 {
592d1631
L
4180 { Bad_Opcode },
4181 { Bad_Opcode },
507bd325 4182 { "pmovsxbd", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4183 },
4184
1ceb70f8 4185 /* PREFIX_0F3822 */
42903f7f 4186 {
592d1631
L
4187 { Bad_Opcode },
4188 { Bad_Opcode },
507bd325 4189 { "pmovsxbq", { XM, EXw }, PREFIX_OPCODE },
42903f7f
L
4190 },
4191
1ceb70f8 4192 /* PREFIX_0F3823 */
42903f7f 4193 {
592d1631
L
4194 { Bad_Opcode },
4195 { Bad_Opcode },
507bd325 4196 { "pmovsxwd", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4197 },
4198
1ceb70f8 4199 /* PREFIX_0F3824 */
42903f7f 4200 {
592d1631
L
4201 { Bad_Opcode },
4202 { Bad_Opcode },
507bd325 4203 { "pmovsxwq", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4204 },
4205
1ceb70f8 4206 /* PREFIX_0F3825 */
42903f7f 4207 {
592d1631
L
4208 { Bad_Opcode },
4209 { Bad_Opcode },
507bd325 4210 { "pmovsxdq", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4211 },
4212
1ceb70f8 4213 /* PREFIX_0F3828 */
42903f7f 4214 {
592d1631
L
4215 { Bad_Opcode },
4216 { Bad_Opcode },
507bd325 4217 { "pmuldq", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4218 },
4219
1ceb70f8 4220 /* PREFIX_0F3829 */
42903f7f 4221 {
592d1631
L
4222 { Bad_Opcode },
4223 { Bad_Opcode },
507bd325 4224 { "pcmpeqq", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4225 },
4226
1ceb70f8 4227 /* PREFIX_0F382A */
42903f7f 4228 {
592d1631
L
4229 { Bad_Opcode },
4230 { Bad_Opcode },
75c135a8 4231 { MOD_TABLE (MOD_0F382A_PREFIX_2) },
42903f7f
L
4232 },
4233
1ceb70f8 4234 /* PREFIX_0F382B */
42903f7f 4235 {
592d1631
L
4236 { Bad_Opcode },
4237 { Bad_Opcode },
507bd325 4238 { "packusdw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4239 },
4240
1ceb70f8 4241 /* PREFIX_0F3830 */
42903f7f 4242 {
592d1631
L
4243 { Bad_Opcode },
4244 { Bad_Opcode },
507bd325 4245 { "pmovzxbw", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4246 },
4247
1ceb70f8 4248 /* PREFIX_0F3831 */
42903f7f 4249 {
592d1631
L
4250 { Bad_Opcode },
4251 { Bad_Opcode },
507bd325 4252 { "pmovzxbd", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4253 },
4254
1ceb70f8 4255 /* PREFIX_0F3832 */
42903f7f 4256 {
592d1631
L
4257 { Bad_Opcode },
4258 { Bad_Opcode },
507bd325 4259 { "pmovzxbq", { XM, EXw }, PREFIX_OPCODE },
42903f7f
L
4260 },
4261
1ceb70f8 4262 /* PREFIX_0F3833 */
42903f7f 4263 {
592d1631
L
4264 { Bad_Opcode },
4265 { Bad_Opcode },
507bd325 4266 { "pmovzxwd", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4267 },
4268
1ceb70f8 4269 /* PREFIX_0F3834 */
42903f7f 4270 {
592d1631
L
4271 { Bad_Opcode },
4272 { Bad_Opcode },
507bd325 4273 { "pmovzxwq", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4274 },
4275
1ceb70f8 4276 /* PREFIX_0F3835 */
42903f7f 4277 {
592d1631
L
4278 { Bad_Opcode },
4279 { Bad_Opcode },
507bd325 4280 { "pmovzxdq", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4281 },
4282
1ceb70f8 4283 /* PREFIX_0F3837 */
4e7d34a6 4284 {
592d1631
L
4285 { Bad_Opcode },
4286 { Bad_Opcode },
507bd325 4287 { "pcmpgtq", { XM, EXx }, PREFIX_OPCODE },
4e7d34a6
L
4288 },
4289
1ceb70f8 4290 /* PREFIX_0F3838 */
42903f7f 4291 {
592d1631
L
4292 { Bad_Opcode },
4293 { Bad_Opcode },
507bd325 4294 { "pminsb", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4295 },
4296
1ceb70f8 4297 /* PREFIX_0F3839 */
42903f7f 4298 {
592d1631
L
4299 { Bad_Opcode },
4300 { Bad_Opcode },
507bd325 4301 { "pminsd", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4302 },
4303
1ceb70f8 4304 /* PREFIX_0F383A */
42903f7f 4305 {
592d1631
L
4306 { Bad_Opcode },
4307 { Bad_Opcode },
507bd325 4308 { "pminuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4309 },
4310
1ceb70f8 4311 /* PREFIX_0F383B */
42903f7f 4312 {
592d1631
L
4313 { Bad_Opcode },
4314 { Bad_Opcode },
507bd325 4315 { "pminud", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4316 },
4317
1ceb70f8 4318 /* PREFIX_0F383C */
42903f7f 4319 {
592d1631
L
4320 { Bad_Opcode },
4321 { Bad_Opcode },
507bd325 4322 { "pmaxsb", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4323 },
4324
1ceb70f8 4325 /* PREFIX_0F383D */
42903f7f 4326 {
592d1631
L
4327 { Bad_Opcode },
4328 { Bad_Opcode },
507bd325 4329 { "pmaxsd", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4330 },
4331
1ceb70f8 4332 /* PREFIX_0F383E */
42903f7f 4333 {
592d1631
L
4334 { Bad_Opcode },
4335 { Bad_Opcode },
507bd325 4336 { "pmaxuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4337 },
4338
1ceb70f8 4339 /* PREFIX_0F383F */
42903f7f 4340 {
592d1631
L
4341 { Bad_Opcode },
4342 { Bad_Opcode },
507bd325 4343 { "pmaxud", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4344 },
4345
1ceb70f8 4346 /* PREFIX_0F3840 */
42903f7f 4347 {
592d1631
L
4348 { Bad_Opcode },
4349 { Bad_Opcode },
507bd325 4350 { "pmulld", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4351 },
4352
1ceb70f8 4353 /* PREFIX_0F3841 */
42903f7f 4354 {
592d1631
L
4355 { Bad_Opcode },
4356 { Bad_Opcode },
507bd325 4357 { "phminposuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4358 },
4359
f1f8f695
L
4360 /* PREFIX_0F3880 */
4361 {
592d1631
L
4362 { Bad_Opcode },
4363 { Bad_Opcode },
507bd325 4364 { "invept", { Gm, Mo }, PREFIX_OPCODE },
f1f8f695
L
4365 },
4366
4367 /* PREFIX_0F3881 */
4368 {
592d1631
L
4369 { Bad_Opcode },
4370 { Bad_Opcode },
507bd325 4371 { "invvpid", { Gm, Mo }, PREFIX_OPCODE },
f1f8f695
L
4372 },
4373
6c30d220
L
4374 /* PREFIX_0F3882 */
4375 {
4376 { Bad_Opcode },
4377 { Bad_Opcode },
507bd325 4378 { "invpcid", { Gm, M }, PREFIX_OPCODE },
6c30d220
L
4379 },
4380
a0046408
L
4381 /* PREFIX_0F38C8 */
4382 {
507bd325 4383 { "sha1nexte", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4384 },
4385
4386 /* PREFIX_0F38C9 */
4387 {
507bd325 4388 { "sha1msg1", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4389 },
4390
4391 /* PREFIX_0F38CA */
4392 {
507bd325 4393 { "sha1msg2", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4394 },
4395
4396 /* PREFIX_0F38CB */
4397 {
507bd325 4398 { "sha256rnds2", { XM, EXxmm, XMM0 }, PREFIX_OPCODE },
a0046408
L
4399 },
4400
4401 /* PREFIX_0F38CC */
4402 {
507bd325 4403 { "sha256msg1", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4404 },
4405
4406 /* PREFIX_0F38CD */
4407 {
507bd325 4408 { "sha256msg2", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4409 },
4410
48521003
IT
4411 /* PREFIX_0F38CF */
4412 {
4413 { Bad_Opcode },
4414 { Bad_Opcode },
4415 { "gf2p8mulb", { XM, EXxmm }, PREFIX_OPCODE },
4416 },
4417
c0f3af97
L
4418 /* PREFIX_0F38DB */
4419 {
592d1631
L
4420 { Bad_Opcode },
4421 { Bad_Opcode },
507bd325 4422 { "aesimc", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4423 },
4424
4425 /* PREFIX_0F38DC */
4426 {
592d1631
L
4427 { Bad_Opcode },
4428 { Bad_Opcode },
507bd325 4429 { "aesenc", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4430 },
4431
4432 /* PREFIX_0F38DD */
4433 {
592d1631
L
4434 { Bad_Opcode },
4435 { Bad_Opcode },
507bd325 4436 { "aesenclast", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4437 },
4438
4439 /* PREFIX_0F38DE */
4440 {
592d1631
L
4441 { Bad_Opcode },
4442 { Bad_Opcode },
507bd325 4443 { "aesdec", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4444 },
4445
4446 /* PREFIX_0F38DF */
4447 {
592d1631
L
4448 { Bad_Opcode },
4449 { Bad_Opcode },
507bd325 4450 { "aesdeclast", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4451 },
4452
1ceb70f8 4453 /* PREFIX_0F38F0 */
4e7d34a6 4454 {
507bd325 4455 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } }, PREFIX_OPCODE },
592d1631 4456 { Bad_Opcode },
507bd325
L
4457 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } }, PREFIX_OPCODE },
4458 { "crc32", { Gdq, { CRC32_Fixup, b_mode } }, PREFIX_OPCODE },
4e7d34a6
L
4459 },
4460
1ceb70f8 4461 /* PREFIX_0F38F1 */
4e7d34a6 4462 {
507bd325 4463 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv }, PREFIX_OPCODE },
592d1631 4464 { Bad_Opcode },
507bd325
L
4465 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv }, PREFIX_OPCODE },
4466 { "crc32", { Gdq, { CRC32_Fixup, v_mode } }, PREFIX_OPCODE },
4e7d34a6
L
4467 },
4468
603555e5 4469 /* PREFIX_0F38F5 */
e2e1fcde
L
4470 {
4471 { Bad_Opcode },
603555e5
L
4472 { Bad_Opcode },
4473 { MOD_TABLE (MOD_0F38F5_PREFIX_2) },
4474 },
4475
4476 /* PREFIX_0F38F6 */
4477 {
4478 { MOD_TABLE (MOD_0F38F6_PREFIX_0) },
507bd325
L
4479 { "adoxS", { Gdq, Edq}, PREFIX_OPCODE },
4480 { "adcxS", { Gdq, Edq}, PREFIX_OPCODE },
e2e1fcde
L
4481 { Bad_Opcode },
4482 },
4483
c0a30a9f
L
4484 /* PREFIX_0F38F8 */
4485 {
4486 { Bad_Opcode },
5d79adc4 4487 { MOD_TABLE (MOD_0F38F8_PREFIX_1) },
c0a30a9f 4488 { MOD_TABLE (MOD_0F38F8_PREFIX_2) },
5d79adc4 4489 { MOD_TABLE (MOD_0F38F8_PREFIX_3) },
c0a30a9f
L
4490 },
4491
4492 /* PREFIX_0F38F9 */
4493 {
4494 { MOD_TABLE (MOD_0F38F9_PREFIX_0) },
4495 },
4496
1ceb70f8 4497 /* PREFIX_0F3A08 */
42903f7f 4498 {
592d1631
L
4499 { Bad_Opcode },
4500 { Bad_Opcode },
507bd325 4501 { "roundps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4502 },
4503
1ceb70f8 4504 /* PREFIX_0F3A09 */
42903f7f 4505 {
592d1631
L
4506 { Bad_Opcode },
4507 { Bad_Opcode },
507bd325 4508 { "roundpd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4509 },
4510
1ceb70f8 4511 /* PREFIX_0F3A0A */
42903f7f 4512 {
592d1631
L
4513 { Bad_Opcode },
4514 { Bad_Opcode },
507bd325 4515 { "roundss", { XM, EXd, Ib }, PREFIX_OPCODE },
42903f7f
L
4516 },
4517
1ceb70f8 4518 /* PREFIX_0F3A0B */
42903f7f 4519 {
592d1631
L
4520 { Bad_Opcode },
4521 { Bad_Opcode },
507bd325 4522 { "roundsd", { XM, EXq, Ib }, PREFIX_OPCODE },
42903f7f
L
4523 },
4524
1ceb70f8 4525 /* PREFIX_0F3A0C */
42903f7f 4526 {
592d1631
L
4527 { Bad_Opcode },
4528 { Bad_Opcode },
507bd325 4529 { "blendps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4530 },
4531
1ceb70f8 4532 /* PREFIX_0F3A0D */
42903f7f 4533 {
592d1631
L
4534 { Bad_Opcode },
4535 { Bad_Opcode },
507bd325 4536 { "blendpd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4537 },
4538
1ceb70f8 4539 /* PREFIX_0F3A0E */
42903f7f 4540 {
592d1631
L
4541 { Bad_Opcode },
4542 { Bad_Opcode },
507bd325 4543 { "pblendw", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4544 },
4545
1ceb70f8 4546 /* PREFIX_0F3A14 */
42903f7f 4547 {
592d1631
L
4548 { Bad_Opcode },
4549 { Bad_Opcode },
507bd325 4550 { "pextrb", { Edqb, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4551 },
4552
1ceb70f8 4553 /* PREFIX_0F3A15 */
42903f7f 4554 {
592d1631
L
4555 { Bad_Opcode },
4556 { Bad_Opcode },
507bd325 4557 { "pextrw", { Edqw, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4558 },
4559
1ceb70f8 4560 /* PREFIX_0F3A16 */
42903f7f 4561 {
592d1631
L
4562 { Bad_Opcode },
4563 { Bad_Opcode },
507bd325 4564 { "pextrK", { Edq, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4565 },
4566
1ceb70f8 4567 /* PREFIX_0F3A17 */
42903f7f 4568 {
592d1631
L
4569 { Bad_Opcode },
4570 { Bad_Opcode },
507bd325 4571 { "extractps", { Edqd, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4572 },
4573
1ceb70f8 4574 /* PREFIX_0F3A20 */
42903f7f 4575 {
592d1631
L
4576 { Bad_Opcode },
4577 { Bad_Opcode },
507bd325 4578 { "pinsrb", { XM, Edqb, Ib }, PREFIX_OPCODE },
42903f7f
L
4579 },
4580
1ceb70f8 4581 /* PREFIX_0F3A21 */
42903f7f 4582 {
592d1631
L
4583 { Bad_Opcode },
4584 { Bad_Opcode },
507bd325 4585 { "insertps", { XM, EXd, Ib }, PREFIX_OPCODE },
42903f7f
L
4586 },
4587
1ceb70f8 4588 /* PREFIX_0F3A22 */
42903f7f 4589 {
592d1631
L
4590 { Bad_Opcode },
4591 { Bad_Opcode },
507bd325 4592 { "pinsrK", { XM, Edq, Ib }, PREFIX_OPCODE },
42903f7f
L
4593 },
4594
1ceb70f8 4595 /* PREFIX_0F3A40 */
42903f7f 4596 {
592d1631
L
4597 { Bad_Opcode },
4598 { Bad_Opcode },
507bd325 4599 { "dpps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4600 },
4601
1ceb70f8 4602 /* PREFIX_0F3A41 */
42903f7f 4603 {
592d1631
L
4604 { Bad_Opcode },
4605 { Bad_Opcode },
507bd325 4606 { "dppd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4607 },
4608
1ceb70f8 4609 /* PREFIX_0F3A42 */
42903f7f 4610 {
592d1631
L
4611 { Bad_Opcode },
4612 { Bad_Opcode },
507bd325 4613 { "mpsadbw", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f 4614 },
381d071f 4615
c0f3af97
L
4616 /* PREFIX_0F3A44 */
4617 {
592d1631
L
4618 { Bad_Opcode },
4619 { Bad_Opcode },
507bd325 4620 { "pclmulqdq", { XM, EXx, PCLMUL }, PREFIX_OPCODE },
c0f3af97
L
4621 },
4622
1ceb70f8 4623 /* PREFIX_0F3A60 */
381d071f 4624 {
592d1631
L
4625 { Bad_Opcode },
4626 { Bad_Opcode },
15c7c1d8 4627 { "pcmpestrm", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, PREFIX_OPCODE },
381d071f
L
4628 },
4629
1ceb70f8 4630 /* PREFIX_0F3A61 */
381d071f 4631 {
592d1631
L
4632 { Bad_Opcode },
4633 { Bad_Opcode },
15c7c1d8 4634 { "pcmpestri", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, PREFIX_OPCODE },
381d071f
L
4635 },
4636
1ceb70f8 4637 /* PREFIX_0F3A62 */
381d071f 4638 {
592d1631
L
4639 { Bad_Opcode },
4640 { Bad_Opcode },
507bd325 4641 { "pcmpistrm", { XM, EXx, Ib }, PREFIX_OPCODE },
381d071f
L
4642 },
4643
1ceb70f8 4644 /* PREFIX_0F3A63 */
381d071f 4645 {
592d1631
L
4646 { Bad_Opcode },
4647 { Bad_Opcode },
507bd325 4648 { "pcmpistri", { XM, EXx, Ib }, PREFIX_OPCODE },
381d071f 4649 },
09a2c6cf 4650
a0046408
L
4651 /* PREFIX_0F3ACC */
4652 {
507bd325 4653 { "sha1rnds4", { XM, EXxmm, Ib }, PREFIX_OPCODE },
a0046408
L
4654 },
4655
48521003
IT
4656 /* PREFIX_0F3ACE */
4657 {
4658 { Bad_Opcode },
4659 { Bad_Opcode },
4660 { "gf2p8affineqb", { XM, EXxmm, Ib }, PREFIX_OPCODE },
4661 },
4662
4663 /* PREFIX_0F3ACF */
4664 {
4665 { Bad_Opcode },
4666 { Bad_Opcode },
4667 { "gf2p8affineinvqb", { XM, EXxmm, Ib }, PREFIX_OPCODE },
4668 },
4669
c0f3af97 4670 /* PREFIX_0F3ADF */
09a2c6cf 4671 {
592d1631
L
4672 { Bad_Opcode },
4673 { Bad_Opcode },
507bd325 4674 { "aeskeygenassist", { XM, EXx, Ib }, PREFIX_OPCODE },
09a2c6cf
L
4675 },
4676
592a252b 4677 /* PREFIX_VEX_0F10 */
09a2c6cf 4678 {
ec6f095a
L
4679 { "vmovups", { XM, EXx }, 0 },
4680 { "vmovss", { XMVexScalar, VexScalar, EXdScalar }, 0 },
4681 { "vmovupd", { XM, EXx }, 0 },
4682 { "vmovsd", { XMVexScalar, VexScalar, EXqScalar }, 0 },
09a2c6cf
L
4683 },
4684
592a252b 4685 /* PREFIX_VEX_0F11 */
09a2c6cf 4686 {
ec6f095a
L
4687 { "vmovups", { EXxS, XM }, 0 },
4688 { "vmovss", { EXdVexScalarS, VexScalar, XMScalar }, 0 },
4689 { "vmovupd", { EXxS, XM }, 0 },
4690 { "vmovsd", { EXqVexScalarS, VexScalar, XMScalar }, 0 },
09a2c6cf
L
4691 },
4692
592a252b 4693 /* PREFIX_VEX_0F12 */
09a2c6cf 4694 {
592a252b 4695 { MOD_TABLE (MOD_VEX_0F12_PREFIX_0) },
ec6f095a 4696 { "vmovsldup", { XM, EXx }, 0 },
592a252b 4697 { VEX_LEN_TABLE (VEX_LEN_0F12_P_2) },
ec6f095a 4698 { "vmovddup", { XM, EXymmq }, 0 },
09a2c6cf
L
4699 },
4700
592a252b 4701 /* PREFIX_VEX_0F16 */
09a2c6cf 4702 {
592a252b 4703 { MOD_TABLE (MOD_VEX_0F16_PREFIX_0) },
ec6f095a 4704 { "vmovshdup", { XM, EXx }, 0 },
592a252b 4705 { VEX_LEN_TABLE (VEX_LEN_0F16_P_2) },
5f754f58 4706 },
7c52e0e8 4707
592a252b 4708 /* PREFIX_VEX_0F2A */
5f754f58 4709 {
592d1631 4710 { Bad_Opcode },
2b7bcc87 4711 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Edq }, 0 },
592d1631 4712 { Bad_Opcode },
2b7bcc87 4713 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Edq }, 0 },
5f754f58 4714 },
7c52e0e8 4715
592a252b 4716 /* PREFIX_VEX_0F2C */
5f754f58 4717 {
592d1631 4718 { Bad_Opcode },
2b7bcc87 4719 { "vcvttss2si", { Gdq, EXdScalar }, 0 },
592d1631 4720 { Bad_Opcode },
2b7bcc87 4721 { "vcvttsd2si", { Gdq, EXqScalar }, 0 },
5f754f58 4722 },
7c52e0e8 4723
592a252b 4724 /* PREFIX_VEX_0F2D */
7c52e0e8 4725 {
592d1631 4726 { Bad_Opcode },
2b7bcc87 4727 { "vcvtss2si", { Gdq, EXdScalar }, 0 },
592d1631 4728 { Bad_Opcode },
2b7bcc87 4729 { "vcvtsd2si", { Gdq, EXqScalar }, 0 },
7c52e0e8
L
4730 },
4731
592a252b 4732 /* PREFIX_VEX_0F2E */
7c52e0e8 4733 {
ec6f095a 4734 { "vucomiss", { XMScalar, EXdScalar }, 0 },
592d1631 4735 { Bad_Opcode },
ec6f095a 4736 { "vucomisd", { XMScalar, EXqScalar }, 0 },
7c52e0e8
L
4737 },
4738
592a252b 4739 /* PREFIX_VEX_0F2F */
7c52e0e8 4740 {
ec6f095a 4741 { "vcomiss", { XMScalar, EXdScalar }, 0 },
592d1631 4742 { Bad_Opcode },
ec6f095a 4743 { "vcomisd", { XMScalar, EXqScalar }, 0 },
7c52e0e8
L
4744 },
4745
43234a1e
L
4746 /* PREFIX_VEX_0F41 */
4747 {
4748 { VEX_LEN_TABLE (VEX_LEN_0F41_P_0) },
1ba585e8
IT
4749 { Bad_Opcode },
4750 { VEX_LEN_TABLE (VEX_LEN_0F41_P_2) },
43234a1e
L
4751 },
4752
4753 /* PREFIX_VEX_0F42 */
4754 {
4755 { VEX_LEN_TABLE (VEX_LEN_0F42_P_0) },
1ba585e8
IT
4756 { Bad_Opcode },
4757 { VEX_LEN_TABLE (VEX_LEN_0F42_P_2) },
43234a1e
L
4758 },
4759
4760 /* PREFIX_VEX_0F44 */
4761 {
4762 { VEX_LEN_TABLE (VEX_LEN_0F44_P_0) },
1ba585e8
IT
4763 { Bad_Opcode },
4764 { VEX_LEN_TABLE (VEX_LEN_0F44_P_2) },
43234a1e
L
4765 },
4766
4767 /* PREFIX_VEX_0F45 */
4768 {
4769 { VEX_LEN_TABLE (VEX_LEN_0F45_P_0) },
1ba585e8
IT
4770 { Bad_Opcode },
4771 { VEX_LEN_TABLE (VEX_LEN_0F45_P_2) },
43234a1e
L
4772 },
4773
4774 /* PREFIX_VEX_0F46 */
4775 {
4776 { VEX_LEN_TABLE (VEX_LEN_0F46_P_0) },
1ba585e8
IT
4777 { Bad_Opcode },
4778 { VEX_LEN_TABLE (VEX_LEN_0F46_P_2) },
43234a1e
L
4779 },
4780
4781 /* PREFIX_VEX_0F47 */
4782 {
4783 { VEX_LEN_TABLE (VEX_LEN_0F47_P_0) },
1ba585e8
IT
4784 { Bad_Opcode },
4785 { VEX_LEN_TABLE (VEX_LEN_0F47_P_2) },
43234a1e
L
4786 },
4787
1ba585e8 4788 /* PREFIX_VEX_0F4A */
43234a1e 4789 {
1ba585e8 4790 { VEX_LEN_TABLE (VEX_LEN_0F4A_P_0) },
43234a1e 4791 { Bad_Opcode },
1ba585e8
IT
4792 { VEX_LEN_TABLE (VEX_LEN_0F4A_P_2) },
4793 },
4794
4795 /* PREFIX_VEX_0F4B */
4796 {
4797 { VEX_LEN_TABLE (VEX_LEN_0F4B_P_0) },
43234a1e
L
4798 { Bad_Opcode },
4799 { VEX_LEN_TABLE (VEX_LEN_0F4B_P_2) },
4800 },
4801
592a252b 4802 /* PREFIX_VEX_0F51 */
7c52e0e8 4803 {
ec6f095a
L
4804 { "vsqrtps", { XM, EXx }, 0 },
4805 { "vsqrtss", { XMScalar, VexScalar, EXdScalar }, 0 },
4806 { "vsqrtpd", { XM, EXx }, 0 },
4807 { "vsqrtsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4808 },
4809
592a252b 4810 /* PREFIX_VEX_0F52 */
7c52e0e8 4811 {
ec6f095a
L
4812 { "vrsqrtps", { XM, EXx }, 0 },
4813 { "vrsqrtss", { XMScalar, VexScalar, EXdScalar }, 0 },
7c52e0e8
L
4814 },
4815
592a252b 4816 /* PREFIX_VEX_0F53 */
7c52e0e8 4817 {
ec6f095a
L
4818 { "vrcpps", { XM, EXx }, 0 },
4819 { "vrcpss", { XMScalar, VexScalar, EXdScalar }, 0 },
7c52e0e8
L
4820 },
4821
592a252b 4822 /* PREFIX_VEX_0F58 */
7c52e0e8 4823 {
ec6f095a
L
4824 { "vaddps", { XM, Vex, EXx }, 0 },
4825 { "vaddss", { XMScalar, VexScalar, EXdScalar }, 0 },
4826 { "vaddpd", { XM, Vex, EXx }, 0 },
4827 { "vaddsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4828 },
4829
592a252b 4830 /* PREFIX_VEX_0F59 */
7c52e0e8 4831 {
ec6f095a
L
4832 { "vmulps", { XM, Vex, EXx }, 0 },
4833 { "vmulss", { XMScalar, VexScalar, EXdScalar }, 0 },
4834 { "vmulpd", { XM, Vex, EXx }, 0 },
4835 { "vmulsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4836 },
4837
592a252b 4838 /* PREFIX_VEX_0F5A */
7c52e0e8 4839 {
ec6f095a
L
4840 { "vcvtps2pd", { XM, EXxmmq }, 0 },
4841 { "vcvtss2sd", { XMScalar, VexScalar, EXdScalar }, 0 },
4842 { "vcvtpd2ps%XY",{ XMM, EXx }, 0 },
4843 { "vcvtsd2ss", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4844 },
4845
592a252b 4846 /* PREFIX_VEX_0F5B */
7c52e0e8 4847 {
ec6f095a
L
4848 { "vcvtdq2ps", { XM, EXx }, 0 },
4849 { "vcvttps2dq", { XM, EXx }, 0 },
4850 { "vcvtps2dq", { XM, EXx }, 0 },
7c52e0e8
L
4851 },
4852
592a252b 4853 /* PREFIX_VEX_0F5C */
7c52e0e8 4854 {
ec6f095a
L
4855 { "vsubps", { XM, Vex, EXx }, 0 },
4856 { "vsubss", { XMScalar, VexScalar, EXdScalar }, 0 },
4857 { "vsubpd", { XM, Vex, EXx }, 0 },
4858 { "vsubsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4859 },
4860
592a252b 4861 /* PREFIX_VEX_0F5D */
7c52e0e8 4862 {
ec6f095a
L
4863 { "vminps", { XM, Vex, EXx }, 0 },
4864 { "vminss", { XMScalar, VexScalar, EXdScalar }, 0 },
4865 { "vminpd", { XM, Vex, EXx }, 0 },
4866 { "vminsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4867 },
4868
592a252b 4869 /* PREFIX_VEX_0F5E */
7c52e0e8 4870 {
ec6f095a
L
4871 { "vdivps", { XM, Vex, EXx }, 0 },
4872 { "vdivss", { XMScalar, VexScalar, EXdScalar }, 0 },
4873 { "vdivpd", { XM, Vex, EXx }, 0 },
4874 { "vdivsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4875 },
4876
592a252b 4877 /* PREFIX_VEX_0F5F */
7c52e0e8 4878 {
ec6f095a
L
4879 { "vmaxps", { XM, Vex, EXx }, 0 },
4880 { "vmaxss", { XMScalar, VexScalar, EXdScalar }, 0 },
4881 { "vmaxpd", { XM, Vex, EXx }, 0 },
4882 { "vmaxsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4883 },
4884
592a252b 4885 /* PREFIX_VEX_0F60 */
7c52e0e8 4886 {
592d1631
L
4887 { Bad_Opcode },
4888 { Bad_Opcode },
ec6f095a 4889 { "vpunpcklbw", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4890 },
4891
592a252b 4892 /* PREFIX_VEX_0F61 */
7c52e0e8 4893 {
592d1631
L
4894 { Bad_Opcode },
4895 { Bad_Opcode },
ec6f095a 4896 { "vpunpcklwd", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4897 },
4898
592a252b 4899 /* PREFIX_VEX_0F62 */
7c52e0e8 4900 {
592d1631
L
4901 { Bad_Opcode },
4902 { Bad_Opcode },
ec6f095a 4903 { "vpunpckldq", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4904 },
4905
592a252b 4906 /* PREFIX_VEX_0F63 */
7c52e0e8 4907 {
592d1631
L
4908 { Bad_Opcode },
4909 { Bad_Opcode },
ec6f095a 4910 { "vpacksswb", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4911 },
4912
592a252b 4913 /* PREFIX_VEX_0F64 */
7c52e0e8 4914 {
592d1631
L
4915 { Bad_Opcode },
4916 { Bad_Opcode },
ec6f095a 4917 { "vpcmpgtb", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4918 },
4919
592a252b 4920 /* PREFIX_VEX_0F65 */
7c52e0e8 4921 {
592d1631
L
4922 { Bad_Opcode },
4923 { Bad_Opcode },
ec6f095a 4924 { "vpcmpgtw", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4925 },
4926
592a252b 4927 /* PREFIX_VEX_0F66 */
7c52e0e8 4928 {
592d1631
L
4929 { Bad_Opcode },
4930 { Bad_Opcode },
ec6f095a 4931 { "vpcmpgtd", { XM, Vex, EXx }, 0 },
7c52e0e8 4932 },
6439fc28 4933
592a252b 4934 /* PREFIX_VEX_0F67 */
331d2d0d 4935 {
592d1631
L
4936 { Bad_Opcode },
4937 { Bad_Opcode },
ec6f095a 4938 { "vpackuswb", { XM, Vex, EXx }, 0 },
c0f3af97
L
4939 },
4940
592a252b 4941 /* PREFIX_VEX_0F68 */
c0f3af97 4942 {
592d1631
L
4943 { Bad_Opcode },
4944 { Bad_Opcode },
ec6f095a 4945 { "vpunpckhbw", { XM, Vex, EXx }, 0 },
c0f3af97
L
4946 },
4947
592a252b 4948 /* PREFIX_VEX_0F69 */
c0f3af97 4949 {
592d1631
L
4950 { Bad_Opcode },
4951 { Bad_Opcode },
ec6f095a 4952 { "vpunpckhwd", { XM, Vex, EXx }, 0 },
c0f3af97
L
4953 },
4954
592a252b 4955 /* PREFIX_VEX_0F6A */
c0f3af97 4956 {
592d1631
L
4957 { Bad_Opcode },
4958 { Bad_Opcode },
ec6f095a 4959 { "vpunpckhdq", { XM, Vex, EXx }, 0 },
c0f3af97
L
4960 },
4961
592a252b 4962 /* PREFIX_VEX_0F6B */
c0f3af97 4963 {
592d1631
L
4964 { Bad_Opcode },
4965 { Bad_Opcode },
ec6f095a 4966 { "vpackssdw", { XM, Vex, EXx }, 0 },
c0f3af97
L
4967 },
4968
592a252b 4969 /* PREFIX_VEX_0F6C */
c0f3af97 4970 {
592d1631
L
4971 { Bad_Opcode },
4972 { Bad_Opcode },
ec6f095a 4973 { "vpunpcklqdq", { XM, Vex, EXx }, 0 },
c0f3af97
L
4974 },
4975
592a252b 4976 /* PREFIX_VEX_0F6D */
c0f3af97 4977 {
592d1631
L
4978 { Bad_Opcode },
4979 { Bad_Opcode },
ec6f095a 4980 { "vpunpckhqdq", { XM, Vex, EXx }, 0 },
c0f3af97
L
4981 },
4982
592a252b 4983 /* PREFIX_VEX_0F6E */
c0f3af97 4984 {
592d1631
L
4985 { Bad_Opcode },
4986 { Bad_Opcode },
592a252b 4987 { VEX_LEN_TABLE (VEX_LEN_0F6E_P_2) },
c0f3af97
L
4988 },
4989
592a252b 4990 /* PREFIX_VEX_0F6F */
c0f3af97 4991 {
592d1631 4992 { Bad_Opcode },
ec6f095a
L
4993 { "vmovdqu", { XM, EXx }, 0 },
4994 { "vmovdqa", { XM, EXx }, 0 },
c0f3af97
L
4995 },
4996
592a252b 4997 /* PREFIX_VEX_0F70 */
c0f3af97 4998 {
592d1631 4999 { Bad_Opcode },
ec6f095a
L
5000 { "vpshufhw", { XM, EXx, Ib }, 0 },
5001 { "vpshufd", { XM, EXx, Ib }, 0 },
5002 { "vpshuflw", { XM, EXx, Ib }, 0 },
c0f3af97
L
5003 },
5004
592a252b 5005 /* PREFIX_VEX_0F71_REG_2 */
c0f3af97 5006 {
592d1631
L
5007 { Bad_Opcode },
5008 { Bad_Opcode },
ec6f095a 5009 { "vpsrlw", { Vex, XS, Ib }, 0 },
c0f3af97
L
5010 },
5011
592a252b 5012 /* PREFIX_VEX_0F71_REG_4 */
c0f3af97 5013 {
592d1631
L
5014 { Bad_Opcode },
5015 { Bad_Opcode },
ec6f095a 5016 { "vpsraw", { Vex, XS, Ib }, 0 },
c0f3af97
L
5017 },
5018
592a252b 5019 /* PREFIX_VEX_0F71_REG_6 */
c0f3af97 5020 {
592d1631
L
5021 { Bad_Opcode },
5022 { Bad_Opcode },
ec6f095a 5023 { "vpsllw", { Vex, XS, Ib }, 0 },
c0f3af97
L
5024 },
5025
592a252b 5026 /* PREFIX_VEX_0F72_REG_2 */
c0f3af97 5027 {
592d1631
L
5028 { Bad_Opcode },
5029 { Bad_Opcode },
ec6f095a 5030 { "vpsrld", { Vex, XS, Ib }, 0 },
c0f3af97
L
5031 },
5032
592a252b 5033 /* PREFIX_VEX_0F72_REG_4 */
c0f3af97 5034 {
592d1631
L
5035 { Bad_Opcode },
5036 { Bad_Opcode },
ec6f095a 5037 { "vpsrad", { Vex, XS, Ib }, 0 },
c0f3af97
L
5038 },
5039
592a252b 5040 /* PREFIX_VEX_0F72_REG_6 */
c0f3af97 5041 {
592d1631
L
5042 { Bad_Opcode },
5043 { Bad_Opcode },
ec6f095a 5044 { "vpslld", { Vex, XS, Ib }, 0 },
c0f3af97
L
5045 },
5046
592a252b 5047 /* PREFIX_VEX_0F73_REG_2 */
c0f3af97 5048 {
592d1631
L
5049 { Bad_Opcode },
5050 { Bad_Opcode },
ec6f095a 5051 { "vpsrlq", { Vex, XS, Ib }, 0 },
c0f3af97
L
5052 },
5053
592a252b 5054 /* PREFIX_VEX_0F73_REG_3 */
c0f3af97 5055 {
592d1631
L
5056 { Bad_Opcode },
5057 { Bad_Opcode },
ec6f095a 5058 { "vpsrldq", { Vex, XS, Ib }, 0 },
c0f3af97
L
5059 },
5060
592a252b 5061 /* PREFIX_VEX_0F73_REG_6 */
c0f3af97 5062 {
592d1631
L
5063 { Bad_Opcode },
5064 { Bad_Opcode },
ec6f095a 5065 { "vpsllq", { Vex, XS, Ib }, 0 },
c0f3af97
L
5066 },
5067
592a252b 5068 /* PREFIX_VEX_0F73_REG_7 */
c0f3af97 5069 {
592d1631
L
5070 { Bad_Opcode },
5071 { Bad_Opcode },
ec6f095a 5072 { "vpslldq", { Vex, XS, Ib }, 0 },
c0f3af97
L
5073 },
5074
592a252b 5075 /* PREFIX_VEX_0F74 */
c0f3af97 5076 {
592d1631
L
5077 { Bad_Opcode },
5078 { Bad_Opcode },
ec6f095a 5079 { "vpcmpeqb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5080 },
5081
592a252b 5082 /* PREFIX_VEX_0F75 */
c0f3af97 5083 {
592d1631
L
5084 { Bad_Opcode },
5085 { Bad_Opcode },
ec6f095a 5086 { "vpcmpeqw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5087 },
5088
592a252b 5089 /* PREFIX_VEX_0F76 */
c0f3af97 5090 {
592d1631
L
5091 { Bad_Opcode },
5092 { Bad_Opcode },
ec6f095a 5093 { "vpcmpeqd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5094 },
5095
592a252b 5096 /* PREFIX_VEX_0F77 */
c0f3af97 5097 {
ec6f095a 5098 { VEX_LEN_TABLE (VEX_LEN_0F77_P_0) },
c0f3af97
L
5099 },
5100
592a252b 5101 /* PREFIX_VEX_0F7C */
c0f3af97 5102 {
592d1631
L
5103 { Bad_Opcode },
5104 { Bad_Opcode },
ec6f095a
L
5105 { "vhaddpd", { XM, Vex, EXx }, 0 },
5106 { "vhaddps", { XM, Vex, EXx }, 0 },
c0f3af97
L
5107 },
5108
592a252b 5109 /* PREFIX_VEX_0F7D */
c0f3af97 5110 {
592d1631
L
5111 { Bad_Opcode },
5112 { Bad_Opcode },
ec6f095a
L
5113 { "vhsubpd", { XM, Vex, EXx }, 0 },
5114 { "vhsubps", { XM, Vex, EXx }, 0 },
c0f3af97
L
5115 },
5116
592a252b 5117 /* PREFIX_VEX_0F7E */
c0f3af97 5118 {
592d1631 5119 { Bad_Opcode },
592a252b
L
5120 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_1) },
5121 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_2) },
c0f3af97
L
5122 },
5123
592a252b 5124 /* PREFIX_VEX_0F7F */
c0f3af97 5125 {
592d1631 5126 { Bad_Opcode },
ec6f095a
L
5127 { "vmovdqu", { EXxS, XM }, 0 },
5128 { "vmovdqa", { EXxS, XM }, 0 },
c0f3af97
L
5129 },
5130
43234a1e
L
5131 /* PREFIX_VEX_0F90 */
5132 {
5133 { VEX_LEN_TABLE (VEX_LEN_0F90_P_0) },
1ba585e8
IT
5134 { Bad_Opcode },
5135 { VEX_LEN_TABLE (VEX_LEN_0F90_P_2) },
43234a1e
L
5136 },
5137
5138 /* PREFIX_VEX_0F91 */
5139 {
5140 { VEX_LEN_TABLE (VEX_LEN_0F91_P_0) },
1ba585e8
IT
5141 { Bad_Opcode },
5142 { VEX_LEN_TABLE (VEX_LEN_0F91_P_2) },
43234a1e
L
5143 },
5144
5145 /* PREFIX_VEX_0F92 */
5146 {
5147 { VEX_LEN_TABLE (VEX_LEN_0F92_P_0) },
1ba585e8 5148 { Bad_Opcode },
90a915bf 5149 { VEX_LEN_TABLE (VEX_LEN_0F92_P_2) },
1ba585e8 5150 { VEX_LEN_TABLE (VEX_LEN_0F92_P_3) },
43234a1e
L
5151 },
5152
5153 /* PREFIX_VEX_0F93 */
5154 {
5155 { VEX_LEN_TABLE (VEX_LEN_0F93_P_0) },
1ba585e8 5156 { Bad_Opcode },
90a915bf 5157 { VEX_LEN_TABLE (VEX_LEN_0F93_P_2) },
1ba585e8 5158 { VEX_LEN_TABLE (VEX_LEN_0F93_P_3) },
43234a1e
L
5159 },
5160
5161 /* PREFIX_VEX_0F98 */
5162 {
5163 { VEX_LEN_TABLE (VEX_LEN_0F98_P_0) },
1ba585e8
IT
5164 { Bad_Opcode },
5165 { VEX_LEN_TABLE (VEX_LEN_0F98_P_2) },
5166 },
5167
5168 /* PREFIX_VEX_0F99 */
5169 {
5170 { VEX_LEN_TABLE (VEX_LEN_0F99_P_0) },
5171 { Bad_Opcode },
5172 { VEX_LEN_TABLE (VEX_LEN_0F99_P_2) },
43234a1e
L
5173 },
5174
592a252b 5175 /* PREFIX_VEX_0FC2 */
c0f3af97 5176 {
ec6f095a
L
5177 { "vcmpps", { XM, Vex, EXx, VCMP }, 0 },
5178 { "vcmpss", { XMScalar, VexScalar, EXdScalar, VCMP }, 0 },
5179 { "vcmppd", { XM, Vex, EXx, VCMP }, 0 },
5180 { "vcmpsd", { XMScalar, VexScalar, EXqScalar, VCMP }, 0 },
c0f3af97
L
5181 },
5182
592a252b 5183 /* PREFIX_VEX_0FC4 */
c0f3af97 5184 {
592d1631
L
5185 { Bad_Opcode },
5186 { Bad_Opcode },
592a252b 5187 { VEX_LEN_TABLE (VEX_LEN_0FC4_P_2) },
c0f3af97
L
5188 },
5189
592a252b 5190 /* PREFIX_VEX_0FC5 */
c0f3af97 5191 {
592d1631
L
5192 { Bad_Opcode },
5193 { Bad_Opcode },
592a252b 5194 { VEX_LEN_TABLE (VEX_LEN_0FC5_P_2) },
c0f3af97
L
5195 },
5196
592a252b 5197 /* PREFIX_VEX_0FD0 */
c0f3af97 5198 {
592d1631
L
5199 { Bad_Opcode },
5200 { Bad_Opcode },
ec6f095a
L
5201 { "vaddsubpd", { XM, Vex, EXx }, 0 },
5202 { "vaddsubps", { XM, Vex, EXx }, 0 },
c0f3af97
L
5203 },
5204
592a252b 5205 /* PREFIX_VEX_0FD1 */
c0f3af97 5206 {
592d1631
L
5207 { Bad_Opcode },
5208 { Bad_Opcode },
ec6f095a 5209 { "vpsrlw", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5210 },
5211
592a252b 5212 /* PREFIX_VEX_0FD2 */
c0f3af97 5213 {
592d1631
L
5214 { Bad_Opcode },
5215 { Bad_Opcode },
ec6f095a 5216 { "vpsrld", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5217 },
5218
592a252b 5219 /* PREFIX_VEX_0FD3 */
c0f3af97 5220 {
592d1631
L
5221 { Bad_Opcode },
5222 { Bad_Opcode },
ec6f095a 5223 { "vpsrlq", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5224 },
5225
592a252b 5226 /* PREFIX_VEX_0FD4 */
c0f3af97 5227 {
592d1631
L
5228 { Bad_Opcode },
5229 { Bad_Opcode },
ec6f095a 5230 { "vpaddq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5231 },
5232
592a252b 5233 /* PREFIX_VEX_0FD5 */
c0f3af97 5234 {
592d1631
L
5235 { Bad_Opcode },
5236 { Bad_Opcode },
ec6f095a 5237 { "vpmullw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5238 },
5239
592a252b 5240 /* PREFIX_VEX_0FD6 */
c0f3af97 5241 {
592d1631
L
5242 { Bad_Opcode },
5243 { Bad_Opcode },
592a252b 5244 { VEX_LEN_TABLE (VEX_LEN_0FD6_P_2) },
c0f3af97
L
5245 },
5246
592a252b 5247 /* PREFIX_VEX_0FD7 */
c0f3af97 5248 {
592d1631
L
5249 { Bad_Opcode },
5250 { Bad_Opcode },
592a252b 5251 { MOD_TABLE (MOD_VEX_0FD7_PREFIX_2) },
c0f3af97
L
5252 },
5253
592a252b 5254 /* PREFIX_VEX_0FD8 */
c0f3af97 5255 {
592d1631
L
5256 { Bad_Opcode },
5257 { Bad_Opcode },
ec6f095a 5258 { "vpsubusb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5259 },
5260
592a252b 5261 /* PREFIX_VEX_0FD9 */
c0f3af97 5262 {
592d1631
L
5263 { Bad_Opcode },
5264 { Bad_Opcode },
ec6f095a 5265 { "vpsubusw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5266 },
5267
592a252b 5268 /* PREFIX_VEX_0FDA */
c0f3af97 5269 {
592d1631
L
5270 { Bad_Opcode },
5271 { Bad_Opcode },
ec6f095a 5272 { "vpminub", { XM, Vex, EXx }, 0 },
c0f3af97
L
5273 },
5274
592a252b 5275 /* PREFIX_VEX_0FDB */
c0f3af97 5276 {
592d1631
L
5277 { Bad_Opcode },
5278 { Bad_Opcode },
ec6f095a 5279 { "vpand", { XM, Vex, EXx }, 0 },
c0f3af97
L
5280 },
5281
592a252b 5282 /* PREFIX_VEX_0FDC */
c0f3af97 5283 {
592d1631
L
5284 { Bad_Opcode },
5285 { Bad_Opcode },
ec6f095a 5286 { "vpaddusb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5287 },
5288
592a252b 5289 /* PREFIX_VEX_0FDD */
c0f3af97 5290 {
592d1631
L
5291 { Bad_Opcode },
5292 { Bad_Opcode },
ec6f095a 5293 { "vpaddusw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5294 },
5295
592a252b 5296 /* PREFIX_VEX_0FDE */
c0f3af97 5297 {
592d1631
L
5298 { Bad_Opcode },
5299 { Bad_Opcode },
ec6f095a 5300 { "vpmaxub", { XM, Vex, EXx }, 0 },
c0f3af97
L
5301 },
5302
592a252b 5303 /* PREFIX_VEX_0FDF */
c0f3af97 5304 {
592d1631
L
5305 { Bad_Opcode },
5306 { Bad_Opcode },
ec6f095a 5307 { "vpandn", { XM, Vex, EXx }, 0 },
c0f3af97
L
5308 },
5309
592a252b 5310 /* PREFIX_VEX_0FE0 */
c0f3af97 5311 {
592d1631
L
5312 { Bad_Opcode },
5313 { Bad_Opcode },
ec6f095a 5314 { "vpavgb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5315 },
5316
592a252b 5317 /* PREFIX_VEX_0FE1 */
c0f3af97 5318 {
592d1631
L
5319 { Bad_Opcode },
5320 { Bad_Opcode },
ec6f095a 5321 { "vpsraw", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5322 },
5323
592a252b 5324 /* PREFIX_VEX_0FE2 */
c0f3af97 5325 {
592d1631
L
5326 { Bad_Opcode },
5327 { Bad_Opcode },
ec6f095a 5328 { "vpsrad", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5329 },
5330
592a252b 5331 /* PREFIX_VEX_0FE3 */
c0f3af97 5332 {
592d1631
L
5333 { Bad_Opcode },
5334 { Bad_Opcode },
ec6f095a 5335 { "vpavgw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5336 },
5337
592a252b 5338 /* PREFIX_VEX_0FE4 */
c0f3af97 5339 {
592d1631
L
5340 { Bad_Opcode },
5341 { Bad_Opcode },
ec6f095a 5342 { "vpmulhuw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5343 },
5344
592a252b 5345 /* PREFIX_VEX_0FE5 */
c0f3af97 5346 {
592d1631
L
5347 { Bad_Opcode },
5348 { Bad_Opcode },
ec6f095a 5349 { "vpmulhw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5350 },
5351
592a252b 5352 /* PREFIX_VEX_0FE6 */
c0f3af97 5353 {
592d1631 5354 { Bad_Opcode },
ec6f095a
L
5355 { "vcvtdq2pd", { XM, EXxmmq }, 0 },
5356 { "vcvttpd2dq%XY", { XMM, EXx }, 0 },
5357 { "vcvtpd2dq%XY", { XMM, EXx }, 0 },
c0f3af97
L
5358 },
5359
592a252b 5360 /* PREFIX_VEX_0FE7 */
c0f3af97 5361 {
592d1631
L
5362 { Bad_Opcode },
5363 { Bad_Opcode },
592a252b 5364 { MOD_TABLE (MOD_VEX_0FE7_PREFIX_2) },
c0f3af97
L
5365 },
5366
592a252b 5367 /* PREFIX_VEX_0FE8 */
c0f3af97 5368 {
592d1631
L
5369 { Bad_Opcode },
5370 { Bad_Opcode },
ec6f095a 5371 { "vpsubsb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5372 },
5373
592a252b 5374 /* PREFIX_VEX_0FE9 */
c0f3af97 5375 {
592d1631
L
5376 { Bad_Opcode },
5377 { Bad_Opcode },
ec6f095a 5378 { "vpsubsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5379 },
5380
592a252b 5381 /* PREFIX_VEX_0FEA */
c0f3af97 5382 {
592d1631
L
5383 { Bad_Opcode },
5384 { Bad_Opcode },
ec6f095a 5385 { "vpminsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5386 },
5387
592a252b 5388 /* PREFIX_VEX_0FEB */
c0f3af97 5389 {
592d1631
L
5390 { Bad_Opcode },
5391 { Bad_Opcode },
ec6f095a 5392 { "vpor", { XM, Vex, EXx }, 0 },
c0f3af97
L
5393 },
5394
592a252b 5395 /* PREFIX_VEX_0FEC */
c0f3af97 5396 {
592d1631
L
5397 { Bad_Opcode },
5398 { Bad_Opcode },
ec6f095a 5399 { "vpaddsb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5400 },
5401
592a252b 5402 /* PREFIX_VEX_0FED */
c0f3af97 5403 {
592d1631
L
5404 { Bad_Opcode },
5405 { Bad_Opcode },
ec6f095a 5406 { "vpaddsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5407 },
5408
592a252b 5409 /* PREFIX_VEX_0FEE */
c0f3af97 5410 {
592d1631
L
5411 { Bad_Opcode },
5412 { Bad_Opcode },
ec6f095a 5413 { "vpmaxsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5414 },
5415
592a252b 5416 /* PREFIX_VEX_0FEF */
c0f3af97 5417 {
592d1631
L
5418 { Bad_Opcode },
5419 { Bad_Opcode },
ec6f095a 5420 { "vpxor", { XM, Vex, EXx }, 0 },
c0f3af97
L
5421 },
5422
592a252b 5423 /* PREFIX_VEX_0FF0 */
c0f3af97 5424 {
592d1631
L
5425 { Bad_Opcode },
5426 { Bad_Opcode },
5427 { Bad_Opcode },
592a252b 5428 { MOD_TABLE (MOD_VEX_0FF0_PREFIX_3) },
c0f3af97
L
5429 },
5430
592a252b 5431 /* PREFIX_VEX_0FF1 */
c0f3af97 5432 {
592d1631
L
5433 { Bad_Opcode },
5434 { Bad_Opcode },
ec6f095a 5435 { "vpsllw", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5436 },
5437
592a252b 5438 /* PREFIX_VEX_0FF2 */
c0f3af97 5439 {
592d1631
L
5440 { Bad_Opcode },
5441 { Bad_Opcode },
ec6f095a 5442 { "vpslld", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5443 },
5444
592a252b 5445 /* PREFIX_VEX_0FF3 */
c0f3af97 5446 {
592d1631
L
5447 { Bad_Opcode },
5448 { Bad_Opcode },
ec6f095a 5449 { "vpsllq", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5450 },
5451
592a252b 5452 /* PREFIX_VEX_0FF4 */
c0f3af97 5453 {
592d1631
L
5454 { Bad_Opcode },
5455 { Bad_Opcode },
ec6f095a 5456 { "vpmuludq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5457 },
5458
592a252b 5459 /* PREFIX_VEX_0FF5 */
c0f3af97 5460 {
592d1631
L
5461 { Bad_Opcode },
5462 { Bad_Opcode },
ec6f095a 5463 { "vpmaddwd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5464 },
5465
592a252b 5466 /* PREFIX_VEX_0FF6 */
c0f3af97 5467 {
592d1631
L
5468 { Bad_Opcode },
5469 { Bad_Opcode },
ec6f095a 5470 { "vpsadbw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5471 },
5472
592a252b 5473 /* PREFIX_VEX_0FF7 */
c0f3af97 5474 {
592d1631
L
5475 { Bad_Opcode },
5476 { Bad_Opcode },
592a252b 5477 { VEX_LEN_TABLE (VEX_LEN_0FF7_P_2) },
c0f3af97
L
5478 },
5479
592a252b 5480 /* PREFIX_VEX_0FF8 */
c0f3af97 5481 {
592d1631
L
5482 { Bad_Opcode },
5483 { Bad_Opcode },
ec6f095a 5484 { "vpsubb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5485 },
5486
592a252b 5487 /* PREFIX_VEX_0FF9 */
c0f3af97 5488 {
592d1631
L
5489 { Bad_Opcode },
5490 { Bad_Opcode },
ec6f095a 5491 { "vpsubw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5492 },
5493
592a252b 5494 /* PREFIX_VEX_0FFA */
c0f3af97 5495 {
592d1631
L
5496 { Bad_Opcode },
5497 { Bad_Opcode },
ec6f095a 5498 { "vpsubd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5499 },
5500
592a252b 5501 /* PREFIX_VEX_0FFB */
c0f3af97 5502 {
592d1631
L
5503 { Bad_Opcode },
5504 { Bad_Opcode },
ec6f095a 5505 { "vpsubq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5506 },
5507
592a252b 5508 /* PREFIX_VEX_0FFC */
c0f3af97 5509 {
592d1631
L
5510 { Bad_Opcode },
5511 { Bad_Opcode },
ec6f095a 5512 { "vpaddb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5513 },
5514
592a252b 5515 /* PREFIX_VEX_0FFD */
c0f3af97 5516 {
592d1631
L
5517 { Bad_Opcode },
5518 { Bad_Opcode },
ec6f095a 5519 { "vpaddw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5520 },
5521
592a252b 5522 /* PREFIX_VEX_0FFE */
c0f3af97 5523 {
592d1631
L
5524 { Bad_Opcode },
5525 { Bad_Opcode },
ec6f095a 5526 { "vpaddd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5527 },
5528
592a252b 5529 /* PREFIX_VEX_0F3800 */
c0f3af97 5530 {
592d1631
L
5531 { Bad_Opcode },
5532 { Bad_Opcode },
ec6f095a 5533 { "vpshufb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5534 },
5535
592a252b 5536 /* PREFIX_VEX_0F3801 */
c0f3af97 5537 {
592d1631
L
5538 { Bad_Opcode },
5539 { Bad_Opcode },
ec6f095a 5540 { "vphaddw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5541 },
5542
592a252b 5543 /* PREFIX_VEX_0F3802 */
c0f3af97 5544 {
592d1631
L
5545 { Bad_Opcode },
5546 { Bad_Opcode },
ec6f095a 5547 { "vphaddd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5548 },
5549
592a252b 5550 /* PREFIX_VEX_0F3803 */
c0f3af97 5551 {
592d1631
L
5552 { Bad_Opcode },
5553 { Bad_Opcode },
ec6f095a 5554 { "vphaddsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5555 },
5556
592a252b 5557 /* PREFIX_VEX_0F3804 */
c0f3af97 5558 {
592d1631
L
5559 { Bad_Opcode },
5560 { Bad_Opcode },
ec6f095a 5561 { "vpmaddubsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5562 },
5563
592a252b 5564 /* PREFIX_VEX_0F3805 */
c0f3af97 5565 {
592d1631
L
5566 { Bad_Opcode },
5567 { Bad_Opcode },
ec6f095a 5568 { "vphsubw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5569 },
5570
592a252b 5571 /* PREFIX_VEX_0F3806 */
c0f3af97 5572 {
592d1631
L
5573 { Bad_Opcode },
5574 { Bad_Opcode },
ec6f095a 5575 { "vphsubd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5576 },
5577
592a252b 5578 /* PREFIX_VEX_0F3807 */
c0f3af97 5579 {
592d1631
L
5580 { Bad_Opcode },
5581 { Bad_Opcode },
ec6f095a 5582 { "vphsubsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5583 },
5584
592a252b 5585 /* PREFIX_VEX_0F3808 */
c0f3af97 5586 {
592d1631
L
5587 { Bad_Opcode },
5588 { Bad_Opcode },
ec6f095a 5589 { "vpsignb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5590 },
5591
592a252b 5592 /* PREFIX_VEX_0F3809 */
c0f3af97 5593 {
592d1631
L
5594 { Bad_Opcode },
5595 { Bad_Opcode },
ec6f095a 5596 { "vpsignw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5597 },
5598
592a252b 5599 /* PREFIX_VEX_0F380A */
c0f3af97 5600 {
592d1631
L
5601 { Bad_Opcode },
5602 { Bad_Opcode },
ec6f095a 5603 { "vpsignd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5604 },
5605
592a252b 5606 /* PREFIX_VEX_0F380B */
c0f3af97 5607 {
592d1631
L
5608 { Bad_Opcode },
5609 { Bad_Opcode },
ec6f095a 5610 { "vpmulhrsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5611 },
5612
592a252b 5613 /* PREFIX_VEX_0F380C */
c0f3af97 5614 {
592d1631
L
5615 { Bad_Opcode },
5616 { Bad_Opcode },
592a252b 5617 { VEX_W_TABLE (VEX_W_0F380C_P_2) },
c0f3af97
L
5618 },
5619
592a252b 5620 /* PREFIX_VEX_0F380D */
c0f3af97 5621 {
592d1631
L
5622 { Bad_Opcode },
5623 { Bad_Opcode },
592a252b 5624 { VEX_W_TABLE (VEX_W_0F380D_P_2) },
c0f3af97
L
5625 },
5626
592a252b 5627 /* PREFIX_VEX_0F380E */
c0f3af97 5628 {
592d1631
L
5629 { Bad_Opcode },
5630 { Bad_Opcode },
592a252b 5631 { VEX_W_TABLE (VEX_W_0F380E_P_2) },
c0f3af97
L
5632 },
5633
592a252b 5634 /* PREFIX_VEX_0F380F */
c0f3af97 5635 {
592d1631
L
5636 { Bad_Opcode },
5637 { Bad_Opcode },
592a252b 5638 { VEX_W_TABLE (VEX_W_0F380F_P_2) },
c0f3af97
L
5639 },
5640
592a252b 5641 /* PREFIX_VEX_0F3813 */
c7b8aa3a
L
5642 {
5643 { Bad_Opcode },
5644 { Bad_Opcode },
bf890a93 5645 { "vcvtph2ps", { XM, EXxmmq }, 0 },
c7b8aa3a
L
5646 },
5647
6c30d220
L
5648 /* PREFIX_VEX_0F3816 */
5649 {
5650 { Bad_Opcode },
5651 { Bad_Opcode },
5652 { VEX_LEN_TABLE (VEX_LEN_0F3816_P_2) },
5653 },
5654
592a252b 5655 /* PREFIX_VEX_0F3817 */
c0f3af97 5656 {
592d1631
L
5657 { Bad_Opcode },
5658 { Bad_Opcode },
ec6f095a 5659 { "vptest", { XM, EXx }, 0 },
c0f3af97
L
5660 },
5661
592a252b 5662 /* PREFIX_VEX_0F3818 */
c0f3af97 5663 {
592d1631
L
5664 { Bad_Opcode },
5665 { Bad_Opcode },
6c30d220 5666 { VEX_W_TABLE (VEX_W_0F3818_P_2) },
c0f3af97
L
5667 },
5668
592a252b 5669 /* PREFIX_VEX_0F3819 */
c0f3af97 5670 {
592d1631
L
5671 { Bad_Opcode },
5672 { Bad_Opcode },
6c30d220 5673 { VEX_LEN_TABLE (VEX_LEN_0F3819_P_2) },
c0f3af97
L
5674 },
5675
592a252b 5676 /* PREFIX_VEX_0F381A */
c0f3af97 5677 {
592d1631
L
5678 { Bad_Opcode },
5679 { Bad_Opcode },
592a252b 5680 { MOD_TABLE (MOD_VEX_0F381A_PREFIX_2) },
c0f3af97
L
5681 },
5682
592a252b 5683 /* PREFIX_VEX_0F381C */
c0f3af97 5684 {
592d1631
L
5685 { Bad_Opcode },
5686 { Bad_Opcode },
ec6f095a 5687 { "vpabsb", { XM, EXx }, 0 },
c0f3af97
L
5688 },
5689
592a252b 5690 /* PREFIX_VEX_0F381D */
c0f3af97 5691 {
592d1631
L
5692 { Bad_Opcode },
5693 { Bad_Opcode },
ec6f095a 5694 { "vpabsw", { XM, EXx }, 0 },
c0f3af97
L
5695 },
5696
592a252b 5697 /* PREFIX_VEX_0F381E */
c0f3af97 5698 {
592d1631
L
5699 { Bad_Opcode },
5700 { Bad_Opcode },
ec6f095a 5701 { "vpabsd", { XM, EXx }, 0 },
c0f3af97
L
5702 },
5703
592a252b 5704 /* PREFIX_VEX_0F3820 */
c0f3af97 5705 {
592d1631
L
5706 { Bad_Opcode },
5707 { Bad_Opcode },
ec6f095a 5708 { "vpmovsxbw", { XM, EXxmmq }, 0 },
c0f3af97
L
5709 },
5710
592a252b 5711 /* PREFIX_VEX_0F3821 */
c0f3af97 5712 {
592d1631
L
5713 { Bad_Opcode },
5714 { Bad_Opcode },
ec6f095a 5715 { "vpmovsxbd", { XM, EXxmmqd }, 0 },
c0f3af97
L
5716 },
5717
592a252b 5718 /* PREFIX_VEX_0F3822 */
c0f3af97 5719 {
592d1631
L
5720 { Bad_Opcode },
5721 { Bad_Opcode },
ec6f095a 5722 { "vpmovsxbq", { XM, EXxmmdw }, 0 },
c0f3af97
L
5723 },
5724
592a252b 5725 /* PREFIX_VEX_0F3823 */
c0f3af97 5726 {
592d1631
L
5727 { Bad_Opcode },
5728 { Bad_Opcode },
ec6f095a 5729 { "vpmovsxwd", { XM, EXxmmq }, 0 },
c0f3af97
L
5730 },
5731
592a252b 5732 /* PREFIX_VEX_0F3824 */
c0f3af97 5733 {
592d1631
L
5734 { Bad_Opcode },
5735 { Bad_Opcode },
ec6f095a 5736 { "vpmovsxwq", { XM, EXxmmqd }, 0 },
c0f3af97
L
5737 },
5738
592a252b 5739 /* PREFIX_VEX_0F3825 */
c0f3af97 5740 {
592d1631
L
5741 { Bad_Opcode },
5742 { Bad_Opcode },
ec6f095a 5743 { "vpmovsxdq", { XM, EXxmmq }, 0 },
c0f3af97
L
5744 },
5745
592a252b 5746 /* PREFIX_VEX_0F3828 */
c0f3af97 5747 {
592d1631
L
5748 { Bad_Opcode },
5749 { Bad_Opcode },
ec6f095a 5750 { "vpmuldq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5751 },
5752
592a252b 5753 /* PREFIX_VEX_0F3829 */
c0f3af97 5754 {
592d1631
L
5755 { Bad_Opcode },
5756 { Bad_Opcode },
ec6f095a 5757 { "vpcmpeqq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5758 },
5759
592a252b 5760 /* PREFIX_VEX_0F382A */
c0f3af97 5761 {
592d1631
L
5762 { Bad_Opcode },
5763 { Bad_Opcode },
592a252b 5764 { MOD_TABLE (MOD_VEX_0F382A_PREFIX_2) },
c0f3af97
L
5765 },
5766
592a252b 5767 /* PREFIX_VEX_0F382B */
c0f3af97 5768 {
592d1631
L
5769 { Bad_Opcode },
5770 { Bad_Opcode },
ec6f095a 5771 { "vpackusdw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5772 },
5773
592a252b 5774 /* PREFIX_VEX_0F382C */
c0f3af97 5775 {
592d1631
L
5776 { Bad_Opcode },
5777 { Bad_Opcode },
592a252b 5778 { MOD_TABLE (MOD_VEX_0F382C_PREFIX_2) },
c0f3af97
L
5779 },
5780
592a252b 5781 /* PREFIX_VEX_0F382D */
c0f3af97 5782 {
592d1631
L
5783 { Bad_Opcode },
5784 { Bad_Opcode },
592a252b 5785 { MOD_TABLE (MOD_VEX_0F382D_PREFIX_2) },
c0f3af97
L
5786 },
5787
592a252b 5788 /* PREFIX_VEX_0F382E */
c0f3af97 5789 {
592d1631
L
5790 { Bad_Opcode },
5791 { Bad_Opcode },
592a252b 5792 { MOD_TABLE (MOD_VEX_0F382E_PREFIX_2) },
c0f3af97
L
5793 },
5794
592a252b 5795 /* PREFIX_VEX_0F382F */
c0f3af97 5796 {
592d1631
L
5797 { Bad_Opcode },
5798 { Bad_Opcode },
592a252b 5799 { MOD_TABLE (MOD_VEX_0F382F_PREFIX_2) },
c0f3af97
L
5800 },
5801
592a252b 5802 /* PREFIX_VEX_0F3830 */
c0f3af97 5803 {
592d1631
L
5804 { Bad_Opcode },
5805 { Bad_Opcode },
ec6f095a 5806 { "vpmovzxbw", { XM, EXxmmq }, 0 },
c0f3af97
L
5807 },
5808
592a252b 5809 /* PREFIX_VEX_0F3831 */
c0f3af97 5810 {
592d1631
L
5811 { Bad_Opcode },
5812 { Bad_Opcode },
ec6f095a 5813 { "vpmovzxbd", { XM, EXxmmqd }, 0 },
c0f3af97
L
5814 },
5815
592a252b 5816 /* PREFIX_VEX_0F3832 */
c0f3af97 5817 {
592d1631
L
5818 { Bad_Opcode },
5819 { Bad_Opcode },
ec6f095a 5820 { "vpmovzxbq", { XM, EXxmmdw }, 0 },
c0f3af97
L
5821 },
5822
592a252b 5823 /* PREFIX_VEX_0F3833 */
c0f3af97 5824 {
592d1631
L
5825 { Bad_Opcode },
5826 { Bad_Opcode },
ec6f095a 5827 { "vpmovzxwd", { XM, EXxmmq }, 0 },
c0f3af97
L
5828 },
5829
592a252b 5830 /* PREFIX_VEX_0F3834 */
c0f3af97 5831 {
592d1631
L
5832 { Bad_Opcode },
5833 { Bad_Opcode },
ec6f095a 5834 { "vpmovzxwq", { XM, EXxmmqd }, 0 },
c0f3af97
L
5835 },
5836
592a252b 5837 /* PREFIX_VEX_0F3835 */
c0f3af97 5838 {
592d1631
L
5839 { Bad_Opcode },
5840 { Bad_Opcode },
ec6f095a 5841 { "vpmovzxdq", { XM, EXxmmq }, 0 },
6c30d220
L
5842 },
5843
5844 /* PREFIX_VEX_0F3836 */
5845 {
5846 { Bad_Opcode },
5847 { Bad_Opcode },
5848 { VEX_LEN_TABLE (VEX_LEN_0F3836_P_2) },
c0f3af97
L
5849 },
5850
592a252b 5851 /* PREFIX_VEX_0F3837 */
c0f3af97 5852 {
592d1631
L
5853 { Bad_Opcode },
5854 { Bad_Opcode },
ec6f095a 5855 { "vpcmpgtq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5856 },
5857
592a252b 5858 /* PREFIX_VEX_0F3838 */
c0f3af97 5859 {
592d1631
L
5860 { Bad_Opcode },
5861 { Bad_Opcode },
ec6f095a 5862 { "vpminsb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5863 },
5864
592a252b 5865 /* PREFIX_VEX_0F3839 */
c0f3af97 5866 {
592d1631
L
5867 { Bad_Opcode },
5868 { Bad_Opcode },
ec6f095a 5869 { "vpminsd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5870 },
5871
592a252b 5872 /* PREFIX_VEX_0F383A */
c0f3af97 5873 {
592d1631
L
5874 { Bad_Opcode },
5875 { Bad_Opcode },
ec6f095a 5876 { "vpminuw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5877 },
5878
592a252b 5879 /* PREFIX_VEX_0F383B */
c0f3af97 5880 {
592d1631
L
5881 { Bad_Opcode },
5882 { Bad_Opcode },
ec6f095a 5883 { "vpminud", { XM, Vex, EXx }, 0 },
c0f3af97
L
5884 },
5885
592a252b 5886 /* PREFIX_VEX_0F383C */
c0f3af97 5887 {
592d1631
L
5888 { Bad_Opcode },
5889 { Bad_Opcode },
ec6f095a 5890 { "vpmaxsb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5891 },
5892
592a252b 5893 /* PREFIX_VEX_0F383D */
c0f3af97 5894 {
592d1631
L
5895 { Bad_Opcode },
5896 { Bad_Opcode },
ec6f095a 5897 { "vpmaxsd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5898 },
5899
592a252b 5900 /* PREFIX_VEX_0F383E */
c0f3af97 5901 {
592d1631
L
5902 { Bad_Opcode },
5903 { Bad_Opcode },
ec6f095a 5904 { "vpmaxuw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5905 },
5906
592a252b 5907 /* PREFIX_VEX_0F383F */
c0f3af97 5908 {
592d1631
L
5909 { Bad_Opcode },
5910 { Bad_Opcode },
ec6f095a 5911 { "vpmaxud", { XM, Vex, EXx }, 0 },
c0f3af97
L
5912 },
5913
592a252b 5914 /* PREFIX_VEX_0F3840 */
c0f3af97 5915 {
592d1631
L
5916 { Bad_Opcode },
5917 { Bad_Opcode },
ec6f095a 5918 { "vpmulld", { XM, Vex, EXx }, 0 },
c0f3af97
L
5919 },
5920
592a252b 5921 /* PREFIX_VEX_0F3841 */
c0f3af97 5922 {
592d1631
L
5923 { Bad_Opcode },
5924 { Bad_Opcode },
592a252b 5925 { VEX_LEN_TABLE (VEX_LEN_0F3841_P_2) },
c0f3af97
L
5926 },
5927
6c30d220
L
5928 /* PREFIX_VEX_0F3845 */
5929 {
5930 { Bad_Opcode },
5931 { Bad_Opcode },
bf890a93 5932 { "vpsrlv%LW", { XM, Vex, EXx }, 0 },
6c30d220
L
5933 },
5934
5935 /* PREFIX_VEX_0F3846 */
5936 {
5937 { Bad_Opcode },
5938 { Bad_Opcode },
5939 { VEX_W_TABLE (VEX_W_0F3846_P_2) },
5940 },
5941
5942 /* PREFIX_VEX_0F3847 */
5943 {
5944 { Bad_Opcode },
5945 { Bad_Opcode },
bf890a93 5946 { "vpsllv%LW", { XM, Vex, EXx }, 0 },
6c30d220
L
5947 },
5948
5949 /* PREFIX_VEX_0F3858 */
5950 {
5951 { Bad_Opcode },
5952 { Bad_Opcode },
5953 { VEX_W_TABLE (VEX_W_0F3858_P_2) },
5954 },
5955
5956 /* PREFIX_VEX_0F3859 */
5957 {
5958 { Bad_Opcode },
5959 { Bad_Opcode },
5960 { VEX_W_TABLE (VEX_W_0F3859_P_2) },
5961 },
5962
5963 /* PREFIX_VEX_0F385A */
5964 {
5965 { Bad_Opcode },
5966 { Bad_Opcode },
5967 { MOD_TABLE (MOD_VEX_0F385A_PREFIX_2) },
5968 },
5969
5970 /* PREFIX_VEX_0F3878 */
5971 {
5972 { Bad_Opcode },
5973 { Bad_Opcode },
5974 { VEX_W_TABLE (VEX_W_0F3878_P_2) },
5975 },
5976
5977 /* PREFIX_VEX_0F3879 */
5978 {
5979 { Bad_Opcode },
5980 { Bad_Opcode },
5981 { VEX_W_TABLE (VEX_W_0F3879_P_2) },
5982 },
5983
5984 /* PREFIX_VEX_0F388C */
5985 {
5986 { Bad_Opcode },
5987 { Bad_Opcode },
f7002f42 5988 { MOD_TABLE (MOD_VEX_0F388C_PREFIX_2) },
6c30d220
L
5989 },
5990
5991 /* PREFIX_VEX_0F388E */
5992 {
5993 { Bad_Opcode },
5994 { Bad_Opcode },
f7002f42 5995 { MOD_TABLE (MOD_VEX_0F388E_PREFIX_2) },
6c30d220
L
5996 },
5997
5998 /* PREFIX_VEX_0F3890 */
5999 {
6000 { Bad_Opcode },
6001 { Bad_Opcode },
bf890a93 6002 { "vpgatherd%LW", { XM, MVexVSIBDWpX, Vex }, 0 },
6c30d220
L
6003 },
6004
6005 /* PREFIX_VEX_0F3891 */
6006 {
6007 { Bad_Opcode },
6008 { Bad_Opcode },
bf890a93 6009 { "vpgatherq%LW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ }, 0 },
6c30d220
L
6010 },
6011
6012 /* PREFIX_VEX_0F3892 */
6013 {
6014 { Bad_Opcode },
6015 { Bad_Opcode },
bf890a93 6016 { "vgatherdp%XW", { XM, MVexVSIBDWpX, Vex }, 0 },
6c30d220
L
6017 },
6018
6019 /* PREFIX_VEX_0F3893 */
6020 {
6021 { Bad_Opcode },
6022 { Bad_Opcode },
bf890a93 6023 { "vgatherqp%XW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ }, 0 },
6c30d220
L
6024 },
6025
592a252b 6026 /* PREFIX_VEX_0F3896 */
a5ff0eb2 6027 {
592d1631
L
6028 { Bad_Opcode },
6029 { Bad_Opcode },
bf890a93 6030 { "vfmaddsub132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6031 },
6032
592a252b 6033 /* PREFIX_VEX_0F3897 */
a5ff0eb2 6034 {
592d1631
L
6035 { Bad_Opcode },
6036 { Bad_Opcode },
bf890a93 6037 { "vfmsubadd132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6038 },
6039
592a252b 6040 /* PREFIX_VEX_0F3898 */
a5ff0eb2 6041 {
592d1631
L
6042 { Bad_Opcode },
6043 { Bad_Opcode },
bf890a93 6044 { "vfmadd132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6045 },
6046
592a252b 6047 /* PREFIX_VEX_0F3899 */
a5ff0eb2 6048 {
592d1631
L
6049 { Bad_Opcode },
6050 { Bad_Opcode },
bf890a93 6051 { "vfmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
a5ff0eb2
L
6052 },
6053
592a252b 6054 /* PREFIX_VEX_0F389A */
a5ff0eb2 6055 {
592d1631
L
6056 { Bad_Opcode },
6057 { Bad_Opcode },
bf890a93 6058 { "vfmsub132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6059 },
6060
592a252b 6061 /* PREFIX_VEX_0F389B */
c0f3af97 6062 {
592d1631
L
6063 { Bad_Opcode },
6064 { Bad_Opcode },
bf890a93 6065 { "vfmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6066 },
6067
592a252b 6068 /* PREFIX_VEX_0F389C */
c0f3af97 6069 {
592d1631
L
6070 { Bad_Opcode },
6071 { Bad_Opcode },
bf890a93 6072 { "vfnmadd132p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6073 },
6074
592a252b 6075 /* PREFIX_VEX_0F389D */
c0f3af97 6076 {
592d1631
L
6077 { Bad_Opcode },
6078 { Bad_Opcode },
bf890a93 6079 { "vfnmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6080 },
6081
592a252b 6082 /* PREFIX_VEX_0F389E */
c0f3af97 6083 {
592d1631
L
6084 { Bad_Opcode },
6085 { Bad_Opcode },
bf890a93 6086 { "vfnmsub132p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6087 },
6088
592a252b 6089 /* PREFIX_VEX_0F389F */
c0f3af97 6090 {
592d1631
L
6091 { Bad_Opcode },
6092 { Bad_Opcode },
bf890a93 6093 { "vfnmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6094 },
6095
592a252b 6096 /* PREFIX_VEX_0F38A6 */
c0f3af97 6097 {
592d1631
L
6098 { Bad_Opcode },
6099 { Bad_Opcode },
bf890a93 6100 { "vfmaddsub213p%XW", { XM, Vex, EXx }, 0 },
592d1631 6101 { Bad_Opcode },
c0f3af97
L
6102 },
6103
592a252b 6104 /* PREFIX_VEX_0F38A7 */
c0f3af97 6105 {
592d1631
L
6106 { Bad_Opcode },
6107 { Bad_Opcode },
bf890a93 6108 { "vfmsubadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6109 },
6110
592a252b 6111 /* PREFIX_VEX_0F38A8 */
c0f3af97 6112 {
592d1631
L
6113 { Bad_Opcode },
6114 { Bad_Opcode },
bf890a93 6115 { "vfmadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6116 },
6117
592a252b 6118 /* PREFIX_VEX_0F38A9 */
c0f3af97 6119 {
592d1631
L
6120 { Bad_Opcode },
6121 { Bad_Opcode },
bf890a93 6122 { "vfmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6123 },
6124
592a252b 6125 /* PREFIX_VEX_0F38AA */
c0f3af97 6126 {
592d1631
L
6127 { Bad_Opcode },
6128 { Bad_Opcode },
bf890a93 6129 { "vfmsub213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6130 },
6131
592a252b 6132 /* PREFIX_VEX_0F38AB */
c0f3af97 6133 {
592d1631
L
6134 { Bad_Opcode },
6135 { Bad_Opcode },
bf890a93 6136 { "vfmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6137 },
6138
592a252b 6139 /* PREFIX_VEX_0F38AC */
c0f3af97 6140 {
592d1631
L
6141 { Bad_Opcode },
6142 { Bad_Opcode },
bf890a93 6143 { "vfnmadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6144 },
6145
592a252b 6146 /* PREFIX_VEX_0F38AD */
c0f3af97 6147 {
592d1631
L
6148 { Bad_Opcode },
6149 { Bad_Opcode },
bf890a93 6150 { "vfnmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6151 },
6152
592a252b 6153 /* PREFIX_VEX_0F38AE */
c0f3af97 6154 {
592d1631
L
6155 { Bad_Opcode },
6156 { Bad_Opcode },
bf890a93 6157 { "vfnmsub213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6158 },
6159
592a252b 6160 /* PREFIX_VEX_0F38AF */
c0f3af97 6161 {
592d1631
L
6162 { Bad_Opcode },
6163 { Bad_Opcode },
bf890a93 6164 { "vfnmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6165 },
6166
592a252b 6167 /* PREFIX_VEX_0F38B6 */
c0f3af97 6168 {
592d1631
L
6169 { Bad_Opcode },
6170 { Bad_Opcode },
bf890a93 6171 { "vfmaddsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6172 },
6173
592a252b 6174 /* PREFIX_VEX_0F38B7 */
c0f3af97 6175 {
592d1631
L
6176 { Bad_Opcode },
6177 { Bad_Opcode },
bf890a93 6178 { "vfmsubadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6179 },
6180
592a252b 6181 /* PREFIX_VEX_0F38B8 */
c0f3af97 6182 {
592d1631
L
6183 { Bad_Opcode },
6184 { Bad_Opcode },
bf890a93 6185 { "vfmadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6186 },
6187
592a252b 6188 /* PREFIX_VEX_0F38B9 */
c0f3af97 6189 {
592d1631
L
6190 { Bad_Opcode },
6191 { Bad_Opcode },
bf890a93 6192 { "vfmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6193 },
6194
592a252b 6195 /* PREFIX_VEX_0F38BA */
c0f3af97 6196 {
592d1631
L
6197 { Bad_Opcode },
6198 { Bad_Opcode },
bf890a93 6199 { "vfmsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6200 },
6201
592a252b 6202 /* PREFIX_VEX_0F38BB */
c0f3af97 6203 {
592d1631
L
6204 { Bad_Opcode },
6205 { Bad_Opcode },
bf890a93 6206 { "vfmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6207 },
6208
592a252b 6209 /* PREFIX_VEX_0F38BC */
c0f3af97 6210 {
592d1631
L
6211 { Bad_Opcode },
6212 { Bad_Opcode },
bf890a93 6213 { "vfnmadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6214 },
6215
592a252b 6216 /* PREFIX_VEX_0F38BD */
c0f3af97 6217 {
592d1631
L
6218 { Bad_Opcode },
6219 { Bad_Opcode },
bf890a93 6220 { "vfnmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6221 },
6222
592a252b 6223 /* PREFIX_VEX_0F38BE */
c0f3af97 6224 {
592d1631
L
6225 { Bad_Opcode },
6226 { Bad_Opcode },
bf890a93 6227 { "vfnmsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6228 },
6229
592a252b 6230 /* PREFIX_VEX_0F38BF */
c0f3af97 6231 {
592d1631
L
6232 { Bad_Opcode },
6233 { Bad_Opcode },
bf890a93 6234 { "vfnmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6235 },
6236
48521003
IT
6237 /* PREFIX_VEX_0F38CF */
6238 {
6239 { Bad_Opcode },
6240 { Bad_Opcode },
6241 { VEX_W_TABLE (VEX_W_0F38CF_P_2) },
6242 },
6243
592a252b 6244 /* PREFIX_VEX_0F38DB */
c0f3af97 6245 {
592d1631
L
6246 { Bad_Opcode },
6247 { Bad_Opcode },
592a252b 6248 { VEX_LEN_TABLE (VEX_LEN_0F38DB_P_2) },
c0f3af97
L
6249 },
6250
592a252b 6251 /* PREFIX_VEX_0F38DC */
c0f3af97 6252 {
592d1631
L
6253 { Bad_Opcode },
6254 { Bad_Opcode },
8dcf1fad 6255 { "vaesenc", { XM, Vex, EXx }, 0 },
c0f3af97
L
6256 },
6257
592a252b 6258 /* PREFIX_VEX_0F38DD */
c0f3af97 6259 {
592d1631
L
6260 { Bad_Opcode },
6261 { Bad_Opcode },
8dcf1fad 6262 { "vaesenclast", { XM, Vex, EXx }, 0 },
c0f3af97
L
6263 },
6264
592a252b 6265 /* PREFIX_VEX_0F38DE */
c0f3af97 6266 {
592d1631
L
6267 { Bad_Opcode },
6268 { Bad_Opcode },
8dcf1fad 6269 { "vaesdec", { XM, Vex, EXx }, 0 },
c0f3af97
L
6270 },
6271
592a252b 6272 /* PREFIX_VEX_0F38DF */
c0f3af97 6273 {
592d1631
L
6274 { Bad_Opcode },
6275 { Bad_Opcode },
8dcf1fad 6276 { "vaesdeclast", { XM, Vex, EXx }, 0 },
c0f3af97
L
6277 },
6278
f12dc422
L
6279 /* PREFIX_VEX_0F38F2 */
6280 {
6281 { VEX_LEN_TABLE (VEX_LEN_0F38F2_P_0) },
6282 },
6283
6284 /* PREFIX_VEX_0F38F3_REG_1 */
6285 {
6286 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_1_P_0) },
6287 },
6288
6289 /* PREFIX_VEX_0F38F3_REG_2 */
6290 {
6291 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_2_P_0) },
6292 },
6293
6294 /* PREFIX_VEX_0F38F3_REG_3 */
6295 {
6296 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_3_P_0) },
6297 },
6298
6c30d220
L
6299 /* PREFIX_VEX_0F38F5 */
6300 {
6301 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_0) },
6302 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_1) },
6303 { Bad_Opcode },
6304 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_3) },
6305 },
6306
6307 /* PREFIX_VEX_0F38F6 */
6308 {
6309 { Bad_Opcode },
6310 { Bad_Opcode },
6311 { Bad_Opcode },
6312 { VEX_LEN_TABLE (VEX_LEN_0F38F6_P_3) },
6313 },
6314
f12dc422
L
6315 /* PREFIX_VEX_0F38F7 */
6316 {
6317 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_0) },
6c30d220
L
6318 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_1) },
6319 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_2) },
6320 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_3) },
6321 },
6322
6323 /* PREFIX_VEX_0F3A00 */
6324 {
6325 { Bad_Opcode },
6326 { Bad_Opcode },
6327 { VEX_LEN_TABLE (VEX_LEN_0F3A00_P_2) },
6328 },
6329
6330 /* PREFIX_VEX_0F3A01 */
6331 {
6332 { Bad_Opcode },
6333 { Bad_Opcode },
6334 { VEX_LEN_TABLE (VEX_LEN_0F3A01_P_2) },
6335 },
6336
6337 /* PREFIX_VEX_0F3A02 */
6338 {
6339 { Bad_Opcode },
6340 { Bad_Opcode },
6341 { VEX_W_TABLE (VEX_W_0F3A02_P_2) },
f12dc422
L
6342 },
6343
592a252b 6344 /* PREFIX_VEX_0F3A04 */
c0f3af97 6345 {
592d1631
L
6346 { Bad_Opcode },
6347 { Bad_Opcode },
592a252b 6348 { VEX_W_TABLE (VEX_W_0F3A04_P_2) },
c0f3af97
L
6349 },
6350
592a252b 6351 /* PREFIX_VEX_0F3A05 */
c0f3af97 6352 {
592d1631
L
6353 { Bad_Opcode },
6354 { Bad_Opcode },
592a252b 6355 { VEX_W_TABLE (VEX_W_0F3A05_P_2) },
c0f3af97
L
6356 },
6357
592a252b 6358 /* PREFIX_VEX_0F3A06 */
c0f3af97 6359 {
592d1631
L
6360 { Bad_Opcode },
6361 { Bad_Opcode },
592a252b 6362 { VEX_LEN_TABLE (VEX_LEN_0F3A06_P_2) },
c0f3af97
L
6363 },
6364
592a252b 6365 /* PREFIX_VEX_0F3A08 */
c0f3af97 6366 {
592d1631
L
6367 { Bad_Opcode },
6368 { Bad_Opcode },
ec6f095a 6369 { "vroundps", { XM, EXx, Ib }, 0 },
c0f3af97
L
6370 },
6371
592a252b 6372 /* PREFIX_VEX_0F3A09 */
c0f3af97 6373 {
592d1631
L
6374 { Bad_Opcode },
6375 { Bad_Opcode },
ec6f095a 6376 { "vroundpd", { XM, EXx, Ib }, 0 },
c0f3af97
L
6377 },
6378
592a252b 6379 /* PREFIX_VEX_0F3A0A */
c0f3af97 6380 {
592d1631
L
6381 { Bad_Opcode },
6382 { Bad_Opcode },
ec6f095a 6383 { "vroundss", { XMScalar, VexScalar, EXdScalar, Ib }, 0 },
0bfee649
L
6384 },
6385
592a252b 6386 /* PREFIX_VEX_0F3A0B */
0bfee649 6387 {
592d1631
L
6388 { Bad_Opcode },
6389 { Bad_Opcode },
ec6f095a 6390 { "vroundsd", { XMScalar, VexScalar, EXqScalar, Ib }, 0 },
0bfee649
L
6391 },
6392
592a252b 6393 /* PREFIX_VEX_0F3A0C */
0bfee649 6394 {
592d1631
L
6395 { Bad_Opcode },
6396 { Bad_Opcode },
ec6f095a 6397 { "vblendps", { XM, Vex, EXx, Ib }, 0 },
0bfee649
L
6398 },
6399
592a252b 6400 /* PREFIX_VEX_0F3A0D */
0bfee649 6401 {
592d1631
L
6402 { Bad_Opcode },
6403 { Bad_Opcode },
ec6f095a 6404 { "vblendpd", { XM, Vex, EXx, Ib }, 0 },
c0f3af97
L
6405 },
6406
592a252b 6407 /* PREFIX_VEX_0F3A0E */
0bfee649 6408 {
592d1631
L
6409 { Bad_Opcode },
6410 { Bad_Opcode },
ec6f095a 6411 { "vpblendw", { XM, Vex, EXx, Ib }, 0 },
0bfee649
L
6412 },
6413
592a252b 6414 /* PREFIX_VEX_0F3A0F */
0bfee649 6415 {
592d1631
L
6416 { Bad_Opcode },
6417 { Bad_Opcode },
ec6f095a 6418 { "vpalignr", { XM, Vex, EXx, Ib }, 0 },
0bfee649
L
6419 },
6420
592a252b 6421 /* PREFIX_VEX_0F3A14 */
0bfee649 6422 {
592d1631
L
6423 { Bad_Opcode },
6424 { Bad_Opcode },
592a252b 6425 { VEX_LEN_TABLE (VEX_LEN_0F3A14_P_2) },
0bfee649
L
6426 },
6427
592a252b 6428 /* PREFIX_VEX_0F3A15 */
0bfee649 6429 {
592d1631
L
6430 { Bad_Opcode },
6431 { Bad_Opcode },
592a252b 6432 { VEX_LEN_TABLE (VEX_LEN_0F3A15_P_2) },
0bfee649
L
6433 },
6434
592a252b 6435 /* PREFIX_VEX_0F3A16 */
c0f3af97 6436 {
592d1631
L
6437 { Bad_Opcode },
6438 { Bad_Opcode },
592a252b 6439 { VEX_LEN_TABLE (VEX_LEN_0F3A16_P_2) },
c0f3af97
L
6440 },
6441
592a252b 6442 /* PREFIX_VEX_0F3A17 */
c0f3af97 6443 {
592d1631
L
6444 { Bad_Opcode },
6445 { Bad_Opcode },
592a252b 6446 { VEX_LEN_TABLE (VEX_LEN_0F3A17_P_2) },
c0f3af97
L
6447 },
6448
592a252b 6449 /* PREFIX_VEX_0F3A18 */
c0f3af97 6450 {
592d1631
L
6451 { Bad_Opcode },
6452 { Bad_Opcode },
592a252b 6453 { VEX_LEN_TABLE (VEX_LEN_0F3A18_P_2) },
c0f3af97
L
6454 },
6455
592a252b 6456 /* PREFIX_VEX_0F3A19 */
c0f3af97 6457 {
592d1631
L
6458 { Bad_Opcode },
6459 { Bad_Opcode },
592a252b 6460 { VEX_LEN_TABLE (VEX_LEN_0F3A19_P_2) },
c0f3af97
L
6461 },
6462
592a252b 6463 /* PREFIX_VEX_0F3A1D */
c7b8aa3a
L
6464 {
6465 { Bad_Opcode },
6466 { Bad_Opcode },
bf890a93 6467 { "vcvtps2ph", { EXxmmq, XM, Ib }, 0 },
c7b8aa3a
L
6468 },
6469
592a252b 6470 /* PREFIX_VEX_0F3A20 */
c0f3af97 6471 {
592d1631
L
6472 { Bad_Opcode },
6473 { Bad_Opcode },
592a252b 6474 { VEX_LEN_TABLE (VEX_LEN_0F3A20_P_2) },
c0f3af97
L
6475 },
6476
592a252b 6477 /* PREFIX_VEX_0F3A21 */
c0f3af97 6478 {
592d1631
L
6479 { Bad_Opcode },
6480 { Bad_Opcode },
592a252b 6481 { VEX_LEN_TABLE (VEX_LEN_0F3A21_P_2) },
c0f3af97
L
6482 },
6483
592a252b 6484 /* PREFIX_VEX_0F3A22 */
0bfee649 6485 {
592d1631
L
6486 { Bad_Opcode },
6487 { Bad_Opcode },
592a252b 6488 { VEX_LEN_TABLE (VEX_LEN_0F3A22_P_2) },
0bfee649
L
6489 },
6490
43234a1e
L
6491 /* PREFIX_VEX_0F3A30 */
6492 {
6493 { Bad_Opcode },
6494 { Bad_Opcode },
6495 { VEX_LEN_TABLE (VEX_LEN_0F3A30_P_2) },
6496 },
6497
1ba585e8
IT
6498 /* PREFIX_VEX_0F3A31 */
6499 {
6500 { Bad_Opcode },
6501 { Bad_Opcode },
6502 { VEX_LEN_TABLE (VEX_LEN_0F3A31_P_2) },
6503 },
6504
43234a1e
L
6505 /* PREFIX_VEX_0F3A32 */
6506 {
6507 { Bad_Opcode },
6508 { Bad_Opcode },
6509 { VEX_LEN_TABLE (VEX_LEN_0F3A32_P_2) },
6510 },
6511
1ba585e8
IT
6512 /* PREFIX_VEX_0F3A33 */
6513 {
6514 { Bad_Opcode },
6515 { Bad_Opcode },
6516 { VEX_LEN_TABLE (VEX_LEN_0F3A33_P_2) },
6517 },
6518
6c30d220
L
6519 /* PREFIX_VEX_0F3A38 */
6520 {
6521 { Bad_Opcode },
6522 { Bad_Opcode },
6523 { VEX_LEN_TABLE (VEX_LEN_0F3A38_P_2) },
6524 },
6525
6526 /* PREFIX_VEX_0F3A39 */
6527 {
6528 { Bad_Opcode },
6529 { Bad_Opcode },
6530 { VEX_LEN_TABLE (VEX_LEN_0F3A39_P_2) },
6531 },
6532
592a252b 6533 /* PREFIX_VEX_0F3A40 */
c0f3af97 6534 {
592d1631
L
6535 { Bad_Opcode },
6536 { Bad_Opcode },
ec6f095a 6537 { "vdpps", { XM, Vex, EXx, Ib }, 0 },
c0f3af97
L
6538 },
6539
592a252b 6540 /* PREFIX_VEX_0F3A41 */
c0f3af97 6541 {
592d1631
L
6542 { Bad_Opcode },
6543 { Bad_Opcode },
592a252b 6544 { VEX_LEN_TABLE (VEX_LEN_0F3A41_P_2) },
c0f3af97
L
6545 },
6546
592a252b 6547 /* PREFIX_VEX_0F3A42 */
c0f3af97 6548 {
592d1631
L
6549 { Bad_Opcode },
6550 { Bad_Opcode },
ec6f095a 6551 { "vmpsadbw", { XM, Vex, EXx, Ib }, 0 },
c0f3af97
L
6552 },
6553
592a252b 6554 /* PREFIX_VEX_0F3A44 */
ce2f5b3c 6555 {
592d1631
L
6556 { Bad_Opcode },
6557 { Bad_Opcode },
ff1982d5 6558 { "vpclmulqdq", { XM, Vex, EXx, PCLMUL }, 0 },
ce2f5b3c
L
6559 },
6560
6c30d220
L
6561 /* PREFIX_VEX_0F3A46 */
6562 {
6563 { Bad_Opcode },
6564 { Bad_Opcode },
6565 { VEX_LEN_TABLE (VEX_LEN_0F3A46_P_2) },
6566 },
6567
592a252b 6568 /* PREFIX_VEX_0F3A48 */
a683cc34
SP
6569 {
6570 { Bad_Opcode },
6571 { Bad_Opcode },
592a252b 6572 { VEX_W_TABLE (VEX_W_0F3A48_P_2) },
a683cc34
SP
6573 },
6574
592a252b 6575 /* PREFIX_VEX_0F3A49 */
a683cc34
SP
6576 {
6577 { Bad_Opcode },
6578 { Bad_Opcode },
592a252b 6579 { VEX_W_TABLE (VEX_W_0F3A49_P_2) },
a683cc34
SP
6580 },
6581
592a252b 6582 /* PREFIX_VEX_0F3A4A */
c0f3af97 6583 {
592d1631
L
6584 { Bad_Opcode },
6585 { Bad_Opcode },
592a252b 6586 { VEX_W_TABLE (VEX_W_0F3A4A_P_2) },
c0f3af97
L
6587 },
6588
592a252b 6589 /* PREFIX_VEX_0F3A4B */
c0f3af97 6590 {
592d1631
L
6591 { Bad_Opcode },
6592 { Bad_Opcode },
592a252b 6593 { VEX_W_TABLE (VEX_W_0F3A4B_P_2) },
c0f3af97
L
6594 },
6595
592a252b 6596 /* PREFIX_VEX_0F3A4C */
c0f3af97 6597 {
592d1631
L
6598 { Bad_Opcode },
6599 { Bad_Opcode },
6c30d220 6600 { VEX_W_TABLE (VEX_W_0F3A4C_P_2) },
c0f3af97
L
6601 },
6602
592a252b 6603 /* PREFIX_VEX_0F3A5C */
922d8de8 6604 {
592d1631
L
6605 { Bad_Opcode },
6606 { Bad_Opcode },
3a2430e0 6607 { "vfmaddsubps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6608 },
6609
592a252b 6610 /* PREFIX_VEX_0F3A5D */
922d8de8 6611 {
592d1631
L
6612 { Bad_Opcode },
6613 { Bad_Opcode },
3a2430e0 6614 { "vfmaddsubpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6615 },
6616
592a252b 6617 /* PREFIX_VEX_0F3A5E */
922d8de8 6618 {
592d1631
L
6619 { Bad_Opcode },
6620 { Bad_Opcode },
3a2430e0 6621 { "vfmsubaddps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6622 },
6623
592a252b 6624 /* PREFIX_VEX_0F3A5F */
922d8de8 6625 {
592d1631
L
6626 { Bad_Opcode },
6627 { Bad_Opcode },
3a2430e0 6628 { "vfmsubaddpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6629 },
6630
592a252b 6631 /* PREFIX_VEX_0F3A60 */
c0f3af97 6632 {
592d1631
L
6633 { Bad_Opcode },
6634 { Bad_Opcode },
592a252b 6635 { VEX_LEN_TABLE (VEX_LEN_0F3A60_P_2) },
592d1631 6636 { Bad_Opcode },
c0f3af97
L
6637 },
6638
592a252b 6639 /* PREFIX_VEX_0F3A61 */
c0f3af97 6640 {
592d1631
L
6641 { Bad_Opcode },
6642 { Bad_Opcode },
592a252b 6643 { VEX_LEN_TABLE (VEX_LEN_0F3A61_P_2) },
c0f3af97
L
6644 },
6645
592a252b 6646 /* PREFIX_VEX_0F3A62 */
c0f3af97 6647 {
592d1631
L
6648 { Bad_Opcode },
6649 { Bad_Opcode },
592a252b 6650 { VEX_LEN_TABLE (VEX_LEN_0F3A62_P_2) },
c0f3af97
L
6651 },
6652
592a252b 6653 /* PREFIX_VEX_0F3A63 */
c0f3af97 6654 {
592d1631
L
6655 { Bad_Opcode },
6656 { Bad_Opcode },
592a252b 6657 { VEX_LEN_TABLE (VEX_LEN_0F3A63_P_2) },
c0f3af97 6658 },
a5ff0eb2 6659
592a252b 6660 /* PREFIX_VEX_0F3A68 */
922d8de8 6661 {
592d1631
L
6662 { Bad_Opcode },
6663 { Bad_Opcode },
3a2430e0 6664 { "vfmaddps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6665 },
6666
592a252b 6667 /* PREFIX_VEX_0F3A69 */
922d8de8 6668 {
592d1631
L
6669 { Bad_Opcode },
6670 { Bad_Opcode },
3a2430e0 6671 { "vfmaddpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6672 },
6673
592a252b 6674 /* PREFIX_VEX_0F3A6A */
922d8de8 6675 {
592d1631
L
6676 { Bad_Opcode },
6677 { Bad_Opcode },
592a252b 6678 { VEX_LEN_TABLE (VEX_LEN_0F3A6A_P_2) },
922d8de8
DR
6679 },
6680
592a252b 6681 /* PREFIX_VEX_0F3A6B */
922d8de8 6682 {
592d1631
L
6683 { Bad_Opcode },
6684 { Bad_Opcode },
592a252b 6685 { VEX_LEN_TABLE (VEX_LEN_0F3A6B_P_2) },
922d8de8
DR
6686 },
6687
592a252b 6688 /* PREFIX_VEX_0F3A6C */
922d8de8 6689 {
592d1631
L
6690 { Bad_Opcode },
6691 { Bad_Opcode },
3a2430e0 6692 { "vfmsubps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6693 },
6694
592a252b 6695 /* PREFIX_VEX_0F3A6D */
922d8de8 6696 {
592d1631
L
6697 { Bad_Opcode },
6698 { Bad_Opcode },
3a2430e0 6699 { "vfmsubpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6700 },
6701
592a252b 6702 /* PREFIX_VEX_0F3A6E */
922d8de8 6703 {
592d1631
L
6704 { Bad_Opcode },
6705 { Bad_Opcode },
592a252b 6706 { VEX_LEN_TABLE (VEX_LEN_0F3A6E_P_2) },
922d8de8
DR
6707 },
6708
592a252b 6709 /* PREFIX_VEX_0F3A6F */
922d8de8 6710 {
592d1631
L
6711 { Bad_Opcode },
6712 { Bad_Opcode },
592a252b 6713 { VEX_LEN_TABLE (VEX_LEN_0F3A6F_P_2) },
922d8de8
DR
6714 },
6715
592a252b 6716 /* PREFIX_VEX_0F3A78 */
922d8de8 6717 {
592d1631
L
6718 { Bad_Opcode },
6719 { Bad_Opcode },
3a2430e0 6720 { "vfnmaddps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6721 },
6722
592a252b 6723 /* PREFIX_VEX_0F3A79 */
922d8de8 6724 {
592d1631
L
6725 { Bad_Opcode },
6726 { Bad_Opcode },
3a2430e0 6727 { "vfnmaddpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6728 },
6729
592a252b 6730 /* PREFIX_VEX_0F3A7A */
922d8de8 6731 {
592d1631
L
6732 { Bad_Opcode },
6733 { Bad_Opcode },
592a252b 6734 { VEX_LEN_TABLE (VEX_LEN_0F3A7A_P_2) },
922d8de8
DR
6735 },
6736
592a252b 6737 /* PREFIX_VEX_0F3A7B */
922d8de8 6738 {
592d1631
L
6739 { Bad_Opcode },
6740 { Bad_Opcode },
592a252b 6741 { VEX_LEN_TABLE (VEX_LEN_0F3A7B_P_2) },
922d8de8
DR
6742 },
6743
592a252b 6744 /* PREFIX_VEX_0F3A7C */
922d8de8 6745 {
592d1631
L
6746 { Bad_Opcode },
6747 { Bad_Opcode },
3a2430e0 6748 { "vfnmsubps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
592d1631 6749 { Bad_Opcode },
922d8de8
DR
6750 },
6751
592a252b 6752 /* PREFIX_VEX_0F3A7D */
922d8de8 6753 {
592d1631
L
6754 { Bad_Opcode },
6755 { Bad_Opcode },
3a2430e0 6756 { "vfnmsubpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6757 },
6758
592a252b 6759 /* PREFIX_VEX_0F3A7E */
922d8de8 6760 {
592d1631
L
6761 { Bad_Opcode },
6762 { Bad_Opcode },
592a252b 6763 { VEX_LEN_TABLE (VEX_LEN_0F3A7E_P_2) },
922d8de8
DR
6764 },
6765
592a252b 6766 /* PREFIX_VEX_0F3A7F */
922d8de8 6767 {
592d1631
L
6768 { Bad_Opcode },
6769 { Bad_Opcode },
592a252b 6770 { VEX_LEN_TABLE (VEX_LEN_0F3A7F_P_2) },
922d8de8
DR
6771 },
6772
48521003
IT
6773 /* PREFIX_VEX_0F3ACE */
6774 {
6775 { Bad_Opcode },
6776 { Bad_Opcode },
6777 { VEX_W_TABLE (VEX_W_0F3ACE_P_2) },
6778 },
6779
6780 /* PREFIX_VEX_0F3ACF */
6781 {
6782 { Bad_Opcode },
6783 { Bad_Opcode },
6784 { VEX_W_TABLE (VEX_W_0F3ACF_P_2) },
6785 },
6786
592a252b 6787 /* PREFIX_VEX_0F3ADF */
a5ff0eb2 6788 {
592d1631
L
6789 { Bad_Opcode },
6790 { Bad_Opcode },
592a252b 6791 { VEX_LEN_TABLE (VEX_LEN_0F3ADF_P_2) },
a5ff0eb2 6792 },
6c30d220
L
6793
6794 /* PREFIX_VEX_0F3AF0 */
6795 {
6796 { Bad_Opcode },
6797 { Bad_Opcode },
6798 { Bad_Opcode },
6799 { VEX_LEN_TABLE (VEX_LEN_0F3AF0_P_3) },
6800 },
43234a1e 6801
ad692897 6802#include "i386-dis-evex-prefix.h"
c0f3af97
L
6803};
6804
6805static const struct dis386 x86_64_table[][2] = {
6806 /* X86_64_06 */
6807 {
bf890a93 6808 { "pushP", { es }, 0 },
c0f3af97
L
6809 },
6810
6811 /* X86_64_07 */
6812 {
bf890a93 6813 { "popP", { es }, 0 },
c0f3af97
L
6814 },
6815
6816 /* X86_64_0D */
6817 {
bf890a93 6818 { "pushP", { cs }, 0 },
c0f3af97
L
6819 },
6820
6821 /* X86_64_16 */
6822 {
bf890a93 6823 { "pushP", { ss }, 0 },
c0f3af97
L
6824 },
6825
6826 /* X86_64_17 */
6827 {
bf890a93 6828 { "popP", { ss }, 0 },
c0f3af97
L
6829 },
6830
6831 /* X86_64_1E */
6832 {
bf890a93 6833 { "pushP", { ds }, 0 },
c0f3af97
L
6834 },
6835
6836 /* X86_64_1F */
6837 {
bf890a93 6838 { "popP", { ds }, 0 },
c0f3af97
L
6839 },
6840
6841 /* X86_64_27 */
6842 {
bf890a93 6843 { "daa", { XX }, 0 },
c0f3af97
L
6844 },
6845
6846 /* X86_64_2F */
6847 {
bf890a93 6848 { "das", { XX }, 0 },
c0f3af97
L
6849 },
6850
6851 /* X86_64_37 */
6852 {
bf890a93 6853 { "aaa", { XX }, 0 },
c0f3af97
L
6854 },
6855
6856 /* X86_64_3F */
6857 {
bf890a93 6858 { "aas", { XX }, 0 },
c0f3af97
L
6859 },
6860
6861 /* X86_64_60 */
6862 {
bf890a93 6863 { "pushaP", { XX }, 0 },
c0f3af97
L
6864 },
6865
6866 /* X86_64_61 */
6867 {
bf890a93 6868 { "popaP", { XX }, 0 },
c0f3af97
L
6869 },
6870
6871 /* X86_64_62 */
6872 {
6873 { MOD_TABLE (MOD_62_32BIT) },
43234a1e 6874 { EVEX_TABLE (EVEX_0F) },
c0f3af97
L
6875 },
6876
6877 /* X86_64_63 */
6878 {
bf890a93 6879 { "arpl", { Ew, Gw }, 0 },
bc31405e 6880 { "movs", { { OP_G, movsxd_mode }, { MOVSXD_Fixup, movsxd_mode } }, 0 },
c0f3af97
L
6881 },
6882
6883 /* X86_64_6D */
6884 {
bf890a93
IT
6885 { "ins{R|}", { Yzr, indirDX }, 0 },
6886 { "ins{G|}", { Yzr, indirDX }, 0 },
c0f3af97
L
6887 },
6888
6889 /* X86_64_6F */
6890 {
bf890a93
IT
6891 { "outs{R|}", { indirDXr, Xz }, 0 },
6892 { "outs{G|}", { indirDXr, Xz }, 0 },
c0f3af97
L
6893 },
6894
d039fef3 6895 /* X86_64_82 */
8b89fe14 6896 {
de194d85 6897 /* Opcode 0x82 is an alias of opcode 0x80 in 32-bit mode. */
d039fef3 6898 { REG_TABLE (REG_80) },
8b89fe14
L
6899 },
6900
c0f3af97
L
6901 /* X86_64_9A */
6902 {
bf890a93 6903 { "Jcall{T|}", { Ap }, 0 },
c0f3af97
L
6904 },
6905
aeab2b26
JB
6906 /* X86_64_C2 */
6907 {
6908 { "retP", { Iw, BND }, 0 },
6909 { "ret@", { Iw, BND }, 0 },
6910 },
6911
6912 /* X86_64_C3 */
6913 {
6914 { "retP", { BND }, 0 },
6915 { "ret@", { BND }, 0 },
6916 },
6917
c0f3af97
L
6918 /* X86_64_C4 */
6919 {
6920 { MOD_TABLE (MOD_C4_32BIT) },
6921 { VEX_C4_TABLE (VEX_0F) },
6922 },
6923
6924 /* X86_64_C5 */
6925 {
6926 { MOD_TABLE (MOD_C5_32BIT) },
6927 { VEX_C5_TABLE (VEX_0F) },
6928 },
6929
6930 /* X86_64_CE */
6931 {
bf890a93 6932 { "into", { XX }, 0 },
c0f3af97
L
6933 },
6934
6935 /* X86_64_D4 */
6936 {
bf890a93 6937 { "aam", { Ib }, 0 },
c0f3af97
L
6938 },
6939
6940 /* X86_64_D5 */
6941 {
bf890a93 6942 { "aad", { Ib }, 0 },
c0f3af97
L
6943 },
6944
a72d2af2
L
6945 /* X86_64_E8 */
6946 {
6947 { "callP", { Jv, BND }, 0 },
5db04b09 6948 { "call@", { Jv, BND }, 0 }
a72d2af2
L
6949 },
6950
6951 /* X86_64_E9 */
6952 {
6953 { "jmpP", { Jv, BND }, 0 },
5db04b09 6954 { "jmp@", { Jv, BND }, 0 }
a72d2af2
L
6955 },
6956
c0f3af97
L
6957 /* X86_64_EA */
6958 {
bf890a93 6959 { "Jjmp{T|}", { Ap }, 0 },
c0f3af97
L
6960 },
6961
6962 /* X86_64_0F01_REG_0 */
6963 {
bf890a93
IT
6964 { "sgdt{Q|IQ}", { M }, 0 },
6965 { "sgdt", { M }, 0 },
c0f3af97
L
6966 },
6967
6968 /* X86_64_0F01_REG_1 */
6969 {
bf890a93
IT
6970 { "sidt{Q|IQ}", { M }, 0 },
6971 { "sidt", { M }, 0 },
c0f3af97
L
6972 },
6973
6974 /* X86_64_0F01_REG_2 */
6975 {
bf890a93
IT
6976 { "lgdt{Q|Q}", { M }, 0 },
6977 { "lgdt", { M }, 0 },
c0f3af97
L
6978 },
6979
6980 /* X86_64_0F01_REG_3 */
6981 {
bf890a93
IT
6982 { "lidt{Q|Q}", { M }, 0 },
6983 { "lidt", { M }, 0 },
c0f3af97
L
6984 },
6985};
6986
6987static const struct dis386 three_byte_table[][256] = {
c1e679ec
DR
6988
6989 /* THREE_BYTE_0F38 */
c0f3af97
L
6990 {
6991 /* 00 */
507bd325
L
6992 { "pshufb", { MX, EM }, PREFIX_OPCODE },
6993 { "phaddw", { MX, EM }, PREFIX_OPCODE },
6994 { "phaddd", { MX, EM }, PREFIX_OPCODE },
6995 { "phaddsw", { MX, EM }, PREFIX_OPCODE },
6996 { "pmaddubsw", { MX, EM }, PREFIX_OPCODE },
6997 { "phsubw", { MX, EM }, PREFIX_OPCODE },
6998 { "phsubd", { MX, EM }, PREFIX_OPCODE },
6999 { "phsubsw", { MX, EM }, PREFIX_OPCODE },
c0f3af97 7000 /* 08 */
507bd325
L
7001 { "psignb", { MX, EM }, PREFIX_OPCODE },
7002 { "psignw", { MX, EM }, PREFIX_OPCODE },
7003 { "psignd", { MX, EM }, PREFIX_OPCODE },
7004 { "pmulhrsw", { MX, EM }, PREFIX_OPCODE },
592d1631
L
7005 { Bad_Opcode },
7006 { Bad_Opcode },
7007 { Bad_Opcode },
7008 { Bad_Opcode },
f88c9eb0
SP
7009 /* 10 */
7010 { PREFIX_TABLE (PREFIX_0F3810) },
592d1631
L
7011 { Bad_Opcode },
7012 { Bad_Opcode },
7013 { Bad_Opcode },
f88c9eb0
SP
7014 { PREFIX_TABLE (PREFIX_0F3814) },
7015 { PREFIX_TABLE (PREFIX_0F3815) },
592d1631 7016 { Bad_Opcode },
f88c9eb0
SP
7017 { PREFIX_TABLE (PREFIX_0F3817) },
7018 /* 18 */
592d1631
L
7019 { Bad_Opcode },
7020 { Bad_Opcode },
7021 { Bad_Opcode },
7022 { Bad_Opcode },
507bd325
L
7023 { "pabsb", { MX, EM }, PREFIX_OPCODE },
7024 { "pabsw", { MX, EM }, PREFIX_OPCODE },
7025 { "pabsd", { MX, EM }, PREFIX_OPCODE },
592d1631 7026 { Bad_Opcode },
f88c9eb0
SP
7027 /* 20 */
7028 { PREFIX_TABLE (PREFIX_0F3820) },
7029 { PREFIX_TABLE (PREFIX_0F3821) },
7030 { PREFIX_TABLE (PREFIX_0F3822) },
7031 { PREFIX_TABLE (PREFIX_0F3823) },
7032 { PREFIX_TABLE (PREFIX_0F3824) },
7033 { PREFIX_TABLE (PREFIX_0F3825) },
592d1631
L
7034 { Bad_Opcode },
7035 { Bad_Opcode },
f88c9eb0
SP
7036 /* 28 */
7037 { PREFIX_TABLE (PREFIX_0F3828) },
7038 { PREFIX_TABLE (PREFIX_0F3829) },
7039 { PREFIX_TABLE (PREFIX_0F382A) },
7040 { PREFIX_TABLE (PREFIX_0F382B) },
592d1631
L
7041 { Bad_Opcode },
7042 { Bad_Opcode },
7043 { Bad_Opcode },
7044 { Bad_Opcode },
f88c9eb0
SP
7045 /* 30 */
7046 { PREFIX_TABLE (PREFIX_0F3830) },
7047 { PREFIX_TABLE (PREFIX_0F3831) },
7048 { PREFIX_TABLE (PREFIX_0F3832) },
7049 { PREFIX_TABLE (PREFIX_0F3833) },
7050 { PREFIX_TABLE (PREFIX_0F3834) },
7051 { PREFIX_TABLE (PREFIX_0F3835) },
592d1631 7052 { Bad_Opcode },
f88c9eb0
SP
7053 { PREFIX_TABLE (PREFIX_0F3837) },
7054 /* 38 */
7055 { PREFIX_TABLE (PREFIX_0F3838) },
7056 { PREFIX_TABLE (PREFIX_0F3839) },
7057 { PREFIX_TABLE (PREFIX_0F383A) },
7058 { PREFIX_TABLE (PREFIX_0F383B) },
7059 { PREFIX_TABLE (PREFIX_0F383C) },
7060 { PREFIX_TABLE (PREFIX_0F383D) },
7061 { PREFIX_TABLE (PREFIX_0F383E) },
7062 { PREFIX_TABLE (PREFIX_0F383F) },
7063 /* 40 */
7064 { PREFIX_TABLE (PREFIX_0F3840) },
7065 { PREFIX_TABLE (PREFIX_0F3841) },
592d1631
L
7066 { Bad_Opcode },
7067 { Bad_Opcode },
7068 { Bad_Opcode },
7069 { Bad_Opcode },
7070 { Bad_Opcode },
7071 { Bad_Opcode },
f88c9eb0 7072 /* 48 */
592d1631
L
7073 { Bad_Opcode },
7074 { Bad_Opcode },
7075 { Bad_Opcode },
7076 { Bad_Opcode },
7077 { Bad_Opcode },
7078 { Bad_Opcode },
7079 { Bad_Opcode },
7080 { Bad_Opcode },
f88c9eb0 7081 /* 50 */
592d1631
L
7082 { Bad_Opcode },
7083 { Bad_Opcode },
7084 { Bad_Opcode },
7085 { Bad_Opcode },
7086 { Bad_Opcode },
7087 { Bad_Opcode },
7088 { Bad_Opcode },
7089 { Bad_Opcode },
f88c9eb0 7090 /* 58 */
592d1631
L
7091 { Bad_Opcode },
7092 { Bad_Opcode },
7093 { Bad_Opcode },
7094 { Bad_Opcode },
7095 { Bad_Opcode },
7096 { Bad_Opcode },
7097 { Bad_Opcode },
7098 { Bad_Opcode },
f88c9eb0 7099 /* 60 */
592d1631
L
7100 { Bad_Opcode },
7101 { Bad_Opcode },
7102 { Bad_Opcode },
7103 { Bad_Opcode },
7104 { Bad_Opcode },
7105 { Bad_Opcode },
7106 { Bad_Opcode },
7107 { Bad_Opcode },
f88c9eb0 7108 /* 68 */
592d1631
L
7109 { Bad_Opcode },
7110 { Bad_Opcode },
7111 { Bad_Opcode },
7112 { Bad_Opcode },
7113 { Bad_Opcode },
7114 { Bad_Opcode },
7115 { Bad_Opcode },
7116 { Bad_Opcode },
f88c9eb0 7117 /* 70 */
592d1631
L
7118 { Bad_Opcode },
7119 { Bad_Opcode },
7120 { Bad_Opcode },
7121 { Bad_Opcode },
7122 { Bad_Opcode },
7123 { Bad_Opcode },
7124 { Bad_Opcode },
7125 { Bad_Opcode },
f88c9eb0 7126 /* 78 */
592d1631
L
7127 { Bad_Opcode },
7128 { Bad_Opcode },
7129 { Bad_Opcode },
7130 { Bad_Opcode },
7131 { Bad_Opcode },
7132 { Bad_Opcode },
7133 { Bad_Opcode },
7134 { Bad_Opcode },
f88c9eb0
SP
7135 /* 80 */
7136 { PREFIX_TABLE (PREFIX_0F3880) },
7137 { PREFIX_TABLE (PREFIX_0F3881) },
6c30d220 7138 { PREFIX_TABLE (PREFIX_0F3882) },
592d1631
L
7139 { Bad_Opcode },
7140 { Bad_Opcode },
7141 { Bad_Opcode },
7142 { Bad_Opcode },
7143 { Bad_Opcode },
f88c9eb0 7144 /* 88 */
592d1631
L
7145 { Bad_Opcode },
7146 { Bad_Opcode },
7147 { Bad_Opcode },
7148 { Bad_Opcode },
7149 { Bad_Opcode },
7150 { Bad_Opcode },
7151 { Bad_Opcode },
7152 { Bad_Opcode },
f88c9eb0 7153 /* 90 */
592d1631
L
7154 { Bad_Opcode },
7155 { Bad_Opcode },
7156 { Bad_Opcode },
7157 { Bad_Opcode },
7158 { Bad_Opcode },
7159 { Bad_Opcode },
7160 { Bad_Opcode },
7161 { Bad_Opcode },
f88c9eb0 7162 /* 98 */
592d1631
L
7163 { Bad_Opcode },
7164 { Bad_Opcode },
7165 { Bad_Opcode },
7166 { Bad_Opcode },
7167 { Bad_Opcode },
7168 { Bad_Opcode },
7169 { Bad_Opcode },
7170 { Bad_Opcode },
f88c9eb0 7171 /* a0 */
592d1631
L
7172 { Bad_Opcode },
7173 { Bad_Opcode },
7174 { Bad_Opcode },
7175 { Bad_Opcode },
7176 { Bad_Opcode },
7177 { Bad_Opcode },
7178 { Bad_Opcode },
7179 { Bad_Opcode },
f88c9eb0 7180 /* a8 */
592d1631
L
7181 { Bad_Opcode },
7182 { Bad_Opcode },
7183 { Bad_Opcode },
7184 { Bad_Opcode },
7185 { Bad_Opcode },
7186 { Bad_Opcode },
7187 { Bad_Opcode },
7188 { Bad_Opcode },
f88c9eb0 7189 /* b0 */
592d1631
L
7190 { Bad_Opcode },
7191 { Bad_Opcode },
7192 { Bad_Opcode },
7193 { Bad_Opcode },
7194 { Bad_Opcode },
7195 { Bad_Opcode },
7196 { Bad_Opcode },
7197 { Bad_Opcode },
f88c9eb0 7198 /* b8 */
592d1631
L
7199 { Bad_Opcode },
7200 { Bad_Opcode },
7201 { Bad_Opcode },
7202 { Bad_Opcode },
7203 { Bad_Opcode },
7204 { Bad_Opcode },
7205 { Bad_Opcode },
7206 { Bad_Opcode },
f88c9eb0 7207 /* c0 */
592d1631
L
7208 { Bad_Opcode },
7209 { Bad_Opcode },
7210 { Bad_Opcode },
7211 { Bad_Opcode },
7212 { Bad_Opcode },
7213 { Bad_Opcode },
7214 { Bad_Opcode },
7215 { Bad_Opcode },
f88c9eb0 7216 /* c8 */
a0046408
L
7217 { PREFIX_TABLE (PREFIX_0F38C8) },
7218 { PREFIX_TABLE (PREFIX_0F38C9) },
7219 { PREFIX_TABLE (PREFIX_0F38CA) },
7220 { PREFIX_TABLE (PREFIX_0F38CB) },
7221 { PREFIX_TABLE (PREFIX_0F38CC) },
7222 { PREFIX_TABLE (PREFIX_0F38CD) },
592d1631 7223 { Bad_Opcode },
48521003 7224 { PREFIX_TABLE (PREFIX_0F38CF) },
f88c9eb0 7225 /* d0 */
592d1631
L
7226 { Bad_Opcode },
7227 { Bad_Opcode },
7228 { Bad_Opcode },
7229 { Bad_Opcode },
7230 { Bad_Opcode },
7231 { Bad_Opcode },
7232 { Bad_Opcode },
7233 { Bad_Opcode },
f88c9eb0 7234 /* d8 */
592d1631
L
7235 { Bad_Opcode },
7236 { Bad_Opcode },
7237 { Bad_Opcode },
f88c9eb0
SP
7238 { PREFIX_TABLE (PREFIX_0F38DB) },
7239 { PREFIX_TABLE (PREFIX_0F38DC) },
7240 { PREFIX_TABLE (PREFIX_0F38DD) },
7241 { PREFIX_TABLE (PREFIX_0F38DE) },
7242 { PREFIX_TABLE (PREFIX_0F38DF) },
7243 /* e0 */
592d1631
L
7244 { Bad_Opcode },
7245 { Bad_Opcode },
7246 { Bad_Opcode },
7247 { Bad_Opcode },
7248 { Bad_Opcode },
7249 { Bad_Opcode },
7250 { Bad_Opcode },
7251 { Bad_Opcode },
f88c9eb0 7252 /* e8 */
592d1631
L
7253 { Bad_Opcode },
7254 { Bad_Opcode },
7255 { Bad_Opcode },
7256 { Bad_Opcode },
7257 { Bad_Opcode },
7258 { Bad_Opcode },
7259 { Bad_Opcode },
7260 { Bad_Opcode },
f88c9eb0
SP
7261 /* f0 */
7262 { PREFIX_TABLE (PREFIX_0F38F0) },
7263 { PREFIX_TABLE (PREFIX_0F38F1) },
592d1631
L
7264 { Bad_Opcode },
7265 { Bad_Opcode },
7266 { Bad_Opcode },
603555e5 7267 { PREFIX_TABLE (PREFIX_0F38F5) },
e2e1fcde 7268 { PREFIX_TABLE (PREFIX_0F38F6) },
592d1631 7269 { Bad_Opcode },
f88c9eb0 7270 /* f8 */
c0a30a9f
L
7271 { PREFIX_TABLE (PREFIX_0F38F8) },
7272 { PREFIX_TABLE (PREFIX_0F38F9) },
592d1631
L
7273 { Bad_Opcode },
7274 { Bad_Opcode },
7275 { Bad_Opcode },
7276 { Bad_Opcode },
7277 { Bad_Opcode },
7278 { Bad_Opcode },
f88c9eb0
SP
7279 },
7280 /* THREE_BYTE_0F3A */
7281 {
7282 /* 00 */
592d1631
L
7283 { Bad_Opcode },
7284 { Bad_Opcode },
7285 { Bad_Opcode },
7286 { Bad_Opcode },
7287 { Bad_Opcode },
7288 { Bad_Opcode },
7289 { Bad_Opcode },
7290 { Bad_Opcode },
f88c9eb0
SP
7291 /* 08 */
7292 { PREFIX_TABLE (PREFIX_0F3A08) },
7293 { PREFIX_TABLE (PREFIX_0F3A09) },
7294 { PREFIX_TABLE (PREFIX_0F3A0A) },
7295 { PREFIX_TABLE (PREFIX_0F3A0B) },
7296 { PREFIX_TABLE (PREFIX_0F3A0C) },
7297 { PREFIX_TABLE (PREFIX_0F3A0D) },
7298 { PREFIX_TABLE (PREFIX_0F3A0E) },
507bd325 7299 { "palignr", { MX, EM, Ib }, PREFIX_OPCODE },
f88c9eb0 7300 /* 10 */
592d1631
L
7301 { Bad_Opcode },
7302 { Bad_Opcode },
7303 { Bad_Opcode },
7304 { Bad_Opcode },
f88c9eb0
SP
7305 { PREFIX_TABLE (PREFIX_0F3A14) },
7306 { PREFIX_TABLE (PREFIX_0F3A15) },
7307 { PREFIX_TABLE (PREFIX_0F3A16) },
7308 { PREFIX_TABLE (PREFIX_0F3A17) },
7309 /* 18 */
592d1631
L
7310 { Bad_Opcode },
7311 { Bad_Opcode },
7312 { Bad_Opcode },
7313 { Bad_Opcode },
7314 { Bad_Opcode },
7315 { Bad_Opcode },
7316 { Bad_Opcode },
7317 { Bad_Opcode },
f88c9eb0
SP
7318 /* 20 */
7319 { PREFIX_TABLE (PREFIX_0F3A20) },
7320 { PREFIX_TABLE (PREFIX_0F3A21) },
7321 { PREFIX_TABLE (PREFIX_0F3A22) },
592d1631
L
7322 { Bad_Opcode },
7323 { Bad_Opcode },
7324 { Bad_Opcode },
7325 { Bad_Opcode },
7326 { Bad_Opcode },
f88c9eb0 7327 /* 28 */
592d1631
L
7328 { Bad_Opcode },
7329 { Bad_Opcode },
7330 { Bad_Opcode },
7331 { Bad_Opcode },
7332 { Bad_Opcode },
7333 { Bad_Opcode },
7334 { Bad_Opcode },
7335 { Bad_Opcode },
f88c9eb0 7336 /* 30 */
592d1631
L
7337 { Bad_Opcode },
7338 { Bad_Opcode },
7339 { Bad_Opcode },
7340 { Bad_Opcode },
7341 { Bad_Opcode },
7342 { Bad_Opcode },
7343 { Bad_Opcode },
7344 { Bad_Opcode },
f88c9eb0 7345 /* 38 */
592d1631
L
7346 { Bad_Opcode },
7347 { Bad_Opcode },
7348 { Bad_Opcode },
7349 { Bad_Opcode },
7350 { Bad_Opcode },
7351 { Bad_Opcode },
7352 { Bad_Opcode },
7353 { Bad_Opcode },
f88c9eb0
SP
7354 /* 40 */
7355 { PREFIX_TABLE (PREFIX_0F3A40) },
7356 { PREFIX_TABLE (PREFIX_0F3A41) },
7357 { PREFIX_TABLE (PREFIX_0F3A42) },
592d1631 7358 { Bad_Opcode },
f88c9eb0 7359 { PREFIX_TABLE (PREFIX_0F3A44) },
592d1631
L
7360 { Bad_Opcode },
7361 { Bad_Opcode },
7362 { Bad_Opcode },
f88c9eb0 7363 /* 48 */
592d1631
L
7364 { Bad_Opcode },
7365 { Bad_Opcode },
7366 { Bad_Opcode },
7367 { Bad_Opcode },
7368 { Bad_Opcode },
7369 { Bad_Opcode },
7370 { Bad_Opcode },
7371 { Bad_Opcode },
f88c9eb0 7372 /* 50 */
592d1631
L
7373 { Bad_Opcode },
7374 { Bad_Opcode },
7375 { Bad_Opcode },
7376 { Bad_Opcode },
7377 { Bad_Opcode },
7378 { Bad_Opcode },
7379 { Bad_Opcode },
7380 { Bad_Opcode },
f88c9eb0 7381 /* 58 */
592d1631
L
7382 { Bad_Opcode },
7383 { Bad_Opcode },
7384 { Bad_Opcode },
7385 { Bad_Opcode },
7386 { Bad_Opcode },
7387 { Bad_Opcode },
7388 { Bad_Opcode },
7389 { Bad_Opcode },
f88c9eb0
SP
7390 /* 60 */
7391 { PREFIX_TABLE (PREFIX_0F3A60) },
7392 { PREFIX_TABLE (PREFIX_0F3A61) },
7393 { PREFIX_TABLE (PREFIX_0F3A62) },
7394 { PREFIX_TABLE (PREFIX_0F3A63) },
592d1631
L
7395 { Bad_Opcode },
7396 { Bad_Opcode },
7397 { Bad_Opcode },
7398 { Bad_Opcode },
f88c9eb0 7399 /* 68 */
592d1631
L
7400 { Bad_Opcode },
7401 { Bad_Opcode },
7402 { Bad_Opcode },
7403 { Bad_Opcode },
7404 { Bad_Opcode },
7405 { Bad_Opcode },
7406 { Bad_Opcode },
7407 { Bad_Opcode },
f88c9eb0 7408 /* 70 */
592d1631
L
7409 { Bad_Opcode },
7410 { Bad_Opcode },
7411 { Bad_Opcode },
7412 { Bad_Opcode },
7413 { Bad_Opcode },
7414 { Bad_Opcode },
7415 { Bad_Opcode },
7416 { Bad_Opcode },
f88c9eb0 7417 /* 78 */
592d1631
L
7418 { Bad_Opcode },
7419 { Bad_Opcode },
7420 { Bad_Opcode },
7421 { Bad_Opcode },
7422 { Bad_Opcode },
7423 { Bad_Opcode },
7424 { Bad_Opcode },
7425 { Bad_Opcode },
f88c9eb0 7426 /* 80 */
592d1631
L
7427 { Bad_Opcode },
7428 { Bad_Opcode },
7429 { Bad_Opcode },
7430 { Bad_Opcode },
7431 { Bad_Opcode },
7432 { Bad_Opcode },
7433 { Bad_Opcode },
7434 { Bad_Opcode },
f88c9eb0 7435 /* 88 */
592d1631
L
7436 { Bad_Opcode },
7437 { Bad_Opcode },
7438 { Bad_Opcode },
7439 { Bad_Opcode },
7440 { Bad_Opcode },
7441 { Bad_Opcode },
7442 { Bad_Opcode },
7443 { Bad_Opcode },
f88c9eb0 7444 /* 90 */
592d1631
L
7445 { Bad_Opcode },
7446 { Bad_Opcode },
7447 { Bad_Opcode },
7448 { Bad_Opcode },
7449 { Bad_Opcode },
7450 { Bad_Opcode },
7451 { Bad_Opcode },
7452 { Bad_Opcode },
f88c9eb0 7453 /* 98 */
592d1631
L
7454 { Bad_Opcode },
7455 { Bad_Opcode },
7456 { Bad_Opcode },
7457 { Bad_Opcode },
7458 { Bad_Opcode },
7459 { Bad_Opcode },
7460 { Bad_Opcode },
7461 { Bad_Opcode },
f88c9eb0 7462 /* a0 */
592d1631
L
7463 { Bad_Opcode },
7464 { Bad_Opcode },
7465 { Bad_Opcode },
7466 { Bad_Opcode },
7467 { Bad_Opcode },
7468 { Bad_Opcode },
7469 { Bad_Opcode },
7470 { Bad_Opcode },
f88c9eb0 7471 /* a8 */
592d1631
L
7472 { Bad_Opcode },
7473 { Bad_Opcode },
7474 { Bad_Opcode },
7475 { Bad_Opcode },
7476 { Bad_Opcode },
7477 { Bad_Opcode },
7478 { Bad_Opcode },
7479 { Bad_Opcode },
f88c9eb0 7480 /* b0 */
592d1631
L
7481 { Bad_Opcode },
7482 { Bad_Opcode },
7483 { Bad_Opcode },
7484 { Bad_Opcode },
7485 { Bad_Opcode },
7486 { Bad_Opcode },
7487 { Bad_Opcode },
7488 { Bad_Opcode },
f88c9eb0 7489 /* b8 */
592d1631
L
7490 { Bad_Opcode },
7491 { Bad_Opcode },
7492 { Bad_Opcode },
7493 { Bad_Opcode },
7494 { Bad_Opcode },
7495 { Bad_Opcode },
7496 { Bad_Opcode },
7497 { Bad_Opcode },
f88c9eb0 7498 /* c0 */
592d1631
L
7499 { Bad_Opcode },
7500 { Bad_Opcode },
7501 { Bad_Opcode },
7502 { Bad_Opcode },
7503 { Bad_Opcode },
7504 { Bad_Opcode },
7505 { Bad_Opcode },
7506 { Bad_Opcode },
f88c9eb0 7507 /* c8 */
592d1631
L
7508 { Bad_Opcode },
7509 { Bad_Opcode },
7510 { Bad_Opcode },
7511 { Bad_Opcode },
a0046408 7512 { PREFIX_TABLE (PREFIX_0F3ACC) },
592d1631 7513 { Bad_Opcode },
48521003
IT
7514 { PREFIX_TABLE (PREFIX_0F3ACE) },
7515 { PREFIX_TABLE (PREFIX_0F3ACF) },
f88c9eb0 7516 /* d0 */
592d1631
L
7517 { Bad_Opcode },
7518 { Bad_Opcode },
7519 { Bad_Opcode },
7520 { Bad_Opcode },
7521 { Bad_Opcode },
7522 { Bad_Opcode },
7523 { Bad_Opcode },
7524 { Bad_Opcode },
f88c9eb0 7525 /* d8 */
592d1631
L
7526 { Bad_Opcode },
7527 { Bad_Opcode },
7528 { Bad_Opcode },
7529 { Bad_Opcode },
7530 { Bad_Opcode },
7531 { Bad_Opcode },
7532 { Bad_Opcode },
f88c9eb0
SP
7533 { PREFIX_TABLE (PREFIX_0F3ADF) },
7534 /* e0 */
592d1631
L
7535 { Bad_Opcode },
7536 { Bad_Opcode },
7537 { Bad_Opcode },
7538 { Bad_Opcode },
7539 { Bad_Opcode },
592d1631
L
7540 { Bad_Opcode },
7541 { Bad_Opcode },
7542 { Bad_Opcode },
85f10a01 7543 /* e8 */
592d1631
L
7544 { Bad_Opcode },
7545 { Bad_Opcode },
7546 { Bad_Opcode },
7547 { Bad_Opcode },
7548 { Bad_Opcode },
7549 { Bad_Opcode },
7550 { Bad_Opcode },
7551 { Bad_Opcode },
85f10a01 7552 /* f0 */
592d1631
L
7553 { Bad_Opcode },
7554 { Bad_Opcode },
7555 { Bad_Opcode },
7556 { Bad_Opcode },
7557 { Bad_Opcode },
7558 { Bad_Opcode },
7559 { Bad_Opcode },
7560 { Bad_Opcode },
85f10a01 7561 /* f8 */
592d1631
L
7562 { Bad_Opcode },
7563 { Bad_Opcode },
7564 { Bad_Opcode },
7565 { Bad_Opcode },
7566 { Bad_Opcode },
7567 { Bad_Opcode },
7568 { Bad_Opcode },
7569 { Bad_Opcode },
85f10a01 7570 },
f88c9eb0
SP
7571};
7572
7573static const struct dis386 xop_table[][256] = {
5dd85c99 7574 /* XOP_08 */
85f10a01
MM
7575 {
7576 /* 00 */
592d1631
L
7577 { Bad_Opcode },
7578 { Bad_Opcode },
7579 { Bad_Opcode },
7580 { Bad_Opcode },
7581 { Bad_Opcode },
7582 { Bad_Opcode },
7583 { Bad_Opcode },
7584 { Bad_Opcode },
85f10a01 7585 /* 08 */
592d1631
L
7586 { Bad_Opcode },
7587 { Bad_Opcode },
7588 { Bad_Opcode },
7589 { Bad_Opcode },
7590 { Bad_Opcode },
7591 { Bad_Opcode },
7592 { Bad_Opcode },
7593 { Bad_Opcode },
85f10a01 7594 /* 10 */
3929df09 7595 { Bad_Opcode },
592d1631
L
7596 { Bad_Opcode },
7597 { Bad_Opcode },
7598 { Bad_Opcode },
7599 { Bad_Opcode },
7600 { Bad_Opcode },
7601 { Bad_Opcode },
7602 { Bad_Opcode },
85f10a01 7603 /* 18 */
592d1631
L
7604 { Bad_Opcode },
7605 { Bad_Opcode },
7606 { Bad_Opcode },
7607 { Bad_Opcode },
7608 { Bad_Opcode },
7609 { Bad_Opcode },
7610 { Bad_Opcode },
7611 { Bad_Opcode },
85f10a01 7612 /* 20 */
592d1631
L
7613 { Bad_Opcode },
7614 { Bad_Opcode },
7615 { Bad_Opcode },
7616 { Bad_Opcode },
7617 { Bad_Opcode },
7618 { Bad_Opcode },
7619 { Bad_Opcode },
7620 { Bad_Opcode },
85f10a01 7621 /* 28 */
592d1631
L
7622 { Bad_Opcode },
7623 { Bad_Opcode },
7624 { Bad_Opcode },
7625 { Bad_Opcode },
7626 { Bad_Opcode },
7627 { Bad_Opcode },
7628 { Bad_Opcode },
7629 { Bad_Opcode },
c0f3af97 7630 /* 30 */
592d1631
L
7631 { Bad_Opcode },
7632 { Bad_Opcode },
7633 { Bad_Opcode },
7634 { Bad_Opcode },
7635 { Bad_Opcode },
7636 { Bad_Opcode },
7637 { Bad_Opcode },
7638 { Bad_Opcode },
c0f3af97 7639 /* 38 */
592d1631
L
7640 { Bad_Opcode },
7641 { Bad_Opcode },
7642 { Bad_Opcode },
7643 { Bad_Opcode },
7644 { Bad_Opcode },
7645 { Bad_Opcode },
7646 { Bad_Opcode },
7647 { Bad_Opcode },
c0f3af97 7648 /* 40 */
592d1631
L
7649 { Bad_Opcode },
7650 { Bad_Opcode },
7651 { Bad_Opcode },
7652 { Bad_Opcode },
7653 { Bad_Opcode },
7654 { Bad_Opcode },
7655 { Bad_Opcode },
7656 { Bad_Opcode },
85f10a01 7657 /* 48 */
592d1631
L
7658 { Bad_Opcode },
7659 { Bad_Opcode },
7660 { Bad_Opcode },
7661 { Bad_Opcode },
7662 { Bad_Opcode },
7663 { Bad_Opcode },
7664 { Bad_Opcode },
7665 { Bad_Opcode },
c0f3af97 7666 /* 50 */
592d1631
L
7667 { Bad_Opcode },
7668 { Bad_Opcode },
7669 { Bad_Opcode },
7670 { Bad_Opcode },
7671 { Bad_Opcode },
7672 { Bad_Opcode },
7673 { Bad_Opcode },
7674 { Bad_Opcode },
85f10a01 7675 /* 58 */
592d1631
L
7676 { Bad_Opcode },
7677 { Bad_Opcode },
7678 { Bad_Opcode },
7679 { Bad_Opcode },
7680 { Bad_Opcode },
7681 { Bad_Opcode },
7682 { Bad_Opcode },
7683 { Bad_Opcode },
c1e679ec 7684 /* 60 */
592d1631
L
7685 { Bad_Opcode },
7686 { Bad_Opcode },
7687 { Bad_Opcode },
7688 { Bad_Opcode },
7689 { Bad_Opcode },
7690 { Bad_Opcode },
7691 { Bad_Opcode },
7692 { Bad_Opcode },
c0f3af97 7693 /* 68 */
592d1631
L
7694 { Bad_Opcode },
7695 { Bad_Opcode },
7696 { Bad_Opcode },
7697 { Bad_Opcode },
7698 { Bad_Opcode },
7699 { Bad_Opcode },
7700 { Bad_Opcode },
7701 { Bad_Opcode },
85f10a01 7702 /* 70 */
592d1631
L
7703 { Bad_Opcode },
7704 { Bad_Opcode },
7705 { Bad_Opcode },
7706 { Bad_Opcode },
7707 { Bad_Opcode },
7708 { Bad_Opcode },
7709 { Bad_Opcode },
7710 { Bad_Opcode },
85f10a01 7711 /* 78 */
592d1631
L
7712 { Bad_Opcode },
7713 { Bad_Opcode },
7714 { Bad_Opcode },
7715 { Bad_Opcode },
7716 { Bad_Opcode },
7717 { Bad_Opcode },
7718 { Bad_Opcode },
7719 { Bad_Opcode },
85f10a01 7720 /* 80 */
592d1631
L
7721 { Bad_Opcode },
7722 { Bad_Opcode },
7723 { Bad_Opcode },
7724 { Bad_Opcode },
7725 { Bad_Opcode },
3a2430e0
JB
7726 { "vpmacssww", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7727 { "vpmacsswd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7728 { "vpmacssdql", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
5dd85c99 7729 /* 88 */
592d1631
L
7730 { Bad_Opcode },
7731 { Bad_Opcode },
7732 { Bad_Opcode },
7733 { Bad_Opcode },
7734 { Bad_Opcode },
7735 { Bad_Opcode },
3a2430e0
JB
7736 { "vpmacssdd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7737 { "vpmacssdqh", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
5dd85c99 7738 /* 90 */
592d1631
L
7739 { Bad_Opcode },
7740 { Bad_Opcode },
7741 { Bad_Opcode },
7742 { Bad_Opcode },
7743 { Bad_Opcode },
3a2430e0
JB
7744 { "vpmacsww", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7745 { "vpmacswd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7746 { "vpmacsdql", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
5dd85c99 7747 /* 98 */
592d1631
L
7748 { Bad_Opcode },
7749 { Bad_Opcode },
7750 { Bad_Opcode },
7751 { Bad_Opcode },
7752 { Bad_Opcode },
7753 { Bad_Opcode },
3a2430e0
JB
7754 { "vpmacsdd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7755 { "vpmacsdqh", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
5dd85c99 7756 /* a0 */
592d1631
L
7757 { Bad_Opcode },
7758 { Bad_Opcode },
3a2430e0
JB
7759 { "vpcmov", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7760 { "vpperm", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
592d1631
L
7761 { Bad_Opcode },
7762 { Bad_Opcode },
3a2430e0 7763 { "vpmadcsswd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
592d1631 7764 { Bad_Opcode },
5dd85c99 7765 /* a8 */
592d1631
L
7766 { Bad_Opcode },
7767 { Bad_Opcode },
7768 { Bad_Opcode },
7769 { Bad_Opcode },
7770 { Bad_Opcode },
7771 { Bad_Opcode },
7772 { Bad_Opcode },
7773 { Bad_Opcode },
5dd85c99 7774 /* b0 */
592d1631
L
7775 { Bad_Opcode },
7776 { Bad_Opcode },
7777 { Bad_Opcode },
7778 { Bad_Opcode },
7779 { Bad_Opcode },
7780 { Bad_Opcode },
3a2430e0 7781 { "vpmadcswd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
592d1631 7782 { Bad_Opcode },
5dd85c99 7783 /* b8 */
592d1631
L
7784 { Bad_Opcode },
7785 { Bad_Opcode },
7786 { Bad_Opcode },
7787 { Bad_Opcode },
7788 { Bad_Opcode },
7789 { Bad_Opcode },
7790 { Bad_Opcode },
7791 { Bad_Opcode },
5dd85c99 7792 /* c0 */
bf890a93
IT
7793 { "vprotb", { XM, Vex_2src_1, Ib }, 0 },
7794 { "vprotw", { XM, Vex_2src_1, Ib }, 0 },
7795 { "vprotd", { XM, Vex_2src_1, Ib }, 0 },
7796 { "vprotq", { XM, Vex_2src_1, Ib }, 0 },
592d1631
L
7797 { Bad_Opcode },
7798 { Bad_Opcode },
7799 { Bad_Opcode },
7800 { Bad_Opcode },
5dd85c99 7801 /* c8 */
592d1631
L
7802 { Bad_Opcode },
7803 { Bad_Opcode },
7804 { Bad_Opcode },
7805 { Bad_Opcode },
ff688e1f
L
7806 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CC) },
7807 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CD) },
7808 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CE) },
7809 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CF) },
5dd85c99 7810 /* d0 */
592d1631
L
7811 { Bad_Opcode },
7812 { Bad_Opcode },
7813 { Bad_Opcode },
7814 { Bad_Opcode },
7815 { Bad_Opcode },
7816 { Bad_Opcode },
7817 { Bad_Opcode },
7818 { Bad_Opcode },
5dd85c99 7819 /* d8 */
592d1631
L
7820 { Bad_Opcode },
7821 { Bad_Opcode },
7822 { Bad_Opcode },
7823 { Bad_Opcode },
7824 { Bad_Opcode },
7825 { Bad_Opcode },
7826 { Bad_Opcode },
7827 { Bad_Opcode },
5dd85c99 7828 /* e0 */
592d1631
L
7829 { Bad_Opcode },
7830 { Bad_Opcode },
7831 { Bad_Opcode },
7832 { Bad_Opcode },
7833 { Bad_Opcode },
7834 { Bad_Opcode },
7835 { Bad_Opcode },
7836 { Bad_Opcode },
5dd85c99 7837 /* e8 */
592d1631
L
7838 { Bad_Opcode },
7839 { Bad_Opcode },
7840 { Bad_Opcode },
7841 { Bad_Opcode },
ff688e1f
L
7842 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EC) },
7843 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_ED) },
7844 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EE) },
7845 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EF) },
5dd85c99 7846 /* f0 */
592d1631
L
7847 { Bad_Opcode },
7848 { Bad_Opcode },
7849 { Bad_Opcode },
7850 { Bad_Opcode },
7851 { Bad_Opcode },
7852 { Bad_Opcode },
7853 { Bad_Opcode },
7854 { Bad_Opcode },
5dd85c99 7855 /* f8 */
592d1631
L
7856 { Bad_Opcode },
7857 { Bad_Opcode },
7858 { Bad_Opcode },
7859 { Bad_Opcode },
7860 { Bad_Opcode },
7861 { Bad_Opcode },
7862 { Bad_Opcode },
7863 { Bad_Opcode },
5dd85c99
SP
7864 },
7865 /* XOP_09 */
7866 {
7867 /* 00 */
592d1631 7868 { Bad_Opcode },
2a2a0f38
QN
7869 { REG_TABLE (REG_XOP_TBM_01) },
7870 { REG_TABLE (REG_XOP_TBM_02) },
592d1631
L
7871 { Bad_Opcode },
7872 { Bad_Opcode },
7873 { Bad_Opcode },
7874 { Bad_Opcode },
7875 { Bad_Opcode },
5dd85c99 7876 /* 08 */
592d1631
L
7877 { Bad_Opcode },
7878 { Bad_Opcode },
7879 { Bad_Opcode },
7880 { Bad_Opcode },
7881 { Bad_Opcode },
7882 { Bad_Opcode },
7883 { Bad_Opcode },
7884 { Bad_Opcode },
5dd85c99 7885 /* 10 */
592d1631
L
7886 { Bad_Opcode },
7887 { Bad_Opcode },
5dd85c99 7888 { REG_TABLE (REG_XOP_LWPCB) },
592d1631
L
7889 { Bad_Opcode },
7890 { Bad_Opcode },
7891 { Bad_Opcode },
7892 { Bad_Opcode },
7893 { Bad_Opcode },
5dd85c99 7894 /* 18 */
592d1631
L
7895 { Bad_Opcode },
7896 { Bad_Opcode },
7897 { Bad_Opcode },
7898 { Bad_Opcode },
7899 { Bad_Opcode },
7900 { Bad_Opcode },
7901 { Bad_Opcode },
7902 { Bad_Opcode },
5dd85c99 7903 /* 20 */
592d1631
L
7904 { Bad_Opcode },
7905 { Bad_Opcode },
7906 { Bad_Opcode },
7907 { Bad_Opcode },
7908 { Bad_Opcode },
7909 { Bad_Opcode },
7910 { Bad_Opcode },
7911 { Bad_Opcode },
5dd85c99 7912 /* 28 */
592d1631
L
7913 { Bad_Opcode },
7914 { Bad_Opcode },
7915 { Bad_Opcode },
7916 { Bad_Opcode },
7917 { Bad_Opcode },
7918 { Bad_Opcode },
7919 { Bad_Opcode },
7920 { Bad_Opcode },
5dd85c99 7921 /* 30 */
592d1631
L
7922 { Bad_Opcode },
7923 { Bad_Opcode },
7924 { Bad_Opcode },
7925 { Bad_Opcode },
7926 { Bad_Opcode },
7927 { Bad_Opcode },
7928 { Bad_Opcode },
7929 { Bad_Opcode },
5dd85c99 7930 /* 38 */
592d1631
L
7931 { Bad_Opcode },
7932 { Bad_Opcode },
7933 { Bad_Opcode },
7934 { Bad_Opcode },
7935 { Bad_Opcode },
7936 { Bad_Opcode },
7937 { Bad_Opcode },
7938 { Bad_Opcode },
5dd85c99 7939 /* 40 */
592d1631
L
7940 { Bad_Opcode },
7941 { Bad_Opcode },
7942 { Bad_Opcode },
7943 { Bad_Opcode },
7944 { Bad_Opcode },
7945 { Bad_Opcode },
7946 { Bad_Opcode },
7947 { Bad_Opcode },
5dd85c99 7948 /* 48 */
592d1631
L
7949 { Bad_Opcode },
7950 { Bad_Opcode },
7951 { Bad_Opcode },
7952 { Bad_Opcode },
7953 { Bad_Opcode },
7954 { Bad_Opcode },
7955 { Bad_Opcode },
7956 { Bad_Opcode },
5dd85c99 7957 /* 50 */
592d1631
L
7958 { Bad_Opcode },
7959 { Bad_Opcode },
7960 { Bad_Opcode },
7961 { Bad_Opcode },
7962 { Bad_Opcode },
7963 { Bad_Opcode },
7964 { Bad_Opcode },
7965 { Bad_Opcode },
5dd85c99 7966 /* 58 */
592d1631
L
7967 { Bad_Opcode },
7968 { Bad_Opcode },
7969 { Bad_Opcode },
7970 { Bad_Opcode },
7971 { Bad_Opcode },
7972 { Bad_Opcode },
7973 { Bad_Opcode },
7974 { Bad_Opcode },
5dd85c99 7975 /* 60 */
592d1631
L
7976 { Bad_Opcode },
7977 { Bad_Opcode },
7978 { Bad_Opcode },
7979 { Bad_Opcode },
7980 { Bad_Opcode },
7981 { Bad_Opcode },
7982 { Bad_Opcode },
7983 { Bad_Opcode },
5dd85c99 7984 /* 68 */
592d1631
L
7985 { Bad_Opcode },
7986 { Bad_Opcode },
7987 { Bad_Opcode },
7988 { Bad_Opcode },
7989 { Bad_Opcode },
7990 { Bad_Opcode },
7991 { Bad_Opcode },
7992 { Bad_Opcode },
5dd85c99 7993 /* 70 */
592d1631
L
7994 { Bad_Opcode },
7995 { Bad_Opcode },
7996 { Bad_Opcode },
7997 { Bad_Opcode },
7998 { Bad_Opcode },
7999 { Bad_Opcode },
8000 { Bad_Opcode },
8001 { Bad_Opcode },
5dd85c99 8002 /* 78 */
592d1631
L
8003 { Bad_Opcode },
8004 { Bad_Opcode },
8005 { Bad_Opcode },
8006 { Bad_Opcode },
8007 { Bad_Opcode },
8008 { Bad_Opcode },
8009 { Bad_Opcode },
8010 { Bad_Opcode },
5dd85c99 8011 /* 80 */
592a252b
L
8012 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_80) },
8013 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_81) },
bf890a93
IT
8014 { "vfrczss", { XM, EXd }, 0 },
8015 { "vfrczsd", { XM, EXq }, 0 },
592d1631
L
8016 { Bad_Opcode },
8017 { Bad_Opcode },
8018 { Bad_Opcode },
8019 { Bad_Opcode },
5dd85c99 8020 /* 88 */
592d1631
L
8021 { Bad_Opcode },
8022 { Bad_Opcode },
8023 { Bad_Opcode },
8024 { Bad_Opcode },
8025 { Bad_Opcode },
8026 { Bad_Opcode },
8027 { Bad_Opcode },
8028 { Bad_Opcode },
5dd85c99 8029 /* 90 */
bf890a93
IT
8030 { "vprotb", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8031 { "vprotw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8032 { "vprotd", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8033 { "vprotq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8034 { "vpshlb", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8035 { "vpshlw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8036 { "vpshld", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8037 { "vpshlq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
5dd85c99 8038 /* 98 */
bf890a93
IT
8039 { "vpshab", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8040 { "vpshaw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8041 { "vpshad", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8042 { "vpshaq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
592d1631
L
8043 { Bad_Opcode },
8044 { Bad_Opcode },
8045 { Bad_Opcode },
8046 { Bad_Opcode },
5dd85c99 8047 /* a0 */
592d1631
L
8048 { Bad_Opcode },
8049 { Bad_Opcode },
8050 { Bad_Opcode },
8051 { Bad_Opcode },
8052 { Bad_Opcode },
8053 { Bad_Opcode },
8054 { Bad_Opcode },
8055 { Bad_Opcode },
5dd85c99 8056 /* a8 */
592d1631
L
8057 { Bad_Opcode },
8058 { Bad_Opcode },
8059 { Bad_Opcode },
8060 { Bad_Opcode },
8061 { Bad_Opcode },
8062 { Bad_Opcode },
8063 { Bad_Opcode },
8064 { Bad_Opcode },
5dd85c99 8065 /* b0 */
592d1631
L
8066 { Bad_Opcode },
8067 { Bad_Opcode },
8068 { Bad_Opcode },
8069 { Bad_Opcode },
8070 { Bad_Opcode },
8071 { Bad_Opcode },
8072 { Bad_Opcode },
8073 { Bad_Opcode },
5dd85c99 8074 /* b8 */
592d1631
L
8075 { Bad_Opcode },
8076 { Bad_Opcode },
8077 { Bad_Opcode },
8078 { Bad_Opcode },
8079 { Bad_Opcode },
8080 { Bad_Opcode },
8081 { Bad_Opcode },
8082 { Bad_Opcode },
5dd85c99 8083 /* c0 */
592d1631 8084 { Bad_Opcode },
bf890a93
IT
8085 { "vphaddbw", { XM, EXxmm }, 0 },
8086 { "vphaddbd", { XM, EXxmm }, 0 },
8087 { "vphaddbq", { XM, EXxmm }, 0 },
592d1631
L
8088 { Bad_Opcode },
8089 { Bad_Opcode },
bf890a93
IT
8090 { "vphaddwd", { XM, EXxmm }, 0 },
8091 { "vphaddwq", { XM, EXxmm }, 0 },
5dd85c99 8092 /* c8 */
592d1631
L
8093 { Bad_Opcode },
8094 { Bad_Opcode },
8095 { Bad_Opcode },
bf890a93 8096 { "vphadddq", { XM, EXxmm }, 0 },
592d1631
L
8097 { Bad_Opcode },
8098 { Bad_Opcode },
8099 { Bad_Opcode },
8100 { Bad_Opcode },
5dd85c99 8101 /* d0 */
592d1631 8102 { Bad_Opcode },
bf890a93
IT
8103 { "vphaddubw", { XM, EXxmm }, 0 },
8104 { "vphaddubd", { XM, EXxmm }, 0 },
8105 { "vphaddubq", { XM, EXxmm }, 0 },
592d1631
L
8106 { Bad_Opcode },
8107 { Bad_Opcode },
bf890a93
IT
8108 { "vphadduwd", { XM, EXxmm }, 0 },
8109 { "vphadduwq", { XM, EXxmm }, 0 },
5dd85c99 8110 /* d8 */
592d1631
L
8111 { Bad_Opcode },
8112 { Bad_Opcode },
8113 { Bad_Opcode },
bf890a93 8114 { "vphaddudq", { XM, EXxmm }, 0 },
592d1631
L
8115 { Bad_Opcode },
8116 { Bad_Opcode },
8117 { Bad_Opcode },
8118 { Bad_Opcode },
5dd85c99 8119 /* e0 */
592d1631 8120 { Bad_Opcode },
bf890a93
IT
8121 { "vphsubbw", { XM, EXxmm }, 0 },
8122 { "vphsubwd", { XM, EXxmm }, 0 },
8123 { "vphsubdq", { XM, EXxmm }, 0 },
592d1631
L
8124 { Bad_Opcode },
8125 { Bad_Opcode },
8126 { Bad_Opcode },
8127 { Bad_Opcode },
4e7d34a6 8128 /* e8 */
592d1631
L
8129 { Bad_Opcode },
8130 { Bad_Opcode },
8131 { Bad_Opcode },
8132 { Bad_Opcode },
8133 { Bad_Opcode },
8134 { Bad_Opcode },
8135 { Bad_Opcode },
8136 { Bad_Opcode },
4e7d34a6 8137 /* f0 */
592d1631
L
8138 { Bad_Opcode },
8139 { Bad_Opcode },
8140 { Bad_Opcode },
8141 { Bad_Opcode },
8142 { Bad_Opcode },
8143 { Bad_Opcode },
8144 { Bad_Opcode },
8145 { Bad_Opcode },
4e7d34a6 8146 /* f8 */
592d1631
L
8147 { Bad_Opcode },
8148 { Bad_Opcode },
8149 { Bad_Opcode },
8150 { Bad_Opcode },
8151 { Bad_Opcode },
8152 { Bad_Opcode },
8153 { Bad_Opcode },
8154 { Bad_Opcode },
4e7d34a6 8155 },
f88c9eb0 8156 /* XOP_0A */
4e7d34a6
L
8157 {
8158 /* 00 */
592d1631
L
8159 { Bad_Opcode },
8160 { Bad_Opcode },
8161 { Bad_Opcode },
8162 { Bad_Opcode },
8163 { Bad_Opcode },
8164 { Bad_Opcode },
8165 { Bad_Opcode },
8166 { Bad_Opcode },
4e7d34a6 8167 /* 08 */
592d1631
L
8168 { Bad_Opcode },
8169 { Bad_Opcode },
8170 { Bad_Opcode },
8171 { Bad_Opcode },
8172 { Bad_Opcode },
8173 { Bad_Opcode },
8174 { Bad_Opcode },
8175 { Bad_Opcode },
4e7d34a6 8176 /* 10 */
c1dc7af5 8177 { "bextrS", { Gdq, Edq, Id }, 0 },
592d1631 8178 { Bad_Opcode },
f88c9eb0 8179 { REG_TABLE (REG_XOP_LWP) },
592d1631
L
8180 { Bad_Opcode },
8181 { Bad_Opcode },
8182 { Bad_Opcode },
8183 { Bad_Opcode },
8184 { Bad_Opcode },
4e7d34a6 8185 /* 18 */
592d1631
L
8186 { Bad_Opcode },
8187 { Bad_Opcode },
8188 { Bad_Opcode },
8189 { Bad_Opcode },
8190 { Bad_Opcode },
8191 { Bad_Opcode },
8192 { Bad_Opcode },
8193 { Bad_Opcode },
4e7d34a6 8194 /* 20 */
592d1631
L
8195 { Bad_Opcode },
8196 { Bad_Opcode },
8197 { Bad_Opcode },
8198 { Bad_Opcode },
8199 { Bad_Opcode },
8200 { Bad_Opcode },
8201 { Bad_Opcode },
8202 { Bad_Opcode },
4e7d34a6 8203 /* 28 */
592d1631
L
8204 { Bad_Opcode },
8205 { Bad_Opcode },
8206 { Bad_Opcode },
8207 { Bad_Opcode },
8208 { Bad_Opcode },
8209 { Bad_Opcode },
8210 { Bad_Opcode },
8211 { Bad_Opcode },
4e7d34a6 8212 /* 30 */
592d1631
L
8213 { Bad_Opcode },
8214 { Bad_Opcode },
8215 { Bad_Opcode },
8216 { Bad_Opcode },
8217 { Bad_Opcode },
8218 { Bad_Opcode },
8219 { Bad_Opcode },
8220 { Bad_Opcode },
c0f3af97 8221 /* 38 */
592d1631
L
8222 { Bad_Opcode },
8223 { Bad_Opcode },
8224 { Bad_Opcode },
8225 { Bad_Opcode },
8226 { Bad_Opcode },
8227 { Bad_Opcode },
8228 { Bad_Opcode },
8229 { Bad_Opcode },
c0f3af97 8230 /* 40 */
592d1631
L
8231 { Bad_Opcode },
8232 { Bad_Opcode },
8233 { Bad_Opcode },
8234 { Bad_Opcode },
8235 { Bad_Opcode },
8236 { Bad_Opcode },
8237 { Bad_Opcode },
8238 { Bad_Opcode },
c1e679ec 8239 /* 48 */
592d1631
L
8240 { Bad_Opcode },
8241 { Bad_Opcode },
8242 { Bad_Opcode },
8243 { Bad_Opcode },
8244 { Bad_Opcode },
8245 { Bad_Opcode },
8246 { Bad_Opcode },
8247 { Bad_Opcode },
c1e679ec 8248 /* 50 */
592d1631
L
8249 { Bad_Opcode },
8250 { Bad_Opcode },
8251 { Bad_Opcode },
8252 { Bad_Opcode },
8253 { Bad_Opcode },
8254 { Bad_Opcode },
8255 { Bad_Opcode },
8256 { Bad_Opcode },
4e7d34a6 8257 /* 58 */
592d1631
L
8258 { Bad_Opcode },
8259 { Bad_Opcode },
8260 { Bad_Opcode },
8261 { Bad_Opcode },
8262 { Bad_Opcode },
8263 { Bad_Opcode },
8264 { Bad_Opcode },
8265 { Bad_Opcode },
4e7d34a6 8266 /* 60 */
592d1631
L
8267 { Bad_Opcode },
8268 { Bad_Opcode },
8269 { Bad_Opcode },
8270 { Bad_Opcode },
8271 { Bad_Opcode },
8272 { Bad_Opcode },
8273 { Bad_Opcode },
8274 { Bad_Opcode },
4e7d34a6 8275 /* 68 */
592d1631
L
8276 { Bad_Opcode },
8277 { Bad_Opcode },
8278 { Bad_Opcode },
8279 { Bad_Opcode },
8280 { Bad_Opcode },
8281 { Bad_Opcode },
8282 { Bad_Opcode },
8283 { Bad_Opcode },
4e7d34a6 8284 /* 70 */
592d1631
L
8285 { Bad_Opcode },
8286 { Bad_Opcode },
8287 { Bad_Opcode },
8288 { Bad_Opcode },
8289 { Bad_Opcode },
8290 { Bad_Opcode },
8291 { Bad_Opcode },
8292 { Bad_Opcode },
4e7d34a6 8293 /* 78 */
592d1631
L
8294 { Bad_Opcode },
8295 { Bad_Opcode },
8296 { Bad_Opcode },
8297 { Bad_Opcode },
8298 { Bad_Opcode },
8299 { Bad_Opcode },
8300 { Bad_Opcode },
8301 { Bad_Opcode },
4e7d34a6 8302 /* 80 */
592d1631
L
8303 { Bad_Opcode },
8304 { Bad_Opcode },
8305 { Bad_Opcode },
8306 { Bad_Opcode },
8307 { Bad_Opcode },
8308 { Bad_Opcode },
8309 { Bad_Opcode },
8310 { Bad_Opcode },
4e7d34a6 8311 /* 88 */
592d1631
L
8312 { Bad_Opcode },
8313 { Bad_Opcode },
8314 { Bad_Opcode },
8315 { Bad_Opcode },
8316 { Bad_Opcode },
8317 { Bad_Opcode },
8318 { Bad_Opcode },
8319 { Bad_Opcode },
4e7d34a6 8320 /* 90 */
592d1631
L
8321 { Bad_Opcode },
8322 { Bad_Opcode },
8323 { Bad_Opcode },
8324 { Bad_Opcode },
8325 { Bad_Opcode },
8326 { Bad_Opcode },
8327 { Bad_Opcode },
8328 { Bad_Opcode },
4e7d34a6 8329 /* 98 */
592d1631
L
8330 { Bad_Opcode },
8331 { Bad_Opcode },
8332 { Bad_Opcode },
8333 { Bad_Opcode },
8334 { Bad_Opcode },
8335 { Bad_Opcode },
8336 { Bad_Opcode },
8337 { Bad_Opcode },
4e7d34a6 8338 /* a0 */
592d1631
L
8339 { Bad_Opcode },
8340 { Bad_Opcode },
8341 { Bad_Opcode },
8342 { Bad_Opcode },
8343 { Bad_Opcode },
8344 { Bad_Opcode },
8345 { Bad_Opcode },
8346 { Bad_Opcode },
4e7d34a6 8347 /* a8 */
592d1631
L
8348 { Bad_Opcode },
8349 { Bad_Opcode },
8350 { Bad_Opcode },
8351 { Bad_Opcode },
8352 { Bad_Opcode },
8353 { Bad_Opcode },
8354 { Bad_Opcode },
8355 { Bad_Opcode },
d5d7db8e 8356 /* b0 */
592d1631
L
8357 { Bad_Opcode },
8358 { Bad_Opcode },
8359 { Bad_Opcode },
8360 { Bad_Opcode },
8361 { Bad_Opcode },
8362 { Bad_Opcode },
8363 { Bad_Opcode },
8364 { Bad_Opcode },
85f10a01 8365 /* b8 */
592d1631
L
8366 { Bad_Opcode },
8367 { Bad_Opcode },
8368 { Bad_Opcode },
8369 { Bad_Opcode },
8370 { Bad_Opcode },
8371 { Bad_Opcode },
8372 { Bad_Opcode },
8373 { Bad_Opcode },
85f10a01 8374 /* c0 */
592d1631
L
8375 { Bad_Opcode },
8376 { Bad_Opcode },
8377 { Bad_Opcode },
8378 { Bad_Opcode },
8379 { Bad_Opcode },
8380 { Bad_Opcode },
8381 { Bad_Opcode },
8382 { Bad_Opcode },
85f10a01 8383 /* c8 */
592d1631
L
8384 { Bad_Opcode },
8385 { Bad_Opcode },
8386 { Bad_Opcode },
8387 { Bad_Opcode },
8388 { Bad_Opcode },
8389 { Bad_Opcode },
8390 { Bad_Opcode },
8391 { Bad_Opcode },
85f10a01 8392 /* d0 */
592d1631
L
8393 { Bad_Opcode },
8394 { Bad_Opcode },
8395 { Bad_Opcode },
8396 { Bad_Opcode },
8397 { Bad_Opcode },
8398 { Bad_Opcode },
8399 { Bad_Opcode },
8400 { Bad_Opcode },
85f10a01 8401 /* d8 */
592d1631
L
8402 { Bad_Opcode },
8403 { Bad_Opcode },
8404 { Bad_Opcode },
8405 { Bad_Opcode },
8406 { Bad_Opcode },
8407 { Bad_Opcode },
8408 { Bad_Opcode },
8409 { Bad_Opcode },
85f10a01 8410 /* e0 */
592d1631
L
8411 { Bad_Opcode },
8412 { Bad_Opcode },
8413 { Bad_Opcode },
8414 { Bad_Opcode },
8415 { Bad_Opcode },
8416 { Bad_Opcode },
8417 { Bad_Opcode },
8418 { Bad_Opcode },
85f10a01 8419 /* e8 */
592d1631
L
8420 { Bad_Opcode },
8421 { Bad_Opcode },
8422 { Bad_Opcode },
8423 { Bad_Opcode },
8424 { Bad_Opcode },
8425 { Bad_Opcode },
8426 { Bad_Opcode },
8427 { Bad_Opcode },
85f10a01 8428 /* f0 */
592d1631
L
8429 { Bad_Opcode },
8430 { Bad_Opcode },
8431 { Bad_Opcode },
8432 { Bad_Opcode },
8433 { Bad_Opcode },
8434 { Bad_Opcode },
8435 { Bad_Opcode },
8436 { Bad_Opcode },
85f10a01 8437 /* f8 */
592d1631
L
8438 { Bad_Opcode },
8439 { Bad_Opcode },
8440 { Bad_Opcode },
8441 { Bad_Opcode },
8442 { Bad_Opcode },
8443 { Bad_Opcode },
8444 { Bad_Opcode },
8445 { Bad_Opcode },
85f10a01 8446 },
c0f3af97
L
8447};
8448
8449static const struct dis386 vex_table[][256] = {
8450 /* VEX_0F */
85f10a01
MM
8451 {
8452 /* 00 */
592d1631
L
8453 { Bad_Opcode },
8454 { Bad_Opcode },
8455 { Bad_Opcode },
8456 { Bad_Opcode },
8457 { Bad_Opcode },
8458 { Bad_Opcode },
8459 { Bad_Opcode },
8460 { Bad_Opcode },
85f10a01 8461 /* 08 */
592d1631
L
8462 { Bad_Opcode },
8463 { Bad_Opcode },
8464 { Bad_Opcode },
8465 { Bad_Opcode },
8466 { Bad_Opcode },
8467 { Bad_Opcode },
8468 { Bad_Opcode },
8469 { Bad_Opcode },
c0f3af97 8470 /* 10 */
592a252b
L
8471 { PREFIX_TABLE (PREFIX_VEX_0F10) },
8472 { PREFIX_TABLE (PREFIX_VEX_0F11) },
8473 { PREFIX_TABLE (PREFIX_VEX_0F12) },
8474 { MOD_TABLE (MOD_VEX_0F13) },
ec6f095a
L
8475 { "vunpcklpX", { XM, Vex, EXx }, 0 },
8476 { "vunpckhpX", { XM, Vex, EXx }, 0 },
592a252b
L
8477 { PREFIX_TABLE (PREFIX_VEX_0F16) },
8478 { MOD_TABLE (MOD_VEX_0F17) },
c0f3af97 8479 /* 18 */
592d1631
L
8480 { Bad_Opcode },
8481 { Bad_Opcode },
8482 { Bad_Opcode },
8483 { Bad_Opcode },
8484 { Bad_Opcode },
8485 { Bad_Opcode },
8486 { Bad_Opcode },
8487 { Bad_Opcode },
c0f3af97 8488 /* 20 */
592d1631
L
8489 { Bad_Opcode },
8490 { Bad_Opcode },
8491 { Bad_Opcode },
8492 { Bad_Opcode },
8493 { Bad_Opcode },
8494 { Bad_Opcode },
8495 { Bad_Opcode },
8496 { Bad_Opcode },
c0f3af97 8497 /* 28 */
ec6f095a
L
8498 { "vmovapX", { XM, EXx }, 0 },
8499 { "vmovapX", { EXxS, XM }, 0 },
592a252b
L
8500 { PREFIX_TABLE (PREFIX_VEX_0F2A) },
8501 { MOD_TABLE (MOD_VEX_0F2B) },
8502 { PREFIX_TABLE (PREFIX_VEX_0F2C) },
8503 { PREFIX_TABLE (PREFIX_VEX_0F2D) },
8504 { PREFIX_TABLE (PREFIX_VEX_0F2E) },
8505 { PREFIX_TABLE (PREFIX_VEX_0F2F) },
85f10a01 8506 /* 30 */
592d1631
L
8507 { Bad_Opcode },
8508 { Bad_Opcode },
8509 { Bad_Opcode },
8510 { Bad_Opcode },
8511 { Bad_Opcode },
8512 { Bad_Opcode },
8513 { Bad_Opcode },
8514 { Bad_Opcode },
4e7d34a6 8515 /* 38 */
592d1631
L
8516 { Bad_Opcode },
8517 { Bad_Opcode },
8518 { Bad_Opcode },
8519 { Bad_Opcode },
8520 { Bad_Opcode },
8521 { Bad_Opcode },
8522 { Bad_Opcode },
8523 { Bad_Opcode },
d5d7db8e 8524 /* 40 */
592d1631 8525 { Bad_Opcode },
43234a1e
L
8526 { PREFIX_TABLE (PREFIX_VEX_0F41) },
8527 { PREFIX_TABLE (PREFIX_VEX_0F42) },
592d1631 8528 { Bad_Opcode },
43234a1e
L
8529 { PREFIX_TABLE (PREFIX_VEX_0F44) },
8530 { PREFIX_TABLE (PREFIX_VEX_0F45) },
8531 { PREFIX_TABLE (PREFIX_VEX_0F46) },
8532 { PREFIX_TABLE (PREFIX_VEX_0F47) },
85f10a01 8533 /* 48 */
592d1631
L
8534 { Bad_Opcode },
8535 { Bad_Opcode },
1ba585e8 8536 { PREFIX_TABLE (PREFIX_VEX_0F4A) },
43234a1e 8537 { PREFIX_TABLE (PREFIX_VEX_0F4B) },
592d1631
L
8538 { Bad_Opcode },
8539 { Bad_Opcode },
8540 { Bad_Opcode },
8541 { Bad_Opcode },
d5d7db8e 8542 /* 50 */
592a252b
L
8543 { MOD_TABLE (MOD_VEX_0F50) },
8544 { PREFIX_TABLE (PREFIX_VEX_0F51) },
8545 { PREFIX_TABLE (PREFIX_VEX_0F52) },
8546 { PREFIX_TABLE (PREFIX_VEX_0F53) },
bf890a93
IT
8547 { "vandpX", { XM, Vex, EXx }, 0 },
8548 { "vandnpX", { XM, Vex, EXx }, 0 },
8549 { "vorpX", { XM, Vex, EXx }, 0 },
8550 { "vxorpX", { XM, Vex, EXx }, 0 },
c0f3af97 8551 /* 58 */
592a252b
L
8552 { PREFIX_TABLE (PREFIX_VEX_0F58) },
8553 { PREFIX_TABLE (PREFIX_VEX_0F59) },
8554 { PREFIX_TABLE (PREFIX_VEX_0F5A) },
8555 { PREFIX_TABLE (PREFIX_VEX_0F5B) },
8556 { PREFIX_TABLE (PREFIX_VEX_0F5C) },
8557 { PREFIX_TABLE (PREFIX_VEX_0F5D) },
8558 { PREFIX_TABLE (PREFIX_VEX_0F5E) },
8559 { PREFIX_TABLE (PREFIX_VEX_0F5F) },
c0f3af97 8560 /* 60 */
592a252b
L
8561 { PREFIX_TABLE (PREFIX_VEX_0F60) },
8562 { PREFIX_TABLE (PREFIX_VEX_0F61) },
8563 { PREFIX_TABLE (PREFIX_VEX_0F62) },
8564 { PREFIX_TABLE (PREFIX_VEX_0F63) },
8565 { PREFIX_TABLE (PREFIX_VEX_0F64) },
8566 { PREFIX_TABLE (PREFIX_VEX_0F65) },
8567 { PREFIX_TABLE (PREFIX_VEX_0F66) },
8568 { PREFIX_TABLE (PREFIX_VEX_0F67) },
c0f3af97 8569 /* 68 */
592a252b
L
8570 { PREFIX_TABLE (PREFIX_VEX_0F68) },
8571 { PREFIX_TABLE (PREFIX_VEX_0F69) },
8572 { PREFIX_TABLE (PREFIX_VEX_0F6A) },
8573 { PREFIX_TABLE (PREFIX_VEX_0F6B) },
8574 { PREFIX_TABLE (PREFIX_VEX_0F6C) },
8575 { PREFIX_TABLE (PREFIX_VEX_0F6D) },
8576 { PREFIX_TABLE (PREFIX_VEX_0F6E) },
8577 { PREFIX_TABLE (PREFIX_VEX_0F6F) },
c0f3af97 8578 /* 70 */
592a252b
L
8579 { PREFIX_TABLE (PREFIX_VEX_0F70) },
8580 { REG_TABLE (REG_VEX_0F71) },
8581 { REG_TABLE (REG_VEX_0F72) },
8582 { REG_TABLE (REG_VEX_0F73) },
8583 { PREFIX_TABLE (PREFIX_VEX_0F74) },
8584 { PREFIX_TABLE (PREFIX_VEX_0F75) },
8585 { PREFIX_TABLE (PREFIX_VEX_0F76) },
8586 { PREFIX_TABLE (PREFIX_VEX_0F77) },
c0f3af97 8587 /* 78 */
592d1631
L
8588 { Bad_Opcode },
8589 { Bad_Opcode },
8590 { Bad_Opcode },
8591 { Bad_Opcode },
592a252b
L
8592 { PREFIX_TABLE (PREFIX_VEX_0F7C) },
8593 { PREFIX_TABLE (PREFIX_VEX_0F7D) },
8594 { PREFIX_TABLE (PREFIX_VEX_0F7E) },
8595 { PREFIX_TABLE (PREFIX_VEX_0F7F) },
c0f3af97 8596 /* 80 */
592d1631
L
8597 { Bad_Opcode },
8598 { Bad_Opcode },
8599 { Bad_Opcode },
8600 { Bad_Opcode },
8601 { Bad_Opcode },
8602 { Bad_Opcode },
8603 { Bad_Opcode },
8604 { Bad_Opcode },
c0f3af97 8605 /* 88 */
592d1631
L
8606 { Bad_Opcode },
8607 { Bad_Opcode },
8608 { Bad_Opcode },
8609 { Bad_Opcode },
8610 { Bad_Opcode },
8611 { Bad_Opcode },
8612 { Bad_Opcode },
8613 { Bad_Opcode },
c0f3af97 8614 /* 90 */
43234a1e
L
8615 { PREFIX_TABLE (PREFIX_VEX_0F90) },
8616 { PREFIX_TABLE (PREFIX_VEX_0F91) },
8617 { PREFIX_TABLE (PREFIX_VEX_0F92) },
8618 { PREFIX_TABLE (PREFIX_VEX_0F93) },
592d1631
L
8619 { Bad_Opcode },
8620 { Bad_Opcode },
8621 { Bad_Opcode },
8622 { Bad_Opcode },
c0f3af97 8623 /* 98 */
43234a1e 8624 { PREFIX_TABLE (PREFIX_VEX_0F98) },
1ba585e8 8625 { PREFIX_TABLE (PREFIX_VEX_0F99) },
592d1631
L
8626 { Bad_Opcode },
8627 { Bad_Opcode },
8628 { Bad_Opcode },
8629 { Bad_Opcode },
8630 { Bad_Opcode },
8631 { Bad_Opcode },
c0f3af97 8632 /* a0 */
592d1631
L
8633 { Bad_Opcode },
8634 { Bad_Opcode },
8635 { Bad_Opcode },
8636 { Bad_Opcode },
8637 { Bad_Opcode },
8638 { Bad_Opcode },
8639 { Bad_Opcode },
8640 { Bad_Opcode },
c0f3af97 8641 /* a8 */
592d1631
L
8642 { Bad_Opcode },
8643 { Bad_Opcode },
8644 { Bad_Opcode },
8645 { Bad_Opcode },
8646 { Bad_Opcode },
8647 { Bad_Opcode },
592a252b 8648 { REG_TABLE (REG_VEX_0FAE) },
592d1631 8649 { Bad_Opcode },
c0f3af97 8650 /* b0 */
592d1631
L
8651 { Bad_Opcode },
8652 { Bad_Opcode },
8653 { Bad_Opcode },
8654 { Bad_Opcode },
8655 { Bad_Opcode },
8656 { Bad_Opcode },
8657 { Bad_Opcode },
8658 { Bad_Opcode },
c0f3af97 8659 /* b8 */
592d1631
L
8660 { Bad_Opcode },
8661 { Bad_Opcode },
8662 { Bad_Opcode },
8663 { Bad_Opcode },
8664 { Bad_Opcode },
8665 { Bad_Opcode },
8666 { Bad_Opcode },
8667 { Bad_Opcode },
c0f3af97 8668 /* c0 */
592d1631
L
8669 { Bad_Opcode },
8670 { Bad_Opcode },
592a252b 8671 { PREFIX_TABLE (PREFIX_VEX_0FC2) },
592d1631 8672 { Bad_Opcode },
592a252b
L
8673 { PREFIX_TABLE (PREFIX_VEX_0FC4) },
8674 { PREFIX_TABLE (PREFIX_VEX_0FC5) },
bf890a93 8675 { "vshufpX", { XM, Vex, EXx, Ib }, 0 },
592d1631 8676 { Bad_Opcode },
c0f3af97 8677 /* c8 */
592d1631
L
8678 { Bad_Opcode },
8679 { Bad_Opcode },
8680 { Bad_Opcode },
8681 { Bad_Opcode },
8682 { Bad_Opcode },
8683 { Bad_Opcode },
8684 { Bad_Opcode },
8685 { Bad_Opcode },
c0f3af97 8686 /* d0 */
592a252b
L
8687 { PREFIX_TABLE (PREFIX_VEX_0FD0) },
8688 { PREFIX_TABLE (PREFIX_VEX_0FD1) },
8689 { PREFIX_TABLE (PREFIX_VEX_0FD2) },
8690 { PREFIX_TABLE (PREFIX_VEX_0FD3) },
8691 { PREFIX_TABLE (PREFIX_VEX_0FD4) },
8692 { PREFIX_TABLE (PREFIX_VEX_0FD5) },
8693 { PREFIX_TABLE (PREFIX_VEX_0FD6) },
8694 { PREFIX_TABLE (PREFIX_VEX_0FD7) },
c0f3af97 8695 /* d8 */
592a252b
L
8696 { PREFIX_TABLE (PREFIX_VEX_0FD8) },
8697 { PREFIX_TABLE (PREFIX_VEX_0FD9) },
8698 { PREFIX_TABLE (PREFIX_VEX_0FDA) },
8699 { PREFIX_TABLE (PREFIX_VEX_0FDB) },
8700 { PREFIX_TABLE (PREFIX_VEX_0FDC) },
8701 { PREFIX_TABLE (PREFIX_VEX_0FDD) },
8702 { PREFIX_TABLE (PREFIX_VEX_0FDE) },
8703 { PREFIX_TABLE (PREFIX_VEX_0FDF) },
c0f3af97 8704 /* e0 */
592a252b
L
8705 { PREFIX_TABLE (PREFIX_VEX_0FE0) },
8706 { PREFIX_TABLE (PREFIX_VEX_0FE1) },
8707 { PREFIX_TABLE (PREFIX_VEX_0FE2) },
8708 { PREFIX_TABLE (PREFIX_VEX_0FE3) },
8709 { PREFIX_TABLE (PREFIX_VEX_0FE4) },
8710 { PREFIX_TABLE (PREFIX_VEX_0FE5) },
8711 { PREFIX_TABLE (PREFIX_VEX_0FE6) },
8712 { PREFIX_TABLE (PREFIX_VEX_0FE7) },
c0f3af97 8713 /* e8 */
592a252b
L
8714 { PREFIX_TABLE (PREFIX_VEX_0FE8) },
8715 { PREFIX_TABLE (PREFIX_VEX_0FE9) },
8716 { PREFIX_TABLE (PREFIX_VEX_0FEA) },
8717 { PREFIX_TABLE (PREFIX_VEX_0FEB) },
8718 { PREFIX_TABLE (PREFIX_VEX_0FEC) },
8719 { PREFIX_TABLE (PREFIX_VEX_0FED) },
8720 { PREFIX_TABLE (PREFIX_VEX_0FEE) },
8721 { PREFIX_TABLE (PREFIX_VEX_0FEF) },
c0f3af97 8722 /* f0 */
592a252b
L
8723 { PREFIX_TABLE (PREFIX_VEX_0FF0) },
8724 { PREFIX_TABLE (PREFIX_VEX_0FF1) },
8725 { PREFIX_TABLE (PREFIX_VEX_0FF2) },
8726 { PREFIX_TABLE (PREFIX_VEX_0FF3) },
8727 { PREFIX_TABLE (PREFIX_VEX_0FF4) },
8728 { PREFIX_TABLE (PREFIX_VEX_0FF5) },
8729 { PREFIX_TABLE (PREFIX_VEX_0FF6) },
8730 { PREFIX_TABLE (PREFIX_VEX_0FF7) },
c0f3af97 8731 /* f8 */
592a252b
L
8732 { PREFIX_TABLE (PREFIX_VEX_0FF8) },
8733 { PREFIX_TABLE (PREFIX_VEX_0FF9) },
8734 { PREFIX_TABLE (PREFIX_VEX_0FFA) },
8735 { PREFIX_TABLE (PREFIX_VEX_0FFB) },
8736 { PREFIX_TABLE (PREFIX_VEX_0FFC) },
8737 { PREFIX_TABLE (PREFIX_VEX_0FFD) },
8738 { PREFIX_TABLE (PREFIX_VEX_0FFE) },
592d1631 8739 { Bad_Opcode },
c0f3af97
L
8740 },
8741 /* VEX_0F38 */
8742 {
8743 /* 00 */
592a252b
L
8744 { PREFIX_TABLE (PREFIX_VEX_0F3800) },
8745 { PREFIX_TABLE (PREFIX_VEX_0F3801) },
8746 { PREFIX_TABLE (PREFIX_VEX_0F3802) },
8747 { PREFIX_TABLE (PREFIX_VEX_0F3803) },
8748 { PREFIX_TABLE (PREFIX_VEX_0F3804) },
8749 { PREFIX_TABLE (PREFIX_VEX_0F3805) },
8750 { PREFIX_TABLE (PREFIX_VEX_0F3806) },
8751 { PREFIX_TABLE (PREFIX_VEX_0F3807) },
c0f3af97 8752 /* 08 */
592a252b
L
8753 { PREFIX_TABLE (PREFIX_VEX_0F3808) },
8754 { PREFIX_TABLE (PREFIX_VEX_0F3809) },
8755 { PREFIX_TABLE (PREFIX_VEX_0F380A) },
8756 { PREFIX_TABLE (PREFIX_VEX_0F380B) },
8757 { PREFIX_TABLE (PREFIX_VEX_0F380C) },
8758 { PREFIX_TABLE (PREFIX_VEX_0F380D) },
8759 { PREFIX_TABLE (PREFIX_VEX_0F380E) },
8760 { PREFIX_TABLE (PREFIX_VEX_0F380F) },
c0f3af97 8761 /* 10 */
592d1631
L
8762 { Bad_Opcode },
8763 { Bad_Opcode },
8764 { Bad_Opcode },
592a252b 8765 { PREFIX_TABLE (PREFIX_VEX_0F3813) },
592d1631
L
8766 { Bad_Opcode },
8767 { Bad_Opcode },
6c30d220 8768 { PREFIX_TABLE (PREFIX_VEX_0F3816) },
592a252b 8769 { PREFIX_TABLE (PREFIX_VEX_0F3817) },
c0f3af97 8770 /* 18 */
592a252b
L
8771 { PREFIX_TABLE (PREFIX_VEX_0F3818) },
8772 { PREFIX_TABLE (PREFIX_VEX_0F3819) },
8773 { PREFIX_TABLE (PREFIX_VEX_0F381A) },
592d1631 8774 { Bad_Opcode },
592a252b
L
8775 { PREFIX_TABLE (PREFIX_VEX_0F381C) },
8776 { PREFIX_TABLE (PREFIX_VEX_0F381D) },
8777 { PREFIX_TABLE (PREFIX_VEX_0F381E) },
592d1631 8778 { Bad_Opcode },
c0f3af97 8779 /* 20 */
592a252b
L
8780 { PREFIX_TABLE (PREFIX_VEX_0F3820) },
8781 { PREFIX_TABLE (PREFIX_VEX_0F3821) },
8782 { PREFIX_TABLE (PREFIX_VEX_0F3822) },
8783 { PREFIX_TABLE (PREFIX_VEX_0F3823) },
8784 { PREFIX_TABLE (PREFIX_VEX_0F3824) },
8785 { PREFIX_TABLE (PREFIX_VEX_0F3825) },
592d1631
L
8786 { Bad_Opcode },
8787 { Bad_Opcode },
c0f3af97 8788 /* 28 */
592a252b
L
8789 { PREFIX_TABLE (PREFIX_VEX_0F3828) },
8790 { PREFIX_TABLE (PREFIX_VEX_0F3829) },
8791 { PREFIX_TABLE (PREFIX_VEX_0F382A) },
8792 { PREFIX_TABLE (PREFIX_VEX_0F382B) },
8793 { PREFIX_TABLE (PREFIX_VEX_0F382C) },
8794 { PREFIX_TABLE (PREFIX_VEX_0F382D) },
8795 { PREFIX_TABLE (PREFIX_VEX_0F382E) },
8796 { PREFIX_TABLE (PREFIX_VEX_0F382F) },
c0f3af97 8797 /* 30 */
592a252b
L
8798 { PREFIX_TABLE (PREFIX_VEX_0F3830) },
8799 { PREFIX_TABLE (PREFIX_VEX_0F3831) },
8800 { PREFIX_TABLE (PREFIX_VEX_0F3832) },
8801 { PREFIX_TABLE (PREFIX_VEX_0F3833) },
8802 { PREFIX_TABLE (PREFIX_VEX_0F3834) },
8803 { PREFIX_TABLE (PREFIX_VEX_0F3835) },
6c30d220 8804 { PREFIX_TABLE (PREFIX_VEX_0F3836) },
592a252b 8805 { PREFIX_TABLE (PREFIX_VEX_0F3837) },
c0f3af97 8806 /* 38 */
592a252b
L
8807 { PREFIX_TABLE (PREFIX_VEX_0F3838) },
8808 { PREFIX_TABLE (PREFIX_VEX_0F3839) },
8809 { PREFIX_TABLE (PREFIX_VEX_0F383A) },
8810 { PREFIX_TABLE (PREFIX_VEX_0F383B) },
8811 { PREFIX_TABLE (PREFIX_VEX_0F383C) },
8812 { PREFIX_TABLE (PREFIX_VEX_0F383D) },
8813 { PREFIX_TABLE (PREFIX_VEX_0F383E) },
8814 { PREFIX_TABLE (PREFIX_VEX_0F383F) },
c0f3af97 8815 /* 40 */
592a252b
L
8816 { PREFIX_TABLE (PREFIX_VEX_0F3840) },
8817 { PREFIX_TABLE (PREFIX_VEX_0F3841) },
592d1631
L
8818 { Bad_Opcode },
8819 { Bad_Opcode },
8820 { Bad_Opcode },
6c30d220
L
8821 { PREFIX_TABLE (PREFIX_VEX_0F3845) },
8822 { PREFIX_TABLE (PREFIX_VEX_0F3846) },
8823 { PREFIX_TABLE (PREFIX_VEX_0F3847) },
c0f3af97 8824 /* 48 */
592d1631
L
8825 { Bad_Opcode },
8826 { Bad_Opcode },
8827 { Bad_Opcode },
8828 { Bad_Opcode },
8829 { Bad_Opcode },
8830 { Bad_Opcode },
8831 { Bad_Opcode },
8832 { Bad_Opcode },
c0f3af97 8833 /* 50 */
592d1631
L
8834 { Bad_Opcode },
8835 { Bad_Opcode },
8836 { Bad_Opcode },
8837 { Bad_Opcode },
8838 { Bad_Opcode },
8839 { Bad_Opcode },
8840 { Bad_Opcode },
8841 { Bad_Opcode },
c0f3af97 8842 /* 58 */
6c30d220
L
8843 { PREFIX_TABLE (PREFIX_VEX_0F3858) },
8844 { PREFIX_TABLE (PREFIX_VEX_0F3859) },
8845 { PREFIX_TABLE (PREFIX_VEX_0F385A) },
592d1631
L
8846 { Bad_Opcode },
8847 { Bad_Opcode },
8848 { Bad_Opcode },
8849 { Bad_Opcode },
8850 { Bad_Opcode },
c0f3af97 8851 /* 60 */
592d1631
L
8852 { Bad_Opcode },
8853 { Bad_Opcode },
8854 { Bad_Opcode },
8855 { Bad_Opcode },
8856 { Bad_Opcode },
8857 { Bad_Opcode },
8858 { Bad_Opcode },
8859 { Bad_Opcode },
c0f3af97 8860 /* 68 */
592d1631
L
8861 { Bad_Opcode },
8862 { Bad_Opcode },
8863 { Bad_Opcode },
8864 { Bad_Opcode },
8865 { Bad_Opcode },
8866 { Bad_Opcode },
8867 { Bad_Opcode },
8868 { Bad_Opcode },
c0f3af97 8869 /* 70 */
592d1631
L
8870 { Bad_Opcode },
8871 { Bad_Opcode },
8872 { Bad_Opcode },
8873 { Bad_Opcode },
8874 { Bad_Opcode },
8875 { Bad_Opcode },
8876 { Bad_Opcode },
8877 { Bad_Opcode },
c0f3af97 8878 /* 78 */
6c30d220
L
8879 { PREFIX_TABLE (PREFIX_VEX_0F3878) },
8880 { PREFIX_TABLE (PREFIX_VEX_0F3879) },
592d1631
L
8881 { Bad_Opcode },
8882 { Bad_Opcode },
8883 { Bad_Opcode },
8884 { Bad_Opcode },
8885 { Bad_Opcode },
8886 { Bad_Opcode },
c0f3af97 8887 /* 80 */
592d1631
L
8888 { Bad_Opcode },
8889 { Bad_Opcode },
8890 { Bad_Opcode },
8891 { Bad_Opcode },
8892 { Bad_Opcode },
8893 { Bad_Opcode },
8894 { Bad_Opcode },
8895 { Bad_Opcode },
c0f3af97 8896 /* 88 */
592d1631
L
8897 { Bad_Opcode },
8898 { Bad_Opcode },
8899 { Bad_Opcode },
8900 { Bad_Opcode },
6c30d220 8901 { PREFIX_TABLE (PREFIX_VEX_0F388C) },
592d1631 8902 { Bad_Opcode },
6c30d220 8903 { PREFIX_TABLE (PREFIX_VEX_0F388E) },
592d1631 8904 { Bad_Opcode },
c0f3af97 8905 /* 90 */
6c30d220
L
8906 { PREFIX_TABLE (PREFIX_VEX_0F3890) },
8907 { PREFIX_TABLE (PREFIX_VEX_0F3891) },
8908 { PREFIX_TABLE (PREFIX_VEX_0F3892) },
8909 { PREFIX_TABLE (PREFIX_VEX_0F3893) },
592d1631
L
8910 { Bad_Opcode },
8911 { Bad_Opcode },
592a252b
L
8912 { PREFIX_TABLE (PREFIX_VEX_0F3896) },
8913 { PREFIX_TABLE (PREFIX_VEX_0F3897) },
c0f3af97 8914 /* 98 */
592a252b
L
8915 { PREFIX_TABLE (PREFIX_VEX_0F3898) },
8916 { PREFIX_TABLE (PREFIX_VEX_0F3899) },
8917 { PREFIX_TABLE (PREFIX_VEX_0F389A) },
8918 { PREFIX_TABLE (PREFIX_VEX_0F389B) },
8919 { PREFIX_TABLE (PREFIX_VEX_0F389C) },
8920 { PREFIX_TABLE (PREFIX_VEX_0F389D) },
8921 { PREFIX_TABLE (PREFIX_VEX_0F389E) },
8922 { PREFIX_TABLE (PREFIX_VEX_0F389F) },
c0f3af97 8923 /* a0 */
592d1631
L
8924 { Bad_Opcode },
8925 { Bad_Opcode },
8926 { Bad_Opcode },
8927 { Bad_Opcode },
8928 { Bad_Opcode },
8929 { Bad_Opcode },
592a252b
L
8930 { PREFIX_TABLE (PREFIX_VEX_0F38A6) },
8931 { PREFIX_TABLE (PREFIX_VEX_0F38A7) },
c0f3af97 8932 /* a8 */
592a252b
L
8933 { PREFIX_TABLE (PREFIX_VEX_0F38A8) },
8934 { PREFIX_TABLE (PREFIX_VEX_0F38A9) },
8935 { PREFIX_TABLE (PREFIX_VEX_0F38AA) },
8936 { PREFIX_TABLE (PREFIX_VEX_0F38AB) },
8937 { PREFIX_TABLE (PREFIX_VEX_0F38AC) },
8938 { PREFIX_TABLE (PREFIX_VEX_0F38AD) },
8939 { PREFIX_TABLE (PREFIX_VEX_0F38AE) },
8940 { PREFIX_TABLE (PREFIX_VEX_0F38AF) },
c0f3af97 8941 /* b0 */
592d1631
L
8942 { Bad_Opcode },
8943 { Bad_Opcode },
8944 { Bad_Opcode },
8945 { Bad_Opcode },
8946 { Bad_Opcode },
8947 { Bad_Opcode },
592a252b
L
8948 { PREFIX_TABLE (PREFIX_VEX_0F38B6) },
8949 { PREFIX_TABLE (PREFIX_VEX_0F38B7) },
c0f3af97 8950 /* b8 */
592a252b
L
8951 { PREFIX_TABLE (PREFIX_VEX_0F38B8) },
8952 { PREFIX_TABLE (PREFIX_VEX_0F38B9) },
8953 { PREFIX_TABLE (PREFIX_VEX_0F38BA) },
8954 { PREFIX_TABLE (PREFIX_VEX_0F38BB) },
8955 { PREFIX_TABLE (PREFIX_VEX_0F38BC) },
8956 { PREFIX_TABLE (PREFIX_VEX_0F38BD) },
8957 { PREFIX_TABLE (PREFIX_VEX_0F38BE) },
8958 { PREFIX_TABLE (PREFIX_VEX_0F38BF) },
c0f3af97 8959 /* c0 */
592d1631
L
8960 { Bad_Opcode },
8961 { Bad_Opcode },
8962 { Bad_Opcode },
8963 { Bad_Opcode },
8964 { Bad_Opcode },
8965 { Bad_Opcode },
8966 { Bad_Opcode },
8967 { Bad_Opcode },
c0f3af97 8968 /* c8 */
592d1631
L
8969 { Bad_Opcode },
8970 { Bad_Opcode },
8971 { Bad_Opcode },
8972 { Bad_Opcode },
8973 { Bad_Opcode },
8974 { Bad_Opcode },
8975 { Bad_Opcode },
48521003 8976 { PREFIX_TABLE (PREFIX_VEX_0F38CF) },
c0f3af97 8977 /* d0 */
592d1631
L
8978 { Bad_Opcode },
8979 { Bad_Opcode },
8980 { Bad_Opcode },
8981 { Bad_Opcode },
8982 { Bad_Opcode },
8983 { Bad_Opcode },
8984 { Bad_Opcode },
8985 { Bad_Opcode },
c0f3af97 8986 /* d8 */
592d1631
L
8987 { Bad_Opcode },
8988 { Bad_Opcode },
8989 { Bad_Opcode },
592a252b
L
8990 { PREFIX_TABLE (PREFIX_VEX_0F38DB) },
8991 { PREFIX_TABLE (PREFIX_VEX_0F38DC) },
8992 { PREFIX_TABLE (PREFIX_VEX_0F38DD) },
8993 { PREFIX_TABLE (PREFIX_VEX_0F38DE) },
8994 { PREFIX_TABLE (PREFIX_VEX_0F38DF) },
c0f3af97 8995 /* e0 */
592d1631
L
8996 { Bad_Opcode },
8997 { Bad_Opcode },
8998 { Bad_Opcode },
8999 { Bad_Opcode },
9000 { Bad_Opcode },
9001 { Bad_Opcode },
9002 { Bad_Opcode },
9003 { Bad_Opcode },
c0f3af97 9004 /* e8 */
592d1631
L
9005 { Bad_Opcode },
9006 { Bad_Opcode },
9007 { Bad_Opcode },
9008 { Bad_Opcode },
9009 { Bad_Opcode },
9010 { Bad_Opcode },
9011 { Bad_Opcode },
9012 { Bad_Opcode },
c0f3af97 9013 /* f0 */
592d1631
L
9014 { Bad_Opcode },
9015 { Bad_Opcode },
f12dc422
L
9016 { PREFIX_TABLE (PREFIX_VEX_0F38F2) },
9017 { REG_TABLE (REG_VEX_0F38F3) },
592d1631 9018 { Bad_Opcode },
6c30d220
L
9019 { PREFIX_TABLE (PREFIX_VEX_0F38F5) },
9020 { PREFIX_TABLE (PREFIX_VEX_0F38F6) },
f12dc422 9021 { PREFIX_TABLE (PREFIX_VEX_0F38F7) },
c0f3af97 9022 /* f8 */
592d1631
L
9023 { Bad_Opcode },
9024 { Bad_Opcode },
9025 { Bad_Opcode },
9026 { Bad_Opcode },
9027 { Bad_Opcode },
9028 { Bad_Opcode },
9029 { Bad_Opcode },
9030 { Bad_Opcode },
c0f3af97
L
9031 },
9032 /* VEX_0F3A */
9033 {
9034 /* 00 */
6c30d220
L
9035 { PREFIX_TABLE (PREFIX_VEX_0F3A00) },
9036 { PREFIX_TABLE (PREFIX_VEX_0F3A01) },
9037 { PREFIX_TABLE (PREFIX_VEX_0F3A02) },
592d1631 9038 { Bad_Opcode },
592a252b
L
9039 { PREFIX_TABLE (PREFIX_VEX_0F3A04) },
9040 { PREFIX_TABLE (PREFIX_VEX_0F3A05) },
9041 { PREFIX_TABLE (PREFIX_VEX_0F3A06) },
592d1631 9042 { Bad_Opcode },
c0f3af97 9043 /* 08 */
592a252b
L
9044 { PREFIX_TABLE (PREFIX_VEX_0F3A08) },
9045 { PREFIX_TABLE (PREFIX_VEX_0F3A09) },
9046 { PREFIX_TABLE (PREFIX_VEX_0F3A0A) },
9047 { PREFIX_TABLE (PREFIX_VEX_0F3A0B) },
9048 { PREFIX_TABLE (PREFIX_VEX_0F3A0C) },
9049 { PREFIX_TABLE (PREFIX_VEX_0F3A0D) },
9050 { PREFIX_TABLE (PREFIX_VEX_0F3A0E) },
9051 { PREFIX_TABLE (PREFIX_VEX_0F3A0F) },
c0f3af97 9052 /* 10 */
592d1631
L
9053 { Bad_Opcode },
9054 { Bad_Opcode },
9055 { Bad_Opcode },
9056 { Bad_Opcode },
592a252b
L
9057 { PREFIX_TABLE (PREFIX_VEX_0F3A14) },
9058 { PREFIX_TABLE (PREFIX_VEX_0F3A15) },
9059 { PREFIX_TABLE (PREFIX_VEX_0F3A16) },
9060 { PREFIX_TABLE (PREFIX_VEX_0F3A17) },
c0f3af97 9061 /* 18 */
592a252b
L
9062 { PREFIX_TABLE (PREFIX_VEX_0F3A18) },
9063 { PREFIX_TABLE (PREFIX_VEX_0F3A19) },
592d1631
L
9064 { Bad_Opcode },
9065 { Bad_Opcode },
9066 { Bad_Opcode },
592a252b 9067 { PREFIX_TABLE (PREFIX_VEX_0F3A1D) },
592d1631
L
9068 { Bad_Opcode },
9069 { Bad_Opcode },
c0f3af97 9070 /* 20 */
592a252b
L
9071 { PREFIX_TABLE (PREFIX_VEX_0F3A20) },
9072 { PREFIX_TABLE (PREFIX_VEX_0F3A21) },
9073 { PREFIX_TABLE (PREFIX_VEX_0F3A22) },
592d1631
L
9074 { Bad_Opcode },
9075 { Bad_Opcode },
9076 { Bad_Opcode },
9077 { Bad_Opcode },
9078 { Bad_Opcode },
c0f3af97 9079 /* 28 */
592d1631
L
9080 { Bad_Opcode },
9081 { Bad_Opcode },
9082 { Bad_Opcode },
9083 { Bad_Opcode },
9084 { Bad_Opcode },
9085 { Bad_Opcode },
9086 { Bad_Opcode },
9087 { Bad_Opcode },
c0f3af97 9088 /* 30 */
43234a1e 9089 { PREFIX_TABLE (PREFIX_VEX_0F3A30) },
1ba585e8 9090 { PREFIX_TABLE (PREFIX_VEX_0F3A31) },
43234a1e 9091 { PREFIX_TABLE (PREFIX_VEX_0F3A32) },
1ba585e8 9092 { PREFIX_TABLE (PREFIX_VEX_0F3A33) },
592d1631
L
9093 { Bad_Opcode },
9094 { Bad_Opcode },
9095 { Bad_Opcode },
9096 { Bad_Opcode },
c0f3af97 9097 /* 38 */
6c30d220
L
9098 { PREFIX_TABLE (PREFIX_VEX_0F3A38) },
9099 { PREFIX_TABLE (PREFIX_VEX_0F3A39) },
592d1631
L
9100 { Bad_Opcode },
9101 { Bad_Opcode },
9102 { Bad_Opcode },
9103 { Bad_Opcode },
9104 { Bad_Opcode },
9105 { Bad_Opcode },
c0f3af97 9106 /* 40 */
592a252b
L
9107 { PREFIX_TABLE (PREFIX_VEX_0F3A40) },
9108 { PREFIX_TABLE (PREFIX_VEX_0F3A41) },
9109 { PREFIX_TABLE (PREFIX_VEX_0F3A42) },
592d1631 9110 { Bad_Opcode },
592a252b 9111 { PREFIX_TABLE (PREFIX_VEX_0F3A44) },
592d1631 9112 { Bad_Opcode },
6c30d220 9113 { PREFIX_TABLE (PREFIX_VEX_0F3A46) },
592d1631 9114 { Bad_Opcode },
c0f3af97 9115 /* 48 */
592a252b
L
9116 { PREFIX_TABLE (PREFIX_VEX_0F3A48) },
9117 { PREFIX_TABLE (PREFIX_VEX_0F3A49) },
9118 { PREFIX_TABLE (PREFIX_VEX_0F3A4A) },
9119 { PREFIX_TABLE (PREFIX_VEX_0F3A4B) },
9120 { PREFIX_TABLE (PREFIX_VEX_0F3A4C) },
592d1631
L
9121 { Bad_Opcode },
9122 { Bad_Opcode },
9123 { Bad_Opcode },
c0f3af97 9124 /* 50 */
592d1631
L
9125 { Bad_Opcode },
9126 { Bad_Opcode },
9127 { Bad_Opcode },
9128 { Bad_Opcode },
9129 { Bad_Opcode },
9130 { Bad_Opcode },
9131 { Bad_Opcode },
9132 { Bad_Opcode },
c0f3af97 9133 /* 58 */
592d1631
L
9134 { Bad_Opcode },
9135 { Bad_Opcode },
9136 { Bad_Opcode },
9137 { Bad_Opcode },
592a252b
L
9138 { PREFIX_TABLE (PREFIX_VEX_0F3A5C) },
9139 { PREFIX_TABLE (PREFIX_VEX_0F3A5D) },
9140 { PREFIX_TABLE (PREFIX_VEX_0F3A5E) },
9141 { PREFIX_TABLE (PREFIX_VEX_0F3A5F) },
c0f3af97 9142 /* 60 */
592a252b
L
9143 { PREFIX_TABLE (PREFIX_VEX_0F3A60) },
9144 { PREFIX_TABLE (PREFIX_VEX_0F3A61) },
9145 { PREFIX_TABLE (PREFIX_VEX_0F3A62) },
9146 { PREFIX_TABLE (PREFIX_VEX_0F3A63) },
592d1631
L
9147 { Bad_Opcode },
9148 { Bad_Opcode },
9149 { Bad_Opcode },
9150 { Bad_Opcode },
c0f3af97 9151 /* 68 */
592a252b
L
9152 { PREFIX_TABLE (PREFIX_VEX_0F3A68) },
9153 { PREFIX_TABLE (PREFIX_VEX_0F3A69) },
9154 { PREFIX_TABLE (PREFIX_VEX_0F3A6A) },
9155 { PREFIX_TABLE (PREFIX_VEX_0F3A6B) },
9156 { PREFIX_TABLE (PREFIX_VEX_0F3A6C) },
9157 { PREFIX_TABLE (PREFIX_VEX_0F3A6D) },
9158 { PREFIX_TABLE (PREFIX_VEX_0F3A6E) },
9159 { PREFIX_TABLE (PREFIX_VEX_0F3A6F) },
c0f3af97 9160 /* 70 */
592d1631
L
9161 { Bad_Opcode },
9162 { Bad_Opcode },
9163 { Bad_Opcode },
9164 { Bad_Opcode },
9165 { Bad_Opcode },
9166 { Bad_Opcode },
9167 { Bad_Opcode },
9168 { Bad_Opcode },
c0f3af97 9169 /* 78 */
592a252b
L
9170 { PREFIX_TABLE (PREFIX_VEX_0F3A78) },
9171 { PREFIX_TABLE (PREFIX_VEX_0F3A79) },
9172 { PREFIX_TABLE (PREFIX_VEX_0F3A7A) },
9173 { PREFIX_TABLE (PREFIX_VEX_0F3A7B) },
9174 { PREFIX_TABLE (PREFIX_VEX_0F3A7C) },
9175 { PREFIX_TABLE (PREFIX_VEX_0F3A7D) },
9176 { PREFIX_TABLE (PREFIX_VEX_0F3A7E) },
9177 { PREFIX_TABLE (PREFIX_VEX_0F3A7F) },
c0f3af97 9178 /* 80 */
592d1631
L
9179 { Bad_Opcode },
9180 { Bad_Opcode },
9181 { Bad_Opcode },
9182 { Bad_Opcode },
9183 { Bad_Opcode },
9184 { Bad_Opcode },
9185 { Bad_Opcode },
9186 { Bad_Opcode },
c0f3af97 9187 /* 88 */
592d1631
L
9188 { Bad_Opcode },
9189 { Bad_Opcode },
9190 { Bad_Opcode },
9191 { Bad_Opcode },
9192 { Bad_Opcode },
9193 { Bad_Opcode },
9194 { Bad_Opcode },
9195 { Bad_Opcode },
c0f3af97 9196 /* 90 */
592d1631
L
9197 { Bad_Opcode },
9198 { Bad_Opcode },
9199 { Bad_Opcode },
9200 { Bad_Opcode },
9201 { Bad_Opcode },
9202 { Bad_Opcode },
9203 { Bad_Opcode },
9204 { Bad_Opcode },
c0f3af97 9205 /* 98 */
592d1631
L
9206 { Bad_Opcode },
9207 { Bad_Opcode },
9208 { Bad_Opcode },
9209 { Bad_Opcode },
9210 { Bad_Opcode },
9211 { Bad_Opcode },
9212 { Bad_Opcode },
9213 { Bad_Opcode },
c0f3af97 9214 /* a0 */
592d1631
L
9215 { Bad_Opcode },
9216 { Bad_Opcode },
9217 { Bad_Opcode },
9218 { Bad_Opcode },
9219 { Bad_Opcode },
9220 { Bad_Opcode },
9221 { Bad_Opcode },
9222 { Bad_Opcode },
c0f3af97 9223 /* a8 */
592d1631
L
9224 { Bad_Opcode },
9225 { Bad_Opcode },
9226 { Bad_Opcode },
9227 { Bad_Opcode },
9228 { Bad_Opcode },
9229 { Bad_Opcode },
9230 { Bad_Opcode },
9231 { Bad_Opcode },
c0f3af97 9232 /* b0 */
592d1631
L
9233 { Bad_Opcode },
9234 { Bad_Opcode },
9235 { Bad_Opcode },
9236 { Bad_Opcode },
9237 { Bad_Opcode },
9238 { Bad_Opcode },
9239 { Bad_Opcode },
9240 { Bad_Opcode },
c0f3af97 9241 /* b8 */
592d1631
L
9242 { Bad_Opcode },
9243 { Bad_Opcode },
9244 { Bad_Opcode },
9245 { Bad_Opcode },
9246 { Bad_Opcode },
9247 { Bad_Opcode },
9248 { Bad_Opcode },
9249 { Bad_Opcode },
c0f3af97 9250 /* c0 */
592d1631
L
9251 { Bad_Opcode },
9252 { Bad_Opcode },
9253 { Bad_Opcode },
9254 { Bad_Opcode },
9255 { Bad_Opcode },
9256 { Bad_Opcode },
9257 { Bad_Opcode },
9258 { Bad_Opcode },
c0f3af97 9259 /* c8 */
592d1631
L
9260 { Bad_Opcode },
9261 { Bad_Opcode },
9262 { Bad_Opcode },
9263 { Bad_Opcode },
9264 { Bad_Opcode },
9265 { Bad_Opcode },
48521003
IT
9266 { PREFIX_TABLE(PREFIX_VEX_0F3ACE) },
9267 { PREFIX_TABLE(PREFIX_VEX_0F3ACF) },
c0f3af97 9268 /* d0 */
592d1631
L
9269 { Bad_Opcode },
9270 { Bad_Opcode },
9271 { Bad_Opcode },
9272 { Bad_Opcode },
9273 { Bad_Opcode },
9274 { Bad_Opcode },
9275 { Bad_Opcode },
9276 { Bad_Opcode },
c0f3af97 9277 /* d8 */
592d1631
L
9278 { Bad_Opcode },
9279 { Bad_Opcode },
9280 { Bad_Opcode },
9281 { Bad_Opcode },
9282 { Bad_Opcode },
9283 { Bad_Opcode },
9284 { Bad_Opcode },
592a252b 9285 { PREFIX_TABLE (PREFIX_VEX_0F3ADF) },
c0f3af97 9286 /* e0 */
592d1631
L
9287 { Bad_Opcode },
9288 { Bad_Opcode },
9289 { Bad_Opcode },
9290 { Bad_Opcode },
9291 { Bad_Opcode },
9292 { Bad_Opcode },
9293 { Bad_Opcode },
9294 { Bad_Opcode },
c0f3af97 9295 /* e8 */
592d1631
L
9296 { Bad_Opcode },
9297 { Bad_Opcode },
9298 { Bad_Opcode },
9299 { Bad_Opcode },
9300 { Bad_Opcode },
9301 { Bad_Opcode },
9302 { Bad_Opcode },
9303 { Bad_Opcode },
c0f3af97 9304 /* f0 */
6c30d220 9305 { PREFIX_TABLE (PREFIX_VEX_0F3AF0) },
592d1631
L
9306 { Bad_Opcode },
9307 { Bad_Opcode },
9308 { Bad_Opcode },
9309 { Bad_Opcode },
9310 { Bad_Opcode },
9311 { Bad_Opcode },
9312 { Bad_Opcode },
c0f3af97 9313 /* f8 */
592d1631
L
9314 { Bad_Opcode },
9315 { Bad_Opcode },
9316 { Bad_Opcode },
9317 { Bad_Opcode },
9318 { Bad_Opcode },
9319 { Bad_Opcode },
9320 { Bad_Opcode },
9321 { Bad_Opcode },
c0f3af97
L
9322 },
9323};
9324
43234a1e 9325#include "i386-dis-evex.h"
ad692897 9326
c0f3af97 9327static const struct dis386 vex_len_table[][2] = {
592a252b 9328 /* VEX_LEN_0F12_P_0_M_0 */
c0f3af97 9329 {
ec6f095a 9330 { "vmovlps", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9331 },
9332
592a252b 9333 /* VEX_LEN_0F12_P_0_M_1 */
c0f3af97 9334 {
ec6f095a 9335 { "vmovhlps", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9336 },
9337
592a252b 9338 /* VEX_LEN_0F12_P_2 */
c0f3af97 9339 {
ec6f095a 9340 { "vmovlpd", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9341 },
9342
592a252b 9343 /* VEX_LEN_0F13_M_0 */
c0f3af97 9344 {
ec6f095a 9345 { "vmovlpX", { EXq, XM }, 0 },
c0f3af97
L
9346 },
9347
592a252b 9348 /* VEX_LEN_0F16_P_0_M_0 */
c0f3af97 9349 {
ec6f095a 9350 { "vmovhps", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9351 },
9352
592a252b 9353 /* VEX_LEN_0F16_P_0_M_1 */
c0f3af97 9354 {
ec6f095a 9355 { "vmovlhps", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9356 },
9357
592a252b 9358 /* VEX_LEN_0F16_P_2 */
c0f3af97 9359 {
ec6f095a 9360 { "vmovhpd", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9361 },
9362
592a252b 9363 /* VEX_LEN_0F17_M_0 */
c0f3af97 9364 {
ec6f095a 9365 { "vmovhpX", { EXq, XM }, 0 },
c0f3af97
L
9366 },
9367
43234a1e
L
9368 /* VEX_LEN_0F41_P_0 */
9369 {
9370 { Bad_Opcode },
9371 { VEX_W_TABLE (VEX_W_0F41_P_0_LEN_1) },
9372 },
1ba585e8
IT
9373 /* VEX_LEN_0F41_P_2 */
9374 {
9375 { Bad_Opcode },
9376 { VEX_W_TABLE (VEX_W_0F41_P_2_LEN_1) },
9377 },
43234a1e
L
9378 /* VEX_LEN_0F42_P_0 */
9379 {
9380 { Bad_Opcode },
9381 { VEX_W_TABLE (VEX_W_0F42_P_0_LEN_1) },
9382 },
1ba585e8
IT
9383 /* VEX_LEN_0F42_P_2 */
9384 {
9385 { Bad_Opcode },
9386 { VEX_W_TABLE (VEX_W_0F42_P_2_LEN_1) },
9387 },
43234a1e
L
9388 /* VEX_LEN_0F44_P_0 */
9389 {
9390 { VEX_W_TABLE (VEX_W_0F44_P_0_LEN_0) },
9391 },
1ba585e8
IT
9392 /* VEX_LEN_0F44_P_2 */
9393 {
9394 { VEX_W_TABLE (VEX_W_0F44_P_2_LEN_0) },
9395 },
43234a1e
L
9396 /* VEX_LEN_0F45_P_0 */
9397 {
9398 { Bad_Opcode },
9399 { VEX_W_TABLE (VEX_W_0F45_P_0_LEN_1) },
9400 },
1ba585e8
IT
9401 /* VEX_LEN_0F45_P_2 */
9402 {
9403 { Bad_Opcode },
9404 { VEX_W_TABLE (VEX_W_0F45_P_2_LEN_1) },
9405 },
43234a1e
L
9406 /* VEX_LEN_0F46_P_0 */
9407 {
9408 { Bad_Opcode },
9409 { VEX_W_TABLE (VEX_W_0F46_P_0_LEN_1) },
9410 },
1ba585e8
IT
9411 /* VEX_LEN_0F46_P_2 */
9412 {
9413 { Bad_Opcode },
9414 { VEX_W_TABLE (VEX_W_0F46_P_2_LEN_1) },
9415 },
43234a1e
L
9416 /* VEX_LEN_0F47_P_0 */
9417 {
9418 { Bad_Opcode },
9419 { VEX_W_TABLE (VEX_W_0F47_P_0_LEN_1) },
9420 },
1ba585e8
IT
9421 /* VEX_LEN_0F47_P_2 */
9422 {
9423 { Bad_Opcode },
9424 { VEX_W_TABLE (VEX_W_0F47_P_2_LEN_1) },
9425 },
9426 /* VEX_LEN_0F4A_P_0 */
9427 {
9428 { Bad_Opcode },
9429 { VEX_W_TABLE (VEX_W_0F4A_P_0_LEN_1) },
9430 },
9431 /* VEX_LEN_0F4A_P_2 */
9432 {
9433 { Bad_Opcode },
9434 { VEX_W_TABLE (VEX_W_0F4A_P_2_LEN_1) },
9435 },
9436 /* VEX_LEN_0F4B_P_0 */
9437 {
9438 { Bad_Opcode },
9439 { VEX_W_TABLE (VEX_W_0F4B_P_0_LEN_1) },
9440 },
43234a1e
L
9441 /* VEX_LEN_0F4B_P_2 */
9442 {
9443 { Bad_Opcode },
9444 { VEX_W_TABLE (VEX_W_0F4B_P_2_LEN_1) },
9445 },
9446
ec6f095a 9447 /* VEX_LEN_0F6E_P_2 */
c0f3af97 9448 {
ec6f095a 9449 { "vmovK", { XMScalar, Edq }, 0 },
c0f3af97
L
9450 },
9451
ec6f095a 9452 /* VEX_LEN_0F77_P_1 */
c0f3af97 9453 {
ec6f095a
L
9454 { "vzeroupper", { XX }, 0 },
9455 { "vzeroall", { XX }, 0 },
c0f3af97
L
9456 },
9457
ec6f095a 9458 /* VEX_LEN_0F7E_P_1 */
c0f3af97 9459 {
ec6f095a 9460 { "vmovq", { XMScalar, EXqScalar }, 0 },
c0f3af97
L
9461 },
9462
ec6f095a 9463 /* VEX_LEN_0F7E_P_2 */
c0f3af97 9464 {
ec6f095a 9465 { "vmovK", { Edq, XMScalar }, 0 },
c0f3af97
L
9466 },
9467
ec6f095a 9468 /* VEX_LEN_0F90_P_0 */
c0f3af97 9469 {
ec6f095a 9470 { VEX_W_TABLE (VEX_W_0F90_P_0_LEN_0) },
c0f3af97
L
9471 },
9472
ec6f095a 9473 /* VEX_LEN_0F90_P_2 */
c0f3af97 9474 {
ec6f095a 9475 { VEX_W_TABLE (VEX_W_0F90_P_2_LEN_0) },
c0f3af97
L
9476 },
9477
ec6f095a 9478 /* VEX_LEN_0F91_P_0 */
c0f3af97 9479 {
ec6f095a 9480 { VEX_W_TABLE (VEX_W_0F91_P_0_LEN_0) },
c0f3af97
L
9481 },
9482
ec6f095a 9483 /* VEX_LEN_0F91_P_2 */
c0f3af97 9484 {
ec6f095a 9485 { VEX_W_TABLE (VEX_W_0F91_P_2_LEN_0) },
c0f3af97
L
9486 },
9487
ec6f095a 9488 /* VEX_LEN_0F92_P_0 */
c0f3af97 9489 {
ec6f095a 9490 { VEX_W_TABLE (VEX_W_0F92_P_0_LEN_0) },
c0f3af97
L
9491 },
9492
ec6f095a 9493 /* VEX_LEN_0F92_P_2 */
c0f3af97 9494 {
ec6f095a 9495 { VEX_W_TABLE (VEX_W_0F92_P_2_LEN_0) },
c0f3af97
L
9496 },
9497
ec6f095a 9498 /* VEX_LEN_0F92_P_3 */
c0f3af97 9499 {
58a211d2 9500 { MOD_TABLE (MOD_VEX_0F92_P_3_LEN_0) },
c0f3af97
L
9501 },
9502
ec6f095a 9503 /* VEX_LEN_0F93_P_0 */
c0f3af97 9504 {
ec6f095a 9505 { VEX_W_TABLE (VEX_W_0F93_P_0_LEN_0) },
c0f3af97
L
9506 },
9507
ec6f095a 9508 /* VEX_LEN_0F93_P_2 */
c0f3af97 9509 {
ec6f095a 9510 { VEX_W_TABLE (VEX_W_0F93_P_2_LEN_0) },
c0f3af97
L
9511 },
9512
ec6f095a 9513 /* VEX_LEN_0F93_P_3 */
c0f3af97 9514 {
58a211d2 9515 { MOD_TABLE (MOD_VEX_0F93_P_3_LEN_0) },
c0f3af97
L
9516 },
9517
ec6f095a 9518 /* VEX_LEN_0F98_P_0 */
43234a1e
L
9519 {
9520 { VEX_W_TABLE (VEX_W_0F98_P_0_LEN_0) },
9521 },
9522
1ba585e8
IT
9523 /* VEX_LEN_0F98_P_2 */
9524 {
9525 { VEX_W_TABLE (VEX_W_0F98_P_2_LEN_0) },
9526 },
9527
9528 /* VEX_LEN_0F99_P_0 */
9529 {
9530 { VEX_W_TABLE (VEX_W_0F99_P_0_LEN_0) },
9531 },
9532
9533 /* VEX_LEN_0F99_P_2 */
9534 {
9535 { VEX_W_TABLE (VEX_W_0F99_P_2_LEN_0) },
9536 },
9537
6c30d220 9538 /* VEX_LEN_0FAE_R_2_M_0 */
c0f3af97 9539 {
ec6f095a 9540 { "vldmxcsr", { Md }, 0 },
c0f3af97
L
9541 },
9542
6c30d220 9543 /* VEX_LEN_0FAE_R_3_M_0 */
c0f3af97 9544 {
ec6f095a 9545 { "vstmxcsr", { Md }, 0 },
c0f3af97
L
9546 },
9547
6c30d220 9548 /* VEX_LEN_0FC4_P_2 */
c0f3af97 9549 {
b50c9f31 9550 { "vpinsrw", { XM, Vex128, Edqw, Ib }, 0 },
c0f3af97
L
9551 },
9552
6c30d220 9553 /* VEX_LEN_0FC5_P_2 */
c0f3af97 9554 {
b50c9f31 9555 { "vpextrw", { Gdq, XS, Ib }, 0 },
c0f3af97
L
9556 },
9557
6c30d220 9558 /* VEX_LEN_0FD6_P_2 */
c0f3af97 9559 {
ec6f095a 9560 { "vmovq", { EXqScalarS, XMScalar }, 0 },
c0f3af97
L
9561 },
9562
6c30d220 9563 /* VEX_LEN_0FF7_P_2 */
c0f3af97 9564 {
ec6f095a 9565 { "vmaskmovdqu", { XM, XS }, 0 },
c0f3af97
L
9566 },
9567
6c30d220 9568 /* VEX_LEN_0F3816_P_2 */
c0f3af97 9569 {
6c30d220
L
9570 { Bad_Opcode },
9571 { VEX_W_TABLE (VEX_W_0F3816_P_2) },
c0f3af97
L
9572 },
9573
6c30d220 9574 /* VEX_LEN_0F3819_P_2 */
c0f3af97 9575 {
6c30d220
L
9576 { Bad_Opcode },
9577 { VEX_W_TABLE (VEX_W_0F3819_P_2) },
c0f3af97
L
9578 },
9579
6c30d220 9580 /* VEX_LEN_0F381A_P_2_M_0 */
c0f3af97 9581 {
6c30d220
L
9582 { Bad_Opcode },
9583 { VEX_W_TABLE (VEX_W_0F381A_P_2_M_0) },
c0f3af97
L
9584 },
9585
6c30d220 9586 /* VEX_LEN_0F3836_P_2 */
c0f3af97 9587 {
6c30d220
L
9588 { Bad_Opcode },
9589 { VEX_W_TABLE (VEX_W_0F3836_P_2) },
c0f3af97
L
9590 },
9591
592a252b 9592 /* VEX_LEN_0F3841_P_2 */
c0f3af97 9593 {
ec6f095a 9594 { "vphminposuw", { XM, EXx }, 0 },
c0f3af97
L
9595 },
9596
6c30d220
L
9597 /* VEX_LEN_0F385A_P_2_M_0 */
9598 {
9599 { Bad_Opcode },
9600 { VEX_W_TABLE (VEX_W_0F385A_P_2_M_0) },
9601 },
9602
592a252b 9603 /* VEX_LEN_0F38DB_P_2 */
a5ff0eb2 9604 {
ec6f095a 9605 { "vaesimc", { XM, EXx }, 0 },
a5ff0eb2
L
9606 },
9607
f12dc422
L
9608 /* VEX_LEN_0F38F2_P_0 */
9609 {
bf890a93 9610 { "andnS", { Gdq, VexGdq, Edq }, 0 },
f12dc422
L
9611 },
9612
9613 /* VEX_LEN_0F38F3_R_1_P_0 */
9614 {
bf890a93 9615 { "blsrS", { VexGdq, Edq }, 0 },
f12dc422
L
9616 },
9617
9618 /* VEX_LEN_0F38F3_R_2_P_0 */
9619 {
bf890a93 9620 { "blsmskS", { VexGdq, Edq }, 0 },
f12dc422
L
9621 },
9622
9623 /* VEX_LEN_0F38F3_R_3_P_0 */
9624 {
bf890a93 9625 { "blsiS", { VexGdq, Edq }, 0 },
f12dc422
L
9626 },
9627
6c30d220
L
9628 /* VEX_LEN_0F38F5_P_0 */
9629 {
bf890a93 9630 { "bzhiS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
9631 },
9632
9633 /* VEX_LEN_0F38F5_P_1 */
9634 {
bf890a93 9635 { "pextS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
9636 },
9637
9638 /* VEX_LEN_0F38F5_P_3 */
9639 {
bf890a93 9640 { "pdepS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
9641 },
9642
9643 /* VEX_LEN_0F38F6_P_3 */
9644 {
bf890a93 9645 { "mulxS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
9646 },
9647
f12dc422
L
9648 /* VEX_LEN_0F38F7_P_0 */
9649 {
bf890a93 9650 { "bextrS", { Gdq, Edq, VexGdq }, 0 },
f12dc422
L
9651 },
9652
6c30d220
L
9653 /* VEX_LEN_0F38F7_P_1 */
9654 {
bf890a93 9655 { "sarxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
9656 },
9657
9658 /* VEX_LEN_0F38F7_P_2 */
9659 {
bf890a93 9660 { "shlxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
9661 },
9662
9663 /* VEX_LEN_0F38F7_P_3 */
9664 {
bf890a93 9665 { "shrxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
9666 },
9667
9668 /* VEX_LEN_0F3A00_P_2 */
9669 {
9670 { Bad_Opcode },
9671 { VEX_W_TABLE (VEX_W_0F3A00_P_2) },
9672 },
9673
9674 /* VEX_LEN_0F3A01_P_2 */
9675 {
9676 { Bad_Opcode },
9677 { VEX_W_TABLE (VEX_W_0F3A01_P_2) },
9678 },
9679
592a252b 9680 /* VEX_LEN_0F3A06_P_2 */
c0f3af97 9681 {
592d1631 9682 { Bad_Opcode },
592a252b 9683 { VEX_W_TABLE (VEX_W_0F3A06_P_2) },
c0f3af97
L
9684 },
9685
592a252b 9686 /* VEX_LEN_0F3A14_P_2 */
c0f3af97 9687 {
b50c9f31 9688 { "vpextrb", { Edqb, XM, Ib }, 0 },
c0f3af97
L
9689 },
9690
592a252b 9691 /* VEX_LEN_0F3A15_P_2 */
c0f3af97 9692 {
b50c9f31 9693 { "vpextrw", { Edqw, XM, Ib }, 0 },
c0f3af97
L
9694 },
9695
592a252b 9696 /* VEX_LEN_0F3A16_P_2 */
c0f3af97 9697 {
bf890a93 9698 { "vpextrK", { Edq, XM, Ib }, 0 },
c0f3af97
L
9699 },
9700
592a252b 9701 /* VEX_LEN_0F3A17_P_2 */
c0f3af97 9702 {
bf890a93 9703 { "vextractps", { Edqd, XM, Ib }, 0 },
c0f3af97
L
9704 },
9705
592a252b 9706 /* VEX_LEN_0F3A18_P_2 */
c0f3af97 9707 {
592d1631 9708 { Bad_Opcode },
592a252b 9709 { VEX_W_TABLE (VEX_W_0F3A18_P_2) },
c0f3af97
L
9710 },
9711
592a252b 9712 /* VEX_LEN_0F3A19_P_2 */
c0f3af97 9713 {
592d1631 9714 { Bad_Opcode },
592a252b 9715 { VEX_W_TABLE (VEX_W_0F3A19_P_2) },
c0f3af97
L
9716 },
9717
592a252b 9718 /* VEX_LEN_0F3A20_P_2 */
c0f3af97 9719 {
b50c9f31 9720 { "vpinsrb", { XM, Vex128, Edqb, Ib }, 0 },
c0f3af97
L
9721 },
9722
592a252b 9723 /* VEX_LEN_0F3A21_P_2 */
c0f3af97 9724 {
ec6f095a 9725 { "vinsertps", { XM, Vex128, EXd, Ib }, 0 },
c0f3af97
L
9726 },
9727
592a252b 9728 /* VEX_LEN_0F3A22_P_2 */
c0f3af97 9729 {
bf890a93 9730 { "vpinsrK", { XM, Vex128, Edq, Ib }, 0 },
c0f3af97
L
9731 },
9732
43234a1e
L
9733 /* VEX_LEN_0F3A30_P_2 */
9734 {
9735 { VEX_W_TABLE (VEX_W_0F3A30_P_2_LEN_0) },
9736 },
9737
1ba585e8
IT
9738 /* VEX_LEN_0F3A31_P_2 */
9739 {
9740 { VEX_W_TABLE (VEX_W_0F3A31_P_2_LEN_0) },
9741 },
9742
43234a1e
L
9743 /* VEX_LEN_0F3A32_P_2 */
9744 {
9745 { VEX_W_TABLE (VEX_W_0F3A32_P_2_LEN_0) },
9746 },
9747
1ba585e8
IT
9748 /* VEX_LEN_0F3A33_P_2 */
9749 {
9750 { VEX_W_TABLE (VEX_W_0F3A33_P_2_LEN_0) },
9751 },
9752
6c30d220 9753 /* VEX_LEN_0F3A38_P_2 */
c0f3af97 9754 {
6c30d220
L
9755 { Bad_Opcode },
9756 { VEX_W_TABLE (VEX_W_0F3A38_P_2) },
c0f3af97
L
9757 },
9758
6c30d220 9759 /* VEX_LEN_0F3A39_P_2 */
c0f3af97 9760 {
6c30d220
L
9761 { Bad_Opcode },
9762 { VEX_W_TABLE (VEX_W_0F3A39_P_2) },
9763 },
9764
9765 /* VEX_LEN_0F3A41_P_2 */
9766 {
ec6f095a 9767 { "vdppd", { XM, Vex128, EXx, Ib }, 0 },
c0f3af97
L
9768 },
9769
6c30d220 9770 /* VEX_LEN_0F3A46_P_2 */
c0f3af97 9771 {
6c30d220
L
9772 { Bad_Opcode },
9773 { VEX_W_TABLE (VEX_W_0F3A46_P_2) },
c0f3af97
L
9774 },
9775
592a252b 9776 /* VEX_LEN_0F3A60_P_2 */
c0f3af97 9777 {
15c7c1d8 9778 { "vpcmpestrm", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, 0 },
c0f3af97
L
9779 },
9780
592a252b 9781 /* VEX_LEN_0F3A61_P_2 */
c0f3af97 9782 {
15c7c1d8 9783 { "vpcmpestri", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, 0 },
c0f3af97
L
9784 },
9785
592a252b 9786 /* VEX_LEN_0F3A62_P_2 */
c0f3af97 9787 {
ec6f095a 9788 { "vpcmpistrm", { XM, EXx, Ib }, 0 },
c0f3af97
L
9789 },
9790
592a252b 9791 /* VEX_LEN_0F3A63_P_2 */
c0f3af97 9792 {
ec6f095a 9793 { "vpcmpistri", { XM, EXx, Ib }, 0 },
c0f3af97
L
9794 },
9795
592a252b 9796 /* VEX_LEN_0F3A6A_P_2 */
922d8de8 9797 {
3a2430e0 9798 { "vfmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 },
922d8de8
DR
9799 },
9800
592a252b 9801 /* VEX_LEN_0F3A6B_P_2 */
922d8de8 9802 {
3a2430e0 9803 { "vfmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 },
922d8de8
DR
9804 },
9805
592a252b 9806 /* VEX_LEN_0F3A6E_P_2 */
922d8de8 9807 {
3a2430e0 9808 { "vfmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 },
922d8de8
DR
9809 },
9810
592a252b 9811 /* VEX_LEN_0F3A6F_P_2 */
922d8de8 9812 {
3a2430e0 9813 { "vfmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 },
922d8de8
DR
9814 },
9815
592a252b 9816 /* VEX_LEN_0F3A7A_P_2 */
922d8de8 9817 {
3a2430e0 9818 { "vfnmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 },
922d8de8
DR
9819 },
9820
592a252b 9821 /* VEX_LEN_0F3A7B_P_2 */
922d8de8 9822 {
3a2430e0 9823 { "vfnmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 },
922d8de8
DR
9824 },
9825
592a252b 9826 /* VEX_LEN_0F3A7E_P_2 */
922d8de8 9827 {
3a2430e0 9828 { "vfnmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 },
922d8de8
DR
9829 },
9830
592a252b 9831 /* VEX_LEN_0F3A7F_P_2 */
922d8de8 9832 {
3a2430e0 9833 { "vfnmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 },
922d8de8
DR
9834 },
9835
592a252b 9836 /* VEX_LEN_0F3ADF_P_2 */
a5ff0eb2 9837 {
ec6f095a 9838 { "vaeskeygenassist", { XM, EXx, Ib }, 0 },
a5ff0eb2 9839 },
4c807e72 9840
6c30d220
L
9841 /* VEX_LEN_0F3AF0_P_3 */
9842 {
bf890a93 9843 { "rorxS", { Gdq, Edq, Ib }, 0 },
6c30d220
L
9844 },
9845
ff688e1f
L
9846 /* VEX_LEN_0FXOP_08_CC */
9847 {
be92cb14 9848 { "vpcomb", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9849 },
9850
9851 /* VEX_LEN_0FXOP_08_CD */
9852 {
be92cb14 9853 { "vpcomw", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9854 },
9855
9856 /* VEX_LEN_0FXOP_08_CE */
9857 {
be92cb14 9858 { "vpcomd", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9859 },
9860
9861 /* VEX_LEN_0FXOP_08_CF */
9862 {
be92cb14 9863 { "vpcomq", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9864 },
9865
9866 /* VEX_LEN_0FXOP_08_EC */
9867 {
be92cb14 9868 { "vpcomub", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9869 },
9870
9871 /* VEX_LEN_0FXOP_08_ED */
9872 {
be92cb14 9873 { "vpcomuw", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9874 },
9875
9876 /* VEX_LEN_0FXOP_08_EE */
9877 {
be92cb14 9878 { "vpcomud", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9879 },
9880
9881 /* VEX_LEN_0FXOP_08_EF */
9882 {
be92cb14 9883 { "vpcomuq", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9884 },
9885
592a252b 9886 /* VEX_LEN_0FXOP_09_80 */
5dd85c99 9887 {
bf890a93
IT
9888 { "vfrczps", { XM, EXxmm }, 0 },
9889 { "vfrczps", { XM, EXymmq }, 0 },
5dd85c99 9890 },
4c807e72 9891
592a252b 9892 /* VEX_LEN_0FXOP_09_81 */
5dd85c99 9893 {
bf890a93
IT
9894 { "vfrczpd", { XM, EXxmm }, 0 },
9895 { "vfrczpd", { XM, EXymmq }, 0 },
5dd85c99 9896 },
331d2d0d
L
9897};
9898
ad692897 9899#include "i386-dis-evex-len.h"
04e2a182 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 10008 },
9e30b8e0 10009 {
ec6f095a
L
10010 /* VEX_W_0F93_P_0_LEN_0 */
10011 { MOD_TABLE (MOD_VEX_W_0_0F93_P_0_LEN_0) },
9e30b8e0
L
10012 },
10013 {
ec6f095a
L
10014 /* VEX_W_0F93_P_2_LEN_0 */
10015 { MOD_TABLE (MOD_VEX_W_0_0F93_P_2_LEN_0) },
9e30b8e0 10016 },
9e30b8e0 10017 {
ec6f095a
L
10018 /* VEX_W_0F98_P_0_LEN_0 */
10019 { MOD_TABLE (MOD_VEX_W_0_0F98_P_0_LEN_0) },
10020 { MOD_TABLE (MOD_VEX_W_1_0F98_P_0_LEN_0) },
9e30b8e0
L
10021 },
10022 {
ec6f095a
L
10023 /* VEX_W_0F98_P_2_LEN_0 */
10024 { MOD_TABLE (MOD_VEX_W_0_0F98_P_2_LEN_0) },
10025 { MOD_TABLE (MOD_VEX_W_1_0F98_P_2_LEN_0) },
9e30b8e0
L
10026 },
10027 {
ec6f095a
L
10028 /* VEX_W_0F99_P_0_LEN_0 */
10029 { MOD_TABLE (MOD_VEX_W_0_0F99_P_0_LEN_0) },
10030 { MOD_TABLE (MOD_VEX_W_1_0F99_P_0_LEN_0) },
9e30b8e0
L
10031 },
10032 {
ec6f095a
L
10033 /* VEX_W_0F99_P_2_LEN_0 */
10034 { MOD_TABLE (MOD_VEX_W_0_0F99_P_2_LEN_0) },
10035 { MOD_TABLE (MOD_VEX_W_1_0F99_P_2_LEN_0) },
9e30b8e0 10036 },
9e30b8e0 10037 {
592a252b 10038 /* VEX_W_0F380C_P_2 */
bf890a93 10039 { "vpermilps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10040 },
10041 {
592a252b 10042 /* VEX_W_0F380D_P_2 */
bf890a93 10043 { "vpermilpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10044 },
10045 {
592a252b 10046 /* VEX_W_0F380E_P_2 */
bf890a93 10047 { "vtestps", { XM, EXx }, 0 },
9e30b8e0
L
10048 },
10049 {
592a252b 10050 /* VEX_W_0F380F_P_2 */
bf890a93 10051 { "vtestpd", { XM, EXx }, 0 },
9e30b8e0 10052 },
6c30d220
L
10053 {
10054 /* VEX_W_0F3816_P_2 */
bf890a93 10055 { "vpermps", { XM, Vex, EXx }, 0 },
6c30d220 10056 },
bcf2684f 10057 {
6c30d220 10058 /* VEX_W_0F3818_P_2 */
bf890a93 10059 { "vbroadcastss", { XM, EXxmm_md }, 0 },
bcf2684f 10060 },
9e30b8e0 10061 {
6c30d220 10062 /* VEX_W_0F3819_P_2 */
bf890a93 10063 { "vbroadcastsd", { XM, EXxmm_mq }, 0 },
9e30b8e0
L
10064 },
10065 {
592a252b 10066 /* VEX_W_0F381A_P_2_M_0 */
bf890a93 10067 { "vbroadcastf128", { XM, Mxmm }, 0 },
9e30b8e0 10068 },
53aa04a0 10069 {
592a252b 10070 /* VEX_W_0F382C_P_2_M_0 */
bf890a93 10071 { "vmaskmovps", { XM, Vex, Mx }, 0 },
53aa04a0
L
10072 },
10073 {
592a252b 10074 /* VEX_W_0F382D_P_2_M_0 */
bf890a93 10075 { "vmaskmovpd", { XM, Vex, Mx }, 0 },
53aa04a0
L
10076 },
10077 {
592a252b 10078 /* VEX_W_0F382E_P_2_M_0 */
bf890a93 10079 { "vmaskmovps", { Mx, Vex, XM }, 0 },
53aa04a0
L
10080 },
10081 {
592a252b 10082 /* VEX_W_0F382F_P_2_M_0 */
bf890a93 10083 { "vmaskmovpd", { Mx, Vex, XM }, 0 },
53aa04a0 10084 },
6c30d220
L
10085 {
10086 /* VEX_W_0F3836_P_2 */
bf890a93 10087 { "vpermd", { XM, Vex, EXx }, 0 },
9e30b8e0 10088 },
6c30d220
L
10089 {
10090 /* VEX_W_0F3846_P_2 */
bf890a93 10091 { "vpsravd", { XM, Vex, EXx }, 0 },
6c30d220
L
10092 },
10093 {
10094 /* VEX_W_0F3858_P_2 */
bf890a93 10095 { "vpbroadcastd", { XM, EXxmm_md }, 0 },
6c30d220
L
10096 },
10097 {
10098 /* VEX_W_0F3859_P_2 */
bf890a93 10099 { "vpbroadcastq", { XM, EXxmm_mq }, 0 },
6c30d220
L
10100 },
10101 {
10102 /* VEX_W_0F385A_P_2_M_0 */
bf890a93 10103 { "vbroadcasti128", { XM, Mxmm }, 0 },
6c30d220
L
10104 },
10105 {
10106 /* VEX_W_0F3878_P_2 */
bf890a93 10107 { "vpbroadcastb", { XM, EXxmm_mb }, 0 },
6c30d220
L
10108 },
10109 {
10110 /* VEX_W_0F3879_P_2 */
bf890a93 10111 { "vpbroadcastw", { XM, EXxmm_mw }, 0 },
6c30d220 10112 },
48521003
IT
10113 {
10114 /* VEX_W_0F38CF_P_2 */
10115 { "vgf2p8mulb", { XM, Vex, EXx }, 0 },
10116 },
6c30d220
L
10117 {
10118 /* VEX_W_0F3A00_P_2 */
10119 { Bad_Opcode },
bf890a93 10120 { "vpermq", { XM, EXx, Ib }, 0 },
6c30d220
L
10121 },
10122 {
10123 /* VEX_W_0F3A01_P_2 */
10124 { Bad_Opcode },
bf890a93 10125 { "vpermpd", { XM, EXx, Ib }, 0 },
6c30d220
L
10126 },
10127 {
10128 /* VEX_W_0F3A02_P_2 */
bf890a93 10129 { "vpblendd", { XM, Vex, EXx, Ib }, 0 },
6c30d220 10130 },
9e30b8e0 10131 {
592a252b 10132 /* VEX_W_0F3A04_P_2 */
bf890a93 10133 { "vpermilps", { XM, EXx, Ib }, 0 },
9e30b8e0
L
10134 },
10135 {
592a252b 10136 /* VEX_W_0F3A05_P_2 */
bf890a93 10137 { "vpermilpd", { XM, EXx, Ib }, 0 },
9e30b8e0
L
10138 },
10139 {
592a252b 10140 /* VEX_W_0F3A06_P_2 */
bf890a93 10141 { "vperm2f128", { XM, Vex256, EXx, Ib }, 0 },
9e30b8e0 10142 },
9e30b8e0 10143 {
592a252b 10144 /* VEX_W_0F3A18_P_2 */
bf890a93 10145 { "vinsertf128", { XM, Vex256, EXxmm, Ib }, 0 },
9e30b8e0
L
10146 },
10147 {
592a252b 10148 /* VEX_W_0F3A19_P_2 */
bf890a93 10149 { "vextractf128", { EXxmm, XM, Ib }, 0 },
9e30b8e0 10150 },
43234a1e 10151 {
1ba585e8 10152 /* VEX_W_0F3A30_P_2_LEN_0 */
ab4e4ed5
AF
10153 { MOD_TABLE (MOD_VEX_W_0_0F3A30_P_2_LEN_0) },
10154 { MOD_TABLE (MOD_VEX_W_1_0F3A30_P_2_LEN_0) },
43234a1e
L
10155 },
10156 {
1ba585e8 10157 /* VEX_W_0F3A31_P_2_LEN_0 */
ab4e4ed5
AF
10158 { MOD_TABLE (MOD_VEX_W_0_0F3A31_P_2_LEN_0) },
10159 { MOD_TABLE (MOD_VEX_W_1_0F3A31_P_2_LEN_0) },
1ba585e8
IT
10160 },
10161 {
10162 /* VEX_W_0F3A32_P_2_LEN_0 */
ab4e4ed5
AF
10163 { MOD_TABLE (MOD_VEX_W_0_0F3A32_P_2_LEN_0) },
10164 { MOD_TABLE (MOD_VEX_W_1_0F3A32_P_2_LEN_0) },
43234a1e 10165 },
1ba585e8
IT
10166 {
10167 /* VEX_W_0F3A33_P_2_LEN_0 */
ab4e4ed5
AF
10168 { MOD_TABLE (MOD_VEX_W_0_0F3A33_P_2_LEN_0) },
10169 { MOD_TABLE (MOD_VEX_W_1_0F3A33_P_2_LEN_0) },
1ba585e8 10170 },
6c30d220
L
10171 {
10172 /* VEX_W_0F3A38_P_2 */
bf890a93 10173 { "vinserti128", { XM, Vex256, EXxmm, Ib }, 0 },
6c30d220
L
10174 },
10175 {
10176 /* VEX_W_0F3A39_P_2 */
bf890a93 10177 { "vextracti128", { EXxmm, XM, Ib }, 0 },
6c30d220 10178 },
6c30d220
L
10179 {
10180 /* VEX_W_0F3A46_P_2 */
bf890a93 10181 { "vperm2i128", { XM, Vex256, EXx, Ib }, 0 },
6c30d220 10182 },
a683cc34 10183 {
592a252b 10184 /* VEX_W_0F3A48_P_2 */
bf890a93
IT
10185 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
10186 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
a683cc34
SP
10187 },
10188 {
592a252b 10189 /* VEX_W_0F3A49_P_2 */
bf890a93
IT
10190 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
10191 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
a683cc34 10192 },
9e30b8e0 10193 {
592a252b 10194 /* VEX_W_0F3A4A_P_2 */
bf890a93 10195 { "vblendvps", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0
L
10196 },
10197 {
592a252b 10198 /* VEX_W_0F3A4B_P_2 */
bf890a93 10199 { "vblendvpd", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0
L
10200 },
10201 {
592a252b 10202 /* VEX_W_0F3A4C_P_2 */
bf890a93 10203 { "vpblendvb", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0 10204 },
48521003
IT
10205 {
10206 /* VEX_W_0F3ACE_P_2 */
10207 { Bad_Opcode },
10208 { "vgf2p8affineqb", { XM, Vex, EXx, Ib }, 0 },
10209 },
10210 {
10211 /* VEX_W_0F3ACF_P_2 */
10212 { Bad_Opcode },
10213 { "vgf2p8affineinvqb", { XM, Vex, EXx, Ib }, 0 },
10214 },
ad692897
L
10215
10216#include "i386-dis-evex-w.h"
9e30b8e0
L
10217};
10218
10219static const struct dis386 mod_table[][2] = {
10220 {
10221 /* MOD_8D */
bf890a93 10222 { "leaS", { Gv, M }, 0 },
9e30b8e0 10223 },
42164a71
L
10224 {
10225 /* MOD_C6_REG_7 */
10226 { Bad_Opcode },
10227 { RM_TABLE (RM_C6_REG_7) },
10228 },
10229 {
10230 /* MOD_C7_REG_7 */
10231 { Bad_Opcode },
10232 { RM_TABLE (RM_C7_REG_7) },
10233 },
4a357820
MZ
10234 {
10235 /* MOD_FF_REG_3 */
a72d2af2 10236 { "Jcall^", { indirEp }, 0 },
4a357820
MZ
10237 },
10238 {
10239 /* MOD_FF_REG_5 */
a72d2af2 10240 { "Jjmp^", { indirEp }, 0 },
4a357820 10241 },
9e30b8e0
L
10242 {
10243 /* MOD_0F01_REG_0 */
10244 { X86_64_TABLE (X86_64_0F01_REG_0) },
10245 { RM_TABLE (RM_0F01_REG_0) },
10246 },
10247 {
10248 /* MOD_0F01_REG_1 */
10249 { X86_64_TABLE (X86_64_0F01_REG_1) },
10250 { RM_TABLE (RM_0F01_REG_1) },
10251 },
10252 {
10253 /* MOD_0F01_REG_2 */
10254 { X86_64_TABLE (X86_64_0F01_REG_2) },
10255 { RM_TABLE (RM_0F01_REG_2) },
10256 },
10257 {
10258 /* MOD_0F01_REG_3 */
10259 { X86_64_TABLE (X86_64_0F01_REG_3) },
10260 { RM_TABLE (RM_0F01_REG_3) },
10261 },
8eab4136
L
10262 {
10263 /* MOD_0F01_REG_5 */
f8687e93
JB
10264 { PREFIX_TABLE (PREFIX_0F01_REG_5_MOD_0) },
10265 { RM_TABLE (RM_0F01_REG_5_MOD_3) },
8eab4136 10266 },
9e30b8e0
L
10267 {
10268 /* MOD_0F01_REG_7 */
bf890a93 10269 { "invlpg", { Mb }, 0 },
f8687e93 10270 { RM_TABLE (RM_0F01_REG_7_MOD_3) },
9e30b8e0
L
10271 },
10272 {
10273 /* MOD_0F12_PREFIX_0 */
507bd325
L
10274 { "movlps", { XM, EXq }, PREFIX_OPCODE },
10275 { "movhlps", { XM, EXq }, PREFIX_OPCODE },
9e30b8e0
L
10276 },
10277 {
10278 /* MOD_0F13 */
507bd325 10279 { "movlpX", { EXq, XM }, PREFIX_OPCODE },
9e30b8e0
L
10280 },
10281 {
10282 /* MOD_0F16_PREFIX_0 */
bf890a93
IT
10283 { "movhps", { XM, EXq }, 0 },
10284 { "movlhps", { XM, EXq }, 0 },
9e30b8e0
L
10285 },
10286 {
10287 /* MOD_0F17 */
507bd325 10288 { "movhpX", { EXq, XM }, PREFIX_OPCODE },
9e30b8e0
L
10289 },
10290 {
10291 /* MOD_0F18_REG_0 */
bf890a93 10292 { "prefetchnta", { Mb }, 0 },
9e30b8e0
L
10293 },
10294 {
10295 /* MOD_0F18_REG_1 */
bf890a93 10296 { "prefetcht0", { Mb }, 0 },
9e30b8e0
L
10297 },
10298 {
10299 /* MOD_0F18_REG_2 */
bf890a93 10300 { "prefetcht1", { Mb }, 0 },
9e30b8e0
L
10301 },
10302 {
10303 /* MOD_0F18_REG_3 */
bf890a93 10304 { "prefetcht2", { Mb }, 0 },
9e30b8e0 10305 },
d7189fa5
RM
10306 {
10307 /* MOD_0F18_REG_4 */
bf890a93 10308 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
10309 },
10310 {
10311 /* MOD_0F18_REG_5 */
bf890a93 10312 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
10313 },
10314 {
10315 /* MOD_0F18_REG_6 */
bf890a93 10316 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
10317 },
10318 {
10319 /* MOD_0F18_REG_7 */
bf890a93 10320 { "nop/reserved", { Mb }, 0 },
d7189fa5 10321 },
7e8b059b
L
10322 {
10323 /* MOD_0F1A_PREFIX_0 */
d276ec69 10324 { "bndldx", { Gbnd, Mv_bnd }, 0 },
bf890a93 10325 { "nopQ", { Ev }, 0 },
7e8b059b
L
10326 },
10327 {
10328 /* MOD_0F1B_PREFIX_0 */
d276ec69 10329 { "bndstx", { Mv_bnd, Gbnd }, 0 },
bf890a93 10330 { "nopQ", { Ev }, 0 },
7e8b059b
L
10331 },
10332 {
10333 /* MOD_0F1B_PREFIX_1 */
d276ec69 10334 { "bndmk", { Gbnd, Mv_bnd }, 0 },
bf890a93 10335 { "nopQ", { Ev }, 0 },
7e8b059b 10336 },
c48935d7
IT
10337 {
10338 /* MOD_0F1C_PREFIX_0 */
f8687e93 10339 { REG_TABLE (REG_0F1C_P_0_MOD_0) },
c48935d7
IT
10340 { "nopQ", { Ev }, 0 },
10341 },
603555e5
L
10342 {
10343 /* MOD_0F1E_PREFIX_1 */
10344 { "nopQ", { Ev }, 0 },
f8687e93 10345 { REG_TABLE (REG_0F1E_P_1_MOD_3) },
603555e5 10346 },
b844680a 10347 {
92fddf8e 10348 /* MOD_0F24 */
7bb15c6f 10349 { Bad_Opcode },
bf890a93 10350 { "movL", { Rd, Td }, 0 },
b844680a
L
10351 },
10352 {
92fddf8e 10353 /* MOD_0F26 */
592d1631 10354 { Bad_Opcode },
bf890a93 10355 { "movL", { Td, Rd }, 0 },
b844680a 10356 },
75c135a8
L
10357 {
10358 /* MOD_0F2B_PREFIX_0 */
507bd325 10359 {"movntps", { Mx, XM }, PREFIX_OPCODE },
75c135a8
L
10360 },
10361 {
10362 /* MOD_0F2B_PREFIX_1 */
507bd325 10363 {"movntss", { Md, XM }, PREFIX_OPCODE },
75c135a8
L
10364 },
10365 {
10366 /* MOD_0F2B_PREFIX_2 */
507bd325 10367 {"movntpd", { Mx, XM }, PREFIX_OPCODE },
75c135a8
L
10368 },
10369 {
10370 /* MOD_0F2B_PREFIX_3 */
507bd325 10371 {"movntsd", { Mq, XM }, PREFIX_OPCODE },
75c135a8
L
10372 },
10373 {
10374 /* MOD_0F51 */
592d1631 10375 { Bad_Opcode },
507bd325 10376 { "movmskpX", { Gdq, XS }, PREFIX_OPCODE },
75c135a8 10377 },
b844680a 10378 {
1ceb70f8 10379 /* MOD_0F71_REG_2 */
592d1631 10380 { Bad_Opcode },
bf890a93 10381 { "psrlw", { MS, Ib }, 0 },
b844680a
L
10382 },
10383 {
1ceb70f8 10384 /* MOD_0F71_REG_4 */
592d1631 10385 { Bad_Opcode },
bf890a93 10386 { "psraw", { MS, Ib }, 0 },
b844680a
L
10387 },
10388 {
1ceb70f8 10389 /* MOD_0F71_REG_6 */
592d1631 10390 { Bad_Opcode },
bf890a93 10391 { "psllw", { MS, Ib }, 0 },
b844680a
L
10392 },
10393 {
1ceb70f8 10394 /* MOD_0F72_REG_2 */
592d1631 10395 { Bad_Opcode },
bf890a93 10396 { "psrld", { MS, Ib }, 0 },
b844680a
L
10397 },
10398 {
1ceb70f8 10399 /* MOD_0F72_REG_4 */
592d1631 10400 { Bad_Opcode },
bf890a93 10401 { "psrad", { MS, Ib }, 0 },
b844680a
L
10402 },
10403 {
1ceb70f8 10404 /* MOD_0F72_REG_6 */
592d1631 10405 { Bad_Opcode },
bf890a93 10406 { "pslld", { MS, Ib }, 0 },
b844680a
L
10407 },
10408 {
1ceb70f8 10409 /* MOD_0F73_REG_2 */
592d1631 10410 { Bad_Opcode },
bf890a93 10411 { "psrlq", { MS, Ib }, 0 },
b844680a
L
10412 },
10413 {
1ceb70f8 10414 /* MOD_0F73_REG_3 */
592d1631 10415 { Bad_Opcode },
c0f3af97
L
10416 { PREFIX_TABLE (PREFIX_0F73_REG_3) },
10417 },
10418 {
10419 /* MOD_0F73_REG_6 */
592d1631 10420 { Bad_Opcode },
bf890a93 10421 { "psllq", { MS, Ib }, 0 },
c0f3af97
L
10422 },
10423 {
10424 /* MOD_0F73_REG_7 */
592d1631 10425 { Bad_Opcode },
c0f3af97
L
10426 { PREFIX_TABLE (PREFIX_0F73_REG_7) },
10427 },
10428 {
10429 /* MOD_0FAE_REG_0 */
bf890a93 10430 { "fxsave", { FXSAVE }, 0 },
f8687e93 10431 { PREFIX_TABLE (PREFIX_0FAE_REG_0_MOD_3) },
c0f3af97
L
10432 },
10433 {
10434 /* MOD_0FAE_REG_1 */
bf890a93 10435 { "fxrstor", { FXSAVE }, 0 },
f8687e93 10436 { PREFIX_TABLE (PREFIX_0FAE_REG_1_MOD_3) },
c0f3af97
L
10437 },
10438 {
10439 /* MOD_0FAE_REG_2 */
bf890a93 10440 { "ldmxcsr", { Md }, 0 },
f8687e93 10441 { PREFIX_TABLE (PREFIX_0FAE_REG_2_MOD_3) },
c0f3af97
L
10442 },
10443 {
10444 /* MOD_0FAE_REG_3 */
bf890a93 10445 { "stmxcsr", { Md }, 0 },
f8687e93 10446 { PREFIX_TABLE (PREFIX_0FAE_REG_3_MOD_3) },
c0f3af97
L
10447 },
10448 {
10449 /* MOD_0FAE_REG_4 */
f8687e93
JB
10450 { PREFIX_TABLE (PREFIX_0FAE_REG_4_MOD_0) },
10451 { PREFIX_TABLE (PREFIX_0FAE_REG_4_MOD_3) },
c0f3af97
L
10452 },
10453 {
10454 /* MOD_0FAE_REG_5 */
f8687e93
JB
10455 { PREFIX_TABLE (PREFIX_0FAE_REG_5_MOD_0) },
10456 { PREFIX_TABLE (PREFIX_0FAE_REG_5_MOD_3) },
c0f3af97
L
10457 },
10458 {
10459 /* MOD_0FAE_REG_6 */
f8687e93
JB
10460 { PREFIX_TABLE (PREFIX_0FAE_REG_6_MOD_0) },
10461 { PREFIX_TABLE (PREFIX_0FAE_REG_6_MOD_3) },
c0f3af97
L
10462 },
10463 {
10464 /* MOD_0FAE_REG_7 */
f8687e93
JB
10465 { PREFIX_TABLE (PREFIX_0FAE_REG_7_MOD_0) },
10466 { RM_TABLE (RM_0FAE_REG_7_MOD_3) },
c0f3af97
L
10467 },
10468 {
10469 /* MOD_0FB2 */
bf890a93 10470 { "lssS", { Gv, Mp }, 0 },
c0f3af97
L
10471 },
10472 {
10473 /* MOD_0FB4 */
bf890a93 10474 { "lfsS", { Gv, Mp }, 0 },
c0f3af97
L
10475 },
10476 {
10477 /* MOD_0FB5 */
bf890a93 10478 { "lgsS", { Gv, Mp }, 0 },
c0f3af97 10479 },
a8484f96
L
10480 {
10481 /* MOD_0FC3 */
f8687e93 10482 { PREFIX_TABLE (PREFIX_0FC3_MOD_0) },
a8484f96 10483 },
963f3586
IT
10484 {
10485 /* MOD_0FC7_REG_3 */
a8484f96 10486 { "xrstors", { FXSAVE }, 0 },
963f3586
IT
10487 },
10488 {
10489 /* MOD_0FC7_REG_4 */
bf890a93 10490 { "xsavec", { FXSAVE }, 0 },
963f3586
IT
10491 },
10492 {
10493 /* MOD_0FC7_REG_5 */
bf890a93 10494 { "xsaves", { FXSAVE }, 0 },
963f3586 10495 },
c0f3af97
L
10496 {
10497 /* MOD_0FC7_REG_6 */
f8687e93
JB
10498 { PREFIX_TABLE (PREFIX_0FC7_REG_6_MOD_0) },
10499 { PREFIX_TABLE (PREFIX_0FC7_REG_6_MOD_3) }
c0f3af97
L
10500 },
10501 {
10502 /* MOD_0FC7_REG_7 */
bf890a93 10503 { "vmptrst", { Mq }, 0 },
f8687e93 10504 { PREFIX_TABLE (PREFIX_0FC7_REG_7_MOD_3) }
c0f3af97
L
10505 },
10506 {
10507 /* MOD_0FD7 */
592d1631 10508 { Bad_Opcode },
bf890a93 10509 { "pmovmskb", { Gdq, MS }, 0 },
c0f3af97
L
10510 },
10511 {
10512 /* MOD_0FE7_PREFIX_2 */
bf890a93 10513 { "movntdq", { Mx, XM }, 0 },
c0f3af97
L
10514 },
10515 {
10516 /* MOD_0FF0_PREFIX_3 */
bf890a93 10517 { "lddqu", { XM, M }, 0 },
c0f3af97
L
10518 },
10519 {
10520 /* MOD_0F382A_PREFIX_2 */
bf890a93 10521 { "movntdqa", { XM, Mx }, 0 },
c0f3af97 10522 },
603555e5
L
10523 {
10524 /* MOD_0F38F5_PREFIX_2 */
10525 { "wrussK", { M, Gdq }, PREFIX_OPCODE },
10526 },
10527 {
10528 /* MOD_0F38F6_PREFIX_0 */
10529 { "wrssK", { M, Gdq }, PREFIX_OPCODE },
10530 },
5d79adc4
L
10531 {
10532 /* MOD_0F38F8_PREFIX_1 */
10533 { "enqcmds", { Gva, M }, PREFIX_OPCODE },
10534 },
c0a30a9f
L
10535 {
10536 /* MOD_0F38F8_PREFIX_2 */
10537 { "movdir64b", { Gva, M }, PREFIX_OPCODE },
10538 },
5d79adc4
L
10539 {
10540 /* MOD_0F38F8_PREFIX_3 */
10541 { "enqcmd", { Gva, M }, PREFIX_OPCODE },
10542 },
c0a30a9f
L
10543 {
10544 /* MOD_0F38F9_PREFIX_0 */
77ad8092 10545 { "movdiri", { Ev, Gv }, PREFIX_OPCODE },
c0a30a9f 10546 },
c0f3af97
L
10547 {
10548 /* MOD_62_32BIT */
bf890a93 10549 { "bound{S|}", { Gv, Ma }, 0 },
43234a1e 10550 { EVEX_TABLE (EVEX_0F) },
c0f3af97
L
10551 },
10552 {
10553 /* MOD_C4_32BIT */
bf890a93 10554 { "lesS", { Gv, Mp }, 0 },
c0f3af97
L
10555 { VEX_C4_TABLE (VEX_0F) },
10556 },
10557 {
10558 /* MOD_C5_32BIT */
bf890a93 10559 { "ldsS", { Gv, Mp }, 0 },
c0f3af97
L
10560 { VEX_C5_TABLE (VEX_0F) },
10561 },
10562 {
592a252b
L
10563 /* MOD_VEX_0F12_PREFIX_0 */
10564 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_0) },
10565 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_1) },
c0f3af97
L
10566 },
10567 {
592a252b
L
10568 /* MOD_VEX_0F13 */
10569 { VEX_LEN_TABLE (VEX_LEN_0F13_M_0) },
c0f3af97
L
10570 },
10571 {
592a252b
L
10572 /* MOD_VEX_0F16_PREFIX_0 */
10573 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_0) },
10574 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_1) },
c0f3af97
L
10575 },
10576 {
592a252b
L
10577 /* MOD_VEX_0F17 */
10578 { VEX_LEN_TABLE (VEX_LEN_0F17_M_0) },
c0f3af97
L
10579 },
10580 {
592a252b 10581 /* MOD_VEX_0F2B */
ec6f095a 10582 { "vmovntpX", { Mx, XM }, 0 },
c0f3af97 10583 },
ab4e4ed5
AF
10584 {
10585 /* MOD_VEX_W_0_0F41_P_0_LEN_1 */
10586 { Bad_Opcode },
10587 { "kandw", { MaskG, MaskVex, MaskR }, 0 },
10588 },
10589 {
10590 /* MOD_VEX_W_1_0F41_P_0_LEN_1 */
10591 { Bad_Opcode },
10592 { "kandq", { MaskG, MaskVex, MaskR }, 0 },
10593 },
10594 {
10595 /* MOD_VEX_W_0_0F41_P_2_LEN_1 */
10596 { Bad_Opcode },
10597 { "kandb", { MaskG, MaskVex, MaskR }, 0 },
10598 },
10599 {
10600 /* MOD_VEX_W_1_0F41_P_2_LEN_1 */
10601 { Bad_Opcode },
10602 { "kandd", { MaskG, MaskVex, MaskR }, 0 },
10603 },
10604 {
10605 /* MOD_VEX_W_0_0F42_P_0_LEN_1 */
10606 { Bad_Opcode },
10607 { "kandnw", { MaskG, MaskVex, MaskR }, 0 },
10608 },
10609 {
10610 /* MOD_VEX_W_1_0F42_P_0_LEN_1 */
10611 { Bad_Opcode },
10612 { "kandnq", { MaskG, MaskVex, MaskR }, 0 },
10613 },
10614 {
10615 /* MOD_VEX_W_0_0F42_P_2_LEN_1 */
10616 { Bad_Opcode },
10617 { "kandnb", { MaskG, MaskVex, MaskR }, 0 },
10618 },
10619 {
10620 /* MOD_VEX_W_1_0F42_P_2_LEN_1 */
10621 { Bad_Opcode },
10622 { "kandnd", { MaskG, MaskVex, MaskR }, 0 },
10623 },
10624 {
10625 /* MOD_VEX_W_0_0F44_P_0_LEN_0 */
10626 { Bad_Opcode },
10627 { "knotw", { MaskG, MaskR }, 0 },
10628 },
10629 {
10630 /* MOD_VEX_W_1_0F44_P_0_LEN_0 */
10631 { Bad_Opcode },
10632 { "knotq", { MaskG, MaskR }, 0 },
10633 },
10634 {
10635 /* MOD_VEX_W_0_0F44_P_2_LEN_0 */
10636 { Bad_Opcode },
10637 { "knotb", { MaskG, MaskR }, 0 },
10638 },
10639 {
10640 /* MOD_VEX_W_1_0F44_P_2_LEN_0 */
10641 { Bad_Opcode },
10642 { "knotd", { MaskG, MaskR }, 0 },
10643 },
10644 {
10645 /* MOD_VEX_W_0_0F45_P_0_LEN_1 */
10646 { Bad_Opcode },
10647 { "korw", { MaskG, MaskVex, MaskR }, 0 },
10648 },
10649 {
10650 /* MOD_VEX_W_1_0F45_P_0_LEN_1 */
10651 { Bad_Opcode },
10652 { "korq", { MaskG, MaskVex, MaskR }, 0 },
10653 },
10654 {
10655 /* MOD_VEX_W_0_0F45_P_2_LEN_1 */
10656 { Bad_Opcode },
10657 { "korb", { MaskG, MaskVex, MaskR }, 0 },
10658 },
10659 {
10660 /* MOD_VEX_W_1_0F45_P_2_LEN_1 */
10661 { Bad_Opcode },
10662 { "kord", { MaskG, MaskVex, MaskR }, 0 },
10663 },
10664 {
10665 /* MOD_VEX_W_0_0F46_P_0_LEN_1 */
10666 { Bad_Opcode },
10667 { "kxnorw", { MaskG, MaskVex, MaskR }, 0 },
10668 },
10669 {
10670 /* MOD_VEX_W_1_0F46_P_0_LEN_1 */
10671 { Bad_Opcode },
10672 { "kxnorq", { MaskG, MaskVex, MaskR }, 0 },
10673 },
10674 {
10675 /* MOD_VEX_W_0_0F46_P_2_LEN_1 */
10676 { Bad_Opcode },
10677 { "kxnorb", { MaskG, MaskVex, MaskR }, 0 },
10678 },
10679 {
10680 /* MOD_VEX_W_1_0F46_P_2_LEN_1 */
10681 { Bad_Opcode },
10682 { "kxnord", { MaskG, MaskVex, MaskR }, 0 },
10683 },
10684 {
10685 /* MOD_VEX_W_0_0F47_P_0_LEN_1 */
10686 { Bad_Opcode },
10687 { "kxorw", { MaskG, MaskVex, MaskR }, 0 },
10688 },
10689 {
10690 /* MOD_VEX_W_1_0F47_P_0_LEN_1 */
10691 { Bad_Opcode },
10692 { "kxorq", { MaskG, MaskVex, MaskR }, 0 },
10693 },
10694 {
10695 /* MOD_VEX_W_0_0F47_P_2_LEN_1 */
10696 { Bad_Opcode },
10697 { "kxorb", { MaskG, MaskVex, MaskR }, 0 },
10698 },
10699 {
10700 /* MOD_VEX_W_1_0F47_P_2_LEN_1 */
10701 { Bad_Opcode },
10702 { "kxord", { MaskG, MaskVex, MaskR }, 0 },
10703 },
10704 {
10705 /* MOD_VEX_W_0_0F4A_P_0_LEN_1 */
10706 { Bad_Opcode },
10707 { "kaddw", { MaskG, MaskVex, MaskR }, 0 },
10708 },
10709 {
10710 /* MOD_VEX_W_1_0F4A_P_0_LEN_1 */
10711 { Bad_Opcode },
10712 { "kaddq", { MaskG, MaskVex, MaskR }, 0 },
10713 },
10714 {
10715 /* MOD_VEX_W_0_0F4A_P_2_LEN_1 */
10716 { Bad_Opcode },
10717 { "kaddb", { MaskG, MaskVex, MaskR }, 0 },
10718 },
10719 {
10720 /* MOD_VEX_W_1_0F4A_P_2_LEN_1 */
10721 { Bad_Opcode },
10722 { "kaddd", { MaskG, MaskVex, MaskR }, 0 },
10723 },
10724 {
10725 /* MOD_VEX_W_0_0F4B_P_0_LEN_1 */
10726 { Bad_Opcode },
10727 { "kunpckwd", { MaskG, MaskVex, MaskR }, 0 },
10728 },
10729 {
10730 /* MOD_VEX_W_1_0F4B_P_0_LEN_1 */
10731 { Bad_Opcode },
10732 { "kunpckdq", { MaskG, MaskVex, MaskR }, 0 },
10733 },
10734 {
10735 /* MOD_VEX_W_0_0F4B_P_2_LEN_1 */
10736 { Bad_Opcode },
10737 { "kunpckbw", { MaskG, MaskVex, MaskR }, 0 },
10738 },
c0f3af97 10739 {
592a252b 10740 /* MOD_VEX_0F50 */
592d1631 10741 { Bad_Opcode },
ec6f095a 10742 { "vmovmskpX", { Gdq, XS }, 0 },
c0f3af97
L
10743 },
10744 {
592a252b 10745 /* MOD_VEX_0F71_REG_2 */
592d1631 10746 { Bad_Opcode },
592a252b 10747 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_2) },
b844680a
L
10748 },
10749 {
592a252b 10750 /* MOD_VEX_0F71_REG_4 */
592d1631 10751 { Bad_Opcode },
592a252b 10752 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_4) },
b844680a
L
10753 },
10754 {
592a252b 10755 /* MOD_VEX_0F71_REG_6 */
592d1631 10756 { Bad_Opcode },
592a252b 10757 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_6) },
b844680a
L
10758 },
10759 {
592a252b 10760 /* MOD_VEX_0F72_REG_2 */
592d1631 10761 { Bad_Opcode },
592a252b 10762 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_2) },
b844680a 10763 },
d8faab4e 10764 {
592a252b 10765 /* MOD_VEX_0F72_REG_4 */
592d1631 10766 { Bad_Opcode },
592a252b 10767 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_4) },
d8faab4e
L
10768 },
10769 {
592a252b 10770 /* MOD_VEX_0F72_REG_6 */
592d1631 10771 { Bad_Opcode },
592a252b 10772 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_6) },
d8faab4e 10773 },
876d4bfa 10774 {
592a252b 10775 /* MOD_VEX_0F73_REG_2 */
592d1631 10776 { Bad_Opcode },
592a252b 10777 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_2) },
876d4bfa
L
10778 },
10779 {
592a252b 10780 /* MOD_VEX_0F73_REG_3 */
592d1631 10781 { Bad_Opcode },
592a252b 10782 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_3) },
475a2301
L
10783 },
10784 {
592a252b 10785 /* MOD_VEX_0F73_REG_6 */
592d1631 10786 { Bad_Opcode },
592a252b 10787 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_6) },
876d4bfa
L
10788 },
10789 {
592a252b 10790 /* MOD_VEX_0F73_REG_7 */
592d1631 10791 { Bad_Opcode },
592a252b 10792 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_7) },
876d4bfa 10793 },
ab4e4ed5
AF
10794 {
10795 /* MOD_VEX_W_0_0F91_P_0_LEN_0 */
10796 { "kmovw", { Ew, MaskG }, 0 },
10797 { Bad_Opcode },
10798 },
10799 {
10800 /* MOD_VEX_W_0_0F91_P_0_LEN_0 */
10801 { "kmovq", { Eq, MaskG }, 0 },
10802 { Bad_Opcode },
10803 },
10804 {
10805 /* MOD_VEX_W_0_0F91_P_2_LEN_0 */
10806 { "kmovb", { Eb, MaskG }, 0 },
10807 { Bad_Opcode },
10808 },
10809 {
10810 /* MOD_VEX_W_0_0F91_P_2_LEN_0 */
10811 { "kmovd", { Ed, MaskG }, 0 },
10812 { Bad_Opcode },
10813 },
10814 {
10815 /* MOD_VEX_W_0_0F92_P_0_LEN_0 */
10816 { Bad_Opcode },
10817 { "kmovw", { MaskG, Rdq }, 0 },
10818 },
10819 {
10820 /* MOD_VEX_W_0_0F92_P_2_LEN_0 */
10821 { Bad_Opcode },
10822 { "kmovb", { MaskG, Rdq }, 0 },
10823 },
10824 {
58a211d2 10825 /* MOD_VEX_0F92_P_3_LEN_0 */
ab4e4ed5 10826 { Bad_Opcode },
58a211d2 10827 { "kmovK", { MaskG, Rdq }, 0 },
ab4e4ed5
AF
10828 },
10829 {
10830 /* MOD_VEX_W_0_0F93_P_0_LEN_0 */
10831 { Bad_Opcode },
10832 { "kmovw", { Gdq, MaskR }, 0 },
10833 },
10834 {
10835 /* MOD_VEX_W_0_0F93_P_2_LEN_0 */
10836 { Bad_Opcode },
10837 { "kmovb", { Gdq, MaskR }, 0 },
10838 },
10839 {
58a211d2 10840 /* MOD_VEX_0F93_P_3_LEN_0 */
ab4e4ed5 10841 { Bad_Opcode },
58a211d2 10842 { "kmovK", { Gdq, MaskR }, 0 },
ab4e4ed5
AF
10843 },
10844 {
10845 /* MOD_VEX_W_0_0F98_P_0_LEN_0 */
10846 { Bad_Opcode },
10847 { "kortestw", { MaskG, MaskR }, 0 },
10848 },
10849 {
10850 /* MOD_VEX_W_1_0F98_P_0_LEN_0 */
10851 { Bad_Opcode },
10852 { "kortestq", { MaskG, MaskR }, 0 },
10853 },
10854 {
10855 /* MOD_VEX_W_0_0F98_P_2_LEN_0 */
10856 { Bad_Opcode },
10857 { "kortestb", { MaskG, MaskR }, 0 },
10858 },
10859 {
10860 /* MOD_VEX_W_1_0F98_P_2_LEN_0 */
10861 { Bad_Opcode },
10862 { "kortestd", { MaskG, MaskR }, 0 },
10863 },
10864 {
10865 /* MOD_VEX_W_0_0F99_P_0_LEN_0 */
10866 { Bad_Opcode },
10867 { "ktestw", { MaskG, MaskR }, 0 },
10868 },
10869 {
10870 /* MOD_VEX_W_1_0F99_P_0_LEN_0 */
10871 { Bad_Opcode },
10872 { "ktestq", { MaskG, MaskR }, 0 },
10873 },
10874 {
10875 /* MOD_VEX_W_0_0F99_P_2_LEN_0 */
10876 { Bad_Opcode },
10877 { "ktestb", { MaskG, MaskR }, 0 },
10878 },
10879 {
10880 /* MOD_VEX_W_1_0F99_P_2_LEN_0 */
10881 { Bad_Opcode },
10882 { "ktestd", { MaskG, MaskR }, 0 },
10883 },
876d4bfa 10884 {
592a252b
L
10885 /* MOD_VEX_0FAE_REG_2 */
10886 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_2_M_0) },
876d4bfa 10887 },
bbedc832 10888 {
592a252b
L
10889 /* MOD_VEX_0FAE_REG_3 */
10890 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_3_M_0) },
bbedc832 10891 },
144c41d9 10892 {
592a252b 10893 /* MOD_VEX_0FD7_PREFIX_2 */
592d1631 10894 { Bad_Opcode },
ec6f095a 10895 { "vpmovmskb", { Gdq, XS }, 0 },
144c41d9 10896 },
1afd85e3 10897 {
592a252b 10898 /* MOD_VEX_0FE7_PREFIX_2 */
ec6f095a 10899 { "vmovntdq", { Mx, XM }, 0 },
1afd85e3
L
10900 },
10901 {
592a252b 10902 /* MOD_VEX_0FF0_PREFIX_3 */
ec6f095a 10903 { "vlddqu", { XM, M }, 0 },
92fddf8e 10904 },
75c135a8 10905 {
592a252b
L
10906 /* MOD_VEX_0F381A_PREFIX_2 */
10907 { VEX_LEN_TABLE (VEX_LEN_0F381A_P_2_M_0) },
75c135a8 10908 },
1afd85e3 10909 {
592a252b 10910 /* MOD_VEX_0F382A_PREFIX_2 */
ec6f095a 10911 { "vmovntdqa", { XM, Mx }, 0 },
1afd85e3 10912 },
75c135a8 10913 {
592a252b
L
10914 /* MOD_VEX_0F382C_PREFIX_2 */
10915 { VEX_W_TABLE (VEX_W_0F382C_P_2_M_0) },
75c135a8 10916 },
1afd85e3 10917 {
592a252b
L
10918 /* MOD_VEX_0F382D_PREFIX_2 */
10919 { VEX_W_TABLE (VEX_W_0F382D_P_2_M_0) },
1afd85e3
L
10920 },
10921 {
592a252b
L
10922 /* MOD_VEX_0F382E_PREFIX_2 */
10923 { VEX_W_TABLE (VEX_W_0F382E_P_2_M_0) },
1afd85e3
L
10924 },
10925 {
592a252b
L
10926 /* MOD_VEX_0F382F_PREFIX_2 */
10927 { VEX_W_TABLE (VEX_W_0F382F_P_2_M_0) },
1afd85e3 10928 },
6c30d220
L
10929 {
10930 /* MOD_VEX_0F385A_PREFIX_2 */
10931 { VEX_LEN_TABLE (VEX_LEN_0F385A_P_2_M_0) },
10932 },
10933 {
10934 /* MOD_VEX_0F388C_PREFIX_2 */
bf890a93 10935 { "vpmaskmov%LW", { XM, Vex, Mx }, 0 },
6c30d220
L
10936 },
10937 {
10938 /* MOD_VEX_0F388E_PREFIX_2 */
bf890a93 10939 { "vpmaskmov%LW", { Mx, Vex, XM }, 0 },
6c30d220 10940 },
ab4e4ed5
AF
10941 {
10942 /* MOD_VEX_W_0_0F3A30_P_2_LEN_0 */
10943 { Bad_Opcode },
10944 { "kshiftrb", { MaskG, MaskR, Ib }, 0 },
10945 },
10946 {
10947 /* MOD_VEX_W_1_0F3A30_P_2_LEN_0 */
10948 { Bad_Opcode },
10949 { "kshiftrw", { MaskG, MaskR, Ib }, 0 },
10950 },
10951 {
10952 /* MOD_VEX_W_0_0F3A31_P_2_LEN_0 */
10953 { Bad_Opcode },
10954 { "kshiftrd", { MaskG, MaskR, Ib }, 0 },
10955 },
10956 {
10957 /* MOD_VEX_W_1_0F3A31_P_2_LEN_0 */
10958 { Bad_Opcode },
10959 { "kshiftrq", { MaskG, MaskR, Ib }, 0 },
10960 },
10961 {
10962 /* MOD_VEX_W_0_0F3A32_P_2_LEN_0 */
10963 { Bad_Opcode },
10964 { "kshiftlb", { MaskG, MaskR, Ib }, 0 },
10965 },
10966 {
10967 /* MOD_VEX_W_1_0F3A32_P_2_LEN_0 */
10968 { Bad_Opcode },
10969 { "kshiftlw", { MaskG, MaskR, Ib }, 0 },
10970 },
10971 {
10972 /* MOD_VEX_W_0_0F3A33_P_2_LEN_0 */
10973 { Bad_Opcode },
10974 { "kshiftld", { MaskG, MaskR, Ib }, 0 },
10975 },
10976 {
10977 /* MOD_VEX_W_1_0F3A33_P_2_LEN_0 */
10978 { Bad_Opcode },
10979 { "kshiftlq", { MaskG, MaskR, Ib }, 0 },
10980 },
ad692897
L
10981
10982#include "i386-dis-evex-mod.h"
b844680a
L
10983};
10984
1ceb70f8 10985static const struct dis386 rm_table[][8] = {
42164a71
L
10986 {
10987 /* RM_C6_REG_7 */
bf890a93 10988 { "xabort", { Skip_MODRM, Ib }, 0 },
42164a71
L
10989 },
10990 {
10991 /* RM_C7_REG_7 */
376cd056 10992 { "xbeginT", { Skip_MODRM, Jdqw }, 0 },
42164a71 10993 },
b844680a 10994 {
1ceb70f8 10995 /* RM_0F01_REG_0 */
a4e78aa5 10996 { "enclv", { Skip_MODRM }, 0 },
bf890a93
IT
10997 { "vmcall", { Skip_MODRM }, 0 },
10998 { "vmlaunch", { Skip_MODRM }, 0 },
10999 { "vmresume", { Skip_MODRM }, 0 },
11000 { "vmxoff", { Skip_MODRM }, 0 },
be3a8dca 11001 { "pconfig", { Skip_MODRM }, 0 },
b844680a
L
11002 },
11003 {
1ceb70f8 11004 /* RM_0F01_REG_1 */
bf890a93
IT
11005 { "monitor", { { OP_Monitor, 0 } }, 0 },
11006 { "mwait", { { OP_Mwait, 0 } }, 0 },
11007 { "clac", { Skip_MODRM }, 0 },
11008 { "stac", { Skip_MODRM }, 0 },
2cf200a4
IT
11009 { Bad_Opcode },
11010 { Bad_Opcode },
11011 { Bad_Opcode },
bf890a93 11012 { "encls", { Skip_MODRM }, 0 },
b844680a 11013 },
475a2301
L
11014 {
11015 /* RM_0F01_REG_2 */
bf890a93
IT
11016 { "xgetbv", { Skip_MODRM }, 0 },
11017 { "xsetbv", { Skip_MODRM }, 0 },
8729a6f6
L
11018 { Bad_Opcode },
11019 { Bad_Opcode },
bf890a93
IT
11020 { "vmfunc", { Skip_MODRM }, 0 },
11021 { "xend", { Skip_MODRM }, 0 },
11022 { "xtest", { Skip_MODRM }, 0 },
11023 { "enclu", { Skip_MODRM }, 0 },
475a2301 11024 },
b844680a 11025 {
1ceb70f8 11026 /* RM_0F01_REG_3 */
bf890a93
IT
11027 { "vmrun", { Skip_MODRM }, 0 },
11028 { "vmmcall", { Skip_MODRM }, 0 },
11029 { "vmload", { Skip_MODRM }, 0 },
11030 { "vmsave", { Skip_MODRM }, 0 },
11031 { "stgi", { Skip_MODRM }, 0 },
11032 { "clgi", { Skip_MODRM }, 0 },
11033 { "skinit", { Skip_MODRM }, 0 },
11034 { "invlpga", { Skip_MODRM }, 0 },
4e7d34a6 11035 },
8eab4136 11036 {
f8687e93
JB
11037 /* RM_0F01_REG_5_MOD_3 */
11038 { PREFIX_TABLE (PREFIX_0F01_REG_5_MOD_3_RM_0) },
8eab4136 11039 { Bad_Opcode },
f8687e93 11040 { PREFIX_TABLE (PREFIX_0F01_REG_5_MOD_3_RM_2) },
8eab4136
L
11041 { Bad_Opcode },
11042 { Bad_Opcode },
11043 { Bad_Opcode },
11044 { "rdpkru", { Skip_MODRM }, 0 },
11045 { "wrpkru", { Skip_MODRM }, 0 },
11046 },
4e7d34a6 11047 {
f8687e93 11048 /* RM_0F01_REG_7_MOD_3 */
bf890a93
IT
11049 { "swapgs", { Skip_MODRM }, 0 },
11050 { "rdtscp", { Skip_MODRM }, 0 },
267b8516
JB
11051 { PREFIX_TABLE (PREFIX_0F01_REG_7_MOD_3_RM_2) },
11052 { PREFIX_TABLE (PREFIX_0F01_REG_7_MOD_3_RM_3) },
bf890a93 11053 { "clzero", { Skip_MODRM }, 0 },
142861df 11054 { "rdpru", { Skip_MODRM }, 0 },
b844680a 11055 },
603555e5 11056 {
f8687e93 11057 /* RM_0F1E_P_1_MOD_3_REG_7 */
603555e5
L
11058 { "nopQ", { Ev }, 0 },
11059 { "nopQ", { Ev }, 0 },
11060 { "endbr64", { Skip_MODRM }, PREFIX_OPCODE },
11061 { "endbr32", { Skip_MODRM }, PREFIX_OPCODE },
11062 { "nopQ", { Ev }, 0 },
11063 { "nopQ", { Ev }, 0 },
11064 { "nopQ", { Ev }, 0 },
11065 { "nopQ", { Ev }, 0 },
11066 },
b844680a 11067 {
f8687e93 11068 /* RM_0FAE_REG_6_MOD_3 */
bf890a93 11069 { "mfence", { Skip_MODRM }, 0 },
b844680a 11070 },
bbedc832 11071 {
f8687e93 11072 /* RM_0FAE_REG_7_MOD_3 */
b5cefcca
L
11073 { "sfence", { Skip_MODRM }, 0 },
11074
144c41d9 11075 },
b844680a
L
11076};
11077
c608c12e
AM
11078#define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")
11079
f16cd0d5
L
11080/* We use the high bit to indicate different name for the same
11081 prefix. */
f16cd0d5 11082#define REP_PREFIX (0xf3 | 0x100)
42164a71
L
11083#define XACQUIRE_PREFIX (0xf2 | 0x200)
11084#define XRELEASE_PREFIX (0xf3 | 0x400)
7e8b059b 11085#define BND_PREFIX (0xf2 | 0x400)
04ef582a 11086#define NOTRACK_PREFIX (0x3e | 0x100)
f16cd0d5 11087
1d67fe3b
TT
11088/* Remember if the current op is a jump instruction. */
11089static bfd_boolean op_is_jump = FALSE;
11090
f16cd0d5 11091static int
26ca5450 11092ckprefix (void)
252b5132 11093{
f16cd0d5 11094 int newrex, i, length;
52b15da3 11095 rex = 0;
c0f3af97 11096 rex_ignored = 0;
252b5132 11097 prefixes = 0;
7d421014 11098 used_prefixes = 0;
52b15da3 11099 rex_used = 0;
f16cd0d5
L
11100 last_lock_prefix = -1;
11101 last_repz_prefix = -1;
11102 last_repnz_prefix = -1;
11103 last_data_prefix = -1;
11104 last_addr_prefix = -1;
11105 last_rex_prefix = -1;
11106 last_seg_prefix = -1;
d9949a36 11107 fwait_prefix = -1;
285ca992 11108 active_seg_prefix = 0;
f310f33d
L
11109 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
11110 all_prefixes[i] = 0;
11111 i = 0;
f16cd0d5
L
11112 length = 0;
11113 /* The maximum instruction length is 15bytes. */
11114 while (length < MAX_CODE_LENGTH - 1)
252b5132
RH
11115 {
11116 FETCH_DATA (the_info, codep + 1);
52b15da3 11117 newrex = 0;
252b5132
RH
11118 switch (*codep)
11119 {
52b15da3
JH
11120 /* REX prefixes family. */
11121 case 0x40:
11122 case 0x41:
11123 case 0x42:
11124 case 0x43:
11125 case 0x44:
11126 case 0x45:
11127 case 0x46:
11128 case 0x47:
11129 case 0x48:
11130 case 0x49:
11131 case 0x4a:
11132 case 0x4b:
11133 case 0x4c:
11134 case 0x4d:
11135 case 0x4e:
11136 case 0x4f:
f16cd0d5
L
11137 if (address_mode == mode_64bit)
11138 newrex = *codep;
11139 else
11140 return 1;
11141 last_rex_prefix = i;
52b15da3 11142 break;
252b5132
RH
11143 case 0xf3:
11144 prefixes |= PREFIX_REPZ;
f16cd0d5 11145 last_repz_prefix = i;
252b5132
RH
11146 break;
11147 case 0xf2:
11148 prefixes |= PREFIX_REPNZ;
f16cd0d5 11149 last_repnz_prefix = i;
252b5132
RH
11150 break;
11151 case 0xf0:
11152 prefixes |= PREFIX_LOCK;
f16cd0d5 11153 last_lock_prefix = i;
252b5132
RH
11154 break;
11155 case 0x2e:
11156 prefixes |= PREFIX_CS;
f16cd0d5 11157 last_seg_prefix = i;
285ca992 11158 active_seg_prefix = PREFIX_CS;
252b5132
RH
11159 break;
11160 case 0x36:
11161 prefixes |= PREFIX_SS;
f16cd0d5 11162 last_seg_prefix = i;
285ca992 11163 active_seg_prefix = PREFIX_SS;
252b5132
RH
11164 break;
11165 case 0x3e:
11166 prefixes |= PREFIX_DS;
f16cd0d5 11167 last_seg_prefix = i;
285ca992 11168 active_seg_prefix = PREFIX_DS;
252b5132
RH
11169 break;
11170 case 0x26:
11171 prefixes |= PREFIX_ES;
f16cd0d5 11172 last_seg_prefix = i;
285ca992 11173 active_seg_prefix = PREFIX_ES;
252b5132
RH
11174 break;
11175 case 0x64:
11176 prefixes |= PREFIX_FS;
f16cd0d5 11177 last_seg_prefix = i;
285ca992 11178 active_seg_prefix = PREFIX_FS;
252b5132
RH
11179 break;
11180 case 0x65:
11181 prefixes |= PREFIX_GS;
f16cd0d5 11182 last_seg_prefix = i;
285ca992 11183 active_seg_prefix = PREFIX_GS;
252b5132
RH
11184 break;
11185 case 0x66:
11186 prefixes |= PREFIX_DATA;
f16cd0d5 11187 last_data_prefix = i;
252b5132
RH
11188 break;
11189 case 0x67:
11190 prefixes |= PREFIX_ADDR;
f16cd0d5 11191 last_addr_prefix = i;
252b5132 11192 break;
5076851f 11193 case FWAIT_OPCODE:
252b5132
RH
11194 /* fwait is really an instruction. If there are prefixes
11195 before the fwait, they belong to the fwait, *not* to the
11196 following instruction. */
d9949a36 11197 fwait_prefix = i;
3e7d61b2 11198 if (prefixes || rex)
252b5132
RH
11199 {
11200 prefixes |= PREFIX_FWAIT;
11201 codep++;
6c067bbb
RM
11202 /* This ensures that the previous REX prefixes are noticed
11203 as unused prefixes, as in the return case below. */
11204 rex_used = rex;
f16cd0d5 11205 return 1;
252b5132
RH
11206 }
11207 prefixes = PREFIX_FWAIT;
11208 break;
11209 default:
f16cd0d5 11210 return 1;
252b5132 11211 }
52b15da3
JH
11212 /* Rex is ignored when followed by another prefix. */
11213 if (rex)
11214 {
3e7d61b2 11215 rex_used = rex;
f16cd0d5 11216 return 1;
52b15da3 11217 }
f16cd0d5 11218 if (*codep != FWAIT_OPCODE)
4e9ac44a 11219 all_prefixes[i++] = *codep;
52b15da3 11220 rex = newrex;
252b5132 11221 codep++;
f16cd0d5
L
11222 length++;
11223 }
11224 return 0;
11225}
11226
7d421014
ILT
11227/* Return the name of the prefix byte PREF, or NULL if PREF is not a
11228 prefix byte. */
11229
11230static const char *
26ca5450 11231prefix_name (int pref, int sizeflag)
7d421014 11232{
0003779b
L
11233 static const char *rexes [16] =
11234 {
11235 "rex", /* 0x40 */
11236 "rex.B", /* 0x41 */
11237 "rex.X", /* 0x42 */
11238 "rex.XB", /* 0x43 */
11239 "rex.R", /* 0x44 */
11240 "rex.RB", /* 0x45 */
11241 "rex.RX", /* 0x46 */
11242 "rex.RXB", /* 0x47 */
11243 "rex.W", /* 0x48 */
11244 "rex.WB", /* 0x49 */
11245 "rex.WX", /* 0x4a */
11246 "rex.WXB", /* 0x4b */
11247 "rex.WR", /* 0x4c */
11248 "rex.WRB", /* 0x4d */
11249 "rex.WRX", /* 0x4e */
11250 "rex.WRXB", /* 0x4f */
11251 };
11252
7d421014
ILT
11253 switch (pref)
11254 {
52b15da3
JH
11255 /* REX prefixes family. */
11256 case 0x40:
52b15da3 11257 case 0x41:
52b15da3 11258 case 0x42:
52b15da3 11259 case 0x43:
52b15da3 11260 case 0x44:
52b15da3 11261 case 0x45:
52b15da3 11262 case 0x46:
52b15da3 11263 case 0x47:
52b15da3 11264 case 0x48:
52b15da3 11265 case 0x49:
52b15da3 11266 case 0x4a:
52b15da3 11267 case 0x4b:
52b15da3 11268 case 0x4c:
52b15da3 11269 case 0x4d:
52b15da3 11270 case 0x4e:
52b15da3 11271 case 0x4f:
0003779b 11272 return rexes [pref - 0x40];
7d421014
ILT
11273 case 0xf3:
11274 return "repz";
11275 case 0xf2:
11276 return "repnz";
11277 case 0xf0:
11278 return "lock";
11279 case 0x2e:
11280 return "cs";
11281 case 0x36:
11282 return "ss";
11283 case 0x3e:
11284 return "ds";
11285 case 0x26:
11286 return "es";
11287 case 0x64:
11288 return "fs";
11289 case 0x65:
11290 return "gs";
11291 case 0x66:
11292 return (sizeflag & DFLAG) ? "data16" : "data32";
11293 case 0x67:
cb712a9e 11294 if (address_mode == mode_64bit)
db6eb5be 11295 return (sizeflag & AFLAG) ? "addr32" : "addr64";
c1a64871 11296 else
2888cb7a 11297 return (sizeflag & AFLAG) ? "addr16" : "addr32";
7d421014
ILT
11298 case FWAIT_OPCODE:
11299 return "fwait";
f16cd0d5
L
11300 case REP_PREFIX:
11301 return "rep";
42164a71
L
11302 case XACQUIRE_PREFIX:
11303 return "xacquire";
11304 case XRELEASE_PREFIX:
11305 return "xrelease";
7e8b059b
L
11306 case BND_PREFIX:
11307 return "bnd";
04ef582a
L
11308 case NOTRACK_PREFIX:
11309 return "notrack";
7d421014
ILT
11310 default:
11311 return NULL;
11312 }
11313}
11314
ce518a5f
L
11315static char op_out[MAX_OPERANDS][100];
11316static int op_ad, op_index[MAX_OPERANDS];
1d9f512f 11317static int two_source_ops;
ce518a5f
L
11318static bfd_vma op_address[MAX_OPERANDS];
11319static bfd_vma op_riprel[MAX_OPERANDS];
52b15da3 11320static bfd_vma start_pc;
ce518a5f 11321
252b5132
RH
11322/*
11323 * On the 386's of 1988, the maximum length of an instruction is 15 bytes.
11324 * (see topic "Redundant prefixes" in the "Differences from 8086"
11325 * section of the "Virtual 8086 Mode" chapter.)
11326 * 'pc' should be the address of this instruction, it will
11327 * be used to print the target address if this is a relative jump or call
11328 * The function returns the length of this instruction in bytes.
11329 */
11330
252b5132 11331static char intel_syntax;
9d141669 11332static char intel_mnemonic = !SYSV386_COMPAT;
252b5132
RH
11333static char open_char;
11334static char close_char;
11335static char separator_char;
11336static char scale_char;
11337
5db04b09
L
11338enum x86_64_isa
11339{
d835a58b 11340 amd64 = 1,
5db04b09
L
11341 intel64
11342};
11343
11344static enum x86_64_isa isa64;
11345
e396998b
AM
11346/* Here for backwards compatibility. When gdb stops using
11347 print_insn_i386_att and print_insn_i386_intel these functions can
11348 disappear, and print_insn_i386 be merged into print_insn. */
252b5132 11349int
26ca5450 11350print_insn_i386_att (bfd_vma pc, disassemble_info *info)
252b5132
RH
11351{
11352 intel_syntax = 0;
e396998b
AM
11353
11354 return print_insn (pc, info);
252b5132
RH
11355}
11356
11357int
26ca5450 11358print_insn_i386_intel (bfd_vma pc, disassemble_info *info)
252b5132
RH
11359{
11360 intel_syntax = 1;
e396998b
AM
11361
11362 return print_insn (pc, info);
252b5132
RH
11363}
11364
e396998b 11365int
26ca5450 11366print_insn_i386 (bfd_vma pc, disassemble_info *info)
e396998b
AM
11367{
11368 intel_syntax = -1;
11369
11370 return print_insn (pc, info);
11371}
11372
f59a29b9
L
11373void
11374print_i386_disassembler_options (FILE *stream)
11375{
11376 fprintf (stream, _("\n\
11377The following i386/x86-64 specific disassembler options are supported for use\n\
11378with the -M switch (multiple options should be separated by commas):\n"));
11379
11380 fprintf (stream, _(" x86-64 Disassemble in 64bit mode\n"));
11381 fprintf (stream, _(" i386 Disassemble in 32bit mode\n"));
11382 fprintf (stream, _(" i8086 Disassemble in 16bit mode\n"));
11383 fprintf (stream, _(" att Display instruction in AT&T syntax\n"));
11384 fprintf (stream, _(" intel Display instruction in Intel syntax\n"));
9d141669
L
11385 fprintf (stream, _(" att-mnemonic\n"
11386 " Display instruction in AT&T mnemonic\n"));
11387 fprintf (stream, _(" intel-mnemonic\n"
11388 " Display instruction in Intel mnemonic\n"));
f59a29b9
L
11389 fprintf (stream, _(" addr64 Assume 64bit address size\n"));
11390 fprintf (stream, _(" addr32 Assume 32bit address size\n"));
11391 fprintf (stream, _(" addr16 Assume 16bit address size\n"));
11392 fprintf (stream, _(" data32 Assume 32bit data size\n"));
11393 fprintf (stream, _(" data16 Assume 16bit data size\n"));
11394 fprintf (stream, _(" suffix Always display instruction suffix in AT&T syntax\n"));
5db04b09
L
11395 fprintf (stream, _(" amd64 Display instruction in AMD64 ISA\n"));
11396 fprintf (stream, _(" intel64 Display instruction in Intel64 ISA\n"));
f59a29b9
L
11397}
11398
592d1631 11399/* Bad opcode. */
bf890a93 11400static const struct dis386 bad_opcode = { "(bad)", { XX }, 0 };
592d1631 11401
b844680a
L
11402/* Get a pointer to struct dis386 with a valid name. */
11403
11404static const struct dis386 *
8bb15339 11405get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
b844680a 11406{
91d6fa6a 11407 int vindex, vex_table_index;
b844680a
L
11408
11409 if (dp->name != NULL)
11410 return dp;
11411
11412 switch (dp->op[0].bytemode)
11413 {
1ceb70f8
L
11414 case USE_REG_TABLE:
11415 dp = &reg_table[dp->op[1].bytemode][modrm.reg];
11416 break;
11417
11418 case USE_MOD_TABLE:
91d6fa6a
NC
11419 vindex = modrm.mod == 0x3 ? 1 : 0;
11420 dp = &mod_table[dp->op[1].bytemode][vindex];
1ceb70f8
L
11421 break;
11422
11423 case USE_RM_TABLE:
11424 dp = &rm_table[dp->op[1].bytemode][modrm.rm];
b844680a
L
11425 break;
11426
4e7d34a6 11427 case USE_PREFIX_TABLE:
c0f3af97 11428 if (need_vex)
b844680a 11429 {
c0f3af97
L
11430 /* The prefix in VEX is implicit. */
11431 switch (vex.prefix)
11432 {
11433 case 0:
91d6fa6a 11434 vindex = 0;
c0f3af97
L
11435 break;
11436 case REPE_PREFIX_OPCODE:
91d6fa6a 11437 vindex = 1;
c0f3af97
L
11438 break;
11439 case DATA_PREFIX_OPCODE:
91d6fa6a 11440 vindex = 2;
c0f3af97
L
11441 break;
11442 case REPNE_PREFIX_OPCODE:
91d6fa6a 11443 vindex = 3;
c0f3af97
L
11444 break;
11445 default:
11446 abort ();
11447 break;
11448 }
b844680a 11449 }
7bb15c6f 11450 else
b844680a 11451 {
285ca992
L
11452 int last_prefix = -1;
11453 int prefix = 0;
91d6fa6a 11454 vindex = 0;
285ca992
L
11455 /* We check PREFIX_REPNZ and PREFIX_REPZ before PREFIX_DATA.
11456 When there are multiple PREFIX_REPNZ and PREFIX_REPZ, the
11457 last one wins. */
11458 if ((prefixes & (PREFIX_REPZ | PREFIX_REPNZ)) != 0)
b844680a 11459 {
285ca992 11460 if (last_repz_prefix > last_repnz_prefix)
c0f3af97 11461 {
285ca992
L
11462 vindex = 1;
11463 prefix = PREFIX_REPZ;
11464 last_prefix = last_repz_prefix;
c0f3af97
L
11465 }
11466 else
b844680a 11467 {
285ca992
L
11468 vindex = 3;
11469 prefix = PREFIX_REPNZ;
11470 last_prefix = last_repnz_prefix;
b844680a 11471 }
285ca992 11472
507bd325
L
11473 /* Check if prefix should be ignored. */
11474 if ((((prefix_table[dp->op[1].bytemode][vindex].prefix_requirement
11475 & PREFIX_IGNORED) >> PREFIX_IGNORED_SHIFT)
11476 & prefix) != 0)
285ca992
L
11477 vindex = 0;
11478 }
11479
11480 if (vindex == 0 && (prefixes & PREFIX_DATA) != 0)
11481 {
11482 vindex = 2;
11483 prefix = PREFIX_DATA;
11484 last_prefix = last_data_prefix;
11485 }
11486
11487 if (vindex != 0)
11488 {
11489 used_prefixes |= prefix;
11490 all_prefixes[last_prefix] = 0;
b844680a
L
11491 }
11492 }
91d6fa6a 11493 dp = &prefix_table[dp->op[1].bytemode][vindex];
b844680a
L
11494 break;
11495
4e7d34a6 11496 case USE_X86_64_TABLE:
91d6fa6a
NC
11497 vindex = address_mode == mode_64bit ? 1 : 0;
11498 dp = &x86_64_table[dp->op[1].bytemode][vindex];
b844680a
L
11499 break;
11500
4e7d34a6 11501 case USE_3BYTE_TABLE:
8bb15339 11502 FETCH_DATA (info, codep + 2);
91d6fa6a
NC
11503 vindex = *codep++;
11504 dp = &three_byte_table[dp->op[1].bytemode][vindex];
285ca992 11505 end_codep = codep;
8bb15339
L
11506 modrm.mod = (*codep >> 6) & 3;
11507 modrm.reg = (*codep >> 3) & 7;
11508 modrm.rm = *codep & 7;
11509 break;
11510
c0f3af97
L
11511 case USE_VEX_LEN_TABLE:
11512 if (!need_vex)
11513 abort ();
11514
11515 switch (vex.length)
11516 {
11517 case 128:
91d6fa6a 11518 vindex = 0;
c0f3af97
L
11519 break;
11520 case 256:
91d6fa6a 11521 vindex = 1;
c0f3af97
L
11522 break;
11523 default:
11524 abort ();
11525 break;
11526 }
11527
91d6fa6a 11528 dp = &vex_len_table[dp->op[1].bytemode][vindex];
c0f3af97
L
11529 break;
11530
04e2a182
L
11531 case USE_EVEX_LEN_TABLE:
11532 if (!vex.evex)
11533 abort ();
11534
11535 switch (vex.length)
11536 {
11537 case 128:
11538 vindex = 0;
11539 break;
11540 case 256:
11541 vindex = 1;
11542 break;
11543 case 512:
11544 vindex = 2;
11545 break;
11546 default:
11547 abort ();
11548 break;
11549 }
11550
11551 dp = &evex_len_table[dp->op[1].bytemode][vindex];
11552 break;
11553
f88c9eb0
SP
11554 case USE_XOP_8F_TABLE:
11555 FETCH_DATA (info, codep + 3);
11556 /* All bits in the REX prefix are ignored. */
11557 rex_ignored = rex;
11558 rex = ~(*codep >> 5) & 0x7;
11559
11560 /* VEX_TABLE_INDEX is the mmmmm part of the XOP byte 1 "RCB.mmmmm". */
11561 switch ((*codep & 0x1f))
11562 {
11563 default:
f07af43e
L
11564 dp = &bad_opcode;
11565 return dp;
5dd85c99
SP
11566 case 0x8:
11567 vex_table_index = XOP_08;
11568 break;
f88c9eb0
SP
11569 case 0x9:
11570 vex_table_index = XOP_09;
11571 break;
11572 case 0xa:
11573 vex_table_index = XOP_0A;
11574 break;
11575 }
11576 codep++;
11577 vex.w = *codep & 0x80;
11578 if (vex.w && address_mode == mode_64bit)
11579 rex |= REX_W;
11580
11581 vex.register_specifier = (~(*codep >> 3)) & 0xf;
abfcb414 11582 if (address_mode != mode_64bit)
f07af43e 11583 {
abfcb414
AP
11584 /* In 16/32-bit mode REX_B is silently ignored. */
11585 rex &= ~REX_B;
f07af43e 11586 }
f88c9eb0
SP
11587
11588 vex.length = (*codep & 0x4) ? 256 : 128;
11589 switch ((*codep & 0x3))
11590 {
11591 case 0:
f88c9eb0
SP
11592 break;
11593 case 1:
11594 vex.prefix = DATA_PREFIX_OPCODE;
11595 break;
11596 case 2:
11597 vex.prefix = REPE_PREFIX_OPCODE;
11598 break;
11599 case 3:
11600 vex.prefix = REPNE_PREFIX_OPCODE;
11601 break;
11602 }
11603 need_vex = 1;
11604 need_vex_reg = 1;
11605 codep++;
91d6fa6a
NC
11606 vindex = *codep++;
11607 dp = &xop_table[vex_table_index][vindex];
c48244a5 11608
285ca992 11609 end_codep = codep;
c48244a5
SP
11610 FETCH_DATA (info, codep + 1);
11611 modrm.mod = (*codep >> 6) & 3;
11612 modrm.reg = (*codep >> 3) & 7;
11613 modrm.rm = *codep & 7;
f88c9eb0
SP
11614 break;
11615
c0f3af97 11616 case USE_VEX_C4_TABLE:
43234a1e 11617 /* VEX prefix. */
c0f3af97
L
11618 FETCH_DATA (info, codep + 3);
11619 /* All bits in the REX prefix are ignored. */
11620 rex_ignored = rex;
11621 rex = ~(*codep >> 5) & 0x7;
11622 switch ((*codep & 0x1f))
11623 {
11624 default:
f07af43e
L
11625 dp = &bad_opcode;
11626 return dp;
c0f3af97 11627 case 0x1:
f88c9eb0 11628 vex_table_index = VEX_0F;
c0f3af97
L
11629 break;
11630 case 0x2:
f88c9eb0 11631 vex_table_index = VEX_0F38;
c0f3af97
L
11632 break;
11633 case 0x3:
f88c9eb0 11634 vex_table_index = VEX_0F3A;
c0f3af97
L
11635 break;
11636 }
11637 codep++;
11638 vex.w = *codep & 0x80;
9889cbb1 11639 if (address_mode == mode_64bit)
f07af43e 11640 {
9889cbb1
L
11641 if (vex.w)
11642 rex |= REX_W;
9889cbb1
L
11643 }
11644 else
11645 {
11646 /* For the 3-byte VEX prefix in 32-bit mode, the REX_B bit
11647 is ignored, other REX bits are 0 and the highest bit in
5f847646 11648 VEX.vvvv is also ignored (but we mustn't clear it here). */
9889cbb1 11649 rex = 0;
f07af43e 11650 }
5f847646 11651 vex.register_specifier = (~(*codep >> 3)) & 0xf;
c0f3af97
L
11652 vex.length = (*codep & 0x4) ? 256 : 128;
11653 switch ((*codep & 0x3))
11654 {
11655 case 0:
c0f3af97
L
11656 break;
11657 case 1:
11658 vex.prefix = DATA_PREFIX_OPCODE;
11659 break;
11660 case 2:
11661 vex.prefix = REPE_PREFIX_OPCODE;
11662 break;
11663 case 3:
11664 vex.prefix = REPNE_PREFIX_OPCODE;
11665 break;
11666 }
11667 need_vex = 1;
11668 need_vex_reg = 1;
11669 codep++;
91d6fa6a
NC
11670 vindex = *codep++;
11671 dp = &vex_table[vex_table_index][vindex];
285ca992 11672 end_codep = codep;
53c4d625
JB
11673 /* There is no MODRM byte for VEX0F 77. */
11674 if (vex_table_index != VEX_0F || vindex != 0x77)
c0f3af97
L
11675 {
11676 FETCH_DATA (info, codep + 1);
11677 modrm.mod = (*codep >> 6) & 3;
11678 modrm.reg = (*codep >> 3) & 7;
11679 modrm.rm = *codep & 7;
11680 }
11681 break;
11682
11683 case USE_VEX_C5_TABLE:
43234a1e 11684 /* VEX prefix. */
c0f3af97
L
11685 FETCH_DATA (info, codep + 2);
11686 /* All bits in the REX prefix are ignored. */
11687 rex_ignored = rex;
11688 rex = (*codep & 0x80) ? 0 : REX_R;
11689
9889cbb1
L
11690 /* For the 2-byte VEX prefix in 32-bit mode, the highest bit in
11691 VEX.vvvv is 1. */
c0f3af97 11692 vex.register_specifier = (~(*codep >> 3)) & 0xf;
c0f3af97
L
11693 vex.length = (*codep & 0x4) ? 256 : 128;
11694 switch ((*codep & 0x3))
11695 {
11696 case 0:
c0f3af97
L
11697 break;
11698 case 1:
11699 vex.prefix = DATA_PREFIX_OPCODE;
11700 break;
11701 case 2:
11702 vex.prefix = REPE_PREFIX_OPCODE;
11703 break;
11704 case 3:
11705 vex.prefix = REPNE_PREFIX_OPCODE;
11706 break;
11707 }
11708 need_vex = 1;
11709 need_vex_reg = 1;
11710 codep++;
91d6fa6a
NC
11711 vindex = *codep++;
11712 dp = &vex_table[dp->op[1].bytemode][vindex];
285ca992 11713 end_codep = codep;
53c4d625
JB
11714 /* There is no MODRM byte for VEX 77. */
11715 if (vindex != 0x77)
c0f3af97
L
11716 {
11717 FETCH_DATA (info, codep + 1);
11718 modrm.mod = (*codep >> 6) & 3;
11719 modrm.reg = (*codep >> 3) & 7;
11720 modrm.rm = *codep & 7;
11721 }
11722 break;
11723
9e30b8e0
L
11724 case USE_VEX_W_TABLE:
11725 if (!need_vex)
11726 abort ();
11727
11728 dp = &vex_w_table[dp->op[1].bytemode][vex.w ? 1 : 0];
11729 break;
11730
43234a1e
L
11731 case USE_EVEX_TABLE:
11732 two_source_ops = 0;
11733 /* EVEX prefix. */
11734 vex.evex = 1;
11735 FETCH_DATA (info, codep + 4);
11736 /* All bits in the REX prefix are ignored. */
11737 rex_ignored = rex;
11738 /* The first byte after 0x62. */
11739 rex = ~(*codep >> 5) & 0x7;
11740 vex.r = *codep & 0x10;
11741 switch ((*codep & 0xf))
11742 {
11743 default:
11744 return &bad_opcode;
11745 case 0x1:
11746 vex_table_index = EVEX_0F;
11747 break;
11748 case 0x2:
11749 vex_table_index = EVEX_0F38;
11750 break;
11751 case 0x3:
11752 vex_table_index = EVEX_0F3A;
11753 break;
11754 }
11755
11756 /* The second byte after 0x62. */
11757 codep++;
11758 vex.w = *codep & 0x80;
11759 if (vex.w && address_mode == mode_64bit)
11760 rex |= REX_W;
11761
11762 vex.register_specifier = (~(*codep >> 3)) & 0xf;
43234a1e
L
11763
11764 /* The U bit. */
11765 if (!(*codep & 0x4))
11766 return &bad_opcode;
11767
11768 switch ((*codep & 0x3))
11769 {
11770 case 0:
43234a1e
L
11771 break;
11772 case 1:
11773 vex.prefix = DATA_PREFIX_OPCODE;
11774 break;
11775 case 2:
11776 vex.prefix = REPE_PREFIX_OPCODE;
11777 break;
11778 case 3:
11779 vex.prefix = REPNE_PREFIX_OPCODE;
11780 break;
11781 }
11782
11783 /* The third byte after 0x62. */
11784 codep++;
11785
11786 /* Remember the static rounding bits. */
11787 vex.ll = (*codep >> 5) & 3;
11788 vex.b = (*codep & 0x10) != 0;
11789
11790 vex.v = *codep & 0x8;
11791 vex.mask_register_specifier = *codep & 0x7;
11792 vex.zeroing = *codep & 0x80;
11793
5f847646
JB
11794 if (address_mode != mode_64bit)
11795 {
11796 /* In 16/32-bit mode silently ignore following bits. */
11797 rex &= ~REX_B;
11798 vex.r = 1;
11799 vex.v = 1;
11800 }
11801
43234a1e
L
11802 need_vex = 1;
11803 need_vex_reg = 1;
11804 codep++;
11805 vindex = *codep++;
11806 dp = &evex_table[vex_table_index][vindex];
285ca992 11807 end_codep = codep;
43234a1e
L
11808 FETCH_DATA (info, codep + 1);
11809 modrm.mod = (*codep >> 6) & 3;
11810 modrm.reg = (*codep >> 3) & 7;
11811 modrm.rm = *codep & 7;
11812
11813 /* Set vector length. */
11814 if (modrm.mod == 3 && vex.b)
11815 vex.length = 512;
11816 else
11817 {
11818 switch (vex.ll)
11819 {
11820 case 0x0:
11821 vex.length = 128;
11822 break;
11823 case 0x1:
11824 vex.length = 256;
11825 break;
11826 case 0x2:
11827 vex.length = 512;
11828 break;
11829 default:
11830 return &bad_opcode;
11831 }
11832 }
11833 break;
11834
592d1631
L
11835 case 0:
11836 dp = &bad_opcode;
11837 break;
11838
b844680a 11839 default:
d34b5006 11840 abort ();
b844680a
L
11841 }
11842
11843 if (dp->name != NULL)
11844 return dp;
11845 else
8bb15339 11846 return get_valid_dis386 (dp, info);
b844680a
L
11847}
11848
dfc8cf43 11849static void
55cf16e1 11850get_sib (disassemble_info *info, int sizeflag)
dfc8cf43
L
11851{
11852 /* If modrm.mod == 3, operand must be register. */
11853 if (need_modrm
55cf16e1 11854 && ((sizeflag & AFLAG) || address_mode == mode_64bit)
dfc8cf43
L
11855 && modrm.mod != 3
11856 && modrm.rm == 4)
11857 {
11858 FETCH_DATA (info, codep + 2);
11859 sib.index = (codep [1] >> 3) & 7;
11860 sib.scale = (codep [1] >> 6) & 3;
11861 sib.base = codep [1] & 7;
11862 }
11863}
11864
e396998b 11865static int
26ca5450 11866print_insn (bfd_vma pc, disassemble_info *info)
252b5132 11867{
2da11e11 11868 const struct dis386 *dp;
252b5132 11869 int i;
ce518a5f 11870 char *op_txt[MAX_OPERANDS];
252b5132 11871 int needcomma;
df18fdba 11872 int sizeflag, orig_sizeflag;
e396998b 11873 const char *p;
252b5132 11874 struct dis_private priv;
f16cd0d5 11875 int prefix_length;
252b5132 11876
d7921315
L
11877 priv.orig_sizeflag = AFLAG | DFLAG;
11878 if ((info->mach & bfd_mach_i386_i386) != 0)
cb712a9e 11879 address_mode = mode_32bit;
2da11e11 11880 else if (info->mach == bfd_mach_i386_i8086)
d7921315
L
11881 {
11882 address_mode = mode_16bit;
11883 priv.orig_sizeflag = 0;
11884 }
2da11e11 11885 else
d7921315
L
11886 address_mode = mode_64bit;
11887
11888 if (intel_syntax == (char) -1)
11889 intel_syntax = (info->mach & bfd_mach_i386_intel_syntax) != 0;
e396998b
AM
11890
11891 for (p = info->disassembler_options; p != NULL; )
11892 {
5db04b09
L
11893 if (CONST_STRNEQ (p, "amd64"))
11894 isa64 = amd64;
11895 else if (CONST_STRNEQ (p, "intel64"))
11896 isa64 = intel64;
11897 else if (CONST_STRNEQ (p, "x86-64"))
e396998b 11898 {
cb712a9e 11899 address_mode = mode_64bit;
e396998b
AM
11900 priv.orig_sizeflag = AFLAG | DFLAG;
11901 }
0112cd26 11902 else if (CONST_STRNEQ (p, "i386"))
e396998b 11903 {
cb712a9e 11904 address_mode = mode_32bit;
e396998b
AM
11905 priv.orig_sizeflag = AFLAG | DFLAG;
11906 }
0112cd26 11907 else if (CONST_STRNEQ (p, "i8086"))
e396998b 11908 {
cb712a9e 11909 address_mode = mode_16bit;
e396998b
AM
11910 priv.orig_sizeflag = 0;
11911 }
0112cd26 11912 else if (CONST_STRNEQ (p, "intel"))
e396998b
AM
11913 {
11914 intel_syntax = 1;
9d141669
L
11915 if (CONST_STRNEQ (p + 5, "-mnemonic"))
11916 intel_mnemonic = 1;
e396998b 11917 }
0112cd26 11918 else if (CONST_STRNEQ (p, "att"))
e396998b
AM
11919 {
11920 intel_syntax = 0;
9d141669
L
11921 if (CONST_STRNEQ (p + 3, "-mnemonic"))
11922 intel_mnemonic = 0;
e396998b 11923 }
0112cd26 11924 else if (CONST_STRNEQ (p, "addr"))
e396998b 11925 {
f59a29b9
L
11926 if (address_mode == mode_64bit)
11927 {
11928 if (p[4] == '3' && p[5] == '2')
11929 priv.orig_sizeflag &= ~AFLAG;
11930 else if (p[4] == '6' && p[5] == '4')
11931 priv.orig_sizeflag |= AFLAG;
11932 }
11933 else
11934 {
11935 if (p[4] == '1' && p[5] == '6')
11936 priv.orig_sizeflag &= ~AFLAG;
11937 else if (p[4] == '3' && p[5] == '2')
11938 priv.orig_sizeflag |= AFLAG;
11939 }
e396998b 11940 }
0112cd26 11941 else if (CONST_STRNEQ (p, "data"))
e396998b
AM
11942 {
11943 if (p[4] == '1' && p[5] == '6')
11944 priv.orig_sizeflag &= ~DFLAG;
11945 else if (p[4] == '3' && p[5] == '2')
11946 priv.orig_sizeflag |= DFLAG;
11947 }
0112cd26 11948 else if (CONST_STRNEQ (p, "suffix"))
e396998b
AM
11949 priv.orig_sizeflag |= SUFFIX_ALWAYS;
11950
11951 p = strchr (p, ',');
11952 if (p != NULL)
11953 p++;
11954 }
11955
c0f92bf9
L
11956 if (address_mode == mode_64bit && sizeof (bfd_vma) < 8)
11957 {
11958 (*info->fprintf_func) (info->stream,
11959 _("64-bit address is disabled"));
11960 return -1;
11961 }
11962
e396998b
AM
11963 if (intel_syntax)
11964 {
11965 names64 = intel_names64;
11966 names32 = intel_names32;
11967 names16 = intel_names16;
11968 names8 = intel_names8;
11969 names8rex = intel_names8rex;
11970 names_seg = intel_names_seg;
b9733481 11971 names_mm = intel_names_mm;
7e8b059b 11972 names_bnd = intel_names_bnd;
b9733481
L
11973 names_xmm = intel_names_xmm;
11974 names_ymm = intel_names_ymm;
43234a1e 11975 names_zmm = intel_names_zmm;
db51cc60
L
11976 index64 = intel_index64;
11977 index32 = intel_index32;
43234a1e 11978 names_mask = intel_names_mask;
e396998b
AM
11979 index16 = intel_index16;
11980 open_char = '[';
11981 close_char = ']';
11982 separator_char = '+';
11983 scale_char = '*';
11984 }
11985 else
11986 {
11987 names64 = att_names64;
11988 names32 = att_names32;
11989 names16 = att_names16;
11990 names8 = att_names8;
11991 names8rex = att_names8rex;
11992 names_seg = att_names_seg;
b9733481 11993 names_mm = att_names_mm;
7e8b059b 11994 names_bnd = att_names_bnd;
b9733481
L
11995 names_xmm = att_names_xmm;
11996 names_ymm = att_names_ymm;
43234a1e 11997 names_zmm = att_names_zmm;
db51cc60
L
11998 index64 = att_index64;
11999 index32 = att_index32;
43234a1e 12000 names_mask = att_names_mask;
e396998b
AM
12001 index16 = att_index16;
12002 open_char = '(';
12003 close_char = ')';
12004 separator_char = ',';
12005 scale_char = ',';
12006 }
2da11e11 12007
4fe53c98 12008 /* The output looks better if we put 7 bytes on a line, since that
8a9036a4
L
12009 puts most long word instructions on a single line. Use 8 bytes
12010 for Intel L1OM. */
d7921315 12011 if ((info->mach & bfd_mach_l1om) != 0)
8a9036a4
L
12012 info->bytes_per_line = 8;
12013 else
12014 info->bytes_per_line = 7;
252b5132 12015
26ca5450 12016 info->private_data = &priv;
252b5132
RH
12017 priv.max_fetched = priv.the_buffer;
12018 priv.insn_start = pc;
252b5132
RH
12019
12020 obuf[0] = 0;
ce518a5f
L
12021 for (i = 0; i < MAX_OPERANDS; ++i)
12022 {
12023 op_out[i][0] = 0;
12024 op_index[i] = -1;
12025 }
252b5132
RH
12026
12027 the_info = info;
12028 start_pc = pc;
e396998b
AM
12029 start_codep = priv.the_buffer;
12030 codep = priv.the_buffer;
252b5132 12031
8df14d78 12032 if (OPCODES_SIGSETJMP (priv.bailout) != 0)
5076851f 12033 {
7d421014
ILT
12034 const char *name;
12035
5076851f 12036 /* Getting here means we tried for data but didn't get it. That
e396998b
AM
12037 means we have an incomplete instruction of some sort. Just
12038 print the first byte as a prefix or a .byte pseudo-op. */
12039 if (codep > priv.the_buffer)
5076851f 12040 {
e396998b 12041 name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
7d421014
ILT
12042 if (name != NULL)
12043 (*info->fprintf_func) (info->stream, "%s", name);
12044 else
5076851f 12045 {
7d421014
ILT
12046 /* Just print the first byte as a .byte instruction. */
12047 (*info->fprintf_func) (info->stream, ".byte 0x%x",
e396998b 12048 (unsigned int) priv.the_buffer[0]);
5076851f 12049 }
5076851f 12050
7d421014 12051 return 1;
5076851f
ILT
12052 }
12053
12054 return -1;
12055 }
12056
52b15da3 12057 obufp = obuf;
f16cd0d5
L
12058 sizeflag = priv.orig_sizeflag;
12059
12060 if (!ckprefix () || rex_used)
12061 {
12062 /* Too many prefixes or unused REX prefixes. */
12063 for (i = 0;
f6dd4781 12064 i < (int) ARRAY_SIZE (all_prefixes) && all_prefixes[i];
f16cd0d5 12065 i++)
de882298 12066 (*info->fprintf_func) (info->stream, "%s%s",
6c067bbb 12067 i == 0 ? "" : " ",
f16cd0d5 12068 prefix_name (all_prefixes[i], sizeflag));
de882298 12069 return i;
f16cd0d5 12070 }
252b5132
RH
12071
12072 insn_codep = codep;
12073
12074 FETCH_DATA (info, codep + 1);
12075 two_source_ops = (*codep == 0x62) || (*codep == 0xc8);
12076
3e7d61b2 12077 if (((prefixes & PREFIX_FWAIT)
f16cd0d5 12078 && ((*codep < 0xd8) || (*codep > 0xdf))))
252b5132 12079 {
86a80a50 12080 /* Handle prefixes before fwait. */
d9949a36 12081 for (i = 0; i < fwait_prefix && all_prefixes[i];
86a80a50
L
12082 i++)
12083 (*info->fprintf_func) (info->stream, "%s ",
12084 prefix_name (all_prefixes[i], sizeflag));
f16cd0d5 12085 (*info->fprintf_func) (info->stream, "fwait");
86a80a50 12086 return i + 1;
252b5132
RH
12087 }
12088
252b5132
RH
12089 if (*codep == 0x0f)
12090 {
eec0f4ca 12091 unsigned char threebyte;
5f40e14d
JS
12092
12093 codep++;
12094 FETCH_DATA (info, codep + 1);
12095 threebyte = *codep;
eec0f4ca 12096 dp = &dis386_twobyte[threebyte];
252b5132 12097 need_modrm = twobyte_has_modrm[*codep];
eec0f4ca 12098 codep++;
252b5132
RH
12099 }
12100 else
12101 {
6439fc28 12102 dp = &dis386[*codep];
252b5132 12103 need_modrm = onebyte_has_modrm[*codep];
eec0f4ca 12104 codep++;
252b5132 12105 }
246c51aa 12106
df18fdba
L
12107 /* Save sizeflag for printing the extra prefixes later before updating
12108 it for mnemonic and operand processing. The prefix names depend
12109 only on the address mode. */
12110 orig_sizeflag = sizeflag;
c608c12e 12111 if (prefixes & PREFIX_ADDR)
df18fdba 12112 sizeflag ^= AFLAG;
b844680a 12113 if ((prefixes & PREFIX_DATA))
df18fdba 12114 sizeflag ^= DFLAG;
3ffd33cf 12115
285ca992 12116 end_codep = codep;
8bb15339 12117 if (need_modrm)
252b5132
RH
12118 {
12119 FETCH_DATA (info, codep + 1);
7967e09e
L
12120 modrm.mod = (*codep >> 6) & 3;
12121 modrm.reg = (*codep >> 3) & 7;
12122 modrm.rm = *codep & 7;
252b5132
RH
12123 }
12124
42d5f9c6
MS
12125 need_vex = 0;
12126 need_vex_reg = 0;
12127 vex_w_done = 0;
caf0678c 12128 memset (&vex, 0, sizeof (vex));
55b126d4 12129
ce518a5f 12130 if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE)
252b5132 12131 {
55cf16e1 12132 get_sib (info, sizeflag);
252b5132
RH
12133 dofloat (sizeflag);
12134 }
12135 else
12136 {
8bb15339 12137 dp = get_valid_dis386 (dp, info);
b844680a 12138 if (dp != NULL && putop (dp->name, sizeflag) == 0)
6c067bbb 12139 {
55cf16e1 12140 get_sib (info, sizeflag);
ce518a5f
L
12141 for (i = 0; i < MAX_OPERANDS; ++i)
12142 {
246c51aa 12143 obufp = op_out[i];
ce518a5f
L
12144 op_ad = MAX_OPERANDS - 1 - i;
12145 if (dp->op[i].rtn)
12146 (*dp->op[i].rtn) (dp->op[i].bytemode, sizeflag);
43234a1e
L
12147 /* For EVEX instruction after the last operand masking
12148 should be printed. */
12149 if (i == 0 && vex.evex)
12150 {
12151 /* Don't print {%k0}. */
12152 if (vex.mask_register_specifier)
12153 {
12154 oappend ("{");
12155 oappend (names_mask[vex.mask_register_specifier]);
12156 oappend ("}");
12157 }
12158 if (vex.zeroing)
12159 oappend ("{z}");
12160 }
ce518a5f 12161 }
6439fc28 12162 }
252b5132
RH
12163 }
12164
1d67fe3b
TT
12165 /* Clear instruction information. */
12166 if (the_info)
12167 {
12168 the_info->insn_info_valid = 0;
12169 the_info->branch_delay_insns = 0;
12170 the_info->data_size = 0;
12171 the_info->insn_type = dis_noninsn;
12172 the_info->target = 0;
12173 the_info->target2 = 0;
12174 }
12175
12176 /* Reset jump operation indicator. */
12177 op_is_jump = FALSE;
12178
12179 {
12180 int jump_detection = 0;
12181
12182 /* Extract flags. */
12183 for (i = 0; i < MAX_OPERANDS; ++i)
12184 {
12185 if ((dp->op[i].rtn == OP_J)
12186 || (dp->op[i].rtn == OP_indirE))
12187 jump_detection |= 1;
12188 else if ((dp->op[i].rtn == BND_Fixup)
12189 || (!dp->op[i].rtn && !dp->op[i].bytemode))
12190 jump_detection |= 2;
12191 else if ((dp->op[i].bytemode == cond_jump_mode)
12192 || (dp->op[i].bytemode == loop_jcxz_mode))
12193 jump_detection |= 4;
12194 }
12195
12196 /* Determine if this is a jump or branch. */
12197 if ((jump_detection & 0x3) == 0x3)
12198 {
12199 op_is_jump = TRUE;
12200 if (jump_detection & 0x4)
12201 the_info->insn_type = dis_condbranch;
12202 else
12203 the_info->insn_type =
12204 (dp->name && !strncmp(dp->name, "call", 4))
12205 ? dis_jsr : dis_branch;
12206 }
12207 }
12208
63c6fc6c
L
12209 /* If VEX.vvvv and EVEX.vvvv are unused, they must be all 1s, which
12210 are all 0s in inverted form. */
12211 if (need_vex && vex.register_specifier != 0)
12212 {
12213 (*info->fprintf_func) (info->stream, "(bad)");
12214 return end_codep - priv.the_buffer;
12215 }
12216
d869730d 12217 /* Check if the REX prefix is used. */
e2e6193d 12218 if (rex_ignored == 0 && (rex ^ rex_used) == 0 && last_rex_prefix >= 0)
f16cd0d5
L
12219 all_prefixes[last_rex_prefix] = 0;
12220
5e6718e4 12221 /* Check if the SEG prefix is used. */
f16cd0d5
L
12222 if ((prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS | PREFIX_ES
12223 | PREFIX_FS | PREFIX_GS)) != 0
285ca992 12224 && (used_prefixes & active_seg_prefix) != 0)
f16cd0d5
L
12225 all_prefixes[last_seg_prefix] = 0;
12226
5e6718e4 12227 /* Check if the ADDR prefix is used. */
f16cd0d5
L
12228 if ((prefixes & PREFIX_ADDR) != 0
12229 && (used_prefixes & PREFIX_ADDR) != 0)
12230 all_prefixes[last_addr_prefix] = 0;
12231
df18fdba
L
12232 /* Check if the DATA prefix is used. */
12233 if ((prefixes & PREFIX_DATA) != 0
12234 && (used_prefixes & PREFIX_DATA) != 0)
12235 all_prefixes[last_data_prefix] = 0;
f16cd0d5 12236
df18fdba 12237 /* Print the extra prefixes. */
f16cd0d5 12238 prefix_length = 0;
f310f33d 12239 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
f16cd0d5
L
12240 if (all_prefixes[i])
12241 {
12242 const char *name;
df18fdba 12243 name = prefix_name (all_prefixes[i], orig_sizeflag);
f16cd0d5
L
12244 if (name == NULL)
12245 abort ();
12246 prefix_length += strlen (name) + 1;
12247 (*info->fprintf_func) (info->stream, "%s ", name);
12248 }
b844680a 12249
285ca992
L
12250 /* If the mandatory PREFIX_REPZ/PREFIX_REPNZ/PREFIX_DATA prefix is
12251 unused, opcode is invalid. Since the PREFIX_DATA prefix may be
12252 used by putop and MMX/SSE operand and may be overriden by the
12253 PREFIX_REPZ/PREFIX_REPNZ fix, we check the PREFIX_DATA prefix
12254 separately. */
3888916d 12255 if (dp->prefix_requirement == PREFIX_OPCODE
285ca992
L
12256 && dp != &bad_opcode
12257 && (((prefixes
12258 & (PREFIX_REPZ | PREFIX_REPNZ)) != 0
12259 && (used_prefixes
12260 & (PREFIX_REPZ | PREFIX_REPNZ)) == 0)
12261 || ((((prefixes
12262 & (PREFIX_REPZ | PREFIX_REPNZ | PREFIX_DATA))
12263 == PREFIX_DATA)
12264 && (used_prefixes & PREFIX_DATA) == 0))))
12265 {
12266 (*info->fprintf_func) (info->stream, "(bad)");
12267 return end_codep - priv.the_buffer;
12268 }
12269
f16cd0d5
L
12270 /* Check maximum code length. */
12271 if ((codep - start_codep) > MAX_CODE_LENGTH)
12272 {
12273 (*info->fprintf_func) (info->stream, "(bad)");
12274 return MAX_CODE_LENGTH;
12275 }
b844680a 12276
ea397f5b 12277 obufp = mnemonicendp;
f16cd0d5 12278 for (i = strlen (obuf) + prefix_length; i < 6; i++)
252b5132
RH
12279 oappend (" ");
12280 oappend (" ");
12281 (*info->fprintf_func) (info->stream, "%s", obuf);
12282
12283 /* The enter and bound instructions are printed with operands in the same
12284 order as the intel book; everything else is printed in reverse order. */
2da11e11 12285 if (intel_syntax || two_source_ops)
252b5132 12286 {
185b1163
L
12287 bfd_vma riprel;
12288
ce518a5f 12289 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 12290 op_txt[i] = op_out[i];
246c51aa 12291
3a8547d2
JB
12292 if (intel_syntax && dp && dp->op[2].rtn == OP_Rounding
12293 && dp->op[3].rtn == OP_E && dp->op[4].rtn == NULL)
12294 {
12295 op_txt[2] = op_out[3];
12296 op_txt[3] = op_out[2];
12297 }
12298
ce518a5f
L
12299 for (i = 0; i < (MAX_OPERANDS >> 1); ++i)
12300 {
6c067bbb
RM
12301 op_ad = op_index[i];
12302 op_index[i] = op_index[MAX_OPERANDS - 1 - i];
12303 op_index[MAX_OPERANDS - 1 - i] = op_ad;
185b1163
L
12304 riprel = op_riprel[i];
12305 op_riprel[i] = op_riprel [MAX_OPERANDS - 1 - i];
12306 op_riprel[MAX_OPERANDS - 1 - i] = riprel;
ce518a5f 12307 }
252b5132
RH
12308 }
12309 else
12310 {
ce518a5f 12311 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 12312 op_txt[MAX_OPERANDS - 1 - i] = op_out[i];
050dfa73
MM
12313 }
12314
ce518a5f
L
12315 needcomma = 0;
12316 for (i = 0; i < MAX_OPERANDS; ++i)
12317 if (*op_txt[i])
12318 {
12319 if (needcomma)
12320 (*info->fprintf_func) (info->stream, ",");
12321 if (op_index[i] != -1 && !op_riprel[i])
1d67fe3b
TT
12322 {
12323 bfd_vma target = (bfd_vma) op_address[op_index[i]];
12324
12325 if (the_info && op_is_jump)
12326 {
12327 the_info->insn_info_valid = 1;
12328 the_info->branch_delay_insns = 0;
12329 the_info->data_size = 0;
12330 the_info->target = target;
12331 the_info->target2 = 0;
12332 }
12333 (*info->print_address_func) (target, info);
12334 }
ce518a5f
L
12335 else
12336 (*info->fprintf_func) (info->stream, "%s", op_txt[i]);
12337 needcomma = 1;
12338 }
050dfa73 12339
ce518a5f 12340 for (i = 0; i < MAX_OPERANDS; i++)
52b15da3
JH
12341 if (op_index[i] != -1 && op_riprel[i])
12342 {
12343 (*info->fprintf_func) (info->stream, " # ");
4fd7268a 12344 (*info->print_address_func) ((bfd_vma) (start_pc + (codep - start_codep)
52b15da3 12345 + op_address[op_index[i]]), info);
185b1163 12346 break;
52b15da3 12347 }
e396998b 12348 return codep - priv.the_buffer;
252b5132
RH
12349}
12350
6439fc28 12351static const char *float_mem[] = {
252b5132 12352 /* d8 */
7c52e0e8
L
12353 "fadd{s|}",
12354 "fmul{s|}",
12355 "fcom{s|}",
12356 "fcomp{s|}",
12357 "fsub{s|}",
12358 "fsubr{s|}",
12359 "fdiv{s|}",
12360 "fdivr{s|}",
db6eb5be 12361 /* d9 */
7c52e0e8 12362 "fld{s|}",
252b5132 12363 "(bad)",
7c52e0e8
L
12364 "fst{s|}",
12365 "fstp{s|}",
9306ca4a 12366 "fldenvIC",
252b5132 12367 "fldcw",
9306ca4a 12368 "fNstenvIC",
252b5132
RH
12369 "fNstcw",
12370 /* da */
7c52e0e8
L
12371 "fiadd{l|}",
12372 "fimul{l|}",
12373 "ficom{l|}",
12374 "ficomp{l|}",
12375 "fisub{l|}",
12376 "fisubr{l|}",
12377 "fidiv{l|}",
12378 "fidivr{l|}",
252b5132 12379 /* db */
7c52e0e8
L
12380 "fild{l|}",
12381 "fisttp{l|}",
12382 "fist{l|}",
12383 "fistp{l|}",
252b5132 12384 "(bad)",
6439fc28 12385 "fld{t||t|}",
252b5132 12386 "(bad)",
6439fc28 12387 "fstp{t||t|}",
252b5132 12388 /* dc */
7c52e0e8
L
12389 "fadd{l|}",
12390 "fmul{l|}",
12391 "fcom{l|}",
12392 "fcomp{l|}",
12393 "fsub{l|}",
12394 "fsubr{l|}",
12395 "fdiv{l|}",
12396 "fdivr{l|}",
252b5132 12397 /* dd */
7c52e0e8
L
12398 "fld{l|}",
12399 "fisttp{ll|}",
12400 "fst{l||}",
12401 "fstp{l|}",
9306ca4a 12402 "frstorIC",
252b5132 12403 "(bad)",
9306ca4a 12404 "fNsaveIC",
252b5132
RH
12405 "fNstsw",
12406 /* de */
ac465521
JB
12407 "fiadd{s|}",
12408 "fimul{s|}",
12409 "ficom{s|}",
12410 "ficomp{s|}",
12411 "fisub{s|}",
12412 "fisubr{s|}",
12413 "fidiv{s|}",
12414 "fidivr{s|}",
252b5132 12415 /* df */
ac465521
JB
12416 "fild{s|}",
12417 "fisttp{s|}",
12418 "fist{s|}",
12419 "fistp{s|}",
252b5132 12420 "fbld",
7c52e0e8 12421 "fild{ll|}",
252b5132 12422 "fbstp",
7c52e0e8 12423 "fistp{ll|}",
1d9f512f
AM
12424};
12425
12426static const unsigned char float_mem_mode[] = {
12427 /* d8 */
12428 d_mode,
12429 d_mode,
12430 d_mode,
12431 d_mode,
12432 d_mode,
12433 d_mode,
12434 d_mode,
12435 d_mode,
12436 /* d9 */
12437 d_mode,
12438 0,
12439 d_mode,
12440 d_mode,
12441 0,
12442 w_mode,
12443 0,
12444 w_mode,
12445 /* da */
12446 d_mode,
12447 d_mode,
12448 d_mode,
12449 d_mode,
12450 d_mode,
12451 d_mode,
12452 d_mode,
12453 d_mode,
12454 /* db */
12455 d_mode,
12456 d_mode,
12457 d_mode,
12458 d_mode,
12459 0,
9306ca4a 12460 t_mode,
1d9f512f 12461 0,
9306ca4a 12462 t_mode,
1d9f512f
AM
12463 /* dc */
12464 q_mode,
12465 q_mode,
12466 q_mode,
12467 q_mode,
12468 q_mode,
12469 q_mode,
12470 q_mode,
12471 q_mode,
12472 /* dd */
12473 q_mode,
12474 q_mode,
12475 q_mode,
12476 q_mode,
12477 0,
12478 0,
12479 0,
12480 w_mode,
12481 /* de */
12482 w_mode,
12483 w_mode,
12484 w_mode,
12485 w_mode,
12486 w_mode,
12487 w_mode,
12488 w_mode,
12489 w_mode,
12490 /* df */
12491 w_mode,
12492 w_mode,
12493 w_mode,
12494 w_mode,
9306ca4a 12495 t_mode,
1d9f512f 12496 q_mode,
9306ca4a 12497 t_mode,
1d9f512f 12498 q_mode
252b5132
RH
12499};
12500
ce518a5f
L
12501#define ST { OP_ST, 0 }
12502#define STi { OP_STi, 0 }
252b5132 12503
48c97fa1
L
12504#define FGRPd9_2 NULL, { { NULL, 1 } }, 0
12505#define FGRPd9_4 NULL, { { NULL, 2 } }, 0
12506#define FGRPd9_5 NULL, { { NULL, 3 } }, 0
12507#define FGRPd9_6 NULL, { { NULL, 4 } }, 0
12508#define FGRPd9_7 NULL, { { NULL, 5 } }, 0
12509#define FGRPda_5 NULL, { { NULL, 6 } }, 0
12510#define FGRPdb_4 NULL, { { NULL, 7 } }, 0
12511#define FGRPde_3 NULL, { { NULL, 8 } }, 0
12512#define FGRPdf_4 NULL, { { NULL, 9 } }, 0
252b5132 12513
2da11e11 12514static const struct dis386 float_reg[][8] = {
252b5132
RH
12515 /* d8 */
12516 {
bf890a93
IT
12517 { "fadd", { ST, STi }, 0 },
12518 { "fmul", { ST, STi }, 0 },
12519 { "fcom", { STi }, 0 },
12520 { "fcomp", { STi }, 0 },
12521 { "fsub", { ST, STi }, 0 },
12522 { "fsubr", { ST, STi }, 0 },
12523 { "fdiv", { ST, STi }, 0 },
12524 { "fdivr", { ST, STi }, 0 },
252b5132
RH
12525 },
12526 /* d9 */
12527 {
bf890a93
IT
12528 { "fld", { STi }, 0 },
12529 { "fxch", { STi }, 0 },
252b5132 12530 { FGRPd9_2 },
592d1631 12531 { Bad_Opcode },
252b5132
RH
12532 { FGRPd9_4 },
12533 { FGRPd9_5 },
12534 { FGRPd9_6 },
12535 { FGRPd9_7 },
12536 },
12537 /* da */
12538 {
bf890a93
IT
12539 { "fcmovb", { ST, STi }, 0 },
12540 { "fcmove", { ST, STi }, 0 },
12541 { "fcmovbe",{ ST, STi }, 0 },
12542 { "fcmovu", { ST, STi }, 0 },
592d1631 12543 { Bad_Opcode },
252b5132 12544 { FGRPda_5 },
592d1631
L
12545 { Bad_Opcode },
12546 { Bad_Opcode },
252b5132
RH
12547 },
12548 /* db */
12549 {
bf890a93
IT
12550 { "fcmovnb",{ ST, STi }, 0 },
12551 { "fcmovne",{ ST, STi }, 0 },
12552 { "fcmovnbe",{ ST, STi }, 0 },
12553 { "fcmovnu",{ ST, STi }, 0 },
252b5132 12554 { FGRPdb_4 },
bf890a93
IT
12555 { "fucomi", { ST, STi }, 0 },
12556 { "fcomi", { ST, STi }, 0 },
592d1631 12557 { Bad_Opcode },
252b5132
RH
12558 },
12559 /* dc */
12560 {
bf890a93
IT
12561 { "fadd", { STi, ST }, 0 },
12562 { "fmul", { STi, ST }, 0 },
592d1631
L
12563 { Bad_Opcode },
12564 { Bad_Opcode },
d53e6b98
JB
12565 { "fsub{!M|r}", { STi, ST }, 0 },
12566 { "fsub{M|}", { STi, ST }, 0 },
12567 { "fdiv{!M|r}", { STi, ST }, 0 },
12568 { "fdiv{M|}", { STi, ST }, 0 },
252b5132
RH
12569 },
12570 /* dd */
12571 {
bf890a93 12572 { "ffree", { STi }, 0 },
592d1631 12573 { Bad_Opcode },
bf890a93
IT
12574 { "fst", { STi }, 0 },
12575 { "fstp", { STi }, 0 },
12576 { "fucom", { STi }, 0 },
12577 { "fucomp", { STi }, 0 },
592d1631
L
12578 { Bad_Opcode },
12579 { Bad_Opcode },
252b5132
RH
12580 },
12581 /* de */
12582 {
bf890a93
IT
12583 { "faddp", { STi, ST }, 0 },
12584 { "fmulp", { STi, ST }, 0 },
592d1631 12585 { Bad_Opcode },
252b5132 12586 { FGRPde_3 },
d53e6b98
JB
12587 { "fsub{!M|r}p", { STi, ST }, 0 },
12588 { "fsub{M|}p", { STi, ST }, 0 },
12589 { "fdiv{!M|r}p", { STi, ST }, 0 },
12590 { "fdiv{M|}p", { STi, ST }, 0 },
252b5132
RH
12591 },
12592 /* df */
12593 {
bf890a93 12594 { "ffreep", { STi }, 0 },
592d1631
L
12595 { Bad_Opcode },
12596 { Bad_Opcode },
12597 { Bad_Opcode },
252b5132 12598 { FGRPdf_4 },
bf890a93
IT
12599 { "fucomip", { ST, STi }, 0 },
12600 { "fcomip", { ST, STi }, 0 },
592d1631 12601 { Bad_Opcode },
252b5132
RH
12602 },
12603};
12604
252b5132 12605static char *fgrps[][8] = {
48c97fa1
L
12606 /* Bad opcode 0 */
12607 {
12608 "(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12609 },
12610
12611 /* d9_2 1 */
252b5132
RH
12612 {
12613 "fnop","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12614 },
12615
48c97fa1 12616 /* d9_4 2 */
252b5132
RH
12617 {
12618 "fchs","fabs","(bad)","(bad)","ftst","fxam","(bad)","(bad)",
12619 },
12620
48c97fa1 12621 /* d9_5 3 */
252b5132
RH
12622 {
12623 "fld1","fldl2t","fldl2e","fldpi","fldlg2","fldln2","fldz","(bad)",
12624 },
12625
48c97fa1 12626 /* d9_6 4 */
252b5132
RH
12627 {
12628 "f2xm1","fyl2x","fptan","fpatan","fxtract","fprem1","fdecstp","fincstp",
12629 },
12630
48c97fa1 12631 /* d9_7 5 */
252b5132
RH
12632 {
12633 "fprem","fyl2xp1","fsqrt","fsincos","frndint","fscale","fsin","fcos",
12634 },
12635
48c97fa1 12636 /* da_5 6 */
252b5132
RH
12637 {
12638 "(bad)","fucompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12639 },
12640
48c97fa1 12641 /* db_4 7 */
252b5132 12642 {
309d3373
JB
12643 "fNeni(8087 only)","fNdisi(8087 only)","fNclex","fNinit",
12644 "fNsetpm(287 only)","frstpm(287 only)","(bad)","(bad)",
252b5132
RH
12645 },
12646
48c97fa1 12647 /* de_3 8 */
252b5132
RH
12648 {
12649 "(bad)","fcompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12650 },
12651
48c97fa1 12652 /* df_4 9 */
252b5132
RH
12653 {
12654 "fNstsw","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12655 },
12656};
12657
b6169b20
L
12658static void
12659swap_operand (void)
12660{
12661 mnemonicendp[0] = '.';
12662 mnemonicendp[1] = 's';
12663 mnemonicendp += 2;
12664}
12665
b844680a
L
12666static void
12667OP_Skip_MODRM (int bytemode ATTRIBUTE_UNUSED,
12668 int sizeflag ATTRIBUTE_UNUSED)
12669{
12670 /* Skip mod/rm byte. */
12671 MODRM_CHECK;
12672 codep++;
12673}
12674
252b5132 12675static void
26ca5450 12676dofloat (int sizeflag)
252b5132 12677{
2da11e11 12678 const struct dis386 *dp;
252b5132
RH
12679 unsigned char floatop;
12680
12681 floatop = codep[-1];
12682
7967e09e 12683 if (modrm.mod != 3)
252b5132 12684 {
7967e09e 12685 int fp_indx = (floatop - 0xd8) * 8 + modrm.reg;
1d9f512f
AM
12686
12687 putop (float_mem[fp_indx], sizeflag);
ce518a5f 12688 obufp = op_out[0];
6e50d963 12689 op_ad = 2;
1d9f512f 12690 OP_E (float_mem_mode[fp_indx], sizeflag);
252b5132
RH
12691 return;
12692 }
6608db57 12693 /* Skip mod/rm byte. */
4bba6815 12694 MODRM_CHECK;
252b5132
RH
12695 codep++;
12696
7967e09e 12697 dp = &float_reg[floatop - 0xd8][modrm.reg];
252b5132
RH
12698 if (dp->name == NULL)
12699 {
7967e09e 12700 putop (fgrps[dp->op[0].bytemode][modrm.rm], sizeflag);
252b5132 12701
6608db57 12702 /* Instruction fnstsw is only one with strange arg. */
252b5132 12703 if (floatop == 0xdf && codep[-1] == 0xe0)
ce518a5f 12704 strcpy (op_out[0], names16[0]);
252b5132
RH
12705 }
12706 else
12707 {
12708 putop (dp->name, sizeflag);
12709
ce518a5f 12710 obufp = op_out[0];
6e50d963 12711 op_ad = 2;
ce518a5f
L
12712 if (dp->op[0].rtn)
12713 (*dp->op[0].rtn) (dp->op[0].bytemode, sizeflag);
6e50d963 12714
ce518a5f 12715 obufp = op_out[1];
6e50d963 12716 op_ad = 1;
ce518a5f
L
12717 if (dp->op[1].rtn)
12718 (*dp->op[1].rtn) (dp->op[1].bytemode, sizeflag);
252b5132
RH
12719 }
12720}
12721
9ce09ba2
RM
12722/* Like oappend (below), but S is a string starting with '%'.
12723 In Intel syntax, the '%' is elided. */
12724static void
12725oappend_maybe_intel (const char *s)
12726{
12727 oappend (s + intel_syntax);
12728}
12729
252b5132 12730static void
26ca5450 12731OP_ST (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 12732{
9ce09ba2 12733 oappend_maybe_intel ("%st");
252b5132
RH
12734}
12735
252b5132 12736static void
26ca5450 12737OP_STi (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 12738{
7967e09e 12739 sprintf (scratchbuf, "%%st(%d)", modrm.rm);
9ce09ba2 12740 oappend_maybe_intel (scratchbuf);
252b5132
RH
12741}
12742
6608db57 12743/* Capital letters in template are macros. */
6439fc28 12744static int
d3ce72d0 12745putop (const char *in_template, int sizeflag)
252b5132 12746{
2da11e11 12747 const char *p;
9306ca4a 12748 int alt = 0;
9d141669 12749 int cond = 1;
98b528ac
L
12750 unsigned int l = 0, len = 1;
12751 char last[4];
12752
12753#define SAVE_LAST(c) \
12754 if (l < len && l < sizeof (last)) \
12755 last[l++] = c; \
12756 else \
12757 abort ();
252b5132 12758
d3ce72d0 12759 for (p = in_template; *p; p++)
252b5132
RH
12760 {
12761 switch (*p)
12762 {
12763 default:
12764 *obufp++ = *p;
12765 break;
98b528ac
L
12766 case '%':
12767 len++;
12768 break;
9d141669
L
12769 case '!':
12770 cond = 0;
12771 break;
6439fc28 12772 case '{':
6439fc28 12773 if (intel_syntax)
6439fc28
AM
12774 {
12775 while (*++p != '|')
7c52e0e8
L
12776 if (*p == '}' || *p == '\0')
12777 abort ();
6439fc28 12778 }
9306ca4a
JB
12779 /* Fall through. */
12780 case 'I':
12781 alt = 1;
12782 continue;
6439fc28
AM
12783 case '|':
12784 while (*++p != '}')
12785 {
12786 if (*p == '\0')
12787 abort ();
12788 }
12789 break;
12790 case '}':
12791 break;
252b5132 12792 case 'A':
db6eb5be
AM
12793 if (intel_syntax)
12794 break;
7967e09e 12795 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
252b5132
RH
12796 *obufp++ = 'b';
12797 break;
12798 case 'B':
4b06377f
L
12799 if (l == 0 && len == 1)
12800 {
12801case_B:
12802 if (intel_syntax)
12803 break;
12804 if (sizeflag & SUFFIX_ALWAYS)
12805 *obufp++ = 'b';
12806 }
12807 else
12808 {
12809 if (l != 1
12810 || len != 2
12811 || last[0] != 'L')
12812 {
12813 SAVE_LAST (*p);
12814 break;
12815 }
12816
12817 if (address_mode == mode_64bit
12818 && !(prefixes & PREFIX_ADDR))
12819 {
12820 *obufp++ = 'a';
12821 *obufp++ = 'b';
12822 *obufp++ = 's';
12823 }
12824
12825 goto case_B;
12826 }
252b5132 12827 break;
9306ca4a
JB
12828 case 'C':
12829 if (intel_syntax && !alt)
12830 break;
12831 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
12832 {
12833 if (sizeflag & DFLAG)
12834 *obufp++ = intel_syntax ? 'd' : 'l';
12835 else
12836 *obufp++ = intel_syntax ? 'w' : 's';
12837 used_prefixes |= (prefixes & PREFIX_DATA);
12838 }
12839 break;
ed7841b3
JB
12840 case 'D':
12841 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
12842 break;
161a04f6 12843 USED_REX (REX_W);
7967e09e 12844 if (modrm.mod == 3)
ed7841b3 12845 {
161a04f6 12846 if (rex & REX_W)
ed7841b3 12847 *obufp++ = 'q';
ed7841b3 12848 else
f16cd0d5
L
12849 {
12850 if (sizeflag & DFLAG)
12851 *obufp++ = intel_syntax ? 'd' : 'l';
12852 else
12853 *obufp++ = 'w';
12854 used_prefixes |= (prefixes & PREFIX_DATA);
12855 }
ed7841b3
JB
12856 }
12857 else
12858 *obufp++ = 'w';
12859 break;
252b5132 12860 case 'E': /* For jcxz/jecxz */
cb712a9e 12861 if (address_mode == mode_64bit)
c1a64871
JH
12862 {
12863 if (sizeflag & AFLAG)
12864 *obufp++ = 'r';
12865 else
12866 *obufp++ = 'e';
12867 }
12868 else
12869 if (sizeflag & AFLAG)
12870 *obufp++ = 'e';
3ffd33cf
AM
12871 used_prefixes |= (prefixes & PREFIX_ADDR);
12872 break;
12873 case 'F':
db6eb5be
AM
12874 if (intel_syntax)
12875 break;
e396998b 12876 if ((prefixes & PREFIX_ADDR) || (sizeflag & SUFFIX_ALWAYS))
3ffd33cf
AM
12877 {
12878 if (sizeflag & AFLAG)
cb712a9e 12879 *obufp++ = address_mode == mode_64bit ? 'q' : 'l';
3ffd33cf 12880 else
cb712a9e 12881 *obufp++ = address_mode == mode_64bit ? 'l' : 'w';
3ffd33cf
AM
12882 used_prefixes |= (prefixes & PREFIX_ADDR);
12883 }
252b5132 12884 break;
52fd6d94
JB
12885 case 'G':
12886 if (intel_syntax || (obufp[-1] != 's' && !(sizeflag & SUFFIX_ALWAYS)))
12887 break;
161a04f6 12888 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
12889 *obufp++ = 'l';
12890 else
12891 *obufp++ = 'w';
161a04f6 12892 if (!(rex & REX_W))
52fd6d94
JB
12893 used_prefixes |= (prefixes & PREFIX_DATA);
12894 break;
5dd0794d 12895 case 'H':
db6eb5be
AM
12896 if (intel_syntax)
12897 break;
5dd0794d
AM
12898 if ((prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_CS
12899 || (prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_DS)
12900 {
12901 used_prefixes |= prefixes & (PREFIX_CS | PREFIX_DS);
12902 *obufp++ = ',';
12903 *obufp++ = 'p';
12904 if (prefixes & PREFIX_DS)
12905 *obufp++ = 't';
12906 else
12907 *obufp++ = 'n';
12908 }
12909 break;
9306ca4a
JB
12910 case 'J':
12911 if (intel_syntax)
12912 break;
12913 *obufp++ = 'l';
12914 break;
42903f7f
L
12915 case 'K':
12916 USED_REX (REX_W);
12917 if (rex & REX_W)
12918 *obufp++ = 'q';
12919 else
12920 *obufp++ = 'd';
12921 break;
6dd5059a 12922 case 'Z':
04d824a4
JB
12923 if (l != 0 || len != 1)
12924 {
12925 if (l != 1 || len != 2 || last[0] != 'X')
12926 {
12927 SAVE_LAST (*p);
12928 break;
12929 }
12930 if (!need_vex || !vex.evex)
12931 abort ();
12932 if (intel_syntax
12933 || ((modrm.mod == 3 || vex.b) && !(sizeflag & SUFFIX_ALWAYS)))
12934 break;
12935 switch (vex.length)
12936 {
12937 case 128:
12938 *obufp++ = 'x';
12939 break;
12940 case 256:
12941 *obufp++ = 'y';
12942 break;
12943 case 512:
12944 *obufp++ = 'z';
12945 break;
12946 default:
12947 abort ();
12948 }
12949 break;
12950 }
6dd5059a
L
12951 if (intel_syntax)
12952 break;
12953 if (address_mode == mode_64bit && (sizeflag & SUFFIX_ALWAYS))
12954 {
12955 *obufp++ = 'q';
12956 break;
12957 }
12958 /* Fall through. */
98b528ac 12959 goto case_L;
252b5132 12960 case 'L':
98b528ac
L
12961 if (l != 0 || len != 1)
12962 {
12963 SAVE_LAST (*p);
12964 break;
12965 }
12966case_L:
db6eb5be
AM
12967 if (intel_syntax)
12968 break;
252b5132
RH
12969 if (sizeflag & SUFFIX_ALWAYS)
12970 *obufp++ = 'l';
252b5132 12971 break;
9d141669
L
12972 case 'M':
12973 if (intel_mnemonic != cond)
12974 *obufp++ = 'r';
12975 break;
252b5132
RH
12976 case 'N':
12977 if ((prefixes & PREFIX_FWAIT) == 0)
12978 *obufp++ = 'n';
7d421014
ILT
12979 else
12980 used_prefixes |= PREFIX_FWAIT;
252b5132 12981 break;
52b15da3 12982 case 'O':
161a04f6
L
12983 USED_REX (REX_W);
12984 if (rex & REX_W)
6439fc28 12985 *obufp++ = 'o';
a35ca55a
JB
12986 else if (intel_syntax && (sizeflag & DFLAG))
12987 *obufp++ = 'q';
52b15da3
JH
12988 else
12989 *obufp++ = 'd';
161a04f6 12990 if (!(rex & REX_W))
a35ca55a 12991 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 12992 break;
07f5af7d
L
12993 case '&':
12994 if (!intel_syntax
12995 && address_mode == mode_64bit
12996 && isa64 == intel64)
12997 {
12998 *obufp++ = 'q';
12999 break;
13000 }
13001 /* Fall through. */
6439fc28 13002 case 'T':
d9e3625e
L
13003 if (!intel_syntax
13004 && address_mode == mode_64bit
7bb15c6f 13005 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
13006 {
13007 *obufp++ = 'q';
13008 break;
13009 }
6608db57 13010 /* Fall through. */
4b4c407a 13011 goto case_P;
252b5132 13012 case 'P':
4b4c407a 13013 if (l == 0 && len == 1)
d9e3625e 13014 {
4b4c407a
L
13015case_P:
13016 if (intel_syntax)
d9e3625e 13017 {
4b4c407a
L
13018 if ((rex & REX_W) == 0
13019 && (prefixes & PREFIX_DATA))
13020 {
13021 if ((sizeflag & DFLAG) == 0)
13022 *obufp++ = 'w';
13023 used_prefixes |= (prefixes & PREFIX_DATA);
13024 }
13025 break;
13026 }
13027 if ((prefixes & PREFIX_DATA)
13028 || (rex & REX_W)
13029 || (sizeflag & SUFFIX_ALWAYS))
13030 {
13031 USED_REX (REX_W);
13032 if (rex & REX_W)
13033 *obufp++ = 'q';
13034 else
13035 {
13036 if (sizeflag & DFLAG)
13037 *obufp++ = 'l';
13038 else
13039 *obufp++ = 'w';
13040 used_prefixes |= (prefixes & PREFIX_DATA);
13041 }
d9e3625e 13042 }
d9e3625e 13043 }
4b4c407a 13044 else
252b5132 13045 {
4b4c407a
L
13046 if (l != 1 || len != 2 || last[0] != 'L')
13047 {
13048 SAVE_LAST (*p);
13049 break;
13050 }
13051
13052 if ((prefixes & PREFIX_DATA)
13053 || (rex & REX_W)
13054 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 13055 {
4b4c407a
L
13056 USED_REX (REX_W);
13057 if (rex & REX_W)
13058 *obufp++ = 'q';
13059 else
13060 {
13061 if (sizeflag & DFLAG)
13062 *obufp++ = intel_syntax ? 'd' : 'l';
13063 else
13064 *obufp++ = 'w';
13065 used_prefixes |= (prefixes & PREFIX_DATA);
13066 }
52b15da3 13067 }
252b5132
RH
13068 }
13069 break;
6439fc28 13070 case 'U':
db6eb5be
AM
13071 if (intel_syntax)
13072 break;
7bb15c6f 13073 if (address_mode == mode_64bit
6c067bbb 13074 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28 13075 {
7967e09e 13076 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
1a114b12 13077 *obufp++ = 'q';
6439fc28
AM
13078 break;
13079 }
6608db57 13080 /* Fall through. */
98b528ac 13081 goto case_Q;
252b5132 13082 case 'Q':
98b528ac 13083 if (l == 0 && len == 1)
252b5132 13084 {
98b528ac
L
13085case_Q:
13086 if (intel_syntax && !alt)
13087 break;
13088 USED_REX (REX_W);
13089 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 13090 {
98b528ac
L
13091 if (rex & REX_W)
13092 *obufp++ = 'q';
52b15da3 13093 else
98b528ac
L
13094 {
13095 if (sizeflag & DFLAG)
13096 *obufp++ = intel_syntax ? 'd' : 'l';
13097 else
13098 *obufp++ = 'w';
f16cd0d5 13099 used_prefixes |= (prefixes & PREFIX_DATA);
98b528ac 13100 }
52b15da3 13101 }
98b528ac
L
13102 }
13103 else
13104 {
13105 if (l != 1 || len != 2 || last[0] != 'L')
13106 {
13107 SAVE_LAST (*p);
13108 break;
13109 }
13110 if (intel_syntax
13111 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
13112 break;
13113 if ((rex & REX_W))
13114 {
13115 USED_REX (REX_W);
13116 *obufp++ = 'q';
13117 }
13118 else
13119 *obufp++ = 'l';
252b5132
RH
13120 }
13121 break;
13122 case 'R':
161a04f6
L
13123 USED_REX (REX_W);
13124 if (rex & REX_W)
a35ca55a
JB
13125 *obufp++ = 'q';
13126 else if (sizeflag & DFLAG)
c608c12e 13127 {
a35ca55a 13128 if (intel_syntax)
c608c12e 13129 *obufp++ = 'd';
c608c12e 13130 else
a35ca55a 13131 *obufp++ = 'l';
c608c12e 13132 }
252b5132 13133 else
a35ca55a
JB
13134 *obufp++ = 'w';
13135 if (intel_syntax && !p[1]
161a04f6 13136 && ((rex & REX_W) || (sizeflag & DFLAG)))
a35ca55a 13137 *obufp++ = 'e';
161a04f6 13138 if (!(rex & REX_W))
52b15da3 13139 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132 13140 break;
1a114b12 13141 case 'V':
4b06377f 13142 if (l == 0 && len == 1)
1a114b12 13143 {
4b06377f
L
13144 if (intel_syntax)
13145 break;
7bb15c6f 13146 if (address_mode == mode_64bit
6c067bbb 13147 && ((sizeflag & DFLAG) || (rex & REX_W)))
4b06377f
L
13148 {
13149 if (sizeflag & SUFFIX_ALWAYS)
13150 *obufp++ = 'q';
13151 break;
13152 }
13153 }
13154 else
13155 {
13156 if (l != 1
13157 || len != 2
13158 || last[0] != 'L')
13159 {
13160 SAVE_LAST (*p);
13161 break;
13162 }
13163
13164 if (rex & REX_W)
13165 {
13166 *obufp++ = 'a';
13167 *obufp++ = 'b';
13168 *obufp++ = 's';
13169 }
1a114b12
JB
13170 }
13171 /* Fall through. */
4b06377f 13172 goto case_S;
252b5132 13173 case 'S':
4b06377f 13174 if (l == 0 && len == 1)
252b5132 13175 {
4b06377f
L
13176case_S:
13177 if (intel_syntax)
13178 break;
13179 if (sizeflag & SUFFIX_ALWAYS)
52b15da3 13180 {
4b06377f
L
13181 if (rex & REX_W)
13182 *obufp++ = 'q';
52b15da3 13183 else
4b06377f
L
13184 {
13185 if (sizeflag & DFLAG)
13186 *obufp++ = 'l';
13187 else
13188 *obufp++ = 'w';
13189 used_prefixes |= (prefixes & PREFIX_DATA);
13190 }
13191 }
13192 }
13193 else
13194 {
13195 if (l != 1
13196 || len != 2
13197 || last[0] != 'L')
13198 {
13199 SAVE_LAST (*p);
13200 break;
52b15da3 13201 }
4b06377f
L
13202
13203 if (address_mode == mode_64bit
13204 && !(prefixes & PREFIX_ADDR))
13205 {
13206 *obufp++ = 'a';
13207 *obufp++ = 'b';
13208 *obufp++ = 's';
13209 }
13210
13211 goto case_S;
252b5132 13212 }
252b5132 13213 break;
041bd2e0 13214 case 'X':
c0f3af97
L
13215 if (l != 0 || len != 1)
13216 {
13217 SAVE_LAST (*p);
13218 break;
13219 }
13220 if (need_vex && vex.prefix)
13221 {
13222 if (vex.prefix == DATA_PREFIX_OPCODE)
13223 *obufp++ = 'd';
13224 else
13225 *obufp++ = 's';
13226 }
041bd2e0 13227 else
f16cd0d5
L
13228 {
13229 if (prefixes & PREFIX_DATA)
13230 *obufp++ = 'd';
13231 else
13232 *obufp++ = 's';
13233 used_prefixes |= (prefixes & PREFIX_DATA);
13234 }
041bd2e0 13235 break;
76f227a5 13236 case 'Y':
c0f3af97 13237 if (l == 0 && len == 1)
9646c87b 13238 abort ();
c0f3af97
L
13239 else
13240 {
13241 if (l != 1 || len != 2 || last[0] != 'X')
13242 {
13243 SAVE_LAST (*p);
13244 break;
13245 }
13246 if (!need_vex)
13247 abort ();
13248 if (intel_syntax
04d824a4 13249 || ((modrm.mod == 3 || vex.b) && !(sizeflag & SUFFIX_ALWAYS)))
c0f3af97
L
13250 break;
13251 switch (vex.length)
13252 {
13253 case 128:
13254 *obufp++ = 'x';
13255 break;
13256 case 256:
13257 *obufp++ = 'y';
13258 break;
04d824a4
JB
13259 case 512:
13260 if (!vex.evex)
c0f3af97 13261 default:
04d824a4 13262 abort ();
c0f3af97 13263 }
76f227a5
JH
13264 }
13265 break;
252b5132 13266 case 'W':
0bfee649 13267 if (l == 0 && len == 1)
a35ca55a 13268 {
0bfee649
L
13269 /* operand size flag for cwtl, cbtw */
13270 USED_REX (REX_W);
13271 if (rex & REX_W)
13272 {
13273 if (intel_syntax)
13274 *obufp++ = 'd';
13275 else
13276 *obufp++ = 'l';
13277 }
13278 else if (sizeflag & DFLAG)
13279 *obufp++ = 'w';
a35ca55a 13280 else
0bfee649
L
13281 *obufp++ = 'b';
13282 if (!(rex & REX_W))
13283 used_prefixes |= (prefixes & PREFIX_DATA);
a35ca55a 13284 }
252b5132 13285 else
0bfee649 13286 {
6c30d220
L
13287 if (l != 1
13288 || len != 2
13289 || (last[0] != 'X'
13290 && last[0] != 'L'))
0bfee649
L
13291 {
13292 SAVE_LAST (*p);
13293 break;
13294 }
13295 if (!need_vex)
13296 abort ();
6c30d220
L
13297 if (last[0] == 'X')
13298 *obufp++ = vex.w ? 'd': 's';
13299 else
13300 *obufp++ = vex.w ? 'q': 'd';
0bfee649 13301 }
252b5132 13302 break;
a72d2af2
L
13303 case '^':
13304 if (intel_syntax)
13305 break;
13306 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
13307 {
13308 if (sizeflag & DFLAG)
13309 *obufp++ = 'l';
13310 else
13311 *obufp++ = 'w';
13312 used_prefixes |= (prefixes & PREFIX_DATA);
13313 }
13314 break;
5db04b09
L
13315 case '@':
13316 if (intel_syntax)
13317 break;
13318 if (address_mode == mode_64bit
13319 && (isa64 == intel64
13320 || ((sizeflag & DFLAG) || (rex & REX_W))))
13321 *obufp++ = 'q';
13322 else if ((prefixes & PREFIX_DATA))
13323 {
13324 if (!(sizeflag & DFLAG))
13325 *obufp++ = 'w';
13326 used_prefixes |= (prefixes & PREFIX_DATA);
13327 }
13328 break;
252b5132 13329 }
9306ca4a 13330 alt = 0;
252b5132
RH
13331 }
13332 *obufp = 0;
ea397f5b 13333 mnemonicendp = obufp;
6439fc28 13334 return 0;
252b5132
RH
13335}
13336
13337static void
26ca5450 13338oappend (const char *s)
252b5132 13339{
ea397f5b 13340 obufp = stpcpy (obufp, s);
252b5132
RH
13341}
13342
13343static void
26ca5450 13344append_seg (void)
252b5132 13345{
285ca992
L
13346 /* Only print the active segment register. */
13347 if (!active_seg_prefix)
13348 return;
13349
13350 used_prefixes |= active_seg_prefix;
13351 switch (active_seg_prefix)
7d421014 13352 {
285ca992 13353 case PREFIX_CS:
9ce09ba2 13354 oappend_maybe_intel ("%cs:");
285ca992
L
13355 break;
13356 case PREFIX_DS:
9ce09ba2 13357 oappend_maybe_intel ("%ds:");
285ca992
L
13358 break;
13359 case PREFIX_SS:
9ce09ba2 13360 oappend_maybe_intel ("%ss:");
285ca992
L
13361 break;
13362 case PREFIX_ES:
9ce09ba2 13363 oappend_maybe_intel ("%es:");
285ca992
L
13364 break;
13365 case PREFIX_FS:
9ce09ba2 13366 oappend_maybe_intel ("%fs:");
285ca992
L
13367 break;
13368 case PREFIX_GS:
9ce09ba2 13369 oappend_maybe_intel ("%gs:");
285ca992
L
13370 break;
13371 default:
13372 break;
7d421014 13373 }
252b5132
RH
13374}
13375
13376static void
26ca5450 13377OP_indirE (int bytemode, int sizeflag)
252b5132
RH
13378{
13379 if (!intel_syntax)
13380 oappend ("*");
13381 OP_E (bytemode, sizeflag);
13382}
13383
52b15da3 13384static void
26ca5450 13385print_operand_value (char *buf, int hex, bfd_vma disp)
52b15da3 13386{
cb712a9e 13387 if (address_mode == mode_64bit)
52b15da3
JH
13388 {
13389 if (hex)
13390 {
13391 char tmp[30];
13392 int i;
13393 buf[0] = '0';
13394 buf[1] = 'x';
13395 sprintf_vma (tmp, disp);
6608db57 13396 for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++);
52b15da3
JH
13397 strcpy (buf + 2, tmp + i);
13398 }
13399 else
13400 {
13401 bfd_signed_vma v = disp;
13402 char tmp[30];
13403 int i;
13404 if (v < 0)
13405 {
13406 *(buf++) = '-';
13407 v = -disp;
6608db57 13408 /* Check for possible overflow on 0x8000000000000000. */
52b15da3
JH
13409 if (v < 0)
13410 {
13411 strcpy (buf, "9223372036854775808");
13412 return;
13413 }
13414 }
13415 if (!v)
13416 {
13417 strcpy (buf, "0");
13418 return;
13419 }
13420
13421 i = 0;
13422 tmp[29] = 0;
13423 while (v)
13424 {
6608db57 13425 tmp[28 - i] = (v % 10) + '0';
52b15da3
JH
13426 v /= 10;
13427 i++;
13428 }
13429 strcpy (buf, tmp + 29 - i);
13430 }
13431 }
13432 else
13433 {
13434 if (hex)
13435 sprintf (buf, "0x%x", (unsigned int) disp);
13436 else
13437 sprintf (buf, "%d", (int) disp);
13438 }
13439}
13440
5d669648
L
13441/* Put DISP in BUF as signed hex number. */
13442
13443static void
13444print_displacement (char *buf, bfd_vma disp)
13445{
13446 bfd_signed_vma val = disp;
13447 char tmp[30];
13448 int i, j = 0;
13449
13450 if (val < 0)
13451 {
13452 buf[j++] = '-';
13453 val = -disp;
13454
13455 /* Check for possible overflow. */
13456 if (val < 0)
13457 {
13458 switch (address_mode)
13459 {
13460 case mode_64bit:
13461 strcpy (buf + j, "0x8000000000000000");
13462 break;
13463 case mode_32bit:
13464 strcpy (buf + j, "0x80000000");
13465 break;
13466 case mode_16bit:
13467 strcpy (buf + j, "0x8000");
13468 break;
13469 }
13470 return;
13471 }
13472 }
13473
13474 buf[j++] = '0';
13475 buf[j++] = 'x';
13476
0af1713e 13477 sprintf_vma (tmp, (bfd_vma) val);
5d669648
L
13478 for (i = 0; tmp[i] == '0'; i++)
13479 continue;
13480 if (tmp[i] == '\0')
13481 i--;
13482 strcpy (buf + j, tmp + i);
13483}
13484
3f31e633
JB
13485static void
13486intel_operand_size (int bytemode, int sizeflag)
13487{
43234a1e
L
13488 if (vex.evex
13489 && vex.b
13490 && (bytemode == x_mode
13491 || bytemode == evex_half_bcst_xmmq_mode))
13492 {
13493 if (vex.w)
13494 oappend ("QWORD PTR ");
13495 else
13496 oappend ("DWORD PTR ");
13497 return;
13498 }
3f31e633
JB
13499 switch (bytemode)
13500 {
13501 case b_mode:
b6169b20 13502 case b_swap_mode:
42903f7f 13503 case dqb_mode:
1ba585e8 13504 case db_mode:
3f31e633
JB
13505 oappend ("BYTE PTR ");
13506 break;
13507 case w_mode:
1ba585e8 13508 case dw_mode:
3f31e633
JB
13509 case dqw_mode:
13510 oappend ("WORD PTR ");
13511 break;
07f5af7d
L
13512 case indir_v_mode:
13513 if (address_mode == mode_64bit && isa64 == intel64)
13514 {
13515 oappend ("QWORD PTR ");
13516 break;
13517 }
1a0670f3 13518 /* Fall through. */
1a114b12 13519 case stack_v_mode:
7bb15c6f 13520 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
3f31e633
JB
13521 {
13522 oappend ("QWORD PTR ");
3f31e633
JB
13523 break;
13524 }
1a0670f3 13525 /* Fall through. */
3f31e633 13526 case v_mode:
b6169b20 13527 case v_swap_mode:
3f31e633 13528 case dq_mode:
161a04f6
L
13529 USED_REX (REX_W);
13530 if (rex & REX_W)
3f31e633 13531 oappend ("QWORD PTR ");
3f31e633 13532 else
f16cd0d5
L
13533 {
13534 if ((sizeflag & DFLAG) || bytemode == dq_mode)
13535 oappend ("DWORD PTR ");
13536 else
13537 oappend ("WORD PTR ");
13538 used_prefixes |= (prefixes & PREFIX_DATA);
13539 }
3f31e633 13540 break;
52fd6d94 13541 case z_mode:
161a04f6 13542 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
13543 *obufp++ = 'D';
13544 oappend ("WORD PTR ");
161a04f6 13545 if (!(rex & REX_W))
52fd6d94
JB
13546 used_prefixes |= (prefixes & PREFIX_DATA);
13547 break;
34b772a6
JB
13548 case a_mode:
13549 if (sizeflag & DFLAG)
13550 oappend ("QWORD PTR ");
13551 else
13552 oappend ("DWORD PTR ");
13553 used_prefixes |= (prefixes & PREFIX_DATA);
13554 break;
bc31405e
L
13555 case movsxd_mode:
13556 if (!(sizeflag & DFLAG) && isa64 == intel64)
13557 oappend ("WORD PTR ");
13558 else
13559 oappend ("DWORD PTR ");
13560 used_prefixes |= (prefixes & PREFIX_DATA);
13561 break;
3f31e633 13562 case d_mode:
539f890d
L
13563 case d_scalar_mode:
13564 case d_scalar_swap_mode:
fa99fab2 13565 case d_swap_mode:
42903f7f 13566 case dqd_mode:
3f31e633
JB
13567 oappend ("DWORD PTR ");
13568 break;
13569 case q_mode:
539f890d
L
13570 case q_scalar_mode:
13571 case q_scalar_swap_mode:
b6169b20 13572 case q_swap_mode:
3f31e633
JB
13573 oappend ("QWORD PTR ");
13574 break;
13575 case m_mode:
cb712a9e 13576 if (address_mode == mode_64bit)
3f31e633
JB
13577 oappend ("QWORD PTR ");
13578 else
13579 oappend ("DWORD PTR ");
13580 break;
13581 case f_mode:
13582 if (sizeflag & DFLAG)
13583 oappend ("FWORD PTR ");
13584 else
13585 oappend ("DWORD PTR ");
13586 used_prefixes |= (prefixes & PREFIX_DATA);
13587 break;
13588 case t_mode:
13589 oappend ("TBYTE PTR ");
13590 break;
13591 case x_mode:
b6169b20 13592 case x_swap_mode:
43234a1e
L
13593 case evex_x_gscat_mode:
13594 case evex_x_nobcst_mode:
53467f57
IT
13595 case b_scalar_mode:
13596 case w_scalar_mode:
c0f3af97
L
13597 if (need_vex)
13598 {
13599 switch (vex.length)
13600 {
13601 case 128:
13602 oappend ("XMMWORD PTR ");
13603 break;
13604 case 256:
13605 oappend ("YMMWORD PTR ");
13606 break;
43234a1e
L
13607 case 512:
13608 oappend ("ZMMWORD PTR ");
13609 break;
c0f3af97
L
13610 default:
13611 abort ();
13612 }
13613 }
13614 else
13615 oappend ("XMMWORD PTR ");
13616 break;
13617 case xmm_mode:
3f31e633
JB
13618 oappend ("XMMWORD PTR ");
13619 break;
43234a1e
L
13620 case ymm_mode:
13621 oappend ("YMMWORD PTR ");
13622 break;
c0f3af97 13623 case xmmq_mode:
43234a1e 13624 case evex_half_bcst_xmmq_mode:
c0f3af97
L
13625 if (!need_vex)
13626 abort ();
13627
13628 switch (vex.length)
13629 {
13630 case 128:
13631 oappend ("QWORD PTR ");
13632 break;
13633 case 256:
13634 oappend ("XMMWORD PTR ");
13635 break;
43234a1e
L
13636 case 512:
13637 oappend ("YMMWORD PTR ");
13638 break;
c0f3af97
L
13639 default:
13640 abort ();
13641 }
13642 break;
6c30d220
L
13643 case xmm_mb_mode:
13644 if (!need_vex)
13645 abort ();
13646
13647 switch (vex.length)
13648 {
13649 case 128:
13650 case 256:
43234a1e 13651 case 512:
6c30d220
L
13652 oappend ("BYTE PTR ");
13653 break;
13654 default:
13655 abort ();
13656 }
13657 break;
13658 case xmm_mw_mode:
13659 if (!need_vex)
13660 abort ();
13661
13662 switch (vex.length)
13663 {
13664 case 128:
13665 case 256:
43234a1e 13666 case 512:
6c30d220
L
13667 oappend ("WORD PTR ");
13668 break;
13669 default:
13670 abort ();
13671 }
13672 break;
13673 case xmm_md_mode:
13674 if (!need_vex)
13675 abort ();
13676
13677 switch (vex.length)
13678 {
13679 case 128:
13680 case 256:
43234a1e 13681 case 512:
6c30d220
L
13682 oappend ("DWORD PTR ");
13683 break;
13684 default:
13685 abort ();
13686 }
13687 break;
13688 case xmm_mq_mode:
13689 if (!need_vex)
13690 abort ();
13691
13692 switch (vex.length)
13693 {
13694 case 128:
13695 case 256:
43234a1e 13696 case 512:
6c30d220
L
13697 oappend ("QWORD PTR ");
13698 break;
13699 default:
13700 abort ();
13701 }
13702 break;
13703 case xmmdw_mode:
13704 if (!need_vex)
13705 abort ();
13706
13707 switch (vex.length)
13708 {
13709 case 128:
13710 oappend ("WORD PTR ");
13711 break;
13712 case 256:
13713 oappend ("DWORD PTR ");
13714 break;
43234a1e
L
13715 case 512:
13716 oappend ("QWORD PTR ");
13717 break;
6c30d220
L
13718 default:
13719 abort ();
13720 }
13721 break;
13722 case xmmqd_mode:
13723 if (!need_vex)
13724 abort ();
13725
13726 switch (vex.length)
13727 {
13728 case 128:
13729 oappend ("DWORD PTR ");
13730 break;
13731 case 256:
13732 oappend ("QWORD PTR ");
13733 break;
43234a1e
L
13734 case 512:
13735 oappend ("XMMWORD PTR ");
13736 break;
6c30d220
L
13737 default:
13738 abort ();
13739 }
13740 break;
c0f3af97
L
13741 case ymmq_mode:
13742 if (!need_vex)
13743 abort ();
13744
13745 switch (vex.length)
13746 {
13747 case 128:
13748 oappend ("QWORD PTR ");
13749 break;
13750 case 256:
13751 oappend ("YMMWORD PTR ");
13752 break;
43234a1e
L
13753 case 512:
13754 oappend ("ZMMWORD PTR ");
13755 break;
c0f3af97
L
13756 default:
13757 abort ();
13758 }
13759 break;
6c30d220
L
13760 case ymmxmm_mode:
13761 if (!need_vex)
13762 abort ();
13763
13764 switch (vex.length)
13765 {
13766 case 128:
13767 case 256:
13768 oappend ("XMMWORD PTR ");
13769 break;
13770 default:
13771 abort ();
13772 }
13773 break;
fb9c77c7
L
13774 case o_mode:
13775 oappend ("OWORD PTR ");
13776 break;
43234a1e 13777 case xmm_mdq_mode:
0bfee649 13778 case vex_w_dq_mode:
1c480963 13779 case vex_scalar_w_dq_mode:
0bfee649
L
13780 if (!need_vex)
13781 abort ();
13782
13783 if (vex.w)
13784 oappend ("QWORD PTR ");
13785 else
13786 oappend ("DWORD PTR ");
13787 break;
43234a1e
L
13788 case vex_vsib_d_w_dq_mode:
13789 case vex_vsib_q_w_dq_mode:
13790 if (!need_vex)
13791 abort ();
13792
13793 if (!vex.evex)
13794 {
13795 if (vex.w)
13796 oappend ("QWORD PTR ");
13797 else
13798 oappend ("DWORD PTR ");
13799 }
13800 else
13801 {
b28d1bda
IT
13802 switch (vex.length)
13803 {
13804 case 128:
13805 oappend ("XMMWORD PTR ");
13806 break;
13807 case 256:
13808 oappend ("YMMWORD PTR ");
13809 break;
13810 case 512:
13811 oappend ("ZMMWORD PTR ");
13812 break;
13813 default:
13814 abort ();
13815 }
43234a1e
L
13816 }
13817 break;
5fc35d96
IT
13818 case vex_vsib_q_w_d_mode:
13819 case vex_vsib_d_w_d_mode:
b28d1bda 13820 if (!need_vex || !vex.evex)
5fc35d96
IT
13821 abort ();
13822
b28d1bda
IT
13823 switch (vex.length)
13824 {
13825 case 128:
13826 oappend ("QWORD PTR ");
13827 break;
13828 case 256:
13829 oappend ("XMMWORD PTR ");
13830 break;
13831 case 512:
13832 oappend ("YMMWORD PTR ");
13833 break;
13834 default:
13835 abort ();
13836 }
5fc35d96
IT
13837
13838 break;
1ba585e8
IT
13839 case mask_bd_mode:
13840 if (!need_vex || vex.length != 128)
13841 abort ();
13842 if (vex.w)
13843 oappend ("DWORD PTR ");
13844 else
13845 oappend ("BYTE PTR ");
13846 break;
43234a1e
L
13847 case mask_mode:
13848 if (!need_vex)
13849 abort ();
1ba585e8
IT
13850 if (vex.w)
13851 oappend ("QWORD PTR ");
13852 else
13853 oappend ("WORD PTR ");
43234a1e 13854 break;
6c75cc62 13855 case v_bnd_mode:
d276ec69 13856 case v_bndmk_mode:
3f31e633
JB
13857 default:
13858 break;
13859 }
13860}
13861
252b5132 13862static void
c0f3af97 13863OP_E_register (int bytemode, int sizeflag)
252b5132 13864{
c0f3af97
L
13865 int reg = modrm.rm;
13866 const char **names;
252b5132 13867
c0f3af97
L
13868 USED_REX (REX_B);
13869 if ((rex & REX_B))
13870 reg += 8;
252b5132 13871
b6169b20 13872 if ((sizeflag & SUFFIX_ALWAYS)
1ba585e8 13873 && (bytemode == b_swap_mode
9f79e886 13874 || bytemode == bnd_swap_mode
60227d64 13875 || bytemode == v_swap_mode))
b6169b20
L
13876 swap_operand ();
13877
c0f3af97 13878 switch (bytemode)
252b5132 13879 {
c0f3af97 13880 case b_mode:
b6169b20 13881 case b_swap_mode:
c0f3af97
L
13882 USED_REX (0);
13883 if (rex)
13884 names = names8rex;
13885 else
13886 names = names8;
13887 break;
13888 case w_mode:
13889 names = names16;
13890 break;
13891 case d_mode:
1ba585e8
IT
13892 case dw_mode:
13893 case db_mode:
c0f3af97
L
13894 names = names32;
13895 break;
13896 case q_mode:
13897 names = names64;
13898 break;
13899 case m_mode:
6c75cc62 13900 case v_bnd_mode:
c0f3af97
L
13901 names = address_mode == mode_64bit ? names64 : names32;
13902 break;
7e8b059b 13903 case bnd_mode:
9f79e886 13904 case bnd_swap_mode:
0d96e4df
L
13905 if (reg > 0x3)
13906 {
13907 oappend ("(bad)");
13908 return;
13909 }
7e8b059b
L
13910 names = names_bnd;
13911 break;
07f5af7d
L
13912 case indir_v_mode:
13913 if (address_mode == mode_64bit && isa64 == intel64)
13914 {
13915 names = names64;
13916 break;
13917 }
1a0670f3 13918 /* Fall through. */
c0f3af97 13919 case stack_v_mode:
7bb15c6f 13920 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
252b5132 13921 {
c0f3af97 13922 names = names64;
252b5132 13923 break;
252b5132 13924 }
c0f3af97 13925 bytemode = v_mode;
1a0670f3 13926 /* Fall through. */
c0f3af97 13927 case v_mode:
b6169b20 13928 case v_swap_mode:
c0f3af97
L
13929 case dq_mode:
13930 case dqb_mode:
13931 case dqd_mode:
13932 case dqw_mode:
13933 USED_REX (REX_W);
13934 if (rex & REX_W)
13935 names = names64;
c0f3af97 13936 else
f16cd0d5 13937 {
7bb15c6f 13938 if ((sizeflag & DFLAG)
f16cd0d5
L
13939 || (bytemode != v_mode
13940 && bytemode != v_swap_mode))
13941 names = names32;
13942 else
13943 names = names16;
13944 used_prefixes |= (prefixes & PREFIX_DATA);
13945 }
c0f3af97 13946 break;
bc31405e
L
13947 case movsxd_mode:
13948 if (!(sizeflag & DFLAG) && isa64 == intel64)
13949 names = names16;
13950 else
13951 names = names32;
13952 used_prefixes |= (prefixes & PREFIX_DATA);
13953 break;
de89d0a3
IT
13954 case va_mode:
13955 names = (address_mode == mode_64bit
13956 ? names64 : names32);
13957 if (!(prefixes & PREFIX_ADDR))
aa178437
IT
13958 names = (address_mode == mode_16bit
13959 ? names16 : names);
de89d0a3
IT
13960 else
13961 {
13962 /* Remove "addr16/addr32". */
13963 all_prefixes[last_addr_prefix] = 0;
13964 names = (address_mode != mode_32bit
13965 ? names32 : names16);
13966 used_prefixes |= PREFIX_ADDR;
13967 }
13968 break;
1ba585e8 13969 case mask_bd_mode:
43234a1e 13970 case mask_mode:
9889cbb1
L
13971 if (reg > 0x7)
13972 {
13973 oappend ("(bad)");
13974 return;
13975 }
43234a1e
L
13976 names = names_mask;
13977 break;
c0f3af97
L
13978 case 0:
13979 return;
13980 default:
13981 oappend (INTERNAL_DISASSEMBLER_ERROR);
252b5132
RH
13982 return;
13983 }
c0f3af97
L
13984 oappend (names[reg]);
13985}
13986
13987static void
c1e679ec 13988OP_E_memory (int bytemode, int sizeflag)
c0f3af97
L
13989{
13990 bfd_vma disp = 0;
13991 int add = (rex & REX_B) ? 8 : 0;
13992 int riprel = 0;
43234a1e
L
13993 int shift;
13994
13995 if (vex.evex)
13996 {
13997 /* In EVEX, if operand doesn't allow broadcast, vex.b should be 0. */
13998 if (vex.b
13999 && bytemode != x_mode
90a915bf 14000 && bytemode != xmmq_mode
43234a1e
L
14001 && bytemode != evex_half_bcst_xmmq_mode)
14002 {
14003 BadOp ();
14004 return;
14005 }
14006 switch (bytemode)
14007 {
1ba585e8
IT
14008 case dqw_mode:
14009 case dw_mode:
1ba585e8
IT
14010 shift = 1;
14011 break;
14012 case dqb_mode:
14013 case db_mode:
14014 shift = 0;
14015 break;
b50c9f31
JB
14016 case dq_mode:
14017 if (address_mode != mode_64bit)
14018 {
14019 shift = 2;
14020 break;
14021 }
14022 /* fall through */
43234a1e 14023 case vex_vsib_d_w_dq_mode:
5fc35d96 14024 case vex_vsib_d_w_d_mode:
eaa9d1ad 14025 case vex_vsib_q_w_dq_mode:
5fc35d96 14026 case vex_vsib_q_w_d_mode:
43234a1e
L
14027 case evex_x_gscat_mode:
14028 case xmm_mdq_mode:
14029 shift = vex.w ? 3 : 2;
14030 break;
43234a1e
L
14031 case x_mode:
14032 case evex_half_bcst_xmmq_mode:
90a915bf 14033 case xmmq_mode:
43234a1e
L
14034 if (vex.b)
14035 {
14036 shift = vex.w ? 3 : 2;
14037 break;
14038 }
1a0670f3 14039 /* Fall through. */
43234a1e
L
14040 case xmmqd_mode:
14041 case xmmdw_mode:
43234a1e
L
14042 case ymmq_mode:
14043 case evex_x_nobcst_mode:
14044 case x_swap_mode:
14045 switch (vex.length)
14046 {
14047 case 128:
14048 shift = 4;
14049 break;
14050 case 256:
14051 shift = 5;
14052 break;
14053 case 512:
14054 shift = 6;
14055 break;
14056 default:
14057 abort ();
14058 }
14059 break;
14060 case ymm_mode:
14061 shift = 5;
14062 break;
14063 case xmm_mode:
14064 shift = 4;
14065 break;
14066 case xmm_mq_mode:
14067 case q_mode:
14068 case q_scalar_mode:
14069 case q_swap_mode:
14070 case q_scalar_swap_mode:
14071 shift = 3;
14072 break;
14073 case dqd_mode:
14074 case xmm_md_mode:
14075 case d_mode:
14076 case d_scalar_mode:
14077 case d_swap_mode:
14078 case d_scalar_swap_mode:
14079 shift = 2;
14080 break;
5074ad8a 14081 case w_scalar_mode:
43234a1e
L
14082 case xmm_mw_mode:
14083 shift = 1;
14084 break;
5074ad8a 14085 case b_scalar_mode:
43234a1e
L
14086 case xmm_mb_mode:
14087 shift = 0;
14088 break;
14089 default:
14090 abort ();
14091 }
14092 /* Make necessary corrections to shift for modes that need it.
14093 For these modes we currently have shift 4, 5 or 6 depending on
14094 vex.length (it corresponds to xmmword, ymmword or zmmword
14095 operand). We might want to make it 3, 4 or 5 (e.g. for
14096 xmmq_mode). In case of broadcast enabled the corrections
14097 aren't needed, as element size is always 32 or 64 bits. */
90a915bf
IT
14098 if (!vex.b
14099 && (bytemode == xmmq_mode
14100 || bytemode == evex_half_bcst_xmmq_mode))
43234a1e
L
14101 shift -= 1;
14102 else if (bytemode == xmmqd_mode)
14103 shift -= 2;
14104 else if (bytemode == xmmdw_mode)
14105 shift -= 3;
b28d1bda
IT
14106 else if (bytemode == ymmq_mode && vex.length == 128)
14107 shift -= 1;
43234a1e
L
14108 }
14109 else
14110 shift = 0;
252b5132 14111
c0f3af97 14112 USED_REX (REX_B);
3f31e633
JB
14113 if (intel_syntax)
14114 intel_operand_size (bytemode, sizeflag);
252b5132
RH
14115 append_seg ();
14116
5d669648 14117 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132 14118 {
5d669648
L
14119 /* 32/64 bit address mode */
14120 int havedisp;
252b5132
RH
14121 int havesib;
14122 int havebase;
0f7da397 14123 int haveindex;
20afcfb7 14124 int needindex;
1bc60e56 14125 int needaddr32;
82c18208 14126 int base, rbase;
91d6fa6a 14127 int vindex = 0;
252b5132 14128 int scale = 0;
7e8b059b
L
14129 int addr32flag = !((sizeflag & AFLAG)
14130 || bytemode == v_bnd_mode
d276ec69 14131 || bytemode == v_bndmk_mode
9f79e886
JB
14132 || bytemode == bnd_mode
14133 || bytemode == bnd_swap_mode);
6c30d220
L
14134 const char **indexes64 = names64;
14135 const char **indexes32 = names32;
252b5132
RH
14136
14137 havesib = 0;
14138 havebase = 1;
0f7da397 14139 haveindex = 0;
7967e09e 14140 base = modrm.rm;
252b5132
RH
14141
14142 if (base == 4)
14143 {
14144 havesib = 1;
dfc8cf43 14145 vindex = sib.index;
161a04f6
L
14146 USED_REX (REX_X);
14147 if (rex & REX_X)
91d6fa6a 14148 vindex += 8;
6c30d220
L
14149 switch (bytemode)
14150 {
14151 case vex_vsib_d_w_dq_mode:
5fc35d96 14152 case vex_vsib_d_w_d_mode:
6c30d220 14153 case vex_vsib_q_w_dq_mode:
5fc35d96 14154 case vex_vsib_q_w_d_mode:
6c30d220
L
14155 if (!need_vex)
14156 abort ();
43234a1e
L
14157 if (vex.evex)
14158 {
14159 if (!vex.v)
14160 vindex += 16;
14161 }
6c30d220
L
14162
14163 haveindex = 1;
14164 switch (vex.length)
14165 {
14166 case 128:
7bb15c6f 14167 indexes64 = indexes32 = names_xmm;
6c30d220
L
14168 break;
14169 case 256:
5fc35d96
IT
14170 if (!vex.w
14171 || bytemode == vex_vsib_q_w_dq_mode
14172 || bytemode == vex_vsib_q_w_d_mode)
7bb15c6f 14173 indexes64 = indexes32 = names_ymm;
6c30d220 14174 else
7bb15c6f 14175 indexes64 = indexes32 = names_xmm;
6c30d220 14176 break;
43234a1e 14177 case 512:
5fc35d96
IT
14178 if (!vex.w
14179 || bytemode == vex_vsib_q_w_dq_mode
14180 || bytemode == vex_vsib_q_w_d_mode)
43234a1e
L
14181 indexes64 = indexes32 = names_zmm;
14182 else
14183 indexes64 = indexes32 = names_ymm;
14184 break;
6c30d220
L
14185 default:
14186 abort ();
14187 }
14188 break;
14189 default:
14190 haveindex = vindex != 4;
14191 break;
14192 }
14193 scale = sib.scale;
14194 base = sib.base;
252b5132
RH
14195 codep++;
14196 }
82c18208 14197 rbase = base + add;
252b5132 14198
7967e09e 14199 switch (modrm.mod)
252b5132
RH
14200 {
14201 case 0:
82c18208 14202 if (base == 5)
252b5132
RH
14203 {
14204 havebase = 0;
cb712a9e 14205 if (address_mode == mode_64bit && !havesib)
52b15da3
JH
14206 riprel = 1;
14207 disp = get32s ();
d276ec69
JB
14208 if (riprel && bytemode == v_bndmk_mode)
14209 {
14210 oappend ("(bad)");
14211 return;
14212 }
252b5132
RH
14213 }
14214 break;
14215 case 1:
14216 FETCH_DATA (the_info, codep + 1);
14217 disp = *codep++;
14218 if ((disp & 0x80) != 0)
14219 disp -= 0x100;
43234a1e
L
14220 if (vex.evex && shift > 0)
14221 disp <<= shift;
252b5132
RH
14222 break;
14223 case 2:
52b15da3 14224 disp = get32s ();
252b5132
RH
14225 break;
14226 }
14227
1bc60e56
L
14228 needindex = 0;
14229 needaddr32 = 0;
14230 if (havesib
14231 && !havebase
14232 && !haveindex
14233 && address_mode != mode_16bit)
14234 {
14235 if (address_mode == mode_64bit)
14236 {
14237 /* Display eiz instead of addr32. */
14238 needindex = addr32flag;
14239 needaddr32 = 1;
14240 }
14241 else
14242 {
14243 /* In 32-bit mode, we need index register to tell [offset]
14244 from [eiz*1 + offset]. */
14245 needindex = 1;
14246 }
14247 }
14248
20afcfb7
L
14249 havedisp = (havebase
14250 || needindex
14251 || (havesib && (haveindex || scale != 0)));
5d669648 14252
252b5132 14253 if (!intel_syntax)
82c18208 14254 if (modrm.mod != 0 || base == 5)
db6eb5be 14255 {
5d669648
L
14256 if (havedisp || riprel)
14257 print_displacement (scratchbuf, disp);
14258 else
14259 print_operand_value (scratchbuf, 1, disp);
db6eb5be 14260 oappend (scratchbuf);
52b15da3
JH
14261 if (riprel)
14262 {
14263 set_op (disp, 1);
28596323 14264 oappend (!addr32flag ? "(%rip)" : "(%eip)");
52b15da3 14265 }
db6eb5be 14266 }
2da11e11 14267
c1dc7af5 14268 if ((havebase || haveindex || needindex || needaddr32 || riprel)
7e8b059b 14269 && (bytemode != v_bnd_mode)
d276ec69 14270 && (bytemode != v_bndmk_mode)
9f79e886
JB
14271 && (bytemode != bnd_mode)
14272 && (bytemode != bnd_swap_mode))
87767711
JB
14273 used_prefixes |= PREFIX_ADDR;
14274
5d669648 14275 if (havedisp || (intel_syntax && riprel))
252b5132 14276 {
252b5132 14277 *obufp++ = open_char;
52b15da3 14278 if (intel_syntax && riprel)
185b1163
L
14279 {
14280 set_op (disp, 1);
28596323 14281 oappend (!addr32flag ? "rip" : "eip");
185b1163 14282 }
db6eb5be 14283 *obufp = '\0';
252b5132 14284 if (havebase)
7e8b059b 14285 oappend (address_mode == mode_64bit && !addr32flag
82c18208 14286 ? names64[rbase] : names32[rbase]);
252b5132
RH
14287 if (havesib)
14288 {
db51cc60
L
14289 /* ESP/RSP won't allow index. If base isn't ESP/RSP,
14290 print index to tell base + index from base. */
14291 if (scale != 0
20afcfb7 14292 || needindex
db51cc60
L
14293 || haveindex
14294 || (havebase && base != ESP_REG_NUM))
252b5132 14295 {
9306ca4a 14296 if (!intel_syntax || havebase)
db6eb5be 14297 {
9306ca4a
JB
14298 *obufp++ = separator_char;
14299 *obufp = '\0';
db6eb5be 14300 }
db51cc60 14301 if (haveindex)
7e8b059b 14302 oappend (address_mode == mode_64bit && !addr32flag
6c30d220 14303 ? indexes64[vindex] : indexes32[vindex]);
db51cc60 14304 else
7e8b059b 14305 oappend (address_mode == mode_64bit && !addr32flag
db51cc60
L
14306 ? index64 : index32);
14307
db6eb5be
AM
14308 *obufp++ = scale_char;
14309 *obufp = '\0';
14310 sprintf (scratchbuf, "%d", 1 << scale);
14311 oappend (scratchbuf);
14312 }
252b5132 14313 }
185b1163 14314 if (intel_syntax
82c18208 14315 && (disp || modrm.mod != 0 || base == 5))
3d456fa1 14316 {
db51cc60 14317 if (!havedisp || (bfd_signed_vma) disp >= 0)
3d456fa1
JB
14318 {
14319 *obufp++ = '+';
14320 *obufp = '\0';
14321 }
05203043 14322 else if (modrm.mod != 1 && disp != -disp)
3d456fa1
JB
14323 {
14324 *obufp++ = '-';
14325 *obufp = '\0';
14326 disp = - (bfd_signed_vma) disp;
14327 }
14328
db51cc60
L
14329 if (havedisp)
14330 print_displacement (scratchbuf, disp);
14331 else
14332 print_operand_value (scratchbuf, 1, disp);
3d456fa1
JB
14333 oappend (scratchbuf);
14334 }
252b5132
RH
14335
14336 *obufp++ = close_char;
db6eb5be 14337 *obufp = '\0';
252b5132
RH
14338 }
14339 else if (intel_syntax)
db6eb5be 14340 {
82c18208 14341 if (modrm.mod != 0 || base == 5)
db6eb5be 14342 {
285ca992 14343 if (!active_seg_prefix)
252b5132 14344 {
d708bcba 14345 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
14346 oappend (":");
14347 }
52b15da3 14348 print_operand_value (scratchbuf, 1, disp);
db6eb5be
AM
14349 oappend (scratchbuf);
14350 }
14351 }
252b5132
RH
14352 }
14353 else
f16cd0d5
L
14354 {
14355 /* 16 bit address mode */
14356 used_prefixes |= prefixes & PREFIX_ADDR;
7967e09e 14357 switch (modrm.mod)
252b5132
RH
14358 {
14359 case 0:
7967e09e 14360 if (modrm.rm == 6)
252b5132
RH
14361 {
14362 disp = get16 ();
14363 if ((disp & 0x8000) != 0)
14364 disp -= 0x10000;
14365 }
14366 break;
14367 case 1:
14368 FETCH_DATA (the_info, codep + 1);
14369 disp = *codep++;
14370 if ((disp & 0x80) != 0)
14371 disp -= 0x100;
65f3ed04
JB
14372 if (vex.evex && shift > 0)
14373 disp <<= shift;
252b5132
RH
14374 break;
14375 case 2:
14376 disp = get16 ();
14377 if ((disp & 0x8000) != 0)
14378 disp -= 0x10000;
14379 break;
14380 }
14381
14382 if (!intel_syntax)
7967e09e 14383 if (modrm.mod != 0 || modrm.rm == 6)
db6eb5be 14384 {
5d669648 14385 print_displacement (scratchbuf, disp);
db6eb5be
AM
14386 oappend (scratchbuf);
14387 }
252b5132 14388
7967e09e 14389 if (modrm.mod != 0 || modrm.rm != 6)
252b5132
RH
14390 {
14391 *obufp++ = open_char;
db6eb5be 14392 *obufp = '\0';
7967e09e 14393 oappend (index16[modrm.rm]);
5d669648
L
14394 if (intel_syntax
14395 && (disp || modrm.mod != 0 || modrm.rm == 6))
3d456fa1 14396 {
5d669648 14397 if ((bfd_signed_vma) disp >= 0)
3d456fa1
JB
14398 {
14399 *obufp++ = '+';
14400 *obufp = '\0';
14401 }
7967e09e 14402 else if (modrm.mod != 1)
3d456fa1
JB
14403 {
14404 *obufp++ = '-';
14405 *obufp = '\0';
14406 disp = - (bfd_signed_vma) disp;
14407 }
14408
5d669648 14409 print_displacement (scratchbuf, disp);
3d456fa1
JB
14410 oappend (scratchbuf);
14411 }
14412
db6eb5be
AM
14413 *obufp++ = close_char;
14414 *obufp = '\0';
252b5132 14415 }
3d456fa1
JB
14416 else if (intel_syntax)
14417 {
285ca992 14418 if (!active_seg_prefix)
3d456fa1
JB
14419 {
14420 oappend (names_seg[ds_reg - es_reg]);
14421 oappend (":");
14422 }
14423 print_operand_value (scratchbuf, 1, disp & 0xffff);
14424 oappend (scratchbuf);
14425 }
252b5132 14426 }
43234a1e
L
14427 if (vex.evex && vex.b
14428 && (bytemode == x_mode
90a915bf 14429 || bytemode == xmmq_mode
43234a1e
L
14430 || bytemode == evex_half_bcst_xmmq_mode))
14431 {
90a915bf
IT
14432 if (vex.w
14433 || bytemode == xmmq_mode
14434 || bytemode == evex_half_bcst_xmmq_mode)
b28d1bda
IT
14435 {
14436 switch (vex.length)
14437 {
14438 case 128:
14439 oappend ("{1to2}");
14440 break;
14441 case 256:
14442 oappend ("{1to4}");
14443 break;
14444 case 512:
14445 oappend ("{1to8}");
14446 break;
14447 default:
14448 abort ();
14449 }
14450 }
43234a1e 14451 else
b28d1bda
IT
14452 {
14453 switch (vex.length)
14454 {
14455 case 128:
14456 oappend ("{1to4}");
14457 break;
14458 case 256:
14459 oappend ("{1to8}");
14460 break;
14461 case 512:
14462 oappend ("{1to16}");
14463 break;
14464 default:
14465 abort ();
14466 }
14467 }
43234a1e 14468 }
252b5132
RH
14469}
14470
c0f3af97 14471static void
8b3f93e7 14472OP_E (int bytemode, int sizeflag)
c0f3af97
L
14473{
14474 /* Skip mod/rm byte. */
14475 MODRM_CHECK;
14476 codep++;
14477
14478 if (modrm.mod == 3)
14479 OP_E_register (bytemode, sizeflag);
14480 else
c1e679ec 14481 OP_E_memory (bytemode, sizeflag);
c0f3af97
L
14482}
14483
252b5132 14484static void
26ca5450 14485OP_G (int bytemode, int sizeflag)
252b5132 14486{
52b15da3 14487 int add = 0;
c0a30a9f 14488 const char **names;
161a04f6
L
14489 USED_REX (REX_R);
14490 if (rex & REX_R)
52b15da3 14491 add += 8;
252b5132
RH
14492 switch (bytemode)
14493 {
14494 case b_mode:
52b15da3
JH
14495 USED_REX (0);
14496 if (rex)
7967e09e 14497 oappend (names8rex[modrm.reg + add]);
52b15da3 14498 else
7967e09e 14499 oappend (names8[modrm.reg + add]);
252b5132
RH
14500 break;
14501 case w_mode:
7967e09e 14502 oappend (names16[modrm.reg + add]);
252b5132
RH
14503 break;
14504 case d_mode:
1ba585e8
IT
14505 case db_mode:
14506 case dw_mode:
7967e09e 14507 oappend (names32[modrm.reg + add]);
52b15da3
JH
14508 break;
14509 case q_mode:
7967e09e 14510 oappend (names64[modrm.reg + add]);
252b5132 14511 break;
7e8b059b 14512 case bnd_mode:
0d96e4df
L
14513 if (modrm.reg > 0x3)
14514 {
14515 oappend ("(bad)");
14516 return;
14517 }
7e8b059b
L
14518 oappend (names_bnd[modrm.reg]);
14519 break;
252b5132 14520 case v_mode:
9306ca4a 14521 case dq_mode:
42903f7f
L
14522 case dqb_mode:
14523 case dqd_mode:
9306ca4a 14524 case dqw_mode:
bc31405e 14525 case movsxd_mode:
161a04f6
L
14526 USED_REX (REX_W);
14527 if (rex & REX_W)
7967e09e 14528 oappend (names64[modrm.reg + add]);
252b5132 14529 else
f16cd0d5 14530 {
bc31405e
L
14531 if ((sizeflag & DFLAG)
14532 || (bytemode != v_mode && bytemode != movsxd_mode))
f16cd0d5
L
14533 oappend (names32[modrm.reg + add]);
14534 else
14535 oappend (names16[modrm.reg + add]);
14536 used_prefixes |= (prefixes & PREFIX_DATA);
14537 }
252b5132 14538 break;
c0a30a9f
L
14539 case va_mode:
14540 names = (address_mode == mode_64bit
14541 ? names64 : names32);
14542 if (!(prefixes & PREFIX_ADDR))
14543 {
14544 if (address_mode == mode_16bit)
14545 names = names16;
14546 }
14547 else
14548 {
14549 /* Remove "addr16/addr32". */
14550 all_prefixes[last_addr_prefix] = 0;
14551 names = (address_mode != mode_32bit
14552 ? names32 : names16);
14553 used_prefixes |= PREFIX_ADDR;
14554 }
14555 oappend (names[modrm.reg + add]);
14556 break;
90700ea2 14557 case m_mode:
cb712a9e 14558 if (address_mode == mode_64bit)
7967e09e 14559 oappend (names64[modrm.reg + add]);
90700ea2 14560 else
7967e09e 14561 oappend (names32[modrm.reg + add]);
90700ea2 14562 break;
1ba585e8 14563 case mask_bd_mode:
43234a1e 14564 case mask_mode:
9889cbb1
L
14565 if ((modrm.reg + add) > 0x7)
14566 {
14567 oappend ("(bad)");
14568 return;
14569 }
43234a1e
L
14570 oappend (names_mask[modrm.reg + add]);
14571 break;
252b5132
RH
14572 default:
14573 oappend (INTERNAL_DISASSEMBLER_ERROR);
14574 break;
14575 }
14576}
14577
52b15da3 14578static bfd_vma
26ca5450 14579get64 (void)
52b15da3 14580{
5dd0794d 14581 bfd_vma x;
52b15da3 14582#ifdef BFD64
5dd0794d
AM
14583 unsigned int a;
14584 unsigned int b;
14585
52b15da3
JH
14586 FETCH_DATA (the_info, codep + 8);
14587 a = *codep++ & 0xff;
14588 a |= (*codep++ & 0xff) << 8;
14589 a |= (*codep++ & 0xff) << 16;
070fe95d 14590 a |= (*codep++ & 0xffu) << 24;
5dd0794d 14591 b = *codep++ & 0xff;
52b15da3
JH
14592 b |= (*codep++ & 0xff) << 8;
14593 b |= (*codep++ & 0xff) << 16;
070fe95d 14594 b |= (*codep++ & 0xffu) << 24;
52b15da3
JH
14595 x = a + ((bfd_vma) b << 32);
14596#else
6608db57 14597 abort ();
5dd0794d 14598 x = 0;
52b15da3
JH
14599#endif
14600 return x;
14601}
14602
14603static bfd_signed_vma
26ca5450 14604get32 (void)
252b5132 14605{
52b15da3 14606 bfd_signed_vma x = 0;
252b5132
RH
14607
14608 FETCH_DATA (the_info, codep + 4);
52b15da3
JH
14609 x = *codep++ & (bfd_signed_vma) 0xff;
14610 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
14611 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
14612 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
14613 return x;
14614}
14615
14616static bfd_signed_vma
26ca5450 14617get32s (void)
52b15da3
JH
14618{
14619 bfd_signed_vma x = 0;
14620
14621 FETCH_DATA (the_info, codep + 4);
14622 x = *codep++ & (bfd_signed_vma) 0xff;
14623 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
14624 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
14625 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
14626
14627 x = (x ^ ((bfd_signed_vma) 1 << 31)) - ((bfd_signed_vma) 1 << 31);
14628
252b5132
RH
14629 return x;
14630}
14631
14632static int
26ca5450 14633get16 (void)
252b5132
RH
14634{
14635 int x = 0;
14636
14637 FETCH_DATA (the_info, codep + 2);
14638 x = *codep++ & 0xff;
14639 x |= (*codep++ & 0xff) << 8;
14640 return x;
14641}
14642
14643static void
26ca5450 14644set_op (bfd_vma op, int riprel)
252b5132
RH
14645{
14646 op_index[op_ad] = op_ad;
cb712a9e 14647 if (address_mode == mode_64bit)
7081ff04
AJ
14648 {
14649 op_address[op_ad] = op;
14650 op_riprel[op_ad] = riprel;
14651 }
14652 else
14653 {
14654 /* Mask to get a 32-bit address. */
14655 op_address[op_ad] = op & 0xffffffff;
14656 op_riprel[op_ad] = riprel & 0xffffffff;
14657 }
252b5132
RH
14658}
14659
14660static void
26ca5450 14661OP_REG (int code, int sizeflag)
252b5132 14662{
2da11e11 14663 const char *s;
9b60702d 14664 int add;
de882298
RM
14665
14666 switch (code)
14667 {
14668 case es_reg: case ss_reg: case cs_reg:
14669 case ds_reg: case fs_reg: case gs_reg:
14670 oappend (names_seg[code - es_reg]);
14671 return;
14672 }
14673
161a04f6
L
14674 USED_REX (REX_B);
14675 if (rex & REX_B)
52b15da3 14676 add = 8;
9b60702d
L
14677 else
14678 add = 0;
52b15da3
JH
14679
14680 switch (code)
14681 {
52b15da3
JH
14682 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
14683 case sp_reg: case bp_reg: case si_reg: case di_reg:
14684 s = names16[code - ax_reg + add];
14685 break;
52b15da3
JH
14686 case al_reg: case ah_reg: case cl_reg: case ch_reg:
14687 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
14688 USED_REX (0);
14689 if (rex)
14690 s = names8rex[code - al_reg + add];
14691 else
14692 s = names8[code - al_reg];
14693 break;
6439fc28
AM
14694 case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg:
14695 case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg:
7bb15c6f 14696 if (address_mode == mode_64bit
6c067bbb 14697 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
14698 {
14699 s = names64[code - rAX_reg + add];
14700 break;
14701 }
14702 code += eAX_reg - rAX_reg;
6608db57 14703 /* Fall through. */
52b15da3
JH
14704 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
14705 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
14706 USED_REX (REX_W);
14707 if (rex & REX_W)
52b15da3 14708 s = names64[code - eAX_reg + add];
52b15da3 14709 else
f16cd0d5
L
14710 {
14711 if (sizeflag & DFLAG)
14712 s = names32[code - eAX_reg + add];
14713 else
14714 s = names16[code - eAX_reg + add];
14715 used_prefixes |= (prefixes & PREFIX_DATA);
14716 }
52b15da3 14717 break;
52b15da3
JH
14718 default:
14719 s = INTERNAL_DISASSEMBLER_ERROR;
14720 break;
14721 }
14722 oappend (s);
14723}
14724
14725static void
26ca5450 14726OP_IMREG (int code, int sizeflag)
52b15da3
JH
14727{
14728 const char *s;
252b5132
RH
14729
14730 switch (code)
14731 {
14732 case indir_dx_reg:
d708bcba 14733 if (intel_syntax)
52fd6d94 14734 s = "dx";
d708bcba 14735 else
db6eb5be 14736 s = "(%dx)";
252b5132
RH
14737 break;
14738 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
14739 case sp_reg: case bp_reg: case si_reg: case di_reg:
14740 s = names16[code - ax_reg];
14741 break;
14742 case es_reg: case ss_reg: case cs_reg:
14743 case ds_reg: case fs_reg: case gs_reg:
14744 s = names_seg[code - es_reg];
14745 break;
14746 case al_reg: case ah_reg: case cl_reg: case ch_reg:
14747 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
52b15da3
JH
14748 USED_REX (0);
14749 if (rex)
14750 s = names8rex[code - al_reg];
14751 else
14752 s = names8[code - al_reg];
252b5132
RH
14753 break;
14754 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
14755 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
14756 USED_REX (REX_W);
14757 if (rex & REX_W)
52b15da3 14758 s = names64[code - eAX_reg];
252b5132 14759 else
f16cd0d5
L
14760 {
14761 if (sizeflag & DFLAG)
14762 s = names32[code - eAX_reg];
14763 else
14764 s = names16[code - eAX_reg];
14765 used_prefixes |= (prefixes & PREFIX_DATA);
14766 }
252b5132 14767 break;
52fd6d94 14768 case z_mode_ax_reg:
161a04f6 14769 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
14770 s = *names32;
14771 else
14772 s = *names16;
161a04f6 14773 if (!(rex & REX_W))
52fd6d94
JB
14774 used_prefixes |= (prefixes & PREFIX_DATA);
14775 break;
252b5132
RH
14776 default:
14777 s = INTERNAL_DISASSEMBLER_ERROR;
14778 break;
14779 }
14780 oappend (s);
14781}
14782
14783static void
26ca5450 14784OP_I (int bytemode, int sizeflag)
252b5132 14785{
52b15da3
JH
14786 bfd_signed_vma op;
14787 bfd_signed_vma mask = -1;
252b5132
RH
14788
14789 switch (bytemode)
14790 {
14791 case b_mode:
14792 FETCH_DATA (the_info, codep + 1);
52b15da3
JH
14793 op = *codep++;
14794 mask = 0xff;
14795 break;
252b5132 14796 case v_mode:
161a04f6
L
14797 USED_REX (REX_W);
14798 if (rex & REX_W)
52b15da3 14799 op = get32s ();
252b5132 14800 else
52b15da3 14801 {
f16cd0d5
L
14802 if (sizeflag & DFLAG)
14803 {
14804 op = get32 ();
14805 mask = 0xffffffff;
14806 }
14807 else
14808 {
14809 op = get16 ();
14810 mask = 0xfffff;
14811 }
14812 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 14813 }
252b5132 14814 break;
c1dc7af5
JB
14815 case d_mode:
14816 mask = 0xffffffff;
14817 op = get32 ();
14818 break;
252b5132 14819 case w_mode:
52b15da3 14820 mask = 0xfffff;
252b5132
RH
14821 op = get16 ();
14822 break;
9306ca4a
JB
14823 case const_1_mode:
14824 if (intel_syntax)
6c067bbb 14825 oappend ("1");
9306ca4a 14826 return;
252b5132
RH
14827 default:
14828 oappend (INTERNAL_DISASSEMBLER_ERROR);
14829 return;
14830 }
14831
52b15da3
JH
14832 op &= mask;
14833 scratchbuf[0] = '$';
d708bcba 14834 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 14835 oappend_maybe_intel (scratchbuf);
52b15da3
JH
14836 scratchbuf[0] = '\0';
14837}
14838
14839static void
26ca5450 14840OP_I64 (int bytemode, int sizeflag)
52b15da3 14841{
a280ab8e 14842 if (bytemode != v_mode || address_mode != mode_64bit || !(rex & REX_W))
6439fc28
AM
14843 {
14844 OP_I (bytemode, sizeflag);
14845 return;
14846 }
14847
a280ab8e 14848 USED_REX (REX_W);
52b15da3 14849
52b15da3 14850 scratchbuf[0] = '$';
a280ab8e 14851 print_operand_value (scratchbuf + 1, 1, get64 ());
9ce09ba2 14852 oappend_maybe_intel (scratchbuf);
252b5132
RH
14853 scratchbuf[0] = '\0';
14854}
14855
14856static void
26ca5450 14857OP_sI (int bytemode, int sizeflag)
252b5132 14858{
52b15da3 14859 bfd_signed_vma op;
252b5132
RH
14860
14861 switch (bytemode)
14862 {
14863 case b_mode:
e3949f17 14864 case b_T_mode:
252b5132
RH
14865 FETCH_DATA (the_info, codep + 1);
14866 op = *codep++;
14867 if ((op & 0x80) != 0)
14868 op -= 0x100;
e3949f17
L
14869 if (bytemode == b_T_mode)
14870 {
14871 if (address_mode != mode_64bit
7bb15c6f 14872 || !((sizeflag & DFLAG) || (rex & REX_W)))
e3949f17 14873 {
6c067bbb
RM
14874 /* The operand-size prefix is overridden by a REX prefix. */
14875 if ((sizeflag & DFLAG) || (rex & REX_W))
e3949f17
L
14876 op &= 0xffffffff;
14877 else
14878 op &= 0xffff;
14879 }
14880 }
14881 else
14882 {
14883 if (!(rex & REX_W))
14884 {
14885 if (sizeflag & DFLAG)
14886 op &= 0xffffffff;
14887 else
14888 op &= 0xffff;
14889 }
14890 }
252b5132
RH
14891 break;
14892 case v_mode:
7bb15c6f
RM
14893 /* The operand-size prefix is overridden by a REX prefix. */
14894 if ((sizeflag & DFLAG) || (rex & REX_W))
52b15da3 14895 op = get32s ();
252b5132 14896 else
d9e3625e 14897 op = get16 ();
252b5132
RH
14898 break;
14899 default:
14900 oappend (INTERNAL_DISASSEMBLER_ERROR);
14901 return;
14902 }
52b15da3
JH
14903
14904 scratchbuf[0] = '$';
14905 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 14906 oappend_maybe_intel (scratchbuf);
252b5132
RH
14907}
14908
14909static void
26ca5450 14910OP_J (int bytemode, int sizeflag)
252b5132 14911{
52b15da3 14912 bfd_vma disp;
7081ff04 14913 bfd_vma mask = -1;
65ca155d 14914 bfd_vma segment = 0;
252b5132
RH
14915
14916 switch (bytemode)
14917 {
14918 case b_mode:
14919 FETCH_DATA (the_info, codep + 1);
14920 disp = *codep++;
14921 if ((disp & 0x80) != 0)
14922 disp -= 0x100;
14923 break;
14924 case v_mode:
d835a58b 14925 if (isa64 != intel64)
376cd056 14926 case dqw_mode:
5db04b09
L
14927 USED_REX (REX_W);
14928 if ((sizeflag & DFLAG)
14929 || (address_mode == mode_64bit
d835a58b 14930 && ((isa64 == intel64 && bytemode != dqw_mode)
376cd056 14931 || (rex & REX_W))))
52b15da3 14932 disp = get32s ();
252b5132
RH
14933 else
14934 {
14935 disp = get16 ();
206717e8
L
14936 if ((disp & 0x8000) != 0)
14937 disp -= 0x10000;
65ca155d
L
14938 /* In 16bit mode, address is wrapped around at 64k within
14939 the same segment. Otherwise, a data16 prefix on a jump
14940 instruction means that the pc is masked to 16 bits after
14941 the displacement is added! */
14942 mask = 0xffff;
14943 if ((prefixes & PREFIX_DATA) == 0)
4fd7268a 14944 segment = ((start_pc + (codep - start_codep))
65ca155d 14945 & ~((bfd_vma) 0xffff));
252b5132 14946 }
5db04b09 14947 if (address_mode != mode_64bit
d835a58b 14948 || (isa64 != intel64 && !(rex & REX_W)))
f16cd0d5 14949 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132
RH
14950 break;
14951 default:
14952 oappend (INTERNAL_DISASSEMBLER_ERROR);
14953 return;
14954 }
42d5f9c6 14955 disp = ((start_pc + (codep - start_codep) + disp) & mask) | segment;
52b15da3
JH
14956 set_op (disp, 0);
14957 print_operand_value (scratchbuf, 1, disp);
252b5132
RH
14958 oappend (scratchbuf);
14959}
14960
252b5132 14961static void
ed7841b3 14962OP_SEG (int bytemode, int sizeflag)
252b5132 14963{
ed7841b3 14964 if (bytemode == w_mode)
7967e09e 14965 oappend (names_seg[modrm.reg]);
ed7841b3 14966 else
7967e09e 14967 OP_E (modrm.mod == 3 ? bytemode : w_mode, sizeflag);
252b5132
RH
14968}
14969
14970static void
26ca5450 14971OP_DIR (int dummy ATTRIBUTE_UNUSED, int sizeflag)
252b5132
RH
14972{
14973 int seg, offset;
14974
c608c12e 14975 if (sizeflag & DFLAG)
252b5132 14976 {
c608c12e
AM
14977 offset = get32 ();
14978 seg = get16 ();
252b5132 14979 }
c608c12e
AM
14980 else
14981 {
14982 offset = get16 ();
14983 seg = get16 ();
14984 }
7d421014 14985 used_prefixes |= (prefixes & PREFIX_DATA);
d708bcba 14986 if (intel_syntax)
3f31e633 14987 sprintf (scratchbuf, "0x%x:0x%x", seg, offset);
d708bcba
AM
14988 else
14989 sprintf (scratchbuf, "$0x%x,$0x%x", seg, offset);
c608c12e 14990 oappend (scratchbuf);
252b5132
RH
14991}
14992
252b5132 14993static void
3f31e633 14994OP_OFF (int bytemode, int sizeflag)
252b5132 14995{
52b15da3 14996 bfd_vma off;
252b5132 14997
3f31e633
JB
14998 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
14999 intel_operand_size (bytemode, sizeflag);
252b5132
RH
15000 append_seg ();
15001
cb712a9e 15002 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132
RH
15003 off = get32 ();
15004 else
15005 off = get16 ();
15006
15007 if (intel_syntax)
15008 {
285ca992 15009 if (!active_seg_prefix)
252b5132 15010 {
d708bcba 15011 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
15012 oappend (":");
15013 }
15014 }
52b15da3
JH
15015 print_operand_value (scratchbuf, 1, off);
15016 oappend (scratchbuf);
15017}
6439fc28 15018
52b15da3 15019static void
3f31e633 15020OP_OFF64 (int bytemode, int sizeflag)
52b15da3
JH
15021{
15022 bfd_vma off;
15023
539e75ad
L
15024 if (address_mode != mode_64bit
15025 || (prefixes & PREFIX_ADDR))
6439fc28
AM
15026 {
15027 OP_OFF (bytemode, sizeflag);
15028 return;
15029 }
15030
3f31e633
JB
15031 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
15032 intel_operand_size (bytemode, sizeflag);
52b15da3
JH
15033 append_seg ();
15034
6608db57 15035 off = get64 ();
52b15da3
JH
15036
15037 if (intel_syntax)
15038 {
285ca992 15039 if (!active_seg_prefix)
52b15da3 15040 {
d708bcba 15041 oappend (names_seg[ds_reg - es_reg]);
52b15da3
JH
15042 oappend (":");
15043 }
15044 }
15045 print_operand_value (scratchbuf, 1, off);
252b5132
RH
15046 oappend (scratchbuf);
15047}
15048
15049static void
26ca5450 15050ptr_reg (int code, int sizeflag)
252b5132 15051{
2da11e11 15052 const char *s;
d708bcba 15053
1d9f512f 15054 *obufp++ = open_char;
20f0a1fc 15055 used_prefixes |= (prefixes & PREFIX_ADDR);
cb712a9e 15056 if (address_mode == mode_64bit)
c1a64871
JH
15057 {
15058 if (!(sizeflag & AFLAG))
db6eb5be 15059 s = names32[code - eAX_reg];
c1a64871 15060 else
db6eb5be 15061 s = names64[code - eAX_reg];
c1a64871 15062 }
52b15da3 15063 else if (sizeflag & AFLAG)
252b5132
RH
15064 s = names32[code - eAX_reg];
15065 else
15066 s = names16[code - eAX_reg];
15067 oappend (s);
1d9f512f
AM
15068 *obufp++ = close_char;
15069 *obufp = 0;
252b5132
RH
15070}
15071
15072static void
26ca5450 15073OP_ESreg (int code, int sizeflag)
252b5132 15074{
9306ca4a 15075 if (intel_syntax)
52fd6d94
JB
15076 {
15077 switch (codep[-1])
15078 {
15079 case 0x6d: /* insw/insl */
15080 intel_operand_size (z_mode, sizeflag);
15081 break;
15082 case 0xa5: /* movsw/movsl/movsq */
15083 case 0xa7: /* cmpsw/cmpsl/cmpsq */
15084 case 0xab: /* stosw/stosl */
15085 case 0xaf: /* scasw/scasl */
15086 intel_operand_size (v_mode, sizeflag);
15087 break;
15088 default:
15089 intel_operand_size (b_mode, sizeflag);
15090 }
15091 }
9ce09ba2 15092 oappend_maybe_intel ("%es:");
252b5132
RH
15093 ptr_reg (code, sizeflag);
15094}
15095
15096static void
26ca5450 15097OP_DSreg (int code, int sizeflag)
252b5132 15098{
9306ca4a 15099 if (intel_syntax)
52fd6d94
JB
15100 {
15101 switch (codep[-1])
15102 {
15103 case 0x6f: /* outsw/outsl */
15104 intel_operand_size (z_mode, sizeflag);
15105 break;
15106 case 0xa5: /* movsw/movsl/movsq */
15107 case 0xa7: /* cmpsw/cmpsl/cmpsq */
15108 case 0xad: /* lodsw/lodsl/lodsq */
15109 intel_operand_size (v_mode, sizeflag);
15110 break;
15111 default:
15112 intel_operand_size (b_mode, sizeflag);
15113 }
15114 }
285ca992
L
15115 /* Set active_seg_prefix to PREFIX_DS if it is unset so that the
15116 default segment register DS is printed. */
15117 if (!active_seg_prefix)
15118 active_seg_prefix = PREFIX_DS;
6608db57 15119 append_seg ();
252b5132
RH
15120 ptr_reg (code, sizeflag);
15121}
15122
252b5132 15123static void
26ca5450 15124OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15125{
9b60702d 15126 int add;
161a04f6 15127 if (rex & REX_R)
c4a530c5 15128 {
161a04f6 15129 USED_REX (REX_R);
c4a530c5
JB
15130 add = 8;
15131 }
cb712a9e 15132 else if (address_mode != mode_64bit && (prefixes & PREFIX_LOCK))
c4a530c5 15133 {
f16cd0d5 15134 all_prefixes[last_lock_prefix] = 0;
c4a530c5
JB
15135 used_prefixes |= PREFIX_LOCK;
15136 add = 8;
15137 }
9b60702d
L
15138 else
15139 add = 0;
7967e09e 15140 sprintf (scratchbuf, "%%cr%d", modrm.reg + add);
9ce09ba2 15141 oappend_maybe_intel (scratchbuf);
252b5132
RH
15142}
15143
252b5132 15144static void
26ca5450 15145OP_D (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15146{
9b60702d 15147 int add;
161a04f6
L
15148 USED_REX (REX_R);
15149 if (rex & REX_R)
52b15da3 15150 add = 8;
9b60702d
L
15151 else
15152 add = 0;
d708bcba 15153 if (intel_syntax)
7967e09e 15154 sprintf (scratchbuf, "db%d", modrm.reg + add);
d708bcba 15155 else
7967e09e 15156 sprintf (scratchbuf, "%%db%d", modrm.reg + add);
252b5132
RH
15157 oappend (scratchbuf);
15158}
15159
252b5132 15160static void
26ca5450 15161OP_T (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15162{
7967e09e 15163 sprintf (scratchbuf, "%%tr%d", modrm.reg);
9ce09ba2 15164 oappend_maybe_intel (scratchbuf);
252b5132
RH
15165}
15166
15167static void
6f74c397 15168OP_R (int bytemode, int sizeflag)
252b5132 15169{
68f34464
L
15170 /* Skip mod/rm byte. */
15171 MODRM_CHECK;
15172 codep++;
15173 OP_E_register (bytemode, sizeflag);
252b5132
RH
15174}
15175
15176static void
26ca5450 15177OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15178{
b9733481
L
15179 int reg = modrm.reg;
15180 const char **names;
15181
041bd2e0
JH
15182 used_prefixes |= (prefixes & PREFIX_DATA);
15183 if (prefixes & PREFIX_DATA)
20f0a1fc 15184 {
b9733481 15185 names = names_xmm;
161a04f6
L
15186 USED_REX (REX_R);
15187 if (rex & REX_R)
b9733481 15188 reg += 8;
20f0a1fc 15189 }
041bd2e0 15190 else
b9733481
L
15191 names = names_mm;
15192 oappend (names[reg]);
252b5132
RH
15193}
15194
c608c12e 15195static void
c0f3af97 15196OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
c608c12e 15197{
b9733481
L
15198 int reg = modrm.reg;
15199 const char **names;
15200
161a04f6
L
15201 USED_REX (REX_R);
15202 if (rex & REX_R)
b9733481 15203 reg += 8;
43234a1e
L
15204 if (vex.evex)
15205 {
15206 if (!vex.r)
15207 reg += 16;
15208 }
15209
539f890d
L
15210 if (need_vex
15211 && bytemode != xmm_mode
43234a1e
L
15212 && bytemode != xmmq_mode
15213 && bytemode != evex_half_bcst_xmmq_mode
15214 && bytemode != ymm_mode
539f890d 15215 && bytemode != scalar_mode)
c0f3af97
L
15216 {
15217 switch (vex.length)
15218 {
15219 case 128:
b9733481 15220 names = names_xmm;
c0f3af97
L
15221 break;
15222 case 256:
5fc35d96
IT
15223 if (vex.w
15224 || (bytemode != vex_vsib_q_w_dq_mode
15225 && bytemode != vex_vsib_q_w_d_mode))
6c30d220
L
15226 names = names_ymm;
15227 else
15228 names = names_xmm;
c0f3af97 15229 break;
43234a1e
L
15230 case 512:
15231 names = names_zmm;
15232 break;
c0f3af97
L
15233 default:
15234 abort ();
15235 }
15236 }
43234a1e
L
15237 else if (bytemode == xmmq_mode
15238 || bytemode == evex_half_bcst_xmmq_mode)
15239 {
15240 switch (vex.length)
15241 {
15242 case 128:
15243 case 256:
15244 names = names_xmm;
15245 break;
15246 case 512:
15247 names = names_ymm;
15248 break;
15249 default:
15250 abort ();
15251 }
15252 }
15253 else if (bytemode == ymm_mode)
15254 names = names_ymm;
c0f3af97 15255 else
b9733481
L
15256 names = names_xmm;
15257 oappend (names[reg]);
c608c12e
AM
15258}
15259
252b5132 15260static void
26ca5450 15261OP_EM (int bytemode, int sizeflag)
252b5132 15262{
b9733481
L
15263 int reg;
15264 const char **names;
15265
7967e09e 15266 if (modrm.mod != 3)
252b5132 15267 {
b6169b20
L
15268 if (intel_syntax
15269 && (bytemode == v_mode || bytemode == v_swap_mode))
9306ca4a
JB
15270 {
15271 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
15272 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 15273 }
252b5132
RH
15274 OP_E (bytemode, sizeflag);
15275 return;
15276 }
15277
b6169b20
L
15278 if ((sizeflag & SUFFIX_ALWAYS) && bytemode == v_swap_mode)
15279 swap_operand ();
15280
6608db57 15281 /* Skip mod/rm byte. */
4bba6815 15282 MODRM_CHECK;
252b5132 15283 codep++;
041bd2e0 15284 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 15285 reg = modrm.rm;
041bd2e0 15286 if (prefixes & PREFIX_DATA)
20f0a1fc 15287 {
b9733481 15288 names = names_xmm;
161a04f6
L
15289 USED_REX (REX_B);
15290 if (rex & REX_B)
b9733481 15291 reg += 8;
20f0a1fc 15292 }
041bd2e0 15293 else
b9733481
L
15294 names = names_mm;
15295 oappend (names[reg]);
252b5132
RH
15296}
15297
246c51aa
L
15298/* cvt* are the only instructions in sse2 which have
15299 both SSE and MMX operands and also have 0x66 prefix
15300 in their opcode. 0x66 was originally used to differentiate
15301 between SSE and MMX instruction(operands). So we have to handle the
4d9567e0
MM
15302 cvt* separately using OP_EMC and OP_MXC */
15303static void
15304OP_EMC (int bytemode, int sizeflag)
15305{
7967e09e 15306 if (modrm.mod != 3)
4d9567e0
MM
15307 {
15308 if (intel_syntax && bytemode == v_mode)
15309 {
15310 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
15311 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 15312 }
4d9567e0
MM
15313 OP_E (bytemode, sizeflag);
15314 return;
15315 }
246c51aa 15316
4d9567e0
MM
15317 /* Skip mod/rm byte. */
15318 MODRM_CHECK;
15319 codep++;
15320 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 15321 oappend (names_mm[modrm.rm]);
4d9567e0
MM
15322}
15323
15324static void
15325OP_MXC (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15326{
15327 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 15328 oappend (names_mm[modrm.reg]);
4d9567e0
MM
15329}
15330
c608c12e 15331static void
26ca5450 15332OP_EX (int bytemode, int sizeflag)
c608c12e 15333{
b9733481
L
15334 int reg;
15335 const char **names;
d6f574e0
L
15336
15337 /* Skip mod/rm byte. */
15338 MODRM_CHECK;
15339 codep++;
15340
7967e09e 15341 if (modrm.mod != 3)
c608c12e 15342 {
c1e679ec 15343 OP_E_memory (bytemode, sizeflag);
c608c12e
AM
15344 return;
15345 }
d6f574e0 15346
b9733481 15347 reg = modrm.rm;
161a04f6
L
15348 USED_REX (REX_B);
15349 if (rex & REX_B)
b9733481 15350 reg += 8;
43234a1e
L
15351 if (vex.evex)
15352 {
15353 USED_REX (REX_X);
15354 if ((rex & REX_X))
15355 reg += 16;
15356 }
c608c12e 15357
b6169b20 15358 if ((sizeflag & SUFFIX_ALWAYS)
fa99fab2
L
15359 && (bytemode == x_swap_mode
15360 || bytemode == d_swap_mode
7bb15c6f 15361 || bytemode == d_scalar_swap_mode
539f890d
L
15362 || bytemode == q_swap_mode
15363 || bytemode == q_scalar_swap_mode))
b6169b20
L
15364 swap_operand ();
15365
c0f3af97
L
15366 if (need_vex
15367 && bytemode != xmm_mode
6c30d220
L
15368 && bytemode != xmmdw_mode
15369 && bytemode != xmmqd_mode
15370 && bytemode != xmm_mb_mode
15371 && bytemode != xmm_mw_mode
15372 && bytemode != xmm_md_mode
15373 && bytemode != xmm_mq_mode
43234a1e 15374 && bytemode != xmm_mdq_mode
539f890d 15375 && bytemode != xmmq_mode
43234a1e
L
15376 && bytemode != evex_half_bcst_xmmq_mode
15377 && bytemode != ymm_mode
539f890d 15378 && bytemode != d_scalar_mode
7bb15c6f 15379 && bytemode != d_scalar_swap_mode
539f890d 15380 && bytemode != q_scalar_mode
1c480963
L
15381 && bytemode != q_scalar_swap_mode
15382 && bytemode != vex_scalar_w_dq_mode)
c0f3af97
L
15383 {
15384 switch (vex.length)
15385 {
15386 case 128:
b9733481 15387 names = names_xmm;
c0f3af97
L
15388 break;
15389 case 256:
b9733481 15390 names = names_ymm;
c0f3af97 15391 break;
43234a1e
L
15392 case 512:
15393 names = names_zmm;
15394 break;
c0f3af97
L
15395 default:
15396 abort ();
15397 }
15398 }
43234a1e
L
15399 else if (bytemode == xmmq_mode
15400 || bytemode == evex_half_bcst_xmmq_mode)
15401 {
15402 switch (vex.length)
15403 {
15404 case 128:
15405 case 256:
15406 names = names_xmm;
15407 break;
15408 case 512:
15409 names = names_ymm;
15410 break;
15411 default:
15412 abort ();
15413 }
15414 }
15415 else if (bytemode == ymm_mode)
15416 names = names_ymm;
c0f3af97 15417 else
b9733481
L
15418 names = names_xmm;
15419 oappend (names[reg]);
c608c12e
AM
15420}
15421
252b5132 15422static void
26ca5450 15423OP_MS (int bytemode, int sizeflag)
252b5132 15424{
7967e09e 15425 if (modrm.mod == 3)
2da11e11
AM
15426 OP_EM (bytemode, sizeflag);
15427 else
6608db57 15428 BadOp ();
252b5132
RH
15429}
15430
992aaec9 15431static void
26ca5450 15432OP_XS (int bytemode, int sizeflag)
992aaec9 15433{
7967e09e 15434 if (modrm.mod == 3)
992aaec9
AM
15435 OP_EX (bytemode, sizeflag);
15436 else
6608db57 15437 BadOp ();
992aaec9
AM
15438}
15439
cc0ec051
AM
15440static void
15441OP_M (int bytemode, int sizeflag)
15442{
7967e09e 15443 if (modrm.mod == 3)
75413a22
L
15444 /* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */
15445 BadOp ();
cc0ec051
AM
15446 else
15447 OP_E (bytemode, sizeflag);
15448}
15449
15450static void
15451OP_0f07 (int bytemode, int sizeflag)
15452{
7967e09e 15453 if (modrm.mod != 3 || modrm.rm != 0)
cc0ec051
AM
15454 BadOp ();
15455 else
15456 OP_E (bytemode, sizeflag);
15457}
15458
46e883c5 15459/* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
246c51aa 15460 32bit mode and "xchg %rax,%rax" in 64bit mode. */
46e883c5 15461
cc0ec051 15462static void
46e883c5 15463NOP_Fixup1 (int bytemode, int sizeflag)
cc0ec051 15464{
8b38ad71
L
15465 if ((prefixes & PREFIX_DATA) != 0
15466 || (rex != 0
15467 && rex != 0x48
15468 && address_mode == mode_64bit))
46e883c5
L
15469 OP_REG (bytemode, sizeflag);
15470 else
15471 strcpy (obuf, "nop");
15472}
15473
15474static void
15475NOP_Fixup2 (int bytemode, int sizeflag)
15476{
8b38ad71
L
15477 if ((prefixes & PREFIX_DATA) != 0
15478 || (rex != 0
15479 && rex != 0x48
15480 && address_mode == mode_64bit))
46e883c5 15481 OP_IMREG (bytemode, sizeflag);
cc0ec051
AM
15482}
15483
84037f8c 15484static const char *const Suffix3DNow[] = {
252b5132
RH
15485/* 00 */ NULL, NULL, NULL, NULL,
15486/* 04 */ NULL, NULL, NULL, NULL,
15487/* 08 */ NULL, NULL, NULL, NULL,
9e525108 15488/* 0C */ "pi2fw", "pi2fd", NULL, NULL,
252b5132
RH
15489/* 10 */ NULL, NULL, NULL, NULL,
15490/* 14 */ NULL, NULL, NULL, NULL,
15491/* 18 */ NULL, NULL, NULL, NULL,
9e525108 15492/* 1C */ "pf2iw", "pf2id", NULL, NULL,
252b5132
RH
15493/* 20 */ NULL, NULL, NULL, NULL,
15494/* 24 */ NULL, NULL, NULL, NULL,
15495/* 28 */ NULL, NULL, NULL, NULL,
15496/* 2C */ NULL, NULL, NULL, NULL,
15497/* 30 */ NULL, NULL, NULL, NULL,
15498/* 34 */ NULL, NULL, NULL, NULL,
15499/* 38 */ NULL, NULL, NULL, NULL,
15500/* 3C */ NULL, NULL, NULL, NULL,
15501/* 40 */ NULL, NULL, NULL, NULL,
15502/* 44 */ NULL, NULL, NULL, NULL,
15503/* 48 */ NULL, NULL, NULL, NULL,
15504/* 4C */ NULL, NULL, NULL, NULL,
15505/* 50 */ NULL, NULL, NULL, NULL,
15506/* 54 */ NULL, NULL, NULL, NULL,
15507/* 58 */ NULL, NULL, NULL, NULL,
15508/* 5C */ NULL, NULL, NULL, NULL,
15509/* 60 */ NULL, NULL, NULL, NULL,
15510/* 64 */ NULL, NULL, NULL, NULL,
15511/* 68 */ NULL, NULL, NULL, NULL,
15512/* 6C */ NULL, NULL, NULL, NULL,
15513/* 70 */ NULL, NULL, NULL, NULL,
15514/* 74 */ NULL, NULL, NULL, NULL,
15515/* 78 */ NULL, NULL, NULL, NULL,
15516/* 7C */ NULL, NULL, NULL, NULL,
15517/* 80 */ NULL, NULL, NULL, NULL,
15518/* 84 */ NULL, NULL, NULL, NULL,
9e525108
AM
15519/* 88 */ NULL, NULL, "pfnacc", NULL,
15520/* 8C */ NULL, NULL, "pfpnacc", NULL,
252b5132
RH
15521/* 90 */ "pfcmpge", NULL, NULL, NULL,
15522/* 94 */ "pfmin", NULL, "pfrcp", "pfrsqrt",
15523/* 98 */ NULL, NULL, "pfsub", NULL,
15524/* 9C */ NULL, NULL, "pfadd", NULL,
15525/* A0 */ "pfcmpgt", NULL, NULL, NULL,
15526/* A4 */ "pfmax", NULL, "pfrcpit1", "pfrsqit1",
15527/* A8 */ NULL, NULL, "pfsubr", NULL,
15528/* AC */ NULL, NULL, "pfacc", NULL,
15529/* B0 */ "pfcmpeq", NULL, NULL, NULL,
9beff690 15530/* B4 */ "pfmul", NULL, "pfrcpit2", "pmulhrw",
9e525108 15531/* B8 */ NULL, NULL, NULL, "pswapd",
252b5132
RH
15532/* BC */ NULL, NULL, NULL, "pavgusb",
15533/* C0 */ NULL, NULL, NULL, NULL,
15534/* C4 */ NULL, NULL, NULL, NULL,
15535/* C8 */ NULL, NULL, NULL, NULL,
15536/* CC */ NULL, NULL, NULL, NULL,
15537/* D0 */ NULL, NULL, NULL, NULL,
15538/* D4 */ NULL, NULL, NULL, NULL,
15539/* D8 */ NULL, NULL, NULL, NULL,
15540/* DC */ NULL, NULL, NULL, NULL,
15541/* E0 */ NULL, NULL, NULL, NULL,
15542/* E4 */ NULL, NULL, NULL, NULL,
15543/* E8 */ NULL, NULL, NULL, NULL,
15544/* EC */ NULL, NULL, NULL, NULL,
15545/* F0 */ NULL, NULL, NULL, NULL,
15546/* F4 */ NULL, NULL, NULL, NULL,
15547/* F8 */ NULL, NULL, NULL, NULL,
15548/* FC */ NULL, NULL, NULL, NULL,
15549};
15550
15551static void
26ca5450 15552OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132
RH
15553{
15554 const char *mnemonic;
15555
15556 FETCH_DATA (the_info, codep + 1);
15557 /* AMD 3DNow! instructions are specified by an opcode suffix in the
15558 place where an 8-bit immediate would normally go. ie. the last
15559 byte of the instruction. */
ea397f5b 15560 obufp = mnemonicendp;
c608c12e 15561 mnemonic = Suffix3DNow[*codep++ & 0xff];
252b5132 15562 if (mnemonic)
2da11e11 15563 oappend (mnemonic);
252b5132
RH
15564 else
15565 {
15566 /* Since a variable sized modrm/sib chunk is between the start
15567 of the opcode (0x0f0f) and the opcode suffix, we need to do
15568 all the modrm processing first, and don't know until now that
15569 we have a bad opcode. This necessitates some cleaning up. */
ce518a5f
L
15570 op_out[0][0] = '\0';
15571 op_out[1][0] = '\0';
6608db57 15572 BadOp ();
252b5132 15573 }
ea397f5b 15574 mnemonicendp = obufp;
252b5132 15575}
c608c12e 15576
ea397f5b
L
15577static struct op simd_cmp_op[] =
15578{
15579 { STRING_COMMA_LEN ("eq") },
15580 { STRING_COMMA_LEN ("lt") },
15581 { STRING_COMMA_LEN ("le") },
15582 { STRING_COMMA_LEN ("unord") },
15583 { STRING_COMMA_LEN ("neq") },
15584 { STRING_COMMA_LEN ("nlt") },
15585 { STRING_COMMA_LEN ("nle") },
15586 { STRING_COMMA_LEN ("ord") }
c608c12e
AM
15587};
15588
15589static void
ad19981d 15590CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
c608c12e
AM
15591{
15592 unsigned int cmp_type;
15593
15594 FETCH_DATA (the_info, codep + 1);
15595 cmp_type = *codep++ & 0xff;
c0f3af97 15596 if (cmp_type < ARRAY_SIZE (simd_cmp_op))
c608c12e 15597 {
ad19981d 15598 char suffix [3];
ea397f5b 15599 char *p = mnemonicendp - 2;
ad19981d
L
15600 suffix[0] = p[0];
15601 suffix[1] = p[1];
15602 suffix[2] = '\0';
ea397f5b
L
15603 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
15604 mnemonicendp += simd_cmp_op[cmp_type].len;
c608c12e
AM
15605 }
15606 else
15607 {
ad19981d
L
15608 /* We have a reserved extension byte. Output it directly. */
15609 scratchbuf[0] = '$';
15610 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 15611 oappend_maybe_intel (scratchbuf);
ad19981d 15612 scratchbuf[0] = '\0';
c608c12e
AM
15613 }
15614}
15615
9916071f 15616static void
7abb8d81 15617OP_Mwait (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
9916071f 15618{
7abb8d81 15619 /* mwait %eax,%ecx / mwaitx %eax,%ecx,%ebx */
b844680a
L
15620 if (!intel_syntax)
15621 {
081e283f
JB
15622 strcpy (op_out[0], names32[0]);
15623 strcpy (op_out[1], names32[1]);
7abb8d81 15624 if (bytemode == eBX_reg)
081e283f 15625 strcpy (op_out[2], names32[3]);
b844680a
L
15626 two_source_ops = 1;
15627 }
15628 /* Skip mod/rm byte. */
15629 MODRM_CHECK;
15630 codep++;
15631}
15632
15633static void
15634OP_Monitor (int bytemode ATTRIBUTE_UNUSED,
15635 int sizeflag ATTRIBUTE_UNUSED)
ca164297 15636{
081e283f 15637 /* monitor %{e,r,}ax,%ecx,%edx" */
b844680a 15638 if (!intel_syntax)
ca164297 15639 {
cb712a9e
L
15640 const char **names = (address_mode == mode_64bit
15641 ? names64 : names32);
1d9f512f 15642
081e283f 15643 if (prefixes & PREFIX_ADDR)
ca164297 15644 {
b844680a 15645 /* Remove "addr16/addr32". */
f16cd0d5 15646 all_prefixes[last_addr_prefix] = 0;
081e283f
JB
15647 names = (address_mode != mode_32bit
15648 ? names32 : names16);
b844680a 15649 used_prefixes |= PREFIX_ADDR;
ca164297 15650 }
081e283f
JB
15651 else if (address_mode == mode_16bit)
15652 names = names16;
15653 strcpy (op_out[0], names[0]);
15654 strcpy (op_out[1], names32[1]);
15655 strcpy (op_out[2], names32[2]);
b844680a 15656 two_source_ops = 1;
ca164297 15657 }
b844680a
L
15658 /* Skip mod/rm byte. */
15659 MODRM_CHECK;
15660 codep++;
30123838
JB
15661}
15662
6608db57
KH
15663static void
15664BadOp (void)
2da11e11 15665{
6608db57
KH
15666 /* Throw away prefixes and 1st. opcode byte. */
15667 codep = insn_codep + 1;
2da11e11
AM
15668 oappend ("(bad)");
15669}
4cc91dba 15670
35c52694
L
15671static void
15672REP_Fixup (int bytemode, int sizeflag)
15673{
15674 /* The 0xf3 prefix should be displayed as "rep" for ins, outs, movs,
15675 lods and stos. */
35c52694 15676 if (prefixes & PREFIX_REPZ)
f16cd0d5 15677 all_prefixes[last_repz_prefix] = REP_PREFIX;
35c52694
L
15678
15679 switch (bytemode)
15680 {
15681 case al_reg:
15682 case eAX_reg:
15683 case indir_dx_reg:
15684 OP_IMREG (bytemode, sizeflag);
15685 break;
15686 case eDI_reg:
15687 OP_ESreg (bytemode, sizeflag);
15688 break;
15689 case eSI_reg:
15690 OP_DSreg (bytemode, sizeflag);
15691 break;
15692 default:
15693 abort ();
15694 break;
15695 }
15696}
f5804c90 15697
d835a58b
JB
15698static void
15699SEP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15700{
15701 if ( isa64 != amd64 )
15702 return;
15703
15704 obufp = obuf;
15705 BadOp ();
15706 mnemonicendp = obufp;
15707 ++codep;
15708}
15709
7e8b059b
L
15710/* For BND-prefixed instructions 0xF2 prefix should be displayed as
15711 "bnd". */
15712
15713static void
15714BND_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15715{
15716 if (prefixes & PREFIX_REPNZ)
15717 all_prefixes[last_repnz_prefix] = BND_PREFIX;
15718}
15719
04ef582a
L
15720/* For NOTRACK-prefixed instructions, 0x3E prefix should be displayed as
15721 "notrack". */
15722
15723static void
15724NOTRACK_Fixup (int bytemode ATTRIBUTE_UNUSED,
15725 int sizeflag ATTRIBUTE_UNUSED)
15726{
9fef80d6 15727 if (active_seg_prefix == PREFIX_DS
04ef582a
L
15728 && (address_mode != mode_64bit || last_data_prefix < 0))
15729 {
4e9ac44a 15730 /* NOTRACK prefix is only valid on indirect branch instructions.
9fef80d6 15731 NB: DATA prefix is unsupported for Intel64. */
04ef582a
L
15732 active_seg_prefix = 0;
15733 all_prefixes[last_seg_prefix] = NOTRACK_PREFIX;
15734 }
15735}
15736
42164a71
L
15737/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
15738 "xacquire"/"xrelease" for memory operand if there is a LOCK prefix.
15739 */
15740
15741static void
15742HLE_Fixup1 (int bytemode, int sizeflag)
15743{
15744 if (modrm.mod != 3
15745 && (prefixes & PREFIX_LOCK) != 0)
15746 {
15747 if (prefixes & PREFIX_REPZ)
15748 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15749 if (prefixes & PREFIX_REPNZ)
15750 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
15751 }
15752
15753 OP_E (bytemode, sizeflag);
15754}
15755
15756/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
15757 "xacquire"/"xrelease" for memory operand. No check for LOCK prefix.
15758 */
15759
15760static void
15761HLE_Fixup2 (int bytemode, int sizeflag)
15762{
15763 if (modrm.mod != 3)
15764 {
15765 if (prefixes & PREFIX_REPZ)
15766 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15767 if (prefixes & PREFIX_REPNZ)
15768 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
15769 }
15770
15771 OP_E (bytemode, sizeflag);
15772}
15773
15774/* Similar to OP_E. But the 0xf3 prefixes should be displayed as
15775 "xrelease" for memory operand. No check for LOCK prefix. */
15776
15777static void
15778HLE_Fixup3 (int bytemode, int sizeflag)
15779{
15780 if (modrm.mod != 3
15781 && last_repz_prefix > last_repnz_prefix
15782 && (prefixes & PREFIX_REPZ) != 0)
15783 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15784
15785 OP_E (bytemode, sizeflag);
15786}
15787
f5804c90
L
15788static void
15789CMPXCHG8B_Fixup (int bytemode, int sizeflag)
15790{
161a04f6
L
15791 USED_REX (REX_W);
15792 if (rex & REX_W)
f5804c90
L
15793 {
15794 /* Change cmpxchg8b to cmpxchg16b. */
ea397f5b
L
15795 char *p = mnemonicendp - 2;
15796 mnemonicendp = stpcpy (p, "16b");
fb9c77c7 15797 bytemode = o_mode;
f5804c90 15798 }
42164a71
L
15799 else if ((prefixes & PREFIX_LOCK) != 0)
15800 {
15801 if (prefixes & PREFIX_REPZ)
15802 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15803 if (prefixes & PREFIX_REPNZ)
15804 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
15805 }
15806
f5804c90
L
15807 OP_M (bytemode, sizeflag);
15808}
42903f7f
L
15809
15810static void
15811XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED)
15812{
b9733481
L
15813 const char **names;
15814
c0f3af97
L
15815 if (need_vex)
15816 {
15817 switch (vex.length)
15818 {
15819 case 128:
b9733481 15820 names = names_xmm;
c0f3af97
L
15821 break;
15822 case 256:
b9733481 15823 names = names_ymm;
c0f3af97
L
15824 break;
15825 default:
15826 abort ();
15827 }
15828 }
15829 else
b9733481
L
15830 names = names_xmm;
15831 oappend (names[reg]);
42903f7f 15832}
381d071f
L
15833
15834static void
15835CRC32_Fixup (int bytemode, int sizeflag)
15836{
15837 /* Add proper suffix to "crc32". */
ea397f5b 15838 char *p = mnemonicendp;
381d071f
L
15839
15840 switch (bytemode)
15841 {
15842 case b_mode:
20592a94 15843 if (intel_syntax)
ea397f5b 15844 goto skip;
20592a94 15845
381d071f
L
15846 *p++ = 'b';
15847 break;
15848 case v_mode:
20592a94 15849 if (intel_syntax)
ea397f5b 15850 goto skip;
20592a94 15851
381d071f
L
15852 USED_REX (REX_W);
15853 if (rex & REX_W)
15854 *p++ = 'q';
7bb15c6f 15855 else
f16cd0d5
L
15856 {
15857 if (sizeflag & DFLAG)
15858 *p++ = 'l';
15859 else
15860 *p++ = 'w';
15861 used_prefixes |= (prefixes & PREFIX_DATA);
15862 }
381d071f
L
15863 break;
15864 default:
15865 oappend (INTERNAL_DISASSEMBLER_ERROR);
15866 break;
15867 }
ea397f5b 15868 mnemonicendp = p;
381d071f
L
15869 *p = '\0';
15870
ea397f5b 15871skip:
381d071f
L
15872 if (modrm.mod == 3)
15873 {
15874 int add;
15875
15876 /* Skip mod/rm byte. */
15877 MODRM_CHECK;
15878 codep++;
15879
15880 USED_REX (REX_B);
15881 add = (rex & REX_B) ? 8 : 0;
15882 if (bytemode == b_mode)
15883 {
15884 USED_REX (0);
15885 if (rex)
15886 oappend (names8rex[modrm.rm + add]);
15887 else
15888 oappend (names8[modrm.rm + add]);
15889 }
15890 else
15891 {
15892 USED_REX (REX_W);
15893 if (rex & REX_W)
15894 oappend (names64[modrm.rm + add]);
15895 else if ((prefixes & PREFIX_DATA))
15896 oappend (names16[modrm.rm + add]);
15897 else
15898 oappend (names32[modrm.rm + add]);
15899 }
15900 }
15901 else
9344ff29 15902 OP_E (bytemode, sizeflag);
381d071f 15903}
85f10a01 15904
eacc9c89
L
15905static void
15906FXSAVE_Fixup (int bytemode, int sizeflag)
15907{
15908 /* Add proper suffix to "fxsave" and "fxrstor". */
15909 USED_REX (REX_W);
15910 if (rex & REX_W)
15911 {
15912 char *p = mnemonicendp;
15913 *p++ = '6';
15914 *p++ = '4';
15915 *p = '\0';
15916 mnemonicendp = p;
15917 }
15918 OP_M (bytemode, sizeflag);
15919}
15920
15c7c1d8
JB
15921static void
15922PCMPESTR_Fixup (int bytemode, int sizeflag)
15923{
15924 /* Add proper suffix to "{,v}pcmpestr{i,m}". */
15925 if (!intel_syntax)
15926 {
15927 char *p = mnemonicendp;
15928
15929 USED_REX (REX_W);
15930 if (rex & REX_W)
15931 *p++ = 'q';
15932 else if (sizeflag & SUFFIX_ALWAYS)
15933 *p++ = 'l';
15934
15935 *p = '\0';
15936 mnemonicendp = p;
15937 }
15938
15939 OP_EX (bytemode, sizeflag);
15940}
15941
c0f3af97
L
15942/* Display the destination register operand for instructions with
15943 VEX. */
15944
15945static void
15946OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
15947{
539f890d 15948 int reg;
b9733481
L
15949 const char **names;
15950
c0f3af97
L
15951 if (!need_vex)
15952 abort ();
15953
15954 if (!need_vex_reg)
15955 return;
15956
539f890d 15957 reg = vex.register_specifier;
63c6fc6c 15958 vex.register_specifier = 0;
5f847646
JB
15959 if (address_mode != mode_64bit)
15960 reg &= 7;
15961 else if (vex.evex && !vex.v)
15962 reg += 16;
43234a1e 15963
539f890d
L
15964 if (bytemode == vex_scalar_mode)
15965 {
15966 oappend (names_xmm[reg]);
15967 return;
15968 }
15969
c0f3af97
L
15970 switch (vex.length)
15971 {
15972 case 128:
15973 switch (bytemode)
15974 {
15975 case vex_mode:
15976 case vex128_mode:
6c30d220 15977 case vex_vsib_q_w_dq_mode:
5fc35d96 15978 case vex_vsib_q_w_d_mode:
cb21baef
L
15979 names = names_xmm;
15980 break;
15981 case dq_mode:
390a6789 15982 if (rex & REX_W)
cb21baef
L
15983 names = names64;
15984 else
15985 names = names32;
c0f3af97 15986 break;
1ba585e8 15987 case mask_bd_mode:
43234a1e 15988 case mask_mode:
9889cbb1
L
15989 if (reg > 0x7)
15990 {
15991 oappend ("(bad)");
15992 return;
15993 }
43234a1e
L
15994 names = names_mask;
15995 break;
c0f3af97
L
15996 default:
15997 abort ();
15998 return;
15999 }
c0f3af97
L
16000 break;
16001 case 256:
16002 switch (bytemode)
16003 {
16004 case vex_mode:
16005 case vex256_mode:
6c30d220
L
16006 names = names_ymm;
16007 break;
16008 case vex_vsib_q_w_dq_mode:
5fc35d96 16009 case vex_vsib_q_w_d_mode:
6c30d220 16010 names = vex.w ? names_ymm : names_xmm;
c0f3af97 16011 break;
1ba585e8 16012 case mask_bd_mode:
43234a1e 16013 case mask_mode:
9889cbb1
L
16014 if (reg > 0x7)
16015 {
16016 oappend ("(bad)");
16017 return;
16018 }
43234a1e
L
16019 names = names_mask;
16020 break;
c0f3af97 16021 default:
a37a2806
NC
16022 /* See PR binutils/20893 for a reproducer. */
16023 oappend ("(bad)");
c0f3af97
L
16024 return;
16025 }
c0f3af97 16026 break;
43234a1e
L
16027 case 512:
16028 names = names_zmm;
16029 break;
c0f3af97
L
16030 default:
16031 abort ();
16032 break;
16033 }
539f890d 16034 oappend (names[reg]);
c0f3af97
L
16035}
16036
922d8de8
DR
16037/* Get the VEX immediate byte without moving codep. */
16038
16039static unsigned char
ccc5981b 16040get_vex_imm8 (int sizeflag, int opnum)
922d8de8
DR
16041{
16042 int bytes_before_imm = 0;
16043
922d8de8
DR
16044 if (modrm.mod != 3)
16045 {
16046 /* There are SIB/displacement bytes. */
16047 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
6c067bbb 16048 {
922d8de8 16049 /* 32/64 bit address mode */
6c067bbb 16050 int base = modrm.rm;
922d8de8
DR
16051
16052 /* Check SIB byte. */
6c067bbb
RM
16053 if (base == 4)
16054 {
16055 FETCH_DATA (the_info, codep + 1);
16056 base = *codep & 7;
16057 /* When decoding the third source, don't increase
16058 bytes_before_imm as this has already been incremented
16059 by one in OP_E_memory while decoding the second
16060 source operand. */
16061 if (opnum == 0)
16062 bytes_before_imm++;
16063 }
16064
16065 /* Don't increase bytes_before_imm when decoding the third source,
16066 it has already been incremented by OP_E_memory while decoding
16067 the second source operand. */
16068 if (opnum == 0)
16069 {
16070 switch (modrm.mod)
16071 {
16072 case 0:
16073 /* When modrm.rm == 5 or modrm.rm == 4 and base in
16074 SIB == 5, there is a 4 byte displacement. */
16075 if (base != 5)
16076 /* No displacement. */
16077 break;
1a0670f3 16078 /* Fall through. */
6c067bbb
RM
16079 case 2:
16080 /* 4 byte displacement. */
16081 bytes_before_imm += 4;
16082 break;
16083 case 1:
16084 /* 1 byte displacement. */
16085 bytes_before_imm++;
16086 break;
16087 }
16088 }
16089 }
922d8de8 16090 else
02e647f9
SP
16091 {
16092 /* 16 bit address mode */
6c067bbb
RM
16093 /* Don't increase bytes_before_imm when decoding the third source,
16094 it has already been incremented by OP_E_memory while decoding
16095 the second source operand. */
16096 if (opnum == 0)
16097 {
02e647f9
SP
16098 switch (modrm.mod)
16099 {
16100 case 0:
16101 /* When modrm.rm == 6, there is a 2 byte displacement. */
16102 if (modrm.rm != 6)
16103 /* No displacement. */
16104 break;
1a0670f3 16105 /* Fall through. */
02e647f9
SP
16106 case 2:
16107 /* 2 byte displacement. */
16108 bytes_before_imm += 2;
16109 break;
16110 case 1:
16111 /* 1 byte displacement: when decoding the third source,
16112 don't increase bytes_before_imm as this has already
16113 been incremented by one in OP_E_memory while decoding
16114 the second source operand. */
16115 if (opnum == 0)
16116 bytes_before_imm++;
ccc5981b 16117
02e647f9
SP
16118 break;
16119 }
922d8de8
DR
16120 }
16121 }
16122 }
16123
16124 FETCH_DATA (the_info, codep + bytes_before_imm + 1);
16125 return codep [bytes_before_imm];
16126}
16127
16128static void
16129OP_EX_VexReg (int bytemode, int sizeflag, int reg)
16130{
b9733481
L
16131 const char **names;
16132
922d8de8
DR
16133 if (reg == -1 && modrm.mod != 3)
16134 {
16135 OP_E_memory (bytemode, sizeflag);
16136 return;
16137 }
16138 else
16139 {
16140 if (reg == -1)
16141 {
16142 reg = modrm.rm;
16143 USED_REX (REX_B);
16144 if (rex & REX_B)
16145 reg += 8;
16146 }
5f847646
JB
16147 if (address_mode != mode_64bit)
16148 reg &= 7;
922d8de8
DR
16149 }
16150
16151 switch (vex.length)
16152 {
16153 case 128:
b9733481 16154 names = names_xmm;
922d8de8
DR
16155 break;
16156 case 256:
b9733481 16157 names = names_ymm;
922d8de8
DR
16158 break;
16159 default:
16160 abort ();
16161 }
b9733481 16162 oappend (names[reg]);
922d8de8
DR
16163}
16164
a683cc34
SP
16165static void
16166OP_EX_VexImmW (int bytemode, int sizeflag)
16167{
16168 int reg = -1;
16169 static unsigned char vex_imm8;
16170
16171 if (vex_w_done == 0)
16172 {
16173 vex_w_done = 1;
16174
16175 /* Skip mod/rm byte. */
16176 MODRM_CHECK;
16177 codep++;
16178
16179 vex_imm8 = get_vex_imm8 (sizeflag, 0);
16180
16181 if (vex.w)
16182 reg = vex_imm8 >> 4;
16183
16184 OP_EX_VexReg (bytemode, sizeflag, reg);
16185 }
16186 else if (vex_w_done == 1)
16187 {
16188 vex_w_done = 2;
16189
16190 if (!vex.w)
16191 reg = vex_imm8 >> 4;
16192
16193 OP_EX_VexReg (bytemode, sizeflag, reg);
16194 }
16195 else
16196 {
16197 /* Output the imm8 directly. */
16198 scratchbuf[0] = '$';
16199 print_operand_value (scratchbuf + 1, 1, vex_imm8 & 0xf);
9ce09ba2 16200 oappend_maybe_intel (scratchbuf);
a683cc34
SP
16201 scratchbuf[0] = '\0';
16202 codep++;
16203 }
16204}
16205
5dd85c99
SP
16206static void
16207OP_Vex_2src (int bytemode, int sizeflag)
16208{
16209 if (modrm.mod == 3)
16210 {
b9733481 16211 int reg = modrm.rm;
5dd85c99 16212 USED_REX (REX_B);
b9733481
L
16213 if (rex & REX_B)
16214 reg += 8;
16215 oappend (names_xmm[reg]);
5dd85c99
SP
16216 }
16217 else
16218 {
16219 if (intel_syntax
16220 && (bytemode == v_mode || bytemode == v_swap_mode))
16221 {
16222 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
16223 used_prefixes |= (prefixes & PREFIX_DATA);
16224 }
16225 OP_E (bytemode, sizeflag);
16226 }
16227}
16228
16229static void
16230OP_Vex_2src_1 (int bytemode, int sizeflag)
16231{
16232 if (modrm.mod == 3)
16233 {
16234 /* Skip mod/rm byte. */
16235 MODRM_CHECK;
16236 codep++;
16237 }
16238
16239 if (vex.w)
5f847646
JB
16240 {
16241 unsigned int reg = vex.register_specifier;
63c6fc6c 16242 vex.register_specifier = 0;
5f847646
JB
16243
16244 if (address_mode != mode_64bit)
16245 reg &= 7;
16246 oappend (names_xmm[reg]);
16247 }
5dd85c99
SP
16248 else
16249 OP_Vex_2src (bytemode, sizeflag);
16250}
16251
16252static void
16253OP_Vex_2src_2 (int bytemode, int sizeflag)
16254{
16255 if (vex.w)
16256 OP_Vex_2src (bytemode, sizeflag);
16257 else
5f847646
JB
16258 {
16259 unsigned int reg = vex.register_specifier;
63c6fc6c 16260 vex.register_specifier = 0;
5f847646
JB
16261
16262 if (address_mode != mode_64bit)
16263 reg &= 7;
16264 oappend (names_xmm[reg]);
16265 }
5dd85c99
SP
16266}
16267
922d8de8
DR
16268static void
16269OP_EX_VexW (int bytemode, int sizeflag)
16270{
16271 int reg = -1;
16272
16273 if (!vex_w_done)
16274 {
41effecb
SP
16275 /* Skip mod/rm byte. */
16276 MODRM_CHECK;
16277 codep++;
16278
922d8de8 16279 if (vex.w)
ccc5981b 16280 reg = get_vex_imm8 (sizeflag, 0) >> 4;
922d8de8
DR
16281 }
16282 else
16283 {
16284 if (!vex.w)
ccc5981b 16285 reg = get_vex_imm8 (sizeflag, 1) >> 4;
922d8de8
DR
16286 }
16287
16288 OP_EX_VexReg (bytemode, sizeflag, reg);
922d8de8 16289
3a2430e0
JB
16290 if (vex_w_done)
16291 codep++;
16292 vex_w_done = 1;
922d8de8
DR
16293}
16294
c0f3af97
L
16295static void
16296OP_REG_VexI4 (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16297{
16298 int reg;
b9733481
L
16299 const char **names;
16300
c0f3af97
L
16301 FETCH_DATA (the_info, codep + 1);
16302 reg = *codep++;
16303
16304 if (bytemode != x_mode)
16305 abort ();
16306
c0f3af97 16307 reg >>= 4;
5f847646
JB
16308 if (address_mode != mode_64bit)
16309 reg &= 7;
dae39acc 16310
c0f3af97
L
16311 switch (vex.length)
16312 {
16313 case 128:
b9733481 16314 names = names_xmm;
c0f3af97
L
16315 break;
16316 case 256:
b9733481 16317 names = names_ymm;
c0f3af97
L
16318 break;
16319 default:
16320 abort ();
16321 }
b9733481 16322 oappend (names[reg]);
c0f3af97
L
16323}
16324
922d8de8
DR
16325static void
16326OP_XMM_VexW (int bytemode, int sizeflag)
16327{
16328 /* Turn off the REX.W bit since it is used for swapping operands
16329 now. */
16330 rex &= ~REX_W;
16331 OP_XMM (bytemode, sizeflag);
16332}
16333
c0f3af97
L
16334static void
16335OP_EX_Vex (int bytemode, int sizeflag)
16336{
16337 if (modrm.mod != 3)
63c6fc6c 16338 need_vex_reg = 0;
c0f3af97
L
16339 OP_EX (bytemode, sizeflag);
16340}
16341
16342static void
16343OP_XMM_Vex (int bytemode, int sizeflag)
16344{
16345 if (modrm.mod != 3)
63c6fc6c 16346 need_vex_reg = 0;
c0f3af97
L
16347 OP_XMM (bytemode, sizeflag);
16348}
16349
ea397f5b
L
16350static struct op vex_cmp_op[] =
16351{
16352 { STRING_COMMA_LEN ("eq") },
16353 { STRING_COMMA_LEN ("lt") },
16354 { STRING_COMMA_LEN ("le") },
16355 { STRING_COMMA_LEN ("unord") },
16356 { STRING_COMMA_LEN ("neq") },
16357 { STRING_COMMA_LEN ("nlt") },
16358 { STRING_COMMA_LEN ("nle") },
16359 { STRING_COMMA_LEN ("ord") },
16360 { STRING_COMMA_LEN ("eq_uq") },
16361 { STRING_COMMA_LEN ("nge") },
16362 { STRING_COMMA_LEN ("ngt") },
16363 { STRING_COMMA_LEN ("false") },
16364 { STRING_COMMA_LEN ("neq_oq") },
16365 { STRING_COMMA_LEN ("ge") },
16366 { STRING_COMMA_LEN ("gt") },
16367 { STRING_COMMA_LEN ("true") },
16368 { STRING_COMMA_LEN ("eq_os") },
16369 { STRING_COMMA_LEN ("lt_oq") },
16370 { STRING_COMMA_LEN ("le_oq") },
16371 { STRING_COMMA_LEN ("unord_s") },
16372 { STRING_COMMA_LEN ("neq_us") },
16373 { STRING_COMMA_LEN ("nlt_uq") },
16374 { STRING_COMMA_LEN ("nle_uq") },
16375 { STRING_COMMA_LEN ("ord_s") },
16376 { STRING_COMMA_LEN ("eq_us") },
16377 { STRING_COMMA_LEN ("nge_uq") },
16378 { STRING_COMMA_LEN ("ngt_uq") },
16379 { STRING_COMMA_LEN ("false_os") },
16380 { STRING_COMMA_LEN ("neq_os") },
16381 { STRING_COMMA_LEN ("ge_oq") },
16382 { STRING_COMMA_LEN ("gt_oq") },
16383 { STRING_COMMA_LEN ("true_us") },
c0f3af97
L
16384};
16385
16386static void
16387VCMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16388{
16389 unsigned int cmp_type;
16390
16391 FETCH_DATA (the_info, codep + 1);
16392 cmp_type = *codep++ & 0xff;
16393 if (cmp_type < ARRAY_SIZE (vex_cmp_op))
16394 {
16395 char suffix [3];
ea397f5b 16396 char *p = mnemonicendp - 2;
c0f3af97
L
16397 suffix[0] = p[0];
16398 suffix[1] = p[1];
16399 suffix[2] = '\0';
ea397f5b
L
16400 sprintf (p, "%s%s", vex_cmp_op[cmp_type].name, suffix);
16401 mnemonicendp += vex_cmp_op[cmp_type].len;
c0f3af97
L
16402 }
16403 else
16404 {
16405 /* We have a reserved extension byte. Output it directly. */
16406 scratchbuf[0] = '$';
16407 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 16408 oappend_maybe_intel (scratchbuf);
c0f3af97
L
16409 scratchbuf[0] = '\0';
16410 }
16411}
16412
43234a1e
L
16413static void
16414VPCMP_Fixup (int bytemode ATTRIBUTE_UNUSED,
16415 int sizeflag ATTRIBUTE_UNUSED)
16416{
16417 unsigned int cmp_type;
16418
16419 if (!vex.evex)
16420 abort ();
16421
16422 FETCH_DATA (the_info, codep + 1);
16423 cmp_type = *codep++ & 0xff;
16424 /* There are aliases for immediates 0, 1, 2, 4, 5, 6.
16425 If it's the case, print suffix, otherwise - print the immediate. */
16426 if (cmp_type < ARRAY_SIZE (simd_cmp_op)
16427 && cmp_type != 3
16428 && cmp_type != 7)
16429 {
16430 char suffix [3];
16431 char *p = mnemonicendp - 2;
16432
16433 /* vpcmp* can have both one- and two-lettered suffix. */
16434 if (p[0] == 'p')
16435 {
16436 p++;
16437 suffix[0] = p[0];
16438 suffix[1] = '\0';
16439 }
16440 else
16441 {
16442 suffix[0] = p[0];
16443 suffix[1] = p[1];
16444 suffix[2] = '\0';
16445 }
16446
16447 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
16448 mnemonicendp += simd_cmp_op[cmp_type].len;
16449 }
be92cb14
JB
16450 else
16451 {
16452 /* We have a reserved extension byte. Output it directly. */
16453 scratchbuf[0] = '$';
16454 print_operand_value (scratchbuf + 1, 1, cmp_type);
16455 oappend_maybe_intel (scratchbuf);
16456 scratchbuf[0] = '\0';
16457 }
16458}
16459
16460static const struct op xop_cmp_op[] =
16461{
16462 { STRING_COMMA_LEN ("lt") },
16463 { STRING_COMMA_LEN ("le") },
16464 { STRING_COMMA_LEN ("gt") },
16465 { STRING_COMMA_LEN ("ge") },
16466 { STRING_COMMA_LEN ("eq") },
16467 { STRING_COMMA_LEN ("neq") },
16468 { STRING_COMMA_LEN ("false") },
16469 { STRING_COMMA_LEN ("true") }
16470};
16471
16472static void
16473VPCOM_Fixup (int bytemode ATTRIBUTE_UNUSED,
16474 int sizeflag ATTRIBUTE_UNUSED)
16475{
16476 unsigned int cmp_type;
16477
16478 FETCH_DATA (the_info, codep + 1);
16479 cmp_type = *codep++ & 0xff;
16480 if (cmp_type < ARRAY_SIZE (xop_cmp_op))
16481 {
16482 char suffix[3];
16483 char *p = mnemonicendp - 2;
16484
16485 /* vpcom* can have both one- and two-lettered suffix. */
16486 if (p[0] == 'm')
16487 {
16488 p++;
16489 suffix[0] = p[0];
16490 suffix[1] = '\0';
16491 }
16492 else
16493 {
16494 suffix[0] = p[0];
16495 suffix[1] = p[1];
16496 suffix[2] = '\0';
16497 }
16498
16499 sprintf (p, "%s%s", xop_cmp_op[cmp_type].name, suffix);
16500 mnemonicendp += xop_cmp_op[cmp_type].len;
16501 }
43234a1e
L
16502 else
16503 {
16504 /* We have a reserved extension byte. Output it directly. */
16505 scratchbuf[0] = '$';
16506 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 16507 oappend_maybe_intel (scratchbuf);
43234a1e
L
16508 scratchbuf[0] = '\0';
16509 }
16510}
16511
ea397f5b
L
16512static const struct op pclmul_op[] =
16513{
16514 { STRING_COMMA_LEN ("lql") },
16515 { STRING_COMMA_LEN ("hql") },
16516 { STRING_COMMA_LEN ("lqh") },
16517 { STRING_COMMA_LEN ("hqh") }
c0f3af97
L
16518};
16519
16520static void
16521PCLMUL_Fixup (int bytemode ATTRIBUTE_UNUSED,
16522 int sizeflag ATTRIBUTE_UNUSED)
16523{
16524 unsigned int pclmul_type;
16525
16526 FETCH_DATA (the_info, codep + 1);
16527 pclmul_type = *codep++ & 0xff;
16528 switch (pclmul_type)
16529 {
16530 case 0x10:
16531 pclmul_type = 2;
16532 break;
16533 case 0x11:
16534 pclmul_type = 3;
16535 break;
16536 default:
16537 break;
7bb15c6f 16538 }
c0f3af97
L
16539 if (pclmul_type < ARRAY_SIZE (pclmul_op))
16540 {
16541 char suffix [4];
ea397f5b 16542 char *p = mnemonicendp - 3;
c0f3af97
L
16543 suffix[0] = p[0];
16544 suffix[1] = p[1];
16545 suffix[2] = p[2];
16546 suffix[3] = '\0';
ea397f5b
L
16547 sprintf (p, "%s%s", pclmul_op[pclmul_type].name, suffix);
16548 mnemonicendp += pclmul_op[pclmul_type].len;
c0f3af97
L
16549 }
16550 else
16551 {
16552 /* We have a reserved extension byte. Output it directly. */
16553 scratchbuf[0] = '$';
16554 print_operand_value (scratchbuf + 1, 1, pclmul_type);
9ce09ba2 16555 oappend_maybe_intel (scratchbuf);
c0f3af97
L
16556 scratchbuf[0] = '\0';
16557 }
16558}
16559
f1f8f695
L
16560static void
16561MOVBE_Fixup (int bytemode, int sizeflag)
16562{
16563 /* Add proper suffix to "movbe". */
ea397f5b 16564 char *p = mnemonicendp;
f1f8f695
L
16565
16566 switch (bytemode)
16567 {
16568 case v_mode:
16569 if (intel_syntax)
ea397f5b 16570 goto skip;
f1f8f695
L
16571
16572 USED_REX (REX_W);
16573 if (sizeflag & SUFFIX_ALWAYS)
16574 {
16575 if (rex & REX_W)
16576 *p++ = 'q';
f1f8f695 16577 else
f16cd0d5
L
16578 {
16579 if (sizeflag & DFLAG)
16580 *p++ = 'l';
16581 else
16582 *p++ = 'w';
16583 used_prefixes |= (prefixes & PREFIX_DATA);
16584 }
f1f8f695 16585 }
f1f8f695
L
16586 break;
16587 default:
16588 oappend (INTERNAL_DISASSEMBLER_ERROR);
16589 break;
16590 }
ea397f5b 16591 mnemonicendp = p;
f1f8f695
L
16592 *p = '\0';
16593
ea397f5b 16594skip:
f1f8f695
L
16595 OP_M (bytemode, sizeflag);
16596}
f88c9eb0 16597
bc31405e
L
16598static void
16599MOVSXD_Fixup (int bytemode, int sizeflag)
16600{
16601 /* Add proper suffix to "movsxd". */
16602 char *p = mnemonicendp;
16603
16604 switch (bytemode)
16605 {
16606 case movsxd_mode:
16607 if (intel_syntax)
16608 {
16609 *p++ = 'x';
16610 *p++ = 'd';
16611 goto skip;
16612 }
16613
16614 USED_REX (REX_W);
16615 if (rex & REX_W)
16616 {
16617 *p++ = 'l';
16618 *p++ = 'q';
16619 }
16620 else
16621 {
16622 *p++ = 'x';
16623 *p++ = 'd';
16624 }
16625 break;
16626 default:
16627 oappend (INTERNAL_DISASSEMBLER_ERROR);
16628 break;
16629 }
16630
16631skip:
16632 mnemonicendp = p;
16633 *p = '\0';
16634 OP_E (bytemode, sizeflag);
16635}
16636
f88c9eb0
SP
16637static void
16638OP_LWPCB_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16639{
16640 int reg;
16641 const char **names;
16642
16643 /* Skip mod/rm byte. */
16644 MODRM_CHECK;
16645 codep++;
16646
390a6789 16647 if (rex & REX_W)
f88c9eb0 16648 names = names64;
f88c9eb0 16649 else
ce7d077e 16650 names = names32;
f88c9eb0
SP
16651
16652 reg = modrm.rm;
16653 USED_REX (REX_B);
16654 if (rex & REX_B)
16655 reg += 8;
16656
16657 oappend (names[reg]);
16658}
16659
16660static void
16661OP_LWP_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16662{
16663 const char **names;
5f847646 16664 unsigned int reg = vex.register_specifier;
63c6fc6c 16665 vex.register_specifier = 0;
f88c9eb0 16666
390a6789 16667 if (rex & REX_W)
f88c9eb0 16668 names = names64;
f88c9eb0 16669 else
ce7d077e 16670 names = names32;
f88c9eb0 16671
5f847646
JB
16672 if (address_mode != mode_64bit)
16673 reg &= 7;
16674 oappend (names[reg]);
f88c9eb0 16675}
43234a1e
L
16676
16677static void
16678OP_Mask (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16679{
16680 if (!vex.evex
1ba585e8 16681 || (bytemode != mask_mode && bytemode != mask_bd_mode))
43234a1e
L
16682 abort ();
16683
16684 USED_REX (REX_R);
16685 if ((rex & REX_R) != 0 || !vex.r)
16686 {
16687 BadOp ();
16688 return;
16689 }
16690
16691 oappend (names_mask [modrm.reg]);
16692}
16693
16694static void
16695OP_Rounding (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16696{
16697 if (!vex.evex
16698 || (bytemode != evex_rounding_mode
70df6fc9 16699 && bytemode != evex_rounding_64_mode
43234a1e
L
16700 && bytemode != evex_sae_mode))
16701 abort ();
16702 if (modrm.mod == 3 && vex.b)
16703 switch (bytemode)
16704 {
70df6fc9
L
16705 case evex_rounding_64_mode:
16706 if (address_mode != mode_64bit)
16707 {
16708 oappend ("(bad)");
16709 break;
16710 }
16711 /* Fall through. */
43234a1e
L
16712 case evex_rounding_mode:
16713 oappend (names_rounding[vex.ll]);
16714 break;
16715 case evex_sae_mode:
16716 oappend ("{sae}");
16717 break;
16718 default:
16719 break;
16720 }
16721}
This page took 2.430961 seconds and 4 git commands to generate.