Enable Intel CLDEMOTE instruction.
[deliverable/binutils-gdb.git] / opcodes / i386-dis.c
CommitLineData
252b5132 1/* Print i386 instructions for GDB, the GNU debugger.
219d1afa 2 Copyright (C) 1988-2018 Free Software Foundation, Inc.
252b5132 3
9b201bb5 4 This file is part of the GNU opcodes library.
20f0a1fc 5
9b201bb5 6 This library is free software; you can redistribute it and/or modify
20f0a1fc 7 it under the terms of the GNU General Public License as published by
9b201bb5
NC
8 the Free Software Foundation; either version 3, or (at your option)
9 any later version.
20f0a1fc 10
9b201bb5
NC
11 It is distributed in the hope that it will be useful, but WITHOUT
12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
14 License for more details.
20f0a1fc
NC
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
9b201bb5
NC
18 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
19 MA 02110-1301, USA. */
20
20f0a1fc
NC
21
22/* 80386 instruction printer by Pace Willisson (pace@prep.ai.mit.edu)
23 July 1988
24 modified by John Hassey (hassey@dg-rtp.dg.com)
25 x86-64 support added by Jan Hubicka (jh@suse.cz)
26 VIA PadLock support by Michal Ludvig (mludvig@suse.cz). */
27
28/* The main tables describing the instructions is essentially a copy
29 of the "Opcode Map" chapter (Appendix A) of the Intel 80386
30 Programmers Manual. Usually, there is a capital letter, followed
31 by a small letter. The capital letter tell the addressing mode,
32 and the small letter tells about the operand size. Refer to
33 the Intel manual for details. */
252b5132 34
252b5132 35#include "sysdep.h"
88c1242d 36#include "disassemble.h"
252b5132 37#include "opintl.h"
0b1cf022 38#include "opcode/i386.h"
85f10a01 39#include "libiberty.h"
252b5132
RH
40
41#include <setjmp.h>
42
26ca5450
AJ
43static int print_insn (bfd_vma, disassemble_info *);
44static void dofloat (int);
45static void OP_ST (int, int);
46static void OP_STi (int, int);
47static int putop (const char *, int);
48static void oappend (const char *);
49static void append_seg (void);
50static void OP_indirE (int, int);
51static void print_operand_value (char *, int, bfd_vma);
c0f3af97 52static void OP_E_register (int, int);
c1e679ec 53static void OP_E_memory (int, int);
5d669648 54static void print_displacement (char *, bfd_vma);
26ca5450
AJ
55static void OP_E (int, int);
56static void OP_G (int, int);
57static bfd_vma get64 (void);
58static bfd_signed_vma get32 (void);
59static bfd_signed_vma get32s (void);
60static int get16 (void);
61static void set_op (bfd_vma, int);
b844680a 62static void OP_Skip_MODRM (int, int);
26ca5450
AJ
63static void OP_REG (int, int);
64static void OP_IMREG (int, int);
65static void OP_I (int, int);
66static void OP_I64 (int, int);
67static void OP_sI (int, int);
68static void OP_J (int, int);
69static void OP_SEG (int, int);
70static void OP_DIR (int, int);
71static void OP_OFF (int, int);
72static void OP_OFF64 (int, int);
73static void ptr_reg (int, int);
74static void OP_ESreg (int, int);
75static void OP_DSreg (int, int);
76static void OP_C (int, int);
77static void OP_D (int, int);
78static void OP_T (int, int);
6f74c397 79static void OP_R (int, int);
26ca5450
AJ
80static void OP_MMX (int, int);
81static void OP_XMM (int, int);
82static void OP_EM (int, int);
83static void OP_EX (int, int);
4d9567e0
MM
84static void OP_EMC (int,int);
85static void OP_MXC (int,int);
26ca5450
AJ
86static void OP_MS (int, int);
87static void OP_XS (int, int);
cc0ec051 88static void OP_M (int, int);
c0f3af97
L
89static void OP_VEX (int, int);
90static void OP_EX_Vex (int, int);
922d8de8 91static void OP_EX_VexW (int, int);
a683cc34 92static void OP_EX_VexImmW (int, int);
c0f3af97 93static void OP_XMM_Vex (int, int);
922d8de8 94static void OP_XMM_VexW (int, int);
43234a1e 95static void OP_Rounding (int, int);
c0f3af97
L
96static void OP_REG_VexI4 (int, int);
97static void PCLMUL_Fixup (int, int);
c0f3af97
L
98static void VZERO_Fixup (int, int);
99static void VCMP_Fixup (int, int);
43234a1e 100static void VPCMP_Fixup (int, int);
be92cb14 101static void VPCOM_Fixup (int, int);
cc0ec051 102static void OP_0f07 (int, int);
b844680a
L
103static void OP_Monitor (int, int);
104static void OP_Mwait (int, int);
9916071f 105static void OP_Mwaitx (int, int);
46e883c5
L
106static void NOP_Fixup1 (int, int);
107static void NOP_Fixup2 (int, int);
26ca5450 108static void OP_3DNowSuffix (int, int);
ad19981d 109static void CMP_Fixup (int, int);
26ca5450 110static void BadOp (void);
35c52694 111static void REP_Fixup (int, int);
7e8b059b 112static void BND_Fixup (int, int);
04ef582a 113static void NOTRACK_Fixup (int, int);
42164a71
L
114static void HLE_Fixup1 (int, int);
115static void HLE_Fixup2 (int, int);
116static void HLE_Fixup3 (int, int);
f5804c90 117static void CMPXCHG8B_Fixup (int, int);
42903f7f 118static void XMM_Fixup (int, int);
381d071f 119static void CRC32_Fixup (int, int);
eacc9c89 120static void FXSAVE_Fixup (int, int);
15c7c1d8 121static void PCMPESTR_Fixup (int, int);
f88c9eb0
SP
122static void OP_LWPCB_E (int, int);
123static void OP_LWP_E (int, int);
5dd85c99
SP
124static void OP_Vex_2src_1 (int, int);
125static void OP_Vex_2src_2 (int, int);
c1e679ec 126
f1f8f695 127static void MOVBE_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 }
4ee52178 276#define Mx { OP_M, x_mode }
c0f3af97 277#define Mxmm { OP_M, xmm_mode }
ce518a5f 278#define Gb { OP_G, b_mode }
7e8b059b 279#define Gbnd { OP_G, bnd_mode }
ce518a5f
L
280#define Gv { OP_G, v_mode }
281#define Gd { OP_G, d_mode }
282#define Gdq { OP_G, dq_mode }
283#define Gm { OP_G, m_mode }
284#define Gw { OP_G, w_mode }
6f74c397 285#define Rd { OP_R, d_mode }
43234a1e 286#define Rdq { OP_R, dq_mode }
6f74c397 287#define Rm { OP_R, m_mode }
ce518a5f
L
288#define Ib { OP_I, b_mode }
289#define sIb { OP_sI, b_mode } /* sign extened byte */
e3949f17 290#define sIbT { OP_sI, b_T_mode } /* sign extened byte like 'T' */
ce518a5f 291#define Iv { OP_I, v_mode }
7bb15c6f 292#define sIv { OP_sI, v_mode }
ce518a5f
L
293#define Iq { OP_I, q_mode }
294#define Iv64 { OP_I64, v_mode }
295#define Iw { OP_I, w_mode }
296#define I1 { OP_I, const_1_mode }
297#define Jb { OP_J, b_mode }
298#define Jv { OP_J, v_mode }
299#define Cm { OP_C, m_mode }
300#define Dm { OP_D, m_mode }
301#define Td { OP_T, d_mode }
b844680a 302#define Skip_MODRM { OP_Skip_MODRM, 0 }
ce518a5f
L
303
304#define RMeAX { OP_REG, eAX_reg }
305#define RMeBX { OP_REG, eBX_reg }
306#define RMeCX { OP_REG, eCX_reg }
307#define RMeDX { OP_REG, eDX_reg }
308#define RMeSP { OP_REG, eSP_reg }
309#define RMeBP { OP_REG, eBP_reg }
310#define RMeSI { OP_REG, eSI_reg }
311#define RMeDI { OP_REG, eDI_reg }
312#define RMrAX { OP_REG, rAX_reg }
313#define RMrBX { OP_REG, rBX_reg }
314#define RMrCX { OP_REG, rCX_reg }
315#define RMrDX { OP_REG, rDX_reg }
316#define RMrSP { OP_REG, rSP_reg }
317#define RMrBP { OP_REG, rBP_reg }
318#define RMrSI { OP_REG, rSI_reg }
319#define RMrDI { OP_REG, rDI_reg }
320#define RMAL { OP_REG, al_reg }
ce518a5f
L
321#define RMCL { OP_REG, cl_reg }
322#define RMDL { OP_REG, dl_reg }
323#define RMBL { OP_REG, bl_reg }
324#define RMAH { OP_REG, ah_reg }
325#define RMCH { OP_REG, ch_reg }
326#define RMDH { OP_REG, dh_reg }
327#define RMBH { OP_REG, bh_reg }
328#define RMAX { OP_REG, ax_reg }
329#define RMDX { OP_REG, dx_reg }
330
331#define eAX { OP_IMREG, eAX_reg }
332#define eBX { OP_IMREG, eBX_reg }
333#define eCX { OP_IMREG, eCX_reg }
334#define eDX { OP_IMREG, eDX_reg }
335#define eSP { OP_IMREG, eSP_reg }
336#define eBP { OP_IMREG, eBP_reg }
337#define eSI { OP_IMREG, eSI_reg }
338#define eDI { OP_IMREG, eDI_reg }
339#define AL { OP_IMREG, al_reg }
340#define CL { OP_IMREG, cl_reg }
341#define DL { OP_IMREG, dl_reg }
342#define BL { OP_IMREG, bl_reg }
343#define AH { OP_IMREG, ah_reg }
344#define CH { OP_IMREG, ch_reg }
345#define DH { OP_IMREG, dh_reg }
346#define BH { OP_IMREG, bh_reg }
347#define AX { OP_IMREG, ax_reg }
348#define DX { OP_IMREG, dx_reg }
349#define zAX { OP_IMREG, z_mode_ax_reg }
350#define indirDX { OP_IMREG, indir_dx_reg }
351
352#define Sw { OP_SEG, w_mode }
353#define Sv { OP_SEG, v_mode }
354#define Ap { OP_DIR, 0 }
355#define Ob { OP_OFF64, b_mode }
356#define Ov { OP_OFF64, v_mode }
357#define Xb { OP_DSreg, eSI_reg }
358#define Xv { OP_DSreg, eSI_reg }
359#define Xz { OP_DSreg, eSI_reg }
360#define Yb { OP_ESreg, eDI_reg }
361#define Yv { OP_ESreg, eDI_reg }
362#define DSBX { OP_DSreg, eBX_reg }
363
364#define es { OP_REG, es_reg }
365#define ss { OP_REG, ss_reg }
366#define cs { OP_REG, cs_reg }
367#define ds { OP_REG, ds_reg }
368#define fs { OP_REG, fs_reg }
369#define gs { OP_REG, gs_reg }
370
371#define MX { OP_MMX, 0 }
372#define XM { OP_XMM, 0 }
539f890d 373#define XMScalar { OP_XMM, scalar_mode }
6c30d220 374#define XMGatherQ { OP_XMM, vex_vsib_q_w_dq_mode }
c0f3af97 375#define XMM { OP_XMM, xmm_mode }
43234a1e 376#define XMxmmq { OP_XMM, xmmq_mode }
ce518a5f 377#define EM { OP_EM, v_mode }
b6169b20 378#define EMS { OP_EM, v_swap_mode }
09a2c6cf 379#define EMd { OP_EM, d_mode }
14051056 380#define EMx { OP_EM, x_mode }
53467f57 381#define EXbScalar { OP_EX, b_scalar_mode }
8976381e 382#define EXw { OP_EX, w_mode }
53467f57 383#define EXwScalar { OP_EX, w_scalar_mode }
09a2c6cf 384#define EXd { OP_EX, d_mode }
539f890d 385#define EXdScalar { OP_EX, d_scalar_mode }
fa99fab2 386#define EXdS { OP_EX, d_swap_mode }
43234a1e 387#define EXdScalarS { OP_EX, d_scalar_swap_mode }
09a2c6cf 388#define EXq { OP_EX, q_mode }
539f890d
L
389#define EXqScalar { OP_EX, q_scalar_mode }
390#define EXqScalarS { OP_EX, q_scalar_swap_mode }
b6169b20 391#define EXqS { OP_EX, q_swap_mode }
09a2c6cf 392#define EXx { OP_EX, x_mode }
b6169b20 393#define EXxS { OP_EX, x_swap_mode }
c0f3af97 394#define EXxmm { OP_EX, xmm_mode }
43234a1e 395#define EXymm { OP_EX, ymm_mode }
c0f3af97 396#define EXxmmq { OP_EX, xmmq_mode }
43234a1e 397#define EXEvexHalfBcstXmmq { OP_EX, evex_half_bcst_xmmq_mode }
6c30d220
L
398#define EXxmm_mb { OP_EX, xmm_mb_mode }
399#define EXxmm_mw { OP_EX, xmm_mw_mode }
400#define EXxmm_md { OP_EX, xmm_md_mode }
401#define EXxmm_mq { OP_EX, xmm_mq_mode }
43234a1e 402#define EXxmm_mdq { OP_EX, xmm_mdq_mode }
6c30d220
L
403#define EXxmmdw { OP_EX, xmmdw_mode }
404#define EXxmmqd { OP_EX, xmmqd_mode }
c0f3af97 405#define EXymmq { OP_EX, ymmq_mode }
0bfee649 406#define EXVexWdq { OP_EX, vex_w_dq_mode }
1c480963 407#define EXVexWdqScalar { OP_EX, vex_scalar_w_dq_mode }
43234a1e
L
408#define EXEvexXGscat { OP_EX, evex_x_gscat_mode }
409#define EXEvexXNoBcst { OP_EX, evex_x_nobcst_mode }
ce518a5f
L
410#define MS { OP_MS, v_mode }
411#define XS { OP_XS, v_mode }
09335d05 412#define EMCq { OP_EMC, q_mode }
ce518a5f 413#define MXC { OP_MXC, 0 }
ce518a5f 414#define OPSUF { OP_3DNowSuffix, 0 }
ad19981d 415#define CMP { CMP_Fixup, 0 }
42903f7f 416#define XMM0 { XMM_Fixup, 0 }
eacc9c89 417#define FXSAVE { FXSAVE_Fixup, 0 }
5dd85c99
SP
418#define Vex_2src_1 { OP_Vex_2src_1, 0 }
419#define Vex_2src_2 { OP_Vex_2src_2, 0 }
252b5132 420
c0f3af97 421#define Vex { OP_VEX, vex_mode }
539f890d 422#define VexScalar { OP_VEX, vex_scalar_mode }
6c30d220 423#define VexGatherQ { OP_VEX, vex_vsib_q_w_dq_mode }
c0f3af97
L
424#define Vex128 { OP_VEX, vex128_mode }
425#define Vex256 { OP_VEX, vex256_mode }
cb21baef 426#define VexGdq { OP_VEX, dq_mode }
c0f3af97 427#define EXdVex { OP_EX_Vex, d_mode }
fa99fab2 428#define EXdVexS { OP_EX_Vex, d_swap_mode }
539f890d 429#define EXdVexScalarS { OP_EX_Vex, d_scalar_swap_mode }
c0f3af97 430#define EXqVex { OP_EX_Vex, q_mode }
fa99fab2 431#define EXqVexS { OP_EX_Vex, q_swap_mode }
539f890d 432#define EXqVexScalarS { OP_EX_Vex, q_scalar_swap_mode }
922d8de8
DR
433#define EXVexW { OP_EX_VexW, x_mode }
434#define EXdVexW { OP_EX_VexW, d_mode }
435#define EXqVexW { OP_EX_VexW, q_mode }
a683cc34 436#define EXVexImmW { OP_EX_VexImmW, x_mode }
c0f3af97 437#define XMVex { OP_XMM_Vex, 0 }
539f890d 438#define XMVexScalar { OP_XMM_Vex, scalar_mode }
922d8de8 439#define XMVexW { OP_XMM_VexW, 0 }
c0f3af97
L
440#define XMVexI4 { OP_REG_VexI4, x_mode }
441#define PCLMUL { PCLMUL_Fixup, 0 }
442#define VZERO { VZERO_Fixup, 0 }
443#define VCMP { VCMP_Fixup, 0 }
43234a1e 444#define VPCMP { VPCMP_Fixup, 0 }
be92cb14 445#define VPCOM { VPCOM_Fixup, 0 }
43234a1e
L
446
447#define EXxEVexR { OP_Rounding, evex_rounding_mode }
448#define EXxEVexS { OP_Rounding, evex_sae_mode }
449
450#define XMask { OP_Mask, mask_mode }
451#define MaskG { OP_G, mask_mode }
452#define MaskE { OP_E, mask_mode }
1ba585e8 453#define MaskBDE { OP_E, mask_bd_mode }
43234a1e
L
454#define MaskR { OP_R, mask_mode }
455#define MaskVex { OP_VEX, mask_mode }
c0f3af97 456
6c30d220 457#define MVexVSIBDWpX { OP_M, vex_vsib_d_w_dq_mode }
5fc35d96 458#define MVexVSIBDQWpX { OP_M, vex_vsib_d_w_d_mode }
6c30d220 459#define MVexVSIBQWpX { OP_M, vex_vsib_q_w_dq_mode }
5fc35d96 460#define MVexVSIBQDWpX { OP_M, vex_vsib_q_w_d_mode }
6c30d220 461
35c52694 462/* Used handle "rep" prefix for string instructions. */
ce518a5f
L
463#define Xbr { REP_Fixup, eSI_reg }
464#define Xvr { REP_Fixup, eSI_reg }
465#define Ybr { REP_Fixup, eDI_reg }
466#define Yvr { REP_Fixup, eDI_reg }
467#define Yzr { REP_Fixup, eDI_reg }
468#define indirDXr { REP_Fixup, indir_dx_reg }
469#define ALr { REP_Fixup, al_reg }
470#define eAXr { REP_Fixup, eAX_reg }
471
42164a71
L
472/* Used handle HLE prefix for lockable instructions. */
473#define Ebh1 { HLE_Fixup1, b_mode }
474#define Evh1 { HLE_Fixup1, v_mode }
475#define Ebh2 { HLE_Fixup2, b_mode }
476#define Evh2 { HLE_Fixup2, v_mode }
477#define Ebh3 { HLE_Fixup3, b_mode }
478#define Evh3 { HLE_Fixup3, v_mode }
479
7e8b059b 480#define BND { BND_Fixup, 0 }
04ef582a 481#define NOTRACK { NOTRACK_Fixup, 0 }
7e8b059b 482
ce518a5f
L
483#define cond_jump_flag { NULL, cond_jump_mode }
484#define loop_jcxz_flag { NULL, loop_jcxz_mode }
3ffd33cf 485
252b5132 486/* bits in sizeflag */
252b5132 487#define SUFFIX_ALWAYS 4
252b5132
RH
488#define AFLAG 2
489#define DFLAG 1
490
51e7da1b
L
491enum
492{
493 /* byte operand */
494 b_mode = 1,
495 /* byte operand with operand swapped */
3873ba12 496 b_swap_mode,
e3949f17
L
497 /* byte operand, sign extend like 'T' suffix */
498 b_T_mode,
51e7da1b 499 /* operand size depends on prefixes */
3873ba12 500 v_mode,
51e7da1b 501 /* operand size depends on prefixes with operand swapped */
3873ba12 502 v_swap_mode,
de89d0a3
IT
503 /* operand size depends on address prefix */
504 va_mode,
51e7da1b 505 /* word operand */
3873ba12 506 w_mode,
51e7da1b 507 /* double word operand */
3873ba12 508 d_mode,
51e7da1b 509 /* double word operand with operand swapped */
3873ba12 510 d_swap_mode,
51e7da1b 511 /* quad word operand */
3873ba12 512 q_mode,
51e7da1b 513 /* quad word operand with operand swapped */
3873ba12 514 q_swap_mode,
51e7da1b 515 /* ten-byte operand */
3873ba12 516 t_mode,
43234a1e
L
517 /* 16-byte XMM, 32-byte YMM or 64-byte ZMM operand. In EVEX with
518 broadcast enabled. */
3873ba12 519 x_mode,
43234a1e
L
520 /* Similar to x_mode, but with different EVEX mem shifts. */
521 evex_x_gscat_mode,
522 /* Similar to x_mode, but with disabled broadcast. */
523 evex_x_nobcst_mode,
524 /* Similar to x_mode, but with operands swapped and disabled broadcast
525 in EVEX. */
3873ba12 526 x_swap_mode,
51e7da1b 527 /* 16-byte XMM operand */
3873ba12 528 xmm_mode,
43234a1e
L
529 /* XMM, XMM or YMM register operand, or quad word, xmmword or ymmword
530 memory operand (depending on vector length). Broadcast isn't
531 allowed. */
3873ba12 532 xmmq_mode,
43234a1e
L
533 /* Same as xmmq_mode, but broadcast is allowed. */
534 evex_half_bcst_xmmq_mode,
6c30d220
L
535 /* XMM register or byte memory operand */
536 xmm_mb_mode,
537 /* XMM register or word memory operand */
538 xmm_mw_mode,
539 /* XMM register or double word memory operand */
540 xmm_md_mode,
541 /* XMM register or quad word memory operand */
542 xmm_mq_mode,
43234a1e
L
543 /* XMM register or double/quad word memory operand, depending on
544 VEX.W. */
545 xmm_mdq_mode,
546 /* 16-byte XMM, word, double word or quad word operand. */
6c30d220 547 xmmdw_mode,
43234a1e 548 /* 16-byte XMM, double word, quad word operand or xmm word operand. */
6c30d220 549 xmmqd_mode,
43234a1e
L
550 /* 32-byte YMM operand */
551 ymm_mode,
552 /* quad word, ymmword or zmmword memory operand. */
3873ba12 553 ymmq_mode,
6c30d220
L
554 /* 32-byte YMM or 16-byte word operand */
555 ymmxmm_mode,
51e7da1b 556 /* d_mode in 32bit, q_mode in 64bit mode. */
3873ba12 557 m_mode,
51e7da1b 558 /* pair of v_mode operands */
3873ba12
L
559 a_mode,
560 cond_jump_mode,
561 loop_jcxz_mode,
7e8b059b 562 v_bnd_mode,
51e7da1b 563 /* operand size depends on REX prefixes. */
3873ba12 564 dq_mode,
51e7da1b 565 /* registers like dq_mode, memory like w_mode. */
3873ba12 566 dqw_mode,
9f79e886 567 /* bounds operand */
7e8b059b 568 bnd_mode,
9f79e886
JB
569 /* bounds operand with operand swapped */
570 bnd_swap_mode,
51e7da1b 571 /* 4- or 6-byte pointer operand */
3873ba12
L
572 f_mode,
573 const_1_mode,
07f5af7d
L
574 /* v_mode for indirect branch opcodes. */
575 indir_v_mode,
51e7da1b 576 /* v_mode for stack-related opcodes. */
3873ba12 577 stack_v_mode,
51e7da1b 578 /* non-quad operand size depends on prefixes */
3873ba12 579 z_mode,
51e7da1b 580 /* 16-byte operand */
3873ba12 581 o_mode,
51e7da1b 582 /* registers like dq_mode, memory like b_mode. */
3873ba12 583 dqb_mode,
1ba585e8
IT
584 /* registers like d_mode, memory like b_mode. */
585 db_mode,
586 /* registers like d_mode, memory like w_mode. */
587 dw_mode,
51e7da1b 588 /* registers like dq_mode, memory like d_mode. */
3873ba12 589 dqd_mode,
51e7da1b 590 /* normal vex mode */
3873ba12 591 vex_mode,
51e7da1b 592 /* 128bit vex mode */
3873ba12 593 vex128_mode,
51e7da1b 594 /* 256bit vex mode */
3873ba12 595 vex256_mode,
51e7da1b 596 /* operand size depends on the VEX.W bit. */
3873ba12 597 vex_w_dq_mode,
d55ee72f 598
6c30d220
L
599 /* Similar to vex_w_dq_mode, with VSIB dword indices. */
600 vex_vsib_d_w_dq_mode,
5fc35d96
IT
601 /* Similar to vex_vsib_d_w_dq_mode, with smaller memory. */
602 vex_vsib_d_w_d_mode,
6c30d220
L
603 /* Similar to vex_w_dq_mode, with VSIB qword indices. */
604 vex_vsib_q_w_dq_mode,
5fc35d96
IT
605 /* Similar to vex_vsib_q_w_dq_mode, with smaller memory. */
606 vex_vsib_q_w_d_mode,
6c30d220 607
539f890d
L
608 /* scalar, ignore vector length. */
609 scalar_mode,
53467f57
IT
610 /* like b_mode, ignore vector length. */
611 b_scalar_mode,
612 /* like w_mode, ignore vector length. */
613 w_scalar_mode,
539f890d
L
614 /* like d_mode, ignore vector length. */
615 d_scalar_mode,
616 /* like d_swap_mode, ignore vector length. */
617 d_scalar_swap_mode,
618 /* like q_mode, ignore vector length. */
619 q_scalar_mode,
620 /* like q_swap_mode, ignore vector length. */
621 q_scalar_swap_mode,
622 /* like vex_mode, ignore vector length. */
623 vex_scalar_mode,
1c480963
L
624 /* like vex_w_dq_mode, ignore vector length. */
625 vex_scalar_w_dq_mode,
539f890d 626
43234a1e
L
627 /* Static rounding. */
628 evex_rounding_mode,
629 /* Supress all exceptions. */
630 evex_sae_mode,
631
632 /* Mask register operand. */
633 mask_mode,
1ba585e8
IT
634 /* Mask register operand. */
635 mask_bd_mode,
43234a1e 636
3873ba12
L
637 es_reg,
638 cs_reg,
639 ss_reg,
640 ds_reg,
641 fs_reg,
642 gs_reg,
d55ee72f 643
3873ba12
L
644 eAX_reg,
645 eCX_reg,
646 eDX_reg,
647 eBX_reg,
648 eSP_reg,
649 eBP_reg,
650 eSI_reg,
651 eDI_reg,
d55ee72f 652
3873ba12
L
653 al_reg,
654 cl_reg,
655 dl_reg,
656 bl_reg,
657 ah_reg,
658 ch_reg,
659 dh_reg,
660 bh_reg,
d55ee72f 661
3873ba12
L
662 ax_reg,
663 cx_reg,
664 dx_reg,
665 bx_reg,
666 sp_reg,
667 bp_reg,
668 si_reg,
669 di_reg,
d55ee72f 670
3873ba12
L
671 rAX_reg,
672 rCX_reg,
673 rDX_reg,
674 rBX_reg,
675 rSP_reg,
676 rBP_reg,
677 rSI_reg,
678 rDI_reg,
d55ee72f 679
3873ba12
L
680 z_mode_ax_reg,
681 indir_dx_reg
51e7da1b 682};
252b5132 683
51e7da1b
L
684enum
685{
686 FLOATCODE = 1,
3873ba12
L
687 USE_REG_TABLE,
688 USE_MOD_TABLE,
689 USE_RM_TABLE,
690 USE_PREFIX_TABLE,
691 USE_X86_64_TABLE,
692 USE_3BYTE_TABLE,
f88c9eb0 693 USE_XOP_8F_TABLE,
3873ba12
L
694 USE_VEX_C4_TABLE,
695 USE_VEX_C5_TABLE,
9e30b8e0 696 USE_VEX_LEN_TABLE,
43234a1e
L
697 USE_VEX_W_TABLE,
698 USE_EVEX_TABLE
51e7da1b 699};
6439fc28 700
bf890a93 701#define FLOAT NULL, { { NULL, FLOATCODE } }, 0
4efba78c 702
bf890a93
IT
703#define DIS386(T, I) NULL, { { NULL, (T)}, { NULL, (I) } }, 0
704#define DIS386_PREFIX(T, I, P) NULL, { { NULL, (T)}, { NULL, (I) } }, P
1ceb70f8
L
705#define REG_TABLE(I) DIS386 (USE_REG_TABLE, (I))
706#define MOD_TABLE(I) DIS386 (USE_MOD_TABLE, (I))
707#define RM_TABLE(I) DIS386 (USE_RM_TABLE, (I))
708#define PREFIX_TABLE(I) DIS386 (USE_PREFIX_TABLE, (I))
4e7d34a6
L
709#define X86_64_TABLE(I) DIS386 (USE_X86_64_TABLE, (I))
710#define THREE_BYTE_TABLE(I) DIS386 (USE_3BYTE_TABLE, (I))
bf890a93 711#define THREE_BYTE_TABLE_PREFIX(I, P) DIS386_PREFIX (USE_3BYTE_TABLE, (I), P)
f88c9eb0 712#define XOP_8F_TABLE(I) DIS386 (USE_XOP_8F_TABLE, (I))
c0f3af97
L
713#define VEX_C4_TABLE(I) DIS386 (USE_VEX_C4_TABLE, (I))
714#define VEX_C5_TABLE(I) DIS386 (USE_VEX_C5_TABLE, (I))
715#define VEX_LEN_TABLE(I) DIS386 (USE_VEX_LEN_TABLE, (I))
9e30b8e0 716#define VEX_W_TABLE(I) DIS386 (USE_VEX_W_TABLE, (I))
43234a1e 717#define EVEX_TABLE(I) DIS386 (USE_EVEX_TABLE, (I))
1ceb70f8 718
51e7da1b
L
719enum
720{
721 REG_80 = 0,
3873ba12 722 REG_81,
7148c369 723 REG_83,
3873ba12
L
724 REG_8F,
725 REG_C0,
726 REG_C1,
727 REG_C6,
728 REG_C7,
729 REG_D0,
730 REG_D1,
731 REG_D2,
732 REG_D3,
733 REG_F6,
734 REG_F7,
735 REG_FE,
736 REG_FF,
737 REG_0F00,
738 REG_0F01,
739 REG_0F0D,
740 REG_0F18,
c48935d7 741 REG_0F1C_MOD_0,
603555e5 742 REG_0F1E_MOD_3,
3873ba12
L
743 REG_0F71,
744 REG_0F72,
745 REG_0F73,
746 REG_0FA6,
747 REG_0FA7,
748 REG_0FAE,
749 REG_0FBA,
750 REG_0FC7,
592a252b
L
751 REG_VEX_0F71,
752 REG_VEX_0F72,
753 REG_VEX_0F73,
754 REG_VEX_0FAE,
f12dc422 755 REG_VEX_0F38F3,
f88c9eb0 756 REG_XOP_LWPCB,
2a2a0f38
QN
757 REG_XOP_LWP,
758 REG_XOP_TBM_01,
43234a1e
L
759 REG_XOP_TBM_02,
760
1ba585e8 761 REG_EVEX_0F71,
43234a1e
L
762 REG_EVEX_0F72,
763 REG_EVEX_0F73,
764 REG_EVEX_0F38C6,
765 REG_EVEX_0F38C7
51e7da1b 766};
1ceb70f8 767
51e7da1b
L
768enum
769{
770 MOD_8D = 0,
42164a71
L
771 MOD_C6_REG_7,
772 MOD_C7_REG_7,
4a357820
MZ
773 MOD_FF_REG_3,
774 MOD_FF_REG_5,
3873ba12
L
775 MOD_0F01_REG_0,
776 MOD_0F01_REG_1,
777 MOD_0F01_REG_2,
778 MOD_0F01_REG_3,
8eab4136 779 MOD_0F01_REG_5,
3873ba12
L
780 MOD_0F01_REG_7,
781 MOD_0F12_PREFIX_0,
782 MOD_0F13,
783 MOD_0F16_PREFIX_0,
784 MOD_0F17,
785 MOD_0F18_REG_0,
786 MOD_0F18_REG_1,
787 MOD_0F18_REG_2,
788 MOD_0F18_REG_3,
d7189fa5
RM
789 MOD_0F18_REG_4,
790 MOD_0F18_REG_5,
791 MOD_0F18_REG_6,
792 MOD_0F18_REG_7,
7e8b059b
L
793 MOD_0F1A_PREFIX_0,
794 MOD_0F1B_PREFIX_0,
795 MOD_0F1B_PREFIX_1,
c48935d7 796 MOD_0F1C_PREFIX_0,
603555e5 797 MOD_0F1E_PREFIX_1,
3873ba12
L
798 MOD_0F24,
799 MOD_0F26,
800 MOD_0F2B_PREFIX_0,
801 MOD_0F2B_PREFIX_1,
802 MOD_0F2B_PREFIX_2,
803 MOD_0F2B_PREFIX_3,
804 MOD_0F51,
805 MOD_0F71_REG_2,
806 MOD_0F71_REG_4,
807 MOD_0F71_REG_6,
808 MOD_0F72_REG_2,
809 MOD_0F72_REG_4,
810 MOD_0F72_REG_6,
811 MOD_0F73_REG_2,
812 MOD_0F73_REG_3,
813 MOD_0F73_REG_6,
814 MOD_0F73_REG_7,
815 MOD_0FAE_REG_0,
816 MOD_0FAE_REG_1,
817 MOD_0FAE_REG_2,
818 MOD_0FAE_REG_3,
819 MOD_0FAE_REG_4,
820 MOD_0FAE_REG_5,
821 MOD_0FAE_REG_6,
822 MOD_0FAE_REG_7,
823 MOD_0FB2,
824 MOD_0FB4,
825 MOD_0FB5,
a8484f96 826 MOD_0FC3,
963f3586
IT
827 MOD_0FC7_REG_3,
828 MOD_0FC7_REG_4,
829 MOD_0FC7_REG_5,
3873ba12
L
830 MOD_0FC7_REG_6,
831 MOD_0FC7_REG_7,
832 MOD_0FD7,
833 MOD_0FE7_PREFIX_2,
834 MOD_0FF0_PREFIX_3,
835 MOD_0F382A_PREFIX_2,
603555e5
L
836 MOD_0F38F5_PREFIX_2,
837 MOD_0F38F6_PREFIX_0,
3873ba12
L
838 MOD_62_32BIT,
839 MOD_C4_32BIT,
840 MOD_C5_32BIT,
592a252b
L
841 MOD_VEX_0F12_PREFIX_0,
842 MOD_VEX_0F13,
843 MOD_VEX_0F16_PREFIX_0,
844 MOD_VEX_0F17,
845 MOD_VEX_0F2B,
ab4e4ed5
AF
846 MOD_VEX_W_0_0F41_P_0_LEN_1,
847 MOD_VEX_W_1_0F41_P_0_LEN_1,
848 MOD_VEX_W_0_0F41_P_2_LEN_1,
849 MOD_VEX_W_1_0F41_P_2_LEN_1,
850 MOD_VEX_W_0_0F42_P_0_LEN_1,
851 MOD_VEX_W_1_0F42_P_0_LEN_1,
852 MOD_VEX_W_0_0F42_P_2_LEN_1,
853 MOD_VEX_W_1_0F42_P_2_LEN_1,
854 MOD_VEX_W_0_0F44_P_0_LEN_1,
855 MOD_VEX_W_1_0F44_P_0_LEN_1,
856 MOD_VEX_W_0_0F44_P_2_LEN_1,
857 MOD_VEX_W_1_0F44_P_2_LEN_1,
858 MOD_VEX_W_0_0F45_P_0_LEN_1,
859 MOD_VEX_W_1_0F45_P_0_LEN_1,
860 MOD_VEX_W_0_0F45_P_2_LEN_1,
861 MOD_VEX_W_1_0F45_P_2_LEN_1,
862 MOD_VEX_W_0_0F46_P_0_LEN_1,
863 MOD_VEX_W_1_0F46_P_0_LEN_1,
864 MOD_VEX_W_0_0F46_P_2_LEN_1,
865 MOD_VEX_W_1_0F46_P_2_LEN_1,
866 MOD_VEX_W_0_0F47_P_0_LEN_1,
867 MOD_VEX_W_1_0F47_P_0_LEN_1,
868 MOD_VEX_W_0_0F47_P_2_LEN_1,
869 MOD_VEX_W_1_0F47_P_2_LEN_1,
870 MOD_VEX_W_0_0F4A_P_0_LEN_1,
871 MOD_VEX_W_1_0F4A_P_0_LEN_1,
872 MOD_VEX_W_0_0F4A_P_2_LEN_1,
873 MOD_VEX_W_1_0F4A_P_2_LEN_1,
874 MOD_VEX_W_0_0F4B_P_0_LEN_1,
875 MOD_VEX_W_1_0F4B_P_0_LEN_1,
876 MOD_VEX_W_0_0F4B_P_2_LEN_1,
592a252b
L
877 MOD_VEX_0F50,
878 MOD_VEX_0F71_REG_2,
879 MOD_VEX_0F71_REG_4,
880 MOD_VEX_0F71_REG_6,
881 MOD_VEX_0F72_REG_2,
882 MOD_VEX_0F72_REG_4,
883 MOD_VEX_0F72_REG_6,
884 MOD_VEX_0F73_REG_2,
885 MOD_VEX_0F73_REG_3,
886 MOD_VEX_0F73_REG_6,
887 MOD_VEX_0F73_REG_7,
ab4e4ed5
AF
888 MOD_VEX_W_0_0F91_P_0_LEN_0,
889 MOD_VEX_W_1_0F91_P_0_LEN_0,
890 MOD_VEX_W_0_0F91_P_2_LEN_0,
891 MOD_VEX_W_1_0F91_P_2_LEN_0,
892 MOD_VEX_W_0_0F92_P_0_LEN_0,
893 MOD_VEX_W_0_0F92_P_2_LEN_0,
894 MOD_VEX_W_0_0F92_P_3_LEN_0,
895 MOD_VEX_W_1_0F92_P_3_LEN_0,
896 MOD_VEX_W_0_0F93_P_0_LEN_0,
897 MOD_VEX_W_0_0F93_P_2_LEN_0,
898 MOD_VEX_W_0_0F93_P_3_LEN_0,
899 MOD_VEX_W_1_0F93_P_3_LEN_0,
900 MOD_VEX_W_0_0F98_P_0_LEN_0,
901 MOD_VEX_W_1_0F98_P_0_LEN_0,
902 MOD_VEX_W_0_0F98_P_2_LEN_0,
903 MOD_VEX_W_1_0F98_P_2_LEN_0,
904 MOD_VEX_W_0_0F99_P_0_LEN_0,
905 MOD_VEX_W_1_0F99_P_0_LEN_0,
906 MOD_VEX_W_0_0F99_P_2_LEN_0,
907 MOD_VEX_W_1_0F99_P_2_LEN_0,
592a252b
L
908 MOD_VEX_0FAE_REG_2,
909 MOD_VEX_0FAE_REG_3,
910 MOD_VEX_0FD7_PREFIX_2,
911 MOD_VEX_0FE7_PREFIX_2,
912 MOD_VEX_0FF0_PREFIX_3,
592a252b
L
913 MOD_VEX_0F381A_PREFIX_2,
914 MOD_VEX_0F382A_PREFIX_2,
915 MOD_VEX_0F382C_PREFIX_2,
916 MOD_VEX_0F382D_PREFIX_2,
917 MOD_VEX_0F382E_PREFIX_2,
6c30d220
L
918 MOD_VEX_0F382F_PREFIX_2,
919 MOD_VEX_0F385A_PREFIX_2,
920 MOD_VEX_0F388C_PREFIX_2,
921 MOD_VEX_0F388E_PREFIX_2,
ab4e4ed5
AF
922 MOD_VEX_W_0_0F3A30_P_2_LEN_0,
923 MOD_VEX_W_1_0F3A30_P_2_LEN_0,
924 MOD_VEX_W_0_0F3A31_P_2_LEN_0,
925 MOD_VEX_W_1_0F3A31_P_2_LEN_0,
926 MOD_VEX_W_0_0F3A32_P_2_LEN_0,
927 MOD_VEX_W_1_0F3A32_P_2_LEN_0,
928 MOD_VEX_W_0_0F3A33_P_2_LEN_0,
929 MOD_VEX_W_1_0F3A33_P_2_LEN_0,
43234a1e
L
930
931 MOD_EVEX_0F10_PREFIX_1,
932 MOD_EVEX_0F10_PREFIX_3,
933 MOD_EVEX_0F11_PREFIX_1,
934 MOD_EVEX_0F11_PREFIX_3,
935 MOD_EVEX_0F12_PREFIX_0,
936 MOD_EVEX_0F16_PREFIX_0,
937 MOD_EVEX_0F38C6_REG_1,
938 MOD_EVEX_0F38C6_REG_2,
939 MOD_EVEX_0F38C6_REG_5,
940 MOD_EVEX_0F38C6_REG_6,
941 MOD_EVEX_0F38C7_REG_1,
942 MOD_EVEX_0F38C7_REG_2,
943 MOD_EVEX_0F38C7_REG_5,
944 MOD_EVEX_0F38C7_REG_6
51e7da1b 945};
1ceb70f8 946
51e7da1b
L
947enum
948{
42164a71
L
949 RM_C6_REG_7 = 0,
950 RM_C7_REG_7,
951 RM_0F01_REG_0,
3873ba12
L
952 RM_0F01_REG_1,
953 RM_0F01_REG_2,
954 RM_0F01_REG_3,
8eab4136 955 RM_0F01_REG_5,
3873ba12 956 RM_0F01_REG_7,
603555e5 957 RM_0F1E_MOD_3_REG_7,
3873ba12
L
958 RM_0FAE_REG_6,
959 RM_0FAE_REG_7
51e7da1b 960};
1ceb70f8 961
51e7da1b
L
962enum
963{
964 PREFIX_90 = 0,
603555e5 965 PREFIX_MOD_0_0F01_REG_5,
2234eee6 966 PREFIX_MOD_3_0F01_REG_5_RM_0,
603555e5 967 PREFIX_MOD_3_0F01_REG_5_RM_2,
3233d7d0 968 PREFIX_0F09,
3873ba12
L
969 PREFIX_0F10,
970 PREFIX_0F11,
971 PREFIX_0F12,
972 PREFIX_0F16,
7e8b059b
L
973 PREFIX_0F1A,
974 PREFIX_0F1B,
c48935d7 975 PREFIX_0F1C,
603555e5 976 PREFIX_0F1E,
3873ba12
L
977 PREFIX_0F2A,
978 PREFIX_0F2B,
979 PREFIX_0F2C,
980 PREFIX_0F2D,
981 PREFIX_0F2E,
982 PREFIX_0F2F,
983 PREFIX_0F51,
984 PREFIX_0F52,
985 PREFIX_0F53,
986 PREFIX_0F58,
987 PREFIX_0F59,
988 PREFIX_0F5A,
989 PREFIX_0F5B,
990 PREFIX_0F5C,
991 PREFIX_0F5D,
992 PREFIX_0F5E,
993 PREFIX_0F5F,
994 PREFIX_0F60,
995 PREFIX_0F61,
996 PREFIX_0F62,
997 PREFIX_0F6C,
998 PREFIX_0F6D,
999 PREFIX_0F6F,
1000 PREFIX_0F70,
1001 PREFIX_0F73_REG_3,
1002 PREFIX_0F73_REG_7,
1003 PREFIX_0F78,
1004 PREFIX_0F79,
1005 PREFIX_0F7C,
1006 PREFIX_0F7D,
1007 PREFIX_0F7E,
1008 PREFIX_0F7F,
c7b8aa3a
L
1009 PREFIX_0FAE_REG_0,
1010 PREFIX_0FAE_REG_1,
1011 PREFIX_0FAE_REG_2,
1012 PREFIX_0FAE_REG_3,
6b40c462
L
1013 PREFIX_MOD_0_0FAE_REG_4,
1014 PREFIX_MOD_3_0FAE_REG_4,
603555e5 1015 PREFIX_MOD_0_0FAE_REG_5,
2234eee6 1016 PREFIX_MOD_3_0FAE_REG_5,
de89d0a3
IT
1017 PREFIX_MOD_0_0FAE_REG_6,
1018 PREFIX_MOD_1_0FAE_REG_6,
963f3586 1019 PREFIX_0FAE_REG_7,
3873ba12 1020 PREFIX_0FB8,
f12dc422 1021 PREFIX_0FBC,
3873ba12
L
1022 PREFIX_0FBD,
1023 PREFIX_0FC2,
a8484f96 1024 PREFIX_MOD_0_0FC3,
f24bcbaa
L
1025 PREFIX_MOD_0_0FC7_REG_6,
1026 PREFIX_MOD_3_0FC7_REG_6,
1027 PREFIX_MOD_3_0FC7_REG_7,
3873ba12
L
1028 PREFIX_0FD0,
1029 PREFIX_0FD6,
1030 PREFIX_0FE6,
1031 PREFIX_0FE7,
1032 PREFIX_0FF0,
1033 PREFIX_0FF7,
1034 PREFIX_0F3810,
1035 PREFIX_0F3814,
1036 PREFIX_0F3815,
1037 PREFIX_0F3817,
1038 PREFIX_0F3820,
1039 PREFIX_0F3821,
1040 PREFIX_0F3822,
1041 PREFIX_0F3823,
1042 PREFIX_0F3824,
1043 PREFIX_0F3825,
1044 PREFIX_0F3828,
1045 PREFIX_0F3829,
1046 PREFIX_0F382A,
1047 PREFIX_0F382B,
1048 PREFIX_0F3830,
1049 PREFIX_0F3831,
1050 PREFIX_0F3832,
1051 PREFIX_0F3833,
1052 PREFIX_0F3834,
1053 PREFIX_0F3835,
1054 PREFIX_0F3837,
1055 PREFIX_0F3838,
1056 PREFIX_0F3839,
1057 PREFIX_0F383A,
1058 PREFIX_0F383B,
1059 PREFIX_0F383C,
1060 PREFIX_0F383D,
1061 PREFIX_0F383E,
1062 PREFIX_0F383F,
1063 PREFIX_0F3840,
1064 PREFIX_0F3841,
1065 PREFIX_0F3880,
1066 PREFIX_0F3881,
6c30d220 1067 PREFIX_0F3882,
a0046408
L
1068 PREFIX_0F38C8,
1069 PREFIX_0F38C9,
1070 PREFIX_0F38CA,
1071 PREFIX_0F38CB,
1072 PREFIX_0F38CC,
1073 PREFIX_0F38CD,
48521003 1074 PREFIX_0F38CF,
3873ba12
L
1075 PREFIX_0F38DB,
1076 PREFIX_0F38DC,
1077 PREFIX_0F38DD,
1078 PREFIX_0F38DE,
1079 PREFIX_0F38DF,
1080 PREFIX_0F38F0,
1081 PREFIX_0F38F1,
603555e5 1082 PREFIX_0F38F5,
e2e1fcde 1083 PREFIX_0F38F6,
3873ba12
L
1084 PREFIX_0F3A08,
1085 PREFIX_0F3A09,
1086 PREFIX_0F3A0A,
1087 PREFIX_0F3A0B,
1088 PREFIX_0F3A0C,
1089 PREFIX_0F3A0D,
1090 PREFIX_0F3A0E,
1091 PREFIX_0F3A14,
1092 PREFIX_0F3A15,
1093 PREFIX_0F3A16,
1094 PREFIX_0F3A17,
1095 PREFIX_0F3A20,
1096 PREFIX_0F3A21,
1097 PREFIX_0F3A22,
1098 PREFIX_0F3A40,
1099 PREFIX_0F3A41,
1100 PREFIX_0F3A42,
1101 PREFIX_0F3A44,
1102 PREFIX_0F3A60,
1103 PREFIX_0F3A61,
1104 PREFIX_0F3A62,
1105 PREFIX_0F3A63,
a0046408 1106 PREFIX_0F3ACC,
48521003
IT
1107 PREFIX_0F3ACE,
1108 PREFIX_0F3ACF,
3873ba12 1109 PREFIX_0F3ADF,
592a252b
L
1110 PREFIX_VEX_0F10,
1111 PREFIX_VEX_0F11,
1112 PREFIX_VEX_0F12,
1113 PREFIX_VEX_0F16,
1114 PREFIX_VEX_0F2A,
1115 PREFIX_VEX_0F2C,
1116 PREFIX_VEX_0F2D,
1117 PREFIX_VEX_0F2E,
1118 PREFIX_VEX_0F2F,
43234a1e
L
1119 PREFIX_VEX_0F41,
1120 PREFIX_VEX_0F42,
1121 PREFIX_VEX_0F44,
1122 PREFIX_VEX_0F45,
1123 PREFIX_VEX_0F46,
1124 PREFIX_VEX_0F47,
1ba585e8 1125 PREFIX_VEX_0F4A,
43234a1e 1126 PREFIX_VEX_0F4B,
592a252b
L
1127 PREFIX_VEX_0F51,
1128 PREFIX_VEX_0F52,
1129 PREFIX_VEX_0F53,
1130 PREFIX_VEX_0F58,
1131 PREFIX_VEX_0F59,
1132 PREFIX_VEX_0F5A,
1133 PREFIX_VEX_0F5B,
1134 PREFIX_VEX_0F5C,
1135 PREFIX_VEX_0F5D,
1136 PREFIX_VEX_0F5E,
1137 PREFIX_VEX_0F5F,
1138 PREFIX_VEX_0F60,
1139 PREFIX_VEX_0F61,
1140 PREFIX_VEX_0F62,
1141 PREFIX_VEX_0F63,
1142 PREFIX_VEX_0F64,
1143 PREFIX_VEX_0F65,
1144 PREFIX_VEX_0F66,
1145 PREFIX_VEX_0F67,
1146 PREFIX_VEX_0F68,
1147 PREFIX_VEX_0F69,
1148 PREFIX_VEX_0F6A,
1149 PREFIX_VEX_0F6B,
1150 PREFIX_VEX_0F6C,
1151 PREFIX_VEX_0F6D,
1152 PREFIX_VEX_0F6E,
1153 PREFIX_VEX_0F6F,
1154 PREFIX_VEX_0F70,
1155 PREFIX_VEX_0F71_REG_2,
1156 PREFIX_VEX_0F71_REG_4,
1157 PREFIX_VEX_0F71_REG_6,
1158 PREFIX_VEX_0F72_REG_2,
1159 PREFIX_VEX_0F72_REG_4,
1160 PREFIX_VEX_0F72_REG_6,
1161 PREFIX_VEX_0F73_REG_2,
1162 PREFIX_VEX_0F73_REG_3,
1163 PREFIX_VEX_0F73_REG_6,
1164 PREFIX_VEX_0F73_REG_7,
1165 PREFIX_VEX_0F74,
1166 PREFIX_VEX_0F75,
1167 PREFIX_VEX_0F76,
1168 PREFIX_VEX_0F77,
1169 PREFIX_VEX_0F7C,
1170 PREFIX_VEX_0F7D,
1171 PREFIX_VEX_0F7E,
1172 PREFIX_VEX_0F7F,
43234a1e
L
1173 PREFIX_VEX_0F90,
1174 PREFIX_VEX_0F91,
1175 PREFIX_VEX_0F92,
1176 PREFIX_VEX_0F93,
1177 PREFIX_VEX_0F98,
1ba585e8 1178 PREFIX_VEX_0F99,
592a252b
L
1179 PREFIX_VEX_0FC2,
1180 PREFIX_VEX_0FC4,
1181 PREFIX_VEX_0FC5,
1182 PREFIX_VEX_0FD0,
1183 PREFIX_VEX_0FD1,
1184 PREFIX_VEX_0FD2,
1185 PREFIX_VEX_0FD3,
1186 PREFIX_VEX_0FD4,
1187 PREFIX_VEX_0FD5,
1188 PREFIX_VEX_0FD6,
1189 PREFIX_VEX_0FD7,
1190 PREFIX_VEX_0FD8,
1191 PREFIX_VEX_0FD9,
1192 PREFIX_VEX_0FDA,
1193 PREFIX_VEX_0FDB,
1194 PREFIX_VEX_0FDC,
1195 PREFIX_VEX_0FDD,
1196 PREFIX_VEX_0FDE,
1197 PREFIX_VEX_0FDF,
1198 PREFIX_VEX_0FE0,
1199 PREFIX_VEX_0FE1,
1200 PREFIX_VEX_0FE2,
1201 PREFIX_VEX_0FE3,
1202 PREFIX_VEX_0FE4,
1203 PREFIX_VEX_0FE5,
1204 PREFIX_VEX_0FE6,
1205 PREFIX_VEX_0FE7,
1206 PREFIX_VEX_0FE8,
1207 PREFIX_VEX_0FE9,
1208 PREFIX_VEX_0FEA,
1209 PREFIX_VEX_0FEB,
1210 PREFIX_VEX_0FEC,
1211 PREFIX_VEX_0FED,
1212 PREFIX_VEX_0FEE,
1213 PREFIX_VEX_0FEF,
1214 PREFIX_VEX_0FF0,
1215 PREFIX_VEX_0FF1,
1216 PREFIX_VEX_0FF2,
1217 PREFIX_VEX_0FF3,
1218 PREFIX_VEX_0FF4,
1219 PREFIX_VEX_0FF5,
1220 PREFIX_VEX_0FF6,
1221 PREFIX_VEX_0FF7,
1222 PREFIX_VEX_0FF8,
1223 PREFIX_VEX_0FF9,
1224 PREFIX_VEX_0FFA,
1225 PREFIX_VEX_0FFB,
1226 PREFIX_VEX_0FFC,
1227 PREFIX_VEX_0FFD,
1228 PREFIX_VEX_0FFE,
1229 PREFIX_VEX_0F3800,
1230 PREFIX_VEX_0F3801,
1231 PREFIX_VEX_0F3802,
1232 PREFIX_VEX_0F3803,
1233 PREFIX_VEX_0F3804,
1234 PREFIX_VEX_0F3805,
1235 PREFIX_VEX_0F3806,
1236 PREFIX_VEX_0F3807,
1237 PREFIX_VEX_0F3808,
1238 PREFIX_VEX_0F3809,
1239 PREFIX_VEX_0F380A,
1240 PREFIX_VEX_0F380B,
1241 PREFIX_VEX_0F380C,
1242 PREFIX_VEX_0F380D,
1243 PREFIX_VEX_0F380E,
1244 PREFIX_VEX_0F380F,
1245 PREFIX_VEX_0F3813,
6c30d220 1246 PREFIX_VEX_0F3816,
592a252b
L
1247 PREFIX_VEX_0F3817,
1248 PREFIX_VEX_0F3818,
1249 PREFIX_VEX_0F3819,
1250 PREFIX_VEX_0F381A,
1251 PREFIX_VEX_0F381C,
1252 PREFIX_VEX_0F381D,
1253 PREFIX_VEX_0F381E,
1254 PREFIX_VEX_0F3820,
1255 PREFIX_VEX_0F3821,
1256 PREFIX_VEX_0F3822,
1257 PREFIX_VEX_0F3823,
1258 PREFIX_VEX_0F3824,
1259 PREFIX_VEX_0F3825,
1260 PREFIX_VEX_0F3828,
1261 PREFIX_VEX_0F3829,
1262 PREFIX_VEX_0F382A,
1263 PREFIX_VEX_0F382B,
1264 PREFIX_VEX_0F382C,
1265 PREFIX_VEX_0F382D,
1266 PREFIX_VEX_0F382E,
1267 PREFIX_VEX_0F382F,
1268 PREFIX_VEX_0F3830,
1269 PREFIX_VEX_0F3831,
1270 PREFIX_VEX_0F3832,
1271 PREFIX_VEX_0F3833,
1272 PREFIX_VEX_0F3834,
1273 PREFIX_VEX_0F3835,
6c30d220 1274 PREFIX_VEX_0F3836,
592a252b
L
1275 PREFIX_VEX_0F3837,
1276 PREFIX_VEX_0F3838,
1277 PREFIX_VEX_0F3839,
1278 PREFIX_VEX_0F383A,
1279 PREFIX_VEX_0F383B,
1280 PREFIX_VEX_0F383C,
1281 PREFIX_VEX_0F383D,
1282 PREFIX_VEX_0F383E,
1283 PREFIX_VEX_0F383F,
1284 PREFIX_VEX_0F3840,
1285 PREFIX_VEX_0F3841,
6c30d220
L
1286 PREFIX_VEX_0F3845,
1287 PREFIX_VEX_0F3846,
1288 PREFIX_VEX_0F3847,
1289 PREFIX_VEX_0F3858,
1290 PREFIX_VEX_0F3859,
1291 PREFIX_VEX_0F385A,
1292 PREFIX_VEX_0F3878,
1293 PREFIX_VEX_0F3879,
1294 PREFIX_VEX_0F388C,
1295 PREFIX_VEX_0F388E,
1296 PREFIX_VEX_0F3890,
1297 PREFIX_VEX_0F3891,
1298 PREFIX_VEX_0F3892,
1299 PREFIX_VEX_0F3893,
592a252b
L
1300 PREFIX_VEX_0F3896,
1301 PREFIX_VEX_0F3897,
1302 PREFIX_VEX_0F3898,
1303 PREFIX_VEX_0F3899,
1304 PREFIX_VEX_0F389A,
1305 PREFIX_VEX_0F389B,
1306 PREFIX_VEX_0F389C,
1307 PREFIX_VEX_0F389D,
1308 PREFIX_VEX_0F389E,
1309 PREFIX_VEX_0F389F,
1310 PREFIX_VEX_0F38A6,
1311 PREFIX_VEX_0F38A7,
1312 PREFIX_VEX_0F38A8,
1313 PREFIX_VEX_0F38A9,
1314 PREFIX_VEX_0F38AA,
1315 PREFIX_VEX_0F38AB,
1316 PREFIX_VEX_0F38AC,
1317 PREFIX_VEX_0F38AD,
1318 PREFIX_VEX_0F38AE,
1319 PREFIX_VEX_0F38AF,
1320 PREFIX_VEX_0F38B6,
1321 PREFIX_VEX_0F38B7,
1322 PREFIX_VEX_0F38B8,
1323 PREFIX_VEX_0F38B9,
1324 PREFIX_VEX_0F38BA,
1325 PREFIX_VEX_0F38BB,
1326 PREFIX_VEX_0F38BC,
1327 PREFIX_VEX_0F38BD,
1328 PREFIX_VEX_0F38BE,
1329 PREFIX_VEX_0F38BF,
48521003 1330 PREFIX_VEX_0F38CF,
592a252b
L
1331 PREFIX_VEX_0F38DB,
1332 PREFIX_VEX_0F38DC,
1333 PREFIX_VEX_0F38DD,
1334 PREFIX_VEX_0F38DE,
1335 PREFIX_VEX_0F38DF,
f12dc422
L
1336 PREFIX_VEX_0F38F2,
1337 PREFIX_VEX_0F38F3_REG_1,
1338 PREFIX_VEX_0F38F3_REG_2,
1339 PREFIX_VEX_0F38F3_REG_3,
6c30d220
L
1340 PREFIX_VEX_0F38F5,
1341 PREFIX_VEX_0F38F6,
f12dc422 1342 PREFIX_VEX_0F38F7,
6c30d220
L
1343 PREFIX_VEX_0F3A00,
1344 PREFIX_VEX_0F3A01,
1345 PREFIX_VEX_0F3A02,
592a252b
L
1346 PREFIX_VEX_0F3A04,
1347 PREFIX_VEX_0F3A05,
1348 PREFIX_VEX_0F3A06,
1349 PREFIX_VEX_0F3A08,
1350 PREFIX_VEX_0F3A09,
1351 PREFIX_VEX_0F3A0A,
1352 PREFIX_VEX_0F3A0B,
1353 PREFIX_VEX_0F3A0C,
1354 PREFIX_VEX_0F3A0D,
1355 PREFIX_VEX_0F3A0E,
1356 PREFIX_VEX_0F3A0F,
1357 PREFIX_VEX_0F3A14,
1358 PREFIX_VEX_0F3A15,
1359 PREFIX_VEX_0F3A16,
1360 PREFIX_VEX_0F3A17,
1361 PREFIX_VEX_0F3A18,
1362 PREFIX_VEX_0F3A19,
1363 PREFIX_VEX_0F3A1D,
1364 PREFIX_VEX_0F3A20,
1365 PREFIX_VEX_0F3A21,
1366 PREFIX_VEX_0F3A22,
43234a1e 1367 PREFIX_VEX_0F3A30,
1ba585e8 1368 PREFIX_VEX_0F3A31,
43234a1e 1369 PREFIX_VEX_0F3A32,
1ba585e8 1370 PREFIX_VEX_0F3A33,
6c30d220
L
1371 PREFIX_VEX_0F3A38,
1372 PREFIX_VEX_0F3A39,
592a252b
L
1373 PREFIX_VEX_0F3A40,
1374 PREFIX_VEX_0F3A41,
1375 PREFIX_VEX_0F3A42,
1376 PREFIX_VEX_0F3A44,
6c30d220 1377 PREFIX_VEX_0F3A46,
592a252b
L
1378 PREFIX_VEX_0F3A48,
1379 PREFIX_VEX_0F3A49,
1380 PREFIX_VEX_0F3A4A,
1381 PREFIX_VEX_0F3A4B,
1382 PREFIX_VEX_0F3A4C,
1383 PREFIX_VEX_0F3A5C,
1384 PREFIX_VEX_0F3A5D,
1385 PREFIX_VEX_0F3A5E,
1386 PREFIX_VEX_0F3A5F,
1387 PREFIX_VEX_0F3A60,
1388 PREFIX_VEX_0F3A61,
1389 PREFIX_VEX_0F3A62,
1390 PREFIX_VEX_0F3A63,
1391 PREFIX_VEX_0F3A68,
1392 PREFIX_VEX_0F3A69,
1393 PREFIX_VEX_0F3A6A,
1394 PREFIX_VEX_0F3A6B,
1395 PREFIX_VEX_0F3A6C,
1396 PREFIX_VEX_0F3A6D,
1397 PREFIX_VEX_0F3A6E,
1398 PREFIX_VEX_0F3A6F,
1399 PREFIX_VEX_0F3A78,
1400 PREFIX_VEX_0F3A79,
1401 PREFIX_VEX_0F3A7A,
1402 PREFIX_VEX_0F3A7B,
1403 PREFIX_VEX_0F3A7C,
1404 PREFIX_VEX_0F3A7D,
1405 PREFIX_VEX_0F3A7E,
1406 PREFIX_VEX_0F3A7F,
48521003
IT
1407 PREFIX_VEX_0F3ACE,
1408 PREFIX_VEX_0F3ACF,
6c30d220 1409 PREFIX_VEX_0F3ADF,
43234a1e
L
1410 PREFIX_VEX_0F3AF0,
1411
1412 PREFIX_EVEX_0F10,
1413 PREFIX_EVEX_0F11,
1414 PREFIX_EVEX_0F12,
1415 PREFIX_EVEX_0F13,
1416 PREFIX_EVEX_0F14,
1417 PREFIX_EVEX_0F15,
1418 PREFIX_EVEX_0F16,
1419 PREFIX_EVEX_0F17,
1420 PREFIX_EVEX_0F28,
1421 PREFIX_EVEX_0F29,
1422 PREFIX_EVEX_0F2A,
1423 PREFIX_EVEX_0F2B,
1424 PREFIX_EVEX_0F2C,
1425 PREFIX_EVEX_0F2D,
1426 PREFIX_EVEX_0F2E,
1427 PREFIX_EVEX_0F2F,
1428 PREFIX_EVEX_0F51,
90a915bf
IT
1429 PREFIX_EVEX_0F54,
1430 PREFIX_EVEX_0F55,
1431 PREFIX_EVEX_0F56,
1432 PREFIX_EVEX_0F57,
43234a1e
L
1433 PREFIX_EVEX_0F58,
1434 PREFIX_EVEX_0F59,
1435 PREFIX_EVEX_0F5A,
1436 PREFIX_EVEX_0F5B,
1437 PREFIX_EVEX_0F5C,
1438 PREFIX_EVEX_0F5D,
1439 PREFIX_EVEX_0F5E,
1440 PREFIX_EVEX_0F5F,
1ba585e8
IT
1441 PREFIX_EVEX_0F60,
1442 PREFIX_EVEX_0F61,
43234a1e 1443 PREFIX_EVEX_0F62,
1ba585e8
IT
1444 PREFIX_EVEX_0F63,
1445 PREFIX_EVEX_0F64,
1446 PREFIX_EVEX_0F65,
43234a1e 1447 PREFIX_EVEX_0F66,
1ba585e8
IT
1448 PREFIX_EVEX_0F67,
1449 PREFIX_EVEX_0F68,
1450 PREFIX_EVEX_0F69,
43234a1e 1451 PREFIX_EVEX_0F6A,
1ba585e8 1452 PREFIX_EVEX_0F6B,
43234a1e
L
1453 PREFIX_EVEX_0F6C,
1454 PREFIX_EVEX_0F6D,
1455 PREFIX_EVEX_0F6E,
1456 PREFIX_EVEX_0F6F,
1457 PREFIX_EVEX_0F70,
1ba585e8
IT
1458 PREFIX_EVEX_0F71_REG_2,
1459 PREFIX_EVEX_0F71_REG_4,
1460 PREFIX_EVEX_0F71_REG_6,
43234a1e
L
1461 PREFIX_EVEX_0F72_REG_0,
1462 PREFIX_EVEX_0F72_REG_1,
1463 PREFIX_EVEX_0F72_REG_2,
1464 PREFIX_EVEX_0F72_REG_4,
1465 PREFIX_EVEX_0F72_REG_6,
1466 PREFIX_EVEX_0F73_REG_2,
1ba585e8 1467 PREFIX_EVEX_0F73_REG_3,
43234a1e 1468 PREFIX_EVEX_0F73_REG_6,
1ba585e8
IT
1469 PREFIX_EVEX_0F73_REG_7,
1470 PREFIX_EVEX_0F74,
1471 PREFIX_EVEX_0F75,
43234a1e
L
1472 PREFIX_EVEX_0F76,
1473 PREFIX_EVEX_0F78,
1474 PREFIX_EVEX_0F79,
1475 PREFIX_EVEX_0F7A,
1476 PREFIX_EVEX_0F7B,
1477 PREFIX_EVEX_0F7E,
1478 PREFIX_EVEX_0F7F,
1479 PREFIX_EVEX_0FC2,
1ba585e8
IT
1480 PREFIX_EVEX_0FC4,
1481 PREFIX_EVEX_0FC5,
43234a1e 1482 PREFIX_EVEX_0FC6,
1ba585e8 1483 PREFIX_EVEX_0FD1,
43234a1e
L
1484 PREFIX_EVEX_0FD2,
1485 PREFIX_EVEX_0FD3,
1486 PREFIX_EVEX_0FD4,
1ba585e8 1487 PREFIX_EVEX_0FD5,
43234a1e 1488 PREFIX_EVEX_0FD6,
1ba585e8
IT
1489 PREFIX_EVEX_0FD8,
1490 PREFIX_EVEX_0FD9,
1491 PREFIX_EVEX_0FDA,
43234a1e 1492 PREFIX_EVEX_0FDB,
1ba585e8
IT
1493 PREFIX_EVEX_0FDC,
1494 PREFIX_EVEX_0FDD,
1495 PREFIX_EVEX_0FDE,
43234a1e 1496 PREFIX_EVEX_0FDF,
1ba585e8
IT
1497 PREFIX_EVEX_0FE0,
1498 PREFIX_EVEX_0FE1,
43234a1e 1499 PREFIX_EVEX_0FE2,
1ba585e8
IT
1500 PREFIX_EVEX_0FE3,
1501 PREFIX_EVEX_0FE4,
1502 PREFIX_EVEX_0FE5,
43234a1e
L
1503 PREFIX_EVEX_0FE6,
1504 PREFIX_EVEX_0FE7,
1ba585e8
IT
1505 PREFIX_EVEX_0FE8,
1506 PREFIX_EVEX_0FE9,
1507 PREFIX_EVEX_0FEA,
43234a1e 1508 PREFIX_EVEX_0FEB,
1ba585e8
IT
1509 PREFIX_EVEX_0FEC,
1510 PREFIX_EVEX_0FED,
1511 PREFIX_EVEX_0FEE,
43234a1e 1512 PREFIX_EVEX_0FEF,
1ba585e8 1513 PREFIX_EVEX_0FF1,
43234a1e
L
1514 PREFIX_EVEX_0FF2,
1515 PREFIX_EVEX_0FF3,
1516 PREFIX_EVEX_0FF4,
1ba585e8
IT
1517 PREFIX_EVEX_0FF5,
1518 PREFIX_EVEX_0FF6,
1519 PREFIX_EVEX_0FF8,
1520 PREFIX_EVEX_0FF9,
43234a1e
L
1521 PREFIX_EVEX_0FFA,
1522 PREFIX_EVEX_0FFB,
1ba585e8
IT
1523 PREFIX_EVEX_0FFC,
1524 PREFIX_EVEX_0FFD,
43234a1e 1525 PREFIX_EVEX_0FFE,
1ba585e8
IT
1526 PREFIX_EVEX_0F3800,
1527 PREFIX_EVEX_0F3804,
1528 PREFIX_EVEX_0F380B,
43234a1e
L
1529 PREFIX_EVEX_0F380C,
1530 PREFIX_EVEX_0F380D,
1ba585e8 1531 PREFIX_EVEX_0F3810,
43234a1e
L
1532 PREFIX_EVEX_0F3811,
1533 PREFIX_EVEX_0F3812,
1534 PREFIX_EVEX_0F3813,
1535 PREFIX_EVEX_0F3814,
1536 PREFIX_EVEX_0F3815,
1537 PREFIX_EVEX_0F3816,
1538 PREFIX_EVEX_0F3818,
1539 PREFIX_EVEX_0F3819,
1540 PREFIX_EVEX_0F381A,
1541 PREFIX_EVEX_0F381B,
1ba585e8
IT
1542 PREFIX_EVEX_0F381C,
1543 PREFIX_EVEX_0F381D,
43234a1e
L
1544 PREFIX_EVEX_0F381E,
1545 PREFIX_EVEX_0F381F,
1ba585e8 1546 PREFIX_EVEX_0F3820,
43234a1e
L
1547 PREFIX_EVEX_0F3821,
1548 PREFIX_EVEX_0F3822,
1549 PREFIX_EVEX_0F3823,
1550 PREFIX_EVEX_0F3824,
1551 PREFIX_EVEX_0F3825,
1ba585e8 1552 PREFIX_EVEX_0F3826,
43234a1e
L
1553 PREFIX_EVEX_0F3827,
1554 PREFIX_EVEX_0F3828,
1555 PREFIX_EVEX_0F3829,
1556 PREFIX_EVEX_0F382A,
1ba585e8 1557 PREFIX_EVEX_0F382B,
43234a1e
L
1558 PREFIX_EVEX_0F382C,
1559 PREFIX_EVEX_0F382D,
1ba585e8 1560 PREFIX_EVEX_0F3830,
43234a1e
L
1561 PREFIX_EVEX_0F3831,
1562 PREFIX_EVEX_0F3832,
1563 PREFIX_EVEX_0F3833,
1564 PREFIX_EVEX_0F3834,
1565 PREFIX_EVEX_0F3835,
1566 PREFIX_EVEX_0F3836,
1567 PREFIX_EVEX_0F3837,
1ba585e8 1568 PREFIX_EVEX_0F3838,
43234a1e
L
1569 PREFIX_EVEX_0F3839,
1570 PREFIX_EVEX_0F383A,
1571 PREFIX_EVEX_0F383B,
1ba585e8 1572 PREFIX_EVEX_0F383C,
43234a1e 1573 PREFIX_EVEX_0F383D,
1ba585e8 1574 PREFIX_EVEX_0F383E,
43234a1e
L
1575 PREFIX_EVEX_0F383F,
1576 PREFIX_EVEX_0F3840,
1577 PREFIX_EVEX_0F3842,
1578 PREFIX_EVEX_0F3843,
1579 PREFIX_EVEX_0F3844,
1580 PREFIX_EVEX_0F3845,
1581 PREFIX_EVEX_0F3846,
1582 PREFIX_EVEX_0F3847,
1583 PREFIX_EVEX_0F384C,
1584 PREFIX_EVEX_0F384D,
1585 PREFIX_EVEX_0F384E,
1586 PREFIX_EVEX_0F384F,
8cfcb765
IT
1587 PREFIX_EVEX_0F3850,
1588 PREFIX_EVEX_0F3851,
47acf0bd
IT
1589 PREFIX_EVEX_0F3852,
1590 PREFIX_EVEX_0F3853,
ee6872be 1591 PREFIX_EVEX_0F3854,
620214f7 1592 PREFIX_EVEX_0F3855,
43234a1e
L
1593 PREFIX_EVEX_0F3858,
1594 PREFIX_EVEX_0F3859,
1595 PREFIX_EVEX_0F385A,
1596 PREFIX_EVEX_0F385B,
53467f57
IT
1597 PREFIX_EVEX_0F3862,
1598 PREFIX_EVEX_0F3863,
43234a1e
L
1599 PREFIX_EVEX_0F3864,
1600 PREFIX_EVEX_0F3865,
1ba585e8 1601 PREFIX_EVEX_0F3866,
53467f57
IT
1602 PREFIX_EVEX_0F3870,
1603 PREFIX_EVEX_0F3871,
1604 PREFIX_EVEX_0F3872,
1605 PREFIX_EVEX_0F3873,
1ba585e8 1606 PREFIX_EVEX_0F3875,
43234a1e
L
1607 PREFIX_EVEX_0F3876,
1608 PREFIX_EVEX_0F3877,
1ba585e8
IT
1609 PREFIX_EVEX_0F3878,
1610 PREFIX_EVEX_0F3879,
1611 PREFIX_EVEX_0F387A,
1612 PREFIX_EVEX_0F387B,
43234a1e 1613 PREFIX_EVEX_0F387C,
1ba585e8 1614 PREFIX_EVEX_0F387D,
43234a1e
L
1615 PREFIX_EVEX_0F387E,
1616 PREFIX_EVEX_0F387F,
14f195c9 1617 PREFIX_EVEX_0F3883,
43234a1e
L
1618 PREFIX_EVEX_0F3888,
1619 PREFIX_EVEX_0F3889,
1620 PREFIX_EVEX_0F388A,
1621 PREFIX_EVEX_0F388B,
1ba585e8 1622 PREFIX_EVEX_0F388D,
ee6872be 1623 PREFIX_EVEX_0F388F,
43234a1e
L
1624 PREFIX_EVEX_0F3890,
1625 PREFIX_EVEX_0F3891,
1626 PREFIX_EVEX_0F3892,
1627 PREFIX_EVEX_0F3893,
1628 PREFIX_EVEX_0F3896,
1629 PREFIX_EVEX_0F3897,
1630 PREFIX_EVEX_0F3898,
1631 PREFIX_EVEX_0F3899,
1632 PREFIX_EVEX_0F389A,
1633 PREFIX_EVEX_0F389B,
1634 PREFIX_EVEX_0F389C,
1635 PREFIX_EVEX_0F389D,
1636 PREFIX_EVEX_0F389E,
1637 PREFIX_EVEX_0F389F,
1638 PREFIX_EVEX_0F38A0,
1639 PREFIX_EVEX_0F38A1,
1640 PREFIX_EVEX_0F38A2,
1641 PREFIX_EVEX_0F38A3,
1642 PREFIX_EVEX_0F38A6,
1643 PREFIX_EVEX_0F38A7,
1644 PREFIX_EVEX_0F38A8,
1645 PREFIX_EVEX_0F38A9,
1646 PREFIX_EVEX_0F38AA,
1647 PREFIX_EVEX_0F38AB,
1648 PREFIX_EVEX_0F38AC,
1649 PREFIX_EVEX_0F38AD,
1650 PREFIX_EVEX_0F38AE,
1651 PREFIX_EVEX_0F38AF,
2cc1b5aa
IT
1652 PREFIX_EVEX_0F38B4,
1653 PREFIX_EVEX_0F38B5,
43234a1e
L
1654 PREFIX_EVEX_0F38B6,
1655 PREFIX_EVEX_0F38B7,
1656 PREFIX_EVEX_0F38B8,
1657 PREFIX_EVEX_0F38B9,
1658 PREFIX_EVEX_0F38BA,
1659 PREFIX_EVEX_0F38BB,
1660 PREFIX_EVEX_0F38BC,
1661 PREFIX_EVEX_0F38BD,
1662 PREFIX_EVEX_0F38BE,
1663 PREFIX_EVEX_0F38BF,
1664 PREFIX_EVEX_0F38C4,
1665 PREFIX_EVEX_0F38C6_REG_1,
1666 PREFIX_EVEX_0F38C6_REG_2,
1667 PREFIX_EVEX_0F38C6_REG_5,
1668 PREFIX_EVEX_0F38C6_REG_6,
1669 PREFIX_EVEX_0F38C7_REG_1,
1670 PREFIX_EVEX_0F38C7_REG_2,
1671 PREFIX_EVEX_0F38C7_REG_5,
1672 PREFIX_EVEX_0F38C7_REG_6,
1673 PREFIX_EVEX_0F38C8,
1674 PREFIX_EVEX_0F38CA,
1675 PREFIX_EVEX_0F38CB,
1676 PREFIX_EVEX_0F38CC,
1677 PREFIX_EVEX_0F38CD,
48521003 1678 PREFIX_EVEX_0F38CF,
8dcf1fad
IT
1679 PREFIX_EVEX_0F38DC,
1680 PREFIX_EVEX_0F38DD,
1681 PREFIX_EVEX_0F38DE,
1682 PREFIX_EVEX_0F38DF,
43234a1e
L
1683
1684 PREFIX_EVEX_0F3A00,
1685 PREFIX_EVEX_0F3A01,
1686 PREFIX_EVEX_0F3A03,
1687 PREFIX_EVEX_0F3A04,
1688 PREFIX_EVEX_0F3A05,
1689 PREFIX_EVEX_0F3A08,
1690 PREFIX_EVEX_0F3A09,
1691 PREFIX_EVEX_0F3A0A,
1692 PREFIX_EVEX_0F3A0B,
1ba585e8
IT
1693 PREFIX_EVEX_0F3A0F,
1694 PREFIX_EVEX_0F3A14,
1695 PREFIX_EVEX_0F3A15,
90a915bf 1696 PREFIX_EVEX_0F3A16,
43234a1e
L
1697 PREFIX_EVEX_0F3A17,
1698 PREFIX_EVEX_0F3A18,
1699 PREFIX_EVEX_0F3A19,
1700 PREFIX_EVEX_0F3A1A,
1701 PREFIX_EVEX_0F3A1B,
1702 PREFIX_EVEX_0F3A1D,
1703 PREFIX_EVEX_0F3A1E,
1704 PREFIX_EVEX_0F3A1F,
1ba585e8 1705 PREFIX_EVEX_0F3A20,
43234a1e 1706 PREFIX_EVEX_0F3A21,
90a915bf 1707 PREFIX_EVEX_0F3A22,
43234a1e
L
1708 PREFIX_EVEX_0F3A23,
1709 PREFIX_EVEX_0F3A25,
1710 PREFIX_EVEX_0F3A26,
1711 PREFIX_EVEX_0F3A27,
1712 PREFIX_EVEX_0F3A38,
1713 PREFIX_EVEX_0F3A39,
1714 PREFIX_EVEX_0F3A3A,
1715 PREFIX_EVEX_0F3A3B,
1ba585e8
IT
1716 PREFIX_EVEX_0F3A3E,
1717 PREFIX_EVEX_0F3A3F,
1718 PREFIX_EVEX_0F3A42,
43234a1e 1719 PREFIX_EVEX_0F3A43,
ff1982d5 1720 PREFIX_EVEX_0F3A44,
90a915bf
IT
1721 PREFIX_EVEX_0F3A50,
1722 PREFIX_EVEX_0F3A51,
43234a1e 1723 PREFIX_EVEX_0F3A54,
90a915bf
IT
1724 PREFIX_EVEX_0F3A55,
1725 PREFIX_EVEX_0F3A56,
1726 PREFIX_EVEX_0F3A57,
1727 PREFIX_EVEX_0F3A66,
53467f57
IT
1728 PREFIX_EVEX_0F3A67,
1729 PREFIX_EVEX_0F3A70,
1730 PREFIX_EVEX_0F3A71,
1731 PREFIX_EVEX_0F3A72,
48521003
IT
1732 PREFIX_EVEX_0F3A73,
1733 PREFIX_EVEX_0F3ACE,
1734 PREFIX_EVEX_0F3ACF
51e7da1b 1735};
4e7d34a6 1736
51e7da1b
L
1737enum
1738{
1739 X86_64_06 = 0,
3873ba12
L
1740 X86_64_07,
1741 X86_64_0D,
1742 X86_64_16,
1743 X86_64_17,
1744 X86_64_1E,
1745 X86_64_1F,
1746 X86_64_27,
1747 X86_64_2F,
1748 X86_64_37,
1749 X86_64_3F,
1750 X86_64_60,
1751 X86_64_61,
1752 X86_64_62,
1753 X86_64_63,
1754 X86_64_6D,
1755 X86_64_6F,
d039fef3 1756 X86_64_82,
3873ba12
L
1757 X86_64_9A,
1758 X86_64_C4,
1759 X86_64_C5,
1760 X86_64_CE,
1761 X86_64_D4,
1762 X86_64_D5,
a72d2af2
L
1763 X86_64_E8,
1764 X86_64_E9,
3873ba12
L
1765 X86_64_EA,
1766 X86_64_0F01_REG_0,
1767 X86_64_0F01_REG_1,
1768 X86_64_0F01_REG_2,
1769 X86_64_0F01_REG_3
51e7da1b 1770};
4e7d34a6 1771
51e7da1b
L
1772enum
1773{
1774 THREE_BYTE_0F38 = 0,
1f334aeb 1775 THREE_BYTE_0F3A
51e7da1b 1776};
4e7d34a6 1777
f88c9eb0
SP
1778enum
1779{
5dd85c99
SP
1780 XOP_08 = 0,
1781 XOP_09,
f88c9eb0
SP
1782 XOP_0A
1783};
1784
51e7da1b
L
1785enum
1786{
1787 VEX_0F = 0,
3873ba12
L
1788 VEX_0F38,
1789 VEX_0F3A
51e7da1b 1790};
c0f3af97 1791
43234a1e
L
1792enum
1793{
1794 EVEX_0F = 0,
1795 EVEX_0F38,
1796 EVEX_0F3A
1797};
1798
51e7da1b
L
1799enum
1800{
592a252b
L
1801 VEX_LEN_0F10_P_1 = 0,
1802 VEX_LEN_0F10_P_3,
1803 VEX_LEN_0F11_P_1,
1804 VEX_LEN_0F11_P_3,
1805 VEX_LEN_0F12_P_0_M_0,
1806 VEX_LEN_0F12_P_0_M_1,
1807 VEX_LEN_0F12_P_2,
1808 VEX_LEN_0F13_M_0,
1809 VEX_LEN_0F16_P_0_M_0,
1810 VEX_LEN_0F16_P_0_M_1,
1811 VEX_LEN_0F16_P_2,
1812 VEX_LEN_0F17_M_0,
1813 VEX_LEN_0F2A_P_1,
1814 VEX_LEN_0F2A_P_3,
1815 VEX_LEN_0F2C_P_1,
1816 VEX_LEN_0F2C_P_3,
1817 VEX_LEN_0F2D_P_1,
1818 VEX_LEN_0F2D_P_3,
1819 VEX_LEN_0F2E_P_0,
1820 VEX_LEN_0F2E_P_2,
1821 VEX_LEN_0F2F_P_0,
1822 VEX_LEN_0F2F_P_2,
43234a1e 1823 VEX_LEN_0F41_P_0,
1ba585e8 1824 VEX_LEN_0F41_P_2,
43234a1e 1825 VEX_LEN_0F42_P_0,
1ba585e8 1826 VEX_LEN_0F42_P_2,
43234a1e 1827 VEX_LEN_0F44_P_0,
1ba585e8 1828 VEX_LEN_0F44_P_2,
43234a1e 1829 VEX_LEN_0F45_P_0,
1ba585e8 1830 VEX_LEN_0F45_P_2,
43234a1e 1831 VEX_LEN_0F46_P_0,
1ba585e8 1832 VEX_LEN_0F46_P_2,
43234a1e 1833 VEX_LEN_0F47_P_0,
1ba585e8
IT
1834 VEX_LEN_0F47_P_2,
1835 VEX_LEN_0F4A_P_0,
1836 VEX_LEN_0F4A_P_2,
1837 VEX_LEN_0F4B_P_0,
43234a1e 1838 VEX_LEN_0F4B_P_2,
592a252b
L
1839 VEX_LEN_0F51_P_1,
1840 VEX_LEN_0F51_P_3,
1841 VEX_LEN_0F52_P_1,
1842 VEX_LEN_0F53_P_1,
1843 VEX_LEN_0F58_P_1,
1844 VEX_LEN_0F58_P_3,
1845 VEX_LEN_0F59_P_1,
1846 VEX_LEN_0F59_P_3,
1847 VEX_LEN_0F5A_P_1,
1848 VEX_LEN_0F5A_P_3,
1849 VEX_LEN_0F5C_P_1,
1850 VEX_LEN_0F5C_P_3,
1851 VEX_LEN_0F5D_P_1,
1852 VEX_LEN_0F5D_P_3,
1853 VEX_LEN_0F5E_P_1,
1854 VEX_LEN_0F5E_P_3,
1855 VEX_LEN_0F5F_P_1,
1856 VEX_LEN_0F5F_P_3,
592a252b 1857 VEX_LEN_0F6E_P_2,
592a252b
L
1858 VEX_LEN_0F7E_P_1,
1859 VEX_LEN_0F7E_P_2,
43234a1e 1860 VEX_LEN_0F90_P_0,
1ba585e8 1861 VEX_LEN_0F90_P_2,
43234a1e 1862 VEX_LEN_0F91_P_0,
1ba585e8 1863 VEX_LEN_0F91_P_2,
43234a1e 1864 VEX_LEN_0F92_P_0,
90a915bf 1865 VEX_LEN_0F92_P_2,
1ba585e8 1866 VEX_LEN_0F92_P_3,
43234a1e 1867 VEX_LEN_0F93_P_0,
90a915bf 1868 VEX_LEN_0F93_P_2,
1ba585e8 1869 VEX_LEN_0F93_P_3,
43234a1e 1870 VEX_LEN_0F98_P_0,
1ba585e8
IT
1871 VEX_LEN_0F98_P_2,
1872 VEX_LEN_0F99_P_0,
1873 VEX_LEN_0F99_P_2,
592a252b
L
1874 VEX_LEN_0FAE_R_2_M_0,
1875 VEX_LEN_0FAE_R_3_M_0,
1876 VEX_LEN_0FC2_P_1,
1877 VEX_LEN_0FC2_P_3,
1878 VEX_LEN_0FC4_P_2,
1879 VEX_LEN_0FC5_P_2,
592a252b 1880 VEX_LEN_0FD6_P_2,
592a252b 1881 VEX_LEN_0FF7_P_2,
6c30d220
L
1882 VEX_LEN_0F3816_P_2,
1883 VEX_LEN_0F3819_P_2,
592a252b 1884 VEX_LEN_0F381A_P_2_M_0,
6c30d220 1885 VEX_LEN_0F3836_P_2,
592a252b 1886 VEX_LEN_0F3841_P_2,
6c30d220 1887 VEX_LEN_0F385A_P_2_M_0,
592a252b 1888 VEX_LEN_0F38DB_P_2,
f12dc422
L
1889 VEX_LEN_0F38F2_P_0,
1890 VEX_LEN_0F38F3_R_1_P_0,
1891 VEX_LEN_0F38F3_R_2_P_0,
1892 VEX_LEN_0F38F3_R_3_P_0,
6c30d220
L
1893 VEX_LEN_0F38F5_P_0,
1894 VEX_LEN_0F38F5_P_1,
1895 VEX_LEN_0F38F5_P_3,
1896 VEX_LEN_0F38F6_P_3,
f12dc422 1897 VEX_LEN_0F38F7_P_0,
6c30d220
L
1898 VEX_LEN_0F38F7_P_1,
1899 VEX_LEN_0F38F7_P_2,
1900 VEX_LEN_0F38F7_P_3,
1901 VEX_LEN_0F3A00_P_2,
1902 VEX_LEN_0F3A01_P_2,
592a252b
L
1903 VEX_LEN_0F3A06_P_2,
1904 VEX_LEN_0F3A0A_P_2,
1905 VEX_LEN_0F3A0B_P_2,
592a252b
L
1906 VEX_LEN_0F3A14_P_2,
1907 VEX_LEN_0F3A15_P_2,
1908 VEX_LEN_0F3A16_P_2,
1909 VEX_LEN_0F3A17_P_2,
1910 VEX_LEN_0F3A18_P_2,
1911 VEX_LEN_0F3A19_P_2,
1912 VEX_LEN_0F3A20_P_2,
1913 VEX_LEN_0F3A21_P_2,
1914 VEX_LEN_0F3A22_P_2,
43234a1e 1915 VEX_LEN_0F3A30_P_2,
1ba585e8 1916 VEX_LEN_0F3A31_P_2,
43234a1e 1917 VEX_LEN_0F3A32_P_2,
1ba585e8 1918 VEX_LEN_0F3A33_P_2,
6c30d220
L
1919 VEX_LEN_0F3A38_P_2,
1920 VEX_LEN_0F3A39_P_2,
592a252b 1921 VEX_LEN_0F3A41_P_2,
6c30d220 1922 VEX_LEN_0F3A46_P_2,
592a252b
L
1923 VEX_LEN_0F3A60_P_2,
1924 VEX_LEN_0F3A61_P_2,
1925 VEX_LEN_0F3A62_P_2,
1926 VEX_LEN_0F3A63_P_2,
1927 VEX_LEN_0F3A6A_P_2,
1928 VEX_LEN_0F3A6B_P_2,
1929 VEX_LEN_0F3A6E_P_2,
1930 VEX_LEN_0F3A6F_P_2,
1931 VEX_LEN_0F3A7A_P_2,
1932 VEX_LEN_0F3A7B_P_2,
1933 VEX_LEN_0F3A7E_P_2,
1934 VEX_LEN_0F3A7F_P_2,
1935 VEX_LEN_0F3ADF_P_2,
6c30d220 1936 VEX_LEN_0F3AF0_P_3,
ff688e1f
L
1937 VEX_LEN_0FXOP_08_CC,
1938 VEX_LEN_0FXOP_08_CD,
1939 VEX_LEN_0FXOP_08_CE,
1940 VEX_LEN_0FXOP_08_CF,
1941 VEX_LEN_0FXOP_08_EC,
1942 VEX_LEN_0FXOP_08_ED,
1943 VEX_LEN_0FXOP_08_EE,
1944 VEX_LEN_0FXOP_08_EF,
592a252b
L
1945 VEX_LEN_0FXOP_09_80,
1946 VEX_LEN_0FXOP_09_81
51e7da1b 1947};
c0f3af97 1948
9e30b8e0
L
1949enum
1950{
592a252b
L
1951 VEX_W_0F10_P_0 = 0,
1952 VEX_W_0F10_P_1,
1953 VEX_W_0F10_P_2,
1954 VEX_W_0F10_P_3,
1955 VEX_W_0F11_P_0,
1956 VEX_W_0F11_P_1,
1957 VEX_W_0F11_P_2,
1958 VEX_W_0F11_P_3,
1959 VEX_W_0F12_P_0_M_0,
1960 VEX_W_0F12_P_0_M_1,
1961 VEX_W_0F12_P_1,
1962 VEX_W_0F12_P_2,
1963 VEX_W_0F12_P_3,
1964 VEX_W_0F13_M_0,
1965 VEX_W_0F14,
1966 VEX_W_0F15,
1967 VEX_W_0F16_P_0_M_0,
1968 VEX_W_0F16_P_0_M_1,
1969 VEX_W_0F16_P_1,
1970 VEX_W_0F16_P_2,
1971 VEX_W_0F17_M_0,
1972 VEX_W_0F28,
1973 VEX_W_0F29,
1974 VEX_W_0F2B_M_0,
1975 VEX_W_0F2E_P_0,
1976 VEX_W_0F2E_P_2,
1977 VEX_W_0F2F_P_0,
1978 VEX_W_0F2F_P_2,
43234a1e 1979 VEX_W_0F41_P_0_LEN_1,
1ba585e8 1980 VEX_W_0F41_P_2_LEN_1,
43234a1e 1981 VEX_W_0F42_P_0_LEN_1,
1ba585e8 1982 VEX_W_0F42_P_2_LEN_1,
43234a1e 1983 VEX_W_0F44_P_0_LEN_0,
1ba585e8 1984 VEX_W_0F44_P_2_LEN_0,
43234a1e 1985 VEX_W_0F45_P_0_LEN_1,
1ba585e8 1986 VEX_W_0F45_P_2_LEN_1,
43234a1e 1987 VEX_W_0F46_P_0_LEN_1,
1ba585e8 1988 VEX_W_0F46_P_2_LEN_1,
43234a1e 1989 VEX_W_0F47_P_0_LEN_1,
1ba585e8
IT
1990 VEX_W_0F47_P_2_LEN_1,
1991 VEX_W_0F4A_P_0_LEN_1,
1992 VEX_W_0F4A_P_2_LEN_1,
1993 VEX_W_0F4B_P_0_LEN_1,
43234a1e 1994 VEX_W_0F4B_P_2_LEN_1,
592a252b
L
1995 VEX_W_0F50_M_0,
1996 VEX_W_0F51_P_0,
1997 VEX_W_0F51_P_1,
1998 VEX_W_0F51_P_2,
1999 VEX_W_0F51_P_3,
2000 VEX_W_0F52_P_0,
2001 VEX_W_0F52_P_1,
2002 VEX_W_0F53_P_0,
2003 VEX_W_0F53_P_1,
2004 VEX_W_0F58_P_0,
2005 VEX_W_0F58_P_1,
2006 VEX_W_0F58_P_2,
2007 VEX_W_0F58_P_3,
2008 VEX_W_0F59_P_0,
2009 VEX_W_0F59_P_1,
2010 VEX_W_0F59_P_2,
2011 VEX_W_0F59_P_3,
2012 VEX_W_0F5A_P_0,
2013 VEX_W_0F5A_P_1,
2014 VEX_W_0F5A_P_3,
2015 VEX_W_0F5B_P_0,
2016 VEX_W_0F5B_P_1,
2017 VEX_W_0F5B_P_2,
2018 VEX_W_0F5C_P_0,
2019 VEX_W_0F5C_P_1,
2020 VEX_W_0F5C_P_2,
2021 VEX_W_0F5C_P_3,
2022 VEX_W_0F5D_P_0,
2023 VEX_W_0F5D_P_1,
2024 VEX_W_0F5D_P_2,
2025 VEX_W_0F5D_P_3,
2026 VEX_W_0F5E_P_0,
2027 VEX_W_0F5E_P_1,
2028 VEX_W_0F5E_P_2,
2029 VEX_W_0F5E_P_3,
2030 VEX_W_0F5F_P_0,
2031 VEX_W_0F5F_P_1,
2032 VEX_W_0F5F_P_2,
2033 VEX_W_0F5F_P_3,
2034 VEX_W_0F60_P_2,
2035 VEX_W_0F61_P_2,
2036 VEX_W_0F62_P_2,
2037 VEX_W_0F63_P_2,
2038 VEX_W_0F64_P_2,
2039 VEX_W_0F65_P_2,
2040 VEX_W_0F66_P_2,
2041 VEX_W_0F67_P_2,
2042 VEX_W_0F68_P_2,
2043 VEX_W_0F69_P_2,
2044 VEX_W_0F6A_P_2,
2045 VEX_W_0F6B_P_2,
2046 VEX_W_0F6C_P_2,
2047 VEX_W_0F6D_P_2,
2048 VEX_W_0F6F_P_1,
2049 VEX_W_0F6F_P_2,
2050 VEX_W_0F70_P_1,
2051 VEX_W_0F70_P_2,
2052 VEX_W_0F70_P_3,
2053 VEX_W_0F71_R_2_P_2,
2054 VEX_W_0F71_R_4_P_2,
2055 VEX_W_0F71_R_6_P_2,
2056 VEX_W_0F72_R_2_P_2,
2057 VEX_W_0F72_R_4_P_2,
2058 VEX_W_0F72_R_6_P_2,
2059 VEX_W_0F73_R_2_P_2,
2060 VEX_W_0F73_R_3_P_2,
2061 VEX_W_0F73_R_6_P_2,
2062 VEX_W_0F73_R_7_P_2,
2063 VEX_W_0F74_P_2,
2064 VEX_W_0F75_P_2,
2065 VEX_W_0F76_P_2,
2066 VEX_W_0F77_P_0,
2067 VEX_W_0F7C_P_2,
2068 VEX_W_0F7C_P_3,
2069 VEX_W_0F7D_P_2,
2070 VEX_W_0F7D_P_3,
2071 VEX_W_0F7E_P_1,
2072 VEX_W_0F7F_P_1,
2073 VEX_W_0F7F_P_2,
43234a1e 2074 VEX_W_0F90_P_0_LEN_0,
1ba585e8 2075 VEX_W_0F90_P_2_LEN_0,
43234a1e 2076 VEX_W_0F91_P_0_LEN_0,
1ba585e8 2077 VEX_W_0F91_P_2_LEN_0,
43234a1e 2078 VEX_W_0F92_P_0_LEN_0,
90a915bf 2079 VEX_W_0F92_P_2_LEN_0,
1ba585e8 2080 VEX_W_0F92_P_3_LEN_0,
43234a1e 2081 VEX_W_0F93_P_0_LEN_0,
90a915bf 2082 VEX_W_0F93_P_2_LEN_0,
1ba585e8 2083 VEX_W_0F93_P_3_LEN_0,
43234a1e 2084 VEX_W_0F98_P_0_LEN_0,
1ba585e8
IT
2085 VEX_W_0F98_P_2_LEN_0,
2086 VEX_W_0F99_P_0_LEN_0,
2087 VEX_W_0F99_P_2_LEN_0,
592a252b
L
2088 VEX_W_0FAE_R_2_M_0,
2089 VEX_W_0FAE_R_3_M_0,
2090 VEX_W_0FC2_P_0,
2091 VEX_W_0FC2_P_1,
2092 VEX_W_0FC2_P_2,
2093 VEX_W_0FC2_P_3,
2094 VEX_W_0FC4_P_2,
2095 VEX_W_0FC5_P_2,
2096 VEX_W_0FD0_P_2,
2097 VEX_W_0FD0_P_3,
2098 VEX_W_0FD1_P_2,
2099 VEX_W_0FD2_P_2,
2100 VEX_W_0FD3_P_2,
2101 VEX_W_0FD4_P_2,
2102 VEX_W_0FD5_P_2,
2103 VEX_W_0FD6_P_2,
2104 VEX_W_0FD7_P_2_M_1,
2105 VEX_W_0FD8_P_2,
2106 VEX_W_0FD9_P_2,
2107 VEX_W_0FDA_P_2,
2108 VEX_W_0FDB_P_2,
2109 VEX_W_0FDC_P_2,
2110 VEX_W_0FDD_P_2,
2111 VEX_W_0FDE_P_2,
2112 VEX_W_0FDF_P_2,
2113 VEX_W_0FE0_P_2,
2114 VEX_W_0FE1_P_2,
2115 VEX_W_0FE2_P_2,
2116 VEX_W_0FE3_P_2,
2117 VEX_W_0FE4_P_2,
2118 VEX_W_0FE5_P_2,
2119 VEX_W_0FE6_P_1,
2120 VEX_W_0FE6_P_2,
2121 VEX_W_0FE6_P_3,
2122 VEX_W_0FE7_P_2_M_0,
2123 VEX_W_0FE8_P_2,
2124 VEX_W_0FE9_P_2,
2125 VEX_W_0FEA_P_2,
2126 VEX_W_0FEB_P_2,
2127 VEX_W_0FEC_P_2,
2128 VEX_W_0FED_P_2,
2129 VEX_W_0FEE_P_2,
2130 VEX_W_0FEF_P_2,
2131 VEX_W_0FF0_P_3_M_0,
2132 VEX_W_0FF1_P_2,
2133 VEX_W_0FF2_P_2,
2134 VEX_W_0FF3_P_2,
2135 VEX_W_0FF4_P_2,
2136 VEX_W_0FF5_P_2,
2137 VEX_W_0FF6_P_2,
2138 VEX_W_0FF7_P_2,
2139 VEX_W_0FF8_P_2,
2140 VEX_W_0FF9_P_2,
2141 VEX_W_0FFA_P_2,
2142 VEX_W_0FFB_P_2,
2143 VEX_W_0FFC_P_2,
2144 VEX_W_0FFD_P_2,
2145 VEX_W_0FFE_P_2,
2146 VEX_W_0F3800_P_2,
2147 VEX_W_0F3801_P_2,
2148 VEX_W_0F3802_P_2,
2149 VEX_W_0F3803_P_2,
2150 VEX_W_0F3804_P_2,
2151 VEX_W_0F3805_P_2,
2152 VEX_W_0F3806_P_2,
2153 VEX_W_0F3807_P_2,
2154 VEX_W_0F3808_P_2,
2155 VEX_W_0F3809_P_2,
2156 VEX_W_0F380A_P_2,
2157 VEX_W_0F380B_P_2,
2158 VEX_W_0F380C_P_2,
2159 VEX_W_0F380D_P_2,
2160 VEX_W_0F380E_P_2,
2161 VEX_W_0F380F_P_2,
6c30d220 2162 VEX_W_0F3816_P_2,
592a252b 2163 VEX_W_0F3817_P_2,
6c30d220
L
2164 VEX_W_0F3818_P_2,
2165 VEX_W_0F3819_P_2,
592a252b
L
2166 VEX_W_0F381A_P_2_M_0,
2167 VEX_W_0F381C_P_2,
2168 VEX_W_0F381D_P_2,
2169 VEX_W_0F381E_P_2,
2170 VEX_W_0F3820_P_2,
2171 VEX_W_0F3821_P_2,
2172 VEX_W_0F3822_P_2,
2173 VEX_W_0F3823_P_2,
2174 VEX_W_0F3824_P_2,
2175 VEX_W_0F3825_P_2,
2176 VEX_W_0F3828_P_2,
2177 VEX_W_0F3829_P_2,
2178 VEX_W_0F382A_P_2_M_0,
2179 VEX_W_0F382B_P_2,
2180 VEX_W_0F382C_P_2_M_0,
2181 VEX_W_0F382D_P_2_M_0,
2182 VEX_W_0F382E_P_2_M_0,
2183 VEX_W_0F382F_P_2_M_0,
2184 VEX_W_0F3830_P_2,
2185 VEX_W_0F3831_P_2,
2186 VEX_W_0F3832_P_2,
2187 VEX_W_0F3833_P_2,
2188 VEX_W_0F3834_P_2,
2189 VEX_W_0F3835_P_2,
6c30d220 2190 VEX_W_0F3836_P_2,
592a252b
L
2191 VEX_W_0F3837_P_2,
2192 VEX_W_0F3838_P_2,
2193 VEX_W_0F3839_P_2,
2194 VEX_W_0F383A_P_2,
2195 VEX_W_0F383B_P_2,
2196 VEX_W_0F383C_P_2,
2197 VEX_W_0F383D_P_2,
2198 VEX_W_0F383E_P_2,
2199 VEX_W_0F383F_P_2,
2200 VEX_W_0F3840_P_2,
2201 VEX_W_0F3841_P_2,
6c30d220
L
2202 VEX_W_0F3846_P_2,
2203 VEX_W_0F3858_P_2,
2204 VEX_W_0F3859_P_2,
2205 VEX_W_0F385A_P_2_M_0,
2206 VEX_W_0F3878_P_2,
2207 VEX_W_0F3879_P_2,
48521003 2208 VEX_W_0F38CF_P_2,
592a252b 2209 VEX_W_0F38DB_P_2,
6c30d220
L
2210 VEX_W_0F3A00_P_2,
2211 VEX_W_0F3A01_P_2,
2212 VEX_W_0F3A02_P_2,
592a252b
L
2213 VEX_W_0F3A04_P_2,
2214 VEX_W_0F3A05_P_2,
2215 VEX_W_0F3A06_P_2,
2216 VEX_W_0F3A08_P_2,
2217 VEX_W_0F3A09_P_2,
2218 VEX_W_0F3A0A_P_2,
2219 VEX_W_0F3A0B_P_2,
2220 VEX_W_0F3A0C_P_2,
2221 VEX_W_0F3A0D_P_2,
2222 VEX_W_0F3A0E_P_2,
2223 VEX_W_0F3A0F_P_2,
2224 VEX_W_0F3A14_P_2,
2225 VEX_W_0F3A15_P_2,
2226 VEX_W_0F3A18_P_2,
2227 VEX_W_0F3A19_P_2,
2228 VEX_W_0F3A20_P_2,
2229 VEX_W_0F3A21_P_2,
43234a1e 2230 VEX_W_0F3A30_P_2_LEN_0,
1ba585e8 2231 VEX_W_0F3A31_P_2_LEN_0,
43234a1e 2232 VEX_W_0F3A32_P_2_LEN_0,
1ba585e8 2233 VEX_W_0F3A33_P_2_LEN_0,
6c30d220
L
2234 VEX_W_0F3A38_P_2,
2235 VEX_W_0F3A39_P_2,
592a252b
L
2236 VEX_W_0F3A40_P_2,
2237 VEX_W_0F3A41_P_2,
2238 VEX_W_0F3A42_P_2,
6c30d220 2239 VEX_W_0F3A46_P_2,
592a252b
L
2240 VEX_W_0F3A48_P_2,
2241 VEX_W_0F3A49_P_2,
2242 VEX_W_0F3A4A_P_2,
2243 VEX_W_0F3A4B_P_2,
2244 VEX_W_0F3A4C_P_2,
592a252b
L
2245 VEX_W_0F3A62_P_2,
2246 VEX_W_0F3A63_P_2,
48521003
IT
2247 VEX_W_0F3ACE_P_2,
2248 VEX_W_0F3ACF_P_2,
43234a1e
L
2249 VEX_W_0F3ADF_P_2,
2250
2251 EVEX_W_0F10_P_0,
2252 EVEX_W_0F10_P_1_M_0,
2253 EVEX_W_0F10_P_1_M_1,
2254 EVEX_W_0F10_P_2,
2255 EVEX_W_0F10_P_3_M_0,
2256 EVEX_W_0F10_P_3_M_1,
2257 EVEX_W_0F11_P_0,
2258 EVEX_W_0F11_P_1_M_0,
2259 EVEX_W_0F11_P_1_M_1,
2260 EVEX_W_0F11_P_2,
2261 EVEX_W_0F11_P_3_M_0,
2262 EVEX_W_0F11_P_3_M_1,
2263 EVEX_W_0F12_P_0_M_0,
2264 EVEX_W_0F12_P_0_M_1,
2265 EVEX_W_0F12_P_1,
2266 EVEX_W_0F12_P_2,
2267 EVEX_W_0F12_P_3,
2268 EVEX_W_0F13_P_0,
2269 EVEX_W_0F13_P_2,
2270 EVEX_W_0F14_P_0,
2271 EVEX_W_0F14_P_2,
2272 EVEX_W_0F15_P_0,
2273 EVEX_W_0F15_P_2,
2274 EVEX_W_0F16_P_0_M_0,
2275 EVEX_W_0F16_P_0_M_1,
2276 EVEX_W_0F16_P_1,
2277 EVEX_W_0F16_P_2,
2278 EVEX_W_0F17_P_0,
2279 EVEX_W_0F17_P_2,
2280 EVEX_W_0F28_P_0,
2281 EVEX_W_0F28_P_2,
2282 EVEX_W_0F29_P_0,
2283 EVEX_W_0F29_P_2,
2284 EVEX_W_0F2A_P_1,
2285 EVEX_W_0F2A_P_3,
2286 EVEX_W_0F2B_P_0,
2287 EVEX_W_0F2B_P_2,
2288 EVEX_W_0F2E_P_0,
2289 EVEX_W_0F2E_P_2,
2290 EVEX_W_0F2F_P_0,
2291 EVEX_W_0F2F_P_2,
2292 EVEX_W_0F51_P_0,
2293 EVEX_W_0F51_P_1,
2294 EVEX_W_0F51_P_2,
2295 EVEX_W_0F51_P_3,
90a915bf
IT
2296 EVEX_W_0F54_P_0,
2297 EVEX_W_0F54_P_2,
2298 EVEX_W_0F55_P_0,
2299 EVEX_W_0F55_P_2,
2300 EVEX_W_0F56_P_0,
2301 EVEX_W_0F56_P_2,
2302 EVEX_W_0F57_P_0,
2303 EVEX_W_0F57_P_2,
43234a1e
L
2304 EVEX_W_0F58_P_0,
2305 EVEX_W_0F58_P_1,
2306 EVEX_W_0F58_P_2,
2307 EVEX_W_0F58_P_3,
2308 EVEX_W_0F59_P_0,
2309 EVEX_W_0F59_P_1,
2310 EVEX_W_0F59_P_2,
2311 EVEX_W_0F59_P_3,
2312 EVEX_W_0F5A_P_0,
2313 EVEX_W_0F5A_P_1,
2314 EVEX_W_0F5A_P_2,
2315 EVEX_W_0F5A_P_3,
2316 EVEX_W_0F5B_P_0,
2317 EVEX_W_0F5B_P_1,
2318 EVEX_W_0F5B_P_2,
2319 EVEX_W_0F5C_P_0,
2320 EVEX_W_0F5C_P_1,
2321 EVEX_W_0F5C_P_2,
2322 EVEX_W_0F5C_P_3,
2323 EVEX_W_0F5D_P_0,
2324 EVEX_W_0F5D_P_1,
2325 EVEX_W_0F5D_P_2,
2326 EVEX_W_0F5D_P_3,
2327 EVEX_W_0F5E_P_0,
2328 EVEX_W_0F5E_P_1,
2329 EVEX_W_0F5E_P_2,
2330 EVEX_W_0F5E_P_3,
2331 EVEX_W_0F5F_P_0,
2332 EVEX_W_0F5F_P_1,
2333 EVEX_W_0F5F_P_2,
2334 EVEX_W_0F5F_P_3,
2335 EVEX_W_0F62_P_2,
2336 EVEX_W_0F66_P_2,
2337 EVEX_W_0F6A_P_2,
1ba585e8 2338 EVEX_W_0F6B_P_2,
43234a1e
L
2339 EVEX_W_0F6C_P_2,
2340 EVEX_W_0F6D_P_2,
2341 EVEX_W_0F6E_P_2,
2342 EVEX_W_0F6F_P_1,
2343 EVEX_W_0F6F_P_2,
1ba585e8 2344 EVEX_W_0F6F_P_3,
43234a1e
L
2345 EVEX_W_0F70_P_2,
2346 EVEX_W_0F72_R_2_P_2,
2347 EVEX_W_0F72_R_6_P_2,
2348 EVEX_W_0F73_R_2_P_2,
2349 EVEX_W_0F73_R_6_P_2,
2350 EVEX_W_0F76_P_2,
2351 EVEX_W_0F78_P_0,
90a915bf 2352 EVEX_W_0F78_P_2,
43234a1e 2353 EVEX_W_0F79_P_0,
90a915bf 2354 EVEX_W_0F79_P_2,
43234a1e 2355 EVEX_W_0F7A_P_1,
90a915bf 2356 EVEX_W_0F7A_P_2,
43234a1e
L
2357 EVEX_W_0F7A_P_3,
2358 EVEX_W_0F7B_P_1,
90a915bf 2359 EVEX_W_0F7B_P_2,
43234a1e
L
2360 EVEX_W_0F7B_P_3,
2361 EVEX_W_0F7E_P_1,
2362 EVEX_W_0F7E_P_2,
2363 EVEX_W_0F7F_P_1,
2364 EVEX_W_0F7F_P_2,
1ba585e8 2365 EVEX_W_0F7F_P_3,
43234a1e
L
2366 EVEX_W_0FC2_P_0,
2367 EVEX_W_0FC2_P_1,
2368 EVEX_W_0FC2_P_2,
2369 EVEX_W_0FC2_P_3,
2370 EVEX_W_0FC6_P_0,
2371 EVEX_W_0FC6_P_2,
2372 EVEX_W_0FD2_P_2,
2373 EVEX_W_0FD3_P_2,
2374 EVEX_W_0FD4_P_2,
2375 EVEX_W_0FD6_P_2,
2376 EVEX_W_0FE6_P_1,
2377 EVEX_W_0FE6_P_2,
2378 EVEX_W_0FE6_P_3,
2379 EVEX_W_0FE7_P_2,
2380 EVEX_W_0FF2_P_2,
2381 EVEX_W_0FF3_P_2,
2382 EVEX_W_0FF4_P_2,
2383 EVEX_W_0FFA_P_2,
2384 EVEX_W_0FFB_P_2,
2385 EVEX_W_0FFE_P_2,
2386 EVEX_W_0F380C_P_2,
2387 EVEX_W_0F380D_P_2,
1ba585e8
IT
2388 EVEX_W_0F3810_P_1,
2389 EVEX_W_0F3810_P_2,
43234a1e 2390 EVEX_W_0F3811_P_1,
1ba585e8 2391 EVEX_W_0F3811_P_2,
43234a1e 2392 EVEX_W_0F3812_P_1,
1ba585e8 2393 EVEX_W_0F3812_P_2,
43234a1e
L
2394 EVEX_W_0F3813_P_1,
2395 EVEX_W_0F3813_P_2,
2396 EVEX_W_0F3814_P_1,
2397 EVEX_W_0F3815_P_1,
2398 EVEX_W_0F3818_P_2,
2399 EVEX_W_0F3819_P_2,
2400 EVEX_W_0F381A_P_2,
2401 EVEX_W_0F381B_P_2,
2402 EVEX_W_0F381E_P_2,
2403 EVEX_W_0F381F_P_2,
1ba585e8 2404 EVEX_W_0F3820_P_1,
43234a1e
L
2405 EVEX_W_0F3821_P_1,
2406 EVEX_W_0F3822_P_1,
2407 EVEX_W_0F3823_P_1,
2408 EVEX_W_0F3824_P_1,
2409 EVEX_W_0F3825_P_1,
2410 EVEX_W_0F3825_P_2,
1ba585e8
IT
2411 EVEX_W_0F3826_P_1,
2412 EVEX_W_0F3826_P_2,
2413 EVEX_W_0F3828_P_1,
43234a1e 2414 EVEX_W_0F3828_P_2,
1ba585e8 2415 EVEX_W_0F3829_P_1,
43234a1e
L
2416 EVEX_W_0F3829_P_2,
2417 EVEX_W_0F382A_P_1,
2418 EVEX_W_0F382A_P_2,
1ba585e8
IT
2419 EVEX_W_0F382B_P_2,
2420 EVEX_W_0F3830_P_1,
43234a1e
L
2421 EVEX_W_0F3831_P_1,
2422 EVEX_W_0F3832_P_1,
2423 EVEX_W_0F3833_P_1,
2424 EVEX_W_0F3834_P_1,
2425 EVEX_W_0F3835_P_1,
2426 EVEX_W_0F3835_P_2,
2427 EVEX_W_0F3837_P_2,
90a915bf
IT
2428 EVEX_W_0F3838_P_1,
2429 EVEX_W_0F3839_P_1,
43234a1e
L
2430 EVEX_W_0F383A_P_1,
2431 EVEX_W_0F3840_P_2,
ee6872be 2432 EVEX_W_0F3854_P_2,
620214f7 2433 EVEX_W_0F3855_P_2,
43234a1e
L
2434 EVEX_W_0F3858_P_2,
2435 EVEX_W_0F3859_P_2,
2436 EVEX_W_0F385A_P_2,
2437 EVEX_W_0F385B_P_2,
53467f57
IT
2438 EVEX_W_0F3862_P_2,
2439 EVEX_W_0F3863_P_2,
1ba585e8 2440 EVEX_W_0F3866_P_2,
53467f57
IT
2441 EVEX_W_0F3870_P_2,
2442 EVEX_W_0F3871_P_2,
2443 EVEX_W_0F3872_P_2,
2444 EVEX_W_0F3873_P_2,
1ba585e8
IT
2445 EVEX_W_0F3875_P_2,
2446 EVEX_W_0F3878_P_2,
2447 EVEX_W_0F3879_P_2,
2448 EVEX_W_0F387A_P_2,
2449 EVEX_W_0F387B_P_2,
2450 EVEX_W_0F387D_P_2,
14f195c9 2451 EVEX_W_0F3883_P_2,
1ba585e8 2452 EVEX_W_0F388D_P_2,
43234a1e
L
2453 EVEX_W_0F3891_P_2,
2454 EVEX_W_0F3893_P_2,
2455 EVEX_W_0F38A1_P_2,
2456 EVEX_W_0F38A3_P_2,
2457 EVEX_W_0F38C7_R_1_P_2,
2458 EVEX_W_0F38C7_R_2_P_2,
2459 EVEX_W_0F38C7_R_5_P_2,
2460 EVEX_W_0F38C7_R_6_P_2,
2461
2462 EVEX_W_0F3A00_P_2,
2463 EVEX_W_0F3A01_P_2,
2464 EVEX_W_0F3A04_P_2,
2465 EVEX_W_0F3A05_P_2,
2466 EVEX_W_0F3A08_P_2,
2467 EVEX_W_0F3A09_P_2,
2468 EVEX_W_0F3A0A_P_2,
2469 EVEX_W_0F3A0B_P_2,
90a915bf 2470 EVEX_W_0F3A16_P_2,
43234a1e
L
2471 EVEX_W_0F3A18_P_2,
2472 EVEX_W_0F3A19_P_2,
2473 EVEX_W_0F3A1A_P_2,
2474 EVEX_W_0F3A1B_P_2,
2475 EVEX_W_0F3A1D_P_2,
2476 EVEX_W_0F3A21_P_2,
90a915bf 2477 EVEX_W_0F3A22_P_2,
43234a1e
L
2478 EVEX_W_0F3A23_P_2,
2479 EVEX_W_0F3A38_P_2,
2480 EVEX_W_0F3A39_P_2,
2481 EVEX_W_0F3A3A_P_2,
2482 EVEX_W_0F3A3B_P_2,
1ba585e8
IT
2483 EVEX_W_0F3A3E_P_2,
2484 EVEX_W_0F3A3F_P_2,
2485 EVEX_W_0F3A42_P_2,
90a915bf
IT
2486 EVEX_W_0F3A43_P_2,
2487 EVEX_W_0F3A50_P_2,
2488 EVEX_W_0F3A51_P_2,
2489 EVEX_W_0F3A56_P_2,
2490 EVEX_W_0F3A57_P_2,
2491 EVEX_W_0F3A66_P_2,
53467f57
IT
2492 EVEX_W_0F3A67_P_2,
2493 EVEX_W_0F3A70_P_2,
2494 EVEX_W_0F3A71_P_2,
2495 EVEX_W_0F3A72_P_2,
48521003
IT
2496 EVEX_W_0F3A73_P_2,
2497 EVEX_W_0F3ACE_P_2,
2498 EVEX_W_0F3ACF_P_2
9e30b8e0
L
2499};
2500
26ca5450 2501typedef void (*op_rtn) (int bytemode, int sizeflag);
252b5132
RH
2502
2503struct dis386 {
2da11e11 2504 const char *name;
ce518a5f
L
2505 struct
2506 {
2507 op_rtn rtn;
2508 int bytemode;
2509 } op[MAX_OPERANDS];
bf890a93 2510 unsigned int prefix_requirement;
252b5132
RH
2511};
2512
2513/* Upper case letters in the instruction names here are macros.
2514 'A' => print 'b' if no register operands or suffix_always is true
2515 'B' => print 'b' if suffix_always is true
9306ca4a 2516 'C' => print 's' or 'l' ('w' or 'd' in Intel mode) depending on operand
98b528ac 2517 size prefix
ed7841b3 2518 'D' => print 'w' if no register operands or 'w', 'l' or 'q', if
98b528ac 2519 suffix_always is true
252b5132 2520 'E' => print 'e' if 32-bit form of jcxz
3ffd33cf 2521 'F' => print 'w' or 'l' depending on address size prefix (loop insns)
52fd6d94 2522 'G' => print 'w' or 'l' depending on operand size prefix (i/o insns)
5dd0794d 2523 'H' => print ",pt" or ",pn" branch hint
9306ca4a 2524 'I' => honor following macro letter even in Intel mode (implemented only
98b528ac 2525 for some of the macro letters)
9306ca4a 2526 'J' => print 'l'
42903f7f 2527 'K' => print 'd' or 'q' if rex prefix is present.
252b5132 2528 'L' => print 'l' if suffix_always is true
9d141669 2529 'M' => print 'r' if intel_mnemonic is false.
252b5132 2530 'N' => print 'n' if instruction has no wait "prefix"
a35ca55a 2531 'O' => print 'd' or 'o' (or 'q' in Intel mode)
52b15da3 2532 'P' => print 'w', 'l' or 'q' if instruction has an operand size prefix,
98b528ac
L
2533 or suffix_always is true. print 'q' if rex prefix is present.
2534 'Q' => print 'w', 'l' or 'q' for memory operand or suffix_always
2535 is true
a35ca55a 2536 'R' => print 'w', 'l' or 'q' ('d' for 'l' and 'e' in Intel mode)
52b15da3 2537 'S' => print 'w', 'l' or 'q' if suffix_always is true
a72d2af2
L
2538 'T' => print 'q' in 64bit mode if instruction has no operand size
2539 prefix and behave as 'P' otherwise
2540 'U' => print 'q' in 64bit mode if instruction has no operand size
2541 prefix and behave as 'Q' otherwise
2542 'V' => print 'q' in 64bit mode if instruction has no operand size
2543 prefix and behave as 'S' otherwise
a35ca55a 2544 'W' => print 'b', 'w' or 'l' ('d' in Intel mode)
9306ca4a 2545 'X' => print 's', 'd' depending on data16 prefix (for XMM)
9646c87b 2546 'Y' unused.
6dd5059a 2547 'Z' => print 'q' in 64bit mode and behave as 'L' otherwise
9d141669 2548 '!' => change condition from true to false or from false to true.
98b528ac 2549 '%' => add 1 upper case letter to the macro.
a72d2af2
L
2550 '^' => print 'w' or 'l' depending on operand size prefix or
2551 suffix_always is true (lcall/ljmp).
5db04b09
L
2552 '@' => print 'q' for Intel64 ISA, 'w' or 'q' for AMD64 ISA depending
2553 on operand size prefix.
07f5af7d
L
2554 '&' => print 'q' in 64bit mode for Intel64 ISA or if instruction
2555 has no operand size prefix for AMD64 ISA, behave as 'P'
2556 otherwise
98b528ac
L
2557
2558 2 upper case letter macros:
04d824a4
JB
2559 "XY" => print 'x' or 'y' if suffix_always is true or no register
2560 operands and no broadcast.
2561 "XZ" => print 'x', 'y', or 'z' if suffix_always is true or no
2562 register operands and no broadcast.
4b06377f
L
2563 "XW" => print 's', 'd' depending on the VEX.W bit (for FMA)
2564 "LQ" => print 'l' ('d' in Intel mode) or 'q' for memory operand
98b528ac 2565 or suffix_always is true
4b06377f
L
2566 "LB" => print "abs" in 64bit mode and behave as 'B' otherwise
2567 "LS" => print "abs" in 64bit mode and behave as 'S' otherwise
2568 "LV" => print "abs" for 64bit operand and behave as 'S' otherwise
6c30d220 2569 "LW" => print 'd', 'q' depending on the VEX.W bit
4b4c407a
L
2570 "LP" => print 'w' or 'l' ('d' in Intel mode) if instruction has
2571 an operand size prefix, or suffix_always is true. print
2572 'q' if rex prefix is present.
52b15da3 2573
6439fc28
AM
2574 Many of the above letters print nothing in Intel mode. See "putop"
2575 for the details.
52b15da3 2576
6439fc28 2577 Braces '{' and '}', and vertical bars '|', indicate alternative
7c52e0e8 2578 mnemonic strings for AT&T and Intel. */
252b5132 2579
6439fc28 2580static const struct dis386 dis386[] = {
252b5132 2581 /* 00 */
bf890a93
IT
2582 { "addB", { Ebh1, Gb }, 0 },
2583 { "addS", { Evh1, Gv }, 0 },
2584 { "addB", { Gb, EbS }, 0 },
2585 { "addS", { Gv, EvS }, 0 },
2586 { "addB", { AL, Ib }, 0 },
2587 { "addS", { eAX, Iv }, 0 },
4e7d34a6
L
2588 { X86_64_TABLE (X86_64_06) },
2589 { X86_64_TABLE (X86_64_07) },
252b5132 2590 /* 08 */
bf890a93
IT
2591 { "orB", { Ebh1, Gb }, 0 },
2592 { "orS", { Evh1, Gv }, 0 },
2593 { "orB", { Gb, EbS }, 0 },
2594 { "orS", { Gv, EvS }, 0 },
2595 { "orB", { AL, Ib }, 0 },
2596 { "orS", { eAX, Iv }, 0 },
4e7d34a6 2597 { X86_64_TABLE (X86_64_0D) },
592d1631 2598 { Bad_Opcode }, /* 0x0f extended opcode escape */
252b5132 2599 /* 10 */
bf890a93
IT
2600 { "adcB", { Ebh1, Gb }, 0 },
2601 { "adcS", { Evh1, Gv }, 0 },
2602 { "adcB", { Gb, EbS }, 0 },
2603 { "adcS", { Gv, EvS }, 0 },
2604 { "adcB", { AL, Ib }, 0 },
2605 { "adcS", { eAX, Iv }, 0 },
4e7d34a6
L
2606 { X86_64_TABLE (X86_64_16) },
2607 { X86_64_TABLE (X86_64_17) },
252b5132 2608 /* 18 */
bf890a93
IT
2609 { "sbbB", { Ebh1, Gb }, 0 },
2610 { "sbbS", { Evh1, Gv }, 0 },
2611 { "sbbB", { Gb, EbS }, 0 },
2612 { "sbbS", { Gv, EvS }, 0 },
2613 { "sbbB", { AL, Ib }, 0 },
2614 { "sbbS", { eAX, Iv }, 0 },
4e7d34a6
L
2615 { X86_64_TABLE (X86_64_1E) },
2616 { X86_64_TABLE (X86_64_1F) },
252b5132 2617 /* 20 */
bf890a93
IT
2618 { "andB", { Ebh1, Gb }, 0 },
2619 { "andS", { Evh1, Gv }, 0 },
2620 { "andB", { Gb, EbS }, 0 },
2621 { "andS", { Gv, EvS }, 0 },
2622 { "andB", { AL, Ib }, 0 },
2623 { "andS", { eAX, Iv }, 0 },
592d1631 2624 { Bad_Opcode }, /* SEG ES prefix */
4e7d34a6 2625 { X86_64_TABLE (X86_64_27) },
252b5132 2626 /* 28 */
bf890a93
IT
2627 { "subB", { Ebh1, Gb }, 0 },
2628 { "subS", { Evh1, Gv }, 0 },
2629 { "subB", { Gb, EbS }, 0 },
2630 { "subS", { Gv, EvS }, 0 },
2631 { "subB", { AL, Ib }, 0 },
2632 { "subS", { eAX, Iv }, 0 },
592d1631 2633 { Bad_Opcode }, /* SEG CS prefix */
4e7d34a6 2634 { X86_64_TABLE (X86_64_2F) },
252b5132 2635 /* 30 */
bf890a93
IT
2636 { "xorB", { Ebh1, Gb }, 0 },
2637 { "xorS", { Evh1, Gv }, 0 },
2638 { "xorB", { Gb, EbS }, 0 },
2639 { "xorS", { Gv, EvS }, 0 },
2640 { "xorB", { AL, Ib }, 0 },
2641 { "xorS", { eAX, Iv }, 0 },
592d1631 2642 { Bad_Opcode }, /* SEG SS prefix */
4e7d34a6 2643 { X86_64_TABLE (X86_64_37) },
252b5132 2644 /* 38 */
bf890a93
IT
2645 { "cmpB", { Eb, Gb }, 0 },
2646 { "cmpS", { Ev, Gv }, 0 },
2647 { "cmpB", { Gb, EbS }, 0 },
2648 { "cmpS", { Gv, EvS }, 0 },
2649 { "cmpB", { AL, Ib }, 0 },
2650 { "cmpS", { eAX, Iv }, 0 },
592d1631 2651 { Bad_Opcode }, /* SEG DS prefix */
4e7d34a6 2652 { X86_64_TABLE (X86_64_3F) },
252b5132 2653 /* 40 */
bf890a93
IT
2654 { "inc{S|}", { RMeAX }, 0 },
2655 { "inc{S|}", { RMeCX }, 0 },
2656 { "inc{S|}", { RMeDX }, 0 },
2657 { "inc{S|}", { RMeBX }, 0 },
2658 { "inc{S|}", { RMeSP }, 0 },
2659 { "inc{S|}", { RMeBP }, 0 },
2660 { "inc{S|}", { RMeSI }, 0 },
2661 { "inc{S|}", { RMeDI }, 0 },
252b5132 2662 /* 48 */
bf890a93
IT
2663 { "dec{S|}", { RMeAX }, 0 },
2664 { "dec{S|}", { RMeCX }, 0 },
2665 { "dec{S|}", { RMeDX }, 0 },
2666 { "dec{S|}", { RMeBX }, 0 },
2667 { "dec{S|}", { RMeSP }, 0 },
2668 { "dec{S|}", { RMeBP }, 0 },
2669 { "dec{S|}", { RMeSI }, 0 },
2670 { "dec{S|}", { RMeDI }, 0 },
252b5132 2671 /* 50 */
bf890a93
IT
2672 { "pushV", { RMrAX }, 0 },
2673 { "pushV", { RMrCX }, 0 },
2674 { "pushV", { RMrDX }, 0 },
2675 { "pushV", { RMrBX }, 0 },
2676 { "pushV", { RMrSP }, 0 },
2677 { "pushV", { RMrBP }, 0 },
2678 { "pushV", { RMrSI }, 0 },
2679 { "pushV", { RMrDI }, 0 },
252b5132 2680 /* 58 */
bf890a93
IT
2681 { "popV", { RMrAX }, 0 },
2682 { "popV", { RMrCX }, 0 },
2683 { "popV", { RMrDX }, 0 },
2684 { "popV", { RMrBX }, 0 },
2685 { "popV", { RMrSP }, 0 },
2686 { "popV", { RMrBP }, 0 },
2687 { "popV", { RMrSI }, 0 },
2688 { "popV", { RMrDI }, 0 },
252b5132 2689 /* 60 */
4e7d34a6
L
2690 { X86_64_TABLE (X86_64_60) },
2691 { X86_64_TABLE (X86_64_61) },
2692 { X86_64_TABLE (X86_64_62) },
2693 { X86_64_TABLE (X86_64_63) },
592d1631
L
2694 { Bad_Opcode }, /* seg fs */
2695 { Bad_Opcode }, /* seg gs */
2696 { Bad_Opcode }, /* op size prefix */
2697 { Bad_Opcode }, /* adr size prefix */
252b5132 2698 /* 68 */
bf890a93
IT
2699 { "pushT", { sIv }, 0 },
2700 { "imulS", { Gv, Ev, Iv }, 0 },
2701 { "pushT", { sIbT }, 0 },
2702 { "imulS", { Gv, Ev, sIb }, 0 },
2703 { "ins{b|}", { Ybr, indirDX }, 0 },
4e7d34a6 2704 { X86_64_TABLE (X86_64_6D) },
bf890a93 2705 { "outs{b|}", { indirDXr, Xb }, 0 },
4e7d34a6 2706 { X86_64_TABLE (X86_64_6F) },
252b5132 2707 /* 70 */
bf890a93
IT
2708 { "joH", { Jb, BND, cond_jump_flag }, 0 },
2709 { "jnoH", { Jb, BND, cond_jump_flag }, 0 },
2710 { "jbH", { Jb, BND, cond_jump_flag }, 0 },
2711 { "jaeH", { Jb, BND, cond_jump_flag }, 0 },
2712 { "jeH", { Jb, BND, cond_jump_flag }, 0 },
2713 { "jneH", { Jb, BND, cond_jump_flag }, 0 },
2714 { "jbeH", { Jb, BND, cond_jump_flag }, 0 },
2715 { "jaH", { Jb, BND, cond_jump_flag }, 0 },
252b5132 2716 /* 78 */
bf890a93
IT
2717 { "jsH", { Jb, BND, cond_jump_flag }, 0 },
2718 { "jnsH", { Jb, BND, cond_jump_flag }, 0 },
2719 { "jpH", { Jb, BND, cond_jump_flag }, 0 },
2720 { "jnpH", { Jb, BND, cond_jump_flag }, 0 },
2721 { "jlH", { Jb, BND, cond_jump_flag }, 0 },
2722 { "jgeH", { Jb, BND, cond_jump_flag }, 0 },
2723 { "jleH", { Jb, BND, cond_jump_flag }, 0 },
2724 { "jgH", { Jb, BND, cond_jump_flag }, 0 },
252b5132 2725 /* 80 */
1ceb70f8
L
2726 { REG_TABLE (REG_80) },
2727 { REG_TABLE (REG_81) },
d039fef3 2728 { X86_64_TABLE (X86_64_82) },
7148c369 2729 { REG_TABLE (REG_83) },
bf890a93
IT
2730 { "testB", { Eb, Gb }, 0 },
2731 { "testS", { Ev, Gv }, 0 },
2732 { "xchgB", { Ebh2, Gb }, 0 },
2733 { "xchgS", { Evh2, Gv }, 0 },
252b5132 2734 /* 88 */
bf890a93
IT
2735 { "movB", { Ebh3, Gb }, 0 },
2736 { "movS", { Evh3, Gv }, 0 },
2737 { "movB", { Gb, EbS }, 0 },
2738 { "movS", { Gv, EvS }, 0 },
2739 { "movD", { Sv, Sw }, 0 },
1ceb70f8 2740 { MOD_TABLE (MOD_8D) },
bf890a93 2741 { "movD", { Sw, Sv }, 0 },
1ceb70f8 2742 { REG_TABLE (REG_8F) },
252b5132 2743 /* 90 */
1ceb70f8 2744 { PREFIX_TABLE (PREFIX_90) },
bf890a93
IT
2745 { "xchgS", { RMeCX, eAX }, 0 },
2746 { "xchgS", { RMeDX, eAX }, 0 },
2747 { "xchgS", { RMeBX, eAX }, 0 },
2748 { "xchgS", { RMeSP, eAX }, 0 },
2749 { "xchgS", { RMeBP, eAX }, 0 },
2750 { "xchgS", { RMeSI, eAX }, 0 },
2751 { "xchgS", { RMeDI, eAX }, 0 },
252b5132 2752 /* 98 */
bf890a93
IT
2753 { "cW{t|}R", { XX }, 0 },
2754 { "cR{t|}O", { XX }, 0 },
4e7d34a6 2755 { X86_64_TABLE (X86_64_9A) },
592d1631 2756 { Bad_Opcode }, /* fwait */
bf890a93
IT
2757 { "pushfT", { XX }, 0 },
2758 { "popfT", { XX }, 0 },
2759 { "sahf", { XX }, 0 },
2760 { "lahf", { XX }, 0 },
252b5132 2761 /* a0 */
bf890a93
IT
2762 { "mov%LB", { AL, Ob }, 0 },
2763 { "mov%LS", { eAX, Ov }, 0 },
2764 { "mov%LB", { Ob, AL }, 0 },
2765 { "mov%LS", { Ov, eAX }, 0 },
2766 { "movs{b|}", { Ybr, Xb }, 0 },
2767 { "movs{R|}", { Yvr, Xv }, 0 },
2768 { "cmps{b|}", { Xb, Yb }, 0 },
2769 { "cmps{R|}", { Xv, Yv }, 0 },
252b5132 2770 /* a8 */
bf890a93
IT
2771 { "testB", { AL, Ib }, 0 },
2772 { "testS", { eAX, Iv }, 0 },
2773 { "stosB", { Ybr, AL }, 0 },
2774 { "stosS", { Yvr, eAX }, 0 },
2775 { "lodsB", { ALr, Xb }, 0 },
2776 { "lodsS", { eAXr, Xv }, 0 },
2777 { "scasB", { AL, Yb }, 0 },
2778 { "scasS", { eAX, Yv }, 0 },
252b5132 2779 /* b0 */
bf890a93
IT
2780 { "movB", { RMAL, Ib }, 0 },
2781 { "movB", { RMCL, Ib }, 0 },
2782 { "movB", { RMDL, Ib }, 0 },
2783 { "movB", { RMBL, Ib }, 0 },
2784 { "movB", { RMAH, Ib }, 0 },
2785 { "movB", { RMCH, Ib }, 0 },
2786 { "movB", { RMDH, Ib }, 0 },
2787 { "movB", { RMBH, Ib }, 0 },
252b5132 2788 /* b8 */
bf890a93
IT
2789 { "mov%LV", { RMeAX, Iv64 }, 0 },
2790 { "mov%LV", { RMeCX, Iv64 }, 0 },
2791 { "mov%LV", { RMeDX, Iv64 }, 0 },
2792 { "mov%LV", { RMeBX, Iv64 }, 0 },
2793 { "mov%LV", { RMeSP, Iv64 }, 0 },
2794 { "mov%LV", { RMeBP, Iv64 }, 0 },
2795 { "mov%LV", { RMeSI, Iv64 }, 0 },
2796 { "mov%LV", { RMeDI, Iv64 }, 0 },
252b5132 2797 /* c0 */
1ceb70f8
L
2798 { REG_TABLE (REG_C0) },
2799 { REG_TABLE (REG_C1) },
bf890a93
IT
2800 { "retT", { Iw, BND }, 0 },
2801 { "retT", { BND }, 0 },
4e7d34a6
L
2802 { X86_64_TABLE (X86_64_C4) },
2803 { X86_64_TABLE (X86_64_C5) },
1ceb70f8
L
2804 { REG_TABLE (REG_C6) },
2805 { REG_TABLE (REG_C7) },
252b5132 2806 /* c8 */
bf890a93
IT
2807 { "enterT", { Iw, Ib }, 0 },
2808 { "leaveT", { XX }, 0 },
2809 { "Jret{|f}P", { Iw }, 0 },
2810 { "Jret{|f}P", { XX }, 0 },
2811 { "int3", { XX }, 0 },
2812 { "int", { Ib }, 0 },
4e7d34a6 2813 { X86_64_TABLE (X86_64_CE) },
bf890a93 2814 { "iret%LP", { XX }, 0 },
252b5132 2815 /* d0 */
1ceb70f8
L
2816 { REG_TABLE (REG_D0) },
2817 { REG_TABLE (REG_D1) },
2818 { REG_TABLE (REG_D2) },
2819 { REG_TABLE (REG_D3) },
4e7d34a6
L
2820 { X86_64_TABLE (X86_64_D4) },
2821 { X86_64_TABLE (X86_64_D5) },
592d1631 2822 { Bad_Opcode },
bf890a93 2823 { "xlat", { DSBX }, 0 },
252b5132
RH
2824 /* d8 */
2825 { FLOAT },
2826 { FLOAT },
2827 { FLOAT },
2828 { FLOAT },
2829 { FLOAT },
2830 { FLOAT },
2831 { FLOAT },
2832 { FLOAT },
2833 /* e0 */
bf890a93
IT
2834 { "loopneFH", { Jb, XX, loop_jcxz_flag }, 0 },
2835 { "loopeFH", { Jb, XX, loop_jcxz_flag }, 0 },
2836 { "loopFH", { Jb, XX, loop_jcxz_flag }, 0 },
2837 { "jEcxzH", { Jb, XX, loop_jcxz_flag }, 0 },
2838 { "inB", { AL, Ib }, 0 },
2839 { "inG", { zAX, Ib }, 0 },
2840 { "outB", { Ib, AL }, 0 },
2841 { "outG", { Ib, zAX }, 0 },
252b5132 2842 /* e8 */
a72d2af2
L
2843 { X86_64_TABLE (X86_64_E8) },
2844 { X86_64_TABLE (X86_64_E9) },
4e7d34a6 2845 { X86_64_TABLE (X86_64_EA) },
bf890a93
IT
2846 { "jmp", { Jb, BND }, 0 },
2847 { "inB", { AL, indirDX }, 0 },
2848 { "inG", { zAX, indirDX }, 0 },
2849 { "outB", { indirDX, AL }, 0 },
2850 { "outG", { indirDX, zAX }, 0 },
252b5132 2851 /* f0 */
592d1631 2852 { Bad_Opcode }, /* lock prefix */
bf890a93 2853 { "icebp", { XX }, 0 },
592d1631
L
2854 { Bad_Opcode }, /* repne */
2855 { Bad_Opcode }, /* repz */
bf890a93
IT
2856 { "hlt", { XX }, 0 },
2857 { "cmc", { XX }, 0 },
1ceb70f8
L
2858 { REG_TABLE (REG_F6) },
2859 { REG_TABLE (REG_F7) },
252b5132 2860 /* f8 */
bf890a93
IT
2861 { "clc", { XX }, 0 },
2862 { "stc", { XX }, 0 },
2863 { "cli", { XX }, 0 },
2864 { "sti", { XX }, 0 },
2865 { "cld", { XX }, 0 },
2866 { "std", { XX }, 0 },
1ceb70f8
L
2867 { REG_TABLE (REG_FE) },
2868 { REG_TABLE (REG_FF) },
252b5132
RH
2869};
2870
6439fc28 2871static const struct dis386 dis386_twobyte[] = {
252b5132 2872 /* 00 */
1ceb70f8
L
2873 { REG_TABLE (REG_0F00 ) },
2874 { REG_TABLE (REG_0F01 ) },
bf890a93
IT
2875 { "larS", { Gv, Ew }, 0 },
2876 { "lslS", { Gv, Ew }, 0 },
592d1631 2877 { Bad_Opcode },
bf890a93
IT
2878 { "syscall", { XX }, 0 },
2879 { "clts", { XX }, 0 },
2880 { "sysret%LP", { XX }, 0 },
252b5132 2881 /* 08 */
bf890a93 2882 { "invd", { XX }, 0 },
3233d7d0 2883 { PREFIX_TABLE (PREFIX_0F09) },
592d1631 2884 { Bad_Opcode },
bf890a93 2885 { "ud2", { XX }, 0 },
592d1631 2886 { Bad_Opcode },
b5b1fc4f 2887 { REG_TABLE (REG_0F0D) },
bf890a93
IT
2888 { "femms", { XX }, 0 },
2889 { "", { MX, EM, OPSUF }, 0 }, /* See OP_3DNowSuffix. */
252b5132 2890 /* 10 */
1ceb70f8
L
2891 { PREFIX_TABLE (PREFIX_0F10) },
2892 { PREFIX_TABLE (PREFIX_0F11) },
2893 { PREFIX_TABLE (PREFIX_0F12) },
2894 { MOD_TABLE (MOD_0F13) },
507bd325
L
2895 { "unpcklpX", { XM, EXx }, PREFIX_OPCODE },
2896 { "unpckhpX", { XM, EXx }, PREFIX_OPCODE },
1ceb70f8
L
2897 { PREFIX_TABLE (PREFIX_0F16) },
2898 { MOD_TABLE (MOD_0F17) },
252b5132 2899 /* 18 */
1ceb70f8 2900 { REG_TABLE (REG_0F18) },
bf890a93 2901 { "nopQ", { Ev }, 0 },
7e8b059b
L
2902 { PREFIX_TABLE (PREFIX_0F1A) },
2903 { PREFIX_TABLE (PREFIX_0F1B) },
c48935d7 2904 { PREFIX_TABLE (PREFIX_0F1C) },
bf890a93 2905 { "nopQ", { Ev }, 0 },
603555e5 2906 { PREFIX_TABLE (PREFIX_0F1E) },
bf890a93 2907 { "nopQ", { Ev }, 0 },
252b5132 2908 /* 20 */
bf890a93
IT
2909 { "movZ", { Rm, Cm }, 0 },
2910 { "movZ", { Rm, Dm }, 0 },
2911 { "movZ", { Cm, Rm }, 0 },
2912 { "movZ", { Dm, Rm }, 0 },
1ceb70f8 2913 { MOD_TABLE (MOD_0F24) },
592d1631 2914 { Bad_Opcode },
1ceb70f8 2915 { MOD_TABLE (MOD_0F26) },
592d1631 2916 { Bad_Opcode },
252b5132 2917 /* 28 */
507bd325
L
2918 { "movapX", { XM, EXx }, PREFIX_OPCODE },
2919 { "movapX", { EXxS, XM }, PREFIX_OPCODE },
1ceb70f8
L
2920 { PREFIX_TABLE (PREFIX_0F2A) },
2921 { PREFIX_TABLE (PREFIX_0F2B) },
2922 { PREFIX_TABLE (PREFIX_0F2C) },
2923 { PREFIX_TABLE (PREFIX_0F2D) },
2924 { PREFIX_TABLE (PREFIX_0F2E) },
2925 { PREFIX_TABLE (PREFIX_0F2F) },
252b5132 2926 /* 30 */
bf890a93
IT
2927 { "wrmsr", { XX }, 0 },
2928 { "rdtsc", { XX }, 0 },
2929 { "rdmsr", { XX }, 0 },
2930 { "rdpmc", { XX }, 0 },
2931 { "sysenter", { XX }, 0 },
2932 { "sysexit", { XX }, 0 },
592d1631 2933 { Bad_Opcode },
bf890a93 2934 { "getsec", { XX }, 0 },
252b5132 2935 /* 38 */
507bd325 2936 { THREE_BYTE_TABLE_PREFIX (THREE_BYTE_0F38, PREFIX_OPCODE) },
592d1631 2937 { Bad_Opcode },
507bd325 2938 { THREE_BYTE_TABLE_PREFIX (THREE_BYTE_0F3A, PREFIX_OPCODE) },
592d1631
L
2939 { Bad_Opcode },
2940 { Bad_Opcode },
2941 { Bad_Opcode },
2942 { Bad_Opcode },
2943 { Bad_Opcode },
252b5132 2944 /* 40 */
bf890a93
IT
2945 { "cmovoS", { Gv, Ev }, 0 },
2946 { "cmovnoS", { Gv, Ev }, 0 },
2947 { "cmovbS", { Gv, Ev }, 0 },
2948 { "cmovaeS", { Gv, Ev }, 0 },
2949 { "cmoveS", { Gv, Ev }, 0 },
2950 { "cmovneS", { Gv, Ev }, 0 },
2951 { "cmovbeS", { Gv, Ev }, 0 },
2952 { "cmovaS", { Gv, Ev }, 0 },
252b5132 2953 /* 48 */
bf890a93
IT
2954 { "cmovsS", { Gv, Ev }, 0 },
2955 { "cmovnsS", { Gv, Ev }, 0 },
2956 { "cmovpS", { Gv, Ev }, 0 },
2957 { "cmovnpS", { Gv, Ev }, 0 },
2958 { "cmovlS", { Gv, Ev }, 0 },
2959 { "cmovgeS", { Gv, Ev }, 0 },
2960 { "cmovleS", { Gv, Ev }, 0 },
2961 { "cmovgS", { Gv, Ev }, 0 },
252b5132 2962 /* 50 */
75c135a8 2963 { MOD_TABLE (MOD_0F51) },
1ceb70f8
L
2964 { PREFIX_TABLE (PREFIX_0F51) },
2965 { PREFIX_TABLE (PREFIX_0F52) },
2966 { PREFIX_TABLE (PREFIX_0F53) },
507bd325
L
2967 { "andpX", { XM, EXx }, PREFIX_OPCODE },
2968 { "andnpX", { XM, EXx }, PREFIX_OPCODE },
2969 { "orpX", { XM, EXx }, PREFIX_OPCODE },
2970 { "xorpX", { XM, EXx }, PREFIX_OPCODE },
252b5132 2971 /* 58 */
1ceb70f8
L
2972 { PREFIX_TABLE (PREFIX_0F58) },
2973 { PREFIX_TABLE (PREFIX_0F59) },
2974 { PREFIX_TABLE (PREFIX_0F5A) },
2975 { PREFIX_TABLE (PREFIX_0F5B) },
2976 { PREFIX_TABLE (PREFIX_0F5C) },
2977 { PREFIX_TABLE (PREFIX_0F5D) },
2978 { PREFIX_TABLE (PREFIX_0F5E) },
2979 { PREFIX_TABLE (PREFIX_0F5F) },
252b5132 2980 /* 60 */
1ceb70f8
L
2981 { PREFIX_TABLE (PREFIX_0F60) },
2982 { PREFIX_TABLE (PREFIX_0F61) },
2983 { PREFIX_TABLE (PREFIX_0F62) },
507bd325
L
2984 { "packsswb", { MX, EM }, PREFIX_OPCODE },
2985 { "pcmpgtb", { MX, EM }, PREFIX_OPCODE },
2986 { "pcmpgtw", { MX, EM }, PREFIX_OPCODE },
2987 { "pcmpgtd", { MX, EM }, PREFIX_OPCODE },
2988 { "packuswb", { MX, EM }, PREFIX_OPCODE },
252b5132 2989 /* 68 */
507bd325
L
2990 { "punpckhbw", { MX, EM }, PREFIX_OPCODE },
2991 { "punpckhwd", { MX, EM }, PREFIX_OPCODE },
2992 { "punpckhdq", { MX, EM }, PREFIX_OPCODE },
2993 { "packssdw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8
L
2994 { PREFIX_TABLE (PREFIX_0F6C) },
2995 { PREFIX_TABLE (PREFIX_0F6D) },
507bd325 2996 { "movK", { MX, Edq }, PREFIX_OPCODE },
1ceb70f8 2997 { PREFIX_TABLE (PREFIX_0F6F) },
252b5132 2998 /* 70 */
1ceb70f8
L
2999 { PREFIX_TABLE (PREFIX_0F70) },
3000 { REG_TABLE (REG_0F71) },
3001 { REG_TABLE (REG_0F72) },
3002 { REG_TABLE (REG_0F73) },
507bd325
L
3003 { "pcmpeqb", { MX, EM }, PREFIX_OPCODE },
3004 { "pcmpeqw", { MX, EM }, PREFIX_OPCODE },
3005 { "pcmpeqd", { MX, EM }, PREFIX_OPCODE },
3006 { "emms", { XX }, PREFIX_OPCODE },
252b5132 3007 /* 78 */
1ceb70f8
L
3008 { PREFIX_TABLE (PREFIX_0F78) },
3009 { PREFIX_TABLE (PREFIX_0F79) },
1f334aeb 3010 { Bad_Opcode },
592d1631 3011 { Bad_Opcode },
1ceb70f8
L
3012 { PREFIX_TABLE (PREFIX_0F7C) },
3013 { PREFIX_TABLE (PREFIX_0F7D) },
3014 { PREFIX_TABLE (PREFIX_0F7E) },
3015 { PREFIX_TABLE (PREFIX_0F7F) },
252b5132 3016 /* 80 */
bf890a93
IT
3017 { "joH", { Jv, BND, cond_jump_flag }, 0 },
3018 { "jnoH", { Jv, BND, cond_jump_flag }, 0 },
3019 { "jbH", { Jv, BND, cond_jump_flag }, 0 },
3020 { "jaeH", { Jv, BND, cond_jump_flag }, 0 },
3021 { "jeH", { Jv, BND, cond_jump_flag }, 0 },
3022 { "jneH", { Jv, BND, cond_jump_flag }, 0 },
3023 { "jbeH", { Jv, BND, cond_jump_flag }, 0 },
3024 { "jaH", { Jv, BND, cond_jump_flag }, 0 },
252b5132 3025 /* 88 */
bf890a93
IT
3026 { "jsH", { Jv, BND, cond_jump_flag }, 0 },
3027 { "jnsH", { Jv, BND, cond_jump_flag }, 0 },
3028 { "jpH", { Jv, BND, cond_jump_flag }, 0 },
3029 { "jnpH", { Jv, BND, cond_jump_flag }, 0 },
3030 { "jlH", { Jv, BND, cond_jump_flag }, 0 },
3031 { "jgeH", { Jv, BND, cond_jump_flag }, 0 },
3032 { "jleH", { Jv, BND, cond_jump_flag }, 0 },
3033 { "jgH", { Jv, BND, cond_jump_flag }, 0 },
252b5132 3034 /* 90 */
bf890a93
IT
3035 { "seto", { Eb }, 0 },
3036 { "setno", { Eb }, 0 },
3037 { "setb", { Eb }, 0 },
3038 { "setae", { Eb }, 0 },
3039 { "sete", { Eb }, 0 },
3040 { "setne", { Eb }, 0 },
3041 { "setbe", { Eb }, 0 },
3042 { "seta", { Eb }, 0 },
252b5132 3043 /* 98 */
bf890a93
IT
3044 { "sets", { Eb }, 0 },
3045 { "setns", { Eb }, 0 },
3046 { "setp", { Eb }, 0 },
3047 { "setnp", { Eb }, 0 },
3048 { "setl", { Eb }, 0 },
3049 { "setge", { Eb }, 0 },
3050 { "setle", { Eb }, 0 },
3051 { "setg", { Eb }, 0 },
252b5132 3052 /* a0 */
bf890a93
IT
3053 { "pushT", { fs }, 0 },
3054 { "popT", { fs }, 0 },
3055 { "cpuid", { XX }, 0 },
3056 { "btS", { Ev, Gv }, 0 },
3057 { "shldS", { Ev, Gv, Ib }, 0 },
3058 { "shldS", { Ev, Gv, CL }, 0 },
1ceb70f8
L
3059 { REG_TABLE (REG_0FA6) },
3060 { REG_TABLE (REG_0FA7) },
252b5132 3061 /* a8 */
bf890a93
IT
3062 { "pushT", { gs }, 0 },
3063 { "popT", { gs }, 0 },
3064 { "rsm", { XX }, 0 },
3065 { "btsS", { Evh1, Gv }, 0 },
3066 { "shrdS", { Ev, Gv, Ib }, 0 },
3067 { "shrdS", { Ev, Gv, CL }, 0 },
1ceb70f8 3068 { REG_TABLE (REG_0FAE) },
bf890a93 3069 { "imulS", { Gv, Ev }, 0 },
252b5132 3070 /* b0 */
bf890a93
IT
3071 { "cmpxchgB", { Ebh1, Gb }, 0 },
3072 { "cmpxchgS", { Evh1, Gv }, 0 },
1ceb70f8 3073 { MOD_TABLE (MOD_0FB2) },
bf890a93 3074 { "btrS", { Evh1, Gv }, 0 },
1ceb70f8
L
3075 { MOD_TABLE (MOD_0FB4) },
3076 { MOD_TABLE (MOD_0FB5) },
bf890a93
IT
3077 { "movz{bR|x}", { Gv, Eb }, 0 },
3078 { "movz{wR|x}", { Gv, Ew }, 0 }, /* yes, there really is movzww ! */
252b5132 3079 /* b8 */
1ceb70f8 3080 { PREFIX_TABLE (PREFIX_0FB8) },
66f1eba0 3081 { "ud1S", { Gv, Ev }, 0 },
1ceb70f8 3082 { REG_TABLE (REG_0FBA) },
bf890a93 3083 { "btcS", { Evh1, Gv }, 0 },
f12dc422 3084 { PREFIX_TABLE (PREFIX_0FBC) },
1ceb70f8 3085 { PREFIX_TABLE (PREFIX_0FBD) },
bf890a93
IT
3086 { "movs{bR|x}", { Gv, Eb }, 0 },
3087 { "movs{wR|x}", { Gv, Ew }, 0 }, /* yes, there really is movsww ! */
252b5132 3088 /* c0 */
bf890a93
IT
3089 { "xaddB", { Ebh1, Gb }, 0 },
3090 { "xaddS", { Evh1, Gv }, 0 },
1ceb70f8 3091 { PREFIX_TABLE (PREFIX_0FC2) },
a8484f96 3092 { MOD_TABLE (MOD_0FC3) },
507bd325
L
3093 { "pinsrw", { MX, Edqw, Ib }, PREFIX_OPCODE },
3094 { "pextrw", { Gdq, MS, Ib }, PREFIX_OPCODE },
3095 { "shufpX", { XM, EXx, Ib }, PREFIX_OPCODE },
1ceb70f8 3096 { REG_TABLE (REG_0FC7) },
252b5132 3097 /* c8 */
bf890a93
IT
3098 { "bswap", { RMeAX }, 0 },
3099 { "bswap", { RMeCX }, 0 },
3100 { "bswap", { RMeDX }, 0 },
3101 { "bswap", { RMeBX }, 0 },
3102 { "bswap", { RMeSP }, 0 },
3103 { "bswap", { RMeBP }, 0 },
3104 { "bswap", { RMeSI }, 0 },
3105 { "bswap", { RMeDI }, 0 },
252b5132 3106 /* d0 */
1ceb70f8 3107 { PREFIX_TABLE (PREFIX_0FD0) },
507bd325
L
3108 { "psrlw", { MX, EM }, PREFIX_OPCODE },
3109 { "psrld", { MX, EM }, PREFIX_OPCODE },
3110 { "psrlq", { MX, EM }, PREFIX_OPCODE },
3111 { "paddq", { MX, EM }, PREFIX_OPCODE },
3112 { "pmullw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8 3113 { PREFIX_TABLE (PREFIX_0FD6) },
75c135a8 3114 { MOD_TABLE (MOD_0FD7) },
252b5132 3115 /* d8 */
507bd325
L
3116 { "psubusb", { MX, EM }, PREFIX_OPCODE },
3117 { "psubusw", { MX, EM }, PREFIX_OPCODE },
3118 { "pminub", { MX, EM }, PREFIX_OPCODE },
3119 { "pand", { MX, EM }, PREFIX_OPCODE },
3120 { "paddusb", { MX, EM }, PREFIX_OPCODE },
3121 { "paddusw", { MX, EM }, PREFIX_OPCODE },
3122 { "pmaxub", { MX, EM }, PREFIX_OPCODE },
3123 { "pandn", { MX, EM }, PREFIX_OPCODE },
252b5132 3124 /* e0 */
507bd325
L
3125 { "pavgb", { MX, EM }, PREFIX_OPCODE },
3126 { "psraw", { MX, EM }, PREFIX_OPCODE },
3127 { "psrad", { MX, EM }, PREFIX_OPCODE },
3128 { "pavgw", { MX, EM }, PREFIX_OPCODE },
3129 { "pmulhuw", { MX, EM }, PREFIX_OPCODE },
3130 { "pmulhw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8
L
3131 { PREFIX_TABLE (PREFIX_0FE6) },
3132 { PREFIX_TABLE (PREFIX_0FE7) },
252b5132 3133 /* e8 */
507bd325
L
3134 { "psubsb", { MX, EM }, PREFIX_OPCODE },
3135 { "psubsw", { MX, EM }, PREFIX_OPCODE },
3136 { "pminsw", { MX, EM }, PREFIX_OPCODE },
3137 { "por", { MX, EM }, PREFIX_OPCODE },
3138 { "paddsb", { MX, EM }, PREFIX_OPCODE },
3139 { "paddsw", { MX, EM }, PREFIX_OPCODE },
3140 { "pmaxsw", { MX, EM }, PREFIX_OPCODE },
3141 { "pxor", { MX, EM }, PREFIX_OPCODE },
252b5132 3142 /* f0 */
1ceb70f8 3143 { PREFIX_TABLE (PREFIX_0FF0) },
507bd325
L
3144 { "psllw", { MX, EM }, PREFIX_OPCODE },
3145 { "pslld", { MX, EM }, PREFIX_OPCODE },
3146 { "psllq", { MX, EM }, PREFIX_OPCODE },
3147 { "pmuludq", { MX, EM }, PREFIX_OPCODE },
3148 { "pmaddwd", { MX, EM }, PREFIX_OPCODE },
3149 { "psadbw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8 3150 { PREFIX_TABLE (PREFIX_0FF7) },
252b5132 3151 /* f8 */
507bd325
L
3152 { "psubb", { MX, EM }, PREFIX_OPCODE },
3153 { "psubw", { MX, EM }, PREFIX_OPCODE },
3154 { "psubd", { MX, EM }, PREFIX_OPCODE },
3155 { "psubq", { MX, EM }, PREFIX_OPCODE },
3156 { "paddb", { MX, EM }, PREFIX_OPCODE },
3157 { "paddw", { MX, EM }, PREFIX_OPCODE },
3158 { "paddd", { MX, EM }, PREFIX_OPCODE },
66f1eba0 3159 { "ud0S", { Gv, Ev }, 0 },
252b5132
RH
3160};
3161
3162static const unsigned char onebyte_has_modrm[256] = {
c608c12e
AM
3163 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
3164 /* ------------------------------- */
3165 /* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 00 */
3166 /* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 10 */
3167 /* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 20 */
3168 /* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 30 */
3169 /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40 */
3170 /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50 */
3171 /* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, /* 60 */
3172 /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70 */
3173 /* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 80 */
3174 /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 90 */
3175 /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* a0 */
3176 /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* b0 */
3177 /* c0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* c0 */
3178 /* d0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* d0 */
3179 /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* e0 */
3180 /* f0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1 /* f0 */
3181 /* ------------------------------- */
3182 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
252b5132
RH
3183};
3184
3185static const unsigned char twobyte_has_modrm[256] = {
c608c12e
AM
3186 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
3187 /* ------------------------------- */
252b5132 3188 /* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */
b5b1fc4f 3189 /* 10 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1f */
85f10a01 3190 /* 20 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 2f */
331d2d0d 3191 /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
252b5132 3192 /* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */
4bba6815
AM
3193 /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */
3194 /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */
85f10a01 3195 /* 70 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 7f */
252b5132
RH
3196 /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
3197 /* 90 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9f */
30d1c836 3198 /* a0 */ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1, /* af */
66f1eba0 3199 /* b0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* bf */
252b5132 3200 /* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */
ca164297 3201 /* d0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
4bba6815 3202 /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
66f1eba0 3203 /* f0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 /* ff */
c608c12e
AM
3204 /* ------------------------------- */
3205 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
3206};
3207
252b5132
RH
3208static char obuf[100];
3209static char *obufp;
ea397f5b 3210static char *mnemonicendp;
252b5132
RH
3211static char scratchbuf[100];
3212static unsigned char *start_codep;
3213static unsigned char *insn_codep;
3214static unsigned char *codep;
285ca992 3215static unsigned char *end_codep;
f16cd0d5
L
3216static int last_lock_prefix;
3217static int last_repz_prefix;
3218static int last_repnz_prefix;
3219static int last_data_prefix;
3220static int last_addr_prefix;
3221static int last_rex_prefix;
3222static int last_seg_prefix;
d9949a36 3223static int fwait_prefix;
285ca992
L
3224/* The active segment register prefix. */
3225static int active_seg_prefix;
f16cd0d5
L
3226#define MAX_CODE_LENGTH 15
3227/* We can up to 14 prefixes since the maximum instruction length is
3228 15bytes. */
3229static int all_prefixes[MAX_CODE_LENGTH - 1];
252b5132 3230static disassemble_info *the_info;
7967e09e
L
3231static struct
3232 {
3233 int mod;
7967e09e 3234 int reg;
484c222e 3235 int rm;
7967e09e
L
3236 }
3237modrm;
4bba6815 3238static unsigned char need_modrm;
dfc8cf43
L
3239static struct
3240 {
3241 int scale;
3242 int index;
3243 int base;
3244 }
3245sib;
c0f3af97
L
3246static struct
3247 {
3248 int register_specifier;
3249 int length;
3250 int prefix;
3251 int w;
43234a1e
L
3252 int evex;
3253 int r;
3254 int v;
3255 int mask_register_specifier;
3256 int zeroing;
3257 int ll;
3258 int b;
c0f3af97
L
3259 }
3260vex;
3261static unsigned char need_vex;
3262static unsigned char need_vex_reg;
dae39acc 3263static unsigned char vex_w_done;
252b5132 3264
ea397f5b
L
3265struct op
3266 {
3267 const char *name;
3268 unsigned int len;
3269 };
3270
4bba6815
AM
3271/* If we are accessing mod/rm/reg without need_modrm set, then the
3272 values are stale. Hitting this abort likely indicates that you
3273 need to update onebyte_has_modrm or twobyte_has_modrm. */
3274#define MODRM_CHECK if (!need_modrm) abort ()
3275
d708bcba
AM
3276static const char **names64;
3277static const char **names32;
3278static const char **names16;
3279static const char **names8;
3280static const char **names8rex;
3281static const char **names_seg;
db51cc60
L
3282static const char *index64;
3283static const char *index32;
d708bcba 3284static const char **index16;
7e8b059b 3285static const char **names_bnd;
d708bcba
AM
3286
3287static const char *intel_names64[] = {
3288 "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
3289 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
3290};
3291static const char *intel_names32[] = {
3292 "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
3293 "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"
3294};
3295static const char *intel_names16[] = {
3296 "ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
3297 "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
3298};
3299static const char *intel_names8[] = {
3300 "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh",
3301};
3302static const char *intel_names8rex[] = {
3303 "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
3304 "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"
3305};
3306static const char *intel_names_seg[] = {
3307 "es", "cs", "ss", "ds", "fs", "gs", "?", "?",
3308};
db51cc60
L
3309static const char *intel_index64 = "riz";
3310static const char *intel_index32 = "eiz";
d708bcba
AM
3311static const char *intel_index16[] = {
3312 "bx+si", "bx+di", "bp+si", "bp+di", "si", "di", "bp", "bx"
3313};
3314
3315static const char *att_names64[] = {
3316 "%rax", "%rcx", "%rdx", "%rbx", "%rsp", "%rbp", "%rsi", "%rdi",
52b15da3
JH
3317 "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
3318};
d708bcba
AM
3319static const char *att_names32[] = {
3320 "%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi",
52b15da3 3321 "%r8d", "%r9d", "%r10d", "%r11d", "%r12d", "%r13d", "%r14d", "%r15d"
252b5132 3322};
d708bcba
AM
3323static const char *att_names16[] = {
3324 "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di",
52b15da3 3325 "%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w"
252b5132 3326};
d708bcba
AM
3327static const char *att_names8[] = {
3328 "%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh",
252b5132 3329};
d708bcba
AM
3330static const char *att_names8rex[] = {
3331 "%al", "%cl", "%dl", "%bl", "%spl", "%bpl", "%sil", "%dil",
52b15da3
JH
3332 "%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b"
3333};
d708bcba
AM
3334static const char *att_names_seg[] = {
3335 "%es", "%cs", "%ss", "%ds", "%fs", "%gs", "%?", "%?",
252b5132 3336};
db51cc60
L
3337static const char *att_index64 = "%riz";
3338static const char *att_index32 = "%eiz";
d708bcba
AM
3339static const char *att_index16[] = {
3340 "%bx,%si", "%bx,%di", "%bp,%si", "%bp,%di", "%si", "%di", "%bp", "%bx"
252b5132
RH
3341};
3342
b9733481
L
3343static const char **names_mm;
3344static const char *intel_names_mm[] = {
3345 "mm0", "mm1", "mm2", "mm3",
3346 "mm4", "mm5", "mm6", "mm7"
3347};
3348static const char *att_names_mm[] = {
3349 "%mm0", "%mm1", "%mm2", "%mm3",
3350 "%mm4", "%mm5", "%mm6", "%mm7"
3351};
3352
7e8b059b
L
3353static const char *intel_names_bnd[] = {
3354 "bnd0", "bnd1", "bnd2", "bnd3"
3355};
3356
3357static const char *att_names_bnd[] = {
3358 "%bnd0", "%bnd1", "%bnd2", "%bnd3"
3359};
3360
b9733481
L
3361static const char **names_xmm;
3362static const char *intel_names_xmm[] = {
3363 "xmm0", "xmm1", "xmm2", "xmm3",
3364 "xmm4", "xmm5", "xmm6", "xmm7",
3365 "xmm8", "xmm9", "xmm10", "xmm11",
43234a1e
L
3366 "xmm12", "xmm13", "xmm14", "xmm15",
3367 "xmm16", "xmm17", "xmm18", "xmm19",
3368 "xmm20", "xmm21", "xmm22", "xmm23",
3369 "xmm24", "xmm25", "xmm26", "xmm27",
3370 "xmm28", "xmm29", "xmm30", "xmm31"
b9733481
L
3371};
3372static const char *att_names_xmm[] = {
3373 "%xmm0", "%xmm1", "%xmm2", "%xmm3",
3374 "%xmm4", "%xmm5", "%xmm6", "%xmm7",
3375 "%xmm8", "%xmm9", "%xmm10", "%xmm11",
43234a1e
L
3376 "%xmm12", "%xmm13", "%xmm14", "%xmm15",
3377 "%xmm16", "%xmm17", "%xmm18", "%xmm19",
3378 "%xmm20", "%xmm21", "%xmm22", "%xmm23",
3379 "%xmm24", "%xmm25", "%xmm26", "%xmm27",
3380 "%xmm28", "%xmm29", "%xmm30", "%xmm31"
b9733481
L
3381};
3382
3383static const char **names_ymm;
3384static const char *intel_names_ymm[] = {
3385 "ymm0", "ymm1", "ymm2", "ymm3",
3386 "ymm4", "ymm5", "ymm6", "ymm7",
3387 "ymm8", "ymm9", "ymm10", "ymm11",
43234a1e
L
3388 "ymm12", "ymm13", "ymm14", "ymm15",
3389 "ymm16", "ymm17", "ymm18", "ymm19",
3390 "ymm20", "ymm21", "ymm22", "ymm23",
3391 "ymm24", "ymm25", "ymm26", "ymm27",
3392 "ymm28", "ymm29", "ymm30", "ymm31"
b9733481
L
3393};
3394static const char *att_names_ymm[] = {
3395 "%ymm0", "%ymm1", "%ymm2", "%ymm3",
3396 "%ymm4", "%ymm5", "%ymm6", "%ymm7",
3397 "%ymm8", "%ymm9", "%ymm10", "%ymm11",
43234a1e
L
3398 "%ymm12", "%ymm13", "%ymm14", "%ymm15",
3399 "%ymm16", "%ymm17", "%ymm18", "%ymm19",
3400 "%ymm20", "%ymm21", "%ymm22", "%ymm23",
3401 "%ymm24", "%ymm25", "%ymm26", "%ymm27",
3402 "%ymm28", "%ymm29", "%ymm30", "%ymm31"
3403};
3404
3405static const char **names_zmm;
3406static const char *intel_names_zmm[] = {
3407 "zmm0", "zmm1", "zmm2", "zmm3",
3408 "zmm4", "zmm5", "zmm6", "zmm7",
3409 "zmm8", "zmm9", "zmm10", "zmm11",
3410 "zmm12", "zmm13", "zmm14", "zmm15",
3411 "zmm16", "zmm17", "zmm18", "zmm19",
3412 "zmm20", "zmm21", "zmm22", "zmm23",
3413 "zmm24", "zmm25", "zmm26", "zmm27",
3414 "zmm28", "zmm29", "zmm30", "zmm31"
3415};
3416static const char *att_names_zmm[] = {
3417 "%zmm0", "%zmm1", "%zmm2", "%zmm3",
3418 "%zmm4", "%zmm5", "%zmm6", "%zmm7",
3419 "%zmm8", "%zmm9", "%zmm10", "%zmm11",
3420 "%zmm12", "%zmm13", "%zmm14", "%zmm15",
3421 "%zmm16", "%zmm17", "%zmm18", "%zmm19",
3422 "%zmm20", "%zmm21", "%zmm22", "%zmm23",
3423 "%zmm24", "%zmm25", "%zmm26", "%zmm27",
3424 "%zmm28", "%zmm29", "%zmm30", "%zmm31"
3425};
3426
3427static const char **names_mask;
3428static const char *intel_names_mask[] = {
3429 "k0", "k1", "k2", "k3", "k4", "k5", "k6", "k7"
3430};
3431static const char *att_names_mask[] = {
3432 "%k0", "%k1", "%k2", "%k3", "%k4", "%k5", "%k6", "%k7"
3433};
3434
3435static const char *names_rounding[] =
3436{
3437 "{rn-sae}",
3438 "{rd-sae}",
3439 "{ru-sae}",
3440 "{rz-sae}"
b9733481
L
3441};
3442
1ceb70f8
L
3443static const struct dis386 reg_table[][8] = {
3444 /* REG_80 */
252b5132 3445 {
bf890a93
IT
3446 { "addA", { Ebh1, Ib }, 0 },
3447 { "orA", { Ebh1, Ib }, 0 },
3448 { "adcA", { Ebh1, Ib }, 0 },
3449 { "sbbA", { Ebh1, Ib }, 0 },
3450 { "andA", { Ebh1, Ib }, 0 },
3451 { "subA", { Ebh1, Ib }, 0 },
3452 { "xorA", { Ebh1, Ib }, 0 },
3453 { "cmpA", { Eb, Ib }, 0 },
252b5132 3454 },
1ceb70f8 3455 /* REG_81 */
252b5132 3456 {
bf890a93
IT
3457 { "addQ", { Evh1, Iv }, 0 },
3458 { "orQ", { Evh1, Iv }, 0 },
3459 { "adcQ", { Evh1, Iv }, 0 },
3460 { "sbbQ", { Evh1, Iv }, 0 },
3461 { "andQ", { Evh1, Iv }, 0 },
3462 { "subQ", { Evh1, Iv }, 0 },
3463 { "xorQ", { Evh1, Iv }, 0 },
3464 { "cmpQ", { Ev, Iv }, 0 },
252b5132 3465 },
7148c369 3466 /* REG_83 */
252b5132 3467 {
bf890a93
IT
3468 { "addQ", { Evh1, sIb }, 0 },
3469 { "orQ", { Evh1, sIb }, 0 },
3470 { "adcQ", { Evh1, sIb }, 0 },
3471 { "sbbQ", { Evh1, sIb }, 0 },
3472 { "andQ", { Evh1, sIb }, 0 },
3473 { "subQ", { Evh1, sIb }, 0 },
3474 { "xorQ", { Evh1, sIb }, 0 },
3475 { "cmpQ", { Ev, sIb }, 0 },
252b5132 3476 },
1ceb70f8 3477 /* REG_8F */
4e7d34a6 3478 {
bf890a93 3479 { "popU", { stackEv }, 0 },
c48244a5 3480 { XOP_8F_TABLE (XOP_09) },
592d1631
L
3481 { Bad_Opcode },
3482 { Bad_Opcode },
3483 { Bad_Opcode },
f88c9eb0 3484 { XOP_8F_TABLE (XOP_09) },
4e7d34a6 3485 },
1ceb70f8 3486 /* REG_C0 */
252b5132 3487 {
bf890a93
IT
3488 { "rolA", { Eb, Ib }, 0 },
3489 { "rorA", { Eb, Ib }, 0 },
3490 { "rclA", { Eb, Ib }, 0 },
3491 { "rcrA", { Eb, Ib }, 0 },
3492 { "shlA", { Eb, Ib }, 0 },
3493 { "shrA", { Eb, Ib }, 0 },
e4bdd679 3494 { "shlA", { Eb, Ib }, 0 },
bf890a93 3495 { "sarA", { Eb, Ib }, 0 },
252b5132 3496 },
1ceb70f8 3497 /* REG_C1 */
252b5132 3498 {
bf890a93
IT
3499 { "rolQ", { Ev, Ib }, 0 },
3500 { "rorQ", { Ev, Ib }, 0 },
3501 { "rclQ", { Ev, Ib }, 0 },
3502 { "rcrQ", { Ev, Ib }, 0 },
3503 { "shlQ", { Ev, Ib }, 0 },
3504 { "shrQ", { Ev, Ib }, 0 },
e4bdd679 3505 { "shlQ", { Ev, Ib }, 0 },
bf890a93 3506 { "sarQ", { Ev, Ib }, 0 },
252b5132 3507 },
1ceb70f8 3508 /* REG_C6 */
4e7d34a6 3509 {
bf890a93 3510 { "movA", { Ebh3, Ib }, 0 },
42164a71
L
3511 { Bad_Opcode },
3512 { Bad_Opcode },
3513 { Bad_Opcode },
3514 { Bad_Opcode },
3515 { Bad_Opcode },
3516 { Bad_Opcode },
3517 { MOD_TABLE (MOD_C6_REG_7) },
4e7d34a6 3518 },
1ceb70f8 3519 /* REG_C7 */
4e7d34a6 3520 {
bf890a93 3521 { "movQ", { Evh3, Iv }, 0 },
42164a71
L
3522 { Bad_Opcode },
3523 { Bad_Opcode },
3524 { Bad_Opcode },
3525 { Bad_Opcode },
3526 { Bad_Opcode },
3527 { Bad_Opcode },
3528 { MOD_TABLE (MOD_C7_REG_7) },
4e7d34a6 3529 },
1ceb70f8 3530 /* REG_D0 */
252b5132 3531 {
bf890a93
IT
3532 { "rolA", { Eb, I1 }, 0 },
3533 { "rorA", { Eb, I1 }, 0 },
3534 { "rclA", { Eb, I1 }, 0 },
3535 { "rcrA", { Eb, I1 }, 0 },
3536 { "shlA", { Eb, I1 }, 0 },
3537 { "shrA", { Eb, I1 }, 0 },
e4bdd679 3538 { "shlA", { Eb, I1 }, 0 },
bf890a93 3539 { "sarA", { Eb, I1 }, 0 },
252b5132 3540 },
1ceb70f8 3541 /* REG_D1 */
252b5132 3542 {
bf890a93
IT
3543 { "rolQ", { Ev, I1 }, 0 },
3544 { "rorQ", { Ev, I1 }, 0 },
3545 { "rclQ", { Ev, I1 }, 0 },
3546 { "rcrQ", { Ev, I1 }, 0 },
3547 { "shlQ", { Ev, I1 }, 0 },
3548 { "shrQ", { Ev, I1 }, 0 },
e4bdd679 3549 { "shlQ", { Ev, I1 }, 0 },
bf890a93 3550 { "sarQ", { Ev, I1 }, 0 },
252b5132 3551 },
1ceb70f8 3552 /* REG_D2 */
252b5132 3553 {
bf890a93
IT
3554 { "rolA", { Eb, CL }, 0 },
3555 { "rorA", { Eb, CL }, 0 },
3556 { "rclA", { Eb, CL }, 0 },
3557 { "rcrA", { Eb, CL }, 0 },
3558 { "shlA", { Eb, CL }, 0 },
3559 { "shrA", { Eb, CL }, 0 },
e4bdd679 3560 { "shlA", { Eb, CL }, 0 },
bf890a93 3561 { "sarA", { Eb, CL }, 0 },
252b5132 3562 },
1ceb70f8 3563 /* REG_D3 */
252b5132 3564 {
bf890a93
IT
3565 { "rolQ", { Ev, CL }, 0 },
3566 { "rorQ", { Ev, CL }, 0 },
3567 { "rclQ", { Ev, CL }, 0 },
3568 { "rcrQ", { Ev, CL }, 0 },
3569 { "shlQ", { Ev, CL }, 0 },
3570 { "shrQ", { Ev, CL }, 0 },
e4bdd679 3571 { "shlQ", { Ev, CL }, 0 },
bf890a93 3572 { "sarQ", { Ev, CL }, 0 },
252b5132 3573 },
1ceb70f8 3574 /* REG_F6 */
252b5132 3575 {
bf890a93 3576 { "testA", { Eb, Ib }, 0 },
7db2c588 3577 { "testA", { Eb, Ib }, 0 },
bf890a93
IT
3578 { "notA", { Ebh1 }, 0 },
3579 { "negA", { Ebh1 }, 0 },
3580 { "mulA", { Eb }, 0 }, /* Don't print the implicit %al register, */
3581 { "imulA", { Eb }, 0 }, /* to distinguish these opcodes from other */
3582 { "divA", { Eb }, 0 }, /* mul/imul opcodes. Do the same for div */
3583 { "idivA", { Eb }, 0 }, /* and idiv for consistency. */
252b5132 3584 },
1ceb70f8 3585 /* REG_F7 */
252b5132 3586 {
bf890a93 3587 { "testQ", { Ev, Iv }, 0 },
7db2c588 3588 { "testQ", { Ev, Iv }, 0 },
bf890a93
IT
3589 { "notQ", { Evh1 }, 0 },
3590 { "negQ", { Evh1 }, 0 },
3591 { "mulQ", { Ev }, 0 }, /* Don't print the implicit register. */
3592 { "imulQ", { Ev }, 0 },
3593 { "divQ", { Ev }, 0 },
3594 { "idivQ", { Ev }, 0 },
252b5132 3595 },
1ceb70f8 3596 /* REG_FE */
252b5132 3597 {
bf890a93
IT
3598 { "incA", { Ebh1 }, 0 },
3599 { "decA", { Ebh1 }, 0 },
252b5132 3600 },
1ceb70f8 3601 /* REG_FF */
252b5132 3602 {
bf890a93
IT
3603 { "incQ", { Evh1 }, 0 },
3604 { "decQ", { Evh1 }, 0 },
9fef80d6 3605 { "call{&|}", { NOTRACK, indirEv, BND }, 0 },
4a357820 3606 { MOD_TABLE (MOD_FF_REG_3) },
9fef80d6 3607 { "jmp{&|}", { NOTRACK, indirEv, BND }, 0 },
4a357820 3608 { MOD_TABLE (MOD_FF_REG_5) },
bf890a93 3609 { "pushU", { stackEv }, 0 },
592d1631 3610 { Bad_Opcode },
252b5132 3611 },
1ceb70f8 3612 /* REG_0F00 */
252b5132 3613 {
bf890a93
IT
3614 { "sldtD", { Sv }, 0 },
3615 { "strD", { Sv }, 0 },
3616 { "lldt", { Ew }, 0 },
3617 { "ltr", { Ew }, 0 },
3618 { "verr", { Ew }, 0 },
3619 { "verw", { Ew }, 0 },
592d1631
L
3620 { Bad_Opcode },
3621 { Bad_Opcode },
252b5132 3622 },
1ceb70f8 3623 /* REG_0F01 */
252b5132 3624 {
1ceb70f8
L
3625 { MOD_TABLE (MOD_0F01_REG_0) },
3626 { MOD_TABLE (MOD_0F01_REG_1) },
3627 { MOD_TABLE (MOD_0F01_REG_2) },
3628 { MOD_TABLE (MOD_0F01_REG_3) },
bf890a93 3629 { "smswD", { Sv }, 0 },
8eab4136 3630 { MOD_TABLE (MOD_0F01_REG_5) },
bf890a93 3631 { "lmsw", { Ew }, 0 },
1ceb70f8 3632 { MOD_TABLE (MOD_0F01_REG_7) },
252b5132 3633 },
b5b1fc4f 3634 /* REG_0F0D */
252b5132 3635 {
bf890a93
IT
3636 { "prefetch", { Mb }, 0 },
3637 { "prefetchw", { Mb }, 0 },
3638 { "prefetchwt1", { Mb }, 0 },
3639 { "prefetch", { Mb }, 0 },
3640 { "prefetch", { Mb }, 0 },
3641 { "prefetch", { Mb }, 0 },
3642 { "prefetch", { Mb }, 0 },
3643 { "prefetch", { Mb }, 0 },
252b5132 3644 },
1ceb70f8 3645 /* REG_0F18 */
252b5132 3646 {
1ceb70f8
L
3647 { MOD_TABLE (MOD_0F18_REG_0) },
3648 { MOD_TABLE (MOD_0F18_REG_1) },
3649 { MOD_TABLE (MOD_0F18_REG_2) },
3650 { MOD_TABLE (MOD_0F18_REG_3) },
d7189fa5
RM
3651 { MOD_TABLE (MOD_0F18_REG_4) },
3652 { MOD_TABLE (MOD_0F18_REG_5) },
3653 { MOD_TABLE (MOD_0F18_REG_6) },
3654 { MOD_TABLE (MOD_0F18_REG_7) },
252b5132 3655 },
c48935d7
IT
3656 /* REG_0F1C_MOD_0 */
3657 {
3658 { "cldemote", { Mb }, 0 },
3659 { "nopQ", { Ev }, 0 },
3660 { "nopQ", { Ev }, 0 },
3661 { "nopQ", { Ev }, 0 },
3662 { "nopQ", { Ev }, 0 },
3663 { "nopQ", { Ev }, 0 },
3664 { "nopQ", { Ev }, 0 },
3665 { "nopQ", { Ev }, 0 },
3666 },
603555e5
L
3667 /* REG_0F1E_MOD_3 */
3668 {
3669 { "nopQ", { Ev }, 0 },
3670 { "rdsspK", { Rdq }, PREFIX_OPCODE },
3671 { "nopQ", { Ev }, 0 },
3672 { "nopQ", { Ev }, 0 },
3673 { "nopQ", { Ev }, 0 },
3674 { "nopQ", { Ev }, 0 },
3675 { "nopQ", { Ev }, 0 },
3676 { RM_TABLE (RM_0F1E_MOD_3_REG_7) },
3677 },
1ceb70f8 3678 /* REG_0F71 */
a6bd098c 3679 {
592d1631
L
3680 { Bad_Opcode },
3681 { Bad_Opcode },
1ceb70f8 3682 { MOD_TABLE (MOD_0F71_REG_2) },
592d1631 3683 { Bad_Opcode },
1ceb70f8 3684 { MOD_TABLE (MOD_0F71_REG_4) },
592d1631 3685 { Bad_Opcode },
1ceb70f8 3686 { MOD_TABLE (MOD_0F71_REG_6) },
a6bd098c 3687 },
1ceb70f8 3688 /* REG_0F72 */
a6bd098c 3689 {
592d1631
L
3690 { Bad_Opcode },
3691 { Bad_Opcode },
1ceb70f8 3692 { MOD_TABLE (MOD_0F72_REG_2) },
592d1631 3693 { Bad_Opcode },
1ceb70f8 3694 { MOD_TABLE (MOD_0F72_REG_4) },
592d1631 3695 { Bad_Opcode },
1ceb70f8 3696 { MOD_TABLE (MOD_0F72_REG_6) },
a6bd098c 3697 },
1ceb70f8 3698 /* REG_0F73 */
252b5132 3699 {
592d1631
L
3700 { Bad_Opcode },
3701 { Bad_Opcode },
1ceb70f8
L
3702 { MOD_TABLE (MOD_0F73_REG_2) },
3703 { MOD_TABLE (MOD_0F73_REG_3) },
592d1631
L
3704 { Bad_Opcode },
3705 { Bad_Opcode },
1ceb70f8
L
3706 { MOD_TABLE (MOD_0F73_REG_6) },
3707 { MOD_TABLE (MOD_0F73_REG_7) },
252b5132 3708 },
1ceb70f8 3709 /* REG_0FA6 */
252b5132 3710 {
bf890a93
IT
3711 { "montmul", { { OP_0f07, 0 } }, 0 },
3712 { "xsha1", { { OP_0f07, 0 } }, 0 },
3713 { "xsha256", { { OP_0f07, 0 } }, 0 },
4e7d34a6 3714 },
1ceb70f8 3715 /* REG_0FA7 */
4e7d34a6 3716 {
bf890a93
IT
3717 { "xstore-rng", { { OP_0f07, 0 } }, 0 },
3718 { "xcrypt-ecb", { { OP_0f07, 0 } }, 0 },
3719 { "xcrypt-cbc", { { OP_0f07, 0 } }, 0 },
3720 { "xcrypt-ctr", { { OP_0f07, 0 } }, 0 },
3721 { "xcrypt-cfb", { { OP_0f07, 0 } }, 0 },
3722 { "xcrypt-ofb", { { OP_0f07, 0 } }, 0 },
4e7d34a6 3723 },
1ceb70f8 3724 /* REG_0FAE */
4e7d34a6 3725 {
1ceb70f8
L
3726 { MOD_TABLE (MOD_0FAE_REG_0) },
3727 { MOD_TABLE (MOD_0FAE_REG_1) },
3728 { MOD_TABLE (MOD_0FAE_REG_2) },
3729 { MOD_TABLE (MOD_0FAE_REG_3) },
475a2301 3730 { MOD_TABLE (MOD_0FAE_REG_4) },
1ceb70f8
L
3731 { MOD_TABLE (MOD_0FAE_REG_5) },
3732 { MOD_TABLE (MOD_0FAE_REG_6) },
3733 { MOD_TABLE (MOD_0FAE_REG_7) },
252b5132 3734 },
1ceb70f8 3735 /* REG_0FBA */
252b5132 3736 {
592d1631
L
3737 { Bad_Opcode },
3738 { Bad_Opcode },
3739 { Bad_Opcode },
3740 { Bad_Opcode },
bf890a93
IT
3741 { "btQ", { Ev, Ib }, 0 },
3742 { "btsQ", { Evh1, Ib }, 0 },
3743 { "btrQ", { Evh1, Ib }, 0 },
3744 { "btcQ", { Evh1, Ib }, 0 },
c608c12e 3745 },
1ceb70f8 3746 /* REG_0FC7 */
c608c12e 3747 {
592d1631 3748 { Bad_Opcode },
bf890a93 3749 { "cmpxchg8b", { { CMPXCHG8B_Fixup, q_mode } }, 0 },
592d1631 3750 { Bad_Opcode },
963f3586
IT
3751 { MOD_TABLE (MOD_0FC7_REG_3) },
3752 { MOD_TABLE (MOD_0FC7_REG_4) },
3753 { MOD_TABLE (MOD_0FC7_REG_5) },
1ceb70f8
L
3754 { MOD_TABLE (MOD_0FC7_REG_6) },
3755 { MOD_TABLE (MOD_0FC7_REG_7) },
252b5132 3756 },
592a252b 3757 /* REG_VEX_0F71 */
c0f3af97 3758 {
592d1631
L
3759 { Bad_Opcode },
3760 { Bad_Opcode },
592a252b 3761 { MOD_TABLE (MOD_VEX_0F71_REG_2) },
592d1631 3762 { Bad_Opcode },
592a252b 3763 { MOD_TABLE (MOD_VEX_0F71_REG_4) },
592d1631 3764 { Bad_Opcode },
592a252b 3765 { MOD_TABLE (MOD_VEX_0F71_REG_6) },
c0f3af97 3766 },
592a252b 3767 /* REG_VEX_0F72 */
c0f3af97 3768 {
592d1631
L
3769 { Bad_Opcode },
3770 { Bad_Opcode },
592a252b 3771 { MOD_TABLE (MOD_VEX_0F72_REG_2) },
592d1631 3772 { Bad_Opcode },
592a252b 3773 { MOD_TABLE (MOD_VEX_0F72_REG_4) },
592d1631 3774 { Bad_Opcode },
592a252b 3775 { MOD_TABLE (MOD_VEX_0F72_REG_6) },
c0f3af97 3776 },
592a252b 3777 /* REG_VEX_0F73 */
c0f3af97 3778 {
592d1631
L
3779 { Bad_Opcode },
3780 { Bad_Opcode },
592a252b
L
3781 { MOD_TABLE (MOD_VEX_0F73_REG_2) },
3782 { MOD_TABLE (MOD_VEX_0F73_REG_3) },
592d1631
L
3783 { Bad_Opcode },
3784 { Bad_Opcode },
592a252b
L
3785 { MOD_TABLE (MOD_VEX_0F73_REG_6) },
3786 { MOD_TABLE (MOD_VEX_0F73_REG_7) },
c0f3af97 3787 },
592a252b 3788 /* REG_VEX_0FAE */
c0f3af97 3789 {
592d1631
L
3790 { Bad_Opcode },
3791 { Bad_Opcode },
592a252b
L
3792 { MOD_TABLE (MOD_VEX_0FAE_REG_2) },
3793 { MOD_TABLE (MOD_VEX_0FAE_REG_3) },
c0f3af97 3794 },
f12dc422
L
3795 /* REG_VEX_0F38F3 */
3796 {
3797 { Bad_Opcode },
3798 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_1) },
3799 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_2) },
3800 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_3) },
3801 },
f88c9eb0
SP
3802 /* REG_XOP_LWPCB */
3803 {
bf890a93
IT
3804 { "llwpcb", { { OP_LWPCB_E, 0 } }, 0 },
3805 { "slwpcb", { { OP_LWPCB_E, 0 } }, 0 },
f88c9eb0
SP
3806 },
3807 /* REG_XOP_LWP */
3808 {
bf890a93
IT
3809 { "lwpins", { { OP_LWP_E, 0 }, Ed, Iq }, 0 },
3810 { "lwpval", { { OP_LWP_E, 0 }, Ed, Iq }, 0 },
f88c9eb0 3811 },
2a2a0f38
QN
3812 /* REG_XOP_TBM_01 */
3813 {
3814 { Bad_Opcode },
bf890a93
IT
3815 { "blcfill", { { OP_LWP_E, 0 }, Ev }, 0 },
3816 { "blsfill", { { OP_LWP_E, 0 }, Ev }, 0 },
3817 { "blcs", { { OP_LWP_E, 0 }, Ev }, 0 },
3818 { "tzmsk", { { OP_LWP_E, 0 }, Ev }, 0 },
3819 { "blcic", { { OP_LWP_E, 0 }, Ev }, 0 },
3820 { "blsic", { { OP_LWP_E, 0 }, Ev }, 0 },
3821 { "t1mskc", { { OP_LWP_E, 0 }, Ev }, 0 },
2a2a0f38
QN
3822 },
3823 /* REG_XOP_TBM_02 */
3824 {
3825 { Bad_Opcode },
bf890a93 3826 { "blcmsk", { { OP_LWP_E, 0 }, Ev }, 0 },
2a2a0f38
QN
3827 { Bad_Opcode },
3828 { Bad_Opcode },
3829 { Bad_Opcode },
3830 { Bad_Opcode },
bf890a93 3831 { "blci", { { OP_LWP_E, 0 }, Ev }, 0 },
2a2a0f38 3832 },
43234a1e
L
3833#define NEED_REG_TABLE
3834#include "i386-dis-evex.h"
3835#undef NEED_REG_TABLE
4e7d34a6
L
3836};
3837
1ceb70f8
L
3838static const struct dis386 prefix_table[][4] = {
3839 /* PREFIX_90 */
252b5132 3840 {
bf890a93
IT
3841 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } }, 0 },
3842 { "pause", { XX }, 0 },
3843 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } }, 0 },
507bd325 3844 { NULL, { { NULL, 0 } }, PREFIX_IGNORED }
0f10071e 3845 },
4e7d34a6 3846
603555e5
L
3847 /* PREFIX_MOD_0_0F01_REG_5 */
3848 {
3849 { Bad_Opcode },
3850 { "rstorssp", { Mq }, PREFIX_OPCODE },
3851 },
3852
2234eee6 3853 /* PREFIX_MOD_3_0F01_REG_5_RM_0 */
603555e5
L
3854 {
3855 { Bad_Opcode },
2234eee6 3856 { "setssbsy", { Skip_MODRM }, PREFIX_OPCODE },
603555e5
L
3857 },
3858
3859 /* PREFIX_MOD_3_0F01_REG_5_RM_2 */
3860 {
3861 { Bad_Opcode },
c2f76402 3862 { "saveprevssp", { Skip_MODRM }, PREFIX_OPCODE },
603555e5
L
3863 },
3864
3233d7d0
IT
3865 /* PREFIX_0F09 */
3866 {
3867 { "wbinvd", { XX }, 0 },
3868 { "wbnoinvd", { XX }, 0 },
3869 },
3870
1ceb70f8 3871 /* PREFIX_0F10 */
cc0ec051 3872 {
507bd325
L
3873 { "movups", { XM, EXx }, PREFIX_OPCODE },
3874 { "movss", { XM, EXd }, PREFIX_OPCODE },
3875 { "movupd", { XM, EXx }, PREFIX_OPCODE },
3876 { "movsd", { XM, EXq }, PREFIX_OPCODE },
30d1c836 3877 },
4e7d34a6 3878
1ceb70f8 3879 /* PREFIX_0F11 */
30d1c836 3880 {
507bd325
L
3881 { "movups", { EXxS, XM }, PREFIX_OPCODE },
3882 { "movss", { EXdS, XM }, PREFIX_OPCODE },
3883 { "movupd", { EXxS, XM }, PREFIX_OPCODE },
3884 { "movsd", { EXqS, XM }, PREFIX_OPCODE },
4e7d34a6 3885 },
252b5132 3886
1ceb70f8 3887 /* PREFIX_0F12 */
c608c12e 3888 {
1ceb70f8 3889 { MOD_TABLE (MOD_0F12_PREFIX_0) },
507bd325
L
3890 { "movsldup", { XM, EXx }, PREFIX_OPCODE },
3891 { "movlpd", { XM, EXq }, PREFIX_OPCODE },
3892 { "movddup", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3893 },
4e7d34a6 3894
1ceb70f8 3895 /* PREFIX_0F16 */
c608c12e 3896 {
1ceb70f8 3897 { MOD_TABLE (MOD_0F16_PREFIX_0) },
507bd325
L
3898 { "movshdup", { XM, EXx }, PREFIX_OPCODE },
3899 { "movhpd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3900 },
4e7d34a6 3901
7e8b059b
L
3902 /* PREFIX_0F1A */
3903 {
3904 { MOD_TABLE (MOD_0F1A_PREFIX_0) },
bf890a93
IT
3905 { "bndcl", { Gbnd, Ev_bnd }, 0 },
3906 { "bndmov", { Gbnd, Ebnd }, 0 },
3907 { "bndcu", { Gbnd, Ev_bnd }, 0 },
7e8b059b
L
3908 },
3909
3910 /* PREFIX_0F1B */
3911 {
3912 { MOD_TABLE (MOD_0F1B_PREFIX_0) },
3913 { MOD_TABLE (MOD_0F1B_PREFIX_1) },
9f79e886 3914 { "bndmov", { EbndS, Gbnd }, 0 },
bf890a93 3915 { "bndcn", { Gbnd, Ev_bnd }, 0 },
7e8b059b
L
3916 },
3917
c48935d7
IT
3918 /* PREFIX_0F1C */
3919 {
3920 { MOD_TABLE (MOD_0F1C_PREFIX_0) },
3921 { "nopQ", { Ev }, PREFIX_OPCODE },
3922 { "nopQ", { Ev }, PREFIX_OPCODE },
3923 { "nopQ", { Ev }, PREFIX_OPCODE },
3924 },
3925
603555e5
L
3926 /* PREFIX_0F1E */
3927 {
3928 { "nopQ", { Ev }, PREFIX_OPCODE },
3929 { MOD_TABLE (MOD_0F1E_PREFIX_1) },
3930 { "nopQ", { Ev }, PREFIX_OPCODE },
3931 { "nopQ", { Ev }, PREFIX_OPCODE },
3932 },
3933
1ceb70f8 3934 /* PREFIX_0F2A */
c608c12e 3935 {
507bd325
L
3936 { "cvtpi2ps", { XM, EMCq }, PREFIX_OPCODE },
3937 { "cvtsi2ss%LQ", { XM, Ev }, PREFIX_OPCODE },
3938 { "cvtpi2pd", { XM, EMCq }, PREFIX_OPCODE },
bf890a93 3939 { "cvtsi2sd%LQ", { XM, Ev }, 0 },
c608c12e 3940 },
4e7d34a6 3941
1ceb70f8 3942 /* PREFIX_0F2B */
c608c12e 3943 {
75c135a8
L
3944 { MOD_TABLE (MOD_0F2B_PREFIX_0) },
3945 { MOD_TABLE (MOD_0F2B_PREFIX_1) },
3946 { MOD_TABLE (MOD_0F2B_PREFIX_2) },
3947 { MOD_TABLE (MOD_0F2B_PREFIX_3) },
c608c12e 3948 },
4e7d34a6 3949
1ceb70f8 3950 /* PREFIX_0F2C */
c608c12e 3951 {
507bd325 3952 { "cvttps2pi", { MXC, EXq }, PREFIX_OPCODE },
9646c87b 3953 { "cvttss2si", { Gv, EXd }, PREFIX_OPCODE },
507bd325 3954 { "cvttpd2pi", { MXC, EXx }, PREFIX_OPCODE },
9646c87b 3955 { "cvttsd2si", { Gv, EXq }, PREFIX_OPCODE },
c608c12e 3956 },
4e7d34a6 3957
1ceb70f8 3958 /* PREFIX_0F2D */
c608c12e 3959 {
507bd325 3960 { "cvtps2pi", { MXC, EXq }, PREFIX_OPCODE },
9646c87b 3961 { "cvtss2si", { Gv, EXd }, PREFIX_OPCODE },
507bd325 3962 { "cvtpd2pi", { MXC, EXx }, PREFIX_OPCODE },
9646c87b 3963 { "cvtsd2si", { Gv, EXq }, PREFIX_OPCODE },
c608c12e 3964 },
4e7d34a6 3965
1ceb70f8 3966 /* PREFIX_0F2E */
c608c12e 3967 {
bf890a93 3968 { "ucomiss",{ XM, EXd }, 0 },
592d1631 3969 { Bad_Opcode },
bf890a93 3970 { "ucomisd",{ XM, EXq }, 0 },
c608c12e 3971 },
4e7d34a6 3972
1ceb70f8 3973 /* PREFIX_0F2F */
c608c12e 3974 {
bf890a93 3975 { "comiss", { XM, EXd }, 0 },
592d1631 3976 { Bad_Opcode },
bf890a93 3977 { "comisd", { XM, EXq }, 0 },
c608c12e 3978 },
4e7d34a6 3979
1ceb70f8 3980 /* PREFIX_0F51 */
c608c12e 3981 {
507bd325
L
3982 { "sqrtps", { XM, EXx }, PREFIX_OPCODE },
3983 { "sqrtss", { XM, EXd }, PREFIX_OPCODE },
3984 { "sqrtpd", { XM, EXx }, PREFIX_OPCODE },
3985 { "sqrtsd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3986 },
4e7d34a6 3987
1ceb70f8 3988 /* PREFIX_0F52 */
c608c12e 3989 {
507bd325
L
3990 { "rsqrtps",{ XM, EXx }, PREFIX_OPCODE },
3991 { "rsqrtss",{ XM, EXd }, PREFIX_OPCODE },
c608c12e 3992 },
4e7d34a6 3993
1ceb70f8 3994 /* PREFIX_0F53 */
c608c12e 3995 {
507bd325
L
3996 { "rcpps", { XM, EXx }, PREFIX_OPCODE },
3997 { "rcpss", { XM, EXd }, PREFIX_OPCODE },
c608c12e 3998 },
4e7d34a6 3999
1ceb70f8 4000 /* PREFIX_0F58 */
c608c12e 4001 {
507bd325
L
4002 { "addps", { XM, EXx }, PREFIX_OPCODE },
4003 { "addss", { XM, EXd }, PREFIX_OPCODE },
4004 { "addpd", { XM, EXx }, PREFIX_OPCODE },
4005 { "addsd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 4006 },
4e7d34a6 4007
1ceb70f8 4008 /* PREFIX_0F59 */
c608c12e 4009 {
507bd325
L
4010 { "mulps", { XM, EXx }, PREFIX_OPCODE },
4011 { "mulss", { XM, EXd }, PREFIX_OPCODE },
4012 { "mulpd", { XM, EXx }, PREFIX_OPCODE },
4013 { "mulsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 4014 },
4e7d34a6 4015
1ceb70f8 4016 /* PREFIX_0F5A */
041bd2e0 4017 {
507bd325
L
4018 { "cvtps2pd", { XM, EXq }, PREFIX_OPCODE },
4019 { "cvtss2sd", { XM, EXd }, PREFIX_OPCODE },
4020 { "cvtpd2ps", { XM, EXx }, PREFIX_OPCODE },
4021 { "cvtsd2ss", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 4022 },
4e7d34a6 4023
1ceb70f8 4024 /* PREFIX_0F5B */
041bd2e0 4025 {
507bd325
L
4026 { "cvtdq2ps", { XM, EXx }, PREFIX_OPCODE },
4027 { "cvttps2dq", { XM, EXx }, PREFIX_OPCODE },
4028 { "cvtps2dq", { XM, EXx }, PREFIX_OPCODE },
041bd2e0 4029 },
4e7d34a6 4030
1ceb70f8 4031 /* PREFIX_0F5C */
041bd2e0 4032 {
507bd325
L
4033 { "subps", { XM, EXx }, PREFIX_OPCODE },
4034 { "subss", { XM, EXd }, PREFIX_OPCODE },
4035 { "subpd", { XM, EXx }, PREFIX_OPCODE },
4036 { "subsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 4037 },
4e7d34a6 4038
1ceb70f8 4039 /* PREFIX_0F5D */
041bd2e0 4040 {
507bd325
L
4041 { "minps", { XM, EXx }, PREFIX_OPCODE },
4042 { "minss", { XM, EXd }, PREFIX_OPCODE },
4043 { "minpd", { XM, EXx }, PREFIX_OPCODE },
4044 { "minsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 4045 },
4e7d34a6 4046
1ceb70f8 4047 /* PREFIX_0F5E */
041bd2e0 4048 {
507bd325
L
4049 { "divps", { XM, EXx }, PREFIX_OPCODE },
4050 { "divss", { XM, EXd }, PREFIX_OPCODE },
4051 { "divpd", { XM, EXx }, PREFIX_OPCODE },
4052 { "divsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 4053 },
4e7d34a6 4054
1ceb70f8 4055 /* PREFIX_0F5F */
041bd2e0 4056 {
507bd325
L
4057 { "maxps", { XM, EXx }, PREFIX_OPCODE },
4058 { "maxss", { XM, EXd }, PREFIX_OPCODE },
4059 { "maxpd", { XM, EXx }, PREFIX_OPCODE },
4060 { "maxsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 4061 },
4e7d34a6 4062
1ceb70f8 4063 /* PREFIX_0F60 */
041bd2e0 4064 {
507bd325 4065 { "punpcklbw",{ MX, EMd }, PREFIX_OPCODE },
592d1631 4066 { Bad_Opcode },
507bd325 4067 { "punpcklbw",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 4068 },
4e7d34a6 4069
1ceb70f8 4070 /* PREFIX_0F61 */
041bd2e0 4071 {
507bd325 4072 { "punpcklwd",{ MX, EMd }, PREFIX_OPCODE },
592d1631 4073 { Bad_Opcode },
507bd325 4074 { "punpcklwd",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 4075 },
4e7d34a6 4076
1ceb70f8 4077 /* PREFIX_0F62 */
041bd2e0 4078 {
507bd325 4079 { "punpckldq",{ MX, EMd }, PREFIX_OPCODE },
592d1631 4080 { Bad_Opcode },
507bd325 4081 { "punpckldq",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 4082 },
4e7d34a6 4083
1ceb70f8 4084 /* PREFIX_0F6C */
041bd2e0 4085 {
592d1631
L
4086 { Bad_Opcode },
4087 { Bad_Opcode },
507bd325 4088 { "punpcklqdq", { XM, EXx }, PREFIX_OPCODE },
0f17484f 4089 },
4e7d34a6 4090
1ceb70f8 4091 /* PREFIX_0F6D */
0f17484f 4092 {
592d1631
L
4093 { Bad_Opcode },
4094 { Bad_Opcode },
507bd325 4095 { "punpckhqdq", { XM, EXx }, PREFIX_OPCODE },
041bd2e0 4096 },
4e7d34a6 4097
1ceb70f8 4098 /* PREFIX_0F6F */
ca164297 4099 {
507bd325
L
4100 { "movq", { MX, EM }, PREFIX_OPCODE },
4101 { "movdqu", { XM, EXx }, PREFIX_OPCODE },
4102 { "movdqa", { XM, EXx }, PREFIX_OPCODE },
ca164297 4103 },
4e7d34a6 4104
1ceb70f8 4105 /* PREFIX_0F70 */
4e7d34a6 4106 {
507bd325
L
4107 { "pshufw", { MX, EM, Ib }, PREFIX_OPCODE },
4108 { "pshufhw",{ XM, EXx, Ib }, PREFIX_OPCODE },
4109 { "pshufd", { XM, EXx, Ib }, PREFIX_OPCODE },
4110 { "pshuflw",{ XM, EXx, Ib }, PREFIX_OPCODE },
4e7d34a6
L
4111 },
4112
92fddf8e
L
4113 /* PREFIX_0F73_REG_3 */
4114 {
592d1631
L
4115 { Bad_Opcode },
4116 { Bad_Opcode },
bf890a93 4117 { "psrldq", { XS, Ib }, 0 },
92fddf8e
L
4118 },
4119
4120 /* PREFIX_0F73_REG_7 */
4121 {
592d1631
L
4122 { Bad_Opcode },
4123 { Bad_Opcode },
bf890a93 4124 { "pslldq", { XS, Ib }, 0 },
92fddf8e
L
4125 },
4126
1ceb70f8 4127 /* PREFIX_0F78 */
4e7d34a6 4128 {
bf890a93 4129 {"vmread", { Em, Gm }, 0 },
592d1631 4130 { Bad_Opcode },
bf890a93
IT
4131 {"extrq", { XS, Ib, Ib }, 0 },
4132 {"insertq", { XM, XS, Ib, Ib }, 0 },
4e7d34a6
L
4133 },
4134
1ceb70f8 4135 /* PREFIX_0F79 */
4e7d34a6 4136 {
bf890a93 4137 {"vmwrite", { Gm, Em }, 0 },
592d1631 4138 { Bad_Opcode },
bf890a93
IT
4139 {"extrq", { XM, XS }, 0 },
4140 {"insertq", { XM, XS }, 0 },
4e7d34a6
L
4141 },
4142
1ceb70f8 4143 /* PREFIX_0F7C */
ca164297 4144 {
592d1631
L
4145 { Bad_Opcode },
4146 { Bad_Opcode },
507bd325
L
4147 { "haddpd", { XM, EXx }, PREFIX_OPCODE },
4148 { "haddps", { XM, EXx }, PREFIX_OPCODE },
ca164297 4149 },
4e7d34a6 4150
1ceb70f8 4151 /* PREFIX_0F7D */
ca164297 4152 {
592d1631
L
4153 { Bad_Opcode },
4154 { Bad_Opcode },
507bd325
L
4155 { "hsubpd", { XM, EXx }, PREFIX_OPCODE },
4156 { "hsubps", { XM, EXx }, PREFIX_OPCODE },
ca164297 4157 },
4e7d34a6 4158
1ceb70f8 4159 /* PREFIX_0F7E */
ca164297 4160 {
507bd325
L
4161 { "movK", { Edq, MX }, PREFIX_OPCODE },
4162 { "movq", { XM, EXq }, PREFIX_OPCODE },
4163 { "movK", { Edq, XM }, PREFIX_OPCODE },
ca164297 4164 },
4e7d34a6 4165
1ceb70f8 4166 /* PREFIX_0F7F */
ca164297 4167 {
507bd325
L
4168 { "movq", { EMS, MX }, PREFIX_OPCODE },
4169 { "movdqu", { EXxS, XM }, PREFIX_OPCODE },
4170 { "movdqa", { EXxS, XM }, PREFIX_OPCODE },
ca164297 4171 },
4e7d34a6 4172
c7b8aa3a
L
4173 /* PREFIX_0FAE_REG_0 */
4174 {
4175 { Bad_Opcode },
bf890a93 4176 { "rdfsbase", { Ev }, 0 },
c7b8aa3a
L
4177 },
4178
4179 /* PREFIX_0FAE_REG_1 */
4180 {
4181 { Bad_Opcode },
bf890a93 4182 { "rdgsbase", { Ev }, 0 },
c7b8aa3a
L
4183 },
4184
4185 /* PREFIX_0FAE_REG_2 */
4186 {
4187 { Bad_Opcode },
bf890a93 4188 { "wrfsbase", { Ev }, 0 },
c7b8aa3a
L
4189 },
4190
4191 /* PREFIX_0FAE_REG_3 */
4192 {
4193 { Bad_Opcode },
bf890a93 4194 { "wrgsbase", { Ev }, 0 },
c7b8aa3a
L
4195 },
4196
6b40c462
L
4197 /* PREFIX_MOD_0_0FAE_REG_4 */
4198 {
4199 { "xsave", { FXSAVE }, 0 },
4200 { "ptwrite%LQ", { Edq }, 0 },
4201 },
4202
4203 /* PREFIX_MOD_3_0FAE_REG_4 */
4204 {
4205 { Bad_Opcode },
4206 { "ptwrite%LQ", { Edq }, 0 },
4207 },
4208
603555e5
L
4209 /* PREFIX_MOD_0_0FAE_REG_5 */
4210 {
4211 { "xrstor", { FXSAVE }, PREFIX_OPCODE },
2234eee6
L
4212 },
4213
4214 /* PREFIX_MOD_3_0FAE_REG_5 */
4215 {
4216 { "lfence", { Skip_MODRM }, 0 },
4217 { "incsspK", { Rdq }, PREFIX_OPCODE },
603555e5
L
4218 },
4219
de89d0a3 4220 /* PREFIX_MOD_0_0FAE_REG_6 */
c5e7287a 4221 {
603555e5
L
4222 { "xsaveopt", { FXSAVE }, PREFIX_OPCODE },
4223 { "clrssbsy", { Mq }, PREFIX_OPCODE },
4224 { "clwb", { Mb }, PREFIX_OPCODE },
c5e7287a
IT
4225 },
4226
de89d0a3
IT
4227 /* PREFIX_MOD_1_0FAE_REG_6 */
4228 {
4229 { RM_TABLE (RM_0FAE_REG_6) },
4230 { "umonitor", { Eva }, PREFIX_OPCODE },
ae1d3843
L
4231 { "tpause", { Edq }, PREFIX_OPCODE },
4232 { "umwait", { Edq }, PREFIX_OPCODE },
de89d0a3
IT
4233 },
4234
963f3586
IT
4235 /* PREFIX_0FAE_REG_7 */
4236 {
bf890a93 4237 { "clflush", { Mb }, 0 },
963f3586 4238 { Bad_Opcode },
bf890a93 4239 { "clflushopt", { Mb }, 0 },
963f3586
IT
4240 },
4241
1ceb70f8 4242 /* PREFIX_0FB8 */
ca164297 4243 {
592d1631 4244 { Bad_Opcode },
bf890a93 4245 { "popcntS", { Gv, Ev }, 0 },
ca164297 4246 },
4e7d34a6 4247
f12dc422
L
4248 /* PREFIX_0FBC */
4249 {
bf890a93
IT
4250 { "bsfS", { Gv, Ev }, 0 },
4251 { "tzcntS", { Gv, Ev }, 0 },
4252 { "bsfS", { Gv, Ev }, 0 },
f12dc422
L
4253 },
4254
1ceb70f8 4255 /* PREFIX_0FBD */
050dfa73 4256 {
bf890a93
IT
4257 { "bsrS", { Gv, Ev }, 0 },
4258 { "lzcntS", { Gv, Ev }, 0 },
4259 { "bsrS", { Gv, Ev }, 0 },
050dfa73
MM
4260 },
4261
1ceb70f8 4262 /* PREFIX_0FC2 */
050dfa73 4263 {
507bd325
L
4264 { "cmpps", { XM, EXx, CMP }, PREFIX_OPCODE },
4265 { "cmpss", { XM, EXd, CMP }, PREFIX_OPCODE },
4266 { "cmppd", { XM, EXx, CMP }, PREFIX_OPCODE },
4267 { "cmpsd", { XM, EXq, CMP }, PREFIX_OPCODE },
050dfa73 4268 },
246c51aa 4269
a8484f96 4270 /* PREFIX_MOD_0_0FC3 */
4ee52178 4271 {
a8484f96 4272 { "movntiS", { Ev, Gv }, PREFIX_OPCODE },
4ee52178
L
4273 },
4274
f24bcbaa 4275 /* PREFIX_MOD_0_0FC7_REG_6 */
92fddf8e 4276 {
bf890a93
IT
4277 { "vmptrld",{ Mq }, 0 },
4278 { "vmxon", { Mq }, 0 },
4279 { "vmclear",{ Mq }, 0 },
92fddf8e
L
4280 },
4281
f24bcbaa
L
4282 /* PREFIX_MOD_3_0FC7_REG_6 */
4283 {
4284 { "rdrand", { Ev }, 0 },
4285 { Bad_Opcode },
4286 { "rdrand", { Ev }, 0 }
4287 },
4288
4289 /* PREFIX_MOD_3_0FC7_REG_7 */
4290 {
4291 { "rdseed", { Ev }, 0 },
8bc52696 4292 { "rdpid", { Em }, 0 },
f24bcbaa
L
4293 { "rdseed", { Ev }, 0 },
4294 },
4295
1ceb70f8 4296 /* PREFIX_0FD0 */
050dfa73 4297 {
592d1631
L
4298 { Bad_Opcode },
4299 { Bad_Opcode },
bf890a93
IT
4300 { "addsubpd", { XM, EXx }, 0 },
4301 { "addsubps", { XM, EXx }, 0 },
246c51aa 4302 },
050dfa73 4303
1ceb70f8 4304 /* PREFIX_0FD6 */
050dfa73 4305 {
592d1631 4306 { Bad_Opcode },
bf890a93
IT
4307 { "movq2dq",{ XM, MS }, 0 },
4308 { "movq", { EXqS, XM }, 0 },
4309 { "movdq2q",{ MX, XS }, 0 },
050dfa73
MM
4310 },
4311
1ceb70f8 4312 /* PREFIX_0FE6 */
7918206c 4313 {
592d1631 4314 { Bad_Opcode },
507bd325
L
4315 { "cvtdq2pd", { XM, EXq }, PREFIX_OPCODE },
4316 { "cvttpd2dq", { XM, EXx }, PREFIX_OPCODE },
4317 { "cvtpd2dq", { XM, EXx }, PREFIX_OPCODE },
7918206c 4318 },
8b38ad71 4319
1ceb70f8 4320 /* PREFIX_0FE7 */
8b38ad71 4321 {
507bd325 4322 { "movntq", { Mq, MX }, PREFIX_OPCODE },
592d1631 4323 { Bad_Opcode },
75c135a8 4324 { MOD_TABLE (MOD_0FE7_PREFIX_2) },
4e7d34a6
L
4325 },
4326
1ceb70f8 4327 /* PREFIX_0FF0 */
4e7d34a6 4328 {
592d1631
L
4329 { Bad_Opcode },
4330 { Bad_Opcode },
4331 { Bad_Opcode },
1ceb70f8 4332 { MOD_TABLE (MOD_0FF0_PREFIX_3) },
4e7d34a6
L
4333 },
4334
1ceb70f8 4335 /* PREFIX_0FF7 */
4e7d34a6 4336 {
507bd325 4337 { "maskmovq", { MX, MS }, PREFIX_OPCODE },
592d1631 4338 { Bad_Opcode },
507bd325 4339 { "maskmovdqu", { XM, XS }, PREFIX_OPCODE },
8b38ad71 4340 },
42903f7f 4341
1ceb70f8 4342 /* PREFIX_0F3810 */
42903f7f 4343 {
592d1631
L
4344 { Bad_Opcode },
4345 { Bad_Opcode },
507bd325 4346 { "pblendvb", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4347 },
4348
1ceb70f8 4349 /* PREFIX_0F3814 */
42903f7f 4350 {
592d1631
L
4351 { Bad_Opcode },
4352 { Bad_Opcode },
507bd325 4353 { "blendvps", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4354 },
4355
1ceb70f8 4356 /* PREFIX_0F3815 */
42903f7f 4357 {
592d1631
L
4358 { Bad_Opcode },
4359 { Bad_Opcode },
507bd325 4360 { "blendvpd", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4361 },
4362
1ceb70f8 4363 /* PREFIX_0F3817 */
42903f7f 4364 {
592d1631
L
4365 { Bad_Opcode },
4366 { Bad_Opcode },
507bd325 4367 { "ptest", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4368 },
4369
1ceb70f8 4370 /* PREFIX_0F3820 */
42903f7f 4371 {
592d1631
L
4372 { Bad_Opcode },
4373 { Bad_Opcode },
507bd325 4374 { "pmovsxbw", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4375 },
4376
1ceb70f8 4377 /* PREFIX_0F3821 */
42903f7f 4378 {
592d1631
L
4379 { Bad_Opcode },
4380 { Bad_Opcode },
507bd325 4381 { "pmovsxbd", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4382 },
4383
1ceb70f8 4384 /* PREFIX_0F3822 */
42903f7f 4385 {
592d1631
L
4386 { Bad_Opcode },
4387 { Bad_Opcode },
507bd325 4388 { "pmovsxbq", { XM, EXw }, PREFIX_OPCODE },
42903f7f
L
4389 },
4390
1ceb70f8 4391 /* PREFIX_0F3823 */
42903f7f 4392 {
592d1631
L
4393 { Bad_Opcode },
4394 { Bad_Opcode },
507bd325 4395 { "pmovsxwd", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4396 },
4397
1ceb70f8 4398 /* PREFIX_0F3824 */
42903f7f 4399 {
592d1631
L
4400 { Bad_Opcode },
4401 { Bad_Opcode },
507bd325 4402 { "pmovsxwq", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4403 },
4404
1ceb70f8 4405 /* PREFIX_0F3825 */
42903f7f 4406 {
592d1631
L
4407 { Bad_Opcode },
4408 { Bad_Opcode },
507bd325 4409 { "pmovsxdq", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4410 },
4411
1ceb70f8 4412 /* PREFIX_0F3828 */
42903f7f 4413 {
592d1631
L
4414 { Bad_Opcode },
4415 { Bad_Opcode },
507bd325 4416 { "pmuldq", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4417 },
4418
1ceb70f8 4419 /* PREFIX_0F3829 */
42903f7f 4420 {
592d1631
L
4421 { Bad_Opcode },
4422 { Bad_Opcode },
507bd325 4423 { "pcmpeqq", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4424 },
4425
1ceb70f8 4426 /* PREFIX_0F382A */
42903f7f 4427 {
592d1631
L
4428 { Bad_Opcode },
4429 { Bad_Opcode },
75c135a8 4430 { MOD_TABLE (MOD_0F382A_PREFIX_2) },
42903f7f
L
4431 },
4432
1ceb70f8 4433 /* PREFIX_0F382B */
42903f7f 4434 {
592d1631
L
4435 { Bad_Opcode },
4436 { Bad_Opcode },
507bd325 4437 { "packusdw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4438 },
4439
1ceb70f8 4440 /* PREFIX_0F3830 */
42903f7f 4441 {
592d1631
L
4442 { Bad_Opcode },
4443 { Bad_Opcode },
507bd325 4444 { "pmovzxbw", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4445 },
4446
1ceb70f8 4447 /* PREFIX_0F3831 */
42903f7f 4448 {
592d1631
L
4449 { Bad_Opcode },
4450 { Bad_Opcode },
507bd325 4451 { "pmovzxbd", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4452 },
4453
1ceb70f8 4454 /* PREFIX_0F3832 */
42903f7f 4455 {
592d1631
L
4456 { Bad_Opcode },
4457 { Bad_Opcode },
507bd325 4458 { "pmovzxbq", { XM, EXw }, PREFIX_OPCODE },
42903f7f
L
4459 },
4460
1ceb70f8 4461 /* PREFIX_0F3833 */
42903f7f 4462 {
592d1631
L
4463 { Bad_Opcode },
4464 { Bad_Opcode },
507bd325 4465 { "pmovzxwd", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4466 },
4467
1ceb70f8 4468 /* PREFIX_0F3834 */
42903f7f 4469 {
592d1631
L
4470 { Bad_Opcode },
4471 { Bad_Opcode },
507bd325 4472 { "pmovzxwq", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4473 },
4474
1ceb70f8 4475 /* PREFIX_0F3835 */
42903f7f 4476 {
592d1631
L
4477 { Bad_Opcode },
4478 { Bad_Opcode },
507bd325 4479 { "pmovzxdq", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4480 },
4481
1ceb70f8 4482 /* PREFIX_0F3837 */
4e7d34a6 4483 {
592d1631
L
4484 { Bad_Opcode },
4485 { Bad_Opcode },
507bd325 4486 { "pcmpgtq", { XM, EXx }, PREFIX_OPCODE },
4e7d34a6
L
4487 },
4488
1ceb70f8 4489 /* PREFIX_0F3838 */
42903f7f 4490 {
592d1631
L
4491 { Bad_Opcode },
4492 { Bad_Opcode },
507bd325 4493 { "pminsb", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4494 },
4495
1ceb70f8 4496 /* PREFIX_0F3839 */
42903f7f 4497 {
592d1631
L
4498 { Bad_Opcode },
4499 { Bad_Opcode },
507bd325 4500 { "pminsd", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4501 },
4502
1ceb70f8 4503 /* PREFIX_0F383A */
42903f7f 4504 {
592d1631
L
4505 { Bad_Opcode },
4506 { Bad_Opcode },
507bd325 4507 { "pminuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4508 },
4509
1ceb70f8 4510 /* PREFIX_0F383B */
42903f7f 4511 {
592d1631
L
4512 { Bad_Opcode },
4513 { Bad_Opcode },
507bd325 4514 { "pminud", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4515 },
4516
1ceb70f8 4517 /* PREFIX_0F383C */
42903f7f 4518 {
592d1631
L
4519 { Bad_Opcode },
4520 { Bad_Opcode },
507bd325 4521 { "pmaxsb", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4522 },
4523
1ceb70f8 4524 /* PREFIX_0F383D */
42903f7f 4525 {
592d1631
L
4526 { Bad_Opcode },
4527 { Bad_Opcode },
507bd325 4528 { "pmaxsd", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4529 },
4530
1ceb70f8 4531 /* PREFIX_0F383E */
42903f7f 4532 {
592d1631
L
4533 { Bad_Opcode },
4534 { Bad_Opcode },
507bd325 4535 { "pmaxuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4536 },
4537
1ceb70f8 4538 /* PREFIX_0F383F */
42903f7f 4539 {
592d1631
L
4540 { Bad_Opcode },
4541 { Bad_Opcode },
507bd325 4542 { "pmaxud", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4543 },
4544
1ceb70f8 4545 /* PREFIX_0F3840 */
42903f7f 4546 {
592d1631
L
4547 { Bad_Opcode },
4548 { Bad_Opcode },
507bd325 4549 { "pmulld", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4550 },
4551
1ceb70f8 4552 /* PREFIX_0F3841 */
42903f7f 4553 {
592d1631
L
4554 { Bad_Opcode },
4555 { Bad_Opcode },
507bd325 4556 { "phminposuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4557 },
4558
f1f8f695
L
4559 /* PREFIX_0F3880 */
4560 {
592d1631
L
4561 { Bad_Opcode },
4562 { Bad_Opcode },
507bd325 4563 { "invept", { Gm, Mo }, PREFIX_OPCODE },
f1f8f695
L
4564 },
4565
4566 /* PREFIX_0F3881 */
4567 {
592d1631
L
4568 { Bad_Opcode },
4569 { Bad_Opcode },
507bd325 4570 { "invvpid", { Gm, Mo }, PREFIX_OPCODE },
f1f8f695
L
4571 },
4572
6c30d220
L
4573 /* PREFIX_0F3882 */
4574 {
4575 { Bad_Opcode },
4576 { Bad_Opcode },
507bd325 4577 { "invpcid", { Gm, M }, PREFIX_OPCODE },
6c30d220
L
4578 },
4579
a0046408
L
4580 /* PREFIX_0F38C8 */
4581 {
507bd325 4582 { "sha1nexte", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4583 },
4584
4585 /* PREFIX_0F38C9 */
4586 {
507bd325 4587 { "sha1msg1", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4588 },
4589
4590 /* PREFIX_0F38CA */
4591 {
507bd325 4592 { "sha1msg2", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4593 },
4594
4595 /* PREFIX_0F38CB */
4596 {
507bd325 4597 { "sha256rnds2", { XM, EXxmm, XMM0 }, PREFIX_OPCODE },
a0046408
L
4598 },
4599
4600 /* PREFIX_0F38CC */
4601 {
507bd325 4602 { "sha256msg1", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4603 },
4604
4605 /* PREFIX_0F38CD */
4606 {
507bd325 4607 { "sha256msg2", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4608 },
4609
48521003
IT
4610 /* PREFIX_0F38CF */
4611 {
4612 { Bad_Opcode },
4613 { Bad_Opcode },
4614 { "gf2p8mulb", { XM, EXxmm }, PREFIX_OPCODE },
4615 },
4616
c0f3af97
L
4617 /* PREFIX_0F38DB */
4618 {
592d1631
L
4619 { Bad_Opcode },
4620 { Bad_Opcode },
507bd325 4621 { "aesimc", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4622 },
4623
4624 /* PREFIX_0F38DC */
4625 {
592d1631
L
4626 { Bad_Opcode },
4627 { Bad_Opcode },
507bd325 4628 { "aesenc", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4629 },
4630
4631 /* PREFIX_0F38DD */
4632 {
592d1631
L
4633 { Bad_Opcode },
4634 { Bad_Opcode },
507bd325 4635 { "aesenclast", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4636 },
4637
4638 /* PREFIX_0F38DE */
4639 {
592d1631
L
4640 { Bad_Opcode },
4641 { Bad_Opcode },
507bd325 4642 { "aesdec", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4643 },
4644
4645 /* PREFIX_0F38DF */
4646 {
592d1631
L
4647 { Bad_Opcode },
4648 { Bad_Opcode },
507bd325 4649 { "aesdeclast", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4650 },
4651
1ceb70f8 4652 /* PREFIX_0F38F0 */
4e7d34a6 4653 {
507bd325 4654 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } }, PREFIX_OPCODE },
592d1631 4655 { Bad_Opcode },
507bd325
L
4656 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } }, PREFIX_OPCODE },
4657 { "crc32", { Gdq, { CRC32_Fixup, b_mode } }, PREFIX_OPCODE },
4e7d34a6
L
4658 },
4659
1ceb70f8 4660 /* PREFIX_0F38F1 */
4e7d34a6 4661 {
507bd325 4662 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv }, PREFIX_OPCODE },
592d1631 4663 { Bad_Opcode },
507bd325
L
4664 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv }, PREFIX_OPCODE },
4665 { "crc32", { Gdq, { CRC32_Fixup, v_mode } }, PREFIX_OPCODE },
4e7d34a6
L
4666 },
4667
603555e5 4668 /* PREFIX_0F38F5 */
e2e1fcde
L
4669 {
4670 { Bad_Opcode },
603555e5
L
4671 { Bad_Opcode },
4672 { MOD_TABLE (MOD_0F38F5_PREFIX_2) },
4673 },
4674
4675 /* PREFIX_0F38F6 */
4676 {
4677 { MOD_TABLE (MOD_0F38F6_PREFIX_0) },
507bd325
L
4678 { "adoxS", { Gdq, Edq}, PREFIX_OPCODE },
4679 { "adcxS", { Gdq, Edq}, PREFIX_OPCODE },
e2e1fcde
L
4680 { Bad_Opcode },
4681 },
4682
1ceb70f8 4683 /* PREFIX_0F3A08 */
42903f7f 4684 {
592d1631
L
4685 { Bad_Opcode },
4686 { Bad_Opcode },
507bd325 4687 { "roundps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4688 },
4689
1ceb70f8 4690 /* PREFIX_0F3A09 */
42903f7f 4691 {
592d1631
L
4692 { Bad_Opcode },
4693 { Bad_Opcode },
507bd325 4694 { "roundpd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4695 },
4696
1ceb70f8 4697 /* PREFIX_0F3A0A */
42903f7f 4698 {
592d1631
L
4699 { Bad_Opcode },
4700 { Bad_Opcode },
507bd325 4701 { "roundss", { XM, EXd, Ib }, PREFIX_OPCODE },
42903f7f
L
4702 },
4703
1ceb70f8 4704 /* PREFIX_0F3A0B */
42903f7f 4705 {
592d1631
L
4706 { Bad_Opcode },
4707 { Bad_Opcode },
507bd325 4708 { "roundsd", { XM, EXq, Ib }, PREFIX_OPCODE },
42903f7f
L
4709 },
4710
1ceb70f8 4711 /* PREFIX_0F3A0C */
42903f7f 4712 {
592d1631
L
4713 { Bad_Opcode },
4714 { Bad_Opcode },
507bd325 4715 { "blendps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4716 },
4717
1ceb70f8 4718 /* PREFIX_0F3A0D */
42903f7f 4719 {
592d1631
L
4720 { Bad_Opcode },
4721 { Bad_Opcode },
507bd325 4722 { "blendpd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4723 },
4724
1ceb70f8 4725 /* PREFIX_0F3A0E */
42903f7f 4726 {
592d1631
L
4727 { Bad_Opcode },
4728 { Bad_Opcode },
507bd325 4729 { "pblendw", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4730 },
4731
1ceb70f8 4732 /* PREFIX_0F3A14 */
42903f7f 4733 {
592d1631
L
4734 { Bad_Opcode },
4735 { Bad_Opcode },
507bd325 4736 { "pextrb", { Edqb, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4737 },
4738
1ceb70f8 4739 /* PREFIX_0F3A15 */
42903f7f 4740 {
592d1631
L
4741 { Bad_Opcode },
4742 { Bad_Opcode },
507bd325 4743 { "pextrw", { Edqw, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4744 },
4745
1ceb70f8 4746 /* PREFIX_0F3A16 */
42903f7f 4747 {
592d1631
L
4748 { Bad_Opcode },
4749 { Bad_Opcode },
507bd325 4750 { "pextrK", { Edq, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4751 },
4752
1ceb70f8 4753 /* PREFIX_0F3A17 */
42903f7f 4754 {
592d1631
L
4755 { Bad_Opcode },
4756 { Bad_Opcode },
507bd325 4757 { "extractps", { Edqd, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4758 },
4759
1ceb70f8 4760 /* PREFIX_0F3A20 */
42903f7f 4761 {
592d1631
L
4762 { Bad_Opcode },
4763 { Bad_Opcode },
507bd325 4764 { "pinsrb", { XM, Edqb, Ib }, PREFIX_OPCODE },
42903f7f
L
4765 },
4766
1ceb70f8 4767 /* PREFIX_0F3A21 */
42903f7f 4768 {
592d1631
L
4769 { Bad_Opcode },
4770 { Bad_Opcode },
507bd325 4771 { "insertps", { XM, EXd, Ib }, PREFIX_OPCODE },
42903f7f
L
4772 },
4773
1ceb70f8 4774 /* PREFIX_0F3A22 */
42903f7f 4775 {
592d1631
L
4776 { Bad_Opcode },
4777 { Bad_Opcode },
507bd325 4778 { "pinsrK", { XM, Edq, Ib }, PREFIX_OPCODE },
42903f7f
L
4779 },
4780
1ceb70f8 4781 /* PREFIX_0F3A40 */
42903f7f 4782 {
592d1631
L
4783 { Bad_Opcode },
4784 { Bad_Opcode },
507bd325 4785 { "dpps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4786 },
4787
1ceb70f8 4788 /* PREFIX_0F3A41 */
42903f7f 4789 {
592d1631
L
4790 { Bad_Opcode },
4791 { Bad_Opcode },
507bd325 4792 { "dppd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4793 },
4794
1ceb70f8 4795 /* PREFIX_0F3A42 */
42903f7f 4796 {
592d1631
L
4797 { Bad_Opcode },
4798 { Bad_Opcode },
507bd325 4799 { "mpsadbw", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f 4800 },
381d071f 4801
c0f3af97
L
4802 /* PREFIX_0F3A44 */
4803 {
592d1631
L
4804 { Bad_Opcode },
4805 { Bad_Opcode },
507bd325 4806 { "pclmulqdq", { XM, EXx, PCLMUL }, PREFIX_OPCODE },
c0f3af97
L
4807 },
4808
1ceb70f8 4809 /* PREFIX_0F3A60 */
381d071f 4810 {
592d1631
L
4811 { Bad_Opcode },
4812 { Bad_Opcode },
15c7c1d8 4813 { "pcmpestrm", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, PREFIX_OPCODE },
381d071f
L
4814 },
4815
1ceb70f8 4816 /* PREFIX_0F3A61 */
381d071f 4817 {
592d1631
L
4818 { Bad_Opcode },
4819 { Bad_Opcode },
15c7c1d8 4820 { "pcmpestri", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, PREFIX_OPCODE },
381d071f
L
4821 },
4822
1ceb70f8 4823 /* PREFIX_0F3A62 */
381d071f 4824 {
592d1631
L
4825 { Bad_Opcode },
4826 { Bad_Opcode },
507bd325 4827 { "pcmpistrm", { XM, EXx, Ib }, PREFIX_OPCODE },
381d071f
L
4828 },
4829
1ceb70f8 4830 /* PREFIX_0F3A63 */
381d071f 4831 {
592d1631
L
4832 { Bad_Opcode },
4833 { Bad_Opcode },
507bd325 4834 { "pcmpistri", { XM, EXx, Ib }, PREFIX_OPCODE },
381d071f 4835 },
09a2c6cf 4836
a0046408
L
4837 /* PREFIX_0F3ACC */
4838 {
507bd325 4839 { "sha1rnds4", { XM, EXxmm, Ib }, PREFIX_OPCODE },
a0046408
L
4840 },
4841
48521003
IT
4842 /* PREFIX_0F3ACE */
4843 {
4844 { Bad_Opcode },
4845 { Bad_Opcode },
4846 { "gf2p8affineqb", { XM, EXxmm, Ib }, PREFIX_OPCODE },
4847 },
4848
4849 /* PREFIX_0F3ACF */
4850 {
4851 { Bad_Opcode },
4852 { Bad_Opcode },
4853 { "gf2p8affineinvqb", { XM, EXxmm, Ib }, PREFIX_OPCODE },
4854 },
4855
c0f3af97 4856 /* PREFIX_0F3ADF */
09a2c6cf 4857 {
592d1631
L
4858 { Bad_Opcode },
4859 { Bad_Opcode },
507bd325 4860 { "aeskeygenassist", { XM, EXx, Ib }, PREFIX_OPCODE },
09a2c6cf
L
4861 },
4862
592a252b 4863 /* PREFIX_VEX_0F10 */
09a2c6cf 4864 {
592a252b
L
4865 { VEX_W_TABLE (VEX_W_0F10_P_0) },
4866 { VEX_LEN_TABLE (VEX_LEN_0F10_P_1) },
4867 { VEX_W_TABLE (VEX_W_0F10_P_2) },
4868 { VEX_LEN_TABLE (VEX_LEN_0F10_P_3) },
09a2c6cf
L
4869 },
4870
592a252b 4871 /* PREFIX_VEX_0F11 */
09a2c6cf 4872 {
592a252b
L
4873 { VEX_W_TABLE (VEX_W_0F11_P_0) },
4874 { VEX_LEN_TABLE (VEX_LEN_0F11_P_1) },
4875 { VEX_W_TABLE (VEX_W_0F11_P_2) },
4876 { VEX_LEN_TABLE (VEX_LEN_0F11_P_3) },
09a2c6cf
L
4877 },
4878
592a252b 4879 /* PREFIX_VEX_0F12 */
09a2c6cf 4880 {
592a252b
L
4881 { MOD_TABLE (MOD_VEX_0F12_PREFIX_0) },
4882 { VEX_W_TABLE (VEX_W_0F12_P_1) },
4883 { VEX_LEN_TABLE (VEX_LEN_0F12_P_2) },
4884 { VEX_W_TABLE (VEX_W_0F12_P_3) },
09a2c6cf
L
4885 },
4886
592a252b 4887 /* PREFIX_VEX_0F16 */
09a2c6cf 4888 {
592a252b
L
4889 { MOD_TABLE (MOD_VEX_0F16_PREFIX_0) },
4890 { VEX_W_TABLE (VEX_W_0F16_P_1) },
4891 { VEX_LEN_TABLE (VEX_LEN_0F16_P_2) },
5f754f58 4892 },
7c52e0e8 4893
592a252b 4894 /* PREFIX_VEX_0F2A */
5f754f58 4895 {
592d1631 4896 { Bad_Opcode },
592a252b 4897 { VEX_LEN_TABLE (VEX_LEN_0F2A_P_1) },
592d1631 4898 { Bad_Opcode },
592a252b 4899 { VEX_LEN_TABLE (VEX_LEN_0F2A_P_3) },
5f754f58 4900 },
7c52e0e8 4901
592a252b 4902 /* PREFIX_VEX_0F2C */
5f754f58 4903 {
592d1631 4904 { Bad_Opcode },
592a252b 4905 { VEX_LEN_TABLE (VEX_LEN_0F2C_P_1) },
592d1631 4906 { Bad_Opcode },
592a252b 4907 { VEX_LEN_TABLE (VEX_LEN_0F2C_P_3) },
5f754f58 4908 },
7c52e0e8 4909
592a252b 4910 /* PREFIX_VEX_0F2D */
7c52e0e8 4911 {
592d1631 4912 { Bad_Opcode },
592a252b 4913 { VEX_LEN_TABLE (VEX_LEN_0F2D_P_1) },
592d1631 4914 { Bad_Opcode },
592a252b 4915 { VEX_LEN_TABLE (VEX_LEN_0F2D_P_3) },
7c52e0e8
L
4916 },
4917
592a252b 4918 /* PREFIX_VEX_0F2E */
7c52e0e8 4919 {
592a252b 4920 { VEX_LEN_TABLE (VEX_LEN_0F2E_P_0) },
592d1631 4921 { Bad_Opcode },
592a252b 4922 { VEX_LEN_TABLE (VEX_LEN_0F2E_P_2) },
7c52e0e8
L
4923 },
4924
592a252b 4925 /* PREFIX_VEX_0F2F */
7c52e0e8 4926 {
592a252b 4927 { VEX_LEN_TABLE (VEX_LEN_0F2F_P_0) },
592d1631 4928 { Bad_Opcode },
592a252b 4929 { VEX_LEN_TABLE (VEX_LEN_0F2F_P_2) },
7c52e0e8
L
4930 },
4931
43234a1e
L
4932 /* PREFIX_VEX_0F41 */
4933 {
4934 { VEX_LEN_TABLE (VEX_LEN_0F41_P_0) },
1ba585e8
IT
4935 { Bad_Opcode },
4936 { VEX_LEN_TABLE (VEX_LEN_0F41_P_2) },
43234a1e
L
4937 },
4938
4939 /* PREFIX_VEX_0F42 */
4940 {
4941 { VEX_LEN_TABLE (VEX_LEN_0F42_P_0) },
1ba585e8
IT
4942 { Bad_Opcode },
4943 { VEX_LEN_TABLE (VEX_LEN_0F42_P_2) },
43234a1e
L
4944 },
4945
4946 /* PREFIX_VEX_0F44 */
4947 {
4948 { VEX_LEN_TABLE (VEX_LEN_0F44_P_0) },
1ba585e8
IT
4949 { Bad_Opcode },
4950 { VEX_LEN_TABLE (VEX_LEN_0F44_P_2) },
43234a1e
L
4951 },
4952
4953 /* PREFIX_VEX_0F45 */
4954 {
4955 { VEX_LEN_TABLE (VEX_LEN_0F45_P_0) },
1ba585e8
IT
4956 { Bad_Opcode },
4957 { VEX_LEN_TABLE (VEX_LEN_0F45_P_2) },
43234a1e
L
4958 },
4959
4960 /* PREFIX_VEX_0F46 */
4961 {
4962 { VEX_LEN_TABLE (VEX_LEN_0F46_P_0) },
1ba585e8
IT
4963 { Bad_Opcode },
4964 { VEX_LEN_TABLE (VEX_LEN_0F46_P_2) },
43234a1e
L
4965 },
4966
4967 /* PREFIX_VEX_0F47 */
4968 {
4969 { VEX_LEN_TABLE (VEX_LEN_0F47_P_0) },
1ba585e8
IT
4970 { Bad_Opcode },
4971 { VEX_LEN_TABLE (VEX_LEN_0F47_P_2) },
43234a1e
L
4972 },
4973
1ba585e8 4974 /* PREFIX_VEX_0F4A */
43234a1e 4975 {
1ba585e8 4976 { VEX_LEN_TABLE (VEX_LEN_0F4A_P_0) },
43234a1e 4977 { Bad_Opcode },
1ba585e8
IT
4978 { VEX_LEN_TABLE (VEX_LEN_0F4A_P_2) },
4979 },
4980
4981 /* PREFIX_VEX_0F4B */
4982 {
4983 { VEX_LEN_TABLE (VEX_LEN_0F4B_P_0) },
43234a1e
L
4984 { Bad_Opcode },
4985 { VEX_LEN_TABLE (VEX_LEN_0F4B_P_2) },
4986 },
4987
592a252b 4988 /* PREFIX_VEX_0F51 */
7c52e0e8 4989 {
592a252b
L
4990 { VEX_W_TABLE (VEX_W_0F51_P_0) },
4991 { VEX_LEN_TABLE (VEX_LEN_0F51_P_1) },
4992 { VEX_W_TABLE (VEX_W_0F51_P_2) },
4993 { VEX_LEN_TABLE (VEX_LEN_0F51_P_3) },
7c52e0e8
L
4994 },
4995
592a252b 4996 /* PREFIX_VEX_0F52 */
7c52e0e8 4997 {
592a252b
L
4998 { VEX_W_TABLE (VEX_W_0F52_P_0) },
4999 { VEX_LEN_TABLE (VEX_LEN_0F52_P_1) },
7c52e0e8
L
5000 },
5001
592a252b 5002 /* PREFIX_VEX_0F53 */
7c52e0e8 5003 {
592a252b
L
5004 { VEX_W_TABLE (VEX_W_0F53_P_0) },
5005 { VEX_LEN_TABLE (VEX_LEN_0F53_P_1) },
7c52e0e8
L
5006 },
5007
592a252b 5008 /* PREFIX_VEX_0F58 */
7c52e0e8 5009 {
592a252b
L
5010 { VEX_W_TABLE (VEX_W_0F58_P_0) },
5011 { VEX_LEN_TABLE (VEX_LEN_0F58_P_1) },
5012 { VEX_W_TABLE (VEX_W_0F58_P_2) },
5013 { VEX_LEN_TABLE (VEX_LEN_0F58_P_3) },
7c52e0e8
L
5014 },
5015
592a252b 5016 /* PREFIX_VEX_0F59 */
7c52e0e8 5017 {
592a252b
L
5018 { VEX_W_TABLE (VEX_W_0F59_P_0) },
5019 { VEX_LEN_TABLE (VEX_LEN_0F59_P_1) },
5020 { VEX_W_TABLE (VEX_W_0F59_P_2) },
5021 { VEX_LEN_TABLE (VEX_LEN_0F59_P_3) },
7c52e0e8
L
5022 },
5023
592a252b 5024 /* PREFIX_VEX_0F5A */
7c52e0e8 5025 {
592a252b
L
5026 { VEX_W_TABLE (VEX_W_0F5A_P_0) },
5027 { VEX_LEN_TABLE (VEX_LEN_0F5A_P_1) },
bf890a93 5028 { "vcvtpd2ps%XY", { XMM, EXx }, 0 },
592a252b 5029 { VEX_LEN_TABLE (VEX_LEN_0F5A_P_3) },
7c52e0e8
L
5030 },
5031
592a252b 5032 /* PREFIX_VEX_0F5B */
7c52e0e8 5033 {
592a252b
L
5034 { VEX_W_TABLE (VEX_W_0F5B_P_0) },
5035 { VEX_W_TABLE (VEX_W_0F5B_P_1) },
5036 { VEX_W_TABLE (VEX_W_0F5B_P_2) },
7c52e0e8
L
5037 },
5038
592a252b 5039 /* PREFIX_VEX_0F5C */
7c52e0e8 5040 {
592a252b
L
5041 { VEX_W_TABLE (VEX_W_0F5C_P_0) },
5042 { VEX_LEN_TABLE (VEX_LEN_0F5C_P_1) },
5043 { VEX_W_TABLE (VEX_W_0F5C_P_2) },
5044 { VEX_LEN_TABLE (VEX_LEN_0F5C_P_3) },
7c52e0e8
L
5045 },
5046
592a252b 5047 /* PREFIX_VEX_0F5D */
7c52e0e8 5048 {
592a252b
L
5049 { VEX_W_TABLE (VEX_W_0F5D_P_0) },
5050 { VEX_LEN_TABLE (VEX_LEN_0F5D_P_1) },
5051 { VEX_W_TABLE (VEX_W_0F5D_P_2) },
5052 { VEX_LEN_TABLE (VEX_LEN_0F5D_P_3) },
7c52e0e8
L
5053 },
5054
592a252b 5055 /* PREFIX_VEX_0F5E */
7c52e0e8 5056 {
592a252b
L
5057 { VEX_W_TABLE (VEX_W_0F5E_P_0) },
5058 { VEX_LEN_TABLE (VEX_LEN_0F5E_P_1) },
5059 { VEX_W_TABLE (VEX_W_0F5E_P_2) },
5060 { VEX_LEN_TABLE (VEX_LEN_0F5E_P_3) },
7c52e0e8
L
5061 },
5062
592a252b 5063 /* PREFIX_VEX_0F5F */
7c52e0e8 5064 {
592a252b
L
5065 { VEX_W_TABLE (VEX_W_0F5F_P_0) },
5066 { VEX_LEN_TABLE (VEX_LEN_0F5F_P_1) },
5067 { VEX_W_TABLE (VEX_W_0F5F_P_2) },
5068 { VEX_LEN_TABLE (VEX_LEN_0F5F_P_3) },
7c52e0e8
L
5069 },
5070
592a252b 5071 /* PREFIX_VEX_0F60 */
7c52e0e8 5072 {
592d1631
L
5073 { Bad_Opcode },
5074 { Bad_Opcode },
6c30d220 5075 { VEX_W_TABLE (VEX_W_0F60_P_2) },
7c52e0e8
L
5076 },
5077
592a252b 5078 /* PREFIX_VEX_0F61 */
7c52e0e8 5079 {
592d1631
L
5080 { Bad_Opcode },
5081 { Bad_Opcode },
6c30d220 5082 { VEX_W_TABLE (VEX_W_0F61_P_2) },
7c52e0e8
L
5083 },
5084
592a252b 5085 /* PREFIX_VEX_0F62 */
7c52e0e8 5086 {
592d1631
L
5087 { Bad_Opcode },
5088 { Bad_Opcode },
6c30d220 5089 { VEX_W_TABLE (VEX_W_0F62_P_2) },
7c52e0e8
L
5090 },
5091
592a252b 5092 /* PREFIX_VEX_0F63 */
7c52e0e8 5093 {
592d1631
L
5094 { Bad_Opcode },
5095 { Bad_Opcode },
6c30d220 5096 { VEX_W_TABLE (VEX_W_0F63_P_2) },
7c52e0e8
L
5097 },
5098
592a252b 5099 /* PREFIX_VEX_0F64 */
7c52e0e8 5100 {
592d1631
L
5101 { Bad_Opcode },
5102 { Bad_Opcode },
6c30d220 5103 { VEX_W_TABLE (VEX_W_0F64_P_2) },
7c52e0e8
L
5104 },
5105
592a252b 5106 /* PREFIX_VEX_0F65 */
7c52e0e8 5107 {
592d1631
L
5108 { Bad_Opcode },
5109 { Bad_Opcode },
6c30d220 5110 { VEX_W_TABLE (VEX_W_0F65_P_2) },
7c52e0e8
L
5111 },
5112
592a252b 5113 /* PREFIX_VEX_0F66 */
7c52e0e8 5114 {
592d1631
L
5115 { Bad_Opcode },
5116 { Bad_Opcode },
6c30d220 5117 { VEX_W_TABLE (VEX_W_0F66_P_2) },
7c52e0e8 5118 },
6439fc28 5119
592a252b 5120 /* PREFIX_VEX_0F67 */
331d2d0d 5121 {
592d1631
L
5122 { Bad_Opcode },
5123 { Bad_Opcode },
6c30d220 5124 { VEX_W_TABLE (VEX_W_0F67_P_2) },
c0f3af97
L
5125 },
5126
592a252b 5127 /* PREFIX_VEX_0F68 */
c0f3af97 5128 {
592d1631
L
5129 { Bad_Opcode },
5130 { Bad_Opcode },
6c30d220 5131 { VEX_W_TABLE (VEX_W_0F68_P_2) },
c0f3af97
L
5132 },
5133
592a252b 5134 /* PREFIX_VEX_0F69 */
c0f3af97 5135 {
592d1631
L
5136 { Bad_Opcode },
5137 { Bad_Opcode },
6c30d220 5138 { VEX_W_TABLE (VEX_W_0F69_P_2) },
c0f3af97
L
5139 },
5140
592a252b 5141 /* PREFIX_VEX_0F6A */
c0f3af97 5142 {
592d1631
L
5143 { Bad_Opcode },
5144 { Bad_Opcode },
6c30d220 5145 { VEX_W_TABLE (VEX_W_0F6A_P_2) },
c0f3af97
L
5146 },
5147
592a252b 5148 /* PREFIX_VEX_0F6B */
c0f3af97 5149 {
592d1631
L
5150 { Bad_Opcode },
5151 { Bad_Opcode },
6c30d220 5152 { VEX_W_TABLE (VEX_W_0F6B_P_2) },
c0f3af97
L
5153 },
5154
592a252b 5155 /* PREFIX_VEX_0F6C */
c0f3af97 5156 {
592d1631
L
5157 { Bad_Opcode },
5158 { Bad_Opcode },
6c30d220 5159 { VEX_W_TABLE (VEX_W_0F6C_P_2) },
c0f3af97
L
5160 },
5161
592a252b 5162 /* PREFIX_VEX_0F6D */
c0f3af97 5163 {
592d1631
L
5164 { Bad_Opcode },
5165 { Bad_Opcode },
6c30d220 5166 { VEX_W_TABLE (VEX_W_0F6D_P_2) },
c0f3af97
L
5167 },
5168
592a252b 5169 /* PREFIX_VEX_0F6E */
c0f3af97 5170 {
592d1631
L
5171 { Bad_Opcode },
5172 { Bad_Opcode },
592a252b 5173 { VEX_LEN_TABLE (VEX_LEN_0F6E_P_2) },
c0f3af97
L
5174 },
5175
592a252b 5176 /* PREFIX_VEX_0F6F */
c0f3af97 5177 {
592d1631 5178 { Bad_Opcode },
592a252b
L
5179 { VEX_W_TABLE (VEX_W_0F6F_P_1) },
5180 { VEX_W_TABLE (VEX_W_0F6F_P_2) },
c0f3af97
L
5181 },
5182
592a252b 5183 /* PREFIX_VEX_0F70 */
c0f3af97 5184 {
592d1631 5185 { Bad_Opcode },
6c30d220
L
5186 { VEX_W_TABLE (VEX_W_0F70_P_1) },
5187 { VEX_W_TABLE (VEX_W_0F70_P_2) },
5188 { VEX_W_TABLE (VEX_W_0F70_P_3) },
c0f3af97
L
5189 },
5190
592a252b 5191 /* PREFIX_VEX_0F71_REG_2 */
c0f3af97 5192 {
592d1631
L
5193 { Bad_Opcode },
5194 { Bad_Opcode },
6c30d220 5195 { VEX_W_TABLE (VEX_W_0F71_R_2_P_2) },
c0f3af97
L
5196 },
5197
592a252b 5198 /* PREFIX_VEX_0F71_REG_4 */
c0f3af97 5199 {
592d1631
L
5200 { Bad_Opcode },
5201 { Bad_Opcode },
6c30d220 5202 { VEX_W_TABLE (VEX_W_0F71_R_4_P_2) },
c0f3af97
L
5203 },
5204
592a252b 5205 /* PREFIX_VEX_0F71_REG_6 */
c0f3af97 5206 {
592d1631
L
5207 { Bad_Opcode },
5208 { Bad_Opcode },
6c30d220 5209 { VEX_W_TABLE (VEX_W_0F71_R_6_P_2) },
c0f3af97
L
5210 },
5211
592a252b 5212 /* PREFIX_VEX_0F72_REG_2 */
c0f3af97 5213 {
592d1631
L
5214 { Bad_Opcode },
5215 { Bad_Opcode },
6c30d220 5216 { VEX_W_TABLE (VEX_W_0F72_R_2_P_2) },
c0f3af97
L
5217 },
5218
592a252b 5219 /* PREFIX_VEX_0F72_REG_4 */
c0f3af97 5220 {
592d1631
L
5221 { Bad_Opcode },
5222 { Bad_Opcode },
6c30d220 5223 { VEX_W_TABLE (VEX_W_0F72_R_4_P_2) },
c0f3af97
L
5224 },
5225
592a252b 5226 /* PREFIX_VEX_0F72_REG_6 */
c0f3af97 5227 {
592d1631
L
5228 { Bad_Opcode },
5229 { Bad_Opcode },
6c30d220 5230 { VEX_W_TABLE (VEX_W_0F72_R_6_P_2) },
c0f3af97
L
5231 },
5232
592a252b 5233 /* PREFIX_VEX_0F73_REG_2 */
c0f3af97 5234 {
592d1631
L
5235 { Bad_Opcode },
5236 { Bad_Opcode },
6c30d220 5237 { VEX_W_TABLE (VEX_W_0F73_R_2_P_2) },
c0f3af97
L
5238 },
5239
592a252b 5240 /* PREFIX_VEX_0F73_REG_3 */
c0f3af97 5241 {
592d1631
L
5242 { Bad_Opcode },
5243 { Bad_Opcode },
6c30d220 5244 { VEX_W_TABLE (VEX_W_0F73_R_3_P_2) },
c0f3af97
L
5245 },
5246
592a252b 5247 /* PREFIX_VEX_0F73_REG_6 */
c0f3af97 5248 {
592d1631
L
5249 { Bad_Opcode },
5250 { Bad_Opcode },
6c30d220 5251 { VEX_W_TABLE (VEX_W_0F73_R_6_P_2) },
c0f3af97
L
5252 },
5253
592a252b 5254 /* PREFIX_VEX_0F73_REG_7 */
c0f3af97 5255 {
592d1631
L
5256 { Bad_Opcode },
5257 { Bad_Opcode },
6c30d220 5258 { VEX_W_TABLE (VEX_W_0F73_R_7_P_2) },
c0f3af97
L
5259 },
5260
592a252b 5261 /* PREFIX_VEX_0F74 */
c0f3af97 5262 {
592d1631
L
5263 { Bad_Opcode },
5264 { Bad_Opcode },
6c30d220 5265 { VEX_W_TABLE (VEX_W_0F74_P_2) },
c0f3af97
L
5266 },
5267
592a252b 5268 /* PREFIX_VEX_0F75 */
c0f3af97 5269 {
592d1631
L
5270 { Bad_Opcode },
5271 { Bad_Opcode },
6c30d220 5272 { VEX_W_TABLE (VEX_W_0F75_P_2) },
c0f3af97
L
5273 },
5274
592a252b 5275 /* PREFIX_VEX_0F76 */
c0f3af97 5276 {
592d1631
L
5277 { Bad_Opcode },
5278 { Bad_Opcode },
6c30d220 5279 { VEX_W_TABLE (VEX_W_0F76_P_2) },
c0f3af97
L
5280 },
5281
592a252b 5282 /* PREFIX_VEX_0F77 */
c0f3af97 5283 {
592a252b 5284 { VEX_W_TABLE (VEX_W_0F77_P_0) },
c0f3af97
L
5285 },
5286
592a252b 5287 /* PREFIX_VEX_0F7C */
c0f3af97 5288 {
592d1631
L
5289 { Bad_Opcode },
5290 { Bad_Opcode },
592a252b
L
5291 { VEX_W_TABLE (VEX_W_0F7C_P_2) },
5292 { VEX_W_TABLE (VEX_W_0F7C_P_3) },
c0f3af97
L
5293 },
5294
592a252b 5295 /* PREFIX_VEX_0F7D */
c0f3af97 5296 {
592d1631
L
5297 { Bad_Opcode },
5298 { Bad_Opcode },
592a252b
L
5299 { VEX_W_TABLE (VEX_W_0F7D_P_2) },
5300 { VEX_W_TABLE (VEX_W_0F7D_P_3) },
c0f3af97
L
5301 },
5302
592a252b 5303 /* PREFIX_VEX_0F7E */
c0f3af97 5304 {
592d1631 5305 { Bad_Opcode },
592a252b
L
5306 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_1) },
5307 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_2) },
c0f3af97
L
5308 },
5309
592a252b 5310 /* PREFIX_VEX_0F7F */
c0f3af97 5311 {
592d1631 5312 { Bad_Opcode },
592a252b
L
5313 { VEX_W_TABLE (VEX_W_0F7F_P_1) },
5314 { VEX_W_TABLE (VEX_W_0F7F_P_2) },
c0f3af97
L
5315 },
5316
43234a1e
L
5317 /* PREFIX_VEX_0F90 */
5318 {
5319 { VEX_LEN_TABLE (VEX_LEN_0F90_P_0) },
1ba585e8
IT
5320 { Bad_Opcode },
5321 { VEX_LEN_TABLE (VEX_LEN_0F90_P_2) },
43234a1e
L
5322 },
5323
5324 /* PREFIX_VEX_0F91 */
5325 {
5326 { VEX_LEN_TABLE (VEX_LEN_0F91_P_0) },
1ba585e8
IT
5327 { Bad_Opcode },
5328 { VEX_LEN_TABLE (VEX_LEN_0F91_P_2) },
43234a1e
L
5329 },
5330
5331 /* PREFIX_VEX_0F92 */
5332 {
5333 { VEX_LEN_TABLE (VEX_LEN_0F92_P_0) },
1ba585e8 5334 { Bad_Opcode },
90a915bf 5335 { VEX_LEN_TABLE (VEX_LEN_0F92_P_2) },
1ba585e8 5336 { VEX_LEN_TABLE (VEX_LEN_0F92_P_3) },
43234a1e
L
5337 },
5338
5339 /* PREFIX_VEX_0F93 */
5340 {
5341 { VEX_LEN_TABLE (VEX_LEN_0F93_P_0) },
1ba585e8 5342 { Bad_Opcode },
90a915bf 5343 { VEX_LEN_TABLE (VEX_LEN_0F93_P_2) },
1ba585e8 5344 { VEX_LEN_TABLE (VEX_LEN_0F93_P_3) },
43234a1e
L
5345 },
5346
5347 /* PREFIX_VEX_0F98 */
5348 {
5349 { VEX_LEN_TABLE (VEX_LEN_0F98_P_0) },
1ba585e8
IT
5350 { Bad_Opcode },
5351 { VEX_LEN_TABLE (VEX_LEN_0F98_P_2) },
5352 },
5353
5354 /* PREFIX_VEX_0F99 */
5355 {
5356 { VEX_LEN_TABLE (VEX_LEN_0F99_P_0) },
5357 { Bad_Opcode },
5358 { VEX_LEN_TABLE (VEX_LEN_0F99_P_2) },
43234a1e
L
5359 },
5360
592a252b 5361 /* PREFIX_VEX_0FC2 */
c0f3af97 5362 {
592a252b
L
5363 { VEX_W_TABLE (VEX_W_0FC2_P_0) },
5364 { VEX_LEN_TABLE (VEX_LEN_0FC2_P_1) },
5365 { VEX_W_TABLE (VEX_W_0FC2_P_2) },
5366 { VEX_LEN_TABLE (VEX_LEN_0FC2_P_3) },
c0f3af97
L
5367 },
5368
592a252b 5369 /* PREFIX_VEX_0FC4 */
c0f3af97 5370 {
592d1631
L
5371 { Bad_Opcode },
5372 { Bad_Opcode },
592a252b 5373 { VEX_LEN_TABLE (VEX_LEN_0FC4_P_2) },
c0f3af97
L
5374 },
5375
592a252b 5376 /* PREFIX_VEX_0FC5 */
c0f3af97 5377 {
592d1631
L
5378 { Bad_Opcode },
5379 { Bad_Opcode },
592a252b 5380 { VEX_LEN_TABLE (VEX_LEN_0FC5_P_2) },
c0f3af97
L
5381 },
5382
592a252b 5383 /* PREFIX_VEX_0FD0 */
c0f3af97 5384 {
592d1631
L
5385 { Bad_Opcode },
5386 { Bad_Opcode },
592a252b
L
5387 { VEX_W_TABLE (VEX_W_0FD0_P_2) },
5388 { VEX_W_TABLE (VEX_W_0FD0_P_3) },
c0f3af97
L
5389 },
5390
592a252b 5391 /* PREFIX_VEX_0FD1 */
c0f3af97 5392 {
592d1631
L
5393 { Bad_Opcode },
5394 { Bad_Opcode },
6c30d220 5395 { VEX_W_TABLE (VEX_W_0FD1_P_2) },
c0f3af97
L
5396 },
5397
592a252b 5398 /* PREFIX_VEX_0FD2 */
c0f3af97 5399 {
592d1631
L
5400 { Bad_Opcode },
5401 { Bad_Opcode },
6c30d220 5402 { VEX_W_TABLE (VEX_W_0FD2_P_2) },
c0f3af97
L
5403 },
5404
592a252b 5405 /* PREFIX_VEX_0FD3 */
c0f3af97 5406 {
592d1631
L
5407 { Bad_Opcode },
5408 { Bad_Opcode },
6c30d220 5409 { VEX_W_TABLE (VEX_W_0FD3_P_2) },
c0f3af97
L
5410 },
5411
592a252b 5412 /* PREFIX_VEX_0FD4 */
c0f3af97 5413 {
592d1631
L
5414 { Bad_Opcode },
5415 { Bad_Opcode },
6c30d220 5416 { VEX_W_TABLE (VEX_W_0FD4_P_2) },
c0f3af97
L
5417 },
5418
592a252b 5419 /* PREFIX_VEX_0FD5 */
c0f3af97 5420 {
592d1631
L
5421 { Bad_Opcode },
5422 { Bad_Opcode },
6c30d220 5423 { VEX_W_TABLE (VEX_W_0FD5_P_2) },
c0f3af97
L
5424 },
5425
592a252b 5426 /* PREFIX_VEX_0FD6 */
c0f3af97 5427 {
592d1631
L
5428 { Bad_Opcode },
5429 { Bad_Opcode },
592a252b 5430 { VEX_LEN_TABLE (VEX_LEN_0FD6_P_2) },
c0f3af97
L
5431 },
5432
592a252b 5433 /* PREFIX_VEX_0FD7 */
c0f3af97 5434 {
592d1631
L
5435 { Bad_Opcode },
5436 { Bad_Opcode },
592a252b 5437 { MOD_TABLE (MOD_VEX_0FD7_PREFIX_2) },
c0f3af97
L
5438 },
5439
592a252b 5440 /* PREFIX_VEX_0FD8 */
c0f3af97 5441 {
592d1631
L
5442 { Bad_Opcode },
5443 { Bad_Opcode },
6c30d220 5444 { VEX_W_TABLE (VEX_W_0FD8_P_2) },
c0f3af97
L
5445 },
5446
592a252b 5447 /* PREFIX_VEX_0FD9 */
c0f3af97 5448 {
592d1631
L
5449 { Bad_Opcode },
5450 { Bad_Opcode },
6c30d220 5451 { VEX_W_TABLE (VEX_W_0FD9_P_2) },
c0f3af97
L
5452 },
5453
592a252b 5454 /* PREFIX_VEX_0FDA */
c0f3af97 5455 {
592d1631
L
5456 { Bad_Opcode },
5457 { Bad_Opcode },
6c30d220 5458 { VEX_W_TABLE (VEX_W_0FDA_P_2) },
c0f3af97
L
5459 },
5460
592a252b 5461 /* PREFIX_VEX_0FDB */
c0f3af97 5462 {
592d1631
L
5463 { Bad_Opcode },
5464 { Bad_Opcode },
6c30d220 5465 { VEX_W_TABLE (VEX_W_0FDB_P_2) },
c0f3af97
L
5466 },
5467
592a252b 5468 /* PREFIX_VEX_0FDC */
c0f3af97 5469 {
592d1631
L
5470 { Bad_Opcode },
5471 { Bad_Opcode },
6c30d220 5472 { VEX_W_TABLE (VEX_W_0FDC_P_2) },
c0f3af97
L
5473 },
5474
592a252b 5475 /* PREFIX_VEX_0FDD */
c0f3af97 5476 {
592d1631
L
5477 { Bad_Opcode },
5478 { Bad_Opcode },
6c30d220 5479 { VEX_W_TABLE (VEX_W_0FDD_P_2) },
c0f3af97
L
5480 },
5481
592a252b 5482 /* PREFIX_VEX_0FDE */
c0f3af97 5483 {
592d1631
L
5484 { Bad_Opcode },
5485 { Bad_Opcode },
6c30d220 5486 { VEX_W_TABLE (VEX_W_0FDE_P_2) },
c0f3af97
L
5487 },
5488
592a252b 5489 /* PREFIX_VEX_0FDF */
c0f3af97 5490 {
592d1631
L
5491 { Bad_Opcode },
5492 { Bad_Opcode },
6c30d220 5493 { VEX_W_TABLE (VEX_W_0FDF_P_2) },
c0f3af97
L
5494 },
5495
592a252b 5496 /* PREFIX_VEX_0FE0 */
c0f3af97 5497 {
592d1631
L
5498 { Bad_Opcode },
5499 { Bad_Opcode },
6c30d220 5500 { VEX_W_TABLE (VEX_W_0FE0_P_2) },
c0f3af97
L
5501 },
5502
592a252b 5503 /* PREFIX_VEX_0FE1 */
c0f3af97 5504 {
592d1631
L
5505 { Bad_Opcode },
5506 { Bad_Opcode },
6c30d220 5507 { VEX_W_TABLE (VEX_W_0FE1_P_2) },
c0f3af97
L
5508 },
5509
592a252b 5510 /* PREFIX_VEX_0FE2 */
c0f3af97 5511 {
592d1631
L
5512 { Bad_Opcode },
5513 { Bad_Opcode },
6c30d220 5514 { VEX_W_TABLE (VEX_W_0FE2_P_2) },
c0f3af97
L
5515 },
5516
592a252b 5517 /* PREFIX_VEX_0FE3 */
c0f3af97 5518 {
592d1631
L
5519 { Bad_Opcode },
5520 { Bad_Opcode },
6c30d220 5521 { VEX_W_TABLE (VEX_W_0FE3_P_2) },
c0f3af97
L
5522 },
5523
592a252b 5524 /* PREFIX_VEX_0FE4 */
c0f3af97 5525 {
592d1631
L
5526 { Bad_Opcode },
5527 { Bad_Opcode },
6c30d220 5528 { VEX_W_TABLE (VEX_W_0FE4_P_2) },
c0f3af97
L
5529 },
5530
592a252b 5531 /* PREFIX_VEX_0FE5 */
c0f3af97 5532 {
592d1631
L
5533 { Bad_Opcode },
5534 { Bad_Opcode },
6c30d220 5535 { VEX_W_TABLE (VEX_W_0FE5_P_2) },
c0f3af97
L
5536 },
5537
592a252b 5538 /* PREFIX_VEX_0FE6 */
c0f3af97 5539 {
592d1631 5540 { Bad_Opcode },
592a252b
L
5541 { VEX_W_TABLE (VEX_W_0FE6_P_1) },
5542 { VEX_W_TABLE (VEX_W_0FE6_P_2) },
5543 { VEX_W_TABLE (VEX_W_0FE6_P_3) },
c0f3af97
L
5544 },
5545
592a252b 5546 /* PREFIX_VEX_0FE7 */
c0f3af97 5547 {
592d1631
L
5548 { Bad_Opcode },
5549 { Bad_Opcode },
592a252b 5550 { MOD_TABLE (MOD_VEX_0FE7_PREFIX_2) },
c0f3af97
L
5551 },
5552
592a252b 5553 /* PREFIX_VEX_0FE8 */
c0f3af97 5554 {
592d1631
L
5555 { Bad_Opcode },
5556 { Bad_Opcode },
6c30d220 5557 { VEX_W_TABLE (VEX_W_0FE8_P_2) },
c0f3af97
L
5558 },
5559
592a252b 5560 /* PREFIX_VEX_0FE9 */
c0f3af97 5561 {
592d1631
L
5562 { Bad_Opcode },
5563 { Bad_Opcode },
6c30d220 5564 { VEX_W_TABLE (VEX_W_0FE9_P_2) },
c0f3af97
L
5565 },
5566
592a252b 5567 /* PREFIX_VEX_0FEA */
c0f3af97 5568 {
592d1631
L
5569 { Bad_Opcode },
5570 { Bad_Opcode },
6c30d220 5571 { VEX_W_TABLE (VEX_W_0FEA_P_2) },
c0f3af97
L
5572 },
5573
592a252b 5574 /* PREFIX_VEX_0FEB */
c0f3af97 5575 {
592d1631
L
5576 { Bad_Opcode },
5577 { Bad_Opcode },
6c30d220 5578 { VEX_W_TABLE (VEX_W_0FEB_P_2) },
c0f3af97
L
5579 },
5580
592a252b 5581 /* PREFIX_VEX_0FEC */
c0f3af97 5582 {
592d1631
L
5583 { Bad_Opcode },
5584 { Bad_Opcode },
6c30d220 5585 { VEX_W_TABLE (VEX_W_0FEC_P_2) },
c0f3af97
L
5586 },
5587
592a252b 5588 /* PREFIX_VEX_0FED */
c0f3af97 5589 {
592d1631
L
5590 { Bad_Opcode },
5591 { Bad_Opcode },
6c30d220 5592 { VEX_W_TABLE (VEX_W_0FED_P_2) },
c0f3af97
L
5593 },
5594
592a252b 5595 /* PREFIX_VEX_0FEE */
c0f3af97 5596 {
592d1631
L
5597 { Bad_Opcode },
5598 { Bad_Opcode },
6c30d220 5599 { VEX_W_TABLE (VEX_W_0FEE_P_2) },
c0f3af97
L
5600 },
5601
592a252b 5602 /* PREFIX_VEX_0FEF */
c0f3af97 5603 {
592d1631
L
5604 { Bad_Opcode },
5605 { Bad_Opcode },
6c30d220 5606 { VEX_W_TABLE (VEX_W_0FEF_P_2) },
c0f3af97
L
5607 },
5608
592a252b 5609 /* PREFIX_VEX_0FF0 */
c0f3af97 5610 {
592d1631
L
5611 { Bad_Opcode },
5612 { Bad_Opcode },
5613 { Bad_Opcode },
592a252b 5614 { MOD_TABLE (MOD_VEX_0FF0_PREFIX_3) },
c0f3af97
L
5615 },
5616
592a252b 5617 /* PREFIX_VEX_0FF1 */
c0f3af97 5618 {
592d1631
L
5619 { Bad_Opcode },
5620 { Bad_Opcode },
6c30d220 5621 { VEX_W_TABLE (VEX_W_0FF1_P_2) },
c0f3af97
L
5622 },
5623
592a252b 5624 /* PREFIX_VEX_0FF2 */
c0f3af97 5625 {
592d1631
L
5626 { Bad_Opcode },
5627 { Bad_Opcode },
6c30d220 5628 { VEX_W_TABLE (VEX_W_0FF2_P_2) },
c0f3af97
L
5629 },
5630
592a252b 5631 /* PREFIX_VEX_0FF3 */
c0f3af97 5632 {
592d1631
L
5633 { Bad_Opcode },
5634 { Bad_Opcode },
6c30d220 5635 { VEX_W_TABLE (VEX_W_0FF3_P_2) },
c0f3af97
L
5636 },
5637
592a252b 5638 /* PREFIX_VEX_0FF4 */
c0f3af97 5639 {
592d1631
L
5640 { Bad_Opcode },
5641 { Bad_Opcode },
6c30d220 5642 { VEX_W_TABLE (VEX_W_0FF4_P_2) },
c0f3af97
L
5643 },
5644
592a252b 5645 /* PREFIX_VEX_0FF5 */
c0f3af97 5646 {
592d1631
L
5647 { Bad_Opcode },
5648 { Bad_Opcode },
6c30d220 5649 { VEX_W_TABLE (VEX_W_0FF5_P_2) },
c0f3af97
L
5650 },
5651
592a252b 5652 /* PREFIX_VEX_0FF6 */
c0f3af97 5653 {
592d1631
L
5654 { Bad_Opcode },
5655 { Bad_Opcode },
6c30d220 5656 { VEX_W_TABLE (VEX_W_0FF6_P_2) },
c0f3af97
L
5657 },
5658
592a252b 5659 /* PREFIX_VEX_0FF7 */
c0f3af97 5660 {
592d1631
L
5661 { Bad_Opcode },
5662 { Bad_Opcode },
592a252b 5663 { VEX_LEN_TABLE (VEX_LEN_0FF7_P_2) },
c0f3af97
L
5664 },
5665
592a252b 5666 /* PREFIX_VEX_0FF8 */
c0f3af97 5667 {
592d1631
L
5668 { Bad_Opcode },
5669 { Bad_Opcode },
6c30d220 5670 { VEX_W_TABLE (VEX_W_0FF8_P_2) },
c0f3af97
L
5671 },
5672
592a252b 5673 /* PREFIX_VEX_0FF9 */
c0f3af97 5674 {
592d1631
L
5675 { Bad_Opcode },
5676 { Bad_Opcode },
6c30d220 5677 { VEX_W_TABLE (VEX_W_0FF9_P_2) },
c0f3af97
L
5678 },
5679
592a252b 5680 /* PREFIX_VEX_0FFA */
c0f3af97 5681 {
592d1631
L
5682 { Bad_Opcode },
5683 { Bad_Opcode },
6c30d220 5684 { VEX_W_TABLE (VEX_W_0FFA_P_2) },
c0f3af97
L
5685 },
5686
592a252b 5687 /* PREFIX_VEX_0FFB */
c0f3af97 5688 {
592d1631
L
5689 { Bad_Opcode },
5690 { Bad_Opcode },
6c30d220 5691 { VEX_W_TABLE (VEX_W_0FFB_P_2) },
c0f3af97
L
5692 },
5693
592a252b 5694 /* PREFIX_VEX_0FFC */
c0f3af97 5695 {
592d1631
L
5696 { Bad_Opcode },
5697 { Bad_Opcode },
6c30d220 5698 { VEX_W_TABLE (VEX_W_0FFC_P_2) },
c0f3af97
L
5699 },
5700
592a252b 5701 /* PREFIX_VEX_0FFD */
c0f3af97 5702 {
592d1631
L
5703 { Bad_Opcode },
5704 { Bad_Opcode },
6c30d220 5705 { VEX_W_TABLE (VEX_W_0FFD_P_2) },
c0f3af97
L
5706 },
5707
592a252b 5708 /* PREFIX_VEX_0FFE */
c0f3af97 5709 {
592d1631
L
5710 { Bad_Opcode },
5711 { Bad_Opcode },
6c30d220 5712 { VEX_W_TABLE (VEX_W_0FFE_P_2) },
c0f3af97
L
5713 },
5714
592a252b 5715 /* PREFIX_VEX_0F3800 */
c0f3af97 5716 {
592d1631
L
5717 { Bad_Opcode },
5718 { Bad_Opcode },
6c30d220 5719 { VEX_W_TABLE (VEX_W_0F3800_P_2) },
c0f3af97
L
5720 },
5721
592a252b 5722 /* PREFIX_VEX_0F3801 */
c0f3af97 5723 {
592d1631
L
5724 { Bad_Opcode },
5725 { Bad_Opcode },
6c30d220 5726 { VEX_W_TABLE (VEX_W_0F3801_P_2) },
c0f3af97
L
5727 },
5728
592a252b 5729 /* PREFIX_VEX_0F3802 */
c0f3af97 5730 {
592d1631
L
5731 { Bad_Opcode },
5732 { Bad_Opcode },
6c30d220 5733 { VEX_W_TABLE (VEX_W_0F3802_P_2) },
c0f3af97
L
5734 },
5735
592a252b 5736 /* PREFIX_VEX_0F3803 */
c0f3af97 5737 {
592d1631
L
5738 { Bad_Opcode },
5739 { Bad_Opcode },
6c30d220 5740 { VEX_W_TABLE (VEX_W_0F3803_P_2) },
c0f3af97
L
5741 },
5742
592a252b 5743 /* PREFIX_VEX_0F3804 */
c0f3af97 5744 {
592d1631
L
5745 { Bad_Opcode },
5746 { Bad_Opcode },
6c30d220 5747 { VEX_W_TABLE (VEX_W_0F3804_P_2) },
c0f3af97
L
5748 },
5749
592a252b 5750 /* PREFIX_VEX_0F3805 */
c0f3af97 5751 {
592d1631
L
5752 { Bad_Opcode },
5753 { Bad_Opcode },
6c30d220 5754 { VEX_W_TABLE (VEX_W_0F3805_P_2) },
c0f3af97
L
5755 },
5756
592a252b 5757 /* PREFIX_VEX_0F3806 */
c0f3af97 5758 {
592d1631
L
5759 { Bad_Opcode },
5760 { Bad_Opcode },
6c30d220 5761 { VEX_W_TABLE (VEX_W_0F3806_P_2) },
c0f3af97
L
5762 },
5763
592a252b 5764 /* PREFIX_VEX_0F3807 */
c0f3af97 5765 {
592d1631
L
5766 { Bad_Opcode },
5767 { Bad_Opcode },
6c30d220 5768 { VEX_W_TABLE (VEX_W_0F3807_P_2) },
c0f3af97
L
5769 },
5770
592a252b 5771 /* PREFIX_VEX_0F3808 */
c0f3af97 5772 {
592d1631
L
5773 { Bad_Opcode },
5774 { Bad_Opcode },
6c30d220 5775 { VEX_W_TABLE (VEX_W_0F3808_P_2) },
c0f3af97
L
5776 },
5777
592a252b 5778 /* PREFIX_VEX_0F3809 */
c0f3af97 5779 {
592d1631
L
5780 { Bad_Opcode },
5781 { Bad_Opcode },
6c30d220 5782 { VEX_W_TABLE (VEX_W_0F3809_P_2) },
c0f3af97
L
5783 },
5784
592a252b 5785 /* PREFIX_VEX_0F380A */
c0f3af97 5786 {
592d1631
L
5787 { Bad_Opcode },
5788 { Bad_Opcode },
6c30d220 5789 { VEX_W_TABLE (VEX_W_0F380A_P_2) },
c0f3af97
L
5790 },
5791
592a252b 5792 /* PREFIX_VEX_0F380B */
c0f3af97 5793 {
592d1631
L
5794 { Bad_Opcode },
5795 { Bad_Opcode },
6c30d220 5796 { VEX_W_TABLE (VEX_W_0F380B_P_2) },
c0f3af97
L
5797 },
5798
592a252b 5799 /* PREFIX_VEX_0F380C */
c0f3af97 5800 {
592d1631
L
5801 { Bad_Opcode },
5802 { Bad_Opcode },
592a252b 5803 { VEX_W_TABLE (VEX_W_0F380C_P_2) },
c0f3af97
L
5804 },
5805
592a252b 5806 /* PREFIX_VEX_0F380D */
c0f3af97 5807 {
592d1631
L
5808 { Bad_Opcode },
5809 { Bad_Opcode },
592a252b 5810 { VEX_W_TABLE (VEX_W_0F380D_P_2) },
c0f3af97
L
5811 },
5812
592a252b 5813 /* PREFIX_VEX_0F380E */
c0f3af97 5814 {
592d1631
L
5815 { Bad_Opcode },
5816 { Bad_Opcode },
592a252b 5817 { VEX_W_TABLE (VEX_W_0F380E_P_2) },
c0f3af97
L
5818 },
5819
592a252b 5820 /* PREFIX_VEX_0F380F */
c0f3af97 5821 {
592d1631
L
5822 { Bad_Opcode },
5823 { Bad_Opcode },
592a252b 5824 { VEX_W_TABLE (VEX_W_0F380F_P_2) },
c0f3af97
L
5825 },
5826
592a252b 5827 /* PREFIX_VEX_0F3813 */
c7b8aa3a
L
5828 {
5829 { Bad_Opcode },
5830 { Bad_Opcode },
bf890a93 5831 { "vcvtph2ps", { XM, EXxmmq }, 0 },
c7b8aa3a
L
5832 },
5833
6c30d220
L
5834 /* PREFIX_VEX_0F3816 */
5835 {
5836 { Bad_Opcode },
5837 { Bad_Opcode },
5838 { VEX_LEN_TABLE (VEX_LEN_0F3816_P_2) },
5839 },
5840
592a252b 5841 /* PREFIX_VEX_0F3817 */
c0f3af97 5842 {
592d1631
L
5843 { Bad_Opcode },
5844 { Bad_Opcode },
592a252b 5845 { VEX_W_TABLE (VEX_W_0F3817_P_2) },
c0f3af97
L
5846 },
5847
592a252b 5848 /* PREFIX_VEX_0F3818 */
c0f3af97 5849 {
592d1631
L
5850 { Bad_Opcode },
5851 { Bad_Opcode },
6c30d220 5852 { VEX_W_TABLE (VEX_W_0F3818_P_2) },
c0f3af97
L
5853 },
5854
592a252b 5855 /* PREFIX_VEX_0F3819 */
c0f3af97 5856 {
592d1631
L
5857 { Bad_Opcode },
5858 { Bad_Opcode },
6c30d220 5859 { VEX_LEN_TABLE (VEX_LEN_0F3819_P_2) },
c0f3af97
L
5860 },
5861
592a252b 5862 /* PREFIX_VEX_0F381A */
c0f3af97 5863 {
592d1631
L
5864 { Bad_Opcode },
5865 { Bad_Opcode },
592a252b 5866 { MOD_TABLE (MOD_VEX_0F381A_PREFIX_2) },
c0f3af97
L
5867 },
5868
592a252b 5869 /* PREFIX_VEX_0F381C */
c0f3af97 5870 {
592d1631
L
5871 { Bad_Opcode },
5872 { Bad_Opcode },
6c30d220 5873 { VEX_W_TABLE (VEX_W_0F381C_P_2) },
c0f3af97
L
5874 },
5875
592a252b 5876 /* PREFIX_VEX_0F381D */
c0f3af97 5877 {
592d1631
L
5878 { Bad_Opcode },
5879 { Bad_Opcode },
6c30d220 5880 { VEX_W_TABLE (VEX_W_0F381D_P_2) },
c0f3af97
L
5881 },
5882
592a252b 5883 /* PREFIX_VEX_0F381E */
c0f3af97 5884 {
592d1631
L
5885 { Bad_Opcode },
5886 { Bad_Opcode },
6c30d220 5887 { VEX_W_TABLE (VEX_W_0F381E_P_2) },
c0f3af97
L
5888 },
5889
592a252b 5890 /* PREFIX_VEX_0F3820 */
c0f3af97 5891 {
592d1631
L
5892 { Bad_Opcode },
5893 { Bad_Opcode },
6c30d220 5894 { VEX_W_TABLE (VEX_W_0F3820_P_2) },
c0f3af97
L
5895 },
5896
592a252b 5897 /* PREFIX_VEX_0F3821 */
c0f3af97 5898 {
592d1631
L
5899 { Bad_Opcode },
5900 { Bad_Opcode },
6c30d220 5901 { VEX_W_TABLE (VEX_W_0F3821_P_2) },
c0f3af97
L
5902 },
5903
592a252b 5904 /* PREFIX_VEX_0F3822 */
c0f3af97 5905 {
592d1631
L
5906 { Bad_Opcode },
5907 { Bad_Opcode },
6c30d220 5908 { VEX_W_TABLE (VEX_W_0F3822_P_2) },
c0f3af97
L
5909 },
5910
592a252b 5911 /* PREFIX_VEX_0F3823 */
c0f3af97 5912 {
592d1631
L
5913 { Bad_Opcode },
5914 { Bad_Opcode },
6c30d220 5915 { VEX_W_TABLE (VEX_W_0F3823_P_2) },
c0f3af97
L
5916 },
5917
592a252b 5918 /* PREFIX_VEX_0F3824 */
c0f3af97 5919 {
592d1631
L
5920 { Bad_Opcode },
5921 { Bad_Opcode },
6c30d220 5922 { VEX_W_TABLE (VEX_W_0F3824_P_2) },
c0f3af97
L
5923 },
5924
592a252b 5925 /* PREFIX_VEX_0F3825 */
c0f3af97 5926 {
592d1631
L
5927 { Bad_Opcode },
5928 { Bad_Opcode },
6c30d220 5929 { VEX_W_TABLE (VEX_W_0F3825_P_2) },
c0f3af97
L
5930 },
5931
592a252b 5932 /* PREFIX_VEX_0F3828 */
c0f3af97 5933 {
592d1631
L
5934 { Bad_Opcode },
5935 { Bad_Opcode },
6c30d220 5936 { VEX_W_TABLE (VEX_W_0F3828_P_2) },
c0f3af97
L
5937 },
5938
592a252b 5939 /* PREFIX_VEX_0F3829 */
c0f3af97 5940 {
592d1631
L
5941 { Bad_Opcode },
5942 { Bad_Opcode },
6c30d220 5943 { VEX_W_TABLE (VEX_W_0F3829_P_2) },
c0f3af97
L
5944 },
5945
592a252b 5946 /* PREFIX_VEX_0F382A */
c0f3af97 5947 {
592d1631
L
5948 { Bad_Opcode },
5949 { Bad_Opcode },
592a252b 5950 { MOD_TABLE (MOD_VEX_0F382A_PREFIX_2) },
c0f3af97
L
5951 },
5952
592a252b 5953 /* PREFIX_VEX_0F382B */
c0f3af97 5954 {
592d1631
L
5955 { Bad_Opcode },
5956 { Bad_Opcode },
6c30d220 5957 { VEX_W_TABLE (VEX_W_0F382B_P_2) },
c0f3af97
L
5958 },
5959
592a252b 5960 /* PREFIX_VEX_0F382C */
c0f3af97 5961 {
592d1631
L
5962 { Bad_Opcode },
5963 { Bad_Opcode },
592a252b 5964 { MOD_TABLE (MOD_VEX_0F382C_PREFIX_2) },
c0f3af97
L
5965 },
5966
592a252b 5967 /* PREFIX_VEX_0F382D */
c0f3af97 5968 {
592d1631
L
5969 { Bad_Opcode },
5970 { Bad_Opcode },
592a252b 5971 { MOD_TABLE (MOD_VEX_0F382D_PREFIX_2) },
c0f3af97
L
5972 },
5973
592a252b 5974 /* PREFIX_VEX_0F382E */
c0f3af97 5975 {
592d1631
L
5976 { Bad_Opcode },
5977 { Bad_Opcode },
592a252b 5978 { MOD_TABLE (MOD_VEX_0F382E_PREFIX_2) },
c0f3af97
L
5979 },
5980
592a252b 5981 /* PREFIX_VEX_0F382F */
c0f3af97 5982 {
592d1631
L
5983 { Bad_Opcode },
5984 { Bad_Opcode },
592a252b 5985 { MOD_TABLE (MOD_VEX_0F382F_PREFIX_2) },
c0f3af97
L
5986 },
5987
592a252b 5988 /* PREFIX_VEX_0F3830 */
c0f3af97 5989 {
592d1631
L
5990 { Bad_Opcode },
5991 { Bad_Opcode },
6c30d220 5992 { VEX_W_TABLE (VEX_W_0F3830_P_2) },
c0f3af97
L
5993 },
5994
592a252b 5995 /* PREFIX_VEX_0F3831 */
c0f3af97 5996 {
592d1631
L
5997 { Bad_Opcode },
5998 { Bad_Opcode },
6c30d220 5999 { VEX_W_TABLE (VEX_W_0F3831_P_2) },
c0f3af97
L
6000 },
6001
592a252b 6002 /* PREFIX_VEX_0F3832 */
c0f3af97 6003 {
592d1631
L
6004 { Bad_Opcode },
6005 { Bad_Opcode },
6c30d220 6006 { VEX_W_TABLE (VEX_W_0F3832_P_2) },
c0f3af97
L
6007 },
6008
592a252b 6009 /* PREFIX_VEX_0F3833 */
c0f3af97 6010 {
592d1631
L
6011 { Bad_Opcode },
6012 { Bad_Opcode },
6c30d220 6013 { VEX_W_TABLE (VEX_W_0F3833_P_2) },
c0f3af97
L
6014 },
6015
592a252b 6016 /* PREFIX_VEX_0F3834 */
c0f3af97 6017 {
592d1631
L
6018 { Bad_Opcode },
6019 { Bad_Opcode },
6c30d220 6020 { VEX_W_TABLE (VEX_W_0F3834_P_2) },
c0f3af97
L
6021 },
6022
592a252b 6023 /* PREFIX_VEX_0F3835 */
c0f3af97 6024 {
592d1631
L
6025 { Bad_Opcode },
6026 { Bad_Opcode },
6c30d220
L
6027 { VEX_W_TABLE (VEX_W_0F3835_P_2) },
6028 },
6029
6030 /* PREFIX_VEX_0F3836 */
6031 {
6032 { Bad_Opcode },
6033 { Bad_Opcode },
6034 { VEX_LEN_TABLE (VEX_LEN_0F3836_P_2) },
c0f3af97
L
6035 },
6036
592a252b 6037 /* PREFIX_VEX_0F3837 */
c0f3af97 6038 {
592d1631
L
6039 { Bad_Opcode },
6040 { Bad_Opcode },
6c30d220 6041 { VEX_W_TABLE (VEX_W_0F3837_P_2) },
c0f3af97
L
6042 },
6043
592a252b 6044 /* PREFIX_VEX_0F3838 */
c0f3af97 6045 {
592d1631
L
6046 { Bad_Opcode },
6047 { Bad_Opcode },
6c30d220 6048 { VEX_W_TABLE (VEX_W_0F3838_P_2) },
c0f3af97
L
6049 },
6050
592a252b 6051 /* PREFIX_VEX_0F3839 */
c0f3af97 6052 {
592d1631
L
6053 { Bad_Opcode },
6054 { Bad_Opcode },
6c30d220 6055 { VEX_W_TABLE (VEX_W_0F3839_P_2) },
c0f3af97
L
6056 },
6057
592a252b 6058 /* PREFIX_VEX_0F383A */
c0f3af97 6059 {
592d1631
L
6060 { Bad_Opcode },
6061 { Bad_Opcode },
6c30d220 6062 { VEX_W_TABLE (VEX_W_0F383A_P_2) },
c0f3af97
L
6063 },
6064
592a252b 6065 /* PREFIX_VEX_0F383B */
c0f3af97 6066 {
592d1631
L
6067 { Bad_Opcode },
6068 { Bad_Opcode },
6c30d220 6069 { VEX_W_TABLE (VEX_W_0F383B_P_2) },
c0f3af97
L
6070 },
6071
592a252b 6072 /* PREFIX_VEX_0F383C */
c0f3af97 6073 {
592d1631
L
6074 { Bad_Opcode },
6075 { Bad_Opcode },
6c30d220 6076 { VEX_W_TABLE (VEX_W_0F383C_P_2) },
c0f3af97
L
6077 },
6078
592a252b 6079 /* PREFIX_VEX_0F383D */
c0f3af97 6080 {
592d1631
L
6081 { Bad_Opcode },
6082 { Bad_Opcode },
6c30d220 6083 { VEX_W_TABLE (VEX_W_0F383D_P_2) },
c0f3af97
L
6084 },
6085
592a252b 6086 /* PREFIX_VEX_0F383E */
c0f3af97 6087 {
592d1631
L
6088 { Bad_Opcode },
6089 { Bad_Opcode },
6c30d220 6090 { VEX_W_TABLE (VEX_W_0F383E_P_2) },
c0f3af97
L
6091 },
6092
592a252b 6093 /* PREFIX_VEX_0F383F */
c0f3af97 6094 {
592d1631
L
6095 { Bad_Opcode },
6096 { Bad_Opcode },
6c30d220 6097 { VEX_W_TABLE (VEX_W_0F383F_P_2) },
c0f3af97
L
6098 },
6099
592a252b 6100 /* PREFIX_VEX_0F3840 */
c0f3af97 6101 {
592d1631
L
6102 { Bad_Opcode },
6103 { Bad_Opcode },
6c30d220 6104 { VEX_W_TABLE (VEX_W_0F3840_P_2) },
c0f3af97
L
6105 },
6106
592a252b 6107 /* PREFIX_VEX_0F3841 */
c0f3af97 6108 {
592d1631
L
6109 { Bad_Opcode },
6110 { Bad_Opcode },
592a252b 6111 { VEX_LEN_TABLE (VEX_LEN_0F3841_P_2) },
c0f3af97
L
6112 },
6113
6c30d220
L
6114 /* PREFIX_VEX_0F3845 */
6115 {
6116 { Bad_Opcode },
6117 { Bad_Opcode },
bf890a93 6118 { "vpsrlv%LW", { XM, Vex, EXx }, 0 },
6c30d220
L
6119 },
6120
6121 /* PREFIX_VEX_0F3846 */
6122 {
6123 { Bad_Opcode },
6124 { Bad_Opcode },
6125 { VEX_W_TABLE (VEX_W_0F3846_P_2) },
6126 },
6127
6128 /* PREFIX_VEX_0F3847 */
6129 {
6130 { Bad_Opcode },
6131 { Bad_Opcode },
bf890a93 6132 { "vpsllv%LW", { XM, Vex, EXx }, 0 },
6c30d220
L
6133 },
6134
6135 /* PREFIX_VEX_0F3858 */
6136 {
6137 { Bad_Opcode },
6138 { Bad_Opcode },
6139 { VEX_W_TABLE (VEX_W_0F3858_P_2) },
6140 },
6141
6142 /* PREFIX_VEX_0F3859 */
6143 {
6144 { Bad_Opcode },
6145 { Bad_Opcode },
6146 { VEX_W_TABLE (VEX_W_0F3859_P_2) },
6147 },
6148
6149 /* PREFIX_VEX_0F385A */
6150 {
6151 { Bad_Opcode },
6152 { Bad_Opcode },
6153 { MOD_TABLE (MOD_VEX_0F385A_PREFIX_2) },
6154 },
6155
6156 /* PREFIX_VEX_0F3878 */
6157 {
6158 { Bad_Opcode },
6159 { Bad_Opcode },
6160 { VEX_W_TABLE (VEX_W_0F3878_P_2) },
6161 },
6162
6163 /* PREFIX_VEX_0F3879 */
6164 {
6165 { Bad_Opcode },
6166 { Bad_Opcode },
6167 { VEX_W_TABLE (VEX_W_0F3879_P_2) },
6168 },
6169
6170 /* PREFIX_VEX_0F388C */
6171 {
6172 { Bad_Opcode },
6173 { Bad_Opcode },
f7002f42 6174 { MOD_TABLE (MOD_VEX_0F388C_PREFIX_2) },
6c30d220
L
6175 },
6176
6177 /* PREFIX_VEX_0F388E */
6178 {
6179 { Bad_Opcode },
6180 { Bad_Opcode },
f7002f42 6181 { MOD_TABLE (MOD_VEX_0F388E_PREFIX_2) },
6c30d220
L
6182 },
6183
6184 /* PREFIX_VEX_0F3890 */
6185 {
6186 { Bad_Opcode },
6187 { Bad_Opcode },
bf890a93 6188 { "vpgatherd%LW", { XM, MVexVSIBDWpX, Vex }, 0 },
6c30d220
L
6189 },
6190
6191 /* PREFIX_VEX_0F3891 */
6192 {
6193 { Bad_Opcode },
6194 { Bad_Opcode },
bf890a93 6195 { "vpgatherq%LW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ }, 0 },
6c30d220
L
6196 },
6197
6198 /* PREFIX_VEX_0F3892 */
6199 {
6200 { Bad_Opcode },
6201 { Bad_Opcode },
bf890a93 6202 { "vgatherdp%XW", { XM, MVexVSIBDWpX, Vex }, 0 },
6c30d220
L
6203 },
6204
6205 /* PREFIX_VEX_0F3893 */
6206 {
6207 { Bad_Opcode },
6208 { Bad_Opcode },
bf890a93 6209 { "vgatherqp%XW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ }, 0 },
6c30d220
L
6210 },
6211
592a252b 6212 /* PREFIX_VEX_0F3896 */
a5ff0eb2 6213 {
592d1631
L
6214 { Bad_Opcode },
6215 { Bad_Opcode },
bf890a93 6216 { "vfmaddsub132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6217 },
6218
592a252b 6219 /* PREFIX_VEX_0F3897 */
a5ff0eb2 6220 {
592d1631
L
6221 { Bad_Opcode },
6222 { Bad_Opcode },
bf890a93 6223 { "vfmsubadd132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6224 },
6225
592a252b 6226 /* PREFIX_VEX_0F3898 */
a5ff0eb2 6227 {
592d1631
L
6228 { Bad_Opcode },
6229 { Bad_Opcode },
bf890a93 6230 { "vfmadd132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6231 },
6232
592a252b 6233 /* PREFIX_VEX_0F3899 */
a5ff0eb2 6234 {
592d1631
L
6235 { Bad_Opcode },
6236 { Bad_Opcode },
bf890a93 6237 { "vfmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
a5ff0eb2
L
6238 },
6239
592a252b 6240 /* PREFIX_VEX_0F389A */
a5ff0eb2 6241 {
592d1631
L
6242 { Bad_Opcode },
6243 { Bad_Opcode },
bf890a93 6244 { "vfmsub132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6245 },
6246
592a252b 6247 /* PREFIX_VEX_0F389B */
c0f3af97 6248 {
592d1631
L
6249 { Bad_Opcode },
6250 { Bad_Opcode },
bf890a93 6251 { "vfmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6252 },
6253
592a252b 6254 /* PREFIX_VEX_0F389C */
c0f3af97 6255 {
592d1631
L
6256 { Bad_Opcode },
6257 { Bad_Opcode },
bf890a93 6258 { "vfnmadd132p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6259 },
6260
592a252b 6261 /* PREFIX_VEX_0F389D */
c0f3af97 6262 {
592d1631
L
6263 { Bad_Opcode },
6264 { Bad_Opcode },
bf890a93 6265 { "vfnmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6266 },
6267
592a252b 6268 /* PREFIX_VEX_0F389E */
c0f3af97 6269 {
592d1631
L
6270 { Bad_Opcode },
6271 { Bad_Opcode },
bf890a93 6272 { "vfnmsub132p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6273 },
6274
592a252b 6275 /* PREFIX_VEX_0F389F */
c0f3af97 6276 {
592d1631
L
6277 { Bad_Opcode },
6278 { Bad_Opcode },
bf890a93 6279 { "vfnmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6280 },
6281
592a252b 6282 /* PREFIX_VEX_0F38A6 */
c0f3af97 6283 {
592d1631
L
6284 { Bad_Opcode },
6285 { Bad_Opcode },
bf890a93 6286 { "vfmaddsub213p%XW", { XM, Vex, EXx }, 0 },
592d1631 6287 { Bad_Opcode },
c0f3af97
L
6288 },
6289
592a252b 6290 /* PREFIX_VEX_0F38A7 */
c0f3af97 6291 {
592d1631
L
6292 { Bad_Opcode },
6293 { Bad_Opcode },
bf890a93 6294 { "vfmsubadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6295 },
6296
592a252b 6297 /* PREFIX_VEX_0F38A8 */
c0f3af97 6298 {
592d1631
L
6299 { Bad_Opcode },
6300 { Bad_Opcode },
bf890a93 6301 { "vfmadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6302 },
6303
592a252b 6304 /* PREFIX_VEX_0F38A9 */
c0f3af97 6305 {
592d1631
L
6306 { Bad_Opcode },
6307 { Bad_Opcode },
bf890a93 6308 { "vfmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6309 },
6310
592a252b 6311 /* PREFIX_VEX_0F38AA */
c0f3af97 6312 {
592d1631
L
6313 { Bad_Opcode },
6314 { Bad_Opcode },
bf890a93 6315 { "vfmsub213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6316 },
6317
592a252b 6318 /* PREFIX_VEX_0F38AB */
c0f3af97 6319 {
592d1631
L
6320 { Bad_Opcode },
6321 { Bad_Opcode },
bf890a93 6322 { "vfmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6323 },
6324
592a252b 6325 /* PREFIX_VEX_0F38AC */
c0f3af97 6326 {
592d1631
L
6327 { Bad_Opcode },
6328 { Bad_Opcode },
bf890a93 6329 { "vfnmadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6330 },
6331
592a252b 6332 /* PREFIX_VEX_0F38AD */
c0f3af97 6333 {
592d1631
L
6334 { Bad_Opcode },
6335 { Bad_Opcode },
bf890a93 6336 { "vfnmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6337 },
6338
592a252b 6339 /* PREFIX_VEX_0F38AE */
c0f3af97 6340 {
592d1631
L
6341 { Bad_Opcode },
6342 { Bad_Opcode },
bf890a93 6343 { "vfnmsub213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6344 },
6345
592a252b 6346 /* PREFIX_VEX_0F38AF */
c0f3af97 6347 {
592d1631
L
6348 { Bad_Opcode },
6349 { Bad_Opcode },
bf890a93 6350 { "vfnmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6351 },
6352
592a252b 6353 /* PREFIX_VEX_0F38B6 */
c0f3af97 6354 {
592d1631
L
6355 { Bad_Opcode },
6356 { Bad_Opcode },
bf890a93 6357 { "vfmaddsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6358 },
6359
592a252b 6360 /* PREFIX_VEX_0F38B7 */
c0f3af97 6361 {
592d1631
L
6362 { Bad_Opcode },
6363 { Bad_Opcode },
bf890a93 6364 { "vfmsubadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6365 },
6366
592a252b 6367 /* PREFIX_VEX_0F38B8 */
c0f3af97 6368 {
592d1631
L
6369 { Bad_Opcode },
6370 { Bad_Opcode },
bf890a93 6371 { "vfmadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6372 },
6373
592a252b 6374 /* PREFIX_VEX_0F38B9 */
c0f3af97 6375 {
592d1631
L
6376 { Bad_Opcode },
6377 { Bad_Opcode },
bf890a93 6378 { "vfmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6379 },
6380
592a252b 6381 /* PREFIX_VEX_0F38BA */
c0f3af97 6382 {
592d1631
L
6383 { Bad_Opcode },
6384 { Bad_Opcode },
bf890a93 6385 { "vfmsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6386 },
6387
592a252b 6388 /* PREFIX_VEX_0F38BB */
c0f3af97 6389 {
592d1631
L
6390 { Bad_Opcode },
6391 { Bad_Opcode },
bf890a93 6392 { "vfmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6393 },
6394
592a252b 6395 /* PREFIX_VEX_0F38BC */
c0f3af97 6396 {
592d1631
L
6397 { Bad_Opcode },
6398 { Bad_Opcode },
bf890a93 6399 { "vfnmadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6400 },
6401
592a252b 6402 /* PREFIX_VEX_0F38BD */
c0f3af97 6403 {
592d1631
L
6404 { Bad_Opcode },
6405 { Bad_Opcode },
bf890a93 6406 { "vfnmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6407 },
6408
592a252b 6409 /* PREFIX_VEX_0F38BE */
c0f3af97 6410 {
592d1631
L
6411 { Bad_Opcode },
6412 { Bad_Opcode },
bf890a93 6413 { "vfnmsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6414 },
6415
592a252b 6416 /* PREFIX_VEX_0F38BF */
c0f3af97 6417 {
592d1631
L
6418 { Bad_Opcode },
6419 { Bad_Opcode },
bf890a93 6420 { "vfnmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6421 },
6422
48521003
IT
6423 /* PREFIX_VEX_0F38CF */
6424 {
6425 { Bad_Opcode },
6426 { Bad_Opcode },
6427 { VEX_W_TABLE (VEX_W_0F38CF_P_2) },
6428 },
6429
592a252b 6430 /* PREFIX_VEX_0F38DB */
c0f3af97 6431 {
592d1631
L
6432 { Bad_Opcode },
6433 { Bad_Opcode },
592a252b 6434 { VEX_LEN_TABLE (VEX_LEN_0F38DB_P_2) },
c0f3af97
L
6435 },
6436
592a252b 6437 /* PREFIX_VEX_0F38DC */
c0f3af97 6438 {
592d1631
L
6439 { Bad_Opcode },
6440 { Bad_Opcode },
8dcf1fad 6441 { "vaesenc", { XM, Vex, EXx }, 0 },
c0f3af97
L
6442 },
6443
592a252b 6444 /* PREFIX_VEX_0F38DD */
c0f3af97 6445 {
592d1631
L
6446 { Bad_Opcode },
6447 { Bad_Opcode },
8dcf1fad 6448 { "vaesenclast", { XM, Vex, EXx }, 0 },
c0f3af97
L
6449 },
6450
592a252b 6451 /* PREFIX_VEX_0F38DE */
c0f3af97 6452 {
592d1631
L
6453 { Bad_Opcode },
6454 { Bad_Opcode },
8dcf1fad 6455 { "vaesdec", { XM, Vex, EXx }, 0 },
c0f3af97
L
6456 },
6457
592a252b 6458 /* PREFIX_VEX_0F38DF */
c0f3af97 6459 {
592d1631
L
6460 { Bad_Opcode },
6461 { Bad_Opcode },
8dcf1fad 6462 { "vaesdeclast", { XM, Vex, EXx }, 0 },
c0f3af97
L
6463 },
6464
f12dc422
L
6465 /* PREFIX_VEX_0F38F2 */
6466 {
6467 { VEX_LEN_TABLE (VEX_LEN_0F38F2_P_0) },
6468 },
6469
6470 /* PREFIX_VEX_0F38F3_REG_1 */
6471 {
6472 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_1_P_0) },
6473 },
6474
6475 /* PREFIX_VEX_0F38F3_REG_2 */
6476 {
6477 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_2_P_0) },
6478 },
6479
6480 /* PREFIX_VEX_0F38F3_REG_3 */
6481 {
6482 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_3_P_0) },
6483 },
6484
6c30d220
L
6485 /* PREFIX_VEX_0F38F5 */
6486 {
6487 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_0) },
6488 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_1) },
6489 { Bad_Opcode },
6490 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_3) },
6491 },
6492
6493 /* PREFIX_VEX_0F38F6 */
6494 {
6495 { Bad_Opcode },
6496 { Bad_Opcode },
6497 { Bad_Opcode },
6498 { VEX_LEN_TABLE (VEX_LEN_0F38F6_P_3) },
6499 },
6500
f12dc422
L
6501 /* PREFIX_VEX_0F38F7 */
6502 {
6503 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_0) },
6c30d220
L
6504 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_1) },
6505 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_2) },
6506 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_3) },
6507 },
6508
6509 /* PREFIX_VEX_0F3A00 */
6510 {
6511 { Bad_Opcode },
6512 { Bad_Opcode },
6513 { VEX_LEN_TABLE (VEX_LEN_0F3A00_P_2) },
6514 },
6515
6516 /* PREFIX_VEX_0F3A01 */
6517 {
6518 { Bad_Opcode },
6519 { Bad_Opcode },
6520 { VEX_LEN_TABLE (VEX_LEN_0F3A01_P_2) },
6521 },
6522
6523 /* PREFIX_VEX_0F3A02 */
6524 {
6525 { Bad_Opcode },
6526 { Bad_Opcode },
6527 { VEX_W_TABLE (VEX_W_0F3A02_P_2) },
f12dc422
L
6528 },
6529
592a252b 6530 /* PREFIX_VEX_0F3A04 */
c0f3af97 6531 {
592d1631
L
6532 { Bad_Opcode },
6533 { Bad_Opcode },
592a252b 6534 { VEX_W_TABLE (VEX_W_0F3A04_P_2) },
c0f3af97
L
6535 },
6536
592a252b 6537 /* PREFIX_VEX_0F3A05 */
c0f3af97 6538 {
592d1631
L
6539 { Bad_Opcode },
6540 { Bad_Opcode },
592a252b 6541 { VEX_W_TABLE (VEX_W_0F3A05_P_2) },
c0f3af97
L
6542 },
6543
592a252b 6544 /* PREFIX_VEX_0F3A06 */
c0f3af97 6545 {
592d1631
L
6546 { Bad_Opcode },
6547 { Bad_Opcode },
592a252b 6548 { VEX_LEN_TABLE (VEX_LEN_0F3A06_P_2) },
c0f3af97
L
6549 },
6550
592a252b 6551 /* PREFIX_VEX_0F3A08 */
c0f3af97 6552 {
592d1631
L
6553 { Bad_Opcode },
6554 { Bad_Opcode },
592a252b 6555 { VEX_W_TABLE (VEX_W_0F3A08_P_2) },
c0f3af97
L
6556 },
6557
592a252b 6558 /* PREFIX_VEX_0F3A09 */
c0f3af97 6559 {
592d1631
L
6560 { Bad_Opcode },
6561 { Bad_Opcode },
592a252b 6562 { VEX_W_TABLE (VEX_W_0F3A09_P_2) },
c0f3af97
L
6563 },
6564
592a252b 6565 /* PREFIX_VEX_0F3A0A */
c0f3af97 6566 {
592d1631
L
6567 { Bad_Opcode },
6568 { Bad_Opcode },
592a252b 6569 { VEX_LEN_TABLE (VEX_LEN_0F3A0A_P_2) },
0bfee649
L
6570 },
6571
592a252b 6572 /* PREFIX_VEX_0F3A0B */
0bfee649 6573 {
592d1631
L
6574 { Bad_Opcode },
6575 { Bad_Opcode },
592a252b 6576 { VEX_LEN_TABLE (VEX_LEN_0F3A0B_P_2) },
0bfee649
L
6577 },
6578
592a252b 6579 /* PREFIX_VEX_0F3A0C */
0bfee649 6580 {
592d1631
L
6581 { Bad_Opcode },
6582 { Bad_Opcode },
592a252b 6583 { VEX_W_TABLE (VEX_W_0F3A0C_P_2) },
0bfee649
L
6584 },
6585
592a252b 6586 /* PREFIX_VEX_0F3A0D */
0bfee649 6587 {
592d1631
L
6588 { Bad_Opcode },
6589 { Bad_Opcode },
592a252b 6590 { VEX_W_TABLE (VEX_W_0F3A0D_P_2) },
c0f3af97
L
6591 },
6592
592a252b 6593 /* PREFIX_VEX_0F3A0E */
0bfee649 6594 {
592d1631
L
6595 { Bad_Opcode },
6596 { Bad_Opcode },
6c30d220 6597 { VEX_W_TABLE (VEX_W_0F3A0E_P_2) },
0bfee649
L
6598 },
6599
592a252b 6600 /* PREFIX_VEX_0F3A0F */
0bfee649 6601 {
592d1631
L
6602 { Bad_Opcode },
6603 { Bad_Opcode },
6c30d220 6604 { VEX_W_TABLE (VEX_W_0F3A0F_P_2) },
0bfee649
L
6605 },
6606
592a252b 6607 /* PREFIX_VEX_0F3A14 */
0bfee649 6608 {
592d1631
L
6609 { Bad_Opcode },
6610 { Bad_Opcode },
592a252b 6611 { VEX_LEN_TABLE (VEX_LEN_0F3A14_P_2) },
0bfee649
L
6612 },
6613
592a252b 6614 /* PREFIX_VEX_0F3A15 */
0bfee649 6615 {
592d1631
L
6616 { Bad_Opcode },
6617 { Bad_Opcode },
592a252b 6618 { VEX_LEN_TABLE (VEX_LEN_0F3A15_P_2) },
0bfee649
L
6619 },
6620
592a252b 6621 /* PREFIX_VEX_0F3A16 */
c0f3af97 6622 {
592d1631
L
6623 { Bad_Opcode },
6624 { Bad_Opcode },
592a252b 6625 { VEX_LEN_TABLE (VEX_LEN_0F3A16_P_2) },
c0f3af97
L
6626 },
6627
592a252b 6628 /* PREFIX_VEX_0F3A17 */
c0f3af97 6629 {
592d1631
L
6630 { Bad_Opcode },
6631 { Bad_Opcode },
592a252b 6632 { VEX_LEN_TABLE (VEX_LEN_0F3A17_P_2) },
c0f3af97
L
6633 },
6634
592a252b 6635 /* PREFIX_VEX_0F3A18 */
c0f3af97 6636 {
592d1631
L
6637 { Bad_Opcode },
6638 { Bad_Opcode },
592a252b 6639 { VEX_LEN_TABLE (VEX_LEN_0F3A18_P_2) },
c0f3af97
L
6640 },
6641
592a252b 6642 /* PREFIX_VEX_0F3A19 */
c0f3af97 6643 {
592d1631
L
6644 { Bad_Opcode },
6645 { Bad_Opcode },
592a252b 6646 { VEX_LEN_TABLE (VEX_LEN_0F3A19_P_2) },
c0f3af97
L
6647 },
6648
592a252b 6649 /* PREFIX_VEX_0F3A1D */
c7b8aa3a
L
6650 {
6651 { Bad_Opcode },
6652 { Bad_Opcode },
bf890a93 6653 { "vcvtps2ph", { EXxmmq, XM, Ib }, 0 },
c7b8aa3a
L
6654 },
6655
592a252b 6656 /* PREFIX_VEX_0F3A20 */
c0f3af97 6657 {
592d1631
L
6658 { Bad_Opcode },
6659 { Bad_Opcode },
592a252b 6660 { VEX_LEN_TABLE (VEX_LEN_0F3A20_P_2) },
c0f3af97
L
6661 },
6662
592a252b 6663 /* PREFIX_VEX_0F3A21 */
c0f3af97 6664 {
592d1631
L
6665 { Bad_Opcode },
6666 { Bad_Opcode },
592a252b 6667 { VEX_LEN_TABLE (VEX_LEN_0F3A21_P_2) },
c0f3af97
L
6668 },
6669
592a252b 6670 /* PREFIX_VEX_0F3A22 */
0bfee649 6671 {
592d1631
L
6672 { Bad_Opcode },
6673 { Bad_Opcode },
592a252b 6674 { VEX_LEN_TABLE (VEX_LEN_0F3A22_P_2) },
0bfee649
L
6675 },
6676
43234a1e
L
6677 /* PREFIX_VEX_0F3A30 */
6678 {
6679 { Bad_Opcode },
6680 { Bad_Opcode },
6681 { VEX_LEN_TABLE (VEX_LEN_0F3A30_P_2) },
6682 },
6683
1ba585e8
IT
6684 /* PREFIX_VEX_0F3A31 */
6685 {
6686 { Bad_Opcode },
6687 { Bad_Opcode },
6688 { VEX_LEN_TABLE (VEX_LEN_0F3A31_P_2) },
6689 },
6690
43234a1e
L
6691 /* PREFIX_VEX_0F3A32 */
6692 {
6693 { Bad_Opcode },
6694 { Bad_Opcode },
6695 { VEX_LEN_TABLE (VEX_LEN_0F3A32_P_2) },
6696 },
6697
1ba585e8
IT
6698 /* PREFIX_VEX_0F3A33 */
6699 {
6700 { Bad_Opcode },
6701 { Bad_Opcode },
6702 { VEX_LEN_TABLE (VEX_LEN_0F3A33_P_2) },
6703 },
6704
6c30d220
L
6705 /* PREFIX_VEX_0F3A38 */
6706 {
6707 { Bad_Opcode },
6708 { Bad_Opcode },
6709 { VEX_LEN_TABLE (VEX_LEN_0F3A38_P_2) },
6710 },
6711
6712 /* PREFIX_VEX_0F3A39 */
6713 {
6714 { Bad_Opcode },
6715 { Bad_Opcode },
6716 { VEX_LEN_TABLE (VEX_LEN_0F3A39_P_2) },
6717 },
6718
592a252b 6719 /* PREFIX_VEX_0F3A40 */
c0f3af97 6720 {
592d1631
L
6721 { Bad_Opcode },
6722 { Bad_Opcode },
592a252b 6723 { VEX_W_TABLE (VEX_W_0F3A40_P_2) },
c0f3af97
L
6724 },
6725
592a252b 6726 /* PREFIX_VEX_0F3A41 */
c0f3af97 6727 {
592d1631
L
6728 { Bad_Opcode },
6729 { Bad_Opcode },
592a252b 6730 { VEX_LEN_TABLE (VEX_LEN_0F3A41_P_2) },
c0f3af97
L
6731 },
6732
592a252b 6733 /* PREFIX_VEX_0F3A42 */
c0f3af97 6734 {
592d1631
L
6735 { Bad_Opcode },
6736 { Bad_Opcode },
6c30d220 6737 { VEX_W_TABLE (VEX_W_0F3A42_P_2) },
c0f3af97
L
6738 },
6739
592a252b 6740 /* PREFIX_VEX_0F3A44 */
ce2f5b3c 6741 {
592d1631
L
6742 { Bad_Opcode },
6743 { Bad_Opcode },
ff1982d5 6744 { "vpclmulqdq", { XM, Vex, EXx, PCLMUL }, 0 },
ce2f5b3c
L
6745 },
6746
6c30d220
L
6747 /* PREFIX_VEX_0F3A46 */
6748 {
6749 { Bad_Opcode },
6750 { Bad_Opcode },
6751 { VEX_LEN_TABLE (VEX_LEN_0F3A46_P_2) },
6752 },
6753
592a252b 6754 /* PREFIX_VEX_0F3A48 */
a683cc34
SP
6755 {
6756 { Bad_Opcode },
6757 { Bad_Opcode },
592a252b 6758 { VEX_W_TABLE (VEX_W_0F3A48_P_2) },
a683cc34
SP
6759 },
6760
592a252b 6761 /* PREFIX_VEX_0F3A49 */
a683cc34
SP
6762 {
6763 { Bad_Opcode },
6764 { Bad_Opcode },
592a252b 6765 { VEX_W_TABLE (VEX_W_0F3A49_P_2) },
a683cc34
SP
6766 },
6767
592a252b 6768 /* PREFIX_VEX_0F3A4A */
c0f3af97 6769 {
592d1631
L
6770 { Bad_Opcode },
6771 { Bad_Opcode },
592a252b 6772 { VEX_W_TABLE (VEX_W_0F3A4A_P_2) },
c0f3af97
L
6773 },
6774
592a252b 6775 /* PREFIX_VEX_0F3A4B */
c0f3af97 6776 {
592d1631
L
6777 { Bad_Opcode },
6778 { Bad_Opcode },
592a252b 6779 { VEX_W_TABLE (VEX_W_0F3A4B_P_2) },
c0f3af97
L
6780 },
6781
592a252b 6782 /* PREFIX_VEX_0F3A4C */
c0f3af97 6783 {
592d1631
L
6784 { Bad_Opcode },
6785 { Bad_Opcode },
6c30d220 6786 { VEX_W_TABLE (VEX_W_0F3A4C_P_2) },
c0f3af97
L
6787 },
6788
592a252b 6789 /* PREFIX_VEX_0F3A5C */
922d8de8 6790 {
592d1631
L
6791 { Bad_Opcode },
6792 { Bad_Opcode },
3a2430e0 6793 { "vfmaddsubps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6794 },
6795
592a252b 6796 /* PREFIX_VEX_0F3A5D */
922d8de8 6797 {
592d1631
L
6798 { Bad_Opcode },
6799 { Bad_Opcode },
3a2430e0 6800 { "vfmaddsubpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6801 },
6802
592a252b 6803 /* PREFIX_VEX_0F3A5E */
922d8de8 6804 {
592d1631
L
6805 { Bad_Opcode },
6806 { Bad_Opcode },
3a2430e0 6807 { "vfmsubaddps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6808 },
6809
592a252b 6810 /* PREFIX_VEX_0F3A5F */
922d8de8 6811 {
592d1631
L
6812 { Bad_Opcode },
6813 { Bad_Opcode },
3a2430e0 6814 { "vfmsubaddpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6815 },
6816
592a252b 6817 /* PREFIX_VEX_0F3A60 */
c0f3af97 6818 {
592d1631
L
6819 { Bad_Opcode },
6820 { Bad_Opcode },
592a252b 6821 { VEX_LEN_TABLE (VEX_LEN_0F3A60_P_2) },
592d1631 6822 { Bad_Opcode },
c0f3af97
L
6823 },
6824
592a252b 6825 /* PREFIX_VEX_0F3A61 */
c0f3af97 6826 {
592d1631
L
6827 { Bad_Opcode },
6828 { Bad_Opcode },
592a252b 6829 { VEX_LEN_TABLE (VEX_LEN_0F3A61_P_2) },
c0f3af97
L
6830 },
6831
592a252b 6832 /* PREFIX_VEX_0F3A62 */
c0f3af97 6833 {
592d1631
L
6834 { Bad_Opcode },
6835 { Bad_Opcode },
592a252b 6836 { VEX_LEN_TABLE (VEX_LEN_0F3A62_P_2) },
c0f3af97
L
6837 },
6838
592a252b 6839 /* PREFIX_VEX_0F3A63 */
c0f3af97 6840 {
592d1631
L
6841 { Bad_Opcode },
6842 { Bad_Opcode },
592a252b 6843 { VEX_LEN_TABLE (VEX_LEN_0F3A63_P_2) },
c0f3af97 6844 },
a5ff0eb2 6845
592a252b 6846 /* PREFIX_VEX_0F3A68 */
922d8de8 6847 {
592d1631
L
6848 { Bad_Opcode },
6849 { Bad_Opcode },
3a2430e0 6850 { "vfmaddps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6851 },
6852
592a252b 6853 /* PREFIX_VEX_0F3A69 */
922d8de8 6854 {
592d1631
L
6855 { Bad_Opcode },
6856 { Bad_Opcode },
3a2430e0 6857 { "vfmaddpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6858 },
6859
592a252b 6860 /* PREFIX_VEX_0F3A6A */
922d8de8 6861 {
592d1631
L
6862 { Bad_Opcode },
6863 { Bad_Opcode },
592a252b 6864 { VEX_LEN_TABLE (VEX_LEN_0F3A6A_P_2) },
922d8de8
DR
6865 },
6866
592a252b 6867 /* PREFIX_VEX_0F3A6B */
922d8de8 6868 {
592d1631
L
6869 { Bad_Opcode },
6870 { Bad_Opcode },
592a252b 6871 { VEX_LEN_TABLE (VEX_LEN_0F3A6B_P_2) },
922d8de8
DR
6872 },
6873
592a252b 6874 /* PREFIX_VEX_0F3A6C */
922d8de8 6875 {
592d1631
L
6876 { Bad_Opcode },
6877 { Bad_Opcode },
3a2430e0 6878 { "vfmsubps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6879 },
6880
592a252b 6881 /* PREFIX_VEX_0F3A6D */
922d8de8 6882 {
592d1631
L
6883 { Bad_Opcode },
6884 { Bad_Opcode },
3a2430e0 6885 { "vfmsubpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6886 },
6887
592a252b 6888 /* PREFIX_VEX_0F3A6E */
922d8de8 6889 {
592d1631
L
6890 { Bad_Opcode },
6891 { Bad_Opcode },
592a252b 6892 { VEX_LEN_TABLE (VEX_LEN_0F3A6E_P_2) },
922d8de8
DR
6893 },
6894
592a252b 6895 /* PREFIX_VEX_0F3A6F */
922d8de8 6896 {
592d1631
L
6897 { Bad_Opcode },
6898 { Bad_Opcode },
592a252b 6899 { VEX_LEN_TABLE (VEX_LEN_0F3A6F_P_2) },
922d8de8
DR
6900 },
6901
592a252b 6902 /* PREFIX_VEX_0F3A78 */
922d8de8 6903 {
592d1631
L
6904 { Bad_Opcode },
6905 { Bad_Opcode },
3a2430e0 6906 { "vfnmaddps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6907 },
6908
592a252b 6909 /* PREFIX_VEX_0F3A79 */
922d8de8 6910 {
592d1631
L
6911 { Bad_Opcode },
6912 { Bad_Opcode },
3a2430e0 6913 { "vfnmaddpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6914 },
6915
592a252b 6916 /* PREFIX_VEX_0F3A7A */
922d8de8 6917 {
592d1631
L
6918 { Bad_Opcode },
6919 { Bad_Opcode },
592a252b 6920 { VEX_LEN_TABLE (VEX_LEN_0F3A7A_P_2) },
922d8de8
DR
6921 },
6922
592a252b 6923 /* PREFIX_VEX_0F3A7B */
922d8de8 6924 {
592d1631
L
6925 { Bad_Opcode },
6926 { Bad_Opcode },
592a252b 6927 { VEX_LEN_TABLE (VEX_LEN_0F3A7B_P_2) },
922d8de8
DR
6928 },
6929
592a252b 6930 /* PREFIX_VEX_0F3A7C */
922d8de8 6931 {
592d1631
L
6932 { Bad_Opcode },
6933 { Bad_Opcode },
3a2430e0 6934 { "vfnmsubps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
592d1631 6935 { Bad_Opcode },
922d8de8
DR
6936 },
6937
592a252b 6938 /* PREFIX_VEX_0F3A7D */
922d8de8 6939 {
592d1631
L
6940 { Bad_Opcode },
6941 { Bad_Opcode },
3a2430e0 6942 { "vfnmsubpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6943 },
6944
592a252b 6945 /* PREFIX_VEX_0F3A7E */
922d8de8 6946 {
592d1631
L
6947 { Bad_Opcode },
6948 { Bad_Opcode },
592a252b 6949 { VEX_LEN_TABLE (VEX_LEN_0F3A7E_P_2) },
922d8de8
DR
6950 },
6951
592a252b 6952 /* PREFIX_VEX_0F3A7F */
922d8de8 6953 {
592d1631
L
6954 { Bad_Opcode },
6955 { Bad_Opcode },
592a252b 6956 { VEX_LEN_TABLE (VEX_LEN_0F3A7F_P_2) },
922d8de8
DR
6957 },
6958
48521003
IT
6959 /* PREFIX_VEX_0F3ACE */
6960 {
6961 { Bad_Opcode },
6962 { Bad_Opcode },
6963 { VEX_W_TABLE (VEX_W_0F3ACE_P_2) },
6964 },
6965
6966 /* PREFIX_VEX_0F3ACF */
6967 {
6968 { Bad_Opcode },
6969 { Bad_Opcode },
6970 { VEX_W_TABLE (VEX_W_0F3ACF_P_2) },
6971 },
6972
592a252b 6973 /* PREFIX_VEX_0F3ADF */
a5ff0eb2 6974 {
592d1631
L
6975 { Bad_Opcode },
6976 { Bad_Opcode },
592a252b 6977 { VEX_LEN_TABLE (VEX_LEN_0F3ADF_P_2) },
a5ff0eb2 6978 },
6c30d220
L
6979
6980 /* PREFIX_VEX_0F3AF0 */
6981 {
6982 { Bad_Opcode },
6983 { Bad_Opcode },
6984 { Bad_Opcode },
6985 { VEX_LEN_TABLE (VEX_LEN_0F3AF0_P_3) },
6986 },
43234a1e
L
6987
6988#define NEED_PREFIX_TABLE
6989#include "i386-dis-evex.h"
6990#undef NEED_PREFIX_TABLE
c0f3af97
L
6991};
6992
6993static const struct dis386 x86_64_table[][2] = {
6994 /* X86_64_06 */
6995 {
bf890a93 6996 { "pushP", { es }, 0 },
c0f3af97
L
6997 },
6998
6999 /* X86_64_07 */
7000 {
bf890a93 7001 { "popP", { es }, 0 },
c0f3af97
L
7002 },
7003
7004 /* X86_64_0D */
7005 {
bf890a93 7006 { "pushP", { cs }, 0 },
c0f3af97
L
7007 },
7008
7009 /* X86_64_16 */
7010 {
bf890a93 7011 { "pushP", { ss }, 0 },
c0f3af97
L
7012 },
7013
7014 /* X86_64_17 */
7015 {
bf890a93 7016 { "popP", { ss }, 0 },
c0f3af97
L
7017 },
7018
7019 /* X86_64_1E */
7020 {
bf890a93 7021 { "pushP", { ds }, 0 },
c0f3af97
L
7022 },
7023
7024 /* X86_64_1F */
7025 {
bf890a93 7026 { "popP", { ds }, 0 },
c0f3af97
L
7027 },
7028
7029 /* X86_64_27 */
7030 {
bf890a93 7031 { "daa", { XX }, 0 },
c0f3af97
L
7032 },
7033
7034 /* X86_64_2F */
7035 {
bf890a93 7036 { "das", { XX }, 0 },
c0f3af97
L
7037 },
7038
7039 /* X86_64_37 */
7040 {
bf890a93 7041 { "aaa", { XX }, 0 },
c0f3af97
L
7042 },
7043
7044 /* X86_64_3F */
7045 {
bf890a93 7046 { "aas", { XX }, 0 },
c0f3af97
L
7047 },
7048
7049 /* X86_64_60 */
7050 {
bf890a93 7051 { "pushaP", { XX }, 0 },
c0f3af97
L
7052 },
7053
7054 /* X86_64_61 */
7055 {
bf890a93 7056 { "popaP", { XX }, 0 },
c0f3af97
L
7057 },
7058
7059 /* X86_64_62 */
7060 {
7061 { MOD_TABLE (MOD_62_32BIT) },
43234a1e 7062 { EVEX_TABLE (EVEX_0F) },
c0f3af97
L
7063 },
7064
7065 /* X86_64_63 */
7066 {
bf890a93
IT
7067 { "arpl", { Ew, Gw }, 0 },
7068 { "movs{lq|xd}", { Gv, Ed }, 0 },
c0f3af97
L
7069 },
7070
7071 /* X86_64_6D */
7072 {
bf890a93
IT
7073 { "ins{R|}", { Yzr, indirDX }, 0 },
7074 { "ins{G|}", { Yzr, indirDX }, 0 },
c0f3af97
L
7075 },
7076
7077 /* X86_64_6F */
7078 {
bf890a93
IT
7079 { "outs{R|}", { indirDXr, Xz }, 0 },
7080 { "outs{G|}", { indirDXr, Xz }, 0 },
c0f3af97
L
7081 },
7082
d039fef3 7083 /* X86_64_82 */
8b89fe14 7084 {
de194d85 7085 /* Opcode 0x82 is an alias of opcode 0x80 in 32-bit mode. */
d039fef3 7086 { REG_TABLE (REG_80) },
8b89fe14
L
7087 },
7088
c0f3af97
L
7089 /* X86_64_9A */
7090 {
bf890a93 7091 { "Jcall{T|}", { Ap }, 0 },
c0f3af97
L
7092 },
7093
7094 /* X86_64_C4 */
7095 {
7096 { MOD_TABLE (MOD_C4_32BIT) },
7097 { VEX_C4_TABLE (VEX_0F) },
7098 },
7099
7100 /* X86_64_C5 */
7101 {
7102 { MOD_TABLE (MOD_C5_32BIT) },
7103 { VEX_C5_TABLE (VEX_0F) },
7104 },
7105
7106 /* X86_64_CE */
7107 {
bf890a93 7108 { "into", { XX }, 0 },
c0f3af97
L
7109 },
7110
7111 /* X86_64_D4 */
7112 {
bf890a93 7113 { "aam", { Ib }, 0 },
c0f3af97
L
7114 },
7115
7116 /* X86_64_D5 */
7117 {
bf890a93 7118 { "aad", { Ib }, 0 },
c0f3af97
L
7119 },
7120
a72d2af2
L
7121 /* X86_64_E8 */
7122 {
7123 { "callP", { Jv, BND }, 0 },
5db04b09 7124 { "call@", { Jv, BND }, 0 }
a72d2af2
L
7125 },
7126
7127 /* X86_64_E9 */
7128 {
7129 { "jmpP", { Jv, BND }, 0 },
5db04b09 7130 { "jmp@", { Jv, BND }, 0 }
a72d2af2
L
7131 },
7132
c0f3af97
L
7133 /* X86_64_EA */
7134 {
bf890a93 7135 { "Jjmp{T|}", { Ap }, 0 },
c0f3af97
L
7136 },
7137
7138 /* X86_64_0F01_REG_0 */
7139 {
bf890a93
IT
7140 { "sgdt{Q|IQ}", { M }, 0 },
7141 { "sgdt", { M }, 0 },
c0f3af97
L
7142 },
7143
7144 /* X86_64_0F01_REG_1 */
7145 {
bf890a93
IT
7146 { "sidt{Q|IQ}", { M }, 0 },
7147 { "sidt", { M }, 0 },
c0f3af97
L
7148 },
7149
7150 /* X86_64_0F01_REG_2 */
7151 {
bf890a93
IT
7152 { "lgdt{Q|Q}", { M }, 0 },
7153 { "lgdt", { M }, 0 },
c0f3af97
L
7154 },
7155
7156 /* X86_64_0F01_REG_3 */
7157 {
bf890a93
IT
7158 { "lidt{Q|Q}", { M }, 0 },
7159 { "lidt", { M }, 0 },
c0f3af97
L
7160 },
7161};
7162
7163static const struct dis386 three_byte_table[][256] = {
c1e679ec
DR
7164
7165 /* THREE_BYTE_0F38 */
c0f3af97
L
7166 {
7167 /* 00 */
507bd325
L
7168 { "pshufb", { MX, EM }, PREFIX_OPCODE },
7169 { "phaddw", { MX, EM }, PREFIX_OPCODE },
7170 { "phaddd", { MX, EM }, PREFIX_OPCODE },
7171 { "phaddsw", { MX, EM }, PREFIX_OPCODE },
7172 { "pmaddubsw", { MX, EM }, PREFIX_OPCODE },
7173 { "phsubw", { MX, EM }, PREFIX_OPCODE },
7174 { "phsubd", { MX, EM }, PREFIX_OPCODE },
7175 { "phsubsw", { MX, EM }, PREFIX_OPCODE },
c0f3af97 7176 /* 08 */
507bd325
L
7177 { "psignb", { MX, EM }, PREFIX_OPCODE },
7178 { "psignw", { MX, EM }, PREFIX_OPCODE },
7179 { "psignd", { MX, EM }, PREFIX_OPCODE },
7180 { "pmulhrsw", { MX, EM }, PREFIX_OPCODE },
592d1631
L
7181 { Bad_Opcode },
7182 { Bad_Opcode },
7183 { Bad_Opcode },
7184 { Bad_Opcode },
f88c9eb0
SP
7185 /* 10 */
7186 { PREFIX_TABLE (PREFIX_0F3810) },
592d1631
L
7187 { Bad_Opcode },
7188 { Bad_Opcode },
7189 { Bad_Opcode },
f88c9eb0
SP
7190 { PREFIX_TABLE (PREFIX_0F3814) },
7191 { PREFIX_TABLE (PREFIX_0F3815) },
592d1631 7192 { Bad_Opcode },
f88c9eb0
SP
7193 { PREFIX_TABLE (PREFIX_0F3817) },
7194 /* 18 */
592d1631
L
7195 { Bad_Opcode },
7196 { Bad_Opcode },
7197 { Bad_Opcode },
7198 { Bad_Opcode },
507bd325
L
7199 { "pabsb", { MX, EM }, PREFIX_OPCODE },
7200 { "pabsw", { MX, EM }, PREFIX_OPCODE },
7201 { "pabsd", { MX, EM }, PREFIX_OPCODE },
592d1631 7202 { Bad_Opcode },
f88c9eb0
SP
7203 /* 20 */
7204 { PREFIX_TABLE (PREFIX_0F3820) },
7205 { PREFIX_TABLE (PREFIX_0F3821) },
7206 { PREFIX_TABLE (PREFIX_0F3822) },
7207 { PREFIX_TABLE (PREFIX_0F3823) },
7208 { PREFIX_TABLE (PREFIX_0F3824) },
7209 { PREFIX_TABLE (PREFIX_0F3825) },
592d1631
L
7210 { Bad_Opcode },
7211 { Bad_Opcode },
f88c9eb0
SP
7212 /* 28 */
7213 { PREFIX_TABLE (PREFIX_0F3828) },
7214 { PREFIX_TABLE (PREFIX_0F3829) },
7215 { PREFIX_TABLE (PREFIX_0F382A) },
7216 { PREFIX_TABLE (PREFIX_0F382B) },
592d1631
L
7217 { Bad_Opcode },
7218 { Bad_Opcode },
7219 { Bad_Opcode },
7220 { Bad_Opcode },
f88c9eb0
SP
7221 /* 30 */
7222 { PREFIX_TABLE (PREFIX_0F3830) },
7223 { PREFIX_TABLE (PREFIX_0F3831) },
7224 { PREFIX_TABLE (PREFIX_0F3832) },
7225 { PREFIX_TABLE (PREFIX_0F3833) },
7226 { PREFIX_TABLE (PREFIX_0F3834) },
7227 { PREFIX_TABLE (PREFIX_0F3835) },
592d1631 7228 { Bad_Opcode },
f88c9eb0
SP
7229 { PREFIX_TABLE (PREFIX_0F3837) },
7230 /* 38 */
7231 { PREFIX_TABLE (PREFIX_0F3838) },
7232 { PREFIX_TABLE (PREFIX_0F3839) },
7233 { PREFIX_TABLE (PREFIX_0F383A) },
7234 { PREFIX_TABLE (PREFIX_0F383B) },
7235 { PREFIX_TABLE (PREFIX_0F383C) },
7236 { PREFIX_TABLE (PREFIX_0F383D) },
7237 { PREFIX_TABLE (PREFIX_0F383E) },
7238 { PREFIX_TABLE (PREFIX_0F383F) },
7239 /* 40 */
7240 { PREFIX_TABLE (PREFIX_0F3840) },
7241 { PREFIX_TABLE (PREFIX_0F3841) },
592d1631
L
7242 { Bad_Opcode },
7243 { Bad_Opcode },
7244 { Bad_Opcode },
7245 { Bad_Opcode },
7246 { Bad_Opcode },
7247 { Bad_Opcode },
f88c9eb0 7248 /* 48 */
592d1631
L
7249 { Bad_Opcode },
7250 { Bad_Opcode },
7251 { Bad_Opcode },
7252 { Bad_Opcode },
7253 { Bad_Opcode },
7254 { Bad_Opcode },
7255 { Bad_Opcode },
7256 { Bad_Opcode },
f88c9eb0 7257 /* 50 */
592d1631
L
7258 { Bad_Opcode },
7259 { Bad_Opcode },
7260 { Bad_Opcode },
7261 { Bad_Opcode },
7262 { Bad_Opcode },
7263 { Bad_Opcode },
7264 { Bad_Opcode },
7265 { Bad_Opcode },
f88c9eb0 7266 /* 58 */
592d1631
L
7267 { Bad_Opcode },
7268 { Bad_Opcode },
7269 { Bad_Opcode },
7270 { Bad_Opcode },
7271 { Bad_Opcode },
7272 { Bad_Opcode },
7273 { Bad_Opcode },
7274 { Bad_Opcode },
f88c9eb0 7275 /* 60 */
592d1631
L
7276 { Bad_Opcode },
7277 { Bad_Opcode },
7278 { Bad_Opcode },
7279 { Bad_Opcode },
7280 { Bad_Opcode },
7281 { Bad_Opcode },
7282 { Bad_Opcode },
7283 { Bad_Opcode },
f88c9eb0 7284 /* 68 */
592d1631
L
7285 { Bad_Opcode },
7286 { Bad_Opcode },
7287 { Bad_Opcode },
7288 { Bad_Opcode },
7289 { Bad_Opcode },
7290 { Bad_Opcode },
7291 { Bad_Opcode },
7292 { Bad_Opcode },
f88c9eb0 7293 /* 70 */
592d1631
L
7294 { Bad_Opcode },
7295 { Bad_Opcode },
7296 { Bad_Opcode },
7297 { Bad_Opcode },
7298 { Bad_Opcode },
7299 { Bad_Opcode },
7300 { Bad_Opcode },
7301 { Bad_Opcode },
f88c9eb0 7302 /* 78 */
592d1631
L
7303 { Bad_Opcode },
7304 { Bad_Opcode },
7305 { Bad_Opcode },
7306 { Bad_Opcode },
7307 { Bad_Opcode },
7308 { Bad_Opcode },
7309 { Bad_Opcode },
7310 { Bad_Opcode },
f88c9eb0
SP
7311 /* 80 */
7312 { PREFIX_TABLE (PREFIX_0F3880) },
7313 { PREFIX_TABLE (PREFIX_0F3881) },
6c30d220 7314 { PREFIX_TABLE (PREFIX_0F3882) },
592d1631
L
7315 { Bad_Opcode },
7316 { Bad_Opcode },
7317 { Bad_Opcode },
7318 { Bad_Opcode },
7319 { Bad_Opcode },
f88c9eb0 7320 /* 88 */
592d1631
L
7321 { Bad_Opcode },
7322 { Bad_Opcode },
7323 { Bad_Opcode },
7324 { Bad_Opcode },
7325 { Bad_Opcode },
7326 { Bad_Opcode },
7327 { Bad_Opcode },
7328 { Bad_Opcode },
f88c9eb0 7329 /* 90 */
592d1631
L
7330 { Bad_Opcode },
7331 { Bad_Opcode },
7332 { Bad_Opcode },
7333 { Bad_Opcode },
7334 { Bad_Opcode },
7335 { Bad_Opcode },
7336 { Bad_Opcode },
7337 { Bad_Opcode },
f88c9eb0 7338 /* 98 */
592d1631
L
7339 { Bad_Opcode },
7340 { Bad_Opcode },
7341 { Bad_Opcode },
7342 { Bad_Opcode },
7343 { Bad_Opcode },
7344 { Bad_Opcode },
7345 { Bad_Opcode },
7346 { Bad_Opcode },
f88c9eb0 7347 /* a0 */
592d1631
L
7348 { Bad_Opcode },
7349 { Bad_Opcode },
7350 { Bad_Opcode },
7351 { Bad_Opcode },
7352 { Bad_Opcode },
7353 { Bad_Opcode },
7354 { Bad_Opcode },
7355 { Bad_Opcode },
f88c9eb0 7356 /* a8 */
592d1631
L
7357 { Bad_Opcode },
7358 { Bad_Opcode },
7359 { Bad_Opcode },
7360 { Bad_Opcode },
7361 { Bad_Opcode },
7362 { Bad_Opcode },
7363 { Bad_Opcode },
7364 { Bad_Opcode },
f88c9eb0 7365 /* b0 */
592d1631
L
7366 { Bad_Opcode },
7367 { Bad_Opcode },
7368 { Bad_Opcode },
7369 { Bad_Opcode },
7370 { Bad_Opcode },
7371 { Bad_Opcode },
7372 { Bad_Opcode },
7373 { Bad_Opcode },
f88c9eb0 7374 /* b8 */
592d1631
L
7375 { Bad_Opcode },
7376 { Bad_Opcode },
7377 { Bad_Opcode },
7378 { Bad_Opcode },
7379 { Bad_Opcode },
7380 { Bad_Opcode },
7381 { Bad_Opcode },
7382 { Bad_Opcode },
f88c9eb0 7383 /* c0 */
592d1631
L
7384 { Bad_Opcode },
7385 { Bad_Opcode },
7386 { Bad_Opcode },
7387 { Bad_Opcode },
7388 { Bad_Opcode },
7389 { Bad_Opcode },
7390 { Bad_Opcode },
7391 { Bad_Opcode },
f88c9eb0 7392 /* c8 */
a0046408
L
7393 { PREFIX_TABLE (PREFIX_0F38C8) },
7394 { PREFIX_TABLE (PREFIX_0F38C9) },
7395 { PREFIX_TABLE (PREFIX_0F38CA) },
7396 { PREFIX_TABLE (PREFIX_0F38CB) },
7397 { PREFIX_TABLE (PREFIX_0F38CC) },
7398 { PREFIX_TABLE (PREFIX_0F38CD) },
592d1631 7399 { Bad_Opcode },
48521003 7400 { PREFIX_TABLE (PREFIX_0F38CF) },
f88c9eb0 7401 /* d0 */
592d1631
L
7402 { Bad_Opcode },
7403 { Bad_Opcode },
7404 { Bad_Opcode },
7405 { Bad_Opcode },
7406 { Bad_Opcode },
7407 { Bad_Opcode },
7408 { Bad_Opcode },
7409 { Bad_Opcode },
f88c9eb0 7410 /* d8 */
592d1631
L
7411 { Bad_Opcode },
7412 { Bad_Opcode },
7413 { Bad_Opcode },
f88c9eb0
SP
7414 { PREFIX_TABLE (PREFIX_0F38DB) },
7415 { PREFIX_TABLE (PREFIX_0F38DC) },
7416 { PREFIX_TABLE (PREFIX_0F38DD) },
7417 { PREFIX_TABLE (PREFIX_0F38DE) },
7418 { PREFIX_TABLE (PREFIX_0F38DF) },
7419 /* e0 */
592d1631
L
7420 { Bad_Opcode },
7421 { Bad_Opcode },
7422 { Bad_Opcode },
7423 { Bad_Opcode },
7424 { Bad_Opcode },
7425 { Bad_Opcode },
7426 { Bad_Opcode },
7427 { Bad_Opcode },
f88c9eb0 7428 /* e8 */
592d1631
L
7429 { Bad_Opcode },
7430 { Bad_Opcode },
7431 { Bad_Opcode },
7432 { Bad_Opcode },
7433 { Bad_Opcode },
7434 { Bad_Opcode },
7435 { Bad_Opcode },
7436 { Bad_Opcode },
f88c9eb0
SP
7437 /* f0 */
7438 { PREFIX_TABLE (PREFIX_0F38F0) },
7439 { PREFIX_TABLE (PREFIX_0F38F1) },
592d1631
L
7440 { Bad_Opcode },
7441 { Bad_Opcode },
7442 { Bad_Opcode },
603555e5 7443 { PREFIX_TABLE (PREFIX_0F38F5) },
e2e1fcde 7444 { PREFIX_TABLE (PREFIX_0F38F6) },
592d1631 7445 { Bad_Opcode },
f88c9eb0 7446 /* f8 */
592d1631
L
7447 { Bad_Opcode },
7448 { Bad_Opcode },
7449 { Bad_Opcode },
7450 { Bad_Opcode },
7451 { Bad_Opcode },
7452 { Bad_Opcode },
7453 { Bad_Opcode },
7454 { Bad_Opcode },
f88c9eb0
SP
7455 },
7456 /* THREE_BYTE_0F3A */
7457 {
7458 /* 00 */
592d1631
L
7459 { Bad_Opcode },
7460 { Bad_Opcode },
7461 { Bad_Opcode },
7462 { Bad_Opcode },
7463 { Bad_Opcode },
7464 { Bad_Opcode },
7465 { Bad_Opcode },
7466 { Bad_Opcode },
f88c9eb0
SP
7467 /* 08 */
7468 { PREFIX_TABLE (PREFIX_0F3A08) },
7469 { PREFIX_TABLE (PREFIX_0F3A09) },
7470 { PREFIX_TABLE (PREFIX_0F3A0A) },
7471 { PREFIX_TABLE (PREFIX_0F3A0B) },
7472 { PREFIX_TABLE (PREFIX_0F3A0C) },
7473 { PREFIX_TABLE (PREFIX_0F3A0D) },
7474 { PREFIX_TABLE (PREFIX_0F3A0E) },
507bd325 7475 { "palignr", { MX, EM, Ib }, PREFIX_OPCODE },
f88c9eb0 7476 /* 10 */
592d1631
L
7477 { Bad_Opcode },
7478 { Bad_Opcode },
7479 { Bad_Opcode },
7480 { Bad_Opcode },
f88c9eb0
SP
7481 { PREFIX_TABLE (PREFIX_0F3A14) },
7482 { PREFIX_TABLE (PREFIX_0F3A15) },
7483 { PREFIX_TABLE (PREFIX_0F3A16) },
7484 { PREFIX_TABLE (PREFIX_0F3A17) },
7485 /* 18 */
592d1631
L
7486 { Bad_Opcode },
7487 { Bad_Opcode },
7488 { Bad_Opcode },
7489 { Bad_Opcode },
7490 { Bad_Opcode },
7491 { Bad_Opcode },
7492 { Bad_Opcode },
7493 { Bad_Opcode },
f88c9eb0
SP
7494 /* 20 */
7495 { PREFIX_TABLE (PREFIX_0F3A20) },
7496 { PREFIX_TABLE (PREFIX_0F3A21) },
7497 { PREFIX_TABLE (PREFIX_0F3A22) },
592d1631
L
7498 { Bad_Opcode },
7499 { Bad_Opcode },
7500 { Bad_Opcode },
7501 { Bad_Opcode },
7502 { Bad_Opcode },
f88c9eb0 7503 /* 28 */
592d1631
L
7504 { Bad_Opcode },
7505 { Bad_Opcode },
7506 { Bad_Opcode },
7507 { Bad_Opcode },
7508 { Bad_Opcode },
7509 { Bad_Opcode },
7510 { Bad_Opcode },
7511 { Bad_Opcode },
f88c9eb0 7512 /* 30 */
592d1631
L
7513 { Bad_Opcode },
7514 { Bad_Opcode },
7515 { Bad_Opcode },
7516 { Bad_Opcode },
7517 { Bad_Opcode },
7518 { Bad_Opcode },
7519 { Bad_Opcode },
7520 { Bad_Opcode },
f88c9eb0 7521 /* 38 */
592d1631
L
7522 { Bad_Opcode },
7523 { Bad_Opcode },
7524 { Bad_Opcode },
7525 { Bad_Opcode },
7526 { Bad_Opcode },
7527 { Bad_Opcode },
7528 { Bad_Opcode },
7529 { Bad_Opcode },
f88c9eb0
SP
7530 /* 40 */
7531 { PREFIX_TABLE (PREFIX_0F3A40) },
7532 { PREFIX_TABLE (PREFIX_0F3A41) },
7533 { PREFIX_TABLE (PREFIX_0F3A42) },
592d1631 7534 { Bad_Opcode },
f88c9eb0 7535 { PREFIX_TABLE (PREFIX_0F3A44) },
592d1631
L
7536 { Bad_Opcode },
7537 { Bad_Opcode },
7538 { Bad_Opcode },
f88c9eb0 7539 /* 48 */
592d1631
L
7540 { Bad_Opcode },
7541 { Bad_Opcode },
7542 { Bad_Opcode },
7543 { Bad_Opcode },
7544 { Bad_Opcode },
7545 { Bad_Opcode },
7546 { Bad_Opcode },
7547 { Bad_Opcode },
f88c9eb0 7548 /* 50 */
592d1631
L
7549 { Bad_Opcode },
7550 { Bad_Opcode },
7551 { Bad_Opcode },
7552 { Bad_Opcode },
7553 { Bad_Opcode },
7554 { Bad_Opcode },
7555 { Bad_Opcode },
7556 { Bad_Opcode },
f88c9eb0 7557 /* 58 */
592d1631
L
7558 { Bad_Opcode },
7559 { Bad_Opcode },
7560 { Bad_Opcode },
7561 { Bad_Opcode },
7562 { Bad_Opcode },
7563 { Bad_Opcode },
7564 { Bad_Opcode },
7565 { Bad_Opcode },
f88c9eb0
SP
7566 /* 60 */
7567 { PREFIX_TABLE (PREFIX_0F3A60) },
7568 { PREFIX_TABLE (PREFIX_0F3A61) },
7569 { PREFIX_TABLE (PREFIX_0F3A62) },
7570 { PREFIX_TABLE (PREFIX_0F3A63) },
592d1631
L
7571 { Bad_Opcode },
7572 { Bad_Opcode },
7573 { Bad_Opcode },
7574 { Bad_Opcode },
f88c9eb0 7575 /* 68 */
592d1631
L
7576 { Bad_Opcode },
7577 { Bad_Opcode },
7578 { Bad_Opcode },
7579 { Bad_Opcode },
7580 { Bad_Opcode },
7581 { Bad_Opcode },
7582 { Bad_Opcode },
7583 { Bad_Opcode },
f88c9eb0 7584 /* 70 */
592d1631
L
7585 { Bad_Opcode },
7586 { Bad_Opcode },
7587 { Bad_Opcode },
7588 { Bad_Opcode },
7589 { Bad_Opcode },
7590 { Bad_Opcode },
7591 { Bad_Opcode },
7592 { Bad_Opcode },
f88c9eb0 7593 /* 78 */
592d1631
L
7594 { Bad_Opcode },
7595 { Bad_Opcode },
7596 { Bad_Opcode },
7597 { Bad_Opcode },
7598 { Bad_Opcode },
7599 { Bad_Opcode },
7600 { Bad_Opcode },
7601 { Bad_Opcode },
f88c9eb0 7602 /* 80 */
592d1631
L
7603 { Bad_Opcode },
7604 { Bad_Opcode },
7605 { Bad_Opcode },
7606 { Bad_Opcode },
7607 { Bad_Opcode },
7608 { Bad_Opcode },
7609 { Bad_Opcode },
7610 { Bad_Opcode },
f88c9eb0 7611 /* 88 */
592d1631
L
7612 { Bad_Opcode },
7613 { Bad_Opcode },
7614 { Bad_Opcode },
7615 { Bad_Opcode },
7616 { Bad_Opcode },
7617 { Bad_Opcode },
7618 { Bad_Opcode },
7619 { Bad_Opcode },
f88c9eb0 7620 /* 90 */
592d1631
L
7621 { Bad_Opcode },
7622 { Bad_Opcode },
7623 { Bad_Opcode },
7624 { Bad_Opcode },
7625 { Bad_Opcode },
7626 { Bad_Opcode },
7627 { Bad_Opcode },
7628 { Bad_Opcode },
f88c9eb0 7629 /* 98 */
592d1631
L
7630 { Bad_Opcode },
7631 { Bad_Opcode },
7632 { Bad_Opcode },
7633 { Bad_Opcode },
7634 { Bad_Opcode },
7635 { Bad_Opcode },
7636 { Bad_Opcode },
7637 { Bad_Opcode },
f88c9eb0 7638 /* a0 */
592d1631
L
7639 { Bad_Opcode },
7640 { Bad_Opcode },
7641 { Bad_Opcode },
7642 { Bad_Opcode },
7643 { Bad_Opcode },
7644 { Bad_Opcode },
7645 { Bad_Opcode },
7646 { Bad_Opcode },
f88c9eb0 7647 /* a8 */
592d1631
L
7648 { Bad_Opcode },
7649 { Bad_Opcode },
7650 { Bad_Opcode },
7651 { Bad_Opcode },
7652 { Bad_Opcode },
7653 { Bad_Opcode },
7654 { Bad_Opcode },
7655 { Bad_Opcode },
f88c9eb0 7656 /* b0 */
592d1631
L
7657 { Bad_Opcode },
7658 { Bad_Opcode },
7659 { Bad_Opcode },
7660 { Bad_Opcode },
7661 { Bad_Opcode },
7662 { Bad_Opcode },
7663 { Bad_Opcode },
7664 { Bad_Opcode },
f88c9eb0 7665 /* b8 */
592d1631
L
7666 { Bad_Opcode },
7667 { Bad_Opcode },
7668 { Bad_Opcode },
7669 { Bad_Opcode },
7670 { Bad_Opcode },
7671 { Bad_Opcode },
7672 { Bad_Opcode },
7673 { Bad_Opcode },
f88c9eb0 7674 /* c0 */
592d1631
L
7675 { Bad_Opcode },
7676 { Bad_Opcode },
7677 { Bad_Opcode },
7678 { Bad_Opcode },
7679 { Bad_Opcode },
7680 { Bad_Opcode },
7681 { Bad_Opcode },
7682 { Bad_Opcode },
f88c9eb0 7683 /* c8 */
592d1631
L
7684 { Bad_Opcode },
7685 { Bad_Opcode },
7686 { Bad_Opcode },
7687 { Bad_Opcode },
a0046408 7688 { PREFIX_TABLE (PREFIX_0F3ACC) },
592d1631 7689 { Bad_Opcode },
48521003
IT
7690 { PREFIX_TABLE (PREFIX_0F3ACE) },
7691 { PREFIX_TABLE (PREFIX_0F3ACF) },
f88c9eb0 7692 /* d0 */
592d1631
L
7693 { Bad_Opcode },
7694 { Bad_Opcode },
7695 { Bad_Opcode },
7696 { Bad_Opcode },
7697 { Bad_Opcode },
7698 { Bad_Opcode },
7699 { Bad_Opcode },
7700 { Bad_Opcode },
f88c9eb0 7701 /* d8 */
592d1631
L
7702 { Bad_Opcode },
7703 { Bad_Opcode },
7704 { Bad_Opcode },
7705 { Bad_Opcode },
7706 { Bad_Opcode },
7707 { Bad_Opcode },
7708 { Bad_Opcode },
f88c9eb0
SP
7709 { PREFIX_TABLE (PREFIX_0F3ADF) },
7710 /* e0 */
592d1631
L
7711 { Bad_Opcode },
7712 { Bad_Opcode },
7713 { Bad_Opcode },
7714 { Bad_Opcode },
7715 { Bad_Opcode },
592d1631
L
7716 { Bad_Opcode },
7717 { Bad_Opcode },
7718 { Bad_Opcode },
85f10a01 7719 /* e8 */
592d1631
L
7720 { Bad_Opcode },
7721 { Bad_Opcode },
7722 { Bad_Opcode },
7723 { Bad_Opcode },
7724 { Bad_Opcode },
7725 { Bad_Opcode },
7726 { Bad_Opcode },
7727 { Bad_Opcode },
85f10a01 7728 /* f0 */
592d1631
L
7729 { Bad_Opcode },
7730 { Bad_Opcode },
7731 { Bad_Opcode },
7732 { Bad_Opcode },
7733 { Bad_Opcode },
7734 { Bad_Opcode },
7735 { Bad_Opcode },
7736 { Bad_Opcode },
85f10a01 7737 /* f8 */
592d1631
L
7738 { Bad_Opcode },
7739 { Bad_Opcode },
7740 { Bad_Opcode },
7741 { Bad_Opcode },
7742 { Bad_Opcode },
7743 { Bad_Opcode },
7744 { Bad_Opcode },
7745 { Bad_Opcode },
85f10a01 7746 },
f88c9eb0
SP
7747};
7748
7749static const struct dis386 xop_table[][256] = {
5dd85c99 7750 /* XOP_08 */
85f10a01
MM
7751 {
7752 /* 00 */
592d1631
L
7753 { Bad_Opcode },
7754 { Bad_Opcode },
7755 { Bad_Opcode },
7756 { Bad_Opcode },
7757 { Bad_Opcode },
7758 { Bad_Opcode },
7759 { Bad_Opcode },
7760 { Bad_Opcode },
85f10a01 7761 /* 08 */
592d1631
L
7762 { Bad_Opcode },
7763 { Bad_Opcode },
7764 { Bad_Opcode },
7765 { Bad_Opcode },
7766 { Bad_Opcode },
7767 { Bad_Opcode },
7768 { Bad_Opcode },
7769 { Bad_Opcode },
85f10a01 7770 /* 10 */
3929df09 7771 { Bad_Opcode },
592d1631
L
7772 { Bad_Opcode },
7773 { Bad_Opcode },
7774 { Bad_Opcode },
7775 { Bad_Opcode },
7776 { Bad_Opcode },
7777 { Bad_Opcode },
7778 { Bad_Opcode },
85f10a01 7779 /* 18 */
592d1631
L
7780 { Bad_Opcode },
7781 { Bad_Opcode },
7782 { Bad_Opcode },
7783 { Bad_Opcode },
7784 { Bad_Opcode },
7785 { Bad_Opcode },
7786 { Bad_Opcode },
7787 { Bad_Opcode },
85f10a01 7788 /* 20 */
592d1631
L
7789 { Bad_Opcode },
7790 { Bad_Opcode },
7791 { Bad_Opcode },
7792 { Bad_Opcode },
7793 { Bad_Opcode },
7794 { Bad_Opcode },
7795 { Bad_Opcode },
7796 { Bad_Opcode },
85f10a01 7797 /* 28 */
592d1631
L
7798 { Bad_Opcode },
7799 { Bad_Opcode },
7800 { Bad_Opcode },
7801 { Bad_Opcode },
7802 { Bad_Opcode },
7803 { Bad_Opcode },
7804 { Bad_Opcode },
7805 { Bad_Opcode },
c0f3af97 7806 /* 30 */
592d1631
L
7807 { Bad_Opcode },
7808 { Bad_Opcode },
7809 { Bad_Opcode },
7810 { Bad_Opcode },
7811 { Bad_Opcode },
7812 { Bad_Opcode },
7813 { Bad_Opcode },
7814 { Bad_Opcode },
c0f3af97 7815 /* 38 */
592d1631
L
7816 { Bad_Opcode },
7817 { Bad_Opcode },
7818 { Bad_Opcode },
7819 { Bad_Opcode },
7820 { Bad_Opcode },
7821 { Bad_Opcode },
7822 { Bad_Opcode },
7823 { Bad_Opcode },
c0f3af97 7824 /* 40 */
592d1631
L
7825 { Bad_Opcode },
7826 { Bad_Opcode },
7827 { Bad_Opcode },
7828 { Bad_Opcode },
7829 { Bad_Opcode },
7830 { Bad_Opcode },
7831 { Bad_Opcode },
7832 { Bad_Opcode },
85f10a01 7833 /* 48 */
592d1631
L
7834 { Bad_Opcode },
7835 { Bad_Opcode },
7836 { Bad_Opcode },
7837 { Bad_Opcode },
7838 { Bad_Opcode },
7839 { Bad_Opcode },
7840 { Bad_Opcode },
7841 { Bad_Opcode },
c0f3af97 7842 /* 50 */
592d1631
L
7843 { Bad_Opcode },
7844 { Bad_Opcode },
7845 { Bad_Opcode },
7846 { Bad_Opcode },
7847 { Bad_Opcode },
7848 { Bad_Opcode },
7849 { Bad_Opcode },
7850 { Bad_Opcode },
85f10a01 7851 /* 58 */
592d1631
L
7852 { Bad_Opcode },
7853 { Bad_Opcode },
7854 { Bad_Opcode },
7855 { Bad_Opcode },
7856 { Bad_Opcode },
7857 { Bad_Opcode },
7858 { Bad_Opcode },
7859 { Bad_Opcode },
c1e679ec 7860 /* 60 */
592d1631
L
7861 { Bad_Opcode },
7862 { Bad_Opcode },
7863 { Bad_Opcode },
7864 { Bad_Opcode },
7865 { Bad_Opcode },
7866 { Bad_Opcode },
7867 { Bad_Opcode },
7868 { Bad_Opcode },
c0f3af97 7869 /* 68 */
592d1631
L
7870 { Bad_Opcode },
7871 { Bad_Opcode },
7872 { Bad_Opcode },
7873 { Bad_Opcode },
7874 { Bad_Opcode },
7875 { Bad_Opcode },
7876 { Bad_Opcode },
7877 { Bad_Opcode },
85f10a01 7878 /* 70 */
592d1631
L
7879 { Bad_Opcode },
7880 { Bad_Opcode },
7881 { Bad_Opcode },
7882 { Bad_Opcode },
7883 { Bad_Opcode },
7884 { Bad_Opcode },
7885 { Bad_Opcode },
7886 { Bad_Opcode },
85f10a01 7887 /* 78 */
592d1631
L
7888 { Bad_Opcode },
7889 { Bad_Opcode },
7890 { Bad_Opcode },
7891 { Bad_Opcode },
7892 { Bad_Opcode },
7893 { Bad_Opcode },
7894 { Bad_Opcode },
7895 { Bad_Opcode },
85f10a01 7896 /* 80 */
592d1631
L
7897 { Bad_Opcode },
7898 { Bad_Opcode },
7899 { Bad_Opcode },
7900 { Bad_Opcode },
7901 { Bad_Opcode },
3a2430e0
JB
7902 { "vpmacssww", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7903 { "vpmacsswd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7904 { "vpmacssdql", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
5dd85c99 7905 /* 88 */
592d1631
L
7906 { Bad_Opcode },
7907 { Bad_Opcode },
7908 { Bad_Opcode },
7909 { Bad_Opcode },
7910 { Bad_Opcode },
7911 { Bad_Opcode },
3a2430e0
JB
7912 { "vpmacssdd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7913 { "vpmacssdqh", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
5dd85c99 7914 /* 90 */
592d1631
L
7915 { Bad_Opcode },
7916 { Bad_Opcode },
7917 { Bad_Opcode },
7918 { Bad_Opcode },
7919 { Bad_Opcode },
3a2430e0
JB
7920 { "vpmacsww", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7921 { "vpmacswd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7922 { "vpmacsdql", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
5dd85c99 7923 /* 98 */
592d1631
L
7924 { Bad_Opcode },
7925 { Bad_Opcode },
7926 { Bad_Opcode },
7927 { Bad_Opcode },
7928 { Bad_Opcode },
7929 { Bad_Opcode },
3a2430e0
JB
7930 { "vpmacsdd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7931 { "vpmacsdqh", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
5dd85c99 7932 /* a0 */
592d1631
L
7933 { Bad_Opcode },
7934 { Bad_Opcode },
3a2430e0
JB
7935 { "vpcmov", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7936 { "vpperm", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
592d1631
L
7937 { Bad_Opcode },
7938 { Bad_Opcode },
3a2430e0 7939 { "vpmadcsswd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
592d1631 7940 { Bad_Opcode },
5dd85c99 7941 /* a8 */
592d1631
L
7942 { Bad_Opcode },
7943 { Bad_Opcode },
7944 { Bad_Opcode },
7945 { Bad_Opcode },
7946 { Bad_Opcode },
7947 { Bad_Opcode },
7948 { Bad_Opcode },
7949 { Bad_Opcode },
5dd85c99 7950 /* b0 */
592d1631
L
7951 { Bad_Opcode },
7952 { Bad_Opcode },
7953 { Bad_Opcode },
7954 { Bad_Opcode },
7955 { Bad_Opcode },
7956 { Bad_Opcode },
3a2430e0 7957 { "vpmadcswd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
592d1631 7958 { Bad_Opcode },
5dd85c99 7959 /* b8 */
592d1631
L
7960 { Bad_Opcode },
7961 { Bad_Opcode },
7962 { Bad_Opcode },
7963 { Bad_Opcode },
7964 { Bad_Opcode },
7965 { Bad_Opcode },
7966 { Bad_Opcode },
7967 { Bad_Opcode },
5dd85c99 7968 /* c0 */
bf890a93
IT
7969 { "vprotb", { XM, Vex_2src_1, Ib }, 0 },
7970 { "vprotw", { XM, Vex_2src_1, Ib }, 0 },
7971 { "vprotd", { XM, Vex_2src_1, Ib }, 0 },
7972 { "vprotq", { XM, Vex_2src_1, Ib }, 0 },
592d1631
L
7973 { Bad_Opcode },
7974 { Bad_Opcode },
7975 { Bad_Opcode },
7976 { Bad_Opcode },
5dd85c99 7977 /* c8 */
592d1631
L
7978 { Bad_Opcode },
7979 { Bad_Opcode },
7980 { Bad_Opcode },
7981 { Bad_Opcode },
ff688e1f
L
7982 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CC) },
7983 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CD) },
7984 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CE) },
7985 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CF) },
5dd85c99 7986 /* d0 */
592d1631
L
7987 { Bad_Opcode },
7988 { Bad_Opcode },
7989 { Bad_Opcode },
7990 { Bad_Opcode },
7991 { Bad_Opcode },
7992 { Bad_Opcode },
7993 { Bad_Opcode },
7994 { Bad_Opcode },
5dd85c99 7995 /* d8 */
592d1631
L
7996 { Bad_Opcode },
7997 { Bad_Opcode },
7998 { Bad_Opcode },
7999 { Bad_Opcode },
8000 { Bad_Opcode },
8001 { Bad_Opcode },
8002 { Bad_Opcode },
8003 { Bad_Opcode },
5dd85c99 8004 /* e0 */
592d1631
L
8005 { Bad_Opcode },
8006 { Bad_Opcode },
8007 { Bad_Opcode },
8008 { Bad_Opcode },
8009 { Bad_Opcode },
8010 { Bad_Opcode },
8011 { Bad_Opcode },
8012 { Bad_Opcode },
5dd85c99 8013 /* e8 */
592d1631
L
8014 { Bad_Opcode },
8015 { Bad_Opcode },
8016 { Bad_Opcode },
8017 { Bad_Opcode },
ff688e1f
L
8018 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EC) },
8019 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_ED) },
8020 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EE) },
8021 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EF) },
5dd85c99 8022 /* f0 */
592d1631
L
8023 { Bad_Opcode },
8024 { Bad_Opcode },
8025 { Bad_Opcode },
8026 { Bad_Opcode },
8027 { Bad_Opcode },
8028 { Bad_Opcode },
8029 { Bad_Opcode },
8030 { Bad_Opcode },
5dd85c99 8031 /* f8 */
592d1631
L
8032 { Bad_Opcode },
8033 { Bad_Opcode },
8034 { Bad_Opcode },
8035 { Bad_Opcode },
8036 { Bad_Opcode },
8037 { Bad_Opcode },
8038 { Bad_Opcode },
8039 { Bad_Opcode },
5dd85c99
SP
8040 },
8041 /* XOP_09 */
8042 {
8043 /* 00 */
592d1631 8044 { Bad_Opcode },
2a2a0f38
QN
8045 { REG_TABLE (REG_XOP_TBM_01) },
8046 { REG_TABLE (REG_XOP_TBM_02) },
592d1631
L
8047 { Bad_Opcode },
8048 { Bad_Opcode },
8049 { Bad_Opcode },
8050 { Bad_Opcode },
8051 { Bad_Opcode },
5dd85c99 8052 /* 08 */
592d1631
L
8053 { Bad_Opcode },
8054 { Bad_Opcode },
8055 { Bad_Opcode },
8056 { Bad_Opcode },
8057 { Bad_Opcode },
8058 { Bad_Opcode },
8059 { Bad_Opcode },
8060 { Bad_Opcode },
5dd85c99 8061 /* 10 */
592d1631
L
8062 { Bad_Opcode },
8063 { Bad_Opcode },
5dd85c99 8064 { REG_TABLE (REG_XOP_LWPCB) },
592d1631
L
8065 { Bad_Opcode },
8066 { Bad_Opcode },
8067 { Bad_Opcode },
8068 { Bad_Opcode },
8069 { Bad_Opcode },
5dd85c99 8070 /* 18 */
592d1631
L
8071 { Bad_Opcode },
8072 { Bad_Opcode },
8073 { Bad_Opcode },
8074 { Bad_Opcode },
8075 { Bad_Opcode },
8076 { Bad_Opcode },
8077 { Bad_Opcode },
8078 { Bad_Opcode },
5dd85c99 8079 /* 20 */
592d1631
L
8080 { Bad_Opcode },
8081 { Bad_Opcode },
8082 { Bad_Opcode },
8083 { Bad_Opcode },
8084 { Bad_Opcode },
8085 { Bad_Opcode },
8086 { Bad_Opcode },
8087 { Bad_Opcode },
5dd85c99 8088 /* 28 */
592d1631
L
8089 { Bad_Opcode },
8090 { Bad_Opcode },
8091 { Bad_Opcode },
8092 { Bad_Opcode },
8093 { Bad_Opcode },
8094 { Bad_Opcode },
8095 { Bad_Opcode },
8096 { Bad_Opcode },
5dd85c99 8097 /* 30 */
592d1631
L
8098 { Bad_Opcode },
8099 { Bad_Opcode },
8100 { Bad_Opcode },
8101 { Bad_Opcode },
8102 { Bad_Opcode },
8103 { Bad_Opcode },
8104 { Bad_Opcode },
8105 { Bad_Opcode },
5dd85c99 8106 /* 38 */
592d1631
L
8107 { Bad_Opcode },
8108 { Bad_Opcode },
8109 { Bad_Opcode },
8110 { Bad_Opcode },
8111 { Bad_Opcode },
8112 { Bad_Opcode },
8113 { Bad_Opcode },
8114 { Bad_Opcode },
5dd85c99 8115 /* 40 */
592d1631
L
8116 { Bad_Opcode },
8117 { Bad_Opcode },
8118 { Bad_Opcode },
8119 { Bad_Opcode },
8120 { Bad_Opcode },
8121 { Bad_Opcode },
8122 { Bad_Opcode },
8123 { Bad_Opcode },
5dd85c99 8124 /* 48 */
592d1631
L
8125 { Bad_Opcode },
8126 { Bad_Opcode },
8127 { Bad_Opcode },
8128 { Bad_Opcode },
8129 { Bad_Opcode },
8130 { Bad_Opcode },
8131 { Bad_Opcode },
8132 { Bad_Opcode },
5dd85c99 8133 /* 50 */
592d1631
L
8134 { Bad_Opcode },
8135 { Bad_Opcode },
8136 { Bad_Opcode },
8137 { Bad_Opcode },
8138 { Bad_Opcode },
8139 { Bad_Opcode },
8140 { Bad_Opcode },
8141 { Bad_Opcode },
5dd85c99 8142 /* 58 */
592d1631
L
8143 { Bad_Opcode },
8144 { Bad_Opcode },
8145 { Bad_Opcode },
8146 { Bad_Opcode },
8147 { Bad_Opcode },
8148 { Bad_Opcode },
8149 { Bad_Opcode },
8150 { Bad_Opcode },
5dd85c99 8151 /* 60 */
592d1631
L
8152 { Bad_Opcode },
8153 { Bad_Opcode },
8154 { Bad_Opcode },
8155 { Bad_Opcode },
8156 { Bad_Opcode },
8157 { Bad_Opcode },
8158 { Bad_Opcode },
8159 { Bad_Opcode },
5dd85c99 8160 /* 68 */
592d1631
L
8161 { Bad_Opcode },
8162 { Bad_Opcode },
8163 { Bad_Opcode },
8164 { Bad_Opcode },
8165 { Bad_Opcode },
8166 { Bad_Opcode },
8167 { Bad_Opcode },
8168 { Bad_Opcode },
5dd85c99 8169 /* 70 */
592d1631
L
8170 { Bad_Opcode },
8171 { Bad_Opcode },
8172 { Bad_Opcode },
8173 { Bad_Opcode },
8174 { Bad_Opcode },
8175 { Bad_Opcode },
8176 { Bad_Opcode },
8177 { Bad_Opcode },
5dd85c99 8178 /* 78 */
592d1631
L
8179 { Bad_Opcode },
8180 { Bad_Opcode },
8181 { Bad_Opcode },
8182 { Bad_Opcode },
8183 { Bad_Opcode },
8184 { Bad_Opcode },
8185 { Bad_Opcode },
8186 { Bad_Opcode },
5dd85c99 8187 /* 80 */
592a252b
L
8188 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_80) },
8189 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_81) },
bf890a93
IT
8190 { "vfrczss", { XM, EXd }, 0 },
8191 { "vfrczsd", { XM, EXq }, 0 },
592d1631
L
8192 { Bad_Opcode },
8193 { Bad_Opcode },
8194 { Bad_Opcode },
8195 { Bad_Opcode },
5dd85c99 8196 /* 88 */
592d1631
L
8197 { Bad_Opcode },
8198 { Bad_Opcode },
8199 { Bad_Opcode },
8200 { Bad_Opcode },
8201 { Bad_Opcode },
8202 { Bad_Opcode },
8203 { Bad_Opcode },
8204 { Bad_Opcode },
5dd85c99 8205 /* 90 */
bf890a93
IT
8206 { "vprotb", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8207 { "vprotw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8208 { "vprotd", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8209 { "vprotq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8210 { "vpshlb", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8211 { "vpshlw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8212 { "vpshld", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8213 { "vpshlq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
5dd85c99 8214 /* 98 */
bf890a93
IT
8215 { "vpshab", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8216 { "vpshaw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8217 { "vpshad", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8218 { "vpshaq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
592d1631
L
8219 { Bad_Opcode },
8220 { Bad_Opcode },
8221 { Bad_Opcode },
8222 { Bad_Opcode },
5dd85c99 8223 /* a0 */
592d1631
L
8224 { Bad_Opcode },
8225 { Bad_Opcode },
8226 { Bad_Opcode },
8227 { Bad_Opcode },
8228 { Bad_Opcode },
8229 { Bad_Opcode },
8230 { Bad_Opcode },
8231 { Bad_Opcode },
5dd85c99 8232 /* a8 */
592d1631
L
8233 { Bad_Opcode },
8234 { Bad_Opcode },
8235 { Bad_Opcode },
8236 { Bad_Opcode },
8237 { Bad_Opcode },
8238 { Bad_Opcode },
8239 { Bad_Opcode },
8240 { Bad_Opcode },
5dd85c99 8241 /* b0 */
592d1631
L
8242 { Bad_Opcode },
8243 { Bad_Opcode },
8244 { Bad_Opcode },
8245 { Bad_Opcode },
8246 { Bad_Opcode },
8247 { Bad_Opcode },
8248 { Bad_Opcode },
8249 { Bad_Opcode },
5dd85c99 8250 /* b8 */
592d1631
L
8251 { Bad_Opcode },
8252 { Bad_Opcode },
8253 { Bad_Opcode },
8254 { Bad_Opcode },
8255 { Bad_Opcode },
8256 { Bad_Opcode },
8257 { Bad_Opcode },
8258 { Bad_Opcode },
5dd85c99 8259 /* c0 */
592d1631 8260 { Bad_Opcode },
bf890a93
IT
8261 { "vphaddbw", { XM, EXxmm }, 0 },
8262 { "vphaddbd", { XM, EXxmm }, 0 },
8263 { "vphaddbq", { XM, EXxmm }, 0 },
592d1631
L
8264 { Bad_Opcode },
8265 { Bad_Opcode },
bf890a93
IT
8266 { "vphaddwd", { XM, EXxmm }, 0 },
8267 { "vphaddwq", { XM, EXxmm }, 0 },
5dd85c99 8268 /* c8 */
592d1631
L
8269 { Bad_Opcode },
8270 { Bad_Opcode },
8271 { Bad_Opcode },
bf890a93 8272 { "vphadddq", { XM, EXxmm }, 0 },
592d1631
L
8273 { Bad_Opcode },
8274 { Bad_Opcode },
8275 { Bad_Opcode },
8276 { Bad_Opcode },
5dd85c99 8277 /* d0 */
592d1631 8278 { Bad_Opcode },
bf890a93
IT
8279 { "vphaddubw", { XM, EXxmm }, 0 },
8280 { "vphaddubd", { XM, EXxmm }, 0 },
8281 { "vphaddubq", { XM, EXxmm }, 0 },
592d1631
L
8282 { Bad_Opcode },
8283 { Bad_Opcode },
bf890a93
IT
8284 { "vphadduwd", { XM, EXxmm }, 0 },
8285 { "vphadduwq", { XM, EXxmm }, 0 },
5dd85c99 8286 /* d8 */
592d1631
L
8287 { Bad_Opcode },
8288 { Bad_Opcode },
8289 { Bad_Opcode },
bf890a93 8290 { "vphaddudq", { XM, EXxmm }, 0 },
592d1631
L
8291 { Bad_Opcode },
8292 { Bad_Opcode },
8293 { Bad_Opcode },
8294 { Bad_Opcode },
5dd85c99 8295 /* e0 */
592d1631 8296 { Bad_Opcode },
bf890a93
IT
8297 { "vphsubbw", { XM, EXxmm }, 0 },
8298 { "vphsubwd", { XM, EXxmm }, 0 },
8299 { "vphsubdq", { XM, EXxmm }, 0 },
592d1631
L
8300 { Bad_Opcode },
8301 { Bad_Opcode },
8302 { Bad_Opcode },
8303 { Bad_Opcode },
4e7d34a6 8304 /* e8 */
592d1631
L
8305 { Bad_Opcode },
8306 { Bad_Opcode },
8307 { Bad_Opcode },
8308 { Bad_Opcode },
8309 { Bad_Opcode },
8310 { Bad_Opcode },
8311 { Bad_Opcode },
8312 { Bad_Opcode },
4e7d34a6 8313 /* f0 */
592d1631
L
8314 { Bad_Opcode },
8315 { Bad_Opcode },
8316 { Bad_Opcode },
8317 { Bad_Opcode },
8318 { Bad_Opcode },
8319 { Bad_Opcode },
8320 { Bad_Opcode },
8321 { Bad_Opcode },
4e7d34a6 8322 /* f8 */
592d1631
L
8323 { Bad_Opcode },
8324 { Bad_Opcode },
8325 { Bad_Opcode },
8326 { Bad_Opcode },
8327 { Bad_Opcode },
8328 { Bad_Opcode },
8329 { Bad_Opcode },
8330 { Bad_Opcode },
4e7d34a6 8331 },
f88c9eb0 8332 /* XOP_0A */
4e7d34a6
L
8333 {
8334 /* 00 */
592d1631
L
8335 { Bad_Opcode },
8336 { Bad_Opcode },
8337 { Bad_Opcode },
8338 { Bad_Opcode },
8339 { Bad_Opcode },
8340 { Bad_Opcode },
8341 { Bad_Opcode },
8342 { Bad_Opcode },
4e7d34a6 8343 /* 08 */
592d1631
L
8344 { Bad_Opcode },
8345 { Bad_Opcode },
8346 { Bad_Opcode },
8347 { Bad_Opcode },
8348 { Bad_Opcode },
8349 { Bad_Opcode },
8350 { Bad_Opcode },
8351 { Bad_Opcode },
4e7d34a6 8352 /* 10 */
bf890a93 8353 { "bextr", { Gv, Ev, Iq }, 0 },
592d1631 8354 { Bad_Opcode },
f88c9eb0 8355 { REG_TABLE (REG_XOP_LWP) },
592d1631
L
8356 { Bad_Opcode },
8357 { Bad_Opcode },
8358 { Bad_Opcode },
8359 { Bad_Opcode },
8360 { Bad_Opcode },
4e7d34a6 8361 /* 18 */
592d1631
L
8362 { Bad_Opcode },
8363 { Bad_Opcode },
8364 { Bad_Opcode },
8365 { Bad_Opcode },
8366 { Bad_Opcode },
8367 { Bad_Opcode },
8368 { Bad_Opcode },
8369 { Bad_Opcode },
4e7d34a6 8370 /* 20 */
592d1631
L
8371 { Bad_Opcode },
8372 { Bad_Opcode },
8373 { Bad_Opcode },
8374 { Bad_Opcode },
8375 { Bad_Opcode },
8376 { Bad_Opcode },
8377 { Bad_Opcode },
8378 { Bad_Opcode },
4e7d34a6 8379 /* 28 */
592d1631
L
8380 { Bad_Opcode },
8381 { Bad_Opcode },
8382 { Bad_Opcode },
8383 { Bad_Opcode },
8384 { Bad_Opcode },
8385 { Bad_Opcode },
8386 { Bad_Opcode },
8387 { Bad_Opcode },
4e7d34a6 8388 /* 30 */
592d1631
L
8389 { Bad_Opcode },
8390 { Bad_Opcode },
8391 { Bad_Opcode },
8392 { Bad_Opcode },
8393 { Bad_Opcode },
8394 { Bad_Opcode },
8395 { Bad_Opcode },
8396 { Bad_Opcode },
c0f3af97 8397 /* 38 */
592d1631
L
8398 { Bad_Opcode },
8399 { Bad_Opcode },
8400 { Bad_Opcode },
8401 { Bad_Opcode },
8402 { Bad_Opcode },
8403 { Bad_Opcode },
8404 { Bad_Opcode },
8405 { Bad_Opcode },
c0f3af97 8406 /* 40 */
592d1631
L
8407 { Bad_Opcode },
8408 { Bad_Opcode },
8409 { Bad_Opcode },
8410 { Bad_Opcode },
8411 { Bad_Opcode },
8412 { Bad_Opcode },
8413 { Bad_Opcode },
8414 { Bad_Opcode },
c1e679ec 8415 /* 48 */
592d1631
L
8416 { Bad_Opcode },
8417 { Bad_Opcode },
8418 { Bad_Opcode },
8419 { Bad_Opcode },
8420 { Bad_Opcode },
8421 { Bad_Opcode },
8422 { Bad_Opcode },
8423 { Bad_Opcode },
c1e679ec 8424 /* 50 */
592d1631
L
8425 { Bad_Opcode },
8426 { Bad_Opcode },
8427 { Bad_Opcode },
8428 { Bad_Opcode },
8429 { Bad_Opcode },
8430 { Bad_Opcode },
8431 { Bad_Opcode },
8432 { Bad_Opcode },
4e7d34a6 8433 /* 58 */
592d1631
L
8434 { Bad_Opcode },
8435 { Bad_Opcode },
8436 { Bad_Opcode },
8437 { Bad_Opcode },
8438 { Bad_Opcode },
8439 { Bad_Opcode },
8440 { Bad_Opcode },
8441 { Bad_Opcode },
4e7d34a6 8442 /* 60 */
592d1631
L
8443 { Bad_Opcode },
8444 { Bad_Opcode },
8445 { Bad_Opcode },
8446 { Bad_Opcode },
8447 { Bad_Opcode },
8448 { Bad_Opcode },
8449 { Bad_Opcode },
8450 { Bad_Opcode },
4e7d34a6 8451 /* 68 */
592d1631
L
8452 { Bad_Opcode },
8453 { Bad_Opcode },
8454 { Bad_Opcode },
8455 { Bad_Opcode },
8456 { Bad_Opcode },
8457 { Bad_Opcode },
8458 { Bad_Opcode },
8459 { Bad_Opcode },
4e7d34a6 8460 /* 70 */
592d1631
L
8461 { Bad_Opcode },
8462 { Bad_Opcode },
8463 { Bad_Opcode },
8464 { Bad_Opcode },
8465 { Bad_Opcode },
8466 { Bad_Opcode },
8467 { Bad_Opcode },
8468 { Bad_Opcode },
4e7d34a6 8469 /* 78 */
592d1631
L
8470 { Bad_Opcode },
8471 { Bad_Opcode },
8472 { Bad_Opcode },
8473 { Bad_Opcode },
8474 { Bad_Opcode },
8475 { Bad_Opcode },
8476 { Bad_Opcode },
8477 { Bad_Opcode },
4e7d34a6 8478 /* 80 */
592d1631
L
8479 { Bad_Opcode },
8480 { Bad_Opcode },
8481 { Bad_Opcode },
8482 { Bad_Opcode },
8483 { Bad_Opcode },
8484 { Bad_Opcode },
8485 { Bad_Opcode },
8486 { Bad_Opcode },
4e7d34a6 8487 /* 88 */
592d1631
L
8488 { Bad_Opcode },
8489 { Bad_Opcode },
8490 { Bad_Opcode },
8491 { Bad_Opcode },
8492 { Bad_Opcode },
8493 { Bad_Opcode },
8494 { Bad_Opcode },
8495 { Bad_Opcode },
4e7d34a6 8496 /* 90 */
592d1631
L
8497 { Bad_Opcode },
8498 { Bad_Opcode },
8499 { Bad_Opcode },
8500 { Bad_Opcode },
8501 { Bad_Opcode },
8502 { Bad_Opcode },
8503 { Bad_Opcode },
8504 { Bad_Opcode },
4e7d34a6 8505 /* 98 */
592d1631
L
8506 { Bad_Opcode },
8507 { Bad_Opcode },
8508 { Bad_Opcode },
8509 { Bad_Opcode },
8510 { Bad_Opcode },
8511 { Bad_Opcode },
8512 { Bad_Opcode },
8513 { Bad_Opcode },
4e7d34a6 8514 /* a0 */
592d1631
L
8515 { Bad_Opcode },
8516 { Bad_Opcode },
8517 { Bad_Opcode },
8518 { Bad_Opcode },
8519 { Bad_Opcode },
8520 { Bad_Opcode },
8521 { Bad_Opcode },
8522 { Bad_Opcode },
4e7d34a6 8523 /* a8 */
592d1631
L
8524 { Bad_Opcode },
8525 { Bad_Opcode },
8526 { Bad_Opcode },
8527 { Bad_Opcode },
8528 { Bad_Opcode },
8529 { Bad_Opcode },
8530 { Bad_Opcode },
8531 { Bad_Opcode },
d5d7db8e 8532 /* b0 */
592d1631
L
8533 { Bad_Opcode },
8534 { Bad_Opcode },
8535 { Bad_Opcode },
8536 { Bad_Opcode },
8537 { Bad_Opcode },
8538 { Bad_Opcode },
8539 { Bad_Opcode },
8540 { Bad_Opcode },
85f10a01 8541 /* b8 */
592d1631
L
8542 { Bad_Opcode },
8543 { Bad_Opcode },
8544 { Bad_Opcode },
8545 { Bad_Opcode },
8546 { Bad_Opcode },
8547 { Bad_Opcode },
8548 { Bad_Opcode },
8549 { Bad_Opcode },
85f10a01 8550 /* c0 */
592d1631
L
8551 { Bad_Opcode },
8552 { Bad_Opcode },
8553 { Bad_Opcode },
8554 { Bad_Opcode },
8555 { Bad_Opcode },
8556 { Bad_Opcode },
8557 { Bad_Opcode },
8558 { Bad_Opcode },
85f10a01 8559 /* c8 */
592d1631
L
8560 { Bad_Opcode },
8561 { Bad_Opcode },
8562 { Bad_Opcode },
8563 { Bad_Opcode },
8564 { Bad_Opcode },
8565 { Bad_Opcode },
8566 { Bad_Opcode },
8567 { Bad_Opcode },
85f10a01 8568 /* d0 */
592d1631
L
8569 { Bad_Opcode },
8570 { Bad_Opcode },
8571 { Bad_Opcode },
8572 { Bad_Opcode },
8573 { Bad_Opcode },
8574 { Bad_Opcode },
8575 { Bad_Opcode },
8576 { Bad_Opcode },
85f10a01 8577 /* d8 */
592d1631
L
8578 { Bad_Opcode },
8579 { Bad_Opcode },
8580 { Bad_Opcode },
8581 { Bad_Opcode },
8582 { Bad_Opcode },
8583 { Bad_Opcode },
8584 { Bad_Opcode },
8585 { Bad_Opcode },
85f10a01 8586 /* e0 */
592d1631
L
8587 { Bad_Opcode },
8588 { Bad_Opcode },
8589 { Bad_Opcode },
8590 { Bad_Opcode },
8591 { Bad_Opcode },
8592 { Bad_Opcode },
8593 { Bad_Opcode },
8594 { Bad_Opcode },
85f10a01 8595 /* e8 */
592d1631
L
8596 { Bad_Opcode },
8597 { Bad_Opcode },
8598 { Bad_Opcode },
8599 { Bad_Opcode },
8600 { Bad_Opcode },
8601 { Bad_Opcode },
8602 { Bad_Opcode },
8603 { Bad_Opcode },
85f10a01 8604 /* f0 */
592d1631
L
8605 { Bad_Opcode },
8606 { Bad_Opcode },
8607 { Bad_Opcode },
8608 { Bad_Opcode },
8609 { Bad_Opcode },
8610 { Bad_Opcode },
8611 { Bad_Opcode },
8612 { Bad_Opcode },
85f10a01 8613 /* f8 */
592d1631
L
8614 { Bad_Opcode },
8615 { Bad_Opcode },
8616 { Bad_Opcode },
8617 { Bad_Opcode },
8618 { Bad_Opcode },
8619 { Bad_Opcode },
8620 { Bad_Opcode },
8621 { Bad_Opcode },
85f10a01 8622 },
c0f3af97
L
8623};
8624
8625static const struct dis386 vex_table[][256] = {
8626 /* VEX_0F */
85f10a01
MM
8627 {
8628 /* 00 */
592d1631
L
8629 { Bad_Opcode },
8630 { Bad_Opcode },
8631 { Bad_Opcode },
8632 { Bad_Opcode },
8633 { Bad_Opcode },
8634 { Bad_Opcode },
8635 { Bad_Opcode },
8636 { Bad_Opcode },
85f10a01 8637 /* 08 */
592d1631
L
8638 { Bad_Opcode },
8639 { Bad_Opcode },
8640 { Bad_Opcode },
8641 { Bad_Opcode },
8642 { Bad_Opcode },
8643 { Bad_Opcode },
8644 { Bad_Opcode },
8645 { Bad_Opcode },
c0f3af97 8646 /* 10 */
592a252b
L
8647 { PREFIX_TABLE (PREFIX_VEX_0F10) },
8648 { PREFIX_TABLE (PREFIX_VEX_0F11) },
8649 { PREFIX_TABLE (PREFIX_VEX_0F12) },
8650 { MOD_TABLE (MOD_VEX_0F13) },
8651 { VEX_W_TABLE (VEX_W_0F14) },
8652 { VEX_W_TABLE (VEX_W_0F15) },
8653 { PREFIX_TABLE (PREFIX_VEX_0F16) },
8654 { MOD_TABLE (MOD_VEX_0F17) },
c0f3af97 8655 /* 18 */
592d1631
L
8656 { Bad_Opcode },
8657 { Bad_Opcode },
8658 { Bad_Opcode },
8659 { Bad_Opcode },
8660 { Bad_Opcode },
8661 { Bad_Opcode },
8662 { Bad_Opcode },
8663 { Bad_Opcode },
c0f3af97 8664 /* 20 */
592d1631
L
8665 { Bad_Opcode },
8666 { Bad_Opcode },
8667 { Bad_Opcode },
8668 { Bad_Opcode },
8669 { Bad_Opcode },
8670 { Bad_Opcode },
8671 { Bad_Opcode },
8672 { Bad_Opcode },
c0f3af97 8673 /* 28 */
592a252b
L
8674 { VEX_W_TABLE (VEX_W_0F28) },
8675 { VEX_W_TABLE (VEX_W_0F29) },
8676 { PREFIX_TABLE (PREFIX_VEX_0F2A) },
8677 { MOD_TABLE (MOD_VEX_0F2B) },
8678 { PREFIX_TABLE (PREFIX_VEX_0F2C) },
8679 { PREFIX_TABLE (PREFIX_VEX_0F2D) },
8680 { PREFIX_TABLE (PREFIX_VEX_0F2E) },
8681 { PREFIX_TABLE (PREFIX_VEX_0F2F) },
85f10a01 8682 /* 30 */
592d1631
L
8683 { Bad_Opcode },
8684 { Bad_Opcode },
8685 { Bad_Opcode },
8686 { Bad_Opcode },
8687 { Bad_Opcode },
8688 { Bad_Opcode },
8689 { Bad_Opcode },
8690 { Bad_Opcode },
4e7d34a6 8691 /* 38 */
592d1631
L
8692 { Bad_Opcode },
8693 { Bad_Opcode },
8694 { Bad_Opcode },
8695 { Bad_Opcode },
8696 { Bad_Opcode },
8697 { Bad_Opcode },
8698 { Bad_Opcode },
8699 { Bad_Opcode },
d5d7db8e 8700 /* 40 */
592d1631 8701 { Bad_Opcode },
43234a1e
L
8702 { PREFIX_TABLE (PREFIX_VEX_0F41) },
8703 { PREFIX_TABLE (PREFIX_VEX_0F42) },
592d1631 8704 { Bad_Opcode },
43234a1e
L
8705 { PREFIX_TABLE (PREFIX_VEX_0F44) },
8706 { PREFIX_TABLE (PREFIX_VEX_0F45) },
8707 { PREFIX_TABLE (PREFIX_VEX_0F46) },
8708 { PREFIX_TABLE (PREFIX_VEX_0F47) },
85f10a01 8709 /* 48 */
592d1631
L
8710 { Bad_Opcode },
8711 { Bad_Opcode },
1ba585e8 8712 { PREFIX_TABLE (PREFIX_VEX_0F4A) },
43234a1e 8713 { PREFIX_TABLE (PREFIX_VEX_0F4B) },
592d1631
L
8714 { Bad_Opcode },
8715 { Bad_Opcode },
8716 { Bad_Opcode },
8717 { Bad_Opcode },
d5d7db8e 8718 /* 50 */
592a252b
L
8719 { MOD_TABLE (MOD_VEX_0F50) },
8720 { PREFIX_TABLE (PREFIX_VEX_0F51) },
8721 { PREFIX_TABLE (PREFIX_VEX_0F52) },
8722 { PREFIX_TABLE (PREFIX_VEX_0F53) },
bf890a93
IT
8723 { "vandpX", { XM, Vex, EXx }, 0 },
8724 { "vandnpX", { XM, Vex, EXx }, 0 },
8725 { "vorpX", { XM, Vex, EXx }, 0 },
8726 { "vxorpX", { XM, Vex, EXx }, 0 },
c0f3af97 8727 /* 58 */
592a252b
L
8728 { PREFIX_TABLE (PREFIX_VEX_0F58) },
8729 { PREFIX_TABLE (PREFIX_VEX_0F59) },
8730 { PREFIX_TABLE (PREFIX_VEX_0F5A) },
8731 { PREFIX_TABLE (PREFIX_VEX_0F5B) },
8732 { PREFIX_TABLE (PREFIX_VEX_0F5C) },
8733 { PREFIX_TABLE (PREFIX_VEX_0F5D) },
8734 { PREFIX_TABLE (PREFIX_VEX_0F5E) },
8735 { PREFIX_TABLE (PREFIX_VEX_0F5F) },
c0f3af97 8736 /* 60 */
592a252b
L
8737 { PREFIX_TABLE (PREFIX_VEX_0F60) },
8738 { PREFIX_TABLE (PREFIX_VEX_0F61) },
8739 { PREFIX_TABLE (PREFIX_VEX_0F62) },
8740 { PREFIX_TABLE (PREFIX_VEX_0F63) },
8741 { PREFIX_TABLE (PREFIX_VEX_0F64) },
8742 { PREFIX_TABLE (PREFIX_VEX_0F65) },
8743 { PREFIX_TABLE (PREFIX_VEX_0F66) },
8744 { PREFIX_TABLE (PREFIX_VEX_0F67) },
c0f3af97 8745 /* 68 */
592a252b
L
8746 { PREFIX_TABLE (PREFIX_VEX_0F68) },
8747 { PREFIX_TABLE (PREFIX_VEX_0F69) },
8748 { PREFIX_TABLE (PREFIX_VEX_0F6A) },
8749 { PREFIX_TABLE (PREFIX_VEX_0F6B) },
8750 { PREFIX_TABLE (PREFIX_VEX_0F6C) },
8751 { PREFIX_TABLE (PREFIX_VEX_0F6D) },
8752 { PREFIX_TABLE (PREFIX_VEX_0F6E) },
8753 { PREFIX_TABLE (PREFIX_VEX_0F6F) },
c0f3af97 8754 /* 70 */
592a252b
L
8755 { PREFIX_TABLE (PREFIX_VEX_0F70) },
8756 { REG_TABLE (REG_VEX_0F71) },
8757 { REG_TABLE (REG_VEX_0F72) },
8758 { REG_TABLE (REG_VEX_0F73) },
8759 { PREFIX_TABLE (PREFIX_VEX_0F74) },
8760 { PREFIX_TABLE (PREFIX_VEX_0F75) },
8761 { PREFIX_TABLE (PREFIX_VEX_0F76) },
8762 { PREFIX_TABLE (PREFIX_VEX_0F77) },
c0f3af97 8763 /* 78 */
592d1631
L
8764 { Bad_Opcode },
8765 { Bad_Opcode },
8766 { Bad_Opcode },
8767 { Bad_Opcode },
592a252b
L
8768 { PREFIX_TABLE (PREFIX_VEX_0F7C) },
8769 { PREFIX_TABLE (PREFIX_VEX_0F7D) },
8770 { PREFIX_TABLE (PREFIX_VEX_0F7E) },
8771 { PREFIX_TABLE (PREFIX_VEX_0F7F) },
c0f3af97 8772 /* 80 */
592d1631
L
8773 { Bad_Opcode },
8774 { Bad_Opcode },
8775 { Bad_Opcode },
8776 { Bad_Opcode },
8777 { Bad_Opcode },
8778 { Bad_Opcode },
8779 { Bad_Opcode },
8780 { Bad_Opcode },
c0f3af97 8781 /* 88 */
592d1631
L
8782 { Bad_Opcode },
8783 { Bad_Opcode },
8784 { Bad_Opcode },
8785 { Bad_Opcode },
8786 { Bad_Opcode },
8787 { Bad_Opcode },
8788 { Bad_Opcode },
8789 { Bad_Opcode },
c0f3af97 8790 /* 90 */
43234a1e
L
8791 { PREFIX_TABLE (PREFIX_VEX_0F90) },
8792 { PREFIX_TABLE (PREFIX_VEX_0F91) },
8793 { PREFIX_TABLE (PREFIX_VEX_0F92) },
8794 { PREFIX_TABLE (PREFIX_VEX_0F93) },
592d1631
L
8795 { Bad_Opcode },
8796 { Bad_Opcode },
8797 { Bad_Opcode },
8798 { Bad_Opcode },
c0f3af97 8799 /* 98 */
43234a1e 8800 { PREFIX_TABLE (PREFIX_VEX_0F98) },
1ba585e8 8801 { PREFIX_TABLE (PREFIX_VEX_0F99) },
592d1631
L
8802 { Bad_Opcode },
8803 { Bad_Opcode },
8804 { Bad_Opcode },
8805 { Bad_Opcode },
8806 { Bad_Opcode },
8807 { Bad_Opcode },
c0f3af97 8808 /* a0 */
592d1631
L
8809 { Bad_Opcode },
8810 { Bad_Opcode },
8811 { Bad_Opcode },
8812 { Bad_Opcode },
8813 { Bad_Opcode },
8814 { Bad_Opcode },
8815 { Bad_Opcode },
8816 { Bad_Opcode },
c0f3af97 8817 /* a8 */
592d1631
L
8818 { Bad_Opcode },
8819 { Bad_Opcode },
8820 { Bad_Opcode },
8821 { Bad_Opcode },
8822 { Bad_Opcode },
8823 { Bad_Opcode },
592a252b 8824 { REG_TABLE (REG_VEX_0FAE) },
592d1631 8825 { Bad_Opcode },
c0f3af97 8826 /* b0 */
592d1631
L
8827 { Bad_Opcode },
8828 { Bad_Opcode },
8829 { Bad_Opcode },
8830 { Bad_Opcode },
8831 { Bad_Opcode },
8832 { Bad_Opcode },
8833 { Bad_Opcode },
8834 { Bad_Opcode },
c0f3af97 8835 /* b8 */
592d1631
L
8836 { Bad_Opcode },
8837 { Bad_Opcode },
8838 { Bad_Opcode },
8839 { Bad_Opcode },
8840 { Bad_Opcode },
8841 { Bad_Opcode },
8842 { Bad_Opcode },
8843 { Bad_Opcode },
c0f3af97 8844 /* c0 */
592d1631
L
8845 { Bad_Opcode },
8846 { Bad_Opcode },
592a252b 8847 { PREFIX_TABLE (PREFIX_VEX_0FC2) },
592d1631 8848 { Bad_Opcode },
592a252b
L
8849 { PREFIX_TABLE (PREFIX_VEX_0FC4) },
8850 { PREFIX_TABLE (PREFIX_VEX_0FC5) },
bf890a93 8851 { "vshufpX", { XM, Vex, EXx, Ib }, 0 },
592d1631 8852 { Bad_Opcode },
c0f3af97 8853 /* c8 */
592d1631
L
8854 { Bad_Opcode },
8855 { Bad_Opcode },
8856 { Bad_Opcode },
8857 { Bad_Opcode },
8858 { Bad_Opcode },
8859 { Bad_Opcode },
8860 { Bad_Opcode },
8861 { Bad_Opcode },
c0f3af97 8862 /* d0 */
592a252b
L
8863 { PREFIX_TABLE (PREFIX_VEX_0FD0) },
8864 { PREFIX_TABLE (PREFIX_VEX_0FD1) },
8865 { PREFIX_TABLE (PREFIX_VEX_0FD2) },
8866 { PREFIX_TABLE (PREFIX_VEX_0FD3) },
8867 { PREFIX_TABLE (PREFIX_VEX_0FD4) },
8868 { PREFIX_TABLE (PREFIX_VEX_0FD5) },
8869 { PREFIX_TABLE (PREFIX_VEX_0FD6) },
8870 { PREFIX_TABLE (PREFIX_VEX_0FD7) },
c0f3af97 8871 /* d8 */
592a252b
L
8872 { PREFIX_TABLE (PREFIX_VEX_0FD8) },
8873 { PREFIX_TABLE (PREFIX_VEX_0FD9) },
8874 { PREFIX_TABLE (PREFIX_VEX_0FDA) },
8875 { PREFIX_TABLE (PREFIX_VEX_0FDB) },
8876 { PREFIX_TABLE (PREFIX_VEX_0FDC) },
8877 { PREFIX_TABLE (PREFIX_VEX_0FDD) },
8878 { PREFIX_TABLE (PREFIX_VEX_0FDE) },
8879 { PREFIX_TABLE (PREFIX_VEX_0FDF) },
c0f3af97 8880 /* e0 */
592a252b
L
8881 { PREFIX_TABLE (PREFIX_VEX_0FE0) },
8882 { PREFIX_TABLE (PREFIX_VEX_0FE1) },
8883 { PREFIX_TABLE (PREFIX_VEX_0FE2) },
8884 { PREFIX_TABLE (PREFIX_VEX_0FE3) },
8885 { PREFIX_TABLE (PREFIX_VEX_0FE4) },
8886 { PREFIX_TABLE (PREFIX_VEX_0FE5) },
8887 { PREFIX_TABLE (PREFIX_VEX_0FE6) },
8888 { PREFIX_TABLE (PREFIX_VEX_0FE7) },
c0f3af97 8889 /* e8 */
592a252b
L
8890 { PREFIX_TABLE (PREFIX_VEX_0FE8) },
8891 { PREFIX_TABLE (PREFIX_VEX_0FE9) },
8892 { PREFIX_TABLE (PREFIX_VEX_0FEA) },
8893 { PREFIX_TABLE (PREFIX_VEX_0FEB) },
8894 { PREFIX_TABLE (PREFIX_VEX_0FEC) },
8895 { PREFIX_TABLE (PREFIX_VEX_0FED) },
8896 { PREFIX_TABLE (PREFIX_VEX_0FEE) },
8897 { PREFIX_TABLE (PREFIX_VEX_0FEF) },
c0f3af97 8898 /* f0 */
592a252b
L
8899 { PREFIX_TABLE (PREFIX_VEX_0FF0) },
8900 { PREFIX_TABLE (PREFIX_VEX_0FF1) },
8901 { PREFIX_TABLE (PREFIX_VEX_0FF2) },
8902 { PREFIX_TABLE (PREFIX_VEX_0FF3) },
8903 { PREFIX_TABLE (PREFIX_VEX_0FF4) },
8904 { PREFIX_TABLE (PREFIX_VEX_0FF5) },
8905 { PREFIX_TABLE (PREFIX_VEX_0FF6) },
8906 { PREFIX_TABLE (PREFIX_VEX_0FF7) },
c0f3af97 8907 /* f8 */
592a252b
L
8908 { PREFIX_TABLE (PREFIX_VEX_0FF8) },
8909 { PREFIX_TABLE (PREFIX_VEX_0FF9) },
8910 { PREFIX_TABLE (PREFIX_VEX_0FFA) },
8911 { PREFIX_TABLE (PREFIX_VEX_0FFB) },
8912 { PREFIX_TABLE (PREFIX_VEX_0FFC) },
8913 { PREFIX_TABLE (PREFIX_VEX_0FFD) },
8914 { PREFIX_TABLE (PREFIX_VEX_0FFE) },
592d1631 8915 { Bad_Opcode },
c0f3af97
L
8916 },
8917 /* VEX_0F38 */
8918 {
8919 /* 00 */
592a252b
L
8920 { PREFIX_TABLE (PREFIX_VEX_0F3800) },
8921 { PREFIX_TABLE (PREFIX_VEX_0F3801) },
8922 { PREFIX_TABLE (PREFIX_VEX_0F3802) },
8923 { PREFIX_TABLE (PREFIX_VEX_0F3803) },
8924 { PREFIX_TABLE (PREFIX_VEX_0F3804) },
8925 { PREFIX_TABLE (PREFIX_VEX_0F3805) },
8926 { PREFIX_TABLE (PREFIX_VEX_0F3806) },
8927 { PREFIX_TABLE (PREFIX_VEX_0F3807) },
c0f3af97 8928 /* 08 */
592a252b
L
8929 { PREFIX_TABLE (PREFIX_VEX_0F3808) },
8930 { PREFIX_TABLE (PREFIX_VEX_0F3809) },
8931 { PREFIX_TABLE (PREFIX_VEX_0F380A) },
8932 { PREFIX_TABLE (PREFIX_VEX_0F380B) },
8933 { PREFIX_TABLE (PREFIX_VEX_0F380C) },
8934 { PREFIX_TABLE (PREFIX_VEX_0F380D) },
8935 { PREFIX_TABLE (PREFIX_VEX_0F380E) },
8936 { PREFIX_TABLE (PREFIX_VEX_0F380F) },
c0f3af97 8937 /* 10 */
592d1631
L
8938 { Bad_Opcode },
8939 { Bad_Opcode },
8940 { Bad_Opcode },
592a252b 8941 { PREFIX_TABLE (PREFIX_VEX_0F3813) },
592d1631
L
8942 { Bad_Opcode },
8943 { Bad_Opcode },
6c30d220 8944 { PREFIX_TABLE (PREFIX_VEX_0F3816) },
592a252b 8945 { PREFIX_TABLE (PREFIX_VEX_0F3817) },
c0f3af97 8946 /* 18 */
592a252b
L
8947 { PREFIX_TABLE (PREFIX_VEX_0F3818) },
8948 { PREFIX_TABLE (PREFIX_VEX_0F3819) },
8949 { PREFIX_TABLE (PREFIX_VEX_0F381A) },
592d1631 8950 { Bad_Opcode },
592a252b
L
8951 { PREFIX_TABLE (PREFIX_VEX_0F381C) },
8952 { PREFIX_TABLE (PREFIX_VEX_0F381D) },
8953 { PREFIX_TABLE (PREFIX_VEX_0F381E) },
592d1631 8954 { Bad_Opcode },
c0f3af97 8955 /* 20 */
592a252b
L
8956 { PREFIX_TABLE (PREFIX_VEX_0F3820) },
8957 { PREFIX_TABLE (PREFIX_VEX_0F3821) },
8958 { PREFIX_TABLE (PREFIX_VEX_0F3822) },
8959 { PREFIX_TABLE (PREFIX_VEX_0F3823) },
8960 { PREFIX_TABLE (PREFIX_VEX_0F3824) },
8961 { PREFIX_TABLE (PREFIX_VEX_0F3825) },
592d1631
L
8962 { Bad_Opcode },
8963 { Bad_Opcode },
c0f3af97 8964 /* 28 */
592a252b
L
8965 { PREFIX_TABLE (PREFIX_VEX_0F3828) },
8966 { PREFIX_TABLE (PREFIX_VEX_0F3829) },
8967 { PREFIX_TABLE (PREFIX_VEX_0F382A) },
8968 { PREFIX_TABLE (PREFIX_VEX_0F382B) },
8969 { PREFIX_TABLE (PREFIX_VEX_0F382C) },
8970 { PREFIX_TABLE (PREFIX_VEX_0F382D) },
8971 { PREFIX_TABLE (PREFIX_VEX_0F382E) },
8972 { PREFIX_TABLE (PREFIX_VEX_0F382F) },
c0f3af97 8973 /* 30 */
592a252b
L
8974 { PREFIX_TABLE (PREFIX_VEX_0F3830) },
8975 { PREFIX_TABLE (PREFIX_VEX_0F3831) },
8976 { PREFIX_TABLE (PREFIX_VEX_0F3832) },
8977 { PREFIX_TABLE (PREFIX_VEX_0F3833) },
8978 { PREFIX_TABLE (PREFIX_VEX_0F3834) },
8979 { PREFIX_TABLE (PREFIX_VEX_0F3835) },
6c30d220 8980 { PREFIX_TABLE (PREFIX_VEX_0F3836) },
592a252b 8981 { PREFIX_TABLE (PREFIX_VEX_0F3837) },
c0f3af97 8982 /* 38 */
592a252b
L
8983 { PREFIX_TABLE (PREFIX_VEX_0F3838) },
8984 { PREFIX_TABLE (PREFIX_VEX_0F3839) },
8985 { PREFIX_TABLE (PREFIX_VEX_0F383A) },
8986 { PREFIX_TABLE (PREFIX_VEX_0F383B) },
8987 { PREFIX_TABLE (PREFIX_VEX_0F383C) },
8988 { PREFIX_TABLE (PREFIX_VEX_0F383D) },
8989 { PREFIX_TABLE (PREFIX_VEX_0F383E) },
8990 { PREFIX_TABLE (PREFIX_VEX_0F383F) },
c0f3af97 8991 /* 40 */
592a252b
L
8992 { PREFIX_TABLE (PREFIX_VEX_0F3840) },
8993 { PREFIX_TABLE (PREFIX_VEX_0F3841) },
592d1631
L
8994 { Bad_Opcode },
8995 { Bad_Opcode },
8996 { Bad_Opcode },
6c30d220
L
8997 { PREFIX_TABLE (PREFIX_VEX_0F3845) },
8998 { PREFIX_TABLE (PREFIX_VEX_0F3846) },
8999 { PREFIX_TABLE (PREFIX_VEX_0F3847) },
c0f3af97 9000 /* 48 */
592d1631
L
9001 { Bad_Opcode },
9002 { Bad_Opcode },
9003 { Bad_Opcode },
9004 { Bad_Opcode },
9005 { Bad_Opcode },
9006 { Bad_Opcode },
9007 { Bad_Opcode },
9008 { Bad_Opcode },
c0f3af97 9009 /* 50 */
592d1631
L
9010 { Bad_Opcode },
9011 { Bad_Opcode },
9012 { Bad_Opcode },
9013 { Bad_Opcode },
9014 { Bad_Opcode },
9015 { Bad_Opcode },
9016 { Bad_Opcode },
9017 { Bad_Opcode },
c0f3af97 9018 /* 58 */
6c30d220
L
9019 { PREFIX_TABLE (PREFIX_VEX_0F3858) },
9020 { PREFIX_TABLE (PREFIX_VEX_0F3859) },
9021 { PREFIX_TABLE (PREFIX_VEX_0F385A) },
592d1631
L
9022 { Bad_Opcode },
9023 { Bad_Opcode },
9024 { Bad_Opcode },
9025 { Bad_Opcode },
9026 { Bad_Opcode },
c0f3af97 9027 /* 60 */
592d1631
L
9028 { Bad_Opcode },
9029 { Bad_Opcode },
9030 { Bad_Opcode },
9031 { Bad_Opcode },
9032 { Bad_Opcode },
9033 { Bad_Opcode },
9034 { Bad_Opcode },
9035 { Bad_Opcode },
c0f3af97 9036 /* 68 */
592d1631
L
9037 { Bad_Opcode },
9038 { Bad_Opcode },
9039 { Bad_Opcode },
9040 { Bad_Opcode },
9041 { Bad_Opcode },
9042 { Bad_Opcode },
9043 { Bad_Opcode },
9044 { Bad_Opcode },
c0f3af97 9045 /* 70 */
592d1631
L
9046 { Bad_Opcode },
9047 { Bad_Opcode },
9048 { Bad_Opcode },
9049 { Bad_Opcode },
9050 { Bad_Opcode },
9051 { Bad_Opcode },
9052 { Bad_Opcode },
9053 { Bad_Opcode },
c0f3af97 9054 /* 78 */
6c30d220
L
9055 { PREFIX_TABLE (PREFIX_VEX_0F3878) },
9056 { PREFIX_TABLE (PREFIX_VEX_0F3879) },
592d1631
L
9057 { Bad_Opcode },
9058 { Bad_Opcode },
9059 { Bad_Opcode },
9060 { Bad_Opcode },
9061 { Bad_Opcode },
9062 { Bad_Opcode },
c0f3af97 9063 /* 80 */
592d1631
L
9064 { Bad_Opcode },
9065 { Bad_Opcode },
9066 { Bad_Opcode },
9067 { Bad_Opcode },
9068 { Bad_Opcode },
9069 { Bad_Opcode },
9070 { Bad_Opcode },
9071 { Bad_Opcode },
c0f3af97 9072 /* 88 */
592d1631
L
9073 { Bad_Opcode },
9074 { Bad_Opcode },
9075 { Bad_Opcode },
9076 { Bad_Opcode },
6c30d220 9077 { PREFIX_TABLE (PREFIX_VEX_0F388C) },
592d1631 9078 { Bad_Opcode },
6c30d220 9079 { PREFIX_TABLE (PREFIX_VEX_0F388E) },
592d1631 9080 { Bad_Opcode },
c0f3af97 9081 /* 90 */
6c30d220
L
9082 { PREFIX_TABLE (PREFIX_VEX_0F3890) },
9083 { PREFIX_TABLE (PREFIX_VEX_0F3891) },
9084 { PREFIX_TABLE (PREFIX_VEX_0F3892) },
9085 { PREFIX_TABLE (PREFIX_VEX_0F3893) },
592d1631
L
9086 { Bad_Opcode },
9087 { Bad_Opcode },
592a252b
L
9088 { PREFIX_TABLE (PREFIX_VEX_0F3896) },
9089 { PREFIX_TABLE (PREFIX_VEX_0F3897) },
c0f3af97 9090 /* 98 */
592a252b
L
9091 { PREFIX_TABLE (PREFIX_VEX_0F3898) },
9092 { PREFIX_TABLE (PREFIX_VEX_0F3899) },
9093 { PREFIX_TABLE (PREFIX_VEX_0F389A) },
9094 { PREFIX_TABLE (PREFIX_VEX_0F389B) },
9095 { PREFIX_TABLE (PREFIX_VEX_0F389C) },
9096 { PREFIX_TABLE (PREFIX_VEX_0F389D) },
9097 { PREFIX_TABLE (PREFIX_VEX_0F389E) },
9098 { PREFIX_TABLE (PREFIX_VEX_0F389F) },
c0f3af97 9099 /* a0 */
592d1631
L
9100 { Bad_Opcode },
9101 { Bad_Opcode },
9102 { Bad_Opcode },
9103 { Bad_Opcode },
9104 { Bad_Opcode },
9105 { Bad_Opcode },
592a252b
L
9106 { PREFIX_TABLE (PREFIX_VEX_0F38A6) },
9107 { PREFIX_TABLE (PREFIX_VEX_0F38A7) },
c0f3af97 9108 /* a8 */
592a252b
L
9109 { PREFIX_TABLE (PREFIX_VEX_0F38A8) },
9110 { PREFIX_TABLE (PREFIX_VEX_0F38A9) },
9111 { PREFIX_TABLE (PREFIX_VEX_0F38AA) },
9112 { PREFIX_TABLE (PREFIX_VEX_0F38AB) },
9113 { PREFIX_TABLE (PREFIX_VEX_0F38AC) },
9114 { PREFIX_TABLE (PREFIX_VEX_0F38AD) },
9115 { PREFIX_TABLE (PREFIX_VEX_0F38AE) },
9116 { PREFIX_TABLE (PREFIX_VEX_0F38AF) },
c0f3af97 9117 /* b0 */
592d1631
L
9118 { Bad_Opcode },
9119 { Bad_Opcode },
9120 { Bad_Opcode },
9121 { Bad_Opcode },
9122 { Bad_Opcode },
9123 { Bad_Opcode },
592a252b
L
9124 { PREFIX_TABLE (PREFIX_VEX_0F38B6) },
9125 { PREFIX_TABLE (PREFIX_VEX_0F38B7) },
c0f3af97 9126 /* b8 */
592a252b
L
9127 { PREFIX_TABLE (PREFIX_VEX_0F38B8) },
9128 { PREFIX_TABLE (PREFIX_VEX_0F38B9) },
9129 { PREFIX_TABLE (PREFIX_VEX_0F38BA) },
9130 { PREFIX_TABLE (PREFIX_VEX_0F38BB) },
9131 { PREFIX_TABLE (PREFIX_VEX_0F38BC) },
9132 { PREFIX_TABLE (PREFIX_VEX_0F38BD) },
9133 { PREFIX_TABLE (PREFIX_VEX_0F38BE) },
9134 { PREFIX_TABLE (PREFIX_VEX_0F38BF) },
c0f3af97 9135 /* c0 */
592d1631
L
9136 { Bad_Opcode },
9137 { Bad_Opcode },
9138 { Bad_Opcode },
9139 { Bad_Opcode },
9140 { Bad_Opcode },
9141 { Bad_Opcode },
9142 { Bad_Opcode },
9143 { Bad_Opcode },
c0f3af97 9144 /* c8 */
592d1631
L
9145 { Bad_Opcode },
9146 { Bad_Opcode },
9147 { Bad_Opcode },
9148 { Bad_Opcode },
9149 { Bad_Opcode },
9150 { Bad_Opcode },
9151 { Bad_Opcode },
48521003 9152 { PREFIX_TABLE (PREFIX_VEX_0F38CF) },
c0f3af97 9153 /* d0 */
592d1631
L
9154 { Bad_Opcode },
9155 { Bad_Opcode },
9156 { Bad_Opcode },
9157 { Bad_Opcode },
9158 { Bad_Opcode },
9159 { Bad_Opcode },
9160 { Bad_Opcode },
9161 { Bad_Opcode },
c0f3af97 9162 /* d8 */
592d1631
L
9163 { Bad_Opcode },
9164 { Bad_Opcode },
9165 { Bad_Opcode },
592a252b
L
9166 { PREFIX_TABLE (PREFIX_VEX_0F38DB) },
9167 { PREFIX_TABLE (PREFIX_VEX_0F38DC) },
9168 { PREFIX_TABLE (PREFIX_VEX_0F38DD) },
9169 { PREFIX_TABLE (PREFIX_VEX_0F38DE) },
9170 { PREFIX_TABLE (PREFIX_VEX_0F38DF) },
c0f3af97 9171 /* e0 */
592d1631
L
9172 { Bad_Opcode },
9173 { Bad_Opcode },
9174 { Bad_Opcode },
9175 { Bad_Opcode },
9176 { Bad_Opcode },
9177 { Bad_Opcode },
9178 { Bad_Opcode },
9179 { Bad_Opcode },
c0f3af97 9180 /* e8 */
592d1631
L
9181 { Bad_Opcode },
9182 { Bad_Opcode },
9183 { Bad_Opcode },
9184 { Bad_Opcode },
9185 { Bad_Opcode },
9186 { Bad_Opcode },
9187 { Bad_Opcode },
9188 { Bad_Opcode },
c0f3af97 9189 /* f0 */
592d1631
L
9190 { Bad_Opcode },
9191 { Bad_Opcode },
f12dc422
L
9192 { PREFIX_TABLE (PREFIX_VEX_0F38F2) },
9193 { REG_TABLE (REG_VEX_0F38F3) },
592d1631 9194 { Bad_Opcode },
6c30d220
L
9195 { PREFIX_TABLE (PREFIX_VEX_0F38F5) },
9196 { PREFIX_TABLE (PREFIX_VEX_0F38F6) },
f12dc422 9197 { PREFIX_TABLE (PREFIX_VEX_0F38F7) },
c0f3af97 9198 /* f8 */
592d1631
L
9199 { Bad_Opcode },
9200 { Bad_Opcode },
9201 { Bad_Opcode },
9202 { Bad_Opcode },
9203 { Bad_Opcode },
9204 { Bad_Opcode },
9205 { Bad_Opcode },
9206 { Bad_Opcode },
c0f3af97
L
9207 },
9208 /* VEX_0F3A */
9209 {
9210 /* 00 */
6c30d220
L
9211 { PREFIX_TABLE (PREFIX_VEX_0F3A00) },
9212 { PREFIX_TABLE (PREFIX_VEX_0F3A01) },
9213 { PREFIX_TABLE (PREFIX_VEX_0F3A02) },
592d1631 9214 { Bad_Opcode },
592a252b
L
9215 { PREFIX_TABLE (PREFIX_VEX_0F3A04) },
9216 { PREFIX_TABLE (PREFIX_VEX_0F3A05) },
9217 { PREFIX_TABLE (PREFIX_VEX_0F3A06) },
592d1631 9218 { Bad_Opcode },
c0f3af97 9219 /* 08 */
592a252b
L
9220 { PREFIX_TABLE (PREFIX_VEX_0F3A08) },
9221 { PREFIX_TABLE (PREFIX_VEX_0F3A09) },
9222 { PREFIX_TABLE (PREFIX_VEX_0F3A0A) },
9223 { PREFIX_TABLE (PREFIX_VEX_0F3A0B) },
9224 { PREFIX_TABLE (PREFIX_VEX_0F3A0C) },
9225 { PREFIX_TABLE (PREFIX_VEX_0F3A0D) },
9226 { PREFIX_TABLE (PREFIX_VEX_0F3A0E) },
9227 { PREFIX_TABLE (PREFIX_VEX_0F3A0F) },
c0f3af97 9228 /* 10 */
592d1631
L
9229 { Bad_Opcode },
9230 { Bad_Opcode },
9231 { Bad_Opcode },
9232 { Bad_Opcode },
592a252b
L
9233 { PREFIX_TABLE (PREFIX_VEX_0F3A14) },
9234 { PREFIX_TABLE (PREFIX_VEX_0F3A15) },
9235 { PREFIX_TABLE (PREFIX_VEX_0F3A16) },
9236 { PREFIX_TABLE (PREFIX_VEX_0F3A17) },
c0f3af97 9237 /* 18 */
592a252b
L
9238 { PREFIX_TABLE (PREFIX_VEX_0F3A18) },
9239 { PREFIX_TABLE (PREFIX_VEX_0F3A19) },
592d1631
L
9240 { Bad_Opcode },
9241 { Bad_Opcode },
9242 { Bad_Opcode },
592a252b 9243 { PREFIX_TABLE (PREFIX_VEX_0F3A1D) },
592d1631
L
9244 { Bad_Opcode },
9245 { Bad_Opcode },
c0f3af97 9246 /* 20 */
592a252b
L
9247 { PREFIX_TABLE (PREFIX_VEX_0F3A20) },
9248 { PREFIX_TABLE (PREFIX_VEX_0F3A21) },
9249 { PREFIX_TABLE (PREFIX_VEX_0F3A22) },
592d1631
L
9250 { Bad_Opcode },
9251 { Bad_Opcode },
9252 { Bad_Opcode },
9253 { Bad_Opcode },
9254 { Bad_Opcode },
c0f3af97 9255 /* 28 */
592d1631
L
9256 { Bad_Opcode },
9257 { Bad_Opcode },
9258 { Bad_Opcode },
9259 { Bad_Opcode },
9260 { Bad_Opcode },
9261 { Bad_Opcode },
9262 { Bad_Opcode },
9263 { Bad_Opcode },
c0f3af97 9264 /* 30 */
43234a1e 9265 { PREFIX_TABLE (PREFIX_VEX_0F3A30) },
1ba585e8 9266 { PREFIX_TABLE (PREFIX_VEX_0F3A31) },
43234a1e 9267 { PREFIX_TABLE (PREFIX_VEX_0F3A32) },
1ba585e8 9268 { PREFIX_TABLE (PREFIX_VEX_0F3A33) },
592d1631
L
9269 { Bad_Opcode },
9270 { Bad_Opcode },
9271 { Bad_Opcode },
9272 { Bad_Opcode },
c0f3af97 9273 /* 38 */
6c30d220
L
9274 { PREFIX_TABLE (PREFIX_VEX_0F3A38) },
9275 { PREFIX_TABLE (PREFIX_VEX_0F3A39) },
592d1631
L
9276 { Bad_Opcode },
9277 { Bad_Opcode },
9278 { Bad_Opcode },
9279 { Bad_Opcode },
9280 { Bad_Opcode },
9281 { Bad_Opcode },
c0f3af97 9282 /* 40 */
592a252b
L
9283 { PREFIX_TABLE (PREFIX_VEX_0F3A40) },
9284 { PREFIX_TABLE (PREFIX_VEX_0F3A41) },
9285 { PREFIX_TABLE (PREFIX_VEX_0F3A42) },
592d1631 9286 { Bad_Opcode },
592a252b 9287 { PREFIX_TABLE (PREFIX_VEX_0F3A44) },
592d1631 9288 { Bad_Opcode },
6c30d220 9289 { PREFIX_TABLE (PREFIX_VEX_0F3A46) },
592d1631 9290 { Bad_Opcode },
c0f3af97 9291 /* 48 */
592a252b
L
9292 { PREFIX_TABLE (PREFIX_VEX_0F3A48) },
9293 { PREFIX_TABLE (PREFIX_VEX_0F3A49) },
9294 { PREFIX_TABLE (PREFIX_VEX_0F3A4A) },
9295 { PREFIX_TABLE (PREFIX_VEX_0F3A4B) },
9296 { PREFIX_TABLE (PREFIX_VEX_0F3A4C) },
592d1631
L
9297 { Bad_Opcode },
9298 { Bad_Opcode },
9299 { Bad_Opcode },
c0f3af97 9300 /* 50 */
592d1631
L
9301 { Bad_Opcode },
9302 { Bad_Opcode },
9303 { Bad_Opcode },
9304 { Bad_Opcode },
9305 { Bad_Opcode },
9306 { Bad_Opcode },
9307 { Bad_Opcode },
9308 { Bad_Opcode },
c0f3af97 9309 /* 58 */
592d1631
L
9310 { Bad_Opcode },
9311 { Bad_Opcode },
9312 { Bad_Opcode },
9313 { Bad_Opcode },
592a252b
L
9314 { PREFIX_TABLE (PREFIX_VEX_0F3A5C) },
9315 { PREFIX_TABLE (PREFIX_VEX_0F3A5D) },
9316 { PREFIX_TABLE (PREFIX_VEX_0F3A5E) },
9317 { PREFIX_TABLE (PREFIX_VEX_0F3A5F) },
c0f3af97 9318 /* 60 */
592a252b
L
9319 { PREFIX_TABLE (PREFIX_VEX_0F3A60) },
9320 { PREFIX_TABLE (PREFIX_VEX_0F3A61) },
9321 { PREFIX_TABLE (PREFIX_VEX_0F3A62) },
9322 { PREFIX_TABLE (PREFIX_VEX_0F3A63) },
592d1631
L
9323 { Bad_Opcode },
9324 { Bad_Opcode },
9325 { Bad_Opcode },
9326 { Bad_Opcode },
c0f3af97 9327 /* 68 */
592a252b
L
9328 { PREFIX_TABLE (PREFIX_VEX_0F3A68) },
9329 { PREFIX_TABLE (PREFIX_VEX_0F3A69) },
9330 { PREFIX_TABLE (PREFIX_VEX_0F3A6A) },
9331 { PREFIX_TABLE (PREFIX_VEX_0F3A6B) },
9332 { PREFIX_TABLE (PREFIX_VEX_0F3A6C) },
9333 { PREFIX_TABLE (PREFIX_VEX_0F3A6D) },
9334 { PREFIX_TABLE (PREFIX_VEX_0F3A6E) },
9335 { PREFIX_TABLE (PREFIX_VEX_0F3A6F) },
c0f3af97 9336 /* 70 */
592d1631
L
9337 { Bad_Opcode },
9338 { Bad_Opcode },
9339 { Bad_Opcode },
9340 { Bad_Opcode },
9341 { Bad_Opcode },
9342 { Bad_Opcode },
9343 { Bad_Opcode },
9344 { Bad_Opcode },
c0f3af97 9345 /* 78 */
592a252b
L
9346 { PREFIX_TABLE (PREFIX_VEX_0F3A78) },
9347 { PREFIX_TABLE (PREFIX_VEX_0F3A79) },
9348 { PREFIX_TABLE (PREFIX_VEX_0F3A7A) },
9349 { PREFIX_TABLE (PREFIX_VEX_0F3A7B) },
9350 { PREFIX_TABLE (PREFIX_VEX_0F3A7C) },
9351 { PREFIX_TABLE (PREFIX_VEX_0F3A7D) },
9352 { PREFIX_TABLE (PREFIX_VEX_0F3A7E) },
9353 { PREFIX_TABLE (PREFIX_VEX_0F3A7F) },
c0f3af97 9354 /* 80 */
592d1631
L
9355 { Bad_Opcode },
9356 { Bad_Opcode },
9357 { Bad_Opcode },
9358 { Bad_Opcode },
9359 { Bad_Opcode },
9360 { Bad_Opcode },
9361 { Bad_Opcode },
9362 { Bad_Opcode },
c0f3af97 9363 /* 88 */
592d1631
L
9364 { Bad_Opcode },
9365 { Bad_Opcode },
9366 { Bad_Opcode },
9367 { Bad_Opcode },
9368 { Bad_Opcode },
9369 { Bad_Opcode },
9370 { Bad_Opcode },
9371 { Bad_Opcode },
c0f3af97 9372 /* 90 */
592d1631
L
9373 { Bad_Opcode },
9374 { Bad_Opcode },
9375 { Bad_Opcode },
9376 { Bad_Opcode },
9377 { Bad_Opcode },
9378 { Bad_Opcode },
9379 { Bad_Opcode },
9380 { Bad_Opcode },
c0f3af97 9381 /* 98 */
592d1631
L
9382 { Bad_Opcode },
9383 { Bad_Opcode },
9384 { Bad_Opcode },
9385 { Bad_Opcode },
9386 { Bad_Opcode },
9387 { Bad_Opcode },
9388 { Bad_Opcode },
9389 { Bad_Opcode },
c0f3af97 9390 /* a0 */
592d1631
L
9391 { Bad_Opcode },
9392 { Bad_Opcode },
9393 { Bad_Opcode },
9394 { Bad_Opcode },
9395 { Bad_Opcode },
9396 { Bad_Opcode },
9397 { Bad_Opcode },
9398 { Bad_Opcode },
c0f3af97 9399 /* a8 */
592d1631
L
9400 { Bad_Opcode },
9401 { Bad_Opcode },
9402 { Bad_Opcode },
9403 { Bad_Opcode },
9404 { Bad_Opcode },
9405 { Bad_Opcode },
9406 { Bad_Opcode },
9407 { Bad_Opcode },
c0f3af97 9408 /* b0 */
592d1631
L
9409 { Bad_Opcode },
9410 { Bad_Opcode },
9411 { Bad_Opcode },
9412 { Bad_Opcode },
9413 { Bad_Opcode },
9414 { Bad_Opcode },
9415 { Bad_Opcode },
9416 { Bad_Opcode },
c0f3af97 9417 /* b8 */
592d1631
L
9418 { Bad_Opcode },
9419 { Bad_Opcode },
9420 { Bad_Opcode },
9421 { Bad_Opcode },
9422 { Bad_Opcode },
9423 { Bad_Opcode },
9424 { Bad_Opcode },
9425 { Bad_Opcode },
c0f3af97 9426 /* c0 */
592d1631
L
9427 { Bad_Opcode },
9428 { Bad_Opcode },
9429 { Bad_Opcode },
9430 { Bad_Opcode },
9431 { Bad_Opcode },
9432 { Bad_Opcode },
9433 { Bad_Opcode },
9434 { Bad_Opcode },
c0f3af97 9435 /* c8 */
592d1631
L
9436 { Bad_Opcode },
9437 { Bad_Opcode },
9438 { Bad_Opcode },
9439 { Bad_Opcode },
9440 { Bad_Opcode },
9441 { Bad_Opcode },
48521003
IT
9442 { PREFIX_TABLE(PREFIX_VEX_0F3ACE) },
9443 { PREFIX_TABLE(PREFIX_VEX_0F3ACF) },
c0f3af97 9444 /* d0 */
592d1631
L
9445 { Bad_Opcode },
9446 { Bad_Opcode },
9447 { Bad_Opcode },
9448 { Bad_Opcode },
9449 { Bad_Opcode },
9450 { Bad_Opcode },
9451 { Bad_Opcode },
9452 { Bad_Opcode },
c0f3af97 9453 /* d8 */
592d1631
L
9454 { Bad_Opcode },
9455 { Bad_Opcode },
9456 { Bad_Opcode },
9457 { Bad_Opcode },
9458 { Bad_Opcode },
9459 { Bad_Opcode },
9460 { Bad_Opcode },
592a252b 9461 { PREFIX_TABLE (PREFIX_VEX_0F3ADF) },
c0f3af97 9462 /* e0 */
592d1631
L
9463 { Bad_Opcode },
9464 { Bad_Opcode },
9465 { Bad_Opcode },
9466 { Bad_Opcode },
9467 { Bad_Opcode },
9468 { Bad_Opcode },
9469 { Bad_Opcode },
9470 { Bad_Opcode },
c0f3af97 9471 /* e8 */
592d1631
L
9472 { Bad_Opcode },
9473 { Bad_Opcode },
9474 { Bad_Opcode },
9475 { Bad_Opcode },
9476 { Bad_Opcode },
9477 { Bad_Opcode },
9478 { Bad_Opcode },
9479 { Bad_Opcode },
c0f3af97 9480 /* f0 */
6c30d220 9481 { PREFIX_TABLE (PREFIX_VEX_0F3AF0) },
592d1631
L
9482 { Bad_Opcode },
9483 { Bad_Opcode },
9484 { Bad_Opcode },
9485 { Bad_Opcode },
9486 { Bad_Opcode },
9487 { Bad_Opcode },
9488 { Bad_Opcode },
c0f3af97 9489 /* f8 */
592d1631
L
9490 { Bad_Opcode },
9491 { Bad_Opcode },
9492 { Bad_Opcode },
9493 { Bad_Opcode },
9494 { Bad_Opcode },
9495 { Bad_Opcode },
9496 { Bad_Opcode },
9497 { Bad_Opcode },
c0f3af97
L
9498 },
9499};
9500
43234a1e
L
9501#define NEED_OPCODE_TABLE
9502#include "i386-dis-evex.h"
9503#undef NEED_OPCODE_TABLE
c0f3af97 9504static const struct dis386 vex_len_table[][2] = {
592a252b 9505 /* VEX_LEN_0F10_P_1 */
c0f3af97 9506 {
592a252b
L
9507 { VEX_W_TABLE (VEX_W_0F10_P_1) },
9508 { VEX_W_TABLE (VEX_W_0F10_P_1) },
c0f3af97
L
9509 },
9510
592a252b 9511 /* VEX_LEN_0F10_P_3 */
c0f3af97 9512 {
592a252b
L
9513 { VEX_W_TABLE (VEX_W_0F10_P_3) },
9514 { VEX_W_TABLE (VEX_W_0F10_P_3) },
c0f3af97
L
9515 },
9516
592a252b 9517 /* VEX_LEN_0F11_P_1 */
c0f3af97 9518 {
592a252b
L
9519 { VEX_W_TABLE (VEX_W_0F11_P_1) },
9520 { VEX_W_TABLE (VEX_W_0F11_P_1) },
c0f3af97
L
9521 },
9522
592a252b 9523 /* VEX_LEN_0F11_P_3 */
c0f3af97 9524 {
592a252b
L
9525 { VEX_W_TABLE (VEX_W_0F11_P_3) },
9526 { VEX_W_TABLE (VEX_W_0F11_P_3) },
c0f3af97
L
9527 },
9528
592a252b 9529 /* VEX_LEN_0F12_P_0_M_0 */
c0f3af97 9530 {
592a252b 9531 { VEX_W_TABLE (VEX_W_0F12_P_0_M_0) },
c0f3af97
L
9532 },
9533
592a252b 9534 /* VEX_LEN_0F12_P_0_M_1 */
c0f3af97 9535 {
592a252b 9536 { VEX_W_TABLE (VEX_W_0F12_P_0_M_1) },
c0f3af97
L
9537 },
9538
592a252b 9539 /* VEX_LEN_0F12_P_2 */
c0f3af97 9540 {
592a252b 9541 { VEX_W_TABLE (VEX_W_0F12_P_2) },
c0f3af97
L
9542 },
9543
592a252b 9544 /* VEX_LEN_0F13_M_0 */
c0f3af97 9545 {
592a252b 9546 { VEX_W_TABLE (VEX_W_0F13_M_0) },
c0f3af97
L
9547 },
9548
592a252b 9549 /* VEX_LEN_0F16_P_0_M_0 */
c0f3af97 9550 {
592a252b 9551 { VEX_W_TABLE (VEX_W_0F16_P_0_M_0) },
c0f3af97
L
9552 },
9553
592a252b 9554 /* VEX_LEN_0F16_P_0_M_1 */
c0f3af97 9555 {
592a252b 9556 { VEX_W_TABLE (VEX_W_0F16_P_0_M_1) },
c0f3af97
L
9557 },
9558
592a252b 9559 /* VEX_LEN_0F16_P_2 */
c0f3af97 9560 {
592a252b 9561 { VEX_W_TABLE (VEX_W_0F16_P_2) },
c0f3af97
L
9562 },
9563
592a252b 9564 /* VEX_LEN_0F17_M_0 */
c0f3af97 9565 {
592a252b 9566 { VEX_W_TABLE (VEX_W_0F17_M_0) },
c0f3af97
L
9567 },
9568
592a252b 9569 /* VEX_LEN_0F2A_P_1 */
c0f3af97 9570 {
bf890a93
IT
9571 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev }, 0 },
9572 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev }, 0 },
c0f3af97
L
9573 },
9574
592a252b 9575 /* VEX_LEN_0F2A_P_3 */
c0f3af97 9576 {
bf890a93
IT
9577 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev }, 0 },
9578 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev }, 0 },
c0f3af97
L
9579 },
9580
592a252b 9581 /* VEX_LEN_0F2C_P_1 */
c0f3af97 9582 {
9646c87b
JB
9583 { "vcvttss2si", { Gv, EXdScalar }, 0 },
9584 { "vcvttss2si", { Gv, EXdScalar }, 0 },
c0f3af97
L
9585 },
9586
592a252b 9587 /* VEX_LEN_0F2C_P_3 */
c0f3af97 9588 {
9646c87b
JB
9589 { "vcvttsd2si", { Gv, EXqScalar }, 0 },
9590 { "vcvttsd2si", { Gv, EXqScalar }, 0 },
c0f3af97
L
9591 },
9592
592a252b 9593 /* VEX_LEN_0F2D_P_1 */
c0f3af97 9594 {
9646c87b
JB
9595 { "vcvtss2si", { Gv, EXdScalar }, 0 },
9596 { "vcvtss2si", { Gv, EXdScalar }, 0 },
c0f3af97
L
9597 },
9598
592a252b 9599 /* VEX_LEN_0F2D_P_3 */
c0f3af97 9600 {
9646c87b
JB
9601 { "vcvtsd2si", { Gv, EXqScalar }, 0 },
9602 { "vcvtsd2si", { Gv, EXqScalar }, 0 },
c0f3af97
L
9603 },
9604
592a252b 9605 /* VEX_LEN_0F2E_P_0 */
c0f3af97 9606 {
592a252b
L
9607 { VEX_W_TABLE (VEX_W_0F2E_P_0) },
9608 { VEX_W_TABLE (VEX_W_0F2E_P_0) },
c0f3af97
L
9609 },
9610
592a252b 9611 /* VEX_LEN_0F2E_P_2 */
c0f3af97 9612 {
592a252b
L
9613 { VEX_W_TABLE (VEX_W_0F2E_P_2) },
9614 { VEX_W_TABLE (VEX_W_0F2E_P_2) },
c0f3af97
L
9615 },
9616
592a252b 9617 /* VEX_LEN_0F2F_P_0 */
c0f3af97 9618 {
592a252b
L
9619 { VEX_W_TABLE (VEX_W_0F2F_P_0) },
9620 { VEX_W_TABLE (VEX_W_0F2F_P_0) },
c0f3af97
L
9621 },
9622
592a252b 9623 /* VEX_LEN_0F2F_P_2 */
c0f3af97 9624 {
592a252b
L
9625 { VEX_W_TABLE (VEX_W_0F2F_P_2) },
9626 { VEX_W_TABLE (VEX_W_0F2F_P_2) },
c0f3af97
L
9627 },
9628
43234a1e
L
9629 /* VEX_LEN_0F41_P_0 */
9630 {
9631 { Bad_Opcode },
9632 { VEX_W_TABLE (VEX_W_0F41_P_0_LEN_1) },
9633 },
1ba585e8
IT
9634 /* VEX_LEN_0F41_P_2 */
9635 {
9636 { Bad_Opcode },
9637 { VEX_W_TABLE (VEX_W_0F41_P_2_LEN_1) },
9638 },
43234a1e
L
9639 /* VEX_LEN_0F42_P_0 */
9640 {
9641 { Bad_Opcode },
9642 { VEX_W_TABLE (VEX_W_0F42_P_0_LEN_1) },
9643 },
1ba585e8
IT
9644 /* VEX_LEN_0F42_P_2 */
9645 {
9646 { Bad_Opcode },
9647 { VEX_W_TABLE (VEX_W_0F42_P_2_LEN_1) },
9648 },
43234a1e
L
9649 /* VEX_LEN_0F44_P_0 */
9650 {
9651 { VEX_W_TABLE (VEX_W_0F44_P_0_LEN_0) },
9652 },
1ba585e8
IT
9653 /* VEX_LEN_0F44_P_2 */
9654 {
9655 { VEX_W_TABLE (VEX_W_0F44_P_2_LEN_0) },
9656 },
43234a1e
L
9657 /* VEX_LEN_0F45_P_0 */
9658 {
9659 { Bad_Opcode },
9660 { VEX_W_TABLE (VEX_W_0F45_P_0_LEN_1) },
9661 },
1ba585e8
IT
9662 /* VEX_LEN_0F45_P_2 */
9663 {
9664 { Bad_Opcode },
9665 { VEX_W_TABLE (VEX_W_0F45_P_2_LEN_1) },
9666 },
43234a1e
L
9667 /* VEX_LEN_0F46_P_0 */
9668 {
9669 { Bad_Opcode },
9670 { VEX_W_TABLE (VEX_W_0F46_P_0_LEN_1) },
9671 },
1ba585e8
IT
9672 /* VEX_LEN_0F46_P_2 */
9673 {
9674 { Bad_Opcode },
9675 { VEX_W_TABLE (VEX_W_0F46_P_2_LEN_1) },
9676 },
43234a1e
L
9677 /* VEX_LEN_0F47_P_0 */
9678 {
9679 { Bad_Opcode },
9680 { VEX_W_TABLE (VEX_W_0F47_P_0_LEN_1) },
9681 },
1ba585e8
IT
9682 /* VEX_LEN_0F47_P_2 */
9683 {
9684 { Bad_Opcode },
9685 { VEX_W_TABLE (VEX_W_0F47_P_2_LEN_1) },
9686 },
9687 /* VEX_LEN_0F4A_P_0 */
9688 {
9689 { Bad_Opcode },
9690 { VEX_W_TABLE (VEX_W_0F4A_P_0_LEN_1) },
9691 },
9692 /* VEX_LEN_0F4A_P_2 */
9693 {
9694 { Bad_Opcode },
9695 { VEX_W_TABLE (VEX_W_0F4A_P_2_LEN_1) },
9696 },
9697 /* VEX_LEN_0F4B_P_0 */
9698 {
9699 { Bad_Opcode },
9700 { VEX_W_TABLE (VEX_W_0F4B_P_0_LEN_1) },
9701 },
43234a1e
L
9702 /* VEX_LEN_0F4B_P_2 */
9703 {
9704 { Bad_Opcode },
9705 { VEX_W_TABLE (VEX_W_0F4B_P_2_LEN_1) },
9706 },
9707
592a252b 9708 /* VEX_LEN_0F51_P_1 */
c0f3af97 9709 {
592a252b
L
9710 { VEX_W_TABLE (VEX_W_0F51_P_1) },
9711 { VEX_W_TABLE (VEX_W_0F51_P_1) },
c0f3af97
L
9712 },
9713
592a252b 9714 /* VEX_LEN_0F51_P_3 */
c0f3af97 9715 {
592a252b
L
9716 { VEX_W_TABLE (VEX_W_0F51_P_3) },
9717 { VEX_W_TABLE (VEX_W_0F51_P_3) },
c0f3af97
L
9718 },
9719
592a252b 9720 /* VEX_LEN_0F52_P_1 */
c0f3af97 9721 {
592a252b
L
9722 { VEX_W_TABLE (VEX_W_0F52_P_1) },
9723 { VEX_W_TABLE (VEX_W_0F52_P_1) },
c0f3af97
L
9724 },
9725
592a252b 9726 /* VEX_LEN_0F53_P_1 */
c0f3af97 9727 {
592a252b
L
9728 { VEX_W_TABLE (VEX_W_0F53_P_1) },
9729 { VEX_W_TABLE (VEX_W_0F53_P_1) },
c0f3af97
L
9730 },
9731
592a252b 9732 /* VEX_LEN_0F58_P_1 */
c0f3af97 9733 {
592a252b
L
9734 { VEX_W_TABLE (VEX_W_0F58_P_1) },
9735 { VEX_W_TABLE (VEX_W_0F58_P_1) },
c0f3af97
L
9736 },
9737
592a252b 9738 /* VEX_LEN_0F58_P_3 */
c0f3af97 9739 {
592a252b
L
9740 { VEX_W_TABLE (VEX_W_0F58_P_3) },
9741 { VEX_W_TABLE (VEX_W_0F58_P_3) },
c0f3af97
L
9742 },
9743
592a252b 9744 /* VEX_LEN_0F59_P_1 */
c0f3af97 9745 {
592a252b
L
9746 { VEX_W_TABLE (VEX_W_0F59_P_1) },
9747 { VEX_W_TABLE (VEX_W_0F59_P_1) },
c0f3af97
L
9748 },
9749
592a252b 9750 /* VEX_LEN_0F59_P_3 */
c0f3af97 9751 {
592a252b
L
9752 { VEX_W_TABLE (VEX_W_0F59_P_3) },
9753 { VEX_W_TABLE (VEX_W_0F59_P_3) },
c0f3af97
L
9754 },
9755
592a252b 9756 /* VEX_LEN_0F5A_P_1 */
c0f3af97 9757 {
592a252b
L
9758 { VEX_W_TABLE (VEX_W_0F5A_P_1) },
9759 { VEX_W_TABLE (VEX_W_0F5A_P_1) },
c0f3af97
L
9760 },
9761
592a252b 9762 /* VEX_LEN_0F5A_P_3 */
c0f3af97 9763 {
592a252b
L
9764 { VEX_W_TABLE (VEX_W_0F5A_P_3) },
9765 { VEX_W_TABLE (VEX_W_0F5A_P_3) },
c0f3af97
L
9766 },
9767
592a252b 9768 /* VEX_LEN_0F5C_P_1 */
c0f3af97 9769 {
592a252b
L
9770 { VEX_W_TABLE (VEX_W_0F5C_P_1) },
9771 { VEX_W_TABLE (VEX_W_0F5C_P_1) },
c0f3af97
L
9772 },
9773
592a252b 9774 /* VEX_LEN_0F5C_P_3 */
c0f3af97 9775 {
592a252b
L
9776 { VEX_W_TABLE (VEX_W_0F5C_P_3) },
9777 { VEX_W_TABLE (VEX_W_0F5C_P_3) },
c0f3af97
L
9778 },
9779
592a252b 9780 /* VEX_LEN_0F5D_P_1 */
c0f3af97 9781 {
592a252b
L
9782 { VEX_W_TABLE (VEX_W_0F5D_P_1) },
9783 { VEX_W_TABLE (VEX_W_0F5D_P_1) },
c0f3af97
L
9784 },
9785
592a252b 9786 /* VEX_LEN_0F5D_P_3 */
c0f3af97 9787 {
592a252b
L
9788 { VEX_W_TABLE (VEX_W_0F5D_P_3) },
9789 { VEX_W_TABLE (VEX_W_0F5D_P_3) },
c0f3af97
L
9790 },
9791
592a252b 9792 /* VEX_LEN_0F5E_P_1 */
c0f3af97 9793 {
592a252b
L
9794 { VEX_W_TABLE (VEX_W_0F5E_P_1) },
9795 { VEX_W_TABLE (VEX_W_0F5E_P_1) },
c0f3af97
L
9796 },
9797
592a252b 9798 /* VEX_LEN_0F5E_P_3 */
c0f3af97 9799 {
592a252b
L
9800 { VEX_W_TABLE (VEX_W_0F5E_P_3) },
9801 { VEX_W_TABLE (VEX_W_0F5E_P_3) },
c0f3af97
L
9802 },
9803
592a252b 9804 /* VEX_LEN_0F5F_P_1 */
c0f3af97 9805 {
592a252b
L
9806 { VEX_W_TABLE (VEX_W_0F5F_P_1) },
9807 { VEX_W_TABLE (VEX_W_0F5F_P_1) },
c0f3af97
L
9808 },
9809
592a252b 9810 /* VEX_LEN_0F5F_P_3 */
c0f3af97 9811 {
592a252b
L
9812 { VEX_W_TABLE (VEX_W_0F5F_P_3) },
9813 { VEX_W_TABLE (VEX_W_0F5F_P_3) },
c0f3af97
L
9814 },
9815
592a252b 9816 /* VEX_LEN_0F6E_P_2 */
c0f3af97 9817 {
bf890a93
IT
9818 { "vmovK", { XMScalar, Edq }, 0 },
9819 { "vmovK", { XMScalar, Edq }, 0 },
c0f3af97
L
9820 },
9821
592a252b 9822 /* VEX_LEN_0F7E_P_1 */
c0f3af97 9823 {
592a252b
L
9824 { VEX_W_TABLE (VEX_W_0F7E_P_1) },
9825 { VEX_W_TABLE (VEX_W_0F7E_P_1) },
c0f3af97
L
9826 },
9827
592a252b 9828 /* VEX_LEN_0F7E_P_2 */
c0f3af97 9829 {
bf890a93
IT
9830 { "vmovK", { Edq, XMScalar }, 0 },
9831 { "vmovK", { Edq, XMScalar }, 0 },
c0f3af97
L
9832 },
9833
43234a1e
L
9834 /* VEX_LEN_0F90_P_0 */
9835 {
9836 { VEX_W_TABLE (VEX_W_0F90_P_0_LEN_0) },
9837 },
9838
1ba585e8
IT
9839 /* VEX_LEN_0F90_P_2 */
9840 {
9841 { VEX_W_TABLE (VEX_W_0F90_P_2_LEN_0) },
9842 },
9843
43234a1e
L
9844 /* VEX_LEN_0F91_P_0 */
9845 {
9846 { VEX_W_TABLE (VEX_W_0F91_P_0_LEN_0) },
9847 },
9848
1ba585e8
IT
9849 /* VEX_LEN_0F91_P_2 */
9850 {
9851 { VEX_W_TABLE (VEX_W_0F91_P_2_LEN_0) },
9852 },
9853
43234a1e
L
9854 /* VEX_LEN_0F92_P_0 */
9855 {
9856 { VEX_W_TABLE (VEX_W_0F92_P_0_LEN_0) },
9857 },
9858
90a915bf
IT
9859 /* VEX_LEN_0F92_P_2 */
9860 {
9861 { VEX_W_TABLE (VEX_W_0F92_P_2_LEN_0) },
9862 },
9863
1ba585e8
IT
9864 /* VEX_LEN_0F92_P_3 */
9865 {
9866 { VEX_W_TABLE (VEX_W_0F92_P_3_LEN_0) },
9867 },
9868
43234a1e
L
9869 /* VEX_LEN_0F93_P_0 */
9870 {
9871 { VEX_W_TABLE (VEX_W_0F93_P_0_LEN_0) },
9872 },
9873
90a915bf
IT
9874 /* VEX_LEN_0F93_P_2 */
9875 {
9876 { VEX_W_TABLE (VEX_W_0F93_P_2_LEN_0) },
9877 },
9878
1ba585e8
IT
9879 /* VEX_LEN_0F93_P_3 */
9880 {
9881 { VEX_W_TABLE (VEX_W_0F93_P_3_LEN_0) },
9882 },
9883
43234a1e
L
9884 /* VEX_LEN_0F98_P_0 */
9885 {
9886 { VEX_W_TABLE (VEX_W_0F98_P_0_LEN_0) },
9887 },
9888
1ba585e8
IT
9889 /* VEX_LEN_0F98_P_2 */
9890 {
9891 { VEX_W_TABLE (VEX_W_0F98_P_2_LEN_0) },
9892 },
9893
9894 /* VEX_LEN_0F99_P_0 */
9895 {
9896 { VEX_W_TABLE (VEX_W_0F99_P_0_LEN_0) },
9897 },
9898
9899 /* VEX_LEN_0F99_P_2 */
9900 {
9901 { VEX_W_TABLE (VEX_W_0F99_P_2_LEN_0) },
9902 },
9903
6c30d220 9904 /* VEX_LEN_0FAE_R_2_M_0 */
c0f3af97 9905 {
6c30d220 9906 { VEX_W_TABLE (VEX_W_0FAE_R_2_M_0) },
c0f3af97
L
9907 },
9908
6c30d220 9909 /* VEX_LEN_0FAE_R_3_M_0 */
c0f3af97 9910 {
6c30d220 9911 { VEX_W_TABLE (VEX_W_0FAE_R_3_M_0) },
c0f3af97
L
9912 },
9913
6c30d220 9914 /* VEX_LEN_0FC2_P_1 */
c0f3af97 9915 {
6c30d220
L
9916 { VEX_W_TABLE (VEX_W_0FC2_P_1) },
9917 { VEX_W_TABLE (VEX_W_0FC2_P_1) },
c0f3af97
L
9918 },
9919
6c30d220 9920 /* VEX_LEN_0FC2_P_3 */
c0f3af97 9921 {
6c30d220
L
9922 { VEX_W_TABLE (VEX_W_0FC2_P_3) },
9923 { VEX_W_TABLE (VEX_W_0FC2_P_3) },
c0f3af97
L
9924 },
9925
6c30d220 9926 /* VEX_LEN_0FC4_P_2 */
c0f3af97 9927 {
6c30d220 9928 { VEX_W_TABLE (VEX_W_0FC4_P_2) },
c0f3af97
L
9929 },
9930
6c30d220 9931 /* VEX_LEN_0FC5_P_2 */
c0f3af97 9932 {
6c30d220 9933 { VEX_W_TABLE (VEX_W_0FC5_P_2) },
c0f3af97
L
9934 },
9935
6c30d220 9936 /* VEX_LEN_0FD6_P_2 */
c0f3af97 9937 {
6c30d220
L
9938 { VEX_W_TABLE (VEX_W_0FD6_P_2) },
9939 { VEX_W_TABLE (VEX_W_0FD6_P_2) },
c0f3af97
L
9940 },
9941
6c30d220 9942 /* VEX_LEN_0FF7_P_2 */
c0f3af97 9943 {
6c30d220 9944 { VEX_W_TABLE (VEX_W_0FF7_P_2) },
c0f3af97
L
9945 },
9946
6c30d220 9947 /* VEX_LEN_0F3816_P_2 */
c0f3af97 9948 {
6c30d220
L
9949 { Bad_Opcode },
9950 { VEX_W_TABLE (VEX_W_0F3816_P_2) },
c0f3af97
L
9951 },
9952
6c30d220 9953 /* VEX_LEN_0F3819_P_2 */
c0f3af97 9954 {
6c30d220
L
9955 { Bad_Opcode },
9956 { VEX_W_TABLE (VEX_W_0F3819_P_2) },
c0f3af97
L
9957 },
9958
6c30d220 9959 /* VEX_LEN_0F381A_P_2_M_0 */
c0f3af97 9960 {
6c30d220
L
9961 { Bad_Opcode },
9962 { VEX_W_TABLE (VEX_W_0F381A_P_2_M_0) },
c0f3af97
L
9963 },
9964
6c30d220 9965 /* VEX_LEN_0F3836_P_2 */
c0f3af97 9966 {
6c30d220
L
9967 { Bad_Opcode },
9968 { VEX_W_TABLE (VEX_W_0F3836_P_2) },
c0f3af97
L
9969 },
9970
592a252b 9971 /* VEX_LEN_0F3841_P_2 */
c0f3af97 9972 {
592a252b 9973 { VEX_W_TABLE (VEX_W_0F3841_P_2) },
c0f3af97
L
9974 },
9975
6c30d220
L
9976 /* VEX_LEN_0F385A_P_2_M_0 */
9977 {
9978 { Bad_Opcode },
9979 { VEX_W_TABLE (VEX_W_0F385A_P_2_M_0) },
9980 },
9981
592a252b 9982 /* VEX_LEN_0F38DB_P_2 */
a5ff0eb2 9983 {
592a252b 9984 { VEX_W_TABLE (VEX_W_0F38DB_P_2) },
a5ff0eb2
L
9985 },
9986
f12dc422
L
9987 /* VEX_LEN_0F38F2_P_0 */
9988 {
bf890a93 9989 { "andnS", { Gdq, VexGdq, Edq }, 0 },
f12dc422
L
9990 },
9991
9992 /* VEX_LEN_0F38F3_R_1_P_0 */
9993 {
bf890a93 9994 { "blsrS", { VexGdq, Edq }, 0 },
f12dc422
L
9995 },
9996
9997 /* VEX_LEN_0F38F3_R_2_P_0 */
9998 {
bf890a93 9999 { "blsmskS", { VexGdq, Edq }, 0 },
f12dc422
L
10000 },
10001
10002 /* VEX_LEN_0F38F3_R_3_P_0 */
10003 {
bf890a93 10004 { "blsiS", { VexGdq, Edq }, 0 },
f12dc422
L
10005 },
10006
6c30d220
L
10007 /* VEX_LEN_0F38F5_P_0 */
10008 {
bf890a93 10009 { "bzhiS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
10010 },
10011
10012 /* VEX_LEN_0F38F5_P_1 */
10013 {
bf890a93 10014 { "pextS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
10015 },
10016
10017 /* VEX_LEN_0F38F5_P_3 */
10018 {
bf890a93 10019 { "pdepS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
10020 },
10021
10022 /* VEX_LEN_0F38F6_P_3 */
10023 {
bf890a93 10024 { "mulxS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
10025 },
10026
f12dc422
L
10027 /* VEX_LEN_0F38F7_P_0 */
10028 {
bf890a93 10029 { "bextrS", { Gdq, Edq, VexGdq }, 0 },
f12dc422
L
10030 },
10031
6c30d220
L
10032 /* VEX_LEN_0F38F7_P_1 */
10033 {
bf890a93 10034 { "sarxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
10035 },
10036
10037 /* VEX_LEN_0F38F7_P_2 */
10038 {
bf890a93 10039 { "shlxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
10040 },
10041
10042 /* VEX_LEN_0F38F7_P_3 */
10043 {
bf890a93 10044 { "shrxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
10045 },
10046
10047 /* VEX_LEN_0F3A00_P_2 */
10048 {
10049 { Bad_Opcode },
10050 { VEX_W_TABLE (VEX_W_0F3A00_P_2) },
10051 },
10052
10053 /* VEX_LEN_0F3A01_P_2 */
10054 {
10055 { Bad_Opcode },
10056 { VEX_W_TABLE (VEX_W_0F3A01_P_2) },
10057 },
10058
592a252b 10059 /* VEX_LEN_0F3A06_P_2 */
c0f3af97 10060 {
592d1631 10061 { Bad_Opcode },
592a252b 10062 { VEX_W_TABLE (VEX_W_0F3A06_P_2) },
c0f3af97
L
10063 },
10064
592a252b 10065 /* VEX_LEN_0F3A0A_P_2 */
c0f3af97 10066 {
592a252b
L
10067 { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
10068 { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
c0f3af97
L
10069 },
10070
592a252b 10071 /* VEX_LEN_0F3A0B_P_2 */
c0f3af97 10072 {
592a252b
L
10073 { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
10074 { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
c0f3af97
L
10075 },
10076
592a252b 10077 /* VEX_LEN_0F3A14_P_2 */
c0f3af97 10078 {
592a252b 10079 { VEX_W_TABLE (VEX_W_0F3A14_P_2) },
c0f3af97
L
10080 },
10081
592a252b 10082 /* VEX_LEN_0F3A15_P_2 */
c0f3af97 10083 {
592a252b 10084 { VEX_W_TABLE (VEX_W_0F3A15_P_2) },
c0f3af97
L
10085 },
10086
592a252b 10087 /* VEX_LEN_0F3A16_P_2 */
c0f3af97 10088 {
bf890a93 10089 { "vpextrK", { Edq, XM, Ib }, 0 },
c0f3af97
L
10090 },
10091
592a252b 10092 /* VEX_LEN_0F3A17_P_2 */
c0f3af97 10093 {
bf890a93 10094 { "vextractps", { Edqd, XM, Ib }, 0 },
c0f3af97
L
10095 },
10096
592a252b 10097 /* VEX_LEN_0F3A18_P_2 */
c0f3af97 10098 {
592d1631 10099 { Bad_Opcode },
592a252b 10100 { VEX_W_TABLE (VEX_W_0F3A18_P_2) },
c0f3af97
L
10101 },
10102
592a252b 10103 /* VEX_LEN_0F3A19_P_2 */
c0f3af97 10104 {
592d1631 10105 { Bad_Opcode },
592a252b 10106 { VEX_W_TABLE (VEX_W_0F3A19_P_2) },
c0f3af97
L
10107 },
10108
592a252b 10109 /* VEX_LEN_0F3A20_P_2 */
c0f3af97 10110 {
592a252b 10111 { VEX_W_TABLE (VEX_W_0F3A20_P_2) },
c0f3af97
L
10112 },
10113
592a252b 10114 /* VEX_LEN_0F3A21_P_2 */
c0f3af97 10115 {
592a252b 10116 { VEX_W_TABLE (VEX_W_0F3A21_P_2) },
c0f3af97
L
10117 },
10118
592a252b 10119 /* VEX_LEN_0F3A22_P_2 */
c0f3af97 10120 {
bf890a93 10121 { "vpinsrK", { XM, Vex128, Edq, Ib }, 0 },
c0f3af97
L
10122 },
10123
43234a1e
L
10124 /* VEX_LEN_0F3A30_P_2 */
10125 {
10126 { VEX_W_TABLE (VEX_W_0F3A30_P_2_LEN_0) },
10127 },
10128
1ba585e8
IT
10129 /* VEX_LEN_0F3A31_P_2 */
10130 {
10131 { VEX_W_TABLE (VEX_W_0F3A31_P_2_LEN_0) },
10132 },
10133
43234a1e
L
10134 /* VEX_LEN_0F3A32_P_2 */
10135 {
10136 { VEX_W_TABLE (VEX_W_0F3A32_P_2_LEN_0) },
10137 },
10138
1ba585e8
IT
10139 /* VEX_LEN_0F3A33_P_2 */
10140 {
10141 { VEX_W_TABLE (VEX_W_0F3A33_P_2_LEN_0) },
10142 },
10143
6c30d220 10144 /* VEX_LEN_0F3A38_P_2 */
c0f3af97 10145 {
6c30d220
L
10146 { Bad_Opcode },
10147 { VEX_W_TABLE (VEX_W_0F3A38_P_2) },
c0f3af97
L
10148 },
10149
6c30d220 10150 /* VEX_LEN_0F3A39_P_2 */
c0f3af97 10151 {
6c30d220
L
10152 { Bad_Opcode },
10153 { VEX_W_TABLE (VEX_W_0F3A39_P_2) },
10154 },
10155
10156 /* VEX_LEN_0F3A41_P_2 */
10157 {
10158 { VEX_W_TABLE (VEX_W_0F3A41_P_2) },
c0f3af97
L
10159 },
10160
6c30d220 10161 /* VEX_LEN_0F3A46_P_2 */
c0f3af97 10162 {
6c30d220
L
10163 { Bad_Opcode },
10164 { VEX_W_TABLE (VEX_W_0F3A46_P_2) },
c0f3af97
L
10165 },
10166
592a252b 10167 /* VEX_LEN_0F3A60_P_2 */
c0f3af97 10168 {
15c7c1d8 10169 { "vpcmpestrm", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, 0 },
c0f3af97
L
10170 },
10171
592a252b 10172 /* VEX_LEN_0F3A61_P_2 */
c0f3af97 10173 {
15c7c1d8 10174 { "vpcmpestri", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, 0 },
c0f3af97
L
10175 },
10176
592a252b 10177 /* VEX_LEN_0F3A62_P_2 */
c0f3af97 10178 {
592a252b 10179 { VEX_W_TABLE (VEX_W_0F3A62_P_2) },
c0f3af97
L
10180 },
10181
592a252b 10182 /* VEX_LEN_0F3A63_P_2 */
c0f3af97 10183 {
592a252b 10184 { VEX_W_TABLE (VEX_W_0F3A63_P_2) },
c0f3af97
L
10185 },
10186
592a252b 10187 /* VEX_LEN_0F3A6A_P_2 */
922d8de8 10188 {
3a2430e0 10189 { "vfmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 },
922d8de8
DR
10190 },
10191
592a252b 10192 /* VEX_LEN_0F3A6B_P_2 */
922d8de8 10193 {
3a2430e0 10194 { "vfmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 },
922d8de8
DR
10195 },
10196
592a252b 10197 /* VEX_LEN_0F3A6E_P_2 */
922d8de8 10198 {
3a2430e0 10199 { "vfmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 },
922d8de8
DR
10200 },
10201
592a252b 10202 /* VEX_LEN_0F3A6F_P_2 */
922d8de8 10203 {
3a2430e0 10204 { "vfmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 },
922d8de8
DR
10205 },
10206
592a252b 10207 /* VEX_LEN_0F3A7A_P_2 */
922d8de8 10208 {
3a2430e0 10209 { "vfnmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 },
922d8de8
DR
10210 },
10211
592a252b 10212 /* VEX_LEN_0F3A7B_P_2 */
922d8de8 10213 {
3a2430e0 10214 { "vfnmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 },
922d8de8
DR
10215 },
10216
592a252b 10217 /* VEX_LEN_0F3A7E_P_2 */
922d8de8 10218 {
3a2430e0 10219 { "vfnmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 },
922d8de8
DR
10220 },
10221
592a252b 10222 /* VEX_LEN_0F3A7F_P_2 */
922d8de8 10223 {
3a2430e0 10224 { "vfnmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 },
922d8de8
DR
10225 },
10226
592a252b 10227 /* VEX_LEN_0F3ADF_P_2 */
a5ff0eb2 10228 {
592a252b 10229 { VEX_W_TABLE (VEX_W_0F3ADF_P_2) },
a5ff0eb2 10230 },
4c807e72 10231
6c30d220
L
10232 /* VEX_LEN_0F3AF0_P_3 */
10233 {
bf890a93 10234 { "rorxS", { Gdq, Edq, Ib }, 0 },
6c30d220
L
10235 },
10236
ff688e1f
L
10237 /* VEX_LEN_0FXOP_08_CC */
10238 {
be92cb14 10239 { "vpcomb", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
10240 },
10241
10242 /* VEX_LEN_0FXOP_08_CD */
10243 {
be92cb14 10244 { "vpcomw", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
10245 },
10246
10247 /* VEX_LEN_0FXOP_08_CE */
10248 {
be92cb14 10249 { "vpcomd", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
10250 },
10251
10252 /* VEX_LEN_0FXOP_08_CF */
10253 {
be92cb14 10254 { "vpcomq", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
10255 },
10256
10257 /* VEX_LEN_0FXOP_08_EC */
10258 {
be92cb14 10259 { "vpcomub", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
10260 },
10261
10262 /* VEX_LEN_0FXOP_08_ED */
10263 {
be92cb14 10264 { "vpcomuw", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
10265 },
10266
10267 /* VEX_LEN_0FXOP_08_EE */
10268 {
be92cb14 10269 { "vpcomud", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
10270 },
10271
10272 /* VEX_LEN_0FXOP_08_EF */
10273 {
be92cb14 10274 { "vpcomuq", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
10275 },
10276
592a252b 10277 /* VEX_LEN_0FXOP_09_80 */
5dd85c99 10278 {
bf890a93
IT
10279 { "vfrczps", { XM, EXxmm }, 0 },
10280 { "vfrczps", { XM, EXymmq }, 0 },
5dd85c99 10281 },
4c807e72 10282
592a252b 10283 /* VEX_LEN_0FXOP_09_81 */
5dd85c99 10284 {
bf890a93
IT
10285 { "vfrczpd", { XM, EXxmm }, 0 },
10286 { "vfrczpd", { XM, EXymmq }, 0 },
5dd85c99 10287 },
331d2d0d
L
10288};
10289
9e30b8e0 10290static const struct dis386 vex_w_table[][2] = {
b844680a 10291 {
592a252b 10292 /* VEX_W_0F10_P_0 */
bf890a93 10293 { "vmovups", { XM, EXx }, 0 },
d8faab4e
L
10294 },
10295 {
592a252b 10296 /* VEX_W_0F10_P_1 */
bf890a93 10297 { "vmovss", { XMVexScalar, VexScalar, EXdScalar }, 0 },
d8faab4e
L
10298 },
10299 {
592a252b 10300 /* VEX_W_0F10_P_2 */
bf890a93 10301 { "vmovupd", { XM, EXx }, 0 },
d8faab4e
L
10302 },
10303 {
592a252b 10304 /* VEX_W_0F10_P_3 */
bf890a93 10305 { "vmovsd", { XMVexScalar, VexScalar, EXqScalar }, 0 },
d8faab4e
L
10306 },
10307 {
592a252b 10308 /* VEX_W_0F11_P_0 */
bf890a93 10309 { "vmovups", { EXxS, XM }, 0 },
d8faab4e
L
10310 },
10311 {
592a252b 10312 /* VEX_W_0F11_P_1 */
bf890a93 10313 { "vmovss", { EXdVexScalarS, VexScalar, XMScalar }, 0 },
b844680a
L
10314 },
10315 {
592a252b 10316 /* VEX_W_0F11_P_2 */
bf890a93 10317 { "vmovupd", { EXxS, XM }, 0 },
b844680a
L
10318 },
10319 {
592a252b 10320 /* VEX_W_0F11_P_3 */
bf890a93 10321 { "vmovsd", { EXqVexScalarS, VexScalar, XMScalar }, 0 },
d8faab4e
L
10322 },
10323 {
592a252b 10324 /* VEX_W_0F12_P_0_M_0 */
bf890a93 10325 { "vmovlps", { XM, Vex128, EXq }, 0 },
b844680a
L
10326 },
10327 {
592a252b 10328 /* VEX_W_0F12_P_0_M_1 */
bf890a93 10329 { "vmovhlps", { XM, Vex128, EXq }, 0 },
b844680a
L
10330 },
10331 {
592a252b 10332 /* VEX_W_0F12_P_1 */
bf890a93 10333 { "vmovsldup", { XM, EXx }, 0 },
b844680a
L
10334 },
10335 {
592a252b 10336 /* VEX_W_0F12_P_2 */
bf890a93 10337 { "vmovlpd", { XM, Vex128, EXq }, 0 },
b844680a
L
10338 },
10339 {
592a252b 10340 /* VEX_W_0F12_P_3 */
bf890a93 10341 { "vmovddup", { XM, EXymmq }, 0 },
b844680a
L
10342 },
10343 {
592a252b 10344 /* VEX_W_0F13_M_0 */
bf890a93 10345 { "vmovlpX", { EXq, XM }, 0 },
b844680a
L
10346 },
10347 {
592a252b 10348 /* VEX_W_0F14 */
bf890a93 10349 { "vunpcklpX", { XM, Vex, EXx }, 0 },
b844680a
L
10350 },
10351 {
592a252b 10352 /* VEX_W_0F15 */
bf890a93 10353 { "vunpckhpX", { XM, Vex, EXx }, 0 },
b844680a
L
10354 },
10355 {
592a252b 10356 /* VEX_W_0F16_P_0_M_0 */
bf890a93 10357 { "vmovhps", { XM, Vex128, EXq }, 0 },
9e30b8e0
L
10358 },
10359 {
592a252b 10360 /* VEX_W_0F16_P_0_M_1 */
bf890a93 10361 { "vmovlhps", { XM, Vex128, EXq }, 0 },
9e30b8e0
L
10362 },
10363 {
592a252b 10364 /* VEX_W_0F16_P_1 */
bf890a93 10365 { "vmovshdup", { XM, EXx }, 0 },
9e30b8e0
L
10366 },
10367 {
592a252b 10368 /* VEX_W_0F16_P_2 */
bf890a93 10369 { "vmovhpd", { XM, Vex128, EXq }, 0 },
9e30b8e0
L
10370 },
10371 {
592a252b 10372 /* VEX_W_0F17_M_0 */
bf890a93 10373 { "vmovhpX", { EXq, XM }, 0 },
9e30b8e0
L
10374 },
10375 {
592a252b 10376 /* VEX_W_0F28 */
bf890a93 10377 { "vmovapX", { XM, EXx }, 0 },
9e30b8e0
L
10378 },
10379 {
592a252b 10380 /* VEX_W_0F29 */
bf890a93 10381 { "vmovapX", { EXxS, XM }, 0 },
9e30b8e0
L
10382 },
10383 {
592a252b 10384 /* VEX_W_0F2B_M_0 */
bf890a93 10385 { "vmovntpX", { Mx, XM }, 0 },
9e30b8e0
L
10386 },
10387 {
592a252b 10388 /* VEX_W_0F2E_P_0 */
bf890a93 10389 { "vucomiss", { XMScalar, EXdScalar }, 0 },
9e30b8e0
L
10390 },
10391 {
592a252b 10392 /* VEX_W_0F2E_P_2 */
bf890a93 10393 { "vucomisd", { XMScalar, EXqScalar }, 0 },
9e30b8e0
L
10394 },
10395 {
592a252b 10396 /* VEX_W_0F2F_P_0 */
bf890a93 10397 { "vcomiss", { XMScalar, EXdScalar }, 0 },
9e30b8e0
L
10398 },
10399 {
592a252b 10400 /* VEX_W_0F2F_P_2 */
bf890a93 10401 { "vcomisd", { XMScalar, EXqScalar }, 0 },
9e30b8e0 10402 },
43234a1e
L
10403 {
10404 /* VEX_W_0F41_P_0_LEN_1 */
ab4e4ed5
AF
10405 { MOD_TABLE (MOD_VEX_W_0_0F41_P_0_LEN_1) },
10406 { MOD_TABLE (MOD_VEX_W_1_0F41_P_0_LEN_1) },
1ba585e8
IT
10407 },
10408 {
10409 /* VEX_W_0F41_P_2_LEN_1 */
ab4e4ed5
AF
10410 { MOD_TABLE (MOD_VEX_W_0_0F41_P_2_LEN_1) },
10411 { MOD_TABLE (MOD_VEX_W_1_0F41_P_2_LEN_1) }
43234a1e
L
10412 },
10413 {
10414 /* VEX_W_0F42_P_0_LEN_1 */
ab4e4ed5
AF
10415 { MOD_TABLE (MOD_VEX_W_0_0F42_P_0_LEN_1) },
10416 { MOD_TABLE (MOD_VEX_W_1_0F42_P_0_LEN_1) },
1ba585e8
IT
10417 },
10418 {
10419 /* VEX_W_0F42_P_2_LEN_1 */
ab4e4ed5
AF
10420 { MOD_TABLE (MOD_VEX_W_0_0F42_P_2_LEN_1) },
10421 { MOD_TABLE (MOD_VEX_W_1_0F42_P_2_LEN_1) },
43234a1e
L
10422 },
10423 {
10424 /* VEX_W_0F44_P_0_LEN_0 */
ab4e4ed5
AF
10425 { MOD_TABLE (MOD_VEX_W_0_0F44_P_0_LEN_1) },
10426 { MOD_TABLE (MOD_VEX_W_1_0F44_P_0_LEN_1) },
1ba585e8
IT
10427 },
10428 {
10429 /* VEX_W_0F44_P_2_LEN_0 */
ab4e4ed5
AF
10430 { MOD_TABLE (MOD_VEX_W_0_0F44_P_2_LEN_1) },
10431 { MOD_TABLE (MOD_VEX_W_1_0F44_P_2_LEN_1) },
43234a1e
L
10432 },
10433 {
10434 /* VEX_W_0F45_P_0_LEN_1 */
ab4e4ed5
AF
10435 { MOD_TABLE (MOD_VEX_W_0_0F45_P_0_LEN_1) },
10436 { MOD_TABLE (MOD_VEX_W_1_0F45_P_0_LEN_1) },
1ba585e8
IT
10437 },
10438 {
10439 /* VEX_W_0F45_P_2_LEN_1 */
ab4e4ed5
AF
10440 { MOD_TABLE (MOD_VEX_W_0_0F45_P_2_LEN_1) },
10441 { MOD_TABLE (MOD_VEX_W_1_0F45_P_2_LEN_1) },
43234a1e
L
10442 },
10443 {
10444 /* VEX_W_0F46_P_0_LEN_1 */
ab4e4ed5
AF
10445 { MOD_TABLE (MOD_VEX_W_0_0F46_P_0_LEN_1) },
10446 { MOD_TABLE (MOD_VEX_W_1_0F46_P_0_LEN_1) },
1ba585e8
IT
10447 },
10448 {
10449 /* VEX_W_0F46_P_2_LEN_1 */
ab4e4ed5
AF
10450 { MOD_TABLE (MOD_VEX_W_0_0F46_P_2_LEN_1) },
10451 { MOD_TABLE (MOD_VEX_W_1_0F46_P_2_LEN_1) },
43234a1e
L
10452 },
10453 {
10454 /* VEX_W_0F47_P_0_LEN_1 */
ab4e4ed5
AF
10455 { MOD_TABLE (MOD_VEX_W_0_0F47_P_0_LEN_1) },
10456 { MOD_TABLE (MOD_VEX_W_1_0F47_P_0_LEN_1) },
1ba585e8
IT
10457 },
10458 {
10459 /* VEX_W_0F47_P_2_LEN_1 */
ab4e4ed5
AF
10460 { MOD_TABLE (MOD_VEX_W_0_0F47_P_2_LEN_1) },
10461 { MOD_TABLE (MOD_VEX_W_1_0F47_P_2_LEN_1) },
1ba585e8
IT
10462 },
10463 {
10464 /* VEX_W_0F4A_P_0_LEN_1 */
ab4e4ed5
AF
10465 { MOD_TABLE (MOD_VEX_W_0_0F4A_P_0_LEN_1) },
10466 { MOD_TABLE (MOD_VEX_W_1_0F4A_P_0_LEN_1) },
1ba585e8
IT
10467 },
10468 {
10469 /* VEX_W_0F4A_P_2_LEN_1 */
ab4e4ed5
AF
10470 { MOD_TABLE (MOD_VEX_W_0_0F4A_P_2_LEN_1) },
10471 { MOD_TABLE (MOD_VEX_W_1_0F4A_P_2_LEN_1) },
1ba585e8
IT
10472 },
10473 {
10474 /* VEX_W_0F4B_P_0_LEN_1 */
ab4e4ed5
AF
10475 { MOD_TABLE (MOD_VEX_W_0_0F4B_P_0_LEN_1) },
10476 { MOD_TABLE (MOD_VEX_W_1_0F4B_P_0_LEN_1) },
43234a1e
L
10477 },
10478 {
10479 /* VEX_W_0F4B_P_2_LEN_1 */
ab4e4ed5 10480 { MOD_TABLE (MOD_VEX_W_0_0F4B_P_2_LEN_1) },
43234a1e 10481 },
9e30b8e0 10482 {
592a252b 10483 /* VEX_W_0F50_M_0 */
bf890a93 10484 { "vmovmskpX", { Gdq, XS }, 0 },
9e30b8e0
L
10485 },
10486 {
592a252b 10487 /* VEX_W_0F51_P_0 */
bf890a93 10488 { "vsqrtps", { XM, EXx }, 0 },
9e30b8e0
L
10489 },
10490 {
592a252b 10491 /* VEX_W_0F51_P_1 */
bf890a93 10492 { "vsqrtss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10493 },
10494 {
592a252b 10495 /* VEX_W_0F51_P_2 */
bf890a93 10496 { "vsqrtpd", { XM, EXx }, 0 },
9e30b8e0
L
10497 },
10498 {
592a252b 10499 /* VEX_W_0F51_P_3 */
bf890a93 10500 { "vsqrtsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10501 },
10502 {
592a252b 10503 /* VEX_W_0F52_P_0 */
bf890a93 10504 { "vrsqrtps", { XM, EXx }, 0 },
9e30b8e0
L
10505 },
10506 {
592a252b 10507 /* VEX_W_0F52_P_1 */
bf890a93 10508 { "vrsqrtss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10509 },
10510 {
592a252b 10511 /* VEX_W_0F53_P_0 */
bf890a93 10512 { "vrcpps", { XM, EXx }, 0 },
9e30b8e0
L
10513 },
10514 {
592a252b 10515 /* VEX_W_0F53_P_1 */
bf890a93 10516 { "vrcpss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10517 },
10518 {
592a252b 10519 /* VEX_W_0F58_P_0 */
bf890a93 10520 { "vaddps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10521 },
10522 {
592a252b 10523 /* VEX_W_0F58_P_1 */
bf890a93 10524 { "vaddss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10525 },
10526 {
592a252b 10527 /* VEX_W_0F58_P_2 */
bf890a93 10528 { "vaddpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10529 },
10530 {
592a252b 10531 /* VEX_W_0F58_P_3 */
bf890a93 10532 { "vaddsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10533 },
10534 {
592a252b 10535 /* VEX_W_0F59_P_0 */
bf890a93 10536 { "vmulps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10537 },
10538 {
592a252b 10539 /* VEX_W_0F59_P_1 */
bf890a93 10540 { "vmulss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10541 },
10542 {
592a252b 10543 /* VEX_W_0F59_P_2 */
bf890a93 10544 { "vmulpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10545 },
10546 {
592a252b 10547 /* VEX_W_0F59_P_3 */
bf890a93 10548 { "vmulsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10549 },
10550 {
592a252b 10551 /* VEX_W_0F5A_P_0 */
bf890a93 10552 { "vcvtps2pd", { XM, EXxmmq }, 0 },
9e30b8e0
L
10553 },
10554 {
592a252b 10555 /* VEX_W_0F5A_P_1 */
bf890a93 10556 { "vcvtss2sd", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10557 },
10558 {
592a252b 10559 /* VEX_W_0F5A_P_3 */
bf890a93 10560 { "vcvtsd2ss", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10561 },
10562 {
592a252b 10563 /* VEX_W_0F5B_P_0 */
bf890a93 10564 { "vcvtdq2ps", { XM, EXx }, 0 },
9e30b8e0
L
10565 },
10566 {
592a252b 10567 /* VEX_W_0F5B_P_1 */
bf890a93 10568 { "vcvttps2dq", { XM, EXx }, 0 },
9e30b8e0
L
10569 },
10570 {
592a252b 10571 /* VEX_W_0F5B_P_2 */
bf890a93 10572 { "vcvtps2dq", { XM, EXx }, 0 },
9e30b8e0
L
10573 },
10574 {
592a252b 10575 /* VEX_W_0F5C_P_0 */
bf890a93 10576 { "vsubps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10577 },
10578 {
592a252b 10579 /* VEX_W_0F5C_P_1 */
bf890a93 10580 { "vsubss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10581 },
10582 {
592a252b 10583 /* VEX_W_0F5C_P_2 */
bf890a93 10584 { "vsubpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10585 },
10586 {
592a252b 10587 /* VEX_W_0F5C_P_3 */
bf890a93 10588 { "vsubsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10589 },
10590 {
592a252b 10591 /* VEX_W_0F5D_P_0 */
bf890a93 10592 { "vminps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10593 },
10594 {
592a252b 10595 /* VEX_W_0F5D_P_1 */
bf890a93 10596 { "vminss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10597 },
10598 {
592a252b 10599 /* VEX_W_0F5D_P_2 */
bf890a93 10600 { "vminpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10601 },
10602 {
592a252b 10603 /* VEX_W_0F5D_P_3 */
bf890a93 10604 { "vminsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10605 },
10606 {
592a252b 10607 /* VEX_W_0F5E_P_0 */
bf890a93 10608 { "vdivps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10609 },
10610 {
592a252b 10611 /* VEX_W_0F5E_P_1 */
bf890a93 10612 { "vdivss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10613 },
10614 {
592a252b 10615 /* VEX_W_0F5E_P_2 */
bf890a93 10616 { "vdivpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10617 },
10618 {
592a252b 10619 /* VEX_W_0F5E_P_3 */
bf890a93 10620 { "vdivsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10621 },
10622 {
592a252b 10623 /* VEX_W_0F5F_P_0 */
bf890a93 10624 { "vmaxps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10625 },
10626 {
592a252b 10627 /* VEX_W_0F5F_P_1 */
bf890a93 10628 { "vmaxss", { XMScalar, VexScalar, EXdScalar }, 0 },
9e30b8e0
L
10629 },
10630 {
592a252b 10631 /* VEX_W_0F5F_P_2 */
bf890a93 10632 { "vmaxpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10633 },
10634 {
592a252b 10635 /* VEX_W_0F5F_P_3 */
bf890a93 10636 { "vmaxsd", { XMScalar, VexScalar, EXqScalar }, 0 },
9e30b8e0
L
10637 },
10638 {
592a252b 10639 /* VEX_W_0F60_P_2 */
bf890a93 10640 { "vpunpcklbw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10641 },
10642 {
592a252b 10643 /* VEX_W_0F61_P_2 */
bf890a93 10644 { "vpunpcklwd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10645 },
10646 {
592a252b 10647 /* VEX_W_0F62_P_2 */
bf890a93 10648 { "vpunpckldq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10649 },
10650 {
592a252b 10651 /* VEX_W_0F63_P_2 */
bf890a93 10652 { "vpacksswb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10653 },
10654 {
592a252b 10655 /* VEX_W_0F64_P_2 */
bf890a93 10656 { "vpcmpgtb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10657 },
10658 {
592a252b 10659 /* VEX_W_0F65_P_2 */
bf890a93 10660 { "vpcmpgtw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10661 },
10662 {
592a252b 10663 /* VEX_W_0F66_P_2 */
bf890a93 10664 { "vpcmpgtd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10665 },
10666 {
592a252b 10667 /* VEX_W_0F67_P_2 */
bf890a93 10668 { "vpackuswb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10669 },
10670 {
592a252b 10671 /* VEX_W_0F68_P_2 */
bf890a93 10672 { "vpunpckhbw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10673 },
10674 {
592a252b 10675 /* VEX_W_0F69_P_2 */
bf890a93 10676 { "vpunpckhwd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10677 },
10678 {
592a252b 10679 /* VEX_W_0F6A_P_2 */
bf890a93 10680 { "vpunpckhdq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10681 },
10682 {
592a252b 10683 /* VEX_W_0F6B_P_2 */
bf890a93 10684 { "vpackssdw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10685 },
10686 {
592a252b 10687 /* VEX_W_0F6C_P_2 */
bf890a93 10688 { "vpunpcklqdq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10689 },
10690 {
592a252b 10691 /* VEX_W_0F6D_P_2 */
bf890a93 10692 { "vpunpckhqdq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10693 },
10694 {
592a252b 10695 /* VEX_W_0F6F_P_1 */
bf890a93 10696 { "vmovdqu", { XM, EXx }, 0 },
9e30b8e0
L
10697 },
10698 {
592a252b 10699 /* VEX_W_0F6F_P_2 */
bf890a93 10700 { "vmovdqa", { XM, EXx }, 0 },
9e30b8e0
L
10701 },
10702 {
592a252b 10703 /* VEX_W_0F70_P_1 */
bf890a93 10704 { "vpshufhw", { XM, EXx, Ib }, 0 },
9e30b8e0
L
10705 },
10706 {
592a252b 10707 /* VEX_W_0F70_P_2 */
bf890a93 10708 { "vpshufd", { XM, EXx, Ib }, 0 },
9e30b8e0
L
10709 },
10710 {
592a252b 10711 /* VEX_W_0F70_P_3 */
bf890a93 10712 { "vpshuflw", { XM, EXx, Ib }, 0 },
9e30b8e0
L
10713 },
10714 {
592a252b 10715 /* VEX_W_0F71_R_2_P_2 */
bf890a93 10716 { "vpsrlw", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10717 },
10718 {
592a252b 10719 /* VEX_W_0F71_R_4_P_2 */
bf890a93 10720 { "vpsraw", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10721 },
10722 {
592a252b 10723 /* VEX_W_0F71_R_6_P_2 */
bf890a93 10724 { "vpsllw", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10725 },
10726 {
592a252b 10727 /* VEX_W_0F72_R_2_P_2 */
bf890a93 10728 { "vpsrld", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10729 },
10730 {
592a252b 10731 /* VEX_W_0F72_R_4_P_2 */
bf890a93 10732 { "vpsrad", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10733 },
10734 {
592a252b 10735 /* VEX_W_0F72_R_6_P_2 */
bf890a93 10736 { "vpslld", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10737 },
10738 {
592a252b 10739 /* VEX_W_0F73_R_2_P_2 */
bf890a93 10740 { "vpsrlq", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10741 },
10742 {
592a252b 10743 /* VEX_W_0F73_R_3_P_2 */
bf890a93 10744 { "vpsrldq", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10745 },
10746 {
592a252b 10747 /* VEX_W_0F73_R_6_P_2 */
bf890a93 10748 { "vpsllq", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10749 },
10750 {
592a252b 10751 /* VEX_W_0F73_R_7_P_2 */
bf890a93 10752 { "vpslldq", { Vex, XS, Ib }, 0 },
9e30b8e0
L
10753 },
10754 {
592a252b 10755 /* VEX_W_0F74_P_2 */
bf890a93 10756 { "vpcmpeqb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10757 },
10758 {
592a252b 10759 /* VEX_W_0F75_P_2 */
bf890a93 10760 { "vpcmpeqw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10761 },
10762 {
592a252b 10763 /* VEX_W_0F76_P_2 */
bf890a93 10764 { "vpcmpeqd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10765 },
10766 {
592a252b 10767 /* VEX_W_0F77_P_0 */
bf890a93 10768 { "", { VZERO }, 0 },
9e30b8e0
L
10769 },
10770 {
592a252b 10771 /* VEX_W_0F7C_P_2 */
bf890a93 10772 { "vhaddpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10773 },
10774 {
592a252b 10775 /* VEX_W_0F7C_P_3 */
bf890a93 10776 { "vhaddps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10777 },
10778 {
592a252b 10779 /* VEX_W_0F7D_P_2 */
bf890a93 10780 { "vhsubpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10781 },
10782 {
592a252b 10783 /* VEX_W_0F7D_P_3 */
bf890a93 10784 { "vhsubps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10785 },
10786 {
592a252b 10787 /* VEX_W_0F7E_P_1 */
bf890a93 10788 { "vmovq", { XMScalar, EXqScalar }, 0 },
9e30b8e0
L
10789 },
10790 {
592a252b 10791 /* VEX_W_0F7F_P_1 */
bf890a93 10792 { "vmovdqu", { EXxS, XM }, 0 },
9e30b8e0
L
10793 },
10794 {
592a252b 10795 /* VEX_W_0F7F_P_2 */
bf890a93 10796 { "vmovdqa", { EXxS, XM }, 0 },
9e30b8e0 10797 },
43234a1e
L
10798 {
10799 /* VEX_W_0F90_P_0_LEN_0 */
bf890a93
IT
10800 { "kmovw", { MaskG, MaskE }, 0 },
10801 { "kmovq", { MaskG, MaskE }, 0 },
1ba585e8
IT
10802 },
10803 {
10804 /* VEX_W_0F90_P_2_LEN_0 */
bf890a93
IT
10805 { "kmovb", { MaskG, MaskBDE }, 0 },
10806 { "kmovd", { MaskG, MaskBDE }, 0 },
43234a1e
L
10807 },
10808 {
10809 /* VEX_W_0F91_P_0_LEN_0 */
ab4e4ed5
AF
10810 { MOD_TABLE (MOD_VEX_W_0_0F91_P_0_LEN_0) },
10811 { MOD_TABLE (MOD_VEX_W_1_0F91_P_0_LEN_0) },
1ba585e8
IT
10812 },
10813 {
10814 /* VEX_W_0F91_P_2_LEN_0 */
ab4e4ed5
AF
10815 { MOD_TABLE (MOD_VEX_W_0_0F91_P_2_LEN_0) },
10816 { MOD_TABLE (MOD_VEX_W_1_0F91_P_2_LEN_0) },
43234a1e
L
10817 },
10818 {
10819 /* VEX_W_0F92_P_0_LEN_0 */
ab4e4ed5 10820 { MOD_TABLE (MOD_VEX_W_0_0F92_P_0_LEN_0) },
43234a1e 10821 },
90a915bf
IT
10822 {
10823 /* VEX_W_0F92_P_2_LEN_0 */
ab4e4ed5 10824 { MOD_TABLE (MOD_VEX_W_0_0F92_P_2_LEN_0) },
90a915bf 10825 },
1ba585e8
IT
10826 {
10827 /* VEX_W_0F92_P_3_LEN_0 */
ab4e4ed5
AF
10828 { MOD_TABLE (MOD_VEX_W_0_0F92_P_3_LEN_0) },
10829 { MOD_TABLE (MOD_VEX_W_1_0F92_P_3_LEN_0) },
1ba585e8 10830 },
43234a1e
L
10831 {
10832 /* VEX_W_0F93_P_0_LEN_0 */
ab4e4ed5 10833 { MOD_TABLE (MOD_VEX_W_0_0F93_P_0_LEN_0) },
43234a1e 10834 },
90a915bf
IT
10835 {
10836 /* VEX_W_0F93_P_2_LEN_0 */
ab4e4ed5 10837 { MOD_TABLE (MOD_VEX_W_0_0F93_P_2_LEN_0) },
90a915bf 10838 },
1ba585e8
IT
10839 {
10840 /* VEX_W_0F93_P_3_LEN_0 */
ab4e4ed5
AF
10841 { MOD_TABLE (MOD_VEX_W_0_0F93_P_3_LEN_0) },
10842 { MOD_TABLE (MOD_VEX_W_1_0F93_P_3_LEN_0) },
1ba585e8 10843 },
43234a1e
L
10844 {
10845 /* VEX_W_0F98_P_0_LEN_0 */
ab4e4ed5
AF
10846 { MOD_TABLE (MOD_VEX_W_0_0F98_P_0_LEN_0) },
10847 { MOD_TABLE (MOD_VEX_W_1_0F98_P_0_LEN_0) },
1ba585e8
IT
10848 },
10849 {
10850 /* VEX_W_0F98_P_2_LEN_0 */
ab4e4ed5
AF
10851 { MOD_TABLE (MOD_VEX_W_0_0F98_P_2_LEN_0) },
10852 { MOD_TABLE (MOD_VEX_W_1_0F98_P_2_LEN_0) },
1ba585e8
IT
10853 },
10854 {
10855 /* VEX_W_0F99_P_0_LEN_0 */
ab4e4ed5
AF
10856 { MOD_TABLE (MOD_VEX_W_0_0F99_P_0_LEN_0) },
10857 { MOD_TABLE (MOD_VEX_W_1_0F99_P_0_LEN_0) },
1ba585e8
IT
10858 },
10859 {
10860 /* VEX_W_0F99_P_2_LEN_0 */
ab4e4ed5
AF
10861 { MOD_TABLE (MOD_VEX_W_0_0F99_P_2_LEN_0) },
10862 { MOD_TABLE (MOD_VEX_W_1_0F99_P_2_LEN_0) },
43234a1e 10863 },
9e30b8e0 10864 {
592a252b 10865 /* VEX_W_0FAE_R_2_M_0 */
bf890a93 10866 { "vldmxcsr", { Md }, 0 },
9e30b8e0
L
10867 },
10868 {
592a252b 10869 /* VEX_W_0FAE_R_3_M_0 */
bf890a93 10870 { "vstmxcsr", { Md }, 0 },
9e30b8e0
L
10871 },
10872 {
592a252b 10873 /* VEX_W_0FC2_P_0 */
bf890a93 10874 { "vcmpps", { XM, Vex, EXx, VCMP }, 0 },
9e30b8e0
L
10875 },
10876 {
592a252b 10877 /* VEX_W_0FC2_P_1 */
bf890a93 10878 { "vcmpss", { XMScalar, VexScalar, EXdScalar, VCMP }, 0 },
9e30b8e0
L
10879 },
10880 {
592a252b 10881 /* VEX_W_0FC2_P_2 */
bf890a93 10882 { "vcmppd", { XM, Vex, EXx, VCMP }, 0 },
9e30b8e0
L
10883 },
10884 {
592a252b 10885 /* VEX_W_0FC2_P_3 */
bf890a93 10886 { "vcmpsd", { XMScalar, VexScalar, EXqScalar, VCMP }, 0 },
9e30b8e0
L
10887 },
10888 {
592a252b 10889 /* VEX_W_0FC4_P_2 */
bf890a93 10890 { "vpinsrw", { XM, Vex128, Edqw, Ib }, 0 },
9e30b8e0
L
10891 },
10892 {
592a252b 10893 /* VEX_W_0FC5_P_2 */
bf890a93 10894 { "vpextrw", { Gdq, XS, Ib }, 0 },
9e30b8e0
L
10895 },
10896 {
592a252b 10897 /* VEX_W_0FD0_P_2 */
bf890a93 10898 { "vaddsubpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10899 },
10900 {
592a252b 10901 /* VEX_W_0FD0_P_3 */
bf890a93 10902 { "vaddsubps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10903 },
10904 {
592a252b 10905 /* VEX_W_0FD1_P_2 */
bf890a93 10906 { "vpsrlw", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
10907 },
10908 {
592a252b 10909 /* VEX_W_0FD2_P_2 */
bf890a93 10910 { "vpsrld", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
10911 },
10912 {
592a252b 10913 /* VEX_W_0FD3_P_2 */
bf890a93 10914 { "vpsrlq", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
10915 },
10916 {
592a252b 10917 /* VEX_W_0FD4_P_2 */
bf890a93 10918 { "vpaddq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10919 },
10920 {
592a252b 10921 /* VEX_W_0FD5_P_2 */
bf890a93 10922 { "vpmullw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10923 },
10924 {
592a252b 10925 /* VEX_W_0FD6_P_2 */
bf890a93 10926 { "vmovq", { EXqScalarS, XMScalar }, 0 },
9e30b8e0
L
10927 },
10928 {
592a252b 10929 /* VEX_W_0FD7_P_2_M_1 */
bf890a93 10930 { "vpmovmskb", { Gdq, XS }, 0 },
9e30b8e0
L
10931 },
10932 {
592a252b 10933 /* VEX_W_0FD8_P_2 */
bf890a93 10934 { "vpsubusb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10935 },
10936 {
592a252b 10937 /* VEX_W_0FD9_P_2 */
bf890a93 10938 { "vpsubusw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10939 },
10940 {
592a252b 10941 /* VEX_W_0FDA_P_2 */
bf890a93 10942 { "vpminub", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10943 },
10944 {
592a252b 10945 /* VEX_W_0FDB_P_2 */
bf890a93 10946 { "vpand", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10947 },
10948 {
592a252b 10949 /* VEX_W_0FDC_P_2 */
bf890a93 10950 { "vpaddusb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10951 },
10952 {
592a252b 10953 /* VEX_W_0FDD_P_2 */
bf890a93 10954 { "vpaddusw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10955 },
10956 {
592a252b 10957 /* VEX_W_0FDE_P_2 */
bf890a93 10958 { "vpmaxub", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10959 },
10960 {
592a252b 10961 /* VEX_W_0FDF_P_2 */
bf890a93 10962 { "vpandn", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10963 },
10964 {
592a252b 10965 /* VEX_W_0FE0_P_2 */
bf890a93 10966 { "vpavgb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10967 },
10968 {
592a252b 10969 /* VEX_W_0FE1_P_2 */
bf890a93 10970 { "vpsraw", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
10971 },
10972 {
592a252b 10973 /* VEX_W_0FE2_P_2 */
bf890a93 10974 { "vpsrad", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
10975 },
10976 {
592a252b 10977 /* VEX_W_0FE3_P_2 */
bf890a93 10978 { "vpavgw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10979 },
10980 {
592a252b 10981 /* VEX_W_0FE4_P_2 */
bf890a93 10982 { "vpmulhuw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10983 },
10984 {
592a252b 10985 /* VEX_W_0FE5_P_2 */
bf890a93 10986 { "vpmulhw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10987 },
10988 {
592a252b 10989 /* VEX_W_0FE6_P_1 */
bf890a93 10990 { "vcvtdq2pd", { XM, EXxmmq }, 0 },
9e30b8e0
L
10991 },
10992 {
592a252b 10993 /* VEX_W_0FE6_P_2 */
bf890a93 10994 { "vcvttpd2dq%XY", { XMM, EXx }, 0 },
9e30b8e0
L
10995 },
10996 {
592a252b 10997 /* VEX_W_0FE6_P_3 */
bf890a93 10998 { "vcvtpd2dq%XY", { XMM, EXx }, 0 },
9e30b8e0
L
10999 },
11000 {
592a252b 11001 /* VEX_W_0FE7_P_2_M_0 */
bf890a93 11002 { "vmovntdq", { Mx, XM }, 0 },
9e30b8e0
L
11003 },
11004 {
592a252b 11005 /* VEX_W_0FE8_P_2 */
bf890a93 11006 { "vpsubsb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11007 },
11008 {
592a252b 11009 /* VEX_W_0FE9_P_2 */
bf890a93 11010 { "vpsubsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11011 },
11012 {
592a252b 11013 /* VEX_W_0FEA_P_2 */
bf890a93 11014 { "vpminsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11015 },
11016 {
592a252b 11017 /* VEX_W_0FEB_P_2 */
bf890a93 11018 { "vpor", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11019 },
11020 {
592a252b 11021 /* VEX_W_0FEC_P_2 */
bf890a93 11022 { "vpaddsb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11023 },
11024 {
592a252b 11025 /* VEX_W_0FED_P_2 */
bf890a93 11026 { "vpaddsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11027 },
11028 {
592a252b 11029 /* VEX_W_0FEE_P_2 */
bf890a93 11030 { "vpmaxsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11031 },
11032 {
592a252b 11033 /* VEX_W_0FEF_P_2 */
bf890a93 11034 { "vpxor", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11035 },
11036 {
592a252b 11037 /* VEX_W_0FF0_P_3_M_0 */
bf890a93 11038 { "vlddqu", { XM, M }, 0 },
9e30b8e0
L
11039 },
11040 {
592a252b 11041 /* VEX_W_0FF1_P_2 */
bf890a93 11042 { "vpsllw", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
11043 },
11044 {
592a252b 11045 /* VEX_W_0FF2_P_2 */
bf890a93 11046 { "vpslld", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
11047 },
11048 {
592a252b 11049 /* VEX_W_0FF3_P_2 */
bf890a93 11050 { "vpsllq", { XM, Vex, EXxmm }, 0 },
9e30b8e0
L
11051 },
11052 {
592a252b 11053 /* VEX_W_0FF4_P_2 */
bf890a93 11054 { "vpmuludq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11055 },
11056 {
592a252b 11057 /* VEX_W_0FF5_P_2 */
bf890a93 11058 { "vpmaddwd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11059 },
11060 {
592a252b 11061 /* VEX_W_0FF6_P_2 */
bf890a93 11062 { "vpsadbw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11063 },
11064 {
592a252b 11065 /* VEX_W_0FF7_P_2 */
bf890a93 11066 { "vmaskmovdqu", { XM, XS }, 0 },
9e30b8e0
L
11067 },
11068 {
592a252b 11069 /* VEX_W_0FF8_P_2 */
bf890a93 11070 { "vpsubb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11071 },
11072 {
592a252b 11073 /* VEX_W_0FF9_P_2 */
bf890a93 11074 { "vpsubw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11075 },
11076 {
592a252b 11077 /* VEX_W_0FFA_P_2 */
bf890a93 11078 { "vpsubd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11079 },
11080 {
592a252b 11081 /* VEX_W_0FFB_P_2 */
bf890a93 11082 { "vpsubq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11083 },
11084 {
592a252b 11085 /* VEX_W_0FFC_P_2 */
bf890a93 11086 { "vpaddb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11087 },
11088 {
592a252b 11089 /* VEX_W_0FFD_P_2 */
bf890a93 11090 { "vpaddw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11091 },
11092 {
592a252b 11093 /* VEX_W_0FFE_P_2 */
bf890a93 11094 { "vpaddd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11095 },
11096 {
592a252b 11097 /* VEX_W_0F3800_P_2 */
bf890a93 11098 { "vpshufb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11099 },
11100 {
592a252b 11101 /* VEX_W_0F3801_P_2 */
bf890a93 11102 { "vphaddw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11103 },
11104 {
592a252b 11105 /* VEX_W_0F3802_P_2 */
bf890a93 11106 { "vphaddd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11107 },
11108 {
592a252b 11109 /* VEX_W_0F3803_P_2 */
bf890a93 11110 { "vphaddsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11111 },
11112 {
592a252b 11113 /* VEX_W_0F3804_P_2 */
bf890a93 11114 { "vpmaddubsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11115 },
11116 {
592a252b 11117 /* VEX_W_0F3805_P_2 */
bf890a93 11118 { "vphsubw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11119 },
11120 {
592a252b 11121 /* VEX_W_0F3806_P_2 */
bf890a93 11122 { "vphsubd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11123 },
11124 {
592a252b 11125 /* VEX_W_0F3807_P_2 */
bf890a93 11126 { "vphsubsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11127 },
11128 {
592a252b 11129 /* VEX_W_0F3808_P_2 */
bf890a93 11130 { "vpsignb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11131 },
11132 {
592a252b 11133 /* VEX_W_0F3809_P_2 */
bf890a93 11134 { "vpsignw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11135 },
11136 {
592a252b 11137 /* VEX_W_0F380A_P_2 */
bf890a93 11138 { "vpsignd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11139 },
11140 {
592a252b 11141 /* VEX_W_0F380B_P_2 */
bf890a93 11142 { "vpmulhrsw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11143 },
11144 {
592a252b 11145 /* VEX_W_0F380C_P_2 */
bf890a93 11146 { "vpermilps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11147 },
11148 {
592a252b 11149 /* VEX_W_0F380D_P_2 */
bf890a93 11150 { "vpermilpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11151 },
11152 {
592a252b 11153 /* VEX_W_0F380E_P_2 */
bf890a93 11154 { "vtestps", { XM, EXx }, 0 },
9e30b8e0
L
11155 },
11156 {
592a252b 11157 /* VEX_W_0F380F_P_2 */
bf890a93 11158 { "vtestpd", { XM, EXx }, 0 },
9e30b8e0 11159 },
6c30d220
L
11160 {
11161 /* VEX_W_0F3816_P_2 */
bf890a93 11162 { "vpermps", { XM, Vex, EXx }, 0 },
6c30d220 11163 },
9e30b8e0 11164 {
592a252b 11165 /* VEX_W_0F3817_P_2 */
bf890a93 11166 { "vptest", { XM, EXx }, 0 },
9e30b8e0 11167 },
bcf2684f 11168 {
6c30d220 11169 /* VEX_W_0F3818_P_2 */
bf890a93 11170 { "vbroadcastss", { XM, EXxmm_md }, 0 },
bcf2684f 11171 },
9e30b8e0 11172 {
6c30d220 11173 /* VEX_W_0F3819_P_2 */
bf890a93 11174 { "vbroadcastsd", { XM, EXxmm_mq }, 0 },
9e30b8e0
L
11175 },
11176 {
592a252b 11177 /* VEX_W_0F381A_P_2_M_0 */
bf890a93 11178 { "vbroadcastf128", { XM, Mxmm }, 0 },
9e30b8e0
L
11179 },
11180 {
592a252b 11181 /* VEX_W_0F381C_P_2 */
bf890a93 11182 { "vpabsb", { XM, EXx }, 0 },
9e30b8e0
L
11183 },
11184 {
592a252b 11185 /* VEX_W_0F381D_P_2 */
bf890a93 11186 { "vpabsw", { XM, EXx }, 0 },
9e30b8e0
L
11187 },
11188 {
592a252b 11189 /* VEX_W_0F381E_P_2 */
bf890a93 11190 { "vpabsd", { XM, EXx }, 0 },
9e30b8e0
L
11191 },
11192 {
592a252b 11193 /* VEX_W_0F3820_P_2 */
bf890a93 11194 { "vpmovsxbw", { XM, EXxmmq }, 0 },
9e30b8e0
L
11195 },
11196 {
592a252b 11197 /* VEX_W_0F3821_P_2 */
bf890a93 11198 { "vpmovsxbd", { XM, EXxmmqd }, 0 },
9e30b8e0
L
11199 },
11200 {
592a252b 11201 /* VEX_W_0F3822_P_2 */
bf890a93 11202 { "vpmovsxbq", { XM, EXxmmdw }, 0 },
9e30b8e0
L
11203 },
11204 {
592a252b 11205 /* VEX_W_0F3823_P_2 */
bf890a93 11206 { "vpmovsxwd", { XM, EXxmmq }, 0 },
9e30b8e0
L
11207 },
11208 {
592a252b 11209 /* VEX_W_0F3824_P_2 */
bf890a93 11210 { "vpmovsxwq", { XM, EXxmmqd }, 0 },
9e30b8e0
L
11211 },
11212 {
592a252b 11213 /* VEX_W_0F3825_P_2 */
bf890a93 11214 { "vpmovsxdq", { XM, EXxmmq }, 0 },
9e30b8e0
L
11215 },
11216 {
592a252b 11217 /* VEX_W_0F3828_P_2 */
bf890a93 11218 { "vpmuldq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11219 },
11220 {
592a252b 11221 /* VEX_W_0F3829_P_2 */
bf890a93 11222 { "vpcmpeqq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11223 },
11224 {
592a252b 11225 /* VEX_W_0F382A_P_2_M_0 */
bf890a93 11226 { "vmovntdqa", { XM, Mx }, 0 },
9e30b8e0
L
11227 },
11228 {
592a252b 11229 /* VEX_W_0F382B_P_2 */
bf890a93 11230 { "vpackusdw", { XM, Vex, EXx }, 0 },
9e30b8e0 11231 },
53aa04a0 11232 {
592a252b 11233 /* VEX_W_0F382C_P_2_M_0 */
bf890a93 11234 { "vmaskmovps", { XM, Vex, Mx }, 0 },
53aa04a0
L
11235 },
11236 {
592a252b 11237 /* VEX_W_0F382D_P_2_M_0 */
bf890a93 11238 { "vmaskmovpd", { XM, Vex, Mx }, 0 },
53aa04a0
L
11239 },
11240 {
592a252b 11241 /* VEX_W_0F382E_P_2_M_0 */
bf890a93 11242 { "vmaskmovps", { Mx, Vex, XM }, 0 },
53aa04a0
L
11243 },
11244 {
592a252b 11245 /* VEX_W_0F382F_P_2_M_0 */
bf890a93 11246 { "vmaskmovpd", { Mx, Vex, XM }, 0 },
53aa04a0 11247 },
9e30b8e0 11248 {
592a252b 11249 /* VEX_W_0F3830_P_2 */
bf890a93 11250 { "vpmovzxbw", { XM, EXxmmq }, 0 },
9e30b8e0
L
11251 },
11252 {
592a252b 11253 /* VEX_W_0F3831_P_2 */
bf890a93 11254 { "vpmovzxbd", { XM, EXxmmqd }, 0 },
9e30b8e0
L
11255 },
11256 {
592a252b 11257 /* VEX_W_0F3832_P_2 */
bf890a93 11258 { "vpmovzxbq", { XM, EXxmmdw }, 0 },
9e30b8e0
L
11259 },
11260 {
592a252b 11261 /* VEX_W_0F3833_P_2 */
bf890a93 11262 { "vpmovzxwd", { XM, EXxmmq }, 0 },
9e30b8e0
L
11263 },
11264 {
592a252b 11265 /* VEX_W_0F3834_P_2 */
bf890a93 11266 { "vpmovzxwq", { XM, EXxmmqd }, 0 },
9e30b8e0
L
11267 },
11268 {
592a252b 11269 /* VEX_W_0F3835_P_2 */
bf890a93 11270 { "vpmovzxdq", { XM, EXxmmq }, 0 },
6c30d220
L
11271 },
11272 {
11273 /* VEX_W_0F3836_P_2 */
bf890a93 11274 { "vpermd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11275 },
11276 {
592a252b 11277 /* VEX_W_0F3837_P_2 */
bf890a93 11278 { "vpcmpgtq", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11279 },
11280 {
592a252b 11281 /* VEX_W_0F3838_P_2 */
bf890a93 11282 { "vpminsb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11283 },
11284 {
592a252b 11285 /* VEX_W_0F3839_P_2 */
bf890a93 11286 { "vpminsd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11287 },
11288 {
592a252b 11289 /* VEX_W_0F383A_P_2 */
bf890a93 11290 { "vpminuw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11291 },
11292 {
592a252b 11293 /* VEX_W_0F383B_P_2 */
bf890a93 11294 { "vpminud", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11295 },
11296 {
592a252b 11297 /* VEX_W_0F383C_P_2 */
bf890a93 11298 { "vpmaxsb", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11299 },
11300 {
592a252b 11301 /* VEX_W_0F383D_P_2 */
bf890a93 11302 { "vpmaxsd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11303 },
11304 {
592a252b 11305 /* VEX_W_0F383E_P_2 */
bf890a93 11306 { "vpmaxuw", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11307 },
11308 {
592a252b 11309 /* VEX_W_0F383F_P_2 */
bf890a93 11310 { "vpmaxud", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11311 },
11312 {
592a252b 11313 /* VEX_W_0F3840_P_2 */
bf890a93 11314 { "vpmulld", { XM, Vex, EXx }, 0 },
9e30b8e0
L
11315 },
11316 {
592a252b 11317 /* VEX_W_0F3841_P_2 */
bf890a93 11318 { "vphminposuw", { XM, EXx }, 0 },
9e30b8e0 11319 },
6c30d220
L
11320 {
11321 /* VEX_W_0F3846_P_2 */
bf890a93 11322 { "vpsravd", { XM, Vex, EXx }, 0 },
6c30d220
L
11323 },
11324 {
11325 /* VEX_W_0F3858_P_2 */
bf890a93 11326 { "vpbroadcastd", { XM, EXxmm_md }, 0 },
6c30d220
L
11327 },
11328 {
11329 /* VEX_W_0F3859_P_2 */
bf890a93 11330 { "vpbroadcastq", { XM, EXxmm_mq }, 0 },
6c30d220
L
11331 },
11332 {
11333 /* VEX_W_0F385A_P_2_M_0 */
bf890a93 11334 { "vbroadcasti128", { XM, Mxmm }, 0 },
6c30d220
L
11335 },
11336 {
11337 /* VEX_W_0F3878_P_2 */
bf890a93 11338 { "vpbroadcastb", { XM, EXxmm_mb }, 0 },
6c30d220
L
11339 },
11340 {
11341 /* VEX_W_0F3879_P_2 */
bf890a93 11342 { "vpbroadcastw", { XM, EXxmm_mw }, 0 },
6c30d220 11343 },
48521003
IT
11344 {
11345 /* VEX_W_0F38CF_P_2 */
11346 { "vgf2p8mulb", { XM, Vex, EXx }, 0 },
11347 },
9e30b8e0 11348 {
592a252b 11349 /* VEX_W_0F38DB_P_2 */
bf890a93 11350 { "vaesimc", { XM, EXx }, 0 },
9e30b8e0 11351 },
6c30d220
L
11352 {
11353 /* VEX_W_0F3A00_P_2 */
11354 { Bad_Opcode },
bf890a93 11355 { "vpermq", { XM, EXx, Ib }, 0 },
6c30d220
L
11356 },
11357 {
11358 /* VEX_W_0F3A01_P_2 */
11359 { Bad_Opcode },
bf890a93 11360 { "vpermpd", { XM, EXx, Ib }, 0 },
6c30d220
L
11361 },
11362 {
11363 /* VEX_W_0F3A02_P_2 */
bf890a93 11364 { "vpblendd", { XM, Vex, EXx, Ib }, 0 },
6c30d220 11365 },
9e30b8e0 11366 {
592a252b 11367 /* VEX_W_0F3A04_P_2 */
bf890a93 11368 { "vpermilps", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11369 },
11370 {
592a252b 11371 /* VEX_W_0F3A05_P_2 */
bf890a93 11372 { "vpermilpd", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11373 },
11374 {
592a252b 11375 /* VEX_W_0F3A06_P_2 */
bf890a93 11376 { "vperm2f128", { XM, Vex256, EXx, Ib }, 0 },
9e30b8e0
L
11377 },
11378 {
592a252b 11379 /* VEX_W_0F3A08_P_2 */
bf890a93 11380 { "vroundps", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11381 },
11382 {
592a252b 11383 /* VEX_W_0F3A09_P_2 */
bf890a93 11384 { "vroundpd", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11385 },
11386 {
592a252b 11387 /* VEX_W_0F3A0A_P_2 */
bf890a93 11388 { "vroundss", { XMScalar, VexScalar, EXdScalar, Ib }, 0 },
9e30b8e0
L
11389 },
11390 {
592a252b 11391 /* VEX_W_0F3A0B_P_2 */
bf890a93 11392 { "vroundsd", { XMScalar, VexScalar, EXqScalar, Ib }, 0 },
9e30b8e0
L
11393 },
11394 {
592a252b 11395 /* VEX_W_0F3A0C_P_2 */
bf890a93 11396 { "vblendps", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0
L
11397 },
11398 {
592a252b 11399 /* VEX_W_0F3A0D_P_2 */
bf890a93 11400 { "vblendpd", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0
L
11401 },
11402 {
592a252b 11403 /* VEX_W_0F3A0E_P_2 */
bf890a93 11404 { "vpblendw", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0
L
11405 },
11406 {
592a252b 11407 /* VEX_W_0F3A0F_P_2 */
bf890a93 11408 { "vpalignr", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0
L
11409 },
11410 {
592a252b 11411 /* VEX_W_0F3A14_P_2 */
bf890a93 11412 { "vpextrb", { Edqb, XM, Ib }, 0 },
9e30b8e0
L
11413 },
11414 {
592a252b 11415 /* VEX_W_0F3A15_P_2 */
bf890a93 11416 { "vpextrw", { Edqw, XM, Ib }, 0 },
9e30b8e0
L
11417 },
11418 {
592a252b 11419 /* VEX_W_0F3A18_P_2 */
bf890a93 11420 { "vinsertf128", { XM, Vex256, EXxmm, Ib }, 0 },
9e30b8e0
L
11421 },
11422 {
592a252b 11423 /* VEX_W_0F3A19_P_2 */
bf890a93 11424 { "vextractf128", { EXxmm, XM, Ib }, 0 },
9e30b8e0
L
11425 },
11426 {
592a252b 11427 /* VEX_W_0F3A20_P_2 */
bf890a93 11428 { "vpinsrb", { XM, Vex128, Edqb, Ib }, 0 },
9e30b8e0
L
11429 },
11430 {
592a252b 11431 /* VEX_W_0F3A21_P_2 */
bf890a93 11432 { "vinsertps", { XM, Vex128, EXd, Ib }, 0 },
9e30b8e0 11433 },
43234a1e 11434 {
1ba585e8 11435 /* VEX_W_0F3A30_P_2_LEN_0 */
ab4e4ed5
AF
11436 { MOD_TABLE (MOD_VEX_W_0_0F3A30_P_2_LEN_0) },
11437 { MOD_TABLE (MOD_VEX_W_1_0F3A30_P_2_LEN_0) },
43234a1e
L
11438 },
11439 {
1ba585e8 11440 /* VEX_W_0F3A31_P_2_LEN_0 */
ab4e4ed5
AF
11441 { MOD_TABLE (MOD_VEX_W_0_0F3A31_P_2_LEN_0) },
11442 { MOD_TABLE (MOD_VEX_W_1_0F3A31_P_2_LEN_0) },
1ba585e8
IT
11443 },
11444 {
11445 /* VEX_W_0F3A32_P_2_LEN_0 */
ab4e4ed5
AF
11446 { MOD_TABLE (MOD_VEX_W_0_0F3A32_P_2_LEN_0) },
11447 { MOD_TABLE (MOD_VEX_W_1_0F3A32_P_2_LEN_0) },
43234a1e 11448 },
1ba585e8
IT
11449 {
11450 /* VEX_W_0F3A33_P_2_LEN_0 */
ab4e4ed5
AF
11451 { MOD_TABLE (MOD_VEX_W_0_0F3A33_P_2_LEN_0) },
11452 { MOD_TABLE (MOD_VEX_W_1_0F3A33_P_2_LEN_0) },
1ba585e8 11453 },
6c30d220
L
11454 {
11455 /* VEX_W_0F3A38_P_2 */
bf890a93 11456 { "vinserti128", { XM, Vex256, EXxmm, Ib }, 0 },
6c30d220
L
11457 },
11458 {
11459 /* VEX_W_0F3A39_P_2 */
bf890a93 11460 { "vextracti128", { EXxmm, XM, Ib }, 0 },
6c30d220 11461 },
9e30b8e0 11462 {
592a252b 11463 /* VEX_W_0F3A40_P_2 */
bf890a93 11464 { "vdpps", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0
L
11465 },
11466 {
592a252b 11467 /* VEX_W_0F3A41_P_2 */
bf890a93 11468 { "vdppd", { XM, Vex128, EXx, Ib }, 0 },
9e30b8e0
L
11469 },
11470 {
592a252b 11471 /* VEX_W_0F3A42_P_2 */
bf890a93 11472 { "vmpsadbw", { XM, Vex, EXx, Ib }, 0 },
9e30b8e0 11473 },
6c30d220
L
11474 {
11475 /* VEX_W_0F3A46_P_2 */
bf890a93 11476 { "vperm2i128", { XM, Vex256, EXx, Ib }, 0 },
6c30d220 11477 },
a683cc34 11478 {
592a252b 11479 /* VEX_W_0F3A48_P_2 */
bf890a93
IT
11480 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
11481 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
a683cc34
SP
11482 },
11483 {
592a252b 11484 /* VEX_W_0F3A49_P_2 */
bf890a93
IT
11485 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
11486 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
a683cc34 11487 },
9e30b8e0 11488 {
592a252b 11489 /* VEX_W_0F3A4A_P_2 */
bf890a93 11490 { "vblendvps", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0
L
11491 },
11492 {
592a252b 11493 /* VEX_W_0F3A4B_P_2 */
bf890a93 11494 { "vblendvpd", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0
L
11495 },
11496 {
592a252b 11497 /* VEX_W_0F3A4C_P_2 */
bf890a93 11498 { "vpblendvb", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0 11499 },
9e30b8e0 11500 {
592a252b 11501 /* VEX_W_0F3A62_P_2 */
bf890a93 11502 { "vpcmpistrm", { XM, EXx, Ib }, 0 },
9e30b8e0
L
11503 },
11504 {
592a252b 11505 /* VEX_W_0F3A63_P_2 */
bf890a93 11506 { "vpcmpistri", { XM, EXx, Ib }, 0 },
9e30b8e0 11507 },
48521003
IT
11508 {
11509 /* VEX_W_0F3ACE_P_2 */
11510 { Bad_Opcode },
11511 { "vgf2p8affineqb", { XM, Vex, EXx, Ib }, 0 },
11512 },
11513 {
11514 /* VEX_W_0F3ACF_P_2 */
11515 { Bad_Opcode },
11516 { "vgf2p8affineinvqb", { XM, Vex, EXx, Ib }, 0 },
11517 },
9e30b8e0 11518 {
592a252b 11519 /* VEX_W_0F3ADF_P_2 */
bf890a93 11520 { "vaeskeygenassist", { XM, EXx, Ib }, 0 },
9e30b8e0 11521 },
43234a1e
L
11522#define NEED_VEX_W_TABLE
11523#include "i386-dis-evex.h"
11524#undef NEED_VEX_W_TABLE
9e30b8e0
L
11525};
11526
11527static const struct dis386 mod_table[][2] = {
11528 {
11529 /* MOD_8D */
bf890a93 11530 { "leaS", { Gv, M }, 0 },
9e30b8e0 11531 },
42164a71
L
11532 {
11533 /* MOD_C6_REG_7 */
11534 { Bad_Opcode },
11535 { RM_TABLE (RM_C6_REG_7) },
11536 },
11537 {
11538 /* MOD_C7_REG_7 */
11539 { Bad_Opcode },
11540 { RM_TABLE (RM_C7_REG_7) },
11541 },
4a357820
MZ
11542 {
11543 /* MOD_FF_REG_3 */
a72d2af2 11544 { "Jcall^", { indirEp }, 0 },
4a357820
MZ
11545 },
11546 {
11547 /* MOD_FF_REG_5 */
a72d2af2 11548 { "Jjmp^", { indirEp }, 0 },
4a357820 11549 },
9e30b8e0
L
11550 {
11551 /* MOD_0F01_REG_0 */
11552 { X86_64_TABLE (X86_64_0F01_REG_0) },
11553 { RM_TABLE (RM_0F01_REG_0) },
11554 },
11555 {
11556 /* MOD_0F01_REG_1 */
11557 { X86_64_TABLE (X86_64_0F01_REG_1) },
11558 { RM_TABLE (RM_0F01_REG_1) },
11559 },
11560 {
11561 /* MOD_0F01_REG_2 */
11562 { X86_64_TABLE (X86_64_0F01_REG_2) },
11563 { RM_TABLE (RM_0F01_REG_2) },
11564 },
11565 {
11566 /* MOD_0F01_REG_3 */
11567 { X86_64_TABLE (X86_64_0F01_REG_3) },
11568 { RM_TABLE (RM_0F01_REG_3) },
11569 },
8eab4136
L
11570 {
11571 /* MOD_0F01_REG_5 */
603555e5 11572 { PREFIX_TABLE (PREFIX_MOD_0_0F01_REG_5) },
8eab4136
L
11573 { RM_TABLE (RM_0F01_REG_5) },
11574 },
9e30b8e0
L
11575 {
11576 /* MOD_0F01_REG_7 */
bf890a93 11577 { "invlpg", { Mb }, 0 },
9e30b8e0
L
11578 { RM_TABLE (RM_0F01_REG_7) },
11579 },
11580 {
11581 /* MOD_0F12_PREFIX_0 */
507bd325
L
11582 { "movlps", { XM, EXq }, PREFIX_OPCODE },
11583 { "movhlps", { XM, EXq }, PREFIX_OPCODE },
9e30b8e0
L
11584 },
11585 {
11586 /* MOD_0F13 */
507bd325 11587 { "movlpX", { EXq, XM }, PREFIX_OPCODE },
9e30b8e0
L
11588 },
11589 {
11590 /* MOD_0F16_PREFIX_0 */
bf890a93
IT
11591 { "movhps", { XM, EXq }, 0 },
11592 { "movlhps", { XM, EXq }, 0 },
9e30b8e0
L
11593 },
11594 {
11595 /* MOD_0F17 */
507bd325 11596 { "movhpX", { EXq, XM }, PREFIX_OPCODE },
9e30b8e0
L
11597 },
11598 {
11599 /* MOD_0F18_REG_0 */
bf890a93 11600 { "prefetchnta", { Mb }, 0 },
9e30b8e0
L
11601 },
11602 {
11603 /* MOD_0F18_REG_1 */
bf890a93 11604 { "prefetcht0", { Mb }, 0 },
9e30b8e0
L
11605 },
11606 {
11607 /* MOD_0F18_REG_2 */
bf890a93 11608 { "prefetcht1", { Mb }, 0 },
9e30b8e0
L
11609 },
11610 {
11611 /* MOD_0F18_REG_3 */
bf890a93 11612 { "prefetcht2", { Mb }, 0 },
9e30b8e0 11613 },
d7189fa5
RM
11614 {
11615 /* MOD_0F18_REG_4 */
bf890a93 11616 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
11617 },
11618 {
11619 /* MOD_0F18_REG_5 */
bf890a93 11620 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
11621 },
11622 {
11623 /* MOD_0F18_REG_6 */
bf890a93 11624 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
11625 },
11626 {
11627 /* MOD_0F18_REG_7 */
bf890a93 11628 { "nop/reserved", { Mb }, 0 },
d7189fa5 11629 },
7e8b059b
L
11630 {
11631 /* MOD_0F1A_PREFIX_0 */
bf890a93
IT
11632 { "bndldx", { Gbnd, Ev_bnd }, 0 },
11633 { "nopQ", { Ev }, 0 },
7e8b059b
L
11634 },
11635 {
11636 /* MOD_0F1B_PREFIX_0 */
bf890a93
IT
11637 { "bndstx", { Ev_bnd, Gbnd }, 0 },
11638 { "nopQ", { Ev }, 0 },
7e8b059b
L
11639 },
11640 {
11641 /* MOD_0F1B_PREFIX_1 */
bf890a93
IT
11642 { "bndmk", { Gbnd, Ev_bnd }, 0 },
11643 { "nopQ", { Ev }, 0 },
7e8b059b 11644 },
c48935d7
IT
11645 {
11646 /* MOD_0F1C_PREFIX_0 */
11647 { REG_TABLE (REG_0F1C_MOD_0) },
11648 { "nopQ", { Ev }, 0 },
11649 },
603555e5
L
11650 {
11651 /* MOD_0F1E_PREFIX_1 */
11652 { "nopQ", { Ev }, 0 },
11653 { REG_TABLE (REG_0F1E_MOD_3) },
11654 },
b844680a 11655 {
92fddf8e 11656 /* MOD_0F24 */
7bb15c6f 11657 { Bad_Opcode },
bf890a93 11658 { "movL", { Rd, Td }, 0 },
b844680a
L
11659 },
11660 {
92fddf8e 11661 /* MOD_0F26 */
592d1631 11662 { Bad_Opcode },
bf890a93 11663 { "movL", { Td, Rd }, 0 },
b844680a 11664 },
75c135a8
L
11665 {
11666 /* MOD_0F2B_PREFIX_0 */
507bd325 11667 {"movntps", { Mx, XM }, PREFIX_OPCODE },
75c135a8
L
11668 },
11669 {
11670 /* MOD_0F2B_PREFIX_1 */
507bd325 11671 {"movntss", { Md, XM }, PREFIX_OPCODE },
75c135a8
L
11672 },
11673 {
11674 /* MOD_0F2B_PREFIX_2 */
507bd325 11675 {"movntpd", { Mx, XM }, PREFIX_OPCODE },
75c135a8
L
11676 },
11677 {
11678 /* MOD_0F2B_PREFIX_3 */
507bd325 11679 {"movntsd", { Mq, XM }, PREFIX_OPCODE },
75c135a8
L
11680 },
11681 {
11682 /* MOD_0F51 */
592d1631 11683 { Bad_Opcode },
507bd325 11684 { "movmskpX", { Gdq, XS }, PREFIX_OPCODE },
75c135a8 11685 },
b844680a 11686 {
1ceb70f8 11687 /* MOD_0F71_REG_2 */
592d1631 11688 { Bad_Opcode },
bf890a93 11689 { "psrlw", { MS, Ib }, 0 },
b844680a
L
11690 },
11691 {
1ceb70f8 11692 /* MOD_0F71_REG_4 */
592d1631 11693 { Bad_Opcode },
bf890a93 11694 { "psraw", { MS, Ib }, 0 },
b844680a
L
11695 },
11696 {
1ceb70f8 11697 /* MOD_0F71_REG_6 */
592d1631 11698 { Bad_Opcode },
bf890a93 11699 { "psllw", { MS, Ib }, 0 },
b844680a
L
11700 },
11701 {
1ceb70f8 11702 /* MOD_0F72_REG_2 */
592d1631 11703 { Bad_Opcode },
bf890a93 11704 { "psrld", { MS, Ib }, 0 },
b844680a
L
11705 },
11706 {
1ceb70f8 11707 /* MOD_0F72_REG_4 */
592d1631 11708 { Bad_Opcode },
bf890a93 11709 { "psrad", { MS, Ib }, 0 },
b844680a
L
11710 },
11711 {
1ceb70f8 11712 /* MOD_0F72_REG_6 */
592d1631 11713 { Bad_Opcode },
bf890a93 11714 { "pslld", { MS, Ib }, 0 },
b844680a
L
11715 },
11716 {
1ceb70f8 11717 /* MOD_0F73_REG_2 */
592d1631 11718 { Bad_Opcode },
bf890a93 11719 { "psrlq", { MS, Ib }, 0 },
b844680a
L
11720 },
11721 {
1ceb70f8 11722 /* MOD_0F73_REG_3 */
592d1631 11723 { Bad_Opcode },
c0f3af97
L
11724 { PREFIX_TABLE (PREFIX_0F73_REG_3) },
11725 },
11726 {
11727 /* MOD_0F73_REG_6 */
592d1631 11728 { Bad_Opcode },
bf890a93 11729 { "psllq", { MS, Ib }, 0 },
c0f3af97
L
11730 },
11731 {
11732 /* MOD_0F73_REG_7 */
592d1631 11733 { Bad_Opcode },
c0f3af97
L
11734 { PREFIX_TABLE (PREFIX_0F73_REG_7) },
11735 },
11736 {
11737 /* MOD_0FAE_REG_0 */
bf890a93 11738 { "fxsave", { FXSAVE }, 0 },
c7b8aa3a 11739 { PREFIX_TABLE (PREFIX_0FAE_REG_0) },
c0f3af97
L
11740 },
11741 {
11742 /* MOD_0FAE_REG_1 */
bf890a93 11743 { "fxrstor", { FXSAVE }, 0 },
c7b8aa3a 11744 { PREFIX_TABLE (PREFIX_0FAE_REG_1) },
c0f3af97
L
11745 },
11746 {
11747 /* MOD_0FAE_REG_2 */
bf890a93 11748 { "ldmxcsr", { Md }, 0 },
c7b8aa3a 11749 { PREFIX_TABLE (PREFIX_0FAE_REG_2) },
c0f3af97
L
11750 },
11751 {
11752 /* MOD_0FAE_REG_3 */
bf890a93 11753 { "stmxcsr", { Md }, 0 },
c7b8aa3a 11754 { PREFIX_TABLE (PREFIX_0FAE_REG_3) },
c0f3af97
L
11755 },
11756 {
11757 /* MOD_0FAE_REG_4 */
6b40c462
L
11758 { PREFIX_TABLE (PREFIX_MOD_0_0FAE_REG_4) },
11759 { PREFIX_TABLE (PREFIX_MOD_3_0FAE_REG_4) },
c0f3af97
L
11760 },
11761 {
11762 /* MOD_0FAE_REG_5 */
603555e5 11763 { PREFIX_TABLE (PREFIX_MOD_0_0FAE_REG_5) },
2234eee6 11764 { PREFIX_TABLE (PREFIX_MOD_3_0FAE_REG_5) },
c0f3af97
L
11765 },
11766 {
11767 /* MOD_0FAE_REG_6 */
de89d0a3
IT
11768 { PREFIX_TABLE (PREFIX_MOD_0_0FAE_REG_6) },
11769 { PREFIX_TABLE (PREFIX_MOD_1_0FAE_REG_6) },
c0f3af97
L
11770 },
11771 {
11772 /* MOD_0FAE_REG_7 */
963f3586 11773 { PREFIX_TABLE (PREFIX_0FAE_REG_7) },
c0f3af97
L
11774 { RM_TABLE (RM_0FAE_REG_7) },
11775 },
11776 {
11777 /* MOD_0FB2 */
bf890a93 11778 { "lssS", { Gv, Mp }, 0 },
c0f3af97
L
11779 },
11780 {
11781 /* MOD_0FB4 */
bf890a93 11782 { "lfsS", { Gv, Mp }, 0 },
c0f3af97
L
11783 },
11784 {
11785 /* MOD_0FB5 */
bf890a93 11786 { "lgsS", { Gv, Mp }, 0 },
c0f3af97 11787 },
a8484f96
L
11788 {
11789 /* MOD_0FC3 */
11790 { PREFIX_TABLE (PREFIX_MOD_0_0FC3) },
11791 },
963f3586
IT
11792 {
11793 /* MOD_0FC7_REG_3 */
a8484f96 11794 { "xrstors", { FXSAVE }, 0 },
963f3586
IT
11795 },
11796 {
11797 /* MOD_0FC7_REG_4 */
bf890a93 11798 { "xsavec", { FXSAVE }, 0 },
963f3586
IT
11799 },
11800 {
11801 /* MOD_0FC7_REG_5 */
bf890a93 11802 { "xsaves", { FXSAVE }, 0 },
963f3586 11803 },
c0f3af97
L
11804 {
11805 /* MOD_0FC7_REG_6 */
f24bcbaa
L
11806 { PREFIX_TABLE (PREFIX_MOD_0_0FC7_REG_6) },
11807 { PREFIX_TABLE (PREFIX_MOD_3_0FC7_REG_6) }
c0f3af97
L
11808 },
11809 {
11810 /* MOD_0FC7_REG_7 */
bf890a93 11811 { "vmptrst", { Mq }, 0 },
f24bcbaa 11812 { PREFIX_TABLE (PREFIX_MOD_3_0FC7_REG_7) }
c0f3af97
L
11813 },
11814 {
11815 /* MOD_0FD7 */
592d1631 11816 { Bad_Opcode },
bf890a93 11817 { "pmovmskb", { Gdq, MS }, 0 },
c0f3af97
L
11818 },
11819 {
11820 /* MOD_0FE7_PREFIX_2 */
bf890a93 11821 { "movntdq", { Mx, XM }, 0 },
c0f3af97
L
11822 },
11823 {
11824 /* MOD_0FF0_PREFIX_3 */
bf890a93 11825 { "lddqu", { XM, M }, 0 },
c0f3af97
L
11826 },
11827 {
11828 /* MOD_0F382A_PREFIX_2 */
bf890a93 11829 { "movntdqa", { XM, Mx }, 0 },
c0f3af97 11830 },
603555e5
L
11831 {
11832 /* MOD_0F38F5_PREFIX_2 */
11833 { "wrussK", { M, Gdq }, PREFIX_OPCODE },
11834 },
11835 {
11836 /* MOD_0F38F6_PREFIX_0 */
11837 { "wrssK", { M, Gdq }, PREFIX_OPCODE },
11838 },
c0f3af97
L
11839 {
11840 /* MOD_62_32BIT */
bf890a93 11841 { "bound{S|}", { Gv, Ma }, 0 },
43234a1e 11842 { EVEX_TABLE (EVEX_0F) },
c0f3af97
L
11843 },
11844 {
11845 /* MOD_C4_32BIT */
bf890a93 11846 { "lesS", { Gv, Mp }, 0 },
c0f3af97
L
11847 { VEX_C4_TABLE (VEX_0F) },
11848 },
11849 {
11850 /* MOD_C5_32BIT */
bf890a93 11851 { "ldsS", { Gv, Mp }, 0 },
c0f3af97
L
11852 { VEX_C5_TABLE (VEX_0F) },
11853 },
11854 {
592a252b
L
11855 /* MOD_VEX_0F12_PREFIX_0 */
11856 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_0) },
11857 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_1) },
c0f3af97
L
11858 },
11859 {
592a252b
L
11860 /* MOD_VEX_0F13 */
11861 { VEX_LEN_TABLE (VEX_LEN_0F13_M_0) },
c0f3af97
L
11862 },
11863 {
592a252b
L
11864 /* MOD_VEX_0F16_PREFIX_0 */
11865 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_0) },
11866 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_1) },
c0f3af97
L
11867 },
11868 {
592a252b
L
11869 /* MOD_VEX_0F17 */
11870 { VEX_LEN_TABLE (VEX_LEN_0F17_M_0) },
c0f3af97
L
11871 },
11872 {
592a252b
L
11873 /* MOD_VEX_0F2B */
11874 { VEX_W_TABLE (VEX_W_0F2B_M_0) },
c0f3af97 11875 },
ab4e4ed5
AF
11876 {
11877 /* MOD_VEX_W_0_0F41_P_0_LEN_1 */
11878 { Bad_Opcode },
11879 { "kandw", { MaskG, MaskVex, MaskR }, 0 },
11880 },
11881 {
11882 /* MOD_VEX_W_1_0F41_P_0_LEN_1 */
11883 { Bad_Opcode },
11884 { "kandq", { MaskG, MaskVex, MaskR }, 0 },
11885 },
11886 {
11887 /* MOD_VEX_W_0_0F41_P_2_LEN_1 */
11888 { Bad_Opcode },
11889 { "kandb", { MaskG, MaskVex, MaskR }, 0 },
11890 },
11891 {
11892 /* MOD_VEX_W_1_0F41_P_2_LEN_1 */
11893 { Bad_Opcode },
11894 { "kandd", { MaskG, MaskVex, MaskR }, 0 },
11895 },
11896 {
11897 /* MOD_VEX_W_0_0F42_P_0_LEN_1 */
11898 { Bad_Opcode },
11899 { "kandnw", { MaskG, MaskVex, MaskR }, 0 },
11900 },
11901 {
11902 /* MOD_VEX_W_1_0F42_P_0_LEN_1 */
11903 { Bad_Opcode },
11904 { "kandnq", { MaskG, MaskVex, MaskR }, 0 },
11905 },
11906 {
11907 /* MOD_VEX_W_0_0F42_P_2_LEN_1 */
11908 { Bad_Opcode },
11909 { "kandnb", { MaskG, MaskVex, MaskR }, 0 },
11910 },
11911 {
11912 /* MOD_VEX_W_1_0F42_P_2_LEN_1 */
11913 { Bad_Opcode },
11914 { "kandnd", { MaskG, MaskVex, MaskR }, 0 },
11915 },
11916 {
11917 /* MOD_VEX_W_0_0F44_P_0_LEN_0 */
11918 { Bad_Opcode },
11919 { "knotw", { MaskG, MaskR }, 0 },
11920 },
11921 {
11922 /* MOD_VEX_W_1_0F44_P_0_LEN_0 */
11923 { Bad_Opcode },
11924 { "knotq", { MaskG, MaskR }, 0 },
11925 },
11926 {
11927 /* MOD_VEX_W_0_0F44_P_2_LEN_0 */
11928 { Bad_Opcode },
11929 { "knotb", { MaskG, MaskR }, 0 },
11930 },
11931 {
11932 /* MOD_VEX_W_1_0F44_P_2_LEN_0 */
11933 { Bad_Opcode },
11934 { "knotd", { MaskG, MaskR }, 0 },
11935 },
11936 {
11937 /* MOD_VEX_W_0_0F45_P_0_LEN_1 */
11938 { Bad_Opcode },
11939 { "korw", { MaskG, MaskVex, MaskR }, 0 },
11940 },
11941 {
11942 /* MOD_VEX_W_1_0F45_P_0_LEN_1 */
11943 { Bad_Opcode },
11944 { "korq", { MaskG, MaskVex, MaskR }, 0 },
11945 },
11946 {
11947 /* MOD_VEX_W_0_0F45_P_2_LEN_1 */
11948 { Bad_Opcode },
11949 { "korb", { MaskG, MaskVex, MaskR }, 0 },
11950 },
11951 {
11952 /* MOD_VEX_W_1_0F45_P_2_LEN_1 */
11953 { Bad_Opcode },
11954 { "kord", { MaskG, MaskVex, MaskR }, 0 },
11955 },
11956 {
11957 /* MOD_VEX_W_0_0F46_P_0_LEN_1 */
11958 { Bad_Opcode },
11959 { "kxnorw", { MaskG, MaskVex, MaskR }, 0 },
11960 },
11961 {
11962 /* MOD_VEX_W_1_0F46_P_0_LEN_1 */
11963 { Bad_Opcode },
11964 { "kxnorq", { MaskG, MaskVex, MaskR }, 0 },
11965 },
11966 {
11967 /* MOD_VEX_W_0_0F46_P_2_LEN_1 */
11968 { Bad_Opcode },
11969 { "kxnorb", { MaskG, MaskVex, MaskR }, 0 },
11970 },
11971 {
11972 /* MOD_VEX_W_1_0F46_P_2_LEN_1 */
11973 { Bad_Opcode },
11974 { "kxnord", { MaskG, MaskVex, MaskR }, 0 },
11975 },
11976 {
11977 /* MOD_VEX_W_0_0F47_P_0_LEN_1 */
11978 { Bad_Opcode },
11979 { "kxorw", { MaskG, MaskVex, MaskR }, 0 },
11980 },
11981 {
11982 /* MOD_VEX_W_1_0F47_P_0_LEN_1 */
11983 { Bad_Opcode },
11984 { "kxorq", { MaskG, MaskVex, MaskR }, 0 },
11985 },
11986 {
11987 /* MOD_VEX_W_0_0F47_P_2_LEN_1 */
11988 { Bad_Opcode },
11989 { "kxorb", { MaskG, MaskVex, MaskR }, 0 },
11990 },
11991 {
11992 /* MOD_VEX_W_1_0F47_P_2_LEN_1 */
11993 { Bad_Opcode },
11994 { "kxord", { MaskG, MaskVex, MaskR }, 0 },
11995 },
11996 {
11997 /* MOD_VEX_W_0_0F4A_P_0_LEN_1 */
11998 { Bad_Opcode },
11999 { "kaddw", { MaskG, MaskVex, MaskR }, 0 },
12000 },
12001 {
12002 /* MOD_VEX_W_1_0F4A_P_0_LEN_1 */
12003 { Bad_Opcode },
12004 { "kaddq", { MaskG, MaskVex, MaskR }, 0 },
12005 },
12006 {
12007 /* MOD_VEX_W_0_0F4A_P_2_LEN_1 */
12008 { Bad_Opcode },
12009 { "kaddb", { MaskG, MaskVex, MaskR }, 0 },
12010 },
12011 {
12012 /* MOD_VEX_W_1_0F4A_P_2_LEN_1 */
12013 { Bad_Opcode },
12014 { "kaddd", { MaskG, MaskVex, MaskR }, 0 },
12015 },
12016 {
12017 /* MOD_VEX_W_0_0F4B_P_0_LEN_1 */
12018 { Bad_Opcode },
12019 { "kunpckwd", { MaskG, MaskVex, MaskR }, 0 },
12020 },
12021 {
12022 /* MOD_VEX_W_1_0F4B_P_0_LEN_1 */
12023 { Bad_Opcode },
12024 { "kunpckdq", { MaskG, MaskVex, MaskR }, 0 },
12025 },
12026 {
12027 /* MOD_VEX_W_0_0F4B_P_2_LEN_1 */
12028 { Bad_Opcode },
12029 { "kunpckbw", { MaskG, MaskVex, MaskR }, 0 },
12030 },
c0f3af97 12031 {
592a252b 12032 /* MOD_VEX_0F50 */
592d1631 12033 { Bad_Opcode },
592a252b 12034 { VEX_W_TABLE (VEX_W_0F50_M_0) },
c0f3af97
L
12035 },
12036 {
592a252b 12037 /* MOD_VEX_0F71_REG_2 */
592d1631 12038 { Bad_Opcode },
592a252b 12039 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_2) },
b844680a
L
12040 },
12041 {
592a252b 12042 /* MOD_VEX_0F71_REG_4 */
592d1631 12043 { Bad_Opcode },
592a252b 12044 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_4) },
b844680a
L
12045 },
12046 {
592a252b 12047 /* MOD_VEX_0F71_REG_6 */
592d1631 12048 { Bad_Opcode },
592a252b 12049 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_6) },
b844680a
L
12050 },
12051 {
592a252b 12052 /* MOD_VEX_0F72_REG_2 */
592d1631 12053 { Bad_Opcode },
592a252b 12054 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_2) },
b844680a 12055 },
d8faab4e 12056 {
592a252b 12057 /* MOD_VEX_0F72_REG_4 */
592d1631 12058 { Bad_Opcode },
592a252b 12059 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_4) },
d8faab4e
L
12060 },
12061 {
592a252b 12062 /* MOD_VEX_0F72_REG_6 */
592d1631 12063 { Bad_Opcode },
592a252b 12064 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_6) },
d8faab4e 12065 },
876d4bfa 12066 {
592a252b 12067 /* MOD_VEX_0F73_REG_2 */
592d1631 12068 { Bad_Opcode },
592a252b 12069 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_2) },
876d4bfa
L
12070 },
12071 {
592a252b 12072 /* MOD_VEX_0F73_REG_3 */
592d1631 12073 { Bad_Opcode },
592a252b 12074 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_3) },
475a2301
L
12075 },
12076 {
592a252b 12077 /* MOD_VEX_0F73_REG_6 */
592d1631 12078 { Bad_Opcode },
592a252b 12079 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_6) },
876d4bfa
L
12080 },
12081 {
592a252b 12082 /* MOD_VEX_0F73_REG_7 */
592d1631 12083 { Bad_Opcode },
592a252b 12084 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_7) },
876d4bfa 12085 },
ab4e4ed5
AF
12086 {
12087 /* MOD_VEX_W_0_0F91_P_0_LEN_0 */
12088 { "kmovw", { Ew, MaskG }, 0 },
12089 { Bad_Opcode },
12090 },
12091 {
12092 /* MOD_VEX_W_0_0F91_P_0_LEN_0 */
12093 { "kmovq", { Eq, MaskG }, 0 },
12094 { Bad_Opcode },
12095 },
12096 {
12097 /* MOD_VEX_W_0_0F91_P_2_LEN_0 */
12098 { "kmovb", { Eb, MaskG }, 0 },
12099 { Bad_Opcode },
12100 },
12101 {
12102 /* MOD_VEX_W_0_0F91_P_2_LEN_0 */
12103 { "kmovd", { Ed, MaskG }, 0 },
12104 { Bad_Opcode },
12105 },
12106 {
12107 /* MOD_VEX_W_0_0F92_P_0_LEN_0 */
12108 { Bad_Opcode },
12109 { "kmovw", { MaskG, Rdq }, 0 },
12110 },
12111 {
12112 /* MOD_VEX_W_0_0F92_P_2_LEN_0 */
12113 { Bad_Opcode },
12114 { "kmovb", { MaskG, Rdq }, 0 },
12115 },
12116 {
12117 /* MOD_VEX_W_0_0F92_P_3_LEN_0 */
12118 { Bad_Opcode },
12119 { "kmovd", { MaskG, Rdq }, 0 },
12120 },
12121 {
12122 /* MOD_VEX_W_1_0F92_P_3_LEN_0 */
12123 { Bad_Opcode },
12124 { "kmovq", { MaskG, Rdq }, 0 },
12125 },
12126 {
12127 /* MOD_VEX_W_0_0F93_P_0_LEN_0 */
12128 { Bad_Opcode },
12129 { "kmovw", { Gdq, MaskR }, 0 },
12130 },
12131 {
12132 /* MOD_VEX_W_0_0F93_P_2_LEN_0 */
12133 { Bad_Opcode },
12134 { "kmovb", { Gdq, MaskR }, 0 },
12135 },
12136 {
12137 /* MOD_VEX_W_0_0F93_P_3_LEN_0 */
12138 { Bad_Opcode },
12139 { "kmovd", { Gdq, MaskR }, 0 },
12140 },
12141 {
12142 /* MOD_VEX_W_1_0F93_P_3_LEN_0 */
12143 { Bad_Opcode },
12144 { "kmovq", { Gdq, MaskR }, 0 },
12145 },
12146 {
12147 /* MOD_VEX_W_0_0F98_P_0_LEN_0 */
12148 { Bad_Opcode },
12149 { "kortestw", { MaskG, MaskR }, 0 },
12150 },
12151 {
12152 /* MOD_VEX_W_1_0F98_P_0_LEN_0 */
12153 { Bad_Opcode },
12154 { "kortestq", { MaskG, MaskR }, 0 },
12155 },
12156 {
12157 /* MOD_VEX_W_0_0F98_P_2_LEN_0 */
12158 { Bad_Opcode },
12159 { "kortestb", { MaskG, MaskR }, 0 },
12160 },
12161 {
12162 /* MOD_VEX_W_1_0F98_P_2_LEN_0 */
12163 { Bad_Opcode },
12164 { "kortestd", { MaskG, MaskR }, 0 },
12165 },
12166 {
12167 /* MOD_VEX_W_0_0F99_P_0_LEN_0 */
12168 { Bad_Opcode },
12169 { "ktestw", { MaskG, MaskR }, 0 },
12170 },
12171 {
12172 /* MOD_VEX_W_1_0F99_P_0_LEN_0 */
12173 { Bad_Opcode },
12174 { "ktestq", { MaskG, MaskR }, 0 },
12175 },
12176 {
12177 /* MOD_VEX_W_0_0F99_P_2_LEN_0 */
12178 { Bad_Opcode },
12179 { "ktestb", { MaskG, MaskR }, 0 },
12180 },
12181 {
12182 /* MOD_VEX_W_1_0F99_P_2_LEN_0 */
12183 { Bad_Opcode },
12184 { "ktestd", { MaskG, MaskR }, 0 },
12185 },
876d4bfa 12186 {
592a252b
L
12187 /* MOD_VEX_0FAE_REG_2 */
12188 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_2_M_0) },
876d4bfa 12189 },
bbedc832 12190 {
592a252b
L
12191 /* MOD_VEX_0FAE_REG_3 */
12192 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_3_M_0) },
bbedc832 12193 },
144c41d9 12194 {
592a252b 12195 /* MOD_VEX_0FD7_PREFIX_2 */
592d1631 12196 { Bad_Opcode },
6c30d220 12197 { VEX_W_TABLE (VEX_W_0FD7_P_2_M_1) },
144c41d9 12198 },
1afd85e3 12199 {
592a252b
L
12200 /* MOD_VEX_0FE7_PREFIX_2 */
12201 { VEX_W_TABLE (VEX_W_0FE7_P_2_M_0) },
1afd85e3
L
12202 },
12203 {
592a252b
L
12204 /* MOD_VEX_0FF0_PREFIX_3 */
12205 { VEX_W_TABLE (VEX_W_0FF0_P_3_M_0) },
92fddf8e 12206 },
75c135a8 12207 {
592a252b
L
12208 /* MOD_VEX_0F381A_PREFIX_2 */
12209 { VEX_LEN_TABLE (VEX_LEN_0F381A_P_2_M_0) },
75c135a8 12210 },
1afd85e3 12211 {
592a252b 12212 /* MOD_VEX_0F382A_PREFIX_2 */
6c30d220 12213 { VEX_W_TABLE (VEX_W_0F382A_P_2_M_0) },
1afd85e3 12214 },
75c135a8 12215 {
592a252b
L
12216 /* MOD_VEX_0F382C_PREFIX_2 */
12217 { VEX_W_TABLE (VEX_W_0F382C_P_2_M_0) },
75c135a8 12218 },
1afd85e3 12219 {
592a252b
L
12220 /* MOD_VEX_0F382D_PREFIX_2 */
12221 { VEX_W_TABLE (VEX_W_0F382D_P_2_M_0) },
1afd85e3
L
12222 },
12223 {
592a252b
L
12224 /* MOD_VEX_0F382E_PREFIX_2 */
12225 { VEX_W_TABLE (VEX_W_0F382E_P_2_M_0) },
1afd85e3
L
12226 },
12227 {
592a252b
L
12228 /* MOD_VEX_0F382F_PREFIX_2 */
12229 { VEX_W_TABLE (VEX_W_0F382F_P_2_M_0) },
1afd85e3 12230 },
6c30d220
L
12231 {
12232 /* MOD_VEX_0F385A_PREFIX_2 */
12233 { VEX_LEN_TABLE (VEX_LEN_0F385A_P_2_M_0) },
12234 },
12235 {
12236 /* MOD_VEX_0F388C_PREFIX_2 */
bf890a93 12237 { "vpmaskmov%LW", { XM, Vex, Mx }, 0 },
6c30d220
L
12238 },
12239 {
12240 /* MOD_VEX_0F388E_PREFIX_2 */
bf890a93 12241 { "vpmaskmov%LW", { Mx, Vex, XM }, 0 },
6c30d220 12242 },
ab4e4ed5
AF
12243 {
12244 /* MOD_VEX_W_0_0F3A30_P_2_LEN_0 */
12245 { Bad_Opcode },
12246 { "kshiftrb", { MaskG, MaskR, Ib }, 0 },
12247 },
12248 {
12249 /* MOD_VEX_W_1_0F3A30_P_2_LEN_0 */
12250 { Bad_Opcode },
12251 { "kshiftrw", { MaskG, MaskR, Ib }, 0 },
12252 },
12253 {
12254 /* MOD_VEX_W_0_0F3A31_P_2_LEN_0 */
12255 { Bad_Opcode },
12256 { "kshiftrd", { MaskG, MaskR, Ib }, 0 },
12257 },
12258 {
12259 /* MOD_VEX_W_1_0F3A31_P_2_LEN_0 */
12260 { Bad_Opcode },
12261 { "kshiftrq", { MaskG, MaskR, Ib }, 0 },
12262 },
12263 {
12264 /* MOD_VEX_W_0_0F3A32_P_2_LEN_0 */
12265 { Bad_Opcode },
12266 { "kshiftlb", { MaskG, MaskR, Ib }, 0 },
12267 },
12268 {
12269 /* MOD_VEX_W_1_0F3A32_P_2_LEN_0 */
12270 { Bad_Opcode },
12271 { "kshiftlw", { MaskG, MaskR, Ib }, 0 },
12272 },
12273 {
12274 /* MOD_VEX_W_0_0F3A33_P_2_LEN_0 */
12275 { Bad_Opcode },
12276 { "kshiftld", { MaskG, MaskR, Ib }, 0 },
12277 },
12278 {
12279 /* MOD_VEX_W_1_0F3A33_P_2_LEN_0 */
12280 { Bad_Opcode },
12281 { "kshiftlq", { MaskG, MaskR, Ib }, 0 },
12282 },
43234a1e
L
12283#define NEED_MOD_TABLE
12284#include "i386-dis-evex.h"
12285#undef NEED_MOD_TABLE
b844680a
L
12286};
12287
1ceb70f8 12288static const struct dis386 rm_table[][8] = {
42164a71
L
12289 {
12290 /* RM_C6_REG_7 */
bf890a93 12291 { "xabort", { Skip_MODRM, Ib }, 0 },
42164a71
L
12292 },
12293 {
12294 /* RM_C7_REG_7 */
bf890a93 12295 { "xbeginT", { Skip_MODRM, Jv }, 0 },
42164a71 12296 },
b844680a 12297 {
1ceb70f8 12298 /* RM_0F01_REG_0 */
592d1631 12299 { Bad_Opcode },
bf890a93
IT
12300 { "vmcall", { Skip_MODRM }, 0 },
12301 { "vmlaunch", { Skip_MODRM }, 0 },
12302 { "vmresume", { Skip_MODRM }, 0 },
12303 { "vmxoff", { Skip_MODRM }, 0 },
be3a8dca 12304 { "pconfig", { Skip_MODRM }, 0 },
b844680a
L
12305 },
12306 {
1ceb70f8 12307 /* RM_0F01_REG_1 */
bf890a93
IT
12308 { "monitor", { { OP_Monitor, 0 } }, 0 },
12309 { "mwait", { { OP_Mwait, 0 } }, 0 },
12310 { "clac", { Skip_MODRM }, 0 },
12311 { "stac", { Skip_MODRM }, 0 },
2cf200a4
IT
12312 { Bad_Opcode },
12313 { Bad_Opcode },
12314 { Bad_Opcode },
bf890a93 12315 { "encls", { Skip_MODRM }, 0 },
b844680a 12316 },
475a2301
L
12317 {
12318 /* RM_0F01_REG_2 */
bf890a93
IT
12319 { "xgetbv", { Skip_MODRM }, 0 },
12320 { "xsetbv", { Skip_MODRM }, 0 },
8729a6f6
L
12321 { Bad_Opcode },
12322 { Bad_Opcode },
bf890a93
IT
12323 { "vmfunc", { Skip_MODRM }, 0 },
12324 { "xend", { Skip_MODRM }, 0 },
12325 { "xtest", { Skip_MODRM }, 0 },
12326 { "enclu", { Skip_MODRM }, 0 },
475a2301 12327 },
b844680a 12328 {
1ceb70f8 12329 /* RM_0F01_REG_3 */
bf890a93
IT
12330 { "vmrun", { Skip_MODRM }, 0 },
12331 { "vmmcall", { Skip_MODRM }, 0 },
12332 { "vmload", { Skip_MODRM }, 0 },
12333 { "vmsave", { Skip_MODRM }, 0 },
12334 { "stgi", { Skip_MODRM }, 0 },
12335 { "clgi", { Skip_MODRM }, 0 },
12336 { "skinit", { Skip_MODRM }, 0 },
12337 { "invlpga", { Skip_MODRM }, 0 },
4e7d34a6 12338 },
8eab4136
L
12339 {
12340 /* RM_0F01_REG_5 */
2234eee6 12341 { PREFIX_TABLE (PREFIX_MOD_3_0F01_REG_5_RM_0) },
8eab4136 12342 { Bad_Opcode },
603555e5 12343 { PREFIX_TABLE (PREFIX_MOD_3_0F01_REG_5_RM_2) },
8eab4136
L
12344 { Bad_Opcode },
12345 { Bad_Opcode },
12346 { Bad_Opcode },
12347 { "rdpkru", { Skip_MODRM }, 0 },
12348 { "wrpkru", { Skip_MODRM }, 0 },
12349 },
4e7d34a6 12350 {
1ceb70f8 12351 /* RM_0F01_REG_7 */
bf890a93
IT
12352 { "swapgs", { Skip_MODRM }, 0 },
12353 { "rdtscp", { Skip_MODRM }, 0 },
9916071f
AP
12354 { "monitorx", { { OP_Monitor, 0 } }, 0 },
12355 { "mwaitx", { { OP_Mwaitx, 0 } }, 0 },
bf890a93 12356 { "clzero", { Skip_MODRM }, 0 },
b844680a 12357 },
603555e5
L
12358 {
12359 /* RM_0F1E_MOD_3_REG_7 */
12360 { "nopQ", { Ev }, 0 },
12361 { "nopQ", { Ev }, 0 },
12362 { "endbr64", { Skip_MODRM }, PREFIX_OPCODE },
12363 { "endbr32", { Skip_MODRM }, PREFIX_OPCODE },
12364 { "nopQ", { Ev }, 0 },
12365 { "nopQ", { Ev }, 0 },
12366 { "nopQ", { Ev }, 0 },
12367 { "nopQ", { Ev }, 0 },
12368 },
b844680a 12369 {
1ceb70f8 12370 /* RM_0FAE_REG_6 */
bf890a93 12371 { "mfence", { Skip_MODRM }, 0 },
b844680a 12372 },
bbedc832 12373 {
1ceb70f8 12374 /* RM_0FAE_REG_7 */
b5cefcca
L
12375 { "sfence", { Skip_MODRM }, 0 },
12376
144c41d9 12377 },
b844680a
L
12378};
12379
c608c12e
AM
12380#define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")
12381
f16cd0d5
L
12382/* We use the high bit to indicate different name for the same
12383 prefix. */
f16cd0d5 12384#define REP_PREFIX (0xf3 | 0x100)
42164a71
L
12385#define XACQUIRE_PREFIX (0xf2 | 0x200)
12386#define XRELEASE_PREFIX (0xf3 | 0x400)
7e8b059b 12387#define BND_PREFIX (0xf2 | 0x400)
04ef582a 12388#define NOTRACK_PREFIX (0x3e | 0x100)
f16cd0d5
L
12389
12390static int
26ca5450 12391ckprefix (void)
252b5132 12392{
f16cd0d5 12393 int newrex, i, length;
52b15da3 12394 rex = 0;
c0f3af97 12395 rex_ignored = 0;
252b5132 12396 prefixes = 0;
7d421014 12397 used_prefixes = 0;
52b15da3 12398 rex_used = 0;
f16cd0d5
L
12399 last_lock_prefix = -1;
12400 last_repz_prefix = -1;
12401 last_repnz_prefix = -1;
12402 last_data_prefix = -1;
12403 last_addr_prefix = -1;
12404 last_rex_prefix = -1;
12405 last_seg_prefix = -1;
d9949a36 12406 fwait_prefix = -1;
285ca992 12407 active_seg_prefix = 0;
f310f33d
L
12408 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
12409 all_prefixes[i] = 0;
12410 i = 0;
f16cd0d5
L
12411 length = 0;
12412 /* The maximum instruction length is 15bytes. */
12413 while (length < MAX_CODE_LENGTH - 1)
252b5132
RH
12414 {
12415 FETCH_DATA (the_info, codep + 1);
52b15da3 12416 newrex = 0;
252b5132
RH
12417 switch (*codep)
12418 {
52b15da3
JH
12419 /* REX prefixes family. */
12420 case 0x40:
12421 case 0x41:
12422 case 0x42:
12423 case 0x43:
12424 case 0x44:
12425 case 0x45:
12426 case 0x46:
12427 case 0x47:
12428 case 0x48:
12429 case 0x49:
12430 case 0x4a:
12431 case 0x4b:
12432 case 0x4c:
12433 case 0x4d:
12434 case 0x4e:
12435 case 0x4f:
f16cd0d5
L
12436 if (address_mode == mode_64bit)
12437 newrex = *codep;
12438 else
12439 return 1;
12440 last_rex_prefix = i;
52b15da3 12441 break;
252b5132
RH
12442 case 0xf3:
12443 prefixes |= PREFIX_REPZ;
f16cd0d5 12444 last_repz_prefix = i;
252b5132
RH
12445 break;
12446 case 0xf2:
12447 prefixes |= PREFIX_REPNZ;
f16cd0d5 12448 last_repnz_prefix = i;
252b5132
RH
12449 break;
12450 case 0xf0:
12451 prefixes |= PREFIX_LOCK;
f16cd0d5 12452 last_lock_prefix = i;
252b5132
RH
12453 break;
12454 case 0x2e:
12455 prefixes |= PREFIX_CS;
f16cd0d5 12456 last_seg_prefix = i;
285ca992 12457 active_seg_prefix = PREFIX_CS;
252b5132
RH
12458 break;
12459 case 0x36:
12460 prefixes |= PREFIX_SS;
f16cd0d5 12461 last_seg_prefix = i;
285ca992 12462 active_seg_prefix = PREFIX_SS;
252b5132
RH
12463 break;
12464 case 0x3e:
12465 prefixes |= PREFIX_DS;
f16cd0d5 12466 last_seg_prefix = i;
285ca992 12467 active_seg_prefix = PREFIX_DS;
252b5132
RH
12468 break;
12469 case 0x26:
12470 prefixes |= PREFIX_ES;
f16cd0d5 12471 last_seg_prefix = i;
285ca992 12472 active_seg_prefix = PREFIX_ES;
252b5132
RH
12473 break;
12474 case 0x64:
12475 prefixes |= PREFIX_FS;
f16cd0d5 12476 last_seg_prefix = i;
285ca992 12477 active_seg_prefix = PREFIX_FS;
252b5132
RH
12478 break;
12479 case 0x65:
12480 prefixes |= PREFIX_GS;
f16cd0d5 12481 last_seg_prefix = i;
285ca992 12482 active_seg_prefix = PREFIX_GS;
252b5132
RH
12483 break;
12484 case 0x66:
12485 prefixes |= PREFIX_DATA;
f16cd0d5 12486 last_data_prefix = i;
252b5132
RH
12487 break;
12488 case 0x67:
12489 prefixes |= PREFIX_ADDR;
f16cd0d5 12490 last_addr_prefix = i;
252b5132 12491 break;
5076851f 12492 case FWAIT_OPCODE:
252b5132
RH
12493 /* fwait is really an instruction. If there are prefixes
12494 before the fwait, they belong to the fwait, *not* to the
12495 following instruction. */
d9949a36 12496 fwait_prefix = i;
3e7d61b2 12497 if (prefixes || rex)
252b5132
RH
12498 {
12499 prefixes |= PREFIX_FWAIT;
12500 codep++;
6c067bbb
RM
12501 /* This ensures that the previous REX prefixes are noticed
12502 as unused prefixes, as in the return case below. */
12503 rex_used = rex;
f16cd0d5 12504 return 1;
252b5132
RH
12505 }
12506 prefixes = PREFIX_FWAIT;
12507 break;
12508 default:
f16cd0d5 12509 return 1;
252b5132 12510 }
52b15da3
JH
12511 /* Rex is ignored when followed by another prefix. */
12512 if (rex)
12513 {
3e7d61b2 12514 rex_used = rex;
f16cd0d5 12515 return 1;
52b15da3 12516 }
f16cd0d5 12517 if (*codep != FWAIT_OPCODE)
4e9ac44a 12518 all_prefixes[i++] = *codep;
52b15da3 12519 rex = newrex;
252b5132 12520 codep++;
f16cd0d5
L
12521 length++;
12522 }
12523 return 0;
12524}
12525
7d421014
ILT
12526/* Return the name of the prefix byte PREF, or NULL if PREF is not a
12527 prefix byte. */
12528
12529static const char *
26ca5450 12530prefix_name (int pref, int sizeflag)
7d421014 12531{
0003779b
L
12532 static const char *rexes [16] =
12533 {
12534 "rex", /* 0x40 */
12535 "rex.B", /* 0x41 */
12536 "rex.X", /* 0x42 */
12537 "rex.XB", /* 0x43 */
12538 "rex.R", /* 0x44 */
12539 "rex.RB", /* 0x45 */
12540 "rex.RX", /* 0x46 */
12541 "rex.RXB", /* 0x47 */
12542 "rex.W", /* 0x48 */
12543 "rex.WB", /* 0x49 */
12544 "rex.WX", /* 0x4a */
12545 "rex.WXB", /* 0x4b */
12546 "rex.WR", /* 0x4c */
12547 "rex.WRB", /* 0x4d */
12548 "rex.WRX", /* 0x4e */
12549 "rex.WRXB", /* 0x4f */
12550 };
12551
7d421014
ILT
12552 switch (pref)
12553 {
52b15da3
JH
12554 /* REX prefixes family. */
12555 case 0x40:
52b15da3 12556 case 0x41:
52b15da3 12557 case 0x42:
52b15da3 12558 case 0x43:
52b15da3 12559 case 0x44:
52b15da3 12560 case 0x45:
52b15da3 12561 case 0x46:
52b15da3 12562 case 0x47:
52b15da3 12563 case 0x48:
52b15da3 12564 case 0x49:
52b15da3 12565 case 0x4a:
52b15da3 12566 case 0x4b:
52b15da3 12567 case 0x4c:
52b15da3 12568 case 0x4d:
52b15da3 12569 case 0x4e:
52b15da3 12570 case 0x4f:
0003779b 12571 return rexes [pref - 0x40];
7d421014
ILT
12572 case 0xf3:
12573 return "repz";
12574 case 0xf2:
12575 return "repnz";
12576 case 0xf0:
12577 return "lock";
12578 case 0x2e:
12579 return "cs";
12580 case 0x36:
12581 return "ss";
12582 case 0x3e:
12583 return "ds";
12584 case 0x26:
12585 return "es";
12586 case 0x64:
12587 return "fs";
12588 case 0x65:
12589 return "gs";
12590 case 0x66:
12591 return (sizeflag & DFLAG) ? "data16" : "data32";
12592 case 0x67:
cb712a9e 12593 if (address_mode == mode_64bit)
db6eb5be 12594 return (sizeflag & AFLAG) ? "addr32" : "addr64";
c1a64871 12595 else
2888cb7a 12596 return (sizeflag & AFLAG) ? "addr16" : "addr32";
7d421014
ILT
12597 case FWAIT_OPCODE:
12598 return "fwait";
f16cd0d5
L
12599 case REP_PREFIX:
12600 return "rep";
42164a71
L
12601 case XACQUIRE_PREFIX:
12602 return "xacquire";
12603 case XRELEASE_PREFIX:
12604 return "xrelease";
7e8b059b
L
12605 case BND_PREFIX:
12606 return "bnd";
04ef582a
L
12607 case NOTRACK_PREFIX:
12608 return "notrack";
7d421014
ILT
12609 default:
12610 return NULL;
12611 }
12612}
12613
ce518a5f
L
12614static char op_out[MAX_OPERANDS][100];
12615static int op_ad, op_index[MAX_OPERANDS];
1d9f512f 12616static int two_source_ops;
ce518a5f
L
12617static bfd_vma op_address[MAX_OPERANDS];
12618static bfd_vma op_riprel[MAX_OPERANDS];
52b15da3 12619static bfd_vma start_pc;
ce518a5f 12620
252b5132
RH
12621/*
12622 * On the 386's of 1988, the maximum length of an instruction is 15 bytes.
12623 * (see topic "Redundant prefixes" in the "Differences from 8086"
12624 * section of the "Virtual 8086 Mode" chapter.)
12625 * 'pc' should be the address of this instruction, it will
12626 * be used to print the target address if this is a relative jump or call
12627 * The function returns the length of this instruction in bytes.
12628 */
12629
252b5132 12630static char intel_syntax;
9d141669 12631static char intel_mnemonic = !SYSV386_COMPAT;
252b5132
RH
12632static char open_char;
12633static char close_char;
12634static char separator_char;
12635static char scale_char;
12636
5db04b09
L
12637enum x86_64_isa
12638{
12639 amd64 = 0,
12640 intel64
12641};
12642
12643static enum x86_64_isa isa64;
12644
e396998b
AM
12645/* Here for backwards compatibility. When gdb stops using
12646 print_insn_i386_att and print_insn_i386_intel these functions can
12647 disappear, and print_insn_i386 be merged into print_insn. */
252b5132 12648int
26ca5450 12649print_insn_i386_att (bfd_vma pc, disassemble_info *info)
252b5132
RH
12650{
12651 intel_syntax = 0;
e396998b
AM
12652
12653 return print_insn (pc, info);
252b5132
RH
12654}
12655
12656int
26ca5450 12657print_insn_i386_intel (bfd_vma pc, disassemble_info *info)
252b5132
RH
12658{
12659 intel_syntax = 1;
e396998b
AM
12660
12661 return print_insn (pc, info);
252b5132
RH
12662}
12663
e396998b 12664int
26ca5450 12665print_insn_i386 (bfd_vma pc, disassemble_info *info)
e396998b
AM
12666{
12667 intel_syntax = -1;
12668
12669 return print_insn (pc, info);
12670}
12671
f59a29b9
L
12672void
12673print_i386_disassembler_options (FILE *stream)
12674{
12675 fprintf (stream, _("\n\
12676The following i386/x86-64 specific disassembler options are supported for use\n\
12677with the -M switch (multiple options should be separated by commas):\n"));
12678
12679 fprintf (stream, _(" x86-64 Disassemble in 64bit mode\n"));
12680 fprintf (stream, _(" i386 Disassemble in 32bit mode\n"));
12681 fprintf (stream, _(" i8086 Disassemble in 16bit mode\n"));
12682 fprintf (stream, _(" att Display instruction in AT&T syntax\n"));
12683 fprintf (stream, _(" intel Display instruction in Intel syntax\n"));
9d141669
L
12684 fprintf (stream, _(" att-mnemonic\n"
12685 " Display instruction in AT&T mnemonic\n"));
12686 fprintf (stream, _(" intel-mnemonic\n"
12687 " Display instruction in Intel mnemonic\n"));
f59a29b9
L
12688 fprintf (stream, _(" addr64 Assume 64bit address size\n"));
12689 fprintf (stream, _(" addr32 Assume 32bit address size\n"));
12690 fprintf (stream, _(" addr16 Assume 16bit address size\n"));
12691 fprintf (stream, _(" data32 Assume 32bit data size\n"));
12692 fprintf (stream, _(" data16 Assume 16bit data size\n"));
12693 fprintf (stream, _(" suffix Always display instruction suffix in AT&T syntax\n"));
5db04b09
L
12694 fprintf (stream, _(" amd64 Display instruction in AMD64 ISA\n"));
12695 fprintf (stream, _(" intel64 Display instruction in Intel64 ISA\n"));
f59a29b9
L
12696}
12697
592d1631 12698/* Bad opcode. */
bf890a93 12699static const struct dis386 bad_opcode = { "(bad)", { XX }, 0 };
592d1631 12700
b844680a
L
12701/* Get a pointer to struct dis386 with a valid name. */
12702
12703static const struct dis386 *
8bb15339 12704get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
b844680a 12705{
91d6fa6a 12706 int vindex, vex_table_index;
b844680a
L
12707
12708 if (dp->name != NULL)
12709 return dp;
12710
12711 switch (dp->op[0].bytemode)
12712 {
1ceb70f8
L
12713 case USE_REG_TABLE:
12714 dp = &reg_table[dp->op[1].bytemode][modrm.reg];
12715 break;
12716
12717 case USE_MOD_TABLE:
91d6fa6a
NC
12718 vindex = modrm.mod == 0x3 ? 1 : 0;
12719 dp = &mod_table[dp->op[1].bytemode][vindex];
1ceb70f8
L
12720 break;
12721
12722 case USE_RM_TABLE:
12723 dp = &rm_table[dp->op[1].bytemode][modrm.rm];
b844680a
L
12724 break;
12725
4e7d34a6 12726 case USE_PREFIX_TABLE:
c0f3af97 12727 if (need_vex)
b844680a 12728 {
c0f3af97
L
12729 /* The prefix in VEX is implicit. */
12730 switch (vex.prefix)
12731 {
12732 case 0:
91d6fa6a 12733 vindex = 0;
c0f3af97
L
12734 break;
12735 case REPE_PREFIX_OPCODE:
91d6fa6a 12736 vindex = 1;
c0f3af97
L
12737 break;
12738 case DATA_PREFIX_OPCODE:
91d6fa6a 12739 vindex = 2;
c0f3af97
L
12740 break;
12741 case REPNE_PREFIX_OPCODE:
91d6fa6a 12742 vindex = 3;
c0f3af97
L
12743 break;
12744 default:
12745 abort ();
12746 break;
12747 }
b844680a 12748 }
7bb15c6f 12749 else
b844680a 12750 {
285ca992
L
12751 int last_prefix = -1;
12752 int prefix = 0;
91d6fa6a 12753 vindex = 0;
285ca992
L
12754 /* We check PREFIX_REPNZ and PREFIX_REPZ before PREFIX_DATA.
12755 When there are multiple PREFIX_REPNZ and PREFIX_REPZ, the
12756 last one wins. */
12757 if ((prefixes & (PREFIX_REPZ | PREFIX_REPNZ)) != 0)
b844680a 12758 {
285ca992 12759 if (last_repz_prefix > last_repnz_prefix)
c0f3af97 12760 {
285ca992
L
12761 vindex = 1;
12762 prefix = PREFIX_REPZ;
12763 last_prefix = last_repz_prefix;
c0f3af97
L
12764 }
12765 else
b844680a 12766 {
285ca992
L
12767 vindex = 3;
12768 prefix = PREFIX_REPNZ;
12769 last_prefix = last_repnz_prefix;
b844680a 12770 }
285ca992 12771
507bd325
L
12772 /* Check if prefix should be ignored. */
12773 if ((((prefix_table[dp->op[1].bytemode][vindex].prefix_requirement
12774 & PREFIX_IGNORED) >> PREFIX_IGNORED_SHIFT)
12775 & prefix) != 0)
285ca992
L
12776 vindex = 0;
12777 }
12778
12779 if (vindex == 0 && (prefixes & PREFIX_DATA) != 0)
12780 {
12781 vindex = 2;
12782 prefix = PREFIX_DATA;
12783 last_prefix = last_data_prefix;
12784 }
12785
12786 if (vindex != 0)
12787 {
12788 used_prefixes |= prefix;
12789 all_prefixes[last_prefix] = 0;
b844680a
L
12790 }
12791 }
91d6fa6a 12792 dp = &prefix_table[dp->op[1].bytemode][vindex];
b844680a
L
12793 break;
12794
4e7d34a6 12795 case USE_X86_64_TABLE:
91d6fa6a
NC
12796 vindex = address_mode == mode_64bit ? 1 : 0;
12797 dp = &x86_64_table[dp->op[1].bytemode][vindex];
b844680a
L
12798 break;
12799
4e7d34a6 12800 case USE_3BYTE_TABLE:
8bb15339 12801 FETCH_DATA (info, codep + 2);
91d6fa6a
NC
12802 vindex = *codep++;
12803 dp = &three_byte_table[dp->op[1].bytemode][vindex];
285ca992 12804 end_codep = codep;
8bb15339
L
12805 modrm.mod = (*codep >> 6) & 3;
12806 modrm.reg = (*codep >> 3) & 7;
12807 modrm.rm = *codep & 7;
12808 break;
12809
c0f3af97
L
12810 case USE_VEX_LEN_TABLE:
12811 if (!need_vex)
12812 abort ();
12813
12814 switch (vex.length)
12815 {
12816 case 128:
91d6fa6a 12817 vindex = 0;
c0f3af97
L
12818 break;
12819 case 256:
91d6fa6a 12820 vindex = 1;
c0f3af97
L
12821 break;
12822 default:
12823 abort ();
12824 break;
12825 }
12826
91d6fa6a 12827 dp = &vex_len_table[dp->op[1].bytemode][vindex];
c0f3af97
L
12828 break;
12829
f88c9eb0
SP
12830 case USE_XOP_8F_TABLE:
12831 FETCH_DATA (info, codep + 3);
12832 /* All bits in the REX prefix are ignored. */
12833 rex_ignored = rex;
12834 rex = ~(*codep >> 5) & 0x7;
12835
12836 /* VEX_TABLE_INDEX is the mmmmm part of the XOP byte 1 "RCB.mmmmm". */
12837 switch ((*codep & 0x1f))
12838 {
12839 default:
f07af43e
L
12840 dp = &bad_opcode;
12841 return dp;
5dd85c99
SP
12842 case 0x8:
12843 vex_table_index = XOP_08;
12844 break;
f88c9eb0
SP
12845 case 0x9:
12846 vex_table_index = XOP_09;
12847 break;
12848 case 0xa:
12849 vex_table_index = XOP_0A;
12850 break;
12851 }
12852 codep++;
12853 vex.w = *codep & 0x80;
12854 if (vex.w && address_mode == mode_64bit)
12855 rex |= REX_W;
12856
12857 vex.register_specifier = (~(*codep >> 3)) & 0xf;
abfcb414 12858 if (address_mode != mode_64bit)
f07af43e 12859 {
abfcb414
AP
12860 /* In 16/32-bit mode REX_B is silently ignored. */
12861 rex &= ~REX_B;
f07af43e 12862 }
f88c9eb0
SP
12863
12864 vex.length = (*codep & 0x4) ? 256 : 128;
12865 switch ((*codep & 0x3))
12866 {
12867 case 0:
f88c9eb0
SP
12868 break;
12869 case 1:
12870 vex.prefix = DATA_PREFIX_OPCODE;
12871 break;
12872 case 2:
12873 vex.prefix = REPE_PREFIX_OPCODE;
12874 break;
12875 case 3:
12876 vex.prefix = REPNE_PREFIX_OPCODE;
12877 break;
12878 }
12879 need_vex = 1;
12880 need_vex_reg = 1;
12881 codep++;
91d6fa6a
NC
12882 vindex = *codep++;
12883 dp = &xop_table[vex_table_index][vindex];
c48244a5 12884
285ca992 12885 end_codep = codep;
c48244a5
SP
12886 FETCH_DATA (info, codep + 1);
12887 modrm.mod = (*codep >> 6) & 3;
12888 modrm.reg = (*codep >> 3) & 7;
12889 modrm.rm = *codep & 7;
f88c9eb0
SP
12890 break;
12891
c0f3af97 12892 case USE_VEX_C4_TABLE:
43234a1e 12893 /* VEX prefix. */
c0f3af97
L
12894 FETCH_DATA (info, codep + 3);
12895 /* All bits in the REX prefix are ignored. */
12896 rex_ignored = rex;
12897 rex = ~(*codep >> 5) & 0x7;
12898 switch ((*codep & 0x1f))
12899 {
12900 default:
f07af43e
L
12901 dp = &bad_opcode;
12902 return dp;
c0f3af97 12903 case 0x1:
f88c9eb0 12904 vex_table_index = VEX_0F;
c0f3af97
L
12905 break;
12906 case 0x2:
f88c9eb0 12907 vex_table_index = VEX_0F38;
c0f3af97
L
12908 break;
12909 case 0x3:
f88c9eb0 12910 vex_table_index = VEX_0F3A;
c0f3af97
L
12911 break;
12912 }
12913 codep++;
12914 vex.w = *codep & 0x80;
9889cbb1 12915 if (address_mode == mode_64bit)
f07af43e 12916 {
9889cbb1
L
12917 if (vex.w)
12918 rex |= REX_W;
9889cbb1
L
12919 }
12920 else
12921 {
12922 /* For the 3-byte VEX prefix in 32-bit mode, the REX_B bit
12923 is ignored, other REX bits are 0 and the highest bit in
5f847646 12924 VEX.vvvv is also ignored (but we mustn't clear it here). */
9889cbb1 12925 rex = 0;
f07af43e 12926 }
5f847646 12927 vex.register_specifier = (~(*codep >> 3)) & 0xf;
c0f3af97
L
12928 vex.length = (*codep & 0x4) ? 256 : 128;
12929 switch ((*codep & 0x3))
12930 {
12931 case 0:
c0f3af97
L
12932 break;
12933 case 1:
12934 vex.prefix = DATA_PREFIX_OPCODE;
12935 break;
12936 case 2:
12937 vex.prefix = REPE_PREFIX_OPCODE;
12938 break;
12939 case 3:
12940 vex.prefix = REPNE_PREFIX_OPCODE;
12941 break;
12942 }
12943 need_vex = 1;
12944 need_vex_reg = 1;
12945 codep++;
91d6fa6a
NC
12946 vindex = *codep++;
12947 dp = &vex_table[vex_table_index][vindex];
285ca992 12948 end_codep = codep;
53c4d625
JB
12949 /* There is no MODRM byte for VEX0F 77. */
12950 if (vex_table_index != VEX_0F || vindex != 0x77)
c0f3af97
L
12951 {
12952 FETCH_DATA (info, codep + 1);
12953 modrm.mod = (*codep >> 6) & 3;
12954 modrm.reg = (*codep >> 3) & 7;
12955 modrm.rm = *codep & 7;
12956 }
12957 break;
12958
12959 case USE_VEX_C5_TABLE:
43234a1e 12960 /* VEX prefix. */
c0f3af97
L
12961 FETCH_DATA (info, codep + 2);
12962 /* All bits in the REX prefix are ignored. */
12963 rex_ignored = rex;
12964 rex = (*codep & 0x80) ? 0 : REX_R;
12965
9889cbb1
L
12966 /* For the 2-byte VEX prefix in 32-bit mode, the highest bit in
12967 VEX.vvvv is 1. */
c0f3af97 12968 vex.register_specifier = (~(*codep >> 3)) & 0xf;
c0f3af97
L
12969 vex.length = (*codep & 0x4) ? 256 : 128;
12970 switch ((*codep & 0x3))
12971 {
12972 case 0:
c0f3af97
L
12973 break;
12974 case 1:
12975 vex.prefix = DATA_PREFIX_OPCODE;
12976 break;
12977 case 2:
12978 vex.prefix = REPE_PREFIX_OPCODE;
12979 break;
12980 case 3:
12981 vex.prefix = REPNE_PREFIX_OPCODE;
12982 break;
12983 }
12984 need_vex = 1;
12985 need_vex_reg = 1;
12986 codep++;
91d6fa6a
NC
12987 vindex = *codep++;
12988 dp = &vex_table[dp->op[1].bytemode][vindex];
285ca992 12989 end_codep = codep;
53c4d625
JB
12990 /* There is no MODRM byte for VEX 77. */
12991 if (vindex != 0x77)
c0f3af97
L
12992 {
12993 FETCH_DATA (info, codep + 1);
12994 modrm.mod = (*codep >> 6) & 3;
12995 modrm.reg = (*codep >> 3) & 7;
12996 modrm.rm = *codep & 7;
12997 }
12998 break;
12999
9e30b8e0
L
13000 case USE_VEX_W_TABLE:
13001 if (!need_vex)
13002 abort ();
13003
13004 dp = &vex_w_table[dp->op[1].bytemode][vex.w ? 1 : 0];
13005 break;
13006
43234a1e
L
13007 case USE_EVEX_TABLE:
13008 two_source_ops = 0;
13009 /* EVEX prefix. */
13010 vex.evex = 1;
13011 FETCH_DATA (info, codep + 4);
13012 /* All bits in the REX prefix are ignored. */
13013 rex_ignored = rex;
13014 /* The first byte after 0x62. */
13015 rex = ~(*codep >> 5) & 0x7;
13016 vex.r = *codep & 0x10;
13017 switch ((*codep & 0xf))
13018 {
13019 default:
13020 return &bad_opcode;
13021 case 0x1:
13022 vex_table_index = EVEX_0F;
13023 break;
13024 case 0x2:
13025 vex_table_index = EVEX_0F38;
13026 break;
13027 case 0x3:
13028 vex_table_index = EVEX_0F3A;
13029 break;
13030 }
13031
13032 /* The second byte after 0x62. */
13033 codep++;
13034 vex.w = *codep & 0x80;
13035 if (vex.w && address_mode == mode_64bit)
13036 rex |= REX_W;
13037
13038 vex.register_specifier = (~(*codep >> 3)) & 0xf;
43234a1e
L
13039
13040 /* The U bit. */
13041 if (!(*codep & 0x4))
13042 return &bad_opcode;
13043
13044 switch ((*codep & 0x3))
13045 {
13046 case 0:
43234a1e
L
13047 break;
13048 case 1:
13049 vex.prefix = DATA_PREFIX_OPCODE;
13050 break;
13051 case 2:
13052 vex.prefix = REPE_PREFIX_OPCODE;
13053 break;
13054 case 3:
13055 vex.prefix = REPNE_PREFIX_OPCODE;
13056 break;
13057 }
13058
13059 /* The third byte after 0x62. */
13060 codep++;
13061
13062 /* Remember the static rounding bits. */
13063 vex.ll = (*codep >> 5) & 3;
13064 vex.b = (*codep & 0x10) != 0;
13065
13066 vex.v = *codep & 0x8;
13067 vex.mask_register_specifier = *codep & 0x7;
13068 vex.zeroing = *codep & 0x80;
13069
5f847646
JB
13070 if (address_mode != mode_64bit)
13071 {
13072 /* In 16/32-bit mode silently ignore following bits. */
13073 rex &= ~REX_B;
13074 vex.r = 1;
13075 vex.v = 1;
13076 }
13077
43234a1e
L
13078 need_vex = 1;
13079 need_vex_reg = 1;
13080 codep++;
13081 vindex = *codep++;
13082 dp = &evex_table[vex_table_index][vindex];
285ca992 13083 end_codep = codep;
43234a1e
L
13084 FETCH_DATA (info, codep + 1);
13085 modrm.mod = (*codep >> 6) & 3;
13086 modrm.reg = (*codep >> 3) & 7;
13087 modrm.rm = *codep & 7;
13088
13089 /* Set vector length. */
13090 if (modrm.mod == 3 && vex.b)
13091 vex.length = 512;
13092 else
13093 {
13094 switch (vex.ll)
13095 {
13096 case 0x0:
13097 vex.length = 128;
13098 break;
13099 case 0x1:
13100 vex.length = 256;
13101 break;
13102 case 0x2:
13103 vex.length = 512;
13104 break;
13105 default:
13106 return &bad_opcode;
13107 }
13108 }
13109 break;
13110
592d1631
L
13111 case 0:
13112 dp = &bad_opcode;
13113 break;
13114
b844680a 13115 default:
d34b5006 13116 abort ();
b844680a
L
13117 }
13118
13119 if (dp->name != NULL)
13120 return dp;
13121 else
8bb15339 13122 return get_valid_dis386 (dp, info);
b844680a
L
13123}
13124
dfc8cf43 13125static void
55cf16e1 13126get_sib (disassemble_info *info, int sizeflag)
dfc8cf43
L
13127{
13128 /* If modrm.mod == 3, operand must be register. */
13129 if (need_modrm
55cf16e1 13130 && ((sizeflag & AFLAG) || address_mode == mode_64bit)
dfc8cf43
L
13131 && modrm.mod != 3
13132 && modrm.rm == 4)
13133 {
13134 FETCH_DATA (info, codep + 2);
13135 sib.index = (codep [1] >> 3) & 7;
13136 sib.scale = (codep [1] >> 6) & 3;
13137 sib.base = codep [1] & 7;
13138 }
13139}
13140
e396998b 13141static int
26ca5450 13142print_insn (bfd_vma pc, disassemble_info *info)
252b5132 13143{
2da11e11 13144 const struct dis386 *dp;
252b5132 13145 int i;
ce518a5f 13146 char *op_txt[MAX_OPERANDS];
252b5132 13147 int needcomma;
df18fdba 13148 int sizeflag, orig_sizeflag;
e396998b 13149 const char *p;
252b5132 13150 struct dis_private priv;
f16cd0d5 13151 int prefix_length;
252b5132 13152
d7921315
L
13153 priv.orig_sizeflag = AFLAG | DFLAG;
13154 if ((info->mach & bfd_mach_i386_i386) != 0)
cb712a9e 13155 address_mode = mode_32bit;
2da11e11 13156 else if (info->mach == bfd_mach_i386_i8086)
d7921315
L
13157 {
13158 address_mode = mode_16bit;
13159 priv.orig_sizeflag = 0;
13160 }
2da11e11 13161 else
d7921315
L
13162 address_mode = mode_64bit;
13163
13164 if (intel_syntax == (char) -1)
13165 intel_syntax = (info->mach & bfd_mach_i386_intel_syntax) != 0;
e396998b
AM
13166
13167 for (p = info->disassembler_options; p != NULL; )
13168 {
5db04b09
L
13169 if (CONST_STRNEQ (p, "amd64"))
13170 isa64 = amd64;
13171 else if (CONST_STRNEQ (p, "intel64"))
13172 isa64 = intel64;
13173 else if (CONST_STRNEQ (p, "x86-64"))
e396998b 13174 {
cb712a9e 13175 address_mode = mode_64bit;
e396998b
AM
13176 priv.orig_sizeflag = AFLAG | DFLAG;
13177 }
0112cd26 13178 else if (CONST_STRNEQ (p, "i386"))
e396998b 13179 {
cb712a9e 13180 address_mode = mode_32bit;
e396998b
AM
13181 priv.orig_sizeflag = AFLAG | DFLAG;
13182 }
0112cd26 13183 else if (CONST_STRNEQ (p, "i8086"))
e396998b 13184 {
cb712a9e 13185 address_mode = mode_16bit;
e396998b
AM
13186 priv.orig_sizeflag = 0;
13187 }
0112cd26 13188 else if (CONST_STRNEQ (p, "intel"))
e396998b
AM
13189 {
13190 intel_syntax = 1;
9d141669
L
13191 if (CONST_STRNEQ (p + 5, "-mnemonic"))
13192 intel_mnemonic = 1;
e396998b 13193 }
0112cd26 13194 else if (CONST_STRNEQ (p, "att"))
e396998b
AM
13195 {
13196 intel_syntax = 0;
9d141669
L
13197 if (CONST_STRNEQ (p + 3, "-mnemonic"))
13198 intel_mnemonic = 0;
e396998b 13199 }
0112cd26 13200 else if (CONST_STRNEQ (p, "addr"))
e396998b 13201 {
f59a29b9
L
13202 if (address_mode == mode_64bit)
13203 {
13204 if (p[4] == '3' && p[5] == '2')
13205 priv.orig_sizeflag &= ~AFLAG;
13206 else if (p[4] == '6' && p[5] == '4')
13207 priv.orig_sizeflag |= AFLAG;
13208 }
13209 else
13210 {
13211 if (p[4] == '1' && p[5] == '6')
13212 priv.orig_sizeflag &= ~AFLAG;
13213 else if (p[4] == '3' && p[5] == '2')
13214 priv.orig_sizeflag |= AFLAG;
13215 }
e396998b 13216 }
0112cd26 13217 else if (CONST_STRNEQ (p, "data"))
e396998b
AM
13218 {
13219 if (p[4] == '1' && p[5] == '6')
13220 priv.orig_sizeflag &= ~DFLAG;
13221 else if (p[4] == '3' && p[5] == '2')
13222 priv.orig_sizeflag |= DFLAG;
13223 }
0112cd26 13224 else if (CONST_STRNEQ (p, "suffix"))
e396998b
AM
13225 priv.orig_sizeflag |= SUFFIX_ALWAYS;
13226
13227 p = strchr (p, ',');
13228 if (p != NULL)
13229 p++;
13230 }
13231
c0f92bf9
L
13232 if (address_mode == mode_64bit && sizeof (bfd_vma) < 8)
13233 {
13234 (*info->fprintf_func) (info->stream,
13235 _("64-bit address is disabled"));
13236 return -1;
13237 }
13238
e396998b
AM
13239 if (intel_syntax)
13240 {
13241 names64 = intel_names64;
13242 names32 = intel_names32;
13243 names16 = intel_names16;
13244 names8 = intel_names8;
13245 names8rex = intel_names8rex;
13246 names_seg = intel_names_seg;
b9733481 13247 names_mm = intel_names_mm;
7e8b059b 13248 names_bnd = intel_names_bnd;
b9733481
L
13249 names_xmm = intel_names_xmm;
13250 names_ymm = intel_names_ymm;
43234a1e 13251 names_zmm = intel_names_zmm;
db51cc60
L
13252 index64 = intel_index64;
13253 index32 = intel_index32;
43234a1e 13254 names_mask = intel_names_mask;
e396998b
AM
13255 index16 = intel_index16;
13256 open_char = '[';
13257 close_char = ']';
13258 separator_char = '+';
13259 scale_char = '*';
13260 }
13261 else
13262 {
13263 names64 = att_names64;
13264 names32 = att_names32;
13265 names16 = att_names16;
13266 names8 = att_names8;
13267 names8rex = att_names8rex;
13268 names_seg = att_names_seg;
b9733481 13269 names_mm = att_names_mm;
7e8b059b 13270 names_bnd = att_names_bnd;
b9733481
L
13271 names_xmm = att_names_xmm;
13272 names_ymm = att_names_ymm;
43234a1e 13273 names_zmm = att_names_zmm;
db51cc60
L
13274 index64 = att_index64;
13275 index32 = att_index32;
43234a1e 13276 names_mask = att_names_mask;
e396998b
AM
13277 index16 = att_index16;
13278 open_char = '(';
13279 close_char = ')';
13280 separator_char = ',';
13281 scale_char = ',';
13282 }
2da11e11 13283
4fe53c98 13284 /* The output looks better if we put 7 bytes on a line, since that
8a9036a4
L
13285 puts most long word instructions on a single line. Use 8 bytes
13286 for Intel L1OM. */
d7921315 13287 if ((info->mach & bfd_mach_l1om) != 0)
8a9036a4
L
13288 info->bytes_per_line = 8;
13289 else
13290 info->bytes_per_line = 7;
252b5132 13291
26ca5450 13292 info->private_data = &priv;
252b5132
RH
13293 priv.max_fetched = priv.the_buffer;
13294 priv.insn_start = pc;
252b5132
RH
13295
13296 obuf[0] = 0;
ce518a5f
L
13297 for (i = 0; i < MAX_OPERANDS; ++i)
13298 {
13299 op_out[i][0] = 0;
13300 op_index[i] = -1;
13301 }
252b5132
RH
13302
13303 the_info = info;
13304 start_pc = pc;
e396998b
AM
13305 start_codep = priv.the_buffer;
13306 codep = priv.the_buffer;
252b5132 13307
8df14d78 13308 if (OPCODES_SIGSETJMP (priv.bailout) != 0)
5076851f 13309 {
7d421014
ILT
13310 const char *name;
13311
5076851f 13312 /* Getting here means we tried for data but didn't get it. That
e396998b
AM
13313 means we have an incomplete instruction of some sort. Just
13314 print the first byte as a prefix or a .byte pseudo-op. */
13315 if (codep > priv.the_buffer)
5076851f 13316 {
e396998b 13317 name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
7d421014
ILT
13318 if (name != NULL)
13319 (*info->fprintf_func) (info->stream, "%s", name);
13320 else
5076851f 13321 {
7d421014
ILT
13322 /* Just print the first byte as a .byte instruction. */
13323 (*info->fprintf_func) (info->stream, ".byte 0x%x",
e396998b 13324 (unsigned int) priv.the_buffer[0]);
5076851f 13325 }
5076851f 13326
7d421014 13327 return 1;
5076851f
ILT
13328 }
13329
13330 return -1;
13331 }
13332
52b15da3 13333 obufp = obuf;
f16cd0d5
L
13334 sizeflag = priv.orig_sizeflag;
13335
13336 if (!ckprefix () || rex_used)
13337 {
13338 /* Too many prefixes or unused REX prefixes. */
13339 for (i = 0;
f6dd4781 13340 i < (int) ARRAY_SIZE (all_prefixes) && all_prefixes[i];
f16cd0d5 13341 i++)
de882298 13342 (*info->fprintf_func) (info->stream, "%s%s",
6c067bbb 13343 i == 0 ? "" : " ",
f16cd0d5 13344 prefix_name (all_prefixes[i], sizeflag));
de882298 13345 return i;
f16cd0d5 13346 }
252b5132
RH
13347
13348 insn_codep = codep;
13349
13350 FETCH_DATA (info, codep + 1);
13351 two_source_ops = (*codep == 0x62) || (*codep == 0xc8);
13352
3e7d61b2 13353 if (((prefixes & PREFIX_FWAIT)
f16cd0d5 13354 && ((*codep < 0xd8) || (*codep > 0xdf))))
252b5132 13355 {
86a80a50 13356 /* Handle prefixes before fwait. */
d9949a36 13357 for (i = 0; i < fwait_prefix && all_prefixes[i];
86a80a50
L
13358 i++)
13359 (*info->fprintf_func) (info->stream, "%s ",
13360 prefix_name (all_prefixes[i], sizeflag));
f16cd0d5 13361 (*info->fprintf_func) (info->stream, "fwait");
86a80a50 13362 return i + 1;
252b5132
RH
13363 }
13364
252b5132
RH
13365 if (*codep == 0x0f)
13366 {
eec0f4ca 13367 unsigned char threebyte;
5f40e14d
JS
13368
13369 codep++;
13370 FETCH_DATA (info, codep + 1);
13371 threebyte = *codep;
eec0f4ca 13372 dp = &dis386_twobyte[threebyte];
252b5132 13373 need_modrm = twobyte_has_modrm[*codep];
eec0f4ca 13374 codep++;
252b5132
RH
13375 }
13376 else
13377 {
6439fc28 13378 dp = &dis386[*codep];
252b5132 13379 need_modrm = onebyte_has_modrm[*codep];
eec0f4ca 13380 codep++;
252b5132 13381 }
246c51aa 13382
df18fdba
L
13383 /* Save sizeflag for printing the extra prefixes later before updating
13384 it for mnemonic and operand processing. The prefix names depend
13385 only on the address mode. */
13386 orig_sizeflag = sizeflag;
c608c12e 13387 if (prefixes & PREFIX_ADDR)
df18fdba 13388 sizeflag ^= AFLAG;
b844680a 13389 if ((prefixes & PREFIX_DATA))
df18fdba 13390 sizeflag ^= DFLAG;
3ffd33cf 13391
285ca992 13392 end_codep = codep;
8bb15339 13393 if (need_modrm)
252b5132
RH
13394 {
13395 FETCH_DATA (info, codep + 1);
7967e09e
L
13396 modrm.mod = (*codep >> 6) & 3;
13397 modrm.reg = (*codep >> 3) & 7;
13398 modrm.rm = *codep & 7;
252b5132
RH
13399 }
13400
42d5f9c6
MS
13401 need_vex = 0;
13402 need_vex_reg = 0;
13403 vex_w_done = 0;
caf0678c 13404 memset (&vex, 0, sizeof (vex));
55b126d4 13405
ce518a5f 13406 if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE)
252b5132 13407 {
55cf16e1 13408 get_sib (info, sizeflag);
252b5132
RH
13409 dofloat (sizeflag);
13410 }
13411 else
13412 {
8bb15339 13413 dp = get_valid_dis386 (dp, info);
b844680a 13414 if (dp != NULL && putop (dp->name, sizeflag) == 0)
6c067bbb 13415 {
55cf16e1 13416 get_sib (info, sizeflag);
ce518a5f
L
13417 for (i = 0; i < MAX_OPERANDS; ++i)
13418 {
246c51aa 13419 obufp = op_out[i];
ce518a5f
L
13420 op_ad = MAX_OPERANDS - 1 - i;
13421 if (dp->op[i].rtn)
13422 (*dp->op[i].rtn) (dp->op[i].bytemode, sizeflag);
43234a1e
L
13423 /* For EVEX instruction after the last operand masking
13424 should be printed. */
13425 if (i == 0 && vex.evex)
13426 {
13427 /* Don't print {%k0}. */
13428 if (vex.mask_register_specifier)
13429 {
13430 oappend ("{");
13431 oappend (names_mask[vex.mask_register_specifier]);
13432 oappend ("}");
13433 }
13434 if (vex.zeroing)
13435 oappend ("{z}");
13436 }
ce518a5f 13437 }
6439fc28 13438 }
252b5132
RH
13439 }
13440
d869730d 13441 /* Check if the REX prefix is used. */
e2e6193d 13442 if (rex_ignored == 0 && (rex ^ rex_used) == 0 && last_rex_prefix >= 0)
f16cd0d5
L
13443 all_prefixes[last_rex_prefix] = 0;
13444
5e6718e4 13445 /* Check if the SEG prefix is used. */
f16cd0d5
L
13446 if ((prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS | PREFIX_ES
13447 | PREFIX_FS | PREFIX_GS)) != 0
285ca992 13448 && (used_prefixes & active_seg_prefix) != 0)
f16cd0d5
L
13449 all_prefixes[last_seg_prefix] = 0;
13450
5e6718e4 13451 /* Check if the ADDR prefix is used. */
f16cd0d5
L
13452 if ((prefixes & PREFIX_ADDR) != 0
13453 && (used_prefixes & PREFIX_ADDR) != 0)
13454 all_prefixes[last_addr_prefix] = 0;
13455
df18fdba
L
13456 /* Check if the DATA prefix is used. */
13457 if ((prefixes & PREFIX_DATA) != 0
13458 && (used_prefixes & PREFIX_DATA) != 0)
13459 all_prefixes[last_data_prefix] = 0;
f16cd0d5 13460
df18fdba 13461 /* Print the extra prefixes. */
f16cd0d5 13462 prefix_length = 0;
f310f33d 13463 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
f16cd0d5
L
13464 if (all_prefixes[i])
13465 {
13466 const char *name;
df18fdba 13467 name = prefix_name (all_prefixes[i], orig_sizeflag);
f16cd0d5
L
13468 if (name == NULL)
13469 abort ();
13470 prefix_length += strlen (name) + 1;
13471 (*info->fprintf_func) (info->stream, "%s ", name);
13472 }
b844680a 13473
285ca992
L
13474 /* If the mandatory PREFIX_REPZ/PREFIX_REPNZ/PREFIX_DATA prefix is
13475 unused, opcode is invalid. Since the PREFIX_DATA prefix may be
13476 used by putop and MMX/SSE operand and may be overriden by the
13477 PREFIX_REPZ/PREFIX_REPNZ fix, we check the PREFIX_DATA prefix
13478 separately. */
3888916d 13479 if (dp->prefix_requirement == PREFIX_OPCODE
285ca992
L
13480 && dp != &bad_opcode
13481 && (((prefixes
13482 & (PREFIX_REPZ | PREFIX_REPNZ)) != 0
13483 && (used_prefixes
13484 & (PREFIX_REPZ | PREFIX_REPNZ)) == 0)
13485 || ((((prefixes
13486 & (PREFIX_REPZ | PREFIX_REPNZ | PREFIX_DATA))
13487 == PREFIX_DATA)
13488 && (used_prefixes & PREFIX_DATA) == 0))))
13489 {
13490 (*info->fprintf_func) (info->stream, "(bad)");
13491 return end_codep - priv.the_buffer;
13492 }
13493
f16cd0d5
L
13494 /* Check maximum code length. */
13495 if ((codep - start_codep) > MAX_CODE_LENGTH)
13496 {
13497 (*info->fprintf_func) (info->stream, "(bad)");
13498 return MAX_CODE_LENGTH;
13499 }
b844680a 13500
ea397f5b 13501 obufp = mnemonicendp;
f16cd0d5 13502 for (i = strlen (obuf) + prefix_length; i < 6; i++)
252b5132
RH
13503 oappend (" ");
13504 oappend (" ");
13505 (*info->fprintf_func) (info->stream, "%s", obuf);
13506
13507 /* The enter and bound instructions are printed with operands in the same
13508 order as the intel book; everything else is printed in reverse order. */
2da11e11 13509 if (intel_syntax || two_source_ops)
252b5132 13510 {
185b1163
L
13511 bfd_vma riprel;
13512
ce518a5f 13513 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 13514 op_txt[i] = op_out[i];
246c51aa 13515
3a8547d2
JB
13516 if (intel_syntax && dp && dp->op[2].rtn == OP_Rounding
13517 && dp->op[3].rtn == OP_E && dp->op[4].rtn == NULL)
13518 {
13519 op_txt[2] = op_out[3];
13520 op_txt[3] = op_out[2];
13521 }
13522
ce518a5f
L
13523 for (i = 0; i < (MAX_OPERANDS >> 1); ++i)
13524 {
6c067bbb
RM
13525 op_ad = op_index[i];
13526 op_index[i] = op_index[MAX_OPERANDS - 1 - i];
13527 op_index[MAX_OPERANDS - 1 - i] = op_ad;
185b1163
L
13528 riprel = op_riprel[i];
13529 op_riprel[i] = op_riprel [MAX_OPERANDS - 1 - i];
13530 op_riprel[MAX_OPERANDS - 1 - i] = riprel;
ce518a5f 13531 }
252b5132
RH
13532 }
13533 else
13534 {
ce518a5f 13535 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 13536 op_txt[MAX_OPERANDS - 1 - i] = op_out[i];
050dfa73
MM
13537 }
13538
ce518a5f
L
13539 needcomma = 0;
13540 for (i = 0; i < MAX_OPERANDS; ++i)
13541 if (*op_txt[i])
13542 {
13543 if (needcomma)
13544 (*info->fprintf_func) (info->stream, ",");
13545 if (op_index[i] != -1 && !op_riprel[i])
13546 (*info->print_address_func) ((bfd_vma) op_address[op_index[i]], info);
13547 else
13548 (*info->fprintf_func) (info->stream, "%s", op_txt[i]);
13549 needcomma = 1;
13550 }
050dfa73 13551
ce518a5f 13552 for (i = 0; i < MAX_OPERANDS; i++)
52b15da3
JH
13553 if (op_index[i] != -1 && op_riprel[i])
13554 {
13555 (*info->fprintf_func) (info->stream, " # ");
4fd7268a 13556 (*info->print_address_func) ((bfd_vma) (start_pc + (codep - start_codep)
52b15da3 13557 + op_address[op_index[i]]), info);
185b1163 13558 break;
52b15da3 13559 }
e396998b 13560 return codep - priv.the_buffer;
252b5132
RH
13561}
13562
6439fc28 13563static const char *float_mem[] = {
252b5132 13564 /* d8 */
7c52e0e8
L
13565 "fadd{s|}",
13566 "fmul{s|}",
13567 "fcom{s|}",
13568 "fcomp{s|}",
13569 "fsub{s|}",
13570 "fsubr{s|}",
13571 "fdiv{s|}",
13572 "fdivr{s|}",
db6eb5be 13573 /* d9 */
7c52e0e8 13574 "fld{s|}",
252b5132 13575 "(bad)",
7c52e0e8
L
13576 "fst{s|}",
13577 "fstp{s|}",
9306ca4a 13578 "fldenvIC",
252b5132 13579 "fldcw",
9306ca4a 13580 "fNstenvIC",
252b5132
RH
13581 "fNstcw",
13582 /* da */
7c52e0e8
L
13583 "fiadd{l|}",
13584 "fimul{l|}",
13585 "ficom{l|}",
13586 "ficomp{l|}",
13587 "fisub{l|}",
13588 "fisubr{l|}",
13589 "fidiv{l|}",
13590 "fidivr{l|}",
252b5132 13591 /* db */
7c52e0e8
L
13592 "fild{l|}",
13593 "fisttp{l|}",
13594 "fist{l|}",
13595 "fistp{l|}",
252b5132 13596 "(bad)",
6439fc28 13597 "fld{t||t|}",
252b5132 13598 "(bad)",
6439fc28 13599 "fstp{t||t|}",
252b5132 13600 /* dc */
7c52e0e8
L
13601 "fadd{l|}",
13602 "fmul{l|}",
13603 "fcom{l|}",
13604 "fcomp{l|}",
13605 "fsub{l|}",
13606 "fsubr{l|}",
13607 "fdiv{l|}",
13608 "fdivr{l|}",
252b5132 13609 /* dd */
7c52e0e8
L
13610 "fld{l|}",
13611 "fisttp{ll|}",
13612 "fst{l||}",
13613 "fstp{l|}",
9306ca4a 13614 "frstorIC",
252b5132 13615 "(bad)",
9306ca4a 13616 "fNsaveIC",
252b5132
RH
13617 "fNstsw",
13618 /* de */
ac465521
JB
13619 "fiadd{s|}",
13620 "fimul{s|}",
13621 "ficom{s|}",
13622 "ficomp{s|}",
13623 "fisub{s|}",
13624 "fisubr{s|}",
13625 "fidiv{s|}",
13626 "fidivr{s|}",
252b5132 13627 /* df */
ac465521
JB
13628 "fild{s|}",
13629 "fisttp{s|}",
13630 "fist{s|}",
13631 "fistp{s|}",
252b5132 13632 "fbld",
7c52e0e8 13633 "fild{ll|}",
252b5132 13634 "fbstp",
7c52e0e8 13635 "fistp{ll|}",
1d9f512f
AM
13636};
13637
13638static const unsigned char float_mem_mode[] = {
13639 /* d8 */
13640 d_mode,
13641 d_mode,
13642 d_mode,
13643 d_mode,
13644 d_mode,
13645 d_mode,
13646 d_mode,
13647 d_mode,
13648 /* d9 */
13649 d_mode,
13650 0,
13651 d_mode,
13652 d_mode,
13653 0,
13654 w_mode,
13655 0,
13656 w_mode,
13657 /* da */
13658 d_mode,
13659 d_mode,
13660 d_mode,
13661 d_mode,
13662 d_mode,
13663 d_mode,
13664 d_mode,
13665 d_mode,
13666 /* db */
13667 d_mode,
13668 d_mode,
13669 d_mode,
13670 d_mode,
13671 0,
9306ca4a 13672 t_mode,
1d9f512f 13673 0,
9306ca4a 13674 t_mode,
1d9f512f
AM
13675 /* dc */
13676 q_mode,
13677 q_mode,
13678 q_mode,
13679 q_mode,
13680 q_mode,
13681 q_mode,
13682 q_mode,
13683 q_mode,
13684 /* dd */
13685 q_mode,
13686 q_mode,
13687 q_mode,
13688 q_mode,
13689 0,
13690 0,
13691 0,
13692 w_mode,
13693 /* de */
13694 w_mode,
13695 w_mode,
13696 w_mode,
13697 w_mode,
13698 w_mode,
13699 w_mode,
13700 w_mode,
13701 w_mode,
13702 /* df */
13703 w_mode,
13704 w_mode,
13705 w_mode,
13706 w_mode,
9306ca4a 13707 t_mode,
1d9f512f 13708 q_mode,
9306ca4a 13709 t_mode,
1d9f512f 13710 q_mode
252b5132
RH
13711};
13712
ce518a5f
L
13713#define ST { OP_ST, 0 }
13714#define STi { OP_STi, 0 }
252b5132 13715
48c97fa1
L
13716#define FGRPd9_2 NULL, { { NULL, 1 } }, 0
13717#define FGRPd9_4 NULL, { { NULL, 2 } }, 0
13718#define FGRPd9_5 NULL, { { NULL, 3 } }, 0
13719#define FGRPd9_6 NULL, { { NULL, 4 } }, 0
13720#define FGRPd9_7 NULL, { { NULL, 5 } }, 0
13721#define FGRPda_5 NULL, { { NULL, 6 } }, 0
13722#define FGRPdb_4 NULL, { { NULL, 7 } }, 0
13723#define FGRPde_3 NULL, { { NULL, 8 } }, 0
13724#define FGRPdf_4 NULL, { { NULL, 9 } }, 0
252b5132 13725
2da11e11 13726static const struct dis386 float_reg[][8] = {
252b5132
RH
13727 /* d8 */
13728 {
bf890a93
IT
13729 { "fadd", { ST, STi }, 0 },
13730 { "fmul", { ST, STi }, 0 },
13731 { "fcom", { STi }, 0 },
13732 { "fcomp", { STi }, 0 },
13733 { "fsub", { ST, STi }, 0 },
13734 { "fsubr", { ST, STi }, 0 },
13735 { "fdiv", { ST, STi }, 0 },
13736 { "fdivr", { ST, STi }, 0 },
252b5132
RH
13737 },
13738 /* d9 */
13739 {
bf890a93
IT
13740 { "fld", { STi }, 0 },
13741 { "fxch", { STi }, 0 },
252b5132 13742 { FGRPd9_2 },
592d1631 13743 { Bad_Opcode },
252b5132
RH
13744 { FGRPd9_4 },
13745 { FGRPd9_5 },
13746 { FGRPd9_6 },
13747 { FGRPd9_7 },
13748 },
13749 /* da */
13750 {
bf890a93
IT
13751 { "fcmovb", { ST, STi }, 0 },
13752 { "fcmove", { ST, STi }, 0 },
13753 { "fcmovbe",{ ST, STi }, 0 },
13754 { "fcmovu", { ST, STi }, 0 },
592d1631 13755 { Bad_Opcode },
252b5132 13756 { FGRPda_5 },
592d1631
L
13757 { Bad_Opcode },
13758 { Bad_Opcode },
252b5132
RH
13759 },
13760 /* db */
13761 {
bf890a93
IT
13762 { "fcmovnb",{ ST, STi }, 0 },
13763 { "fcmovne",{ ST, STi }, 0 },
13764 { "fcmovnbe",{ ST, STi }, 0 },
13765 { "fcmovnu",{ ST, STi }, 0 },
252b5132 13766 { FGRPdb_4 },
bf890a93
IT
13767 { "fucomi", { ST, STi }, 0 },
13768 { "fcomi", { ST, STi }, 0 },
592d1631 13769 { Bad_Opcode },
252b5132
RH
13770 },
13771 /* dc */
13772 {
bf890a93
IT
13773 { "fadd", { STi, ST }, 0 },
13774 { "fmul", { STi, ST }, 0 },
592d1631
L
13775 { Bad_Opcode },
13776 { Bad_Opcode },
d53e6b98
JB
13777 { "fsub{!M|r}", { STi, ST }, 0 },
13778 { "fsub{M|}", { STi, ST }, 0 },
13779 { "fdiv{!M|r}", { STi, ST }, 0 },
13780 { "fdiv{M|}", { STi, ST }, 0 },
252b5132
RH
13781 },
13782 /* dd */
13783 {
bf890a93 13784 { "ffree", { STi }, 0 },
592d1631 13785 { Bad_Opcode },
bf890a93
IT
13786 { "fst", { STi }, 0 },
13787 { "fstp", { STi }, 0 },
13788 { "fucom", { STi }, 0 },
13789 { "fucomp", { STi }, 0 },
592d1631
L
13790 { Bad_Opcode },
13791 { Bad_Opcode },
252b5132
RH
13792 },
13793 /* de */
13794 {
bf890a93
IT
13795 { "faddp", { STi, ST }, 0 },
13796 { "fmulp", { STi, ST }, 0 },
592d1631 13797 { Bad_Opcode },
252b5132 13798 { FGRPde_3 },
d53e6b98
JB
13799 { "fsub{!M|r}p", { STi, ST }, 0 },
13800 { "fsub{M|}p", { STi, ST }, 0 },
13801 { "fdiv{!M|r}p", { STi, ST }, 0 },
13802 { "fdiv{M|}p", { STi, ST }, 0 },
252b5132
RH
13803 },
13804 /* df */
13805 {
bf890a93 13806 { "ffreep", { STi }, 0 },
592d1631
L
13807 { Bad_Opcode },
13808 { Bad_Opcode },
13809 { Bad_Opcode },
252b5132 13810 { FGRPdf_4 },
bf890a93
IT
13811 { "fucomip", { ST, STi }, 0 },
13812 { "fcomip", { ST, STi }, 0 },
592d1631 13813 { Bad_Opcode },
252b5132
RH
13814 },
13815};
13816
252b5132 13817static char *fgrps[][8] = {
48c97fa1
L
13818 /* Bad opcode 0 */
13819 {
13820 "(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13821 },
13822
13823 /* d9_2 1 */
252b5132
RH
13824 {
13825 "fnop","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13826 },
13827
48c97fa1 13828 /* d9_4 2 */
252b5132
RH
13829 {
13830 "fchs","fabs","(bad)","(bad)","ftst","fxam","(bad)","(bad)",
13831 },
13832
48c97fa1 13833 /* d9_5 3 */
252b5132
RH
13834 {
13835 "fld1","fldl2t","fldl2e","fldpi","fldlg2","fldln2","fldz","(bad)",
13836 },
13837
48c97fa1 13838 /* d9_6 4 */
252b5132
RH
13839 {
13840 "f2xm1","fyl2x","fptan","fpatan","fxtract","fprem1","fdecstp","fincstp",
13841 },
13842
48c97fa1 13843 /* d9_7 5 */
252b5132
RH
13844 {
13845 "fprem","fyl2xp1","fsqrt","fsincos","frndint","fscale","fsin","fcos",
13846 },
13847
48c97fa1 13848 /* da_5 6 */
252b5132
RH
13849 {
13850 "(bad)","fucompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13851 },
13852
48c97fa1 13853 /* db_4 7 */
252b5132 13854 {
309d3373
JB
13855 "fNeni(8087 only)","fNdisi(8087 only)","fNclex","fNinit",
13856 "fNsetpm(287 only)","frstpm(287 only)","(bad)","(bad)",
252b5132
RH
13857 },
13858
48c97fa1 13859 /* de_3 8 */
252b5132
RH
13860 {
13861 "(bad)","fcompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13862 },
13863
48c97fa1 13864 /* df_4 9 */
252b5132
RH
13865 {
13866 "fNstsw","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13867 },
13868};
13869
b6169b20
L
13870static void
13871swap_operand (void)
13872{
13873 mnemonicendp[0] = '.';
13874 mnemonicendp[1] = 's';
13875 mnemonicendp += 2;
13876}
13877
b844680a
L
13878static void
13879OP_Skip_MODRM (int bytemode ATTRIBUTE_UNUSED,
13880 int sizeflag ATTRIBUTE_UNUSED)
13881{
13882 /* Skip mod/rm byte. */
13883 MODRM_CHECK;
13884 codep++;
13885}
13886
252b5132 13887static void
26ca5450 13888dofloat (int sizeflag)
252b5132 13889{
2da11e11 13890 const struct dis386 *dp;
252b5132
RH
13891 unsigned char floatop;
13892
13893 floatop = codep[-1];
13894
7967e09e 13895 if (modrm.mod != 3)
252b5132 13896 {
7967e09e 13897 int fp_indx = (floatop - 0xd8) * 8 + modrm.reg;
1d9f512f
AM
13898
13899 putop (float_mem[fp_indx], sizeflag);
ce518a5f 13900 obufp = op_out[0];
6e50d963 13901 op_ad = 2;
1d9f512f 13902 OP_E (float_mem_mode[fp_indx], sizeflag);
252b5132
RH
13903 return;
13904 }
6608db57 13905 /* Skip mod/rm byte. */
4bba6815 13906 MODRM_CHECK;
252b5132
RH
13907 codep++;
13908
7967e09e 13909 dp = &float_reg[floatop - 0xd8][modrm.reg];
252b5132
RH
13910 if (dp->name == NULL)
13911 {
7967e09e 13912 putop (fgrps[dp->op[0].bytemode][modrm.rm], sizeflag);
252b5132 13913
6608db57 13914 /* Instruction fnstsw is only one with strange arg. */
252b5132 13915 if (floatop == 0xdf && codep[-1] == 0xe0)
ce518a5f 13916 strcpy (op_out[0], names16[0]);
252b5132
RH
13917 }
13918 else
13919 {
13920 putop (dp->name, sizeflag);
13921
ce518a5f 13922 obufp = op_out[0];
6e50d963 13923 op_ad = 2;
ce518a5f
L
13924 if (dp->op[0].rtn)
13925 (*dp->op[0].rtn) (dp->op[0].bytemode, sizeflag);
6e50d963 13926
ce518a5f 13927 obufp = op_out[1];
6e50d963 13928 op_ad = 1;
ce518a5f
L
13929 if (dp->op[1].rtn)
13930 (*dp->op[1].rtn) (dp->op[1].bytemode, sizeflag);
252b5132
RH
13931 }
13932}
13933
9ce09ba2
RM
13934/* Like oappend (below), but S is a string starting with '%'.
13935 In Intel syntax, the '%' is elided. */
13936static void
13937oappend_maybe_intel (const char *s)
13938{
13939 oappend (s + intel_syntax);
13940}
13941
252b5132 13942static void
26ca5450 13943OP_ST (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13944{
9ce09ba2 13945 oappend_maybe_intel ("%st");
252b5132
RH
13946}
13947
252b5132 13948static void
26ca5450 13949OP_STi (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 13950{
7967e09e 13951 sprintf (scratchbuf, "%%st(%d)", modrm.rm);
9ce09ba2 13952 oappend_maybe_intel (scratchbuf);
252b5132
RH
13953}
13954
6608db57 13955/* Capital letters in template are macros. */
6439fc28 13956static int
d3ce72d0 13957putop (const char *in_template, int sizeflag)
252b5132 13958{
2da11e11 13959 const char *p;
9306ca4a 13960 int alt = 0;
9d141669 13961 int cond = 1;
98b528ac
L
13962 unsigned int l = 0, len = 1;
13963 char last[4];
13964
13965#define SAVE_LAST(c) \
13966 if (l < len && l < sizeof (last)) \
13967 last[l++] = c; \
13968 else \
13969 abort ();
252b5132 13970
d3ce72d0 13971 for (p = in_template; *p; p++)
252b5132
RH
13972 {
13973 switch (*p)
13974 {
13975 default:
13976 *obufp++ = *p;
13977 break;
98b528ac
L
13978 case '%':
13979 len++;
13980 break;
9d141669
L
13981 case '!':
13982 cond = 0;
13983 break;
6439fc28 13984 case '{':
6439fc28 13985 if (intel_syntax)
6439fc28
AM
13986 {
13987 while (*++p != '|')
7c52e0e8
L
13988 if (*p == '}' || *p == '\0')
13989 abort ();
6439fc28 13990 }
9306ca4a
JB
13991 /* Fall through. */
13992 case 'I':
13993 alt = 1;
13994 continue;
6439fc28
AM
13995 case '|':
13996 while (*++p != '}')
13997 {
13998 if (*p == '\0')
13999 abort ();
14000 }
14001 break;
14002 case '}':
14003 break;
252b5132 14004 case 'A':
db6eb5be
AM
14005 if (intel_syntax)
14006 break;
7967e09e 14007 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
252b5132
RH
14008 *obufp++ = 'b';
14009 break;
14010 case 'B':
4b06377f
L
14011 if (l == 0 && len == 1)
14012 {
14013case_B:
14014 if (intel_syntax)
14015 break;
14016 if (sizeflag & SUFFIX_ALWAYS)
14017 *obufp++ = 'b';
14018 }
14019 else
14020 {
14021 if (l != 1
14022 || len != 2
14023 || last[0] != 'L')
14024 {
14025 SAVE_LAST (*p);
14026 break;
14027 }
14028
14029 if (address_mode == mode_64bit
14030 && !(prefixes & PREFIX_ADDR))
14031 {
14032 *obufp++ = 'a';
14033 *obufp++ = 'b';
14034 *obufp++ = 's';
14035 }
14036
14037 goto case_B;
14038 }
252b5132 14039 break;
9306ca4a
JB
14040 case 'C':
14041 if (intel_syntax && !alt)
14042 break;
14043 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
14044 {
14045 if (sizeflag & DFLAG)
14046 *obufp++ = intel_syntax ? 'd' : 'l';
14047 else
14048 *obufp++ = intel_syntax ? 'w' : 's';
14049 used_prefixes |= (prefixes & PREFIX_DATA);
14050 }
14051 break;
ed7841b3
JB
14052 case 'D':
14053 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
14054 break;
161a04f6 14055 USED_REX (REX_W);
7967e09e 14056 if (modrm.mod == 3)
ed7841b3 14057 {
161a04f6 14058 if (rex & REX_W)
ed7841b3 14059 *obufp++ = 'q';
ed7841b3 14060 else
f16cd0d5
L
14061 {
14062 if (sizeflag & DFLAG)
14063 *obufp++ = intel_syntax ? 'd' : 'l';
14064 else
14065 *obufp++ = 'w';
14066 used_prefixes |= (prefixes & PREFIX_DATA);
14067 }
ed7841b3
JB
14068 }
14069 else
14070 *obufp++ = 'w';
14071 break;
252b5132 14072 case 'E': /* For jcxz/jecxz */
cb712a9e 14073 if (address_mode == mode_64bit)
c1a64871
JH
14074 {
14075 if (sizeflag & AFLAG)
14076 *obufp++ = 'r';
14077 else
14078 *obufp++ = 'e';
14079 }
14080 else
14081 if (sizeflag & AFLAG)
14082 *obufp++ = 'e';
3ffd33cf
AM
14083 used_prefixes |= (prefixes & PREFIX_ADDR);
14084 break;
14085 case 'F':
db6eb5be
AM
14086 if (intel_syntax)
14087 break;
e396998b 14088 if ((prefixes & PREFIX_ADDR) || (sizeflag & SUFFIX_ALWAYS))
3ffd33cf
AM
14089 {
14090 if (sizeflag & AFLAG)
cb712a9e 14091 *obufp++ = address_mode == mode_64bit ? 'q' : 'l';
3ffd33cf 14092 else
cb712a9e 14093 *obufp++ = address_mode == mode_64bit ? 'l' : 'w';
3ffd33cf
AM
14094 used_prefixes |= (prefixes & PREFIX_ADDR);
14095 }
252b5132 14096 break;
52fd6d94
JB
14097 case 'G':
14098 if (intel_syntax || (obufp[-1] != 's' && !(sizeflag & SUFFIX_ALWAYS)))
14099 break;
161a04f6 14100 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
14101 *obufp++ = 'l';
14102 else
14103 *obufp++ = 'w';
161a04f6 14104 if (!(rex & REX_W))
52fd6d94
JB
14105 used_prefixes |= (prefixes & PREFIX_DATA);
14106 break;
5dd0794d 14107 case 'H':
db6eb5be
AM
14108 if (intel_syntax)
14109 break;
5dd0794d
AM
14110 if ((prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_CS
14111 || (prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_DS)
14112 {
14113 used_prefixes |= prefixes & (PREFIX_CS | PREFIX_DS);
14114 *obufp++ = ',';
14115 *obufp++ = 'p';
14116 if (prefixes & PREFIX_DS)
14117 *obufp++ = 't';
14118 else
14119 *obufp++ = 'n';
14120 }
14121 break;
9306ca4a
JB
14122 case 'J':
14123 if (intel_syntax)
14124 break;
14125 *obufp++ = 'l';
14126 break;
42903f7f
L
14127 case 'K':
14128 USED_REX (REX_W);
14129 if (rex & REX_W)
14130 *obufp++ = 'q';
14131 else
14132 *obufp++ = 'd';
14133 break;
6dd5059a 14134 case 'Z':
04d824a4
JB
14135 if (l != 0 || len != 1)
14136 {
14137 if (l != 1 || len != 2 || last[0] != 'X')
14138 {
14139 SAVE_LAST (*p);
14140 break;
14141 }
14142 if (!need_vex || !vex.evex)
14143 abort ();
14144 if (intel_syntax
14145 || ((modrm.mod == 3 || vex.b) && !(sizeflag & SUFFIX_ALWAYS)))
14146 break;
14147 switch (vex.length)
14148 {
14149 case 128:
14150 *obufp++ = 'x';
14151 break;
14152 case 256:
14153 *obufp++ = 'y';
14154 break;
14155 case 512:
14156 *obufp++ = 'z';
14157 break;
14158 default:
14159 abort ();
14160 }
14161 break;
14162 }
6dd5059a
L
14163 if (intel_syntax)
14164 break;
14165 if (address_mode == mode_64bit && (sizeflag & SUFFIX_ALWAYS))
14166 {
14167 *obufp++ = 'q';
14168 break;
14169 }
14170 /* Fall through. */
98b528ac 14171 goto case_L;
252b5132 14172 case 'L':
98b528ac
L
14173 if (l != 0 || len != 1)
14174 {
14175 SAVE_LAST (*p);
14176 break;
14177 }
14178case_L:
db6eb5be
AM
14179 if (intel_syntax)
14180 break;
252b5132
RH
14181 if (sizeflag & SUFFIX_ALWAYS)
14182 *obufp++ = 'l';
252b5132 14183 break;
9d141669
L
14184 case 'M':
14185 if (intel_mnemonic != cond)
14186 *obufp++ = 'r';
14187 break;
252b5132
RH
14188 case 'N':
14189 if ((prefixes & PREFIX_FWAIT) == 0)
14190 *obufp++ = 'n';
7d421014
ILT
14191 else
14192 used_prefixes |= PREFIX_FWAIT;
252b5132 14193 break;
52b15da3 14194 case 'O':
161a04f6
L
14195 USED_REX (REX_W);
14196 if (rex & REX_W)
6439fc28 14197 *obufp++ = 'o';
a35ca55a
JB
14198 else if (intel_syntax && (sizeflag & DFLAG))
14199 *obufp++ = 'q';
52b15da3
JH
14200 else
14201 *obufp++ = 'd';
161a04f6 14202 if (!(rex & REX_W))
a35ca55a 14203 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 14204 break;
07f5af7d
L
14205 case '&':
14206 if (!intel_syntax
14207 && address_mode == mode_64bit
14208 && isa64 == intel64)
14209 {
14210 *obufp++ = 'q';
14211 break;
14212 }
14213 /* Fall through. */
6439fc28 14214 case 'T':
d9e3625e
L
14215 if (!intel_syntax
14216 && address_mode == mode_64bit
7bb15c6f 14217 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
14218 {
14219 *obufp++ = 'q';
14220 break;
14221 }
6608db57 14222 /* Fall through. */
4b4c407a 14223 goto case_P;
252b5132 14224 case 'P':
4b4c407a 14225 if (l == 0 && len == 1)
d9e3625e 14226 {
4b4c407a
L
14227case_P:
14228 if (intel_syntax)
d9e3625e 14229 {
4b4c407a
L
14230 if ((rex & REX_W) == 0
14231 && (prefixes & PREFIX_DATA))
14232 {
14233 if ((sizeflag & DFLAG) == 0)
14234 *obufp++ = 'w';
14235 used_prefixes |= (prefixes & PREFIX_DATA);
14236 }
14237 break;
14238 }
14239 if ((prefixes & PREFIX_DATA)
14240 || (rex & REX_W)
14241 || (sizeflag & SUFFIX_ALWAYS))
14242 {
14243 USED_REX (REX_W);
14244 if (rex & REX_W)
14245 *obufp++ = 'q';
14246 else
14247 {
14248 if (sizeflag & DFLAG)
14249 *obufp++ = 'l';
14250 else
14251 *obufp++ = 'w';
14252 used_prefixes |= (prefixes & PREFIX_DATA);
14253 }
d9e3625e 14254 }
d9e3625e 14255 }
4b4c407a 14256 else
252b5132 14257 {
4b4c407a
L
14258 if (l != 1 || len != 2 || last[0] != 'L')
14259 {
14260 SAVE_LAST (*p);
14261 break;
14262 }
14263
14264 if ((prefixes & PREFIX_DATA)
14265 || (rex & REX_W)
14266 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 14267 {
4b4c407a
L
14268 USED_REX (REX_W);
14269 if (rex & REX_W)
14270 *obufp++ = 'q';
14271 else
14272 {
14273 if (sizeflag & DFLAG)
14274 *obufp++ = intel_syntax ? 'd' : 'l';
14275 else
14276 *obufp++ = 'w';
14277 used_prefixes |= (prefixes & PREFIX_DATA);
14278 }
52b15da3 14279 }
252b5132
RH
14280 }
14281 break;
6439fc28 14282 case 'U':
db6eb5be
AM
14283 if (intel_syntax)
14284 break;
7bb15c6f 14285 if (address_mode == mode_64bit
6c067bbb 14286 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28 14287 {
7967e09e 14288 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
1a114b12 14289 *obufp++ = 'q';
6439fc28
AM
14290 break;
14291 }
6608db57 14292 /* Fall through. */
98b528ac 14293 goto case_Q;
252b5132 14294 case 'Q':
98b528ac 14295 if (l == 0 && len == 1)
252b5132 14296 {
98b528ac
L
14297case_Q:
14298 if (intel_syntax && !alt)
14299 break;
14300 USED_REX (REX_W);
14301 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 14302 {
98b528ac
L
14303 if (rex & REX_W)
14304 *obufp++ = 'q';
52b15da3 14305 else
98b528ac
L
14306 {
14307 if (sizeflag & DFLAG)
14308 *obufp++ = intel_syntax ? 'd' : 'l';
14309 else
14310 *obufp++ = 'w';
f16cd0d5 14311 used_prefixes |= (prefixes & PREFIX_DATA);
98b528ac 14312 }
52b15da3 14313 }
98b528ac
L
14314 }
14315 else
14316 {
14317 if (l != 1 || len != 2 || last[0] != 'L')
14318 {
14319 SAVE_LAST (*p);
14320 break;
14321 }
14322 if (intel_syntax
14323 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
14324 break;
14325 if ((rex & REX_W))
14326 {
14327 USED_REX (REX_W);
14328 *obufp++ = 'q';
14329 }
14330 else
14331 *obufp++ = 'l';
252b5132
RH
14332 }
14333 break;
14334 case 'R':
161a04f6
L
14335 USED_REX (REX_W);
14336 if (rex & REX_W)
a35ca55a
JB
14337 *obufp++ = 'q';
14338 else if (sizeflag & DFLAG)
c608c12e 14339 {
a35ca55a 14340 if (intel_syntax)
c608c12e 14341 *obufp++ = 'd';
c608c12e 14342 else
a35ca55a 14343 *obufp++ = 'l';
c608c12e 14344 }
252b5132 14345 else
a35ca55a
JB
14346 *obufp++ = 'w';
14347 if (intel_syntax && !p[1]
161a04f6 14348 && ((rex & REX_W) || (sizeflag & DFLAG)))
a35ca55a 14349 *obufp++ = 'e';
161a04f6 14350 if (!(rex & REX_W))
52b15da3 14351 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132 14352 break;
1a114b12 14353 case 'V':
4b06377f 14354 if (l == 0 && len == 1)
1a114b12 14355 {
4b06377f
L
14356 if (intel_syntax)
14357 break;
7bb15c6f 14358 if (address_mode == mode_64bit
6c067bbb 14359 && ((sizeflag & DFLAG) || (rex & REX_W)))
4b06377f
L
14360 {
14361 if (sizeflag & SUFFIX_ALWAYS)
14362 *obufp++ = 'q';
14363 break;
14364 }
14365 }
14366 else
14367 {
14368 if (l != 1
14369 || len != 2
14370 || last[0] != 'L')
14371 {
14372 SAVE_LAST (*p);
14373 break;
14374 }
14375
14376 if (rex & REX_W)
14377 {
14378 *obufp++ = 'a';
14379 *obufp++ = 'b';
14380 *obufp++ = 's';
14381 }
1a114b12
JB
14382 }
14383 /* Fall through. */
4b06377f 14384 goto case_S;
252b5132 14385 case 'S':
4b06377f 14386 if (l == 0 && len == 1)
252b5132 14387 {
4b06377f
L
14388case_S:
14389 if (intel_syntax)
14390 break;
14391 if (sizeflag & SUFFIX_ALWAYS)
52b15da3 14392 {
4b06377f
L
14393 if (rex & REX_W)
14394 *obufp++ = 'q';
52b15da3 14395 else
4b06377f
L
14396 {
14397 if (sizeflag & DFLAG)
14398 *obufp++ = 'l';
14399 else
14400 *obufp++ = 'w';
14401 used_prefixes |= (prefixes & PREFIX_DATA);
14402 }
14403 }
14404 }
14405 else
14406 {
14407 if (l != 1
14408 || len != 2
14409 || last[0] != 'L')
14410 {
14411 SAVE_LAST (*p);
14412 break;
52b15da3 14413 }
4b06377f
L
14414
14415 if (address_mode == mode_64bit
14416 && !(prefixes & PREFIX_ADDR))
14417 {
14418 *obufp++ = 'a';
14419 *obufp++ = 'b';
14420 *obufp++ = 's';
14421 }
14422
14423 goto case_S;
252b5132 14424 }
252b5132 14425 break;
041bd2e0 14426 case 'X':
c0f3af97
L
14427 if (l != 0 || len != 1)
14428 {
14429 SAVE_LAST (*p);
14430 break;
14431 }
14432 if (need_vex && vex.prefix)
14433 {
14434 if (vex.prefix == DATA_PREFIX_OPCODE)
14435 *obufp++ = 'd';
14436 else
14437 *obufp++ = 's';
14438 }
041bd2e0 14439 else
f16cd0d5
L
14440 {
14441 if (prefixes & PREFIX_DATA)
14442 *obufp++ = 'd';
14443 else
14444 *obufp++ = 's';
14445 used_prefixes |= (prefixes & PREFIX_DATA);
14446 }
041bd2e0 14447 break;
76f227a5 14448 case 'Y':
c0f3af97 14449 if (l == 0 && len == 1)
9646c87b 14450 abort ();
c0f3af97
L
14451 else
14452 {
14453 if (l != 1 || len != 2 || last[0] != 'X')
14454 {
14455 SAVE_LAST (*p);
14456 break;
14457 }
14458 if (!need_vex)
14459 abort ();
14460 if (intel_syntax
04d824a4 14461 || ((modrm.mod == 3 || vex.b) && !(sizeflag & SUFFIX_ALWAYS)))
c0f3af97
L
14462 break;
14463 switch (vex.length)
14464 {
14465 case 128:
14466 *obufp++ = 'x';
14467 break;
14468 case 256:
14469 *obufp++ = 'y';
14470 break;
04d824a4
JB
14471 case 512:
14472 if (!vex.evex)
c0f3af97 14473 default:
04d824a4 14474 abort ();
c0f3af97 14475 }
76f227a5
JH
14476 }
14477 break;
252b5132 14478 case 'W':
0bfee649 14479 if (l == 0 && len == 1)
a35ca55a 14480 {
0bfee649
L
14481 /* operand size flag for cwtl, cbtw */
14482 USED_REX (REX_W);
14483 if (rex & REX_W)
14484 {
14485 if (intel_syntax)
14486 *obufp++ = 'd';
14487 else
14488 *obufp++ = 'l';
14489 }
14490 else if (sizeflag & DFLAG)
14491 *obufp++ = 'w';
a35ca55a 14492 else
0bfee649
L
14493 *obufp++ = 'b';
14494 if (!(rex & REX_W))
14495 used_prefixes |= (prefixes & PREFIX_DATA);
a35ca55a 14496 }
252b5132 14497 else
0bfee649 14498 {
6c30d220
L
14499 if (l != 1
14500 || len != 2
14501 || (last[0] != 'X'
14502 && last[0] != 'L'))
0bfee649
L
14503 {
14504 SAVE_LAST (*p);
14505 break;
14506 }
14507 if (!need_vex)
14508 abort ();
6c30d220
L
14509 if (last[0] == 'X')
14510 *obufp++ = vex.w ? 'd': 's';
14511 else
14512 *obufp++ = vex.w ? 'q': 'd';
0bfee649 14513 }
252b5132 14514 break;
a72d2af2
L
14515 case '^':
14516 if (intel_syntax)
14517 break;
14518 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
14519 {
14520 if (sizeflag & DFLAG)
14521 *obufp++ = 'l';
14522 else
14523 *obufp++ = 'w';
14524 used_prefixes |= (prefixes & PREFIX_DATA);
14525 }
14526 break;
5db04b09
L
14527 case '@':
14528 if (intel_syntax)
14529 break;
14530 if (address_mode == mode_64bit
14531 && (isa64 == intel64
14532 || ((sizeflag & DFLAG) || (rex & REX_W))))
14533 *obufp++ = 'q';
14534 else if ((prefixes & PREFIX_DATA))
14535 {
14536 if (!(sizeflag & DFLAG))
14537 *obufp++ = 'w';
14538 used_prefixes |= (prefixes & PREFIX_DATA);
14539 }
14540 break;
252b5132 14541 }
9306ca4a 14542 alt = 0;
252b5132
RH
14543 }
14544 *obufp = 0;
ea397f5b 14545 mnemonicendp = obufp;
6439fc28 14546 return 0;
252b5132
RH
14547}
14548
14549static void
26ca5450 14550oappend (const char *s)
252b5132 14551{
ea397f5b 14552 obufp = stpcpy (obufp, s);
252b5132
RH
14553}
14554
14555static void
26ca5450 14556append_seg (void)
252b5132 14557{
285ca992
L
14558 /* Only print the active segment register. */
14559 if (!active_seg_prefix)
14560 return;
14561
14562 used_prefixes |= active_seg_prefix;
14563 switch (active_seg_prefix)
7d421014 14564 {
285ca992 14565 case PREFIX_CS:
9ce09ba2 14566 oappend_maybe_intel ("%cs:");
285ca992
L
14567 break;
14568 case PREFIX_DS:
9ce09ba2 14569 oappend_maybe_intel ("%ds:");
285ca992
L
14570 break;
14571 case PREFIX_SS:
9ce09ba2 14572 oappend_maybe_intel ("%ss:");
285ca992
L
14573 break;
14574 case PREFIX_ES:
9ce09ba2 14575 oappend_maybe_intel ("%es:");
285ca992
L
14576 break;
14577 case PREFIX_FS:
9ce09ba2 14578 oappend_maybe_intel ("%fs:");
285ca992
L
14579 break;
14580 case PREFIX_GS:
9ce09ba2 14581 oappend_maybe_intel ("%gs:");
285ca992
L
14582 break;
14583 default:
14584 break;
7d421014 14585 }
252b5132
RH
14586}
14587
14588static void
26ca5450 14589OP_indirE (int bytemode, int sizeflag)
252b5132
RH
14590{
14591 if (!intel_syntax)
14592 oappend ("*");
14593 OP_E (bytemode, sizeflag);
14594}
14595
52b15da3 14596static void
26ca5450 14597print_operand_value (char *buf, int hex, bfd_vma disp)
52b15da3 14598{
cb712a9e 14599 if (address_mode == mode_64bit)
52b15da3
JH
14600 {
14601 if (hex)
14602 {
14603 char tmp[30];
14604 int i;
14605 buf[0] = '0';
14606 buf[1] = 'x';
14607 sprintf_vma (tmp, disp);
6608db57 14608 for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++);
52b15da3
JH
14609 strcpy (buf + 2, tmp + i);
14610 }
14611 else
14612 {
14613 bfd_signed_vma v = disp;
14614 char tmp[30];
14615 int i;
14616 if (v < 0)
14617 {
14618 *(buf++) = '-';
14619 v = -disp;
6608db57 14620 /* Check for possible overflow on 0x8000000000000000. */
52b15da3
JH
14621 if (v < 0)
14622 {
14623 strcpy (buf, "9223372036854775808");
14624 return;
14625 }
14626 }
14627 if (!v)
14628 {
14629 strcpy (buf, "0");
14630 return;
14631 }
14632
14633 i = 0;
14634 tmp[29] = 0;
14635 while (v)
14636 {
6608db57 14637 tmp[28 - i] = (v % 10) + '0';
52b15da3
JH
14638 v /= 10;
14639 i++;
14640 }
14641 strcpy (buf, tmp + 29 - i);
14642 }
14643 }
14644 else
14645 {
14646 if (hex)
14647 sprintf (buf, "0x%x", (unsigned int) disp);
14648 else
14649 sprintf (buf, "%d", (int) disp);
14650 }
14651}
14652
5d669648
L
14653/* Put DISP in BUF as signed hex number. */
14654
14655static void
14656print_displacement (char *buf, bfd_vma disp)
14657{
14658 bfd_signed_vma val = disp;
14659 char tmp[30];
14660 int i, j = 0;
14661
14662 if (val < 0)
14663 {
14664 buf[j++] = '-';
14665 val = -disp;
14666
14667 /* Check for possible overflow. */
14668 if (val < 0)
14669 {
14670 switch (address_mode)
14671 {
14672 case mode_64bit:
14673 strcpy (buf + j, "0x8000000000000000");
14674 break;
14675 case mode_32bit:
14676 strcpy (buf + j, "0x80000000");
14677 break;
14678 case mode_16bit:
14679 strcpy (buf + j, "0x8000");
14680 break;
14681 }
14682 return;
14683 }
14684 }
14685
14686 buf[j++] = '0';
14687 buf[j++] = 'x';
14688
0af1713e 14689 sprintf_vma (tmp, (bfd_vma) val);
5d669648
L
14690 for (i = 0; tmp[i] == '0'; i++)
14691 continue;
14692 if (tmp[i] == '\0')
14693 i--;
14694 strcpy (buf + j, tmp + i);
14695}
14696
3f31e633
JB
14697static void
14698intel_operand_size (int bytemode, int sizeflag)
14699{
43234a1e
L
14700 if (vex.evex
14701 && vex.b
14702 && (bytemode == x_mode
14703 || bytemode == evex_half_bcst_xmmq_mode))
14704 {
14705 if (vex.w)
14706 oappend ("QWORD PTR ");
14707 else
14708 oappend ("DWORD PTR ");
14709 return;
14710 }
3f31e633
JB
14711 switch (bytemode)
14712 {
14713 case b_mode:
b6169b20 14714 case b_swap_mode:
42903f7f 14715 case dqb_mode:
1ba585e8 14716 case db_mode:
3f31e633
JB
14717 oappend ("BYTE PTR ");
14718 break;
14719 case w_mode:
1ba585e8 14720 case dw_mode:
3f31e633
JB
14721 case dqw_mode:
14722 oappend ("WORD PTR ");
14723 break;
07f5af7d
L
14724 case indir_v_mode:
14725 if (address_mode == mode_64bit && isa64 == intel64)
14726 {
14727 oappend ("QWORD PTR ");
14728 break;
14729 }
1a0670f3 14730 /* Fall through. */
1a114b12 14731 case stack_v_mode:
7bb15c6f 14732 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
3f31e633
JB
14733 {
14734 oappend ("QWORD PTR ");
3f31e633
JB
14735 break;
14736 }
1a0670f3 14737 /* Fall through. */
3f31e633 14738 case v_mode:
b6169b20 14739 case v_swap_mode:
3f31e633 14740 case dq_mode:
161a04f6
L
14741 USED_REX (REX_W);
14742 if (rex & REX_W)
3f31e633 14743 oappend ("QWORD PTR ");
3f31e633 14744 else
f16cd0d5
L
14745 {
14746 if ((sizeflag & DFLAG) || bytemode == dq_mode)
14747 oappend ("DWORD PTR ");
14748 else
14749 oappend ("WORD PTR ");
14750 used_prefixes |= (prefixes & PREFIX_DATA);
14751 }
3f31e633 14752 break;
52fd6d94 14753 case z_mode:
161a04f6 14754 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
14755 *obufp++ = 'D';
14756 oappend ("WORD PTR ");
161a04f6 14757 if (!(rex & REX_W))
52fd6d94
JB
14758 used_prefixes |= (prefixes & PREFIX_DATA);
14759 break;
34b772a6
JB
14760 case a_mode:
14761 if (sizeflag & DFLAG)
14762 oappend ("QWORD PTR ");
14763 else
14764 oappend ("DWORD PTR ");
14765 used_prefixes |= (prefixes & PREFIX_DATA);
14766 break;
3f31e633 14767 case d_mode:
539f890d
L
14768 case d_scalar_mode:
14769 case d_scalar_swap_mode:
fa99fab2 14770 case d_swap_mode:
42903f7f 14771 case dqd_mode:
3f31e633
JB
14772 oappend ("DWORD PTR ");
14773 break;
14774 case q_mode:
539f890d
L
14775 case q_scalar_mode:
14776 case q_scalar_swap_mode:
b6169b20 14777 case q_swap_mode:
3f31e633
JB
14778 oappend ("QWORD PTR ");
14779 break;
14780 case m_mode:
cb712a9e 14781 if (address_mode == mode_64bit)
3f31e633
JB
14782 oappend ("QWORD PTR ");
14783 else
14784 oappend ("DWORD PTR ");
14785 break;
14786 case f_mode:
14787 if (sizeflag & DFLAG)
14788 oappend ("FWORD PTR ");
14789 else
14790 oappend ("DWORD PTR ");
14791 used_prefixes |= (prefixes & PREFIX_DATA);
14792 break;
14793 case t_mode:
14794 oappend ("TBYTE PTR ");
14795 break;
14796 case x_mode:
b6169b20 14797 case x_swap_mode:
43234a1e
L
14798 case evex_x_gscat_mode:
14799 case evex_x_nobcst_mode:
53467f57
IT
14800 case b_scalar_mode:
14801 case w_scalar_mode:
c0f3af97
L
14802 if (need_vex)
14803 {
14804 switch (vex.length)
14805 {
14806 case 128:
14807 oappend ("XMMWORD PTR ");
14808 break;
14809 case 256:
14810 oappend ("YMMWORD PTR ");
14811 break;
43234a1e
L
14812 case 512:
14813 oappend ("ZMMWORD PTR ");
14814 break;
c0f3af97
L
14815 default:
14816 abort ();
14817 }
14818 }
14819 else
14820 oappend ("XMMWORD PTR ");
14821 break;
14822 case xmm_mode:
3f31e633
JB
14823 oappend ("XMMWORD PTR ");
14824 break;
43234a1e
L
14825 case ymm_mode:
14826 oappend ("YMMWORD PTR ");
14827 break;
c0f3af97 14828 case xmmq_mode:
43234a1e 14829 case evex_half_bcst_xmmq_mode:
c0f3af97
L
14830 if (!need_vex)
14831 abort ();
14832
14833 switch (vex.length)
14834 {
14835 case 128:
14836 oappend ("QWORD PTR ");
14837 break;
14838 case 256:
14839 oappend ("XMMWORD PTR ");
14840 break;
43234a1e
L
14841 case 512:
14842 oappend ("YMMWORD PTR ");
14843 break;
c0f3af97
L
14844 default:
14845 abort ();
14846 }
14847 break;
6c30d220
L
14848 case xmm_mb_mode:
14849 if (!need_vex)
14850 abort ();
14851
14852 switch (vex.length)
14853 {
14854 case 128:
14855 case 256:
43234a1e 14856 case 512:
6c30d220
L
14857 oappend ("BYTE PTR ");
14858 break;
14859 default:
14860 abort ();
14861 }
14862 break;
14863 case xmm_mw_mode:
14864 if (!need_vex)
14865 abort ();
14866
14867 switch (vex.length)
14868 {
14869 case 128:
14870 case 256:
43234a1e 14871 case 512:
6c30d220
L
14872 oappend ("WORD PTR ");
14873 break;
14874 default:
14875 abort ();
14876 }
14877 break;
14878 case xmm_md_mode:
14879 if (!need_vex)
14880 abort ();
14881
14882 switch (vex.length)
14883 {
14884 case 128:
14885 case 256:
43234a1e 14886 case 512:
6c30d220
L
14887 oappend ("DWORD PTR ");
14888 break;
14889 default:
14890 abort ();
14891 }
14892 break;
14893 case xmm_mq_mode:
14894 if (!need_vex)
14895 abort ();
14896
14897 switch (vex.length)
14898 {
14899 case 128:
14900 case 256:
43234a1e 14901 case 512:
6c30d220
L
14902 oappend ("QWORD PTR ");
14903 break;
14904 default:
14905 abort ();
14906 }
14907 break;
14908 case xmmdw_mode:
14909 if (!need_vex)
14910 abort ();
14911
14912 switch (vex.length)
14913 {
14914 case 128:
14915 oappend ("WORD PTR ");
14916 break;
14917 case 256:
14918 oappend ("DWORD PTR ");
14919 break;
43234a1e
L
14920 case 512:
14921 oappend ("QWORD PTR ");
14922 break;
6c30d220
L
14923 default:
14924 abort ();
14925 }
14926 break;
14927 case xmmqd_mode:
14928 if (!need_vex)
14929 abort ();
14930
14931 switch (vex.length)
14932 {
14933 case 128:
14934 oappend ("DWORD PTR ");
14935 break;
14936 case 256:
14937 oappend ("QWORD PTR ");
14938 break;
43234a1e
L
14939 case 512:
14940 oappend ("XMMWORD PTR ");
14941 break;
6c30d220
L
14942 default:
14943 abort ();
14944 }
14945 break;
c0f3af97
L
14946 case ymmq_mode:
14947 if (!need_vex)
14948 abort ();
14949
14950 switch (vex.length)
14951 {
14952 case 128:
14953 oappend ("QWORD PTR ");
14954 break;
14955 case 256:
14956 oappend ("YMMWORD PTR ");
14957 break;
43234a1e
L
14958 case 512:
14959 oappend ("ZMMWORD PTR ");
14960 break;
c0f3af97
L
14961 default:
14962 abort ();
14963 }
14964 break;
6c30d220
L
14965 case ymmxmm_mode:
14966 if (!need_vex)
14967 abort ();
14968
14969 switch (vex.length)
14970 {
14971 case 128:
14972 case 256:
14973 oappend ("XMMWORD PTR ");
14974 break;
14975 default:
14976 abort ();
14977 }
14978 break;
fb9c77c7
L
14979 case o_mode:
14980 oappend ("OWORD PTR ");
14981 break;
43234a1e 14982 case xmm_mdq_mode:
0bfee649 14983 case vex_w_dq_mode:
1c480963 14984 case vex_scalar_w_dq_mode:
0bfee649
L
14985 if (!need_vex)
14986 abort ();
14987
14988 if (vex.w)
14989 oappend ("QWORD PTR ");
14990 else
14991 oappend ("DWORD PTR ");
14992 break;
43234a1e
L
14993 case vex_vsib_d_w_dq_mode:
14994 case vex_vsib_q_w_dq_mode:
14995 if (!need_vex)
14996 abort ();
14997
14998 if (!vex.evex)
14999 {
15000 if (vex.w)
15001 oappend ("QWORD PTR ");
15002 else
15003 oappend ("DWORD PTR ");
15004 }
15005 else
15006 {
b28d1bda
IT
15007 switch (vex.length)
15008 {
15009 case 128:
15010 oappend ("XMMWORD PTR ");
15011 break;
15012 case 256:
15013 oappend ("YMMWORD PTR ");
15014 break;
15015 case 512:
15016 oappend ("ZMMWORD PTR ");
15017 break;
15018 default:
15019 abort ();
15020 }
43234a1e
L
15021 }
15022 break;
5fc35d96
IT
15023 case vex_vsib_q_w_d_mode:
15024 case vex_vsib_d_w_d_mode:
b28d1bda 15025 if (!need_vex || !vex.evex)
5fc35d96
IT
15026 abort ();
15027
b28d1bda
IT
15028 switch (vex.length)
15029 {
15030 case 128:
15031 oappend ("QWORD PTR ");
15032 break;
15033 case 256:
15034 oappend ("XMMWORD PTR ");
15035 break;
15036 case 512:
15037 oappend ("YMMWORD PTR ");
15038 break;
15039 default:
15040 abort ();
15041 }
5fc35d96
IT
15042
15043 break;
1ba585e8
IT
15044 case mask_bd_mode:
15045 if (!need_vex || vex.length != 128)
15046 abort ();
15047 if (vex.w)
15048 oappend ("DWORD PTR ");
15049 else
15050 oappend ("BYTE PTR ");
15051 break;
43234a1e
L
15052 case mask_mode:
15053 if (!need_vex)
15054 abort ();
1ba585e8
IT
15055 if (vex.w)
15056 oappend ("QWORD PTR ");
15057 else
15058 oappend ("WORD PTR ");
43234a1e 15059 break;
6c75cc62 15060 case v_bnd_mode:
3f31e633
JB
15061 default:
15062 break;
15063 }
15064}
15065
252b5132 15066static void
c0f3af97 15067OP_E_register (int bytemode, int sizeflag)
252b5132 15068{
c0f3af97
L
15069 int reg = modrm.rm;
15070 const char **names;
252b5132 15071
c0f3af97
L
15072 USED_REX (REX_B);
15073 if ((rex & REX_B))
15074 reg += 8;
252b5132 15075
b6169b20 15076 if ((sizeflag & SUFFIX_ALWAYS)
1ba585e8 15077 && (bytemode == b_swap_mode
9f79e886 15078 || bytemode == bnd_swap_mode
60227d64 15079 || bytemode == v_swap_mode))
b6169b20
L
15080 swap_operand ();
15081
c0f3af97 15082 switch (bytemode)
252b5132 15083 {
c0f3af97 15084 case b_mode:
b6169b20 15085 case b_swap_mode:
c0f3af97
L
15086 USED_REX (0);
15087 if (rex)
15088 names = names8rex;
15089 else
15090 names = names8;
15091 break;
15092 case w_mode:
15093 names = names16;
15094 break;
15095 case d_mode:
1ba585e8
IT
15096 case dw_mode:
15097 case db_mode:
c0f3af97
L
15098 names = names32;
15099 break;
15100 case q_mode:
15101 names = names64;
15102 break;
15103 case m_mode:
6c75cc62 15104 case v_bnd_mode:
c0f3af97
L
15105 names = address_mode == mode_64bit ? names64 : names32;
15106 break;
7e8b059b 15107 case bnd_mode:
9f79e886 15108 case bnd_swap_mode:
0d96e4df
L
15109 if (reg > 0x3)
15110 {
15111 oappend ("(bad)");
15112 return;
15113 }
7e8b059b
L
15114 names = names_bnd;
15115 break;
07f5af7d
L
15116 case indir_v_mode:
15117 if (address_mode == mode_64bit && isa64 == intel64)
15118 {
15119 names = names64;
15120 break;
15121 }
1a0670f3 15122 /* Fall through. */
c0f3af97 15123 case stack_v_mode:
7bb15c6f 15124 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
252b5132 15125 {
c0f3af97 15126 names = names64;
252b5132 15127 break;
252b5132 15128 }
c0f3af97 15129 bytemode = v_mode;
1a0670f3 15130 /* Fall through. */
c0f3af97 15131 case v_mode:
b6169b20 15132 case v_swap_mode:
c0f3af97
L
15133 case dq_mode:
15134 case dqb_mode:
15135 case dqd_mode:
15136 case dqw_mode:
15137 USED_REX (REX_W);
15138 if (rex & REX_W)
15139 names = names64;
c0f3af97 15140 else
f16cd0d5 15141 {
7bb15c6f 15142 if ((sizeflag & DFLAG)
f16cd0d5
L
15143 || (bytemode != v_mode
15144 && bytemode != v_swap_mode))
15145 names = names32;
15146 else
15147 names = names16;
15148 used_prefixes |= (prefixes & PREFIX_DATA);
15149 }
c0f3af97 15150 break;
de89d0a3
IT
15151 case va_mode:
15152 names = (address_mode == mode_64bit
15153 ? names64 : names32);
15154 if (!(prefixes & PREFIX_ADDR))
15155 names = (address_mode == mode_16bit
15156 ? names16 : names);
15157 else
15158 {
15159 /* Remove "addr16/addr32". */
15160 all_prefixes[last_addr_prefix] = 0;
15161 names = (address_mode != mode_32bit
15162 ? names32 : names16);
15163 used_prefixes |= PREFIX_ADDR;
15164 }
15165 break;
1ba585e8 15166 case mask_bd_mode:
43234a1e 15167 case mask_mode:
9889cbb1
L
15168 if (reg > 0x7)
15169 {
15170 oappend ("(bad)");
15171 return;
15172 }
43234a1e
L
15173 names = names_mask;
15174 break;
c0f3af97
L
15175 case 0:
15176 return;
15177 default:
15178 oappend (INTERNAL_DISASSEMBLER_ERROR);
252b5132
RH
15179 return;
15180 }
c0f3af97
L
15181 oappend (names[reg]);
15182}
15183
15184static void
c1e679ec 15185OP_E_memory (int bytemode, int sizeflag)
c0f3af97
L
15186{
15187 bfd_vma disp = 0;
15188 int add = (rex & REX_B) ? 8 : 0;
15189 int riprel = 0;
43234a1e
L
15190 int shift;
15191
15192 if (vex.evex)
15193 {
15194 /* In EVEX, if operand doesn't allow broadcast, vex.b should be 0. */
15195 if (vex.b
15196 && bytemode != x_mode
90a915bf 15197 && bytemode != xmmq_mode
43234a1e
L
15198 && bytemode != evex_half_bcst_xmmq_mode)
15199 {
15200 BadOp ();
15201 return;
15202 }
15203 switch (bytemode)
15204 {
1ba585e8
IT
15205 case dqw_mode:
15206 case dw_mode:
1ba585e8
IT
15207 shift = 1;
15208 break;
15209 case dqb_mode:
15210 case db_mode:
15211 shift = 0;
15212 break;
43234a1e 15213 case vex_vsib_d_w_dq_mode:
5fc35d96 15214 case vex_vsib_d_w_d_mode:
eaa9d1ad 15215 case vex_vsib_q_w_dq_mode:
5fc35d96 15216 case vex_vsib_q_w_d_mode:
43234a1e
L
15217 case evex_x_gscat_mode:
15218 case xmm_mdq_mode:
15219 shift = vex.w ? 3 : 2;
15220 break;
43234a1e
L
15221 case x_mode:
15222 case evex_half_bcst_xmmq_mode:
90a915bf 15223 case xmmq_mode:
43234a1e
L
15224 if (vex.b)
15225 {
15226 shift = vex.w ? 3 : 2;
15227 break;
15228 }
1a0670f3 15229 /* Fall through. */
43234a1e
L
15230 case xmmqd_mode:
15231 case xmmdw_mode:
43234a1e
L
15232 case ymmq_mode:
15233 case evex_x_nobcst_mode:
15234 case x_swap_mode:
15235 switch (vex.length)
15236 {
15237 case 128:
15238 shift = 4;
15239 break;
15240 case 256:
15241 shift = 5;
15242 break;
15243 case 512:
15244 shift = 6;
15245 break;
15246 default:
15247 abort ();
15248 }
15249 break;
15250 case ymm_mode:
15251 shift = 5;
15252 break;
15253 case xmm_mode:
15254 shift = 4;
15255 break;
15256 case xmm_mq_mode:
15257 case q_mode:
15258 case q_scalar_mode:
15259 case q_swap_mode:
15260 case q_scalar_swap_mode:
15261 shift = 3;
15262 break;
15263 case dqd_mode:
15264 case xmm_md_mode:
15265 case d_mode:
15266 case d_scalar_mode:
15267 case d_swap_mode:
15268 case d_scalar_swap_mode:
15269 shift = 2;
15270 break;
53467f57 15271 case w_scalar_mode:
43234a1e
L
15272 case xmm_mw_mode:
15273 shift = 1;
15274 break;
53467f57 15275 case b_scalar_mode:
43234a1e
L
15276 case xmm_mb_mode:
15277 shift = 0;
15278 break;
15279 default:
15280 abort ();
15281 }
15282 /* Make necessary corrections to shift for modes that need it.
15283 For these modes we currently have shift 4, 5 or 6 depending on
15284 vex.length (it corresponds to xmmword, ymmword or zmmword
15285 operand). We might want to make it 3, 4 or 5 (e.g. for
15286 xmmq_mode). In case of broadcast enabled the corrections
15287 aren't needed, as element size is always 32 or 64 bits. */
90a915bf
IT
15288 if (!vex.b
15289 && (bytemode == xmmq_mode
15290 || bytemode == evex_half_bcst_xmmq_mode))
43234a1e
L
15291 shift -= 1;
15292 else if (bytemode == xmmqd_mode)
15293 shift -= 2;
15294 else if (bytemode == xmmdw_mode)
15295 shift -= 3;
b28d1bda
IT
15296 else if (bytemode == ymmq_mode && vex.length == 128)
15297 shift -= 1;
43234a1e
L
15298 }
15299 else
15300 shift = 0;
252b5132 15301
c0f3af97 15302 USED_REX (REX_B);
3f31e633
JB
15303 if (intel_syntax)
15304 intel_operand_size (bytemode, sizeflag);
252b5132
RH
15305 append_seg ();
15306
5d669648 15307 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132 15308 {
5d669648
L
15309 /* 32/64 bit address mode */
15310 int havedisp;
252b5132
RH
15311 int havesib;
15312 int havebase;
0f7da397 15313 int haveindex;
20afcfb7 15314 int needindex;
82c18208 15315 int base, rbase;
91d6fa6a 15316 int vindex = 0;
252b5132 15317 int scale = 0;
7e8b059b
L
15318 int addr32flag = !((sizeflag & AFLAG)
15319 || bytemode == v_bnd_mode
9f79e886
JB
15320 || bytemode == bnd_mode
15321 || bytemode == bnd_swap_mode);
6c30d220
L
15322 const char **indexes64 = names64;
15323 const char **indexes32 = names32;
252b5132
RH
15324
15325 havesib = 0;
15326 havebase = 1;
0f7da397 15327 haveindex = 0;
7967e09e 15328 base = modrm.rm;
252b5132
RH
15329
15330 if (base == 4)
15331 {
15332 havesib = 1;
dfc8cf43 15333 vindex = sib.index;
161a04f6
L
15334 USED_REX (REX_X);
15335 if (rex & REX_X)
91d6fa6a 15336 vindex += 8;
6c30d220
L
15337 switch (bytemode)
15338 {
15339 case vex_vsib_d_w_dq_mode:
5fc35d96 15340 case vex_vsib_d_w_d_mode:
6c30d220 15341 case vex_vsib_q_w_dq_mode:
5fc35d96 15342 case vex_vsib_q_w_d_mode:
6c30d220
L
15343 if (!need_vex)
15344 abort ();
43234a1e
L
15345 if (vex.evex)
15346 {
15347 if (!vex.v)
15348 vindex += 16;
15349 }
6c30d220
L
15350
15351 haveindex = 1;
15352 switch (vex.length)
15353 {
15354 case 128:
7bb15c6f 15355 indexes64 = indexes32 = names_xmm;
6c30d220
L
15356 break;
15357 case 256:
5fc35d96
IT
15358 if (!vex.w
15359 || bytemode == vex_vsib_q_w_dq_mode
15360 || bytemode == vex_vsib_q_w_d_mode)
7bb15c6f 15361 indexes64 = indexes32 = names_ymm;
6c30d220 15362 else
7bb15c6f 15363 indexes64 = indexes32 = names_xmm;
6c30d220 15364 break;
43234a1e 15365 case 512:
5fc35d96
IT
15366 if (!vex.w
15367 || bytemode == vex_vsib_q_w_dq_mode
15368 || bytemode == vex_vsib_q_w_d_mode)
43234a1e
L
15369 indexes64 = indexes32 = names_zmm;
15370 else
15371 indexes64 = indexes32 = names_ymm;
15372 break;
6c30d220
L
15373 default:
15374 abort ();
15375 }
15376 break;
15377 default:
15378 haveindex = vindex != 4;
15379 break;
15380 }
15381 scale = sib.scale;
15382 base = sib.base;
252b5132
RH
15383 codep++;
15384 }
82c18208 15385 rbase = base + add;
252b5132 15386
7967e09e 15387 switch (modrm.mod)
252b5132
RH
15388 {
15389 case 0:
82c18208 15390 if (base == 5)
252b5132
RH
15391 {
15392 havebase = 0;
cb712a9e 15393 if (address_mode == mode_64bit && !havesib)
52b15da3
JH
15394 riprel = 1;
15395 disp = get32s ();
252b5132
RH
15396 }
15397 break;
15398 case 1:
15399 FETCH_DATA (the_info, codep + 1);
15400 disp = *codep++;
15401 if ((disp & 0x80) != 0)
15402 disp -= 0x100;
43234a1e
L
15403 if (vex.evex && shift > 0)
15404 disp <<= shift;
252b5132
RH
15405 break;
15406 case 2:
52b15da3 15407 disp = get32s ();
252b5132
RH
15408 break;
15409 }
15410
20afcfb7
L
15411 /* In 32bit mode, we need index register to tell [offset] from
15412 [eiz*1 + offset]. */
15413 needindex = (havesib
15414 && !havebase
15415 && !haveindex
15416 && address_mode == mode_32bit);
15417 havedisp = (havebase
15418 || needindex
15419 || (havesib && (haveindex || scale != 0)));
5d669648 15420
252b5132 15421 if (!intel_syntax)
82c18208 15422 if (modrm.mod != 0 || base == 5)
db6eb5be 15423 {
5d669648
L
15424 if (havedisp || riprel)
15425 print_displacement (scratchbuf, disp);
15426 else
15427 print_operand_value (scratchbuf, 1, disp);
db6eb5be 15428 oappend (scratchbuf);
52b15da3
JH
15429 if (riprel)
15430 {
15431 set_op (disp, 1);
28596323 15432 oappend (!addr32flag ? "(%rip)" : "(%eip)");
52b15da3 15433 }
db6eb5be 15434 }
2da11e11 15435
7e8b059b
L
15436 if ((havebase || haveindex || riprel)
15437 && (bytemode != v_bnd_mode)
9f79e886
JB
15438 && (bytemode != bnd_mode)
15439 && (bytemode != bnd_swap_mode))
87767711
JB
15440 used_prefixes |= PREFIX_ADDR;
15441
5d669648 15442 if (havedisp || (intel_syntax && riprel))
252b5132 15443 {
252b5132 15444 *obufp++ = open_char;
52b15da3 15445 if (intel_syntax && riprel)
185b1163
L
15446 {
15447 set_op (disp, 1);
28596323 15448 oappend (!addr32flag ? "rip" : "eip");
185b1163 15449 }
db6eb5be 15450 *obufp = '\0';
252b5132 15451 if (havebase)
7e8b059b 15452 oappend (address_mode == mode_64bit && !addr32flag
82c18208 15453 ? names64[rbase] : names32[rbase]);
252b5132
RH
15454 if (havesib)
15455 {
db51cc60
L
15456 /* ESP/RSP won't allow index. If base isn't ESP/RSP,
15457 print index to tell base + index from base. */
15458 if (scale != 0
20afcfb7 15459 || needindex
db51cc60
L
15460 || haveindex
15461 || (havebase && base != ESP_REG_NUM))
252b5132 15462 {
9306ca4a 15463 if (!intel_syntax || havebase)
db6eb5be 15464 {
9306ca4a
JB
15465 *obufp++ = separator_char;
15466 *obufp = '\0';
db6eb5be 15467 }
db51cc60 15468 if (haveindex)
7e8b059b 15469 oappend (address_mode == mode_64bit && !addr32flag
6c30d220 15470 ? indexes64[vindex] : indexes32[vindex]);
db51cc60 15471 else
7e8b059b 15472 oappend (address_mode == mode_64bit && !addr32flag
db51cc60
L
15473 ? index64 : index32);
15474
db6eb5be
AM
15475 *obufp++ = scale_char;
15476 *obufp = '\0';
15477 sprintf (scratchbuf, "%d", 1 << scale);
15478 oappend (scratchbuf);
15479 }
252b5132 15480 }
185b1163 15481 if (intel_syntax
82c18208 15482 && (disp || modrm.mod != 0 || base == 5))
3d456fa1 15483 {
db51cc60 15484 if (!havedisp || (bfd_signed_vma) disp >= 0)
3d456fa1
JB
15485 {
15486 *obufp++ = '+';
15487 *obufp = '\0';
15488 }
05203043 15489 else if (modrm.mod != 1 && disp != -disp)
3d456fa1
JB
15490 {
15491 *obufp++ = '-';
15492 *obufp = '\0';
15493 disp = - (bfd_signed_vma) disp;
15494 }
15495
db51cc60
L
15496 if (havedisp)
15497 print_displacement (scratchbuf, disp);
15498 else
15499 print_operand_value (scratchbuf, 1, disp);
3d456fa1
JB
15500 oappend (scratchbuf);
15501 }
252b5132
RH
15502
15503 *obufp++ = close_char;
db6eb5be 15504 *obufp = '\0';
252b5132
RH
15505 }
15506 else if (intel_syntax)
db6eb5be 15507 {
82c18208 15508 if (modrm.mod != 0 || base == 5)
db6eb5be 15509 {
285ca992 15510 if (!active_seg_prefix)
252b5132 15511 {
d708bcba 15512 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
15513 oappend (":");
15514 }
52b15da3 15515 print_operand_value (scratchbuf, 1, disp);
db6eb5be
AM
15516 oappend (scratchbuf);
15517 }
15518 }
252b5132
RH
15519 }
15520 else
f16cd0d5
L
15521 {
15522 /* 16 bit address mode */
15523 used_prefixes |= prefixes & PREFIX_ADDR;
7967e09e 15524 switch (modrm.mod)
252b5132
RH
15525 {
15526 case 0:
7967e09e 15527 if (modrm.rm == 6)
252b5132
RH
15528 {
15529 disp = get16 ();
15530 if ((disp & 0x8000) != 0)
15531 disp -= 0x10000;
15532 }
15533 break;
15534 case 1:
15535 FETCH_DATA (the_info, codep + 1);
15536 disp = *codep++;
15537 if ((disp & 0x80) != 0)
15538 disp -= 0x100;
65f3ed04
JB
15539 if (vex.evex && shift > 0)
15540 disp <<= shift;
252b5132
RH
15541 break;
15542 case 2:
15543 disp = get16 ();
15544 if ((disp & 0x8000) != 0)
15545 disp -= 0x10000;
15546 break;
15547 }
15548
15549 if (!intel_syntax)
7967e09e 15550 if (modrm.mod != 0 || modrm.rm == 6)
db6eb5be 15551 {
5d669648 15552 print_displacement (scratchbuf, disp);
db6eb5be
AM
15553 oappend (scratchbuf);
15554 }
252b5132 15555
7967e09e 15556 if (modrm.mod != 0 || modrm.rm != 6)
252b5132
RH
15557 {
15558 *obufp++ = open_char;
db6eb5be 15559 *obufp = '\0';
7967e09e 15560 oappend (index16[modrm.rm]);
5d669648
L
15561 if (intel_syntax
15562 && (disp || modrm.mod != 0 || modrm.rm == 6))
3d456fa1 15563 {
5d669648 15564 if ((bfd_signed_vma) disp >= 0)
3d456fa1
JB
15565 {
15566 *obufp++ = '+';
15567 *obufp = '\0';
15568 }
7967e09e 15569 else if (modrm.mod != 1)
3d456fa1
JB
15570 {
15571 *obufp++ = '-';
15572 *obufp = '\0';
15573 disp = - (bfd_signed_vma) disp;
15574 }
15575
5d669648 15576 print_displacement (scratchbuf, disp);
3d456fa1
JB
15577 oappend (scratchbuf);
15578 }
15579
db6eb5be
AM
15580 *obufp++ = close_char;
15581 *obufp = '\0';
252b5132 15582 }
3d456fa1
JB
15583 else if (intel_syntax)
15584 {
285ca992 15585 if (!active_seg_prefix)
3d456fa1
JB
15586 {
15587 oappend (names_seg[ds_reg - es_reg]);
15588 oappend (":");
15589 }
15590 print_operand_value (scratchbuf, 1, disp & 0xffff);
15591 oappend (scratchbuf);
15592 }
252b5132 15593 }
43234a1e
L
15594 if (vex.evex && vex.b
15595 && (bytemode == x_mode
90a915bf 15596 || bytemode == xmmq_mode
43234a1e
L
15597 || bytemode == evex_half_bcst_xmmq_mode))
15598 {
90a915bf
IT
15599 if (vex.w
15600 || bytemode == xmmq_mode
15601 || bytemode == evex_half_bcst_xmmq_mode)
b28d1bda
IT
15602 {
15603 switch (vex.length)
15604 {
15605 case 128:
15606 oappend ("{1to2}");
15607 break;
15608 case 256:
15609 oappend ("{1to4}");
15610 break;
15611 case 512:
15612 oappend ("{1to8}");
15613 break;
15614 default:
15615 abort ();
15616 }
15617 }
43234a1e 15618 else
b28d1bda
IT
15619 {
15620 switch (vex.length)
15621 {
15622 case 128:
15623 oappend ("{1to4}");
15624 break;
15625 case 256:
15626 oappend ("{1to8}");
15627 break;
15628 case 512:
15629 oappend ("{1to16}");
15630 break;
15631 default:
15632 abort ();
15633 }
15634 }
43234a1e 15635 }
252b5132
RH
15636}
15637
c0f3af97 15638static void
8b3f93e7 15639OP_E (int bytemode, int sizeflag)
c0f3af97
L
15640{
15641 /* Skip mod/rm byte. */
15642 MODRM_CHECK;
15643 codep++;
15644
15645 if (modrm.mod == 3)
15646 OP_E_register (bytemode, sizeflag);
15647 else
c1e679ec 15648 OP_E_memory (bytemode, sizeflag);
c0f3af97
L
15649}
15650
252b5132 15651static void
26ca5450 15652OP_G (int bytemode, int sizeflag)
252b5132 15653{
52b15da3 15654 int add = 0;
161a04f6
L
15655 USED_REX (REX_R);
15656 if (rex & REX_R)
52b15da3 15657 add += 8;
252b5132
RH
15658 switch (bytemode)
15659 {
15660 case b_mode:
52b15da3
JH
15661 USED_REX (0);
15662 if (rex)
7967e09e 15663 oappend (names8rex[modrm.reg + add]);
52b15da3 15664 else
7967e09e 15665 oappend (names8[modrm.reg + add]);
252b5132
RH
15666 break;
15667 case w_mode:
7967e09e 15668 oappend (names16[modrm.reg + add]);
252b5132
RH
15669 break;
15670 case d_mode:
1ba585e8
IT
15671 case db_mode:
15672 case dw_mode:
7967e09e 15673 oappend (names32[modrm.reg + add]);
52b15da3
JH
15674 break;
15675 case q_mode:
7967e09e 15676 oappend (names64[modrm.reg + add]);
252b5132 15677 break;
7e8b059b 15678 case bnd_mode:
0d96e4df
L
15679 if (modrm.reg > 0x3)
15680 {
15681 oappend ("(bad)");
15682 return;
15683 }
7e8b059b
L
15684 oappend (names_bnd[modrm.reg]);
15685 break;
252b5132 15686 case v_mode:
9306ca4a 15687 case dq_mode:
42903f7f
L
15688 case dqb_mode:
15689 case dqd_mode:
9306ca4a 15690 case dqw_mode:
161a04f6
L
15691 USED_REX (REX_W);
15692 if (rex & REX_W)
7967e09e 15693 oappend (names64[modrm.reg + add]);
252b5132 15694 else
f16cd0d5
L
15695 {
15696 if ((sizeflag & DFLAG) || bytemode != v_mode)
15697 oappend (names32[modrm.reg + add]);
15698 else
15699 oappend (names16[modrm.reg + add]);
15700 used_prefixes |= (prefixes & PREFIX_DATA);
15701 }
252b5132 15702 break;
90700ea2 15703 case m_mode:
cb712a9e 15704 if (address_mode == mode_64bit)
7967e09e 15705 oappend (names64[modrm.reg + add]);
90700ea2 15706 else
7967e09e 15707 oappend (names32[modrm.reg + add]);
90700ea2 15708 break;
1ba585e8 15709 case mask_bd_mode:
43234a1e 15710 case mask_mode:
9889cbb1
L
15711 if ((modrm.reg + add) > 0x7)
15712 {
15713 oappend ("(bad)");
15714 return;
15715 }
43234a1e
L
15716 oappend (names_mask[modrm.reg + add]);
15717 break;
252b5132
RH
15718 default:
15719 oappend (INTERNAL_DISASSEMBLER_ERROR);
15720 break;
15721 }
15722}
15723
52b15da3 15724static bfd_vma
26ca5450 15725get64 (void)
52b15da3 15726{
5dd0794d 15727 bfd_vma x;
52b15da3 15728#ifdef BFD64
5dd0794d
AM
15729 unsigned int a;
15730 unsigned int b;
15731
52b15da3
JH
15732 FETCH_DATA (the_info, codep + 8);
15733 a = *codep++ & 0xff;
15734 a |= (*codep++ & 0xff) << 8;
15735 a |= (*codep++ & 0xff) << 16;
070fe95d 15736 a |= (*codep++ & 0xffu) << 24;
5dd0794d 15737 b = *codep++ & 0xff;
52b15da3
JH
15738 b |= (*codep++ & 0xff) << 8;
15739 b |= (*codep++ & 0xff) << 16;
070fe95d 15740 b |= (*codep++ & 0xffu) << 24;
52b15da3
JH
15741 x = a + ((bfd_vma) b << 32);
15742#else
6608db57 15743 abort ();
5dd0794d 15744 x = 0;
52b15da3
JH
15745#endif
15746 return x;
15747}
15748
15749static bfd_signed_vma
26ca5450 15750get32 (void)
252b5132 15751{
52b15da3 15752 bfd_signed_vma x = 0;
252b5132
RH
15753
15754 FETCH_DATA (the_info, codep + 4);
52b15da3
JH
15755 x = *codep++ & (bfd_signed_vma) 0xff;
15756 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
15757 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
15758 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
15759 return x;
15760}
15761
15762static bfd_signed_vma
26ca5450 15763get32s (void)
52b15da3
JH
15764{
15765 bfd_signed_vma x = 0;
15766
15767 FETCH_DATA (the_info, codep + 4);
15768 x = *codep++ & (bfd_signed_vma) 0xff;
15769 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
15770 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
15771 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
15772
15773 x = (x ^ ((bfd_signed_vma) 1 << 31)) - ((bfd_signed_vma) 1 << 31);
15774
252b5132
RH
15775 return x;
15776}
15777
15778static int
26ca5450 15779get16 (void)
252b5132
RH
15780{
15781 int x = 0;
15782
15783 FETCH_DATA (the_info, codep + 2);
15784 x = *codep++ & 0xff;
15785 x |= (*codep++ & 0xff) << 8;
15786 return x;
15787}
15788
15789static void
26ca5450 15790set_op (bfd_vma op, int riprel)
252b5132
RH
15791{
15792 op_index[op_ad] = op_ad;
cb712a9e 15793 if (address_mode == mode_64bit)
7081ff04
AJ
15794 {
15795 op_address[op_ad] = op;
15796 op_riprel[op_ad] = riprel;
15797 }
15798 else
15799 {
15800 /* Mask to get a 32-bit address. */
15801 op_address[op_ad] = op & 0xffffffff;
15802 op_riprel[op_ad] = riprel & 0xffffffff;
15803 }
252b5132
RH
15804}
15805
15806static void
26ca5450 15807OP_REG (int code, int sizeflag)
252b5132 15808{
2da11e11 15809 const char *s;
9b60702d 15810 int add;
de882298
RM
15811
15812 switch (code)
15813 {
15814 case es_reg: case ss_reg: case cs_reg:
15815 case ds_reg: case fs_reg: case gs_reg:
15816 oappend (names_seg[code - es_reg]);
15817 return;
15818 }
15819
161a04f6
L
15820 USED_REX (REX_B);
15821 if (rex & REX_B)
52b15da3 15822 add = 8;
9b60702d
L
15823 else
15824 add = 0;
52b15da3
JH
15825
15826 switch (code)
15827 {
52b15da3
JH
15828 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
15829 case sp_reg: case bp_reg: case si_reg: case di_reg:
15830 s = names16[code - ax_reg + add];
15831 break;
52b15da3
JH
15832 case al_reg: case ah_reg: case cl_reg: case ch_reg:
15833 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
15834 USED_REX (0);
15835 if (rex)
15836 s = names8rex[code - al_reg + add];
15837 else
15838 s = names8[code - al_reg];
15839 break;
6439fc28
AM
15840 case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg:
15841 case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg:
7bb15c6f 15842 if (address_mode == mode_64bit
6c067bbb 15843 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
15844 {
15845 s = names64[code - rAX_reg + add];
15846 break;
15847 }
15848 code += eAX_reg - rAX_reg;
6608db57 15849 /* Fall through. */
52b15da3
JH
15850 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
15851 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
15852 USED_REX (REX_W);
15853 if (rex & REX_W)
52b15da3 15854 s = names64[code - eAX_reg + add];
52b15da3 15855 else
f16cd0d5
L
15856 {
15857 if (sizeflag & DFLAG)
15858 s = names32[code - eAX_reg + add];
15859 else
15860 s = names16[code - eAX_reg + add];
15861 used_prefixes |= (prefixes & PREFIX_DATA);
15862 }
52b15da3 15863 break;
52b15da3
JH
15864 default:
15865 s = INTERNAL_DISASSEMBLER_ERROR;
15866 break;
15867 }
15868 oappend (s);
15869}
15870
15871static void
26ca5450 15872OP_IMREG (int code, int sizeflag)
52b15da3
JH
15873{
15874 const char *s;
252b5132
RH
15875
15876 switch (code)
15877 {
15878 case indir_dx_reg:
d708bcba 15879 if (intel_syntax)
52fd6d94 15880 s = "dx";
d708bcba 15881 else
db6eb5be 15882 s = "(%dx)";
252b5132
RH
15883 break;
15884 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
15885 case sp_reg: case bp_reg: case si_reg: case di_reg:
15886 s = names16[code - ax_reg];
15887 break;
15888 case es_reg: case ss_reg: case cs_reg:
15889 case ds_reg: case fs_reg: case gs_reg:
15890 s = names_seg[code - es_reg];
15891 break;
15892 case al_reg: case ah_reg: case cl_reg: case ch_reg:
15893 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
52b15da3
JH
15894 USED_REX (0);
15895 if (rex)
15896 s = names8rex[code - al_reg];
15897 else
15898 s = names8[code - al_reg];
252b5132
RH
15899 break;
15900 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
15901 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
15902 USED_REX (REX_W);
15903 if (rex & REX_W)
52b15da3 15904 s = names64[code - eAX_reg];
252b5132 15905 else
f16cd0d5
L
15906 {
15907 if (sizeflag & DFLAG)
15908 s = names32[code - eAX_reg];
15909 else
15910 s = names16[code - eAX_reg];
15911 used_prefixes |= (prefixes & PREFIX_DATA);
15912 }
252b5132 15913 break;
52fd6d94 15914 case z_mode_ax_reg:
161a04f6 15915 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
15916 s = *names32;
15917 else
15918 s = *names16;
161a04f6 15919 if (!(rex & REX_W))
52fd6d94
JB
15920 used_prefixes |= (prefixes & PREFIX_DATA);
15921 break;
252b5132
RH
15922 default:
15923 s = INTERNAL_DISASSEMBLER_ERROR;
15924 break;
15925 }
15926 oappend (s);
15927}
15928
15929static void
26ca5450 15930OP_I (int bytemode, int sizeflag)
252b5132 15931{
52b15da3
JH
15932 bfd_signed_vma op;
15933 bfd_signed_vma mask = -1;
252b5132
RH
15934
15935 switch (bytemode)
15936 {
15937 case b_mode:
15938 FETCH_DATA (the_info, codep + 1);
52b15da3
JH
15939 op = *codep++;
15940 mask = 0xff;
15941 break;
15942 case q_mode:
cb712a9e 15943 if (address_mode == mode_64bit)
6439fc28
AM
15944 {
15945 op = get32s ();
15946 break;
15947 }
6608db57 15948 /* Fall through. */
252b5132 15949 case v_mode:
161a04f6
L
15950 USED_REX (REX_W);
15951 if (rex & REX_W)
52b15da3 15952 op = get32s ();
252b5132 15953 else
52b15da3 15954 {
f16cd0d5
L
15955 if (sizeflag & DFLAG)
15956 {
15957 op = get32 ();
15958 mask = 0xffffffff;
15959 }
15960 else
15961 {
15962 op = get16 ();
15963 mask = 0xfffff;
15964 }
15965 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 15966 }
252b5132
RH
15967 break;
15968 case w_mode:
52b15da3 15969 mask = 0xfffff;
252b5132
RH
15970 op = get16 ();
15971 break;
9306ca4a
JB
15972 case const_1_mode:
15973 if (intel_syntax)
6c067bbb 15974 oappend ("1");
9306ca4a 15975 return;
252b5132
RH
15976 default:
15977 oappend (INTERNAL_DISASSEMBLER_ERROR);
15978 return;
15979 }
15980
52b15da3
JH
15981 op &= mask;
15982 scratchbuf[0] = '$';
d708bcba 15983 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 15984 oappend_maybe_intel (scratchbuf);
52b15da3
JH
15985 scratchbuf[0] = '\0';
15986}
15987
15988static void
26ca5450 15989OP_I64 (int bytemode, int sizeflag)
52b15da3
JH
15990{
15991 bfd_signed_vma op;
15992 bfd_signed_vma mask = -1;
15993
cb712a9e 15994 if (address_mode != mode_64bit)
6439fc28
AM
15995 {
15996 OP_I (bytemode, sizeflag);
15997 return;
15998 }
15999
52b15da3
JH
16000 switch (bytemode)
16001 {
16002 case b_mode:
16003 FETCH_DATA (the_info, codep + 1);
16004 op = *codep++;
16005 mask = 0xff;
16006 break;
16007 case v_mode:
161a04f6
L
16008 USED_REX (REX_W);
16009 if (rex & REX_W)
52b15da3 16010 op = get64 ();
52b15da3
JH
16011 else
16012 {
f16cd0d5
L
16013 if (sizeflag & DFLAG)
16014 {
16015 op = get32 ();
16016 mask = 0xffffffff;
16017 }
16018 else
16019 {
16020 op = get16 ();
16021 mask = 0xfffff;
16022 }
16023 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 16024 }
52b15da3
JH
16025 break;
16026 case w_mode:
16027 mask = 0xfffff;
16028 op = get16 ();
16029 break;
16030 default:
16031 oappend (INTERNAL_DISASSEMBLER_ERROR);
16032 return;
16033 }
16034
16035 op &= mask;
16036 scratchbuf[0] = '$';
d708bcba 16037 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 16038 oappend_maybe_intel (scratchbuf);
252b5132
RH
16039 scratchbuf[0] = '\0';
16040}
16041
16042static void
26ca5450 16043OP_sI (int bytemode, int sizeflag)
252b5132 16044{
52b15da3 16045 bfd_signed_vma op;
252b5132
RH
16046
16047 switch (bytemode)
16048 {
16049 case b_mode:
e3949f17 16050 case b_T_mode:
252b5132
RH
16051 FETCH_DATA (the_info, codep + 1);
16052 op = *codep++;
16053 if ((op & 0x80) != 0)
16054 op -= 0x100;
e3949f17
L
16055 if (bytemode == b_T_mode)
16056 {
16057 if (address_mode != mode_64bit
7bb15c6f 16058 || !((sizeflag & DFLAG) || (rex & REX_W)))
e3949f17 16059 {
6c067bbb
RM
16060 /* The operand-size prefix is overridden by a REX prefix. */
16061 if ((sizeflag & DFLAG) || (rex & REX_W))
e3949f17
L
16062 op &= 0xffffffff;
16063 else
16064 op &= 0xffff;
16065 }
16066 }
16067 else
16068 {
16069 if (!(rex & REX_W))
16070 {
16071 if (sizeflag & DFLAG)
16072 op &= 0xffffffff;
16073 else
16074 op &= 0xffff;
16075 }
16076 }
252b5132
RH
16077 break;
16078 case v_mode:
7bb15c6f
RM
16079 /* The operand-size prefix is overridden by a REX prefix. */
16080 if ((sizeflag & DFLAG) || (rex & REX_W))
52b15da3 16081 op = get32s ();
252b5132 16082 else
d9e3625e 16083 op = get16 ();
252b5132
RH
16084 break;
16085 default:
16086 oappend (INTERNAL_DISASSEMBLER_ERROR);
16087 return;
16088 }
52b15da3
JH
16089
16090 scratchbuf[0] = '$';
16091 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 16092 oappend_maybe_intel (scratchbuf);
252b5132
RH
16093}
16094
16095static void
26ca5450 16096OP_J (int bytemode, int sizeflag)
252b5132 16097{
52b15da3 16098 bfd_vma disp;
7081ff04 16099 bfd_vma mask = -1;
65ca155d 16100 bfd_vma segment = 0;
252b5132
RH
16101
16102 switch (bytemode)
16103 {
16104 case b_mode:
16105 FETCH_DATA (the_info, codep + 1);
16106 disp = *codep++;
16107 if ((disp & 0x80) != 0)
16108 disp -= 0x100;
16109 break;
16110 case v_mode:
5db04b09
L
16111 if (isa64 == amd64)
16112 USED_REX (REX_W);
16113 if ((sizeflag & DFLAG)
16114 || (address_mode == mode_64bit
16115 && (isa64 != amd64 || (rex & REX_W))))
52b15da3 16116 disp = get32s ();
252b5132
RH
16117 else
16118 {
16119 disp = get16 ();
206717e8
L
16120 if ((disp & 0x8000) != 0)
16121 disp -= 0x10000;
65ca155d
L
16122 /* In 16bit mode, address is wrapped around at 64k within
16123 the same segment. Otherwise, a data16 prefix on a jump
16124 instruction means that the pc is masked to 16 bits after
16125 the displacement is added! */
16126 mask = 0xffff;
16127 if ((prefixes & PREFIX_DATA) == 0)
4fd7268a 16128 segment = ((start_pc + (codep - start_codep))
65ca155d 16129 & ~((bfd_vma) 0xffff));
252b5132 16130 }
5db04b09
L
16131 if (address_mode != mode_64bit
16132 || (isa64 == amd64 && !(rex & REX_W)))
f16cd0d5 16133 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132
RH
16134 break;
16135 default:
16136 oappend (INTERNAL_DISASSEMBLER_ERROR);
16137 return;
16138 }
42d5f9c6 16139 disp = ((start_pc + (codep - start_codep) + disp) & mask) | segment;
52b15da3
JH
16140 set_op (disp, 0);
16141 print_operand_value (scratchbuf, 1, disp);
252b5132
RH
16142 oappend (scratchbuf);
16143}
16144
252b5132 16145static void
ed7841b3 16146OP_SEG (int bytemode, int sizeflag)
252b5132 16147{
ed7841b3 16148 if (bytemode == w_mode)
7967e09e 16149 oappend (names_seg[modrm.reg]);
ed7841b3 16150 else
7967e09e 16151 OP_E (modrm.mod == 3 ? bytemode : w_mode, sizeflag);
252b5132
RH
16152}
16153
16154static void
26ca5450 16155OP_DIR (int dummy ATTRIBUTE_UNUSED, int sizeflag)
252b5132
RH
16156{
16157 int seg, offset;
16158
c608c12e 16159 if (sizeflag & DFLAG)
252b5132 16160 {
c608c12e
AM
16161 offset = get32 ();
16162 seg = get16 ();
252b5132 16163 }
c608c12e
AM
16164 else
16165 {
16166 offset = get16 ();
16167 seg = get16 ();
16168 }
7d421014 16169 used_prefixes |= (prefixes & PREFIX_DATA);
d708bcba 16170 if (intel_syntax)
3f31e633 16171 sprintf (scratchbuf, "0x%x:0x%x", seg, offset);
d708bcba
AM
16172 else
16173 sprintf (scratchbuf, "$0x%x,$0x%x", seg, offset);
c608c12e 16174 oappend (scratchbuf);
252b5132
RH
16175}
16176
252b5132 16177static void
3f31e633 16178OP_OFF (int bytemode, int sizeflag)
252b5132 16179{
52b15da3 16180 bfd_vma off;
252b5132 16181
3f31e633
JB
16182 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
16183 intel_operand_size (bytemode, sizeflag);
252b5132
RH
16184 append_seg ();
16185
cb712a9e 16186 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132
RH
16187 off = get32 ();
16188 else
16189 off = get16 ();
16190
16191 if (intel_syntax)
16192 {
285ca992 16193 if (!active_seg_prefix)
252b5132 16194 {
d708bcba 16195 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
16196 oappend (":");
16197 }
16198 }
52b15da3
JH
16199 print_operand_value (scratchbuf, 1, off);
16200 oappend (scratchbuf);
16201}
6439fc28 16202
52b15da3 16203static void
3f31e633 16204OP_OFF64 (int bytemode, int sizeflag)
52b15da3
JH
16205{
16206 bfd_vma off;
16207
539e75ad
L
16208 if (address_mode != mode_64bit
16209 || (prefixes & PREFIX_ADDR))
6439fc28
AM
16210 {
16211 OP_OFF (bytemode, sizeflag);
16212 return;
16213 }
16214
3f31e633
JB
16215 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
16216 intel_operand_size (bytemode, sizeflag);
52b15da3
JH
16217 append_seg ();
16218
6608db57 16219 off = get64 ();
52b15da3
JH
16220
16221 if (intel_syntax)
16222 {
285ca992 16223 if (!active_seg_prefix)
52b15da3 16224 {
d708bcba 16225 oappend (names_seg[ds_reg - es_reg]);
52b15da3
JH
16226 oappend (":");
16227 }
16228 }
16229 print_operand_value (scratchbuf, 1, off);
252b5132
RH
16230 oappend (scratchbuf);
16231}
16232
16233static void
26ca5450 16234ptr_reg (int code, int sizeflag)
252b5132 16235{
2da11e11 16236 const char *s;
d708bcba 16237
1d9f512f 16238 *obufp++ = open_char;
20f0a1fc 16239 used_prefixes |= (prefixes & PREFIX_ADDR);
cb712a9e 16240 if (address_mode == mode_64bit)
c1a64871
JH
16241 {
16242 if (!(sizeflag & AFLAG))
db6eb5be 16243 s = names32[code - eAX_reg];
c1a64871 16244 else
db6eb5be 16245 s = names64[code - eAX_reg];
c1a64871 16246 }
52b15da3 16247 else if (sizeflag & AFLAG)
252b5132
RH
16248 s = names32[code - eAX_reg];
16249 else
16250 s = names16[code - eAX_reg];
16251 oappend (s);
1d9f512f
AM
16252 *obufp++ = close_char;
16253 *obufp = 0;
252b5132
RH
16254}
16255
16256static void
26ca5450 16257OP_ESreg (int code, int sizeflag)
252b5132 16258{
9306ca4a 16259 if (intel_syntax)
52fd6d94
JB
16260 {
16261 switch (codep[-1])
16262 {
16263 case 0x6d: /* insw/insl */
16264 intel_operand_size (z_mode, sizeflag);
16265 break;
16266 case 0xa5: /* movsw/movsl/movsq */
16267 case 0xa7: /* cmpsw/cmpsl/cmpsq */
16268 case 0xab: /* stosw/stosl */
16269 case 0xaf: /* scasw/scasl */
16270 intel_operand_size (v_mode, sizeflag);
16271 break;
16272 default:
16273 intel_operand_size (b_mode, sizeflag);
16274 }
16275 }
9ce09ba2 16276 oappend_maybe_intel ("%es:");
252b5132
RH
16277 ptr_reg (code, sizeflag);
16278}
16279
16280static void
26ca5450 16281OP_DSreg (int code, int sizeflag)
252b5132 16282{
9306ca4a 16283 if (intel_syntax)
52fd6d94
JB
16284 {
16285 switch (codep[-1])
16286 {
16287 case 0x6f: /* outsw/outsl */
16288 intel_operand_size (z_mode, sizeflag);
16289 break;
16290 case 0xa5: /* movsw/movsl/movsq */
16291 case 0xa7: /* cmpsw/cmpsl/cmpsq */
16292 case 0xad: /* lodsw/lodsl/lodsq */
16293 intel_operand_size (v_mode, sizeflag);
16294 break;
16295 default:
16296 intel_operand_size (b_mode, sizeflag);
16297 }
16298 }
285ca992
L
16299 /* Set active_seg_prefix to PREFIX_DS if it is unset so that the
16300 default segment register DS is printed. */
16301 if (!active_seg_prefix)
16302 active_seg_prefix = PREFIX_DS;
6608db57 16303 append_seg ();
252b5132
RH
16304 ptr_reg (code, sizeflag);
16305}
16306
252b5132 16307static void
26ca5450 16308OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 16309{
9b60702d 16310 int add;
161a04f6 16311 if (rex & REX_R)
c4a530c5 16312 {
161a04f6 16313 USED_REX (REX_R);
c4a530c5
JB
16314 add = 8;
16315 }
cb712a9e 16316 else if (address_mode != mode_64bit && (prefixes & PREFIX_LOCK))
c4a530c5 16317 {
f16cd0d5 16318 all_prefixes[last_lock_prefix] = 0;
c4a530c5
JB
16319 used_prefixes |= PREFIX_LOCK;
16320 add = 8;
16321 }
9b60702d
L
16322 else
16323 add = 0;
7967e09e 16324 sprintf (scratchbuf, "%%cr%d", modrm.reg + add);
9ce09ba2 16325 oappend_maybe_intel (scratchbuf);
252b5132
RH
16326}
16327
252b5132 16328static void
26ca5450 16329OP_D (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 16330{
9b60702d 16331 int add;
161a04f6
L
16332 USED_REX (REX_R);
16333 if (rex & REX_R)
52b15da3 16334 add = 8;
9b60702d
L
16335 else
16336 add = 0;
d708bcba 16337 if (intel_syntax)
7967e09e 16338 sprintf (scratchbuf, "db%d", modrm.reg + add);
d708bcba 16339 else
7967e09e 16340 sprintf (scratchbuf, "%%db%d", modrm.reg + add);
252b5132
RH
16341 oappend (scratchbuf);
16342}
16343
252b5132 16344static void
26ca5450 16345OP_T (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 16346{
7967e09e 16347 sprintf (scratchbuf, "%%tr%d", modrm.reg);
9ce09ba2 16348 oappend_maybe_intel (scratchbuf);
252b5132
RH
16349}
16350
16351static void
6f74c397 16352OP_R (int bytemode, int sizeflag)
252b5132 16353{
68f34464
L
16354 /* Skip mod/rm byte. */
16355 MODRM_CHECK;
16356 codep++;
16357 OP_E_register (bytemode, sizeflag);
252b5132
RH
16358}
16359
16360static void
26ca5450 16361OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 16362{
b9733481
L
16363 int reg = modrm.reg;
16364 const char **names;
16365
041bd2e0
JH
16366 used_prefixes |= (prefixes & PREFIX_DATA);
16367 if (prefixes & PREFIX_DATA)
20f0a1fc 16368 {
b9733481 16369 names = names_xmm;
161a04f6
L
16370 USED_REX (REX_R);
16371 if (rex & REX_R)
b9733481 16372 reg += 8;
20f0a1fc 16373 }
041bd2e0 16374 else
b9733481
L
16375 names = names_mm;
16376 oappend (names[reg]);
252b5132
RH
16377}
16378
c608c12e 16379static void
c0f3af97 16380OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
c608c12e 16381{
b9733481
L
16382 int reg = modrm.reg;
16383 const char **names;
16384
161a04f6
L
16385 USED_REX (REX_R);
16386 if (rex & REX_R)
b9733481 16387 reg += 8;
43234a1e
L
16388 if (vex.evex)
16389 {
16390 if (!vex.r)
16391 reg += 16;
16392 }
16393
539f890d
L
16394 if (need_vex
16395 && bytemode != xmm_mode
43234a1e
L
16396 && bytemode != xmmq_mode
16397 && bytemode != evex_half_bcst_xmmq_mode
16398 && bytemode != ymm_mode
539f890d 16399 && bytemode != scalar_mode)
c0f3af97
L
16400 {
16401 switch (vex.length)
16402 {
16403 case 128:
b9733481 16404 names = names_xmm;
c0f3af97
L
16405 break;
16406 case 256:
5fc35d96
IT
16407 if (vex.w
16408 || (bytemode != vex_vsib_q_w_dq_mode
16409 && bytemode != vex_vsib_q_w_d_mode))
6c30d220
L
16410 names = names_ymm;
16411 else
16412 names = names_xmm;
c0f3af97 16413 break;
43234a1e
L
16414 case 512:
16415 names = names_zmm;
16416 break;
c0f3af97
L
16417 default:
16418 abort ();
16419 }
16420 }
43234a1e
L
16421 else if (bytemode == xmmq_mode
16422 || bytemode == evex_half_bcst_xmmq_mode)
16423 {
16424 switch (vex.length)
16425 {
16426 case 128:
16427 case 256:
16428 names = names_xmm;
16429 break;
16430 case 512:
16431 names = names_ymm;
16432 break;
16433 default:
16434 abort ();
16435 }
16436 }
16437 else if (bytemode == ymm_mode)
16438 names = names_ymm;
c0f3af97 16439 else
b9733481
L
16440 names = names_xmm;
16441 oappend (names[reg]);
c608c12e
AM
16442}
16443
252b5132 16444static void
26ca5450 16445OP_EM (int bytemode, int sizeflag)
252b5132 16446{
b9733481
L
16447 int reg;
16448 const char **names;
16449
7967e09e 16450 if (modrm.mod != 3)
252b5132 16451 {
b6169b20
L
16452 if (intel_syntax
16453 && (bytemode == v_mode || bytemode == v_swap_mode))
9306ca4a
JB
16454 {
16455 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
16456 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 16457 }
252b5132
RH
16458 OP_E (bytemode, sizeflag);
16459 return;
16460 }
16461
b6169b20
L
16462 if ((sizeflag & SUFFIX_ALWAYS) && bytemode == v_swap_mode)
16463 swap_operand ();
16464
6608db57 16465 /* Skip mod/rm byte. */
4bba6815 16466 MODRM_CHECK;
252b5132 16467 codep++;
041bd2e0 16468 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 16469 reg = modrm.rm;
041bd2e0 16470 if (prefixes & PREFIX_DATA)
20f0a1fc 16471 {
b9733481 16472 names = names_xmm;
161a04f6
L
16473 USED_REX (REX_B);
16474 if (rex & REX_B)
b9733481 16475 reg += 8;
20f0a1fc 16476 }
041bd2e0 16477 else
b9733481
L
16478 names = names_mm;
16479 oappend (names[reg]);
252b5132
RH
16480}
16481
246c51aa
L
16482/* cvt* are the only instructions in sse2 which have
16483 both SSE and MMX operands and also have 0x66 prefix
16484 in their opcode. 0x66 was originally used to differentiate
16485 between SSE and MMX instruction(operands). So we have to handle the
4d9567e0
MM
16486 cvt* separately using OP_EMC and OP_MXC */
16487static void
16488OP_EMC (int bytemode, int sizeflag)
16489{
7967e09e 16490 if (modrm.mod != 3)
4d9567e0
MM
16491 {
16492 if (intel_syntax && bytemode == v_mode)
16493 {
16494 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
16495 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 16496 }
4d9567e0
MM
16497 OP_E (bytemode, sizeflag);
16498 return;
16499 }
246c51aa 16500
4d9567e0
MM
16501 /* Skip mod/rm byte. */
16502 MODRM_CHECK;
16503 codep++;
16504 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 16505 oappend (names_mm[modrm.rm]);
4d9567e0
MM
16506}
16507
16508static void
16509OP_MXC (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16510{
16511 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 16512 oappend (names_mm[modrm.reg]);
4d9567e0
MM
16513}
16514
c608c12e 16515static void
26ca5450 16516OP_EX (int bytemode, int sizeflag)
c608c12e 16517{
b9733481
L
16518 int reg;
16519 const char **names;
d6f574e0
L
16520
16521 /* Skip mod/rm byte. */
16522 MODRM_CHECK;
16523 codep++;
16524
7967e09e 16525 if (modrm.mod != 3)
c608c12e 16526 {
c1e679ec 16527 OP_E_memory (bytemode, sizeflag);
c608c12e
AM
16528 return;
16529 }
d6f574e0 16530
b9733481 16531 reg = modrm.rm;
161a04f6
L
16532 USED_REX (REX_B);
16533 if (rex & REX_B)
b9733481 16534 reg += 8;
43234a1e
L
16535 if (vex.evex)
16536 {
16537 USED_REX (REX_X);
16538 if ((rex & REX_X))
16539 reg += 16;
16540 }
c608c12e 16541
b6169b20 16542 if ((sizeflag & SUFFIX_ALWAYS)
fa99fab2
L
16543 && (bytemode == x_swap_mode
16544 || bytemode == d_swap_mode
7bb15c6f 16545 || bytemode == d_scalar_swap_mode
539f890d
L
16546 || bytemode == q_swap_mode
16547 || bytemode == q_scalar_swap_mode))
b6169b20
L
16548 swap_operand ();
16549
c0f3af97
L
16550 if (need_vex
16551 && bytemode != xmm_mode
6c30d220
L
16552 && bytemode != xmmdw_mode
16553 && bytemode != xmmqd_mode
16554 && bytemode != xmm_mb_mode
16555 && bytemode != xmm_mw_mode
16556 && bytemode != xmm_md_mode
16557 && bytemode != xmm_mq_mode
43234a1e 16558 && bytemode != xmm_mdq_mode
539f890d 16559 && bytemode != xmmq_mode
43234a1e
L
16560 && bytemode != evex_half_bcst_xmmq_mode
16561 && bytemode != ymm_mode
539f890d 16562 && bytemode != d_scalar_mode
7bb15c6f 16563 && bytemode != d_scalar_swap_mode
539f890d 16564 && bytemode != q_scalar_mode
1c480963
L
16565 && bytemode != q_scalar_swap_mode
16566 && bytemode != vex_scalar_w_dq_mode)
c0f3af97
L
16567 {
16568 switch (vex.length)
16569 {
16570 case 128:
b9733481 16571 names = names_xmm;
c0f3af97
L
16572 break;
16573 case 256:
b9733481 16574 names = names_ymm;
c0f3af97 16575 break;
43234a1e
L
16576 case 512:
16577 names = names_zmm;
16578 break;
c0f3af97
L
16579 default:
16580 abort ();
16581 }
16582 }
43234a1e
L
16583 else if (bytemode == xmmq_mode
16584 || bytemode == evex_half_bcst_xmmq_mode)
16585 {
16586 switch (vex.length)
16587 {
16588 case 128:
16589 case 256:
16590 names = names_xmm;
16591 break;
16592 case 512:
16593 names = names_ymm;
16594 break;
16595 default:
16596 abort ();
16597 }
16598 }
16599 else if (bytemode == ymm_mode)
16600 names = names_ymm;
c0f3af97 16601 else
b9733481
L
16602 names = names_xmm;
16603 oappend (names[reg]);
c608c12e
AM
16604}
16605
252b5132 16606static void
26ca5450 16607OP_MS (int bytemode, int sizeflag)
252b5132 16608{
7967e09e 16609 if (modrm.mod == 3)
2da11e11
AM
16610 OP_EM (bytemode, sizeflag);
16611 else
6608db57 16612 BadOp ();
252b5132
RH
16613}
16614
992aaec9 16615static void
26ca5450 16616OP_XS (int bytemode, int sizeflag)
992aaec9 16617{
7967e09e 16618 if (modrm.mod == 3)
992aaec9
AM
16619 OP_EX (bytemode, sizeflag);
16620 else
6608db57 16621 BadOp ();
992aaec9
AM
16622}
16623
cc0ec051
AM
16624static void
16625OP_M (int bytemode, int sizeflag)
16626{
7967e09e 16627 if (modrm.mod == 3)
75413a22
L
16628 /* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */
16629 BadOp ();
cc0ec051
AM
16630 else
16631 OP_E (bytemode, sizeflag);
16632}
16633
16634static void
16635OP_0f07 (int bytemode, int sizeflag)
16636{
7967e09e 16637 if (modrm.mod != 3 || modrm.rm != 0)
cc0ec051
AM
16638 BadOp ();
16639 else
16640 OP_E (bytemode, sizeflag);
16641}
16642
46e883c5 16643/* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
246c51aa 16644 32bit mode and "xchg %rax,%rax" in 64bit mode. */
46e883c5 16645
cc0ec051 16646static void
46e883c5 16647NOP_Fixup1 (int bytemode, int sizeflag)
cc0ec051 16648{
8b38ad71
L
16649 if ((prefixes & PREFIX_DATA) != 0
16650 || (rex != 0
16651 && rex != 0x48
16652 && address_mode == mode_64bit))
46e883c5
L
16653 OP_REG (bytemode, sizeflag);
16654 else
16655 strcpy (obuf, "nop");
16656}
16657
16658static void
16659NOP_Fixup2 (int bytemode, int sizeflag)
16660{
8b38ad71
L
16661 if ((prefixes & PREFIX_DATA) != 0
16662 || (rex != 0
16663 && rex != 0x48
16664 && address_mode == mode_64bit))
46e883c5 16665 OP_IMREG (bytemode, sizeflag);
cc0ec051
AM
16666}
16667
84037f8c 16668static const char *const Suffix3DNow[] = {
252b5132
RH
16669/* 00 */ NULL, NULL, NULL, NULL,
16670/* 04 */ NULL, NULL, NULL, NULL,
16671/* 08 */ NULL, NULL, NULL, NULL,
9e525108 16672/* 0C */ "pi2fw", "pi2fd", NULL, NULL,
252b5132
RH
16673/* 10 */ NULL, NULL, NULL, NULL,
16674/* 14 */ NULL, NULL, NULL, NULL,
16675/* 18 */ NULL, NULL, NULL, NULL,
9e525108 16676/* 1C */ "pf2iw", "pf2id", NULL, NULL,
252b5132
RH
16677/* 20 */ NULL, NULL, NULL, NULL,
16678/* 24 */ NULL, NULL, NULL, NULL,
16679/* 28 */ NULL, NULL, NULL, NULL,
16680/* 2C */ NULL, NULL, NULL, NULL,
16681/* 30 */ NULL, NULL, NULL, NULL,
16682/* 34 */ NULL, NULL, NULL, NULL,
16683/* 38 */ NULL, NULL, NULL, NULL,
16684/* 3C */ NULL, NULL, NULL, NULL,
16685/* 40 */ NULL, NULL, NULL, NULL,
16686/* 44 */ NULL, NULL, NULL, NULL,
16687/* 48 */ NULL, NULL, NULL, NULL,
16688/* 4C */ NULL, NULL, NULL, NULL,
16689/* 50 */ NULL, NULL, NULL, NULL,
16690/* 54 */ NULL, NULL, NULL, NULL,
16691/* 58 */ NULL, NULL, NULL, NULL,
16692/* 5C */ NULL, NULL, NULL, NULL,
16693/* 60 */ NULL, NULL, NULL, NULL,
16694/* 64 */ NULL, NULL, NULL, NULL,
16695/* 68 */ NULL, NULL, NULL, NULL,
16696/* 6C */ NULL, NULL, NULL, NULL,
16697/* 70 */ NULL, NULL, NULL, NULL,
16698/* 74 */ NULL, NULL, NULL, NULL,
16699/* 78 */ NULL, NULL, NULL, NULL,
16700/* 7C */ NULL, NULL, NULL, NULL,
16701/* 80 */ NULL, NULL, NULL, NULL,
16702/* 84 */ NULL, NULL, NULL, NULL,
9e525108
AM
16703/* 88 */ NULL, NULL, "pfnacc", NULL,
16704/* 8C */ NULL, NULL, "pfpnacc", NULL,
252b5132
RH
16705/* 90 */ "pfcmpge", NULL, NULL, NULL,
16706/* 94 */ "pfmin", NULL, "pfrcp", "pfrsqrt",
16707/* 98 */ NULL, NULL, "pfsub", NULL,
16708/* 9C */ NULL, NULL, "pfadd", NULL,
16709/* A0 */ "pfcmpgt", NULL, NULL, NULL,
16710/* A4 */ "pfmax", NULL, "pfrcpit1", "pfrsqit1",
16711/* A8 */ NULL, NULL, "pfsubr", NULL,
16712/* AC */ NULL, NULL, "pfacc", NULL,
16713/* B0 */ "pfcmpeq", NULL, NULL, NULL,
9beff690 16714/* B4 */ "pfmul", NULL, "pfrcpit2", "pmulhrw",
9e525108 16715/* B8 */ NULL, NULL, NULL, "pswapd",
252b5132
RH
16716/* BC */ NULL, NULL, NULL, "pavgusb",
16717/* C0 */ NULL, NULL, NULL, NULL,
16718/* C4 */ NULL, NULL, NULL, NULL,
16719/* C8 */ NULL, NULL, NULL, NULL,
16720/* CC */ NULL, NULL, NULL, NULL,
16721/* D0 */ NULL, NULL, NULL, NULL,
16722/* D4 */ NULL, NULL, NULL, NULL,
16723/* D8 */ NULL, NULL, NULL, NULL,
16724/* DC */ NULL, NULL, NULL, NULL,
16725/* E0 */ NULL, NULL, NULL, NULL,
16726/* E4 */ NULL, NULL, NULL, NULL,
16727/* E8 */ NULL, NULL, NULL, NULL,
16728/* EC */ NULL, NULL, NULL, NULL,
16729/* F0 */ NULL, NULL, NULL, NULL,
16730/* F4 */ NULL, NULL, NULL, NULL,
16731/* F8 */ NULL, NULL, NULL, NULL,
16732/* FC */ NULL, NULL, NULL, NULL,
16733};
16734
16735static void
26ca5450 16736OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132
RH
16737{
16738 const char *mnemonic;
16739
16740 FETCH_DATA (the_info, codep + 1);
16741 /* AMD 3DNow! instructions are specified by an opcode suffix in the
16742 place where an 8-bit immediate would normally go. ie. the last
16743 byte of the instruction. */
ea397f5b 16744 obufp = mnemonicendp;
c608c12e 16745 mnemonic = Suffix3DNow[*codep++ & 0xff];
252b5132 16746 if (mnemonic)
2da11e11 16747 oappend (mnemonic);
252b5132
RH
16748 else
16749 {
16750 /* Since a variable sized modrm/sib chunk is between the start
16751 of the opcode (0x0f0f) and the opcode suffix, we need to do
16752 all the modrm processing first, and don't know until now that
16753 we have a bad opcode. This necessitates some cleaning up. */
ce518a5f
L
16754 op_out[0][0] = '\0';
16755 op_out[1][0] = '\0';
6608db57 16756 BadOp ();
252b5132 16757 }
ea397f5b 16758 mnemonicendp = obufp;
252b5132 16759}
c608c12e 16760
ea397f5b
L
16761static struct op simd_cmp_op[] =
16762{
16763 { STRING_COMMA_LEN ("eq") },
16764 { STRING_COMMA_LEN ("lt") },
16765 { STRING_COMMA_LEN ("le") },
16766 { STRING_COMMA_LEN ("unord") },
16767 { STRING_COMMA_LEN ("neq") },
16768 { STRING_COMMA_LEN ("nlt") },
16769 { STRING_COMMA_LEN ("nle") },
16770 { STRING_COMMA_LEN ("ord") }
c608c12e
AM
16771};
16772
16773static void
ad19981d 16774CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
c608c12e
AM
16775{
16776 unsigned int cmp_type;
16777
16778 FETCH_DATA (the_info, codep + 1);
16779 cmp_type = *codep++ & 0xff;
c0f3af97 16780 if (cmp_type < ARRAY_SIZE (simd_cmp_op))
c608c12e 16781 {
ad19981d 16782 char suffix [3];
ea397f5b 16783 char *p = mnemonicendp - 2;
ad19981d
L
16784 suffix[0] = p[0];
16785 suffix[1] = p[1];
16786 suffix[2] = '\0';
ea397f5b
L
16787 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
16788 mnemonicendp += simd_cmp_op[cmp_type].len;
c608c12e
AM
16789 }
16790 else
16791 {
ad19981d
L
16792 /* We have a reserved extension byte. Output it directly. */
16793 scratchbuf[0] = '$';
16794 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 16795 oappend_maybe_intel (scratchbuf);
ad19981d 16796 scratchbuf[0] = '\0';
c608c12e
AM
16797 }
16798}
16799
9916071f
AP
16800static void
16801OP_Mwaitx (int bytemode ATTRIBUTE_UNUSED,
16802 int sizeflag ATTRIBUTE_UNUSED)
16803{
16804 /* mwaitx %eax,%ecx,%ebx */
16805 if (!intel_syntax)
16806 {
16807 const char **names = (address_mode == mode_64bit
16808 ? names64 : names32);
16809 strcpy (op_out[0], names[0]);
16810 strcpy (op_out[1], names[1]);
16811 strcpy (op_out[2], names[3]);
16812 two_source_ops = 1;
16813 }
16814 /* Skip mod/rm byte. */
16815 MODRM_CHECK;
16816 codep++;
16817}
16818
ca164297 16819static void
b844680a
L
16820OP_Mwait (int bytemode ATTRIBUTE_UNUSED,
16821 int sizeflag ATTRIBUTE_UNUSED)
16822{
16823 /* mwait %eax,%ecx */
16824 if (!intel_syntax)
16825 {
16826 const char **names = (address_mode == mode_64bit
16827 ? names64 : names32);
16828 strcpy (op_out[0], names[0]);
16829 strcpy (op_out[1], names[1]);
16830 two_source_ops = 1;
16831 }
16832 /* Skip mod/rm byte. */
16833 MODRM_CHECK;
16834 codep++;
16835}
16836
16837static void
16838OP_Monitor (int bytemode ATTRIBUTE_UNUSED,
16839 int sizeflag ATTRIBUTE_UNUSED)
ca164297 16840{
b844680a
L
16841 /* monitor %eax,%ecx,%edx" */
16842 if (!intel_syntax)
ca164297 16843 {
b844680a 16844 const char **op1_names;
cb712a9e
L
16845 const char **names = (address_mode == mode_64bit
16846 ? names64 : names32);
1d9f512f 16847
b844680a
L
16848 if (!(prefixes & PREFIX_ADDR))
16849 op1_names = (address_mode == mode_16bit
16850 ? names16 : names);
ca164297
L
16851 else
16852 {
b844680a 16853 /* Remove "addr16/addr32". */
f16cd0d5 16854 all_prefixes[last_addr_prefix] = 0;
b844680a
L
16855 op1_names = (address_mode != mode_32bit
16856 ? names32 : names16);
16857 used_prefixes |= PREFIX_ADDR;
ca164297 16858 }
b844680a
L
16859 strcpy (op_out[0], op1_names[0]);
16860 strcpy (op_out[1], names[1]);
16861 strcpy (op_out[2], names[2]);
16862 two_source_ops = 1;
ca164297 16863 }
b844680a
L
16864 /* Skip mod/rm byte. */
16865 MODRM_CHECK;
16866 codep++;
30123838
JB
16867}
16868
6608db57
KH
16869static void
16870BadOp (void)
2da11e11 16871{
6608db57
KH
16872 /* Throw away prefixes and 1st. opcode byte. */
16873 codep = insn_codep + 1;
2da11e11
AM
16874 oappend ("(bad)");
16875}
4cc91dba 16876
35c52694
L
16877static void
16878REP_Fixup (int bytemode, int sizeflag)
16879{
16880 /* The 0xf3 prefix should be displayed as "rep" for ins, outs, movs,
16881 lods and stos. */
35c52694 16882 if (prefixes & PREFIX_REPZ)
f16cd0d5 16883 all_prefixes[last_repz_prefix] = REP_PREFIX;
35c52694
L
16884
16885 switch (bytemode)
16886 {
16887 case al_reg:
16888 case eAX_reg:
16889 case indir_dx_reg:
16890 OP_IMREG (bytemode, sizeflag);
16891 break;
16892 case eDI_reg:
16893 OP_ESreg (bytemode, sizeflag);
16894 break;
16895 case eSI_reg:
16896 OP_DSreg (bytemode, sizeflag);
16897 break;
16898 default:
16899 abort ();
16900 break;
16901 }
16902}
f5804c90 16903
7e8b059b
L
16904/* For BND-prefixed instructions 0xF2 prefix should be displayed as
16905 "bnd". */
16906
16907static void
16908BND_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16909{
16910 if (prefixes & PREFIX_REPNZ)
16911 all_prefixes[last_repnz_prefix] = BND_PREFIX;
16912}
16913
04ef582a
L
16914/* For NOTRACK-prefixed instructions, 0x3E prefix should be displayed as
16915 "notrack". */
16916
16917static void
16918NOTRACK_Fixup (int bytemode ATTRIBUTE_UNUSED,
16919 int sizeflag ATTRIBUTE_UNUSED)
16920{
9fef80d6 16921 if (active_seg_prefix == PREFIX_DS
04ef582a
L
16922 && (address_mode != mode_64bit || last_data_prefix < 0))
16923 {
4e9ac44a 16924 /* NOTRACK prefix is only valid on indirect branch instructions.
9fef80d6 16925 NB: DATA prefix is unsupported for Intel64. */
04ef582a
L
16926 active_seg_prefix = 0;
16927 all_prefixes[last_seg_prefix] = NOTRACK_PREFIX;
16928 }
16929}
16930
42164a71
L
16931/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
16932 "xacquire"/"xrelease" for memory operand if there is a LOCK prefix.
16933 */
16934
16935static void
16936HLE_Fixup1 (int bytemode, int sizeflag)
16937{
16938 if (modrm.mod != 3
16939 && (prefixes & PREFIX_LOCK) != 0)
16940 {
16941 if (prefixes & PREFIX_REPZ)
16942 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
16943 if (prefixes & PREFIX_REPNZ)
16944 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
16945 }
16946
16947 OP_E (bytemode, sizeflag);
16948}
16949
16950/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
16951 "xacquire"/"xrelease" for memory operand. No check for LOCK prefix.
16952 */
16953
16954static void
16955HLE_Fixup2 (int bytemode, int sizeflag)
16956{
16957 if (modrm.mod != 3)
16958 {
16959 if (prefixes & PREFIX_REPZ)
16960 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
16961 if (prefixes & PREFIX_REPNZ)
16962 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
16963 }
16964
16965 OP_E (bytemode, sizeflag);
16966}
16967
16968/* Similar to OP_E. But the 0xf3 prefixes should be displayed as
16969 "xrelease" for memory operand. No check for LOCK prefix. */
16970
16971static void
16972HLE_Fixup3 (int bytemode, int sizeflag)
16973{
16974 if (modrm.mod != 3
16975 && last_repz_prefix > last_repnz_prefix
16976 && (prefixes & PREFIX_REPZ) != 0)
16977 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
16978
16979 OP_E (bytemode, sizeflag);
16980}
16981
f5804c90
L
16982static void
16983CMPXCHG8B_Fixup (int bytemode, int sizeflag)
16984{
161a04f6
L
16985 USED_REX (REX_W);
16986 if (rex & REX_W)
f5804c90
L
16987 {
16988 /* Change cmpxchg8b to cmpxchg16b. */
ea397f5b
L
16989 char *p = mnemonicendp - 2;
16990 mnemonicendp = stpcpy (p, "16b");
fb9c77c7 16991 bytemode = o_mode;
f5804c90 16992 }
42164a71
L
16993 else if ((prefixes & PREFIX_LOCK) != 0)
16994 {
16995 if (prefixes & PREFIX_REPZ)
16996 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
16997 if (prefixes & PREFIX_REPNZ)
16998 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
16999 }
17000
f5804c90
L
17001 OP_M (bytemode, sizeflag);
17002}
42903f7f
L
17003
17004static void
17005XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED)
17006{
b9733481
L
17007 const char **names;
17008
c0f3af97
L
17009 if (need_vex)
17010 {
17011 switch (vex.length)
17012 {
17013 case 128:
b9733481 17014 names = names_xmm;
c0f3af97
L
17015 break;
17016 case 256:
b9733481 17017 names = names_ymm;
c0f3af97
L
17018 break;
17019 default:
17020 abort ();
17021 }
17022 }
17023 else
b9733481
L
17024 names = names_xmm;
17025 oappend (names[reg]);
42903f7f 17026}
381d071f
L
17027
17028static void
17029CRC32_Fixup (int bytemode, int sizeflag)
17030{
17031 /* Add proper suffix to "crc32". */
ea397f5b 17032 char *p = mnemonicendp;
381d071f
L
17033
17034 switch (bytemode)
17035 {
17036 case b_mode:
20592a94 17037 if (intel_syntax)
ea397f5b 17038 goto skip;
20592a94 17039
381d071f
L
17040 *p++ = 'b';
17041 break;
17042 case v_mode:
20592a94 17043 if (intel_syntax)
ea397f5b 17044 goto skip;
20592a94 17045
381d071f
L
17046 USED_REX (REX_W);
17047 if (rex & REX_W)
17048 *p++ = 'q';
7bb15c6f 17049 else
f16cd0d5
L
17050 {
17051 if (sizeflag & DFLAG)
17052 *p++ = 'l';
17053 else
17054 *p++ = 'w';
17055 used_prefixes |= (prefixes & PREFIX_DATA);
17056 }
381d071f
L
17057 break;
17058 default:
17059 oappend (INTERNAL_DISASSEMBLER_ERROR);
17060 break;
17061 }
ea397f5b 17062 mnemonicendp = p;
381d071f
L
17063 *p = '\0';
17064
ea397f5b 17065skip:
381d071f
L
17066 if (modrm.mod == 3)
17067 {
17068 int add;
17069
17070 /* Skip mod/rm byte. */
17071 MODRM_CHECK;
17072 codep++;
17073
17074 USED_REX (REX_B);
17075 add = (rex & REX_B) ? 8 : 0;
17076 if (bytemode == b_mode)
17077 {
17078 USED_REX (0);
17079 if (rex)
17080 oappend (names8rex[modrm.rm + add]);
17081 else
17082 oappend (names8[modrm.rm + add]);
17083 }
17084 else
17085 {
17086 USED_REX (REX_W);
17087 if (rex & REX_W)
17088 oappend (names64[modrm.rm + add]);
17089 else if ((prefixes & PREFIX_DATA))
17090 oappend (names16[modrm.rm + add]);
17091 else
17092 oappend (names32[modrm.rm + add]);
17093 }
17094 }
17095 else
9344ff29 17096 OP_E (bytemode, sizeflag);
381d071f 17097}
85f10a01 17098
eacc9c89
L
17099static void
17100FXSAVE_Fixup (int bytemode, int sizeflag)
17101{
17102 /* Add proper suffix to "fxsave" and "fxrstor". */
17103 USED_REX (REX_W);
17104 if (rex & REX_W)
17105 {
17106 char *p = mnemonicendp;
17107 *p++ = '6';
17108 *p++ = '4';
17109 *p = '\0';
17110 mnemonicendp = p;
17111 }
17112 OP_M (bytemode, sizeflag);
17113}
17114
15c7c1d8
JB
17115static void
17116PCMPESTR_Fixup (int bytemode, int sizeflag)
17117{
17118 /* Add proper suffix to "{,v}pcmpestr{i,m}". */
17119 if (!intel_syntax)
17120 {
17121 char *p = mnemonicendp;
17122
17123 USED_REX (REX_W);
17124 if (rex & REX_W)
17125 *p++ = 'q';
17126 else if (sizeflag & SUFFIX_ALWAYS)
17127 *p++ = 'l';
17128
17129 *p = '\0';
17130 mnemonicendp = p;
17131 }
17132
17133 OP_EX (bytemode, sizeflag);
17134}
17135
c0f3af97
L
17136/* Display the destination register operand for instructions with
17137 VEX. */
17138
17139static void
17140OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
17141{
539f890d 17142 int reg;
b9733481
L
17143 const char **names;
17144
c0f3af97
L
17145 if (!need_vex)
17146 abort ();
17147
17148 if (!need_vex_reg)
17149 return;
17150
539f890d 17151 reg = vex.register_specifier;
5f847646
JB
17152 if (address_mode != mode_64bit)
17153 reg &= 7;
17154 else if (vex.evex && !vex.v)
17155 reg += 16;
43234a1e 17156
539f890d
L
17157 if (bytemode == vex_scalar_mode)
17158 {
17159 oappend (names_xmm[reg]);
17160 return;
17161 }
17162
c0f3af97
L
17163 switch (vex.length)
17164 {
17165 case 128:
17166 switch (bytemode)
17167 {
17168 case vex_mode:
17169 case vex128_mode:
6c30d220 17170 case vex_vsib_q_w_dq_mode:
5fc35d96 17171 case vex_vsib_q_w_d_mode:
cb21baef
L
17172 names = names_xmm;
17173 break;
17174 case dq_mode:
390a6789 17175 if (rex & REX_W)
cb21baef
L
17176 names = names64;
17177 else
17178 names = names32;
c0f3af97 17179 break;
1ba585e8 17180 case mask_bd_mode:
43234a1e 17181 case mask_mode:
9889cbb1
L
17182 if (reg > 0x7)
17183 {
17184 oappend ("(bad)");
17185 return;
17186 }
43234a1e
L
17187 names = names_mask;
17188 break;
c0f3af97
L
17189 default:
17190 abort ();
17191 return;
17192 }
c0f3af97
L
17193 break;
17194 case 256:
17195 switch (bytemode)
17196 {
17197 case vex_mode:
17198 case vex256_mode:
6c30d220
L
17199 names = names_ymm;
17200 break;
17201 case vex_vsib_q_w_dq_mode:
5fc35d96 17202 case vex_vsib_q_w_d_mode:
6c30d220 17203 names = vex.w ? names_ymm : names_xmm;
c0f3af97 17204 break;
1ba585e8 17205 case mask_bd_mode:
43234a1e 17206 case mask_mode:
9889cbb1
L
17207 if (reg > 0x7)
17208 {
17209 oappend ("(bad)");
17210 return;
17211 }
43234a1e
L
17212 names = names_mask;
17213 break;
c0f3af97 17214 default:
a37a2806
NC
17215 /* See PR binutils/20893 for a reproducer. */
17216 oappend ("(bad)");
c0f3af97
L
17217 return;
17218 }
c0f3af97 17219 break;
43234a1e
L
17220 case 512:
17221 names = names_zmm;
17222 break;
c0f3af97
L
17223 default:
17224 abort ();
17225 break;
17226 }
539f890d 17227 oappend (names[reg]);
c0f3af97
L
17228}
17229
922d8de8
DR
17230/* Get the VEX immediate byte without moving codep. */
17231
17232static unsigned char
ccc5981b 17233get_vex_imm8 (int sizeflag, int opnum)
922d8de8
DR
17234{
17235 int bytes_before_imm = 0;
17236
922d8de8
DR
17237 if (modrm.mod != 3)
17238 {
17239 /* There are SIB/displacement bytes. */
17240 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
6c067bbb 17241 {
922d8de8 17242 /* 32/64 bit address mode */
6c067bbb 17243 int base = modrm.rm;
922d8de8
DR
17244
17245 /* Check SIB byte. */
6c067bbb
RM
17246 if (base == 4)
17247 {
17248 FETCH_DATA (the_info, codep + 1);
17249 base = *codep & 7;
17250 /* When decoding the third source, don't increase
17251 bytes_before_imm as this has already been incremented
17252 by one in OP_E_memory while decoding the second
17253 source operand. */
17254 if (opnum == 0)
17255 bytes_before_imm++;
17256 }
17257
17258 /* Don't increase bytes_before_imm when decoding the third source,
17259 it has already been incremented by OP_E_memory while decoding
17260 the second source operand. */
17261 if (opnum == 0)
17262 {
17263 switch (modrm.mod)
17264 {
17265 case 0:
17266 /* When modrm.rm == 5 or modrm.rm == 4 and base in
17267 SIB == 5, there is a 4 byte displacement. */
17268 if (base != 5)
17269 /* No displacement. */
17270 break;
1a0670f3 17271 /* Fall through. */
6c067bbb
RM
17272 case 2:
17273 /* 4 byte displacement. */
17274 bytes_before_imm += 4;
17275 break;
17276 case 1:
17277 /* 1 byte displacement. */
17278 bytes_before_imm++;
17279 break;
17280 }
17281 }
17282 }
922d8de8 17283 else
02e647f9
SP
17284 {
17285 /* 16 bit address mode */
6c067bbb
RM
17286 /* Don't increase bytes_before_imm when decoding the third source,
17287 it has already been incremented by OP_E_memory while decoding
17288 the second source operand. */
17289 if (opnum == 0)
17290 {
02e647f9
SP
17291 switch (modrm.mod)
17292 {
17293 case 0:
17294 /* When modrm.rm == 6, there is a 2 byte displacement. */
17295 if (modrm.rm != 6)
17296 /* No displacement. */
17297 break;
1a0670f3 17298 /* Fall through. */
02e647f9
SP
17299 case 2:
17300 /* 2 byte displacement. */
17301 bytes_before_imm += 2;
17302 break;
17303 case 1:
17304 /* 1 byte displacement: when decoding the third source,
17305 don't increase bytes_before_imm as this has already
17306 been incremented by one in OP_E_memory while decoding
17307 the second source operand. */
17308 if (opnum == 0)
17309 bytes_before_imm++;
ccc5981b 17310
02e647f9
SP
17311 break;
17312 }
922d8de8
DR
17313 }
17314 }
17315 }
17316
17317 FETCH_DATA (the_info, codep + bytes_before_imm + 1);
17318 return codep [bytes_before_imm];
17319}
17320
17321static void
17322OP_EX_VexReg (int bytemode, int sizeflag, int reg)
17323{
b9733481
L
17324 const char **names;
17325
922d8de8
DR
17326 if (reg == -1 && modrm.mod != 3)
17327 {
17328 OP_E_memory (bytemode, sizeflag);
17329 return;
17330 }
17331 else
17332 {
17333 if (reg == -1)
17334 {
17335 reg = modrm.rm;
17336 USED_REX (REX_B);
17337 if (rex & REX_B)
17338 reg += 8;
17339 }
5f847646
JB
17340 if (address_mode != mode_64bit)
17341 reg &= 7;
922d8de8
DR
17342 }
17343
17344 switch (vex.length)
17345 {
17346 case 128:
b9733481 17347 names = names_xmm;
922d8de8
DR
17348 break;
17349 case 256:
b9733481 17350 names = names_ymm;
922d8de8
DR
17351 break;
17352 default:
17353 abort ();
17354 }
b9733481 17355 oappend (names[reg]);
922d8de8
DR
17356}
17357
a683cc34
SP
17358static void
17359OP_EX_VexImmW (int bytemode, int sizeflag)
17360{
17361 int reg = -1;
17362 static unsigned char vex_imm8;
17363
17364 if (vex_w_done == 0)
17365 {
17366 vex_w_done = 1;
17367
17368 /* Skip mod/rm byte. */
17369 MODRM_CHECK;
17370 codep++;
17371
17372 vex_imm8 = get_vex_imm8 (sizeflag, 0);
17373
17374 if (vex.w)
17375 reg = vex_imm8 >> 4;
17376
17377 OP_EX_VexReg (bytemode, sizeflag, reg);
17378 }
17379 else if (vex_w_done == 1)
17380 {
17381 vex_w_done = 2;
17382
17383 if (!vex.w)
17384 reg = vex_imm8 >> 4;
17385
17386 OP_EX_VexReg (bytemode, sizeflag, reg);
17387 }
17388 else
17389 {
17390 /* Output the imm8 directly. */
17391 scratchbuf[0] = '$';
17392 print_operand_value (scratchbuf + 1, 1, vex_imm8 & 0xf);
9ce09ba2 17393 oappend_maybe_intel (scratchbuf);
a683cc34
SP
17394 scratchbuf[0] = '\0';
17395 codep++;
17396 }
17397}
17398
5dd85c99
SP
17399static void
17400OP_Vex_2src (int bytemode, int sizeflag)
17401{
17402 if (modrm.mod == 3)
17403 {
b9733481 17404 int reg = modrm.rm;
5dd85c99 17405 USED_REX (REX_B);
b9733481
L
17406 if (rex & REX_B)
17407 reg += 8;
17408 oappend (names_xmm[reg]);
5dd85c99
SP
17409 }
17410 else
17411 {
17412 if (intel_syntax
17413 && (bytemode == v_mode || bytemode == v_swap_mode))
17414 {
17415 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
17416 used_prefixes |= (prefixes & PREFIX_DATA);
17417 }
17418 OP_E (bytemode, sizeflag);
17419 }
17420}
17421
17422static void
17423OP_Vex_2src_1 (int bytemode, int sizeflag)
17424{
17425 if (modrm.mod == 3)
17426 {
17427 /* Skip mod/rm byte. */
17428 MODRM_CHECK;
17429 codep++;
17430 }
17431
17432 if (vex.w)
5f847646
JB
17433 {
17434 unsigned int reg = vex.register_specifier;
17435
17436 if (address_mode != mode_64bit)
17437 reg &= 7;
17438 oappend (names_xmm[reg]);
17439 }
5dd85c99
SP
17440 else
17441 OP_Vex_2src (bytemode, sizeflag);
17442}
17443
17444static void
17445OP_Vex_2src_2 (int bytemode, int sizeflag)
17446{
17447 if (vex.w)
17448 OP_Vex_2src (bytemode, sizeflag);
17449 else
5f847646
JB
17450 {
17451 unsigned int reg = vex.register_specifier;
17452
17453 if (address_mode != mode_64bit)
17454 reg &= 7;
17455 oappend (names_xmm[reg]);
17456 }
5dd85c99
SP
17457}
17458
922d8de8
DR
17459static void
17460OP_EX_VexW (int bytemode, int sizeflag)
17461{
17462 int reg = -1;
17463
17464 if (!vex_w_done)
17465 {
41effecb
SP
17466 /* Skip mod/rm byte. */
17467 MODRM_CHECK;
17468 codep++;
17469
922d8de8 17470 if (vex.w)
ccc5981b 17471 reg = get_vex_imm8 (sizeflag, 0) >> 4;
922d8de8
DR
17472 }
17473 else
17474 {
17475 if (!vex.w)
ccc5981b 17476 reg = get_vex_imm8 (sizeflag, 1) >> 4;
922d8de8
DR
17477 }
17478
17479 OP_EX_VexReg (bytemode, sizeflag, reg);
922d8de8 17480
3a2430e0
JB
17481 if (vex_w_done)
17482 codep++;
17483 vex_w_done = 1;
922d8de8
DR
17484}
17485
c0f3af97
L
17486static void
17487OP_REG_VexI4 (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
17488{
17489 int reg;
b9733481
L
17490 const char **names;
17491
c0f3af97
L
17492 FETCH_DATA (the_info, codep + 1);
17493 reg = *codep++;
17494
17495 if (bytemode != x_mode)
17496 abort ();
17497
c0f3af97 17498 reg >>= 4;
5f847646
JB
17499 if (address_mode != mode_64bit)
17500 reg &= 7;
dae39acc 17501
c0f3af97
L
17502 switch (vex.length)
17503 {
17504 case 128:
b9733481 17505 names = names_xmm;
c0f3af97
L
17506 break;
17507 case 256:
b9733481 17508 names = names_ymm;
c0f3af97
L
17509 break;
17510 default:
17511 abort ();
17512 }
b9733481 17513 oappend (names[reg]);
c0f3af97
L
17514}
17515
922d8de8
DR
17516static void
17517OP_XMM_VexW (int bytemode, int sizeflag)
17518{
17519 /* Turn off the REX.W bit since it is used for swapping operands
17520 now. */
17521 rex &= ~REX_W;
17522 OP_XMM (bytemode, sizeflag);
17523}
17524
c0f3af97
L
17525static void
17526OP_EX_Vex (int bytemode, int sizeflag)
17527{
17528 if (modrm.mod != 3)
17529 {
17530 if (vex.register_specifier != 0)
17531 BadOp ();
17532 need_vex_reg = 0;
17533 }
17534 OP_EX (bytemode, sizeflag);
17535}
17536
17537static void
17538OP_XMM_Vex (int bytemode, int sizeflag)
17539{
17540 if (modrm.mod != 3)
17541 {
17542 if (vex.register_specifier != 0)
17543 BadOp ();
17544 need_vex_reg = 0;
17545 }
17546 OP_XMM (bytemode, sizeflag);
17547}
17548
17549static void
17550VZERO_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
17551{
17552 switch (vex.length)
17553 {
17554 case 128:
ea397f5b 17555 mnemonicendp = stpcpy (obuf, "vzeroupper");
c0f3af97
L
17556 break;
17557 case 256:
ea397f5b 17558 mnemonicendp = stpcpy (obuf, "vzeroall");
c0f3af97
L
17559 break;
17560 default:
17561 abort ();
17562 }
17563}
17564
ea397f5b
L
17565static struct op vex_cmp_op[] =
17566{
17567 { STRING_COMMA_LEN ("eq") },
17568 { STRING_COMMA_LEN ("lt") },
17569 { STRING_COMMA_LEN ("le") },
17570 { STRING_COMMA_LEN ("unord") },
17571 { STRING_COMMA_LEN ("neq") },
17572 { STRING_COMMA_LEN ("nlt") },
17573 { STRING_COMMA_LEN ("nle") },
17574 { STRING_COMMA_LEN ("ord") },
17575 { STRING_COMMA_LEN ("eq_uq") },
17576 { STRING_COMMA_LEN ("nge") },
17577 { STRING_COMMA_LEN ("ngt") },
17578 { STRING_COMMA_LEN ("false") },
17579 { STRING_COMMA_LEN ("neq_oq") },
17580 { STRING_COMMA_LEN ("ge") },
17581 { STRING_COMMA_LEN ("gt") },
17582 { STRING_COMMA_LEN ("true") },
17583 { STRING_COMMA_LEN ("eq_os") },
17584 { STRING_COMMA_LEN ("lt_oq") },
17585 { STRING_COMMA_LEN ("le_oq") },
17586 { STRING_COMMA_LEN ("unord_s") },
17587 { STRING_COMMA_LEN ("neq_us") },
17588 { STRING_COMMA_LEN ("nlt_uq") },
17589 { STRING_COMMA_LEN ("nle_uq") },
17590 { STRING_COMMA_LEN ("ord_s") },
17591 { STRING_COMMA_LEN ("eq_us") },
17592 { STRING_COMMA_LEN ("nge_uq") },
17593 { STRING_COMMA_LEN ("ngt_uq") },
17594 { STRING_COMMA_LEN ("false_os") },
17595 { STRING_COMMA_LEN ("neq_os") },
17596 { STRING_COMMA_LEN ("ge_oq") },
17597 { STRING_COMMA_LEN ("gt_oq") },
17598 { STRING_COMMA_LEN ("true_us") },
c0f3af97
L
17599};
17600
17601static void
17602VCMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
17603{
17604 unsigned int cmp_type;
17605
17606 FETCH_DATA (the_info, codep + 1);
17607 cmp_type = *codep++ & 0xff;
17608 if (cmp_type < ARRAY_SIZE (vex_cmp_op))
17609 {
17610 char suffix [3];
ea397f5b 17611 char *p = mnemonicendp - 2;
c0f3af97
L
17612 suffix[0] = p[0];
17613 suffix[1] = p[1];
17614 suffix[2] = '\0';
ea397f5b
L
17615 sprintf (p, "%s%s", vex_cmp_op[cmp_type].name, suffix);
17616 mnemonicendp += vex_cmp_op[cmp_type].len;
c0f3af97
L
17617 }
17618 else
17619 {
17620 /* We have a reserved extension byte. Output it directly. */
17621 scratchbuf[0] = '$';
17622 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 17623 oappend_maybe_intel (scratchbuf);
c0f3af97
L
17624 scratchbuf[0] = '\0';
17625 }
17626}
17627
43234a1e
L
17628static void
17629VPCMP_Fixup (int bytemode ATTRIBUTE_UNUSED,
17630 int sizeflag ATTRIBUTE_UNUSED)
17631{
17632 unsigned int cmp_type;
17633
17634 if (!vex.evex)
17635 abort ();
17636
17637 FETCH_DATA (the_info, codep + 1);
17638 cmp_type = *codep++ & 0xff;
17639 /* There are aliases for immediates 0, 1, 2, 4, 5, 6.
17640 If it's the case, print suffix, otherwise - print the immediate. */
17641 if (cmp_type < ARRAY_SIZE (simd_cmp_op)
17642 && cmp_type != 3
17643 && cmp_type != 7)
17644 {
17645 char suffix [3];
17646 char *p = mnemonicendp - 2;
17647
17648 /* vpcmp* can have both one- and two-lettered suffix. */
17649 if (p[0] == 'p')
17650 {
17651 p++;
17652 suffix[0] = p[0];
17653 suffix[1] = '\0';
17654 }
17655 else
17656 {
17657 suffix[0] = p[0];
17658 suffix[1] = p[1];
17659 suffix[2] = '\0';
17660 }
17661
17662 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
17663 mnemonicendp += simd_cmp_op[cmp_type].len;
17664 }
be92cb14
JB
17665 else
17666 {
17667 /* We have a reserved extension byte. Output it directly. */
17668 scratchbuf[0] = '$';
17669 print_operand_value (scratchbuf + 1, 1, cmp_type);
17670 oappend_maybe_intel (scratchbuf);
17671 scratchbuf[0] = '\0';
17672 }
17673}
17674
17675static const struct op xop_cmp_op[] =
17676{
17677 { STRING_COMMA_LEN ("lt") },
17678 { STRING_COMMA_LEN ("le") },
17679 { STRING_COMMA_LEN ("gt") },
17680 { STRING_COMMA_LEN ("ge") },
17681 { STRING_COMMA_LEN ("eq") },
17682 { STRING_COMMA_LEN ("neq") },
17683 { STRING_COMMA_LEN ("false") },
17684 { STRING_COMMA_LEN ("true") }
17685};
17686
17687static void
17688VPCOM_Fixup (int bytemode ATTRIBUTE_UNUSED,
17689 int sizeflag ATTRIBUTE_UNUSED)
17690{
17691 unsigned int cmp_type;
17692
17693 FETCH_DATA (the_info, codep + 1);
17694 cmp_type = *codep++ & 0xff;
17695 if (cmp_type < ARRAY_SIZE (xop_cmp_op))
17696 {
17697 char suffix[3];
17698 char *p = mnemonicendp - 2;
17699
17700 /* vpcom* can have both one- and two-lettered suffix. */
17701 if (p[0] == 'm')
17702 {
17703 p++;
17704 suffix[0] = p[0];
17705 suffix[1] = '\0';
17706 }
17707 else
17708 {
17709 suffix[0] = p[0];
17710 suffix[1] = p[1];
17711 suffix[2] = '\0';
17712 }
17713
17714 sprintf (p, "%s%s", xop_cmp_op[cmp_type].name, suffix);
17715 mnemonicendp += xop_cmp_op[cmp_type].len;
17716 }
43234a1e
L
17717 else
17718 {
17719 /* We have a reserved extension byte. Output it directly. */
17720 scratchbuf[0] = '$';
17721 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 17722 oappend_maybe_intel (scratchbuf);
43234a1e
L
17723 scratchbuf[0] = '\0';
17724 }
17725}
17726
ea397f5b
L
17727static const struct op pclmul_op[] =
17728{
17729 { STRING_COMMA_LEN ("lql") },
17730 { STRING_COMMA_LEN ("hql") },
17731 { STRING_COMMA_LEN ("lqh") },
17732 { STRING_COMMA_LEN ("hqh") }
c0f3af97
L
17733};
17734
17735static void
17736PCLMUL_Fixup (int bytemode ATTRIBUTE_UNUSED,
17737 int sizeflag ATTRIBUTE_UNUSED)
17738{
17739 unsigned int pclmul_type;
17740
17741 FETCH_DATA (the_info, codep + 1);
17742 pclmul_type = *codep++ & 0xff;
17743 switch (pclmul_type)
17744 {
17745 case 0x10:
17746 pclmul_type = 2;
17747 break;
17748 case 0x11:
17749 pclmul_type = 3;
17750 break;
17751 default:
17752 break;
7bb15c6f 17753 }
c0f3af97
L
17754 if (pclmul_type < ARRAY_SIZE (pclmul_op))
17755 {
17756 char suffix [4];
ea397f5b 17757 char *p = mnemonicendp - 3;
c0f3af97
L
17758 suffix[0] = p[0];
17759 suffix[1] = p[1];
17760 suffix[2] = p[2];
17761 suffix[3] = '\0';
ea397f5b
L
17762 sprintf (p, "%s%s", pclmul_op[pclmul_type].name, suffix);
17763 mnemonicendp += pclmul_op[pclmul_type].len;
c0f3af97
L
17764 }
17765 else
17766 {
17767 /* We have a reserved extension byte. Output it directly. */
17768 scratchbuf[0] = '$';
17769 print_operand_value (scratchbuf + 1, 1, pclmul_type);
9ce09ba2 17770 oappend_maybe_intel (scratchbuf);
c0f3af97
L
17771 scratchbuf[0] = '\0';
17772 }
17773}
17774
f1f8f695
L
17775static void
17776MOVBE_Fixup (int bytemode, int sizeflag)
17777{
17778 /* Add proper suffix to "movbe". */
ea397f5b 17779 char *p = mnemonicendp;
f1f8f695
L
17780
17781 switch (bytemode)
17782 {
17783 case v_mode:
17784 if (intel_syntax)
ea397f5b 17785 goto skip;
f1f8f695
L
17786
17787 USED_REX (REX_W);
17788 if (sizeflag & SUFFIX_ALWAYS)
17789 {
17790 if (rex & REX_W)
17791 *p++ = 'q';
f1f8f695 17792 else
f16cd0d5
L
17793 {
17794 if (sizeflag & DFLAG)
17795 *p++ = 'l';
17796 else
17797 *p++ = 'w';
17798 used_prefixes |= (prefixes & PREFIX_DATA);
17799 }
f1f8f695 17800 }
f1f8f695
L
17801 break;
17802 default:
17803 oappend (INTERNAL_DISASSEMBLER_ERROR);
17804 break;
17805 }
ea397f5b 17806 mnemonicendp = p;
f1f8f695
L
17807 *p = '\0';
17808
ea397f5b 17809skip:
f1f8f695
L
17810 OP_M (bytemode, sizeflag);
17811}
f88c9eb0
SP
17812
17813static void
17814OP_LWPCB_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
17815{
17816 int reg;
17817 const char **names;
17818
17819 /* Skip mod/rm byte. */
17820 MODRM_CHECK;
17821 codep++;
17822
390a6789 17823 if (rex & REX_W)
f88c9eb0 17824 names = names64;
f88c9eb0 17825 else
ce7d077e 17826 names = names32;
f88c9eb0
SP
17827
17828 reg = modrm.rm;
17829 USED_REX (REX_B);
17830 if (rex & REX_B)
17831 reg += 8;
17832
17833 oappend (names[reg]);
17834}
17835
17836static void
17837OP_LWP_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
17838{
17839 const char **names;
5f847646 17840 unsigned int reg = vex.register_specifier;
f88c9eb0 17841
390a6789 17842 if (rex & REX_W)
f88c9eb0 17843 names = names64;
f88c9eb0 17844 else
ce7d077e 17845 names = names32;
f88c9eb0 17846
5f847646
JB
17847 if (address_mode != mode_64bit)
17848 reg &= 7;
17849 oappend (names[reg]);
f88c9eb0 17850}
43234a1e
L
17851
17852static void
17853OP_Mask (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
17854{
17855 if (!vex.evex
1ba585e8 17856 || (bytemode != mask_mode && bytemode != mask_bd_mode))
43234a1e
L
17857 abort ();
17858
17859 USED_REX (REX_R);
17860 if ((rex & REX_R) != 0 || !vex.r)
17861 {
17862 BadOp ();
17863 return;
17864 }
17865
17866 oappend (names_mask [modrm.reg]);
17867}
17868
17869static void
17870OP_Rounding (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
17871{
17872 if (!vex.evex
17873 || (bytemode != evex_rounding_mode
17874 && bytemode != evex_sae_mode))
17875 abort ();
17876 if (modrm.mod == 3 && vex.b)
17877 switch (bytemode)
17878 {
17879 case evex_rounding_mode:
17880 oappend (names_rounding[vex.ll]);
17881 break;
17882 case evex_sae_mode:
17883 oappend ("{sae}");
17884 break;
17885 default:
17886 break;
17887 }
17888}
This page took 2.276575 seconds and 4 git commands to generate.