x86: Support Intel AVX512 BF16
[deliverable/binutils-gdb.git] / opcodes / i386-dis.c
CommitLineData
252b5132 1/* Print i386 instructions for GDB, the GNU debugger.
82704155 2 Copyright (C) 1988-2019 Free Software Foundation, Inc.
252b5132 3
9b201bb5 4 This file is part of the GNU opcodes library.
20f0a1fc 5
9b201bb5 6 This library is free software; you can redistribute it and/or modify
20f0a1fc 7 it under the terms of the GNU General Public License as published by
9b201bb5
NC
8 the Free Software Foundation; either version 3, or (at your option)
9 any later version.
20f0a1fc 10
9b201bb5
NC
11 It is distributed in the hope that it will be useful, but WITHOUT
12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
14 License for more details.
20f0a1fc
NC
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
9b201bb5
NC
18 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
19 MA 02110-1301, USA. */
20
20f0a1fc
NC
21
22/* 80386 instruction printer by Pace Willisson (pace@prep.ai.mit.edu)
23 July 1988
24 modified by John Hassey (hassey@dg-rtp.dg.com)
25 x86-64 support added by Jan Hubicka (jh@suse.cz)
26 VIA PadLock support by Michal Ludvig (mludvig@suse.cz). */
27
28/* The main tables describing the instructions is essentially a copy
29 of the "Opcode Map" chapter (Appendix A) of the Intel 80386
30 Programmers Manual. Usually, there is a capital letter, followed
31 by a small letter. The capital letter tell the addressing mode,
32 and the small letter tells about the operand size. Refer to
33 the Intel manual for details. */
252b5132 34
252b5132 35#include "sysdep.h"
88c1242d 36#include "disassemble.h"
252b5132 37#include "opintl.h"
0b1cf022 38#include "opcode/i386.h"
85f10a01 39#include "libiberty.h"
252b5132
RH
40
41#include <setjmp.h>
42
26ca5450
AJ
43static int print_insn (bfd_vma, disassemble_info *);
44static void dofloat (int);
45static void OP_ST (int, int);
46static void OP_STi (int, int);
47static int putop (const char *, int);
48static void oappend (const char *);
49static void append_seg (void);
50static void OP_indirE (int, int);
51static void print_operand_value (char *, int, bfd_vma);
c0f3af97 52static void OP_E_register (int, int);
c1e679ec 53static void OP_E_memory (int, int);
5d669648 54static void print_displacement (char *, bfd_vma);
26ca5450
AJ
55static void OP_E (int, int);
56static void OP_G (int, int);
57static bfd_vma get64 (void);
58static bfd_signed_vma get32 (void);
59static bfd_signed_vma get32s (void);
60static int get16 (void);
61static void set_op (bfd_vma, int);
b844680a 62static void OP_Skip_MODRM (int, int);
26ca5450
AJ
63static void OP_REG (int, int);
64static void OP_IMREG (int, int);
65static void OP_I (int, int);
66static void OP_I64 (int, int);
67static void OP_sI (int, int);
68static void OP_J (int, int);
69static void OP_SEG (int, int);
70static void OP_DIR (int, int);
71static void OP_OFF (int, int);
72static void OP_OFF64 (int, int);
73static void ptr_reg (int, int);
74static void OP_ESreg (int, int);
75static void OP_DSreg (int, int);
76static void OP_C (int, int);
77static void OP_D (int, int);
78static void OP_T (int, int);
6f74c397 79static void OP_R (int, int);
26ca5450
AJ
80static void OP_MMX (int, int);
81static void OP_XMM (int, int);
82static void OP_EM (int, int);
83static void OP_EX (int, int);
4d9567e0
MM
84static void OP_EMC (int,int);
85static void OP_MXC (int,int);
26ca5450
AJ
86static void OP_MS (int, int);
87static void OP_XS (int, int);
cc0ec051 88static void OP_M (int, int);
c0f3af97
L
89static void OP_VEX (int, int);
90static void OP_EX_Vex (int, int);
922d8de8 91static void OP_EX_VexW (int, int);
a683cc34 92static void OP_EX_VexImmW (int, int);
c0f3af97 93static void OP_XMM_Vex (int, int);
922d8de8 94static void OP_XMM_VexW (int, int);
43234a1e 95static void OP_Rounding (int, int);
c0f3af97
L
96static void OP_REG_VexI4 (int, int);
97static void PCLMUL_Fixup (int, int);
c0f3af97 98static void VCMP_Fixup (int, int);
43234a1e 99static void VPCMP_Fixup (int, int);
be92cb14 100static void VPCOM_Fixup (int, int);
cc0ec051 101static void OP_0f07 (int, int);
b844680a
L
102static void OP_Monitor (int, int);
103static void OP_Mwait (int, int);
9916071f 104static void OP_Mwaitx (int, int);
46e883c5
L
105static void NOP_Fixup1 (int, int);
106static void NOP_Fixup2 (int, int);
26ca5450 107static void OP_3DNowSuffix (int, int);
ad19981d 108static void CMP_Fixup (int, int);
26ca5450 109static void BadOp (void);
35c52694 110static void REP_Fixup (int, int);
7e8b059b 111static void BND_Fixup (int, int);
04ef582a 112static void NOTRACK_Fixup (int, int);
42164a71
L
113static void HLE_Fixup1 (int, int);
114static void HLE_Fixup2 (int, int);
115static void HLE_Fixup3 (int, int);
f5804c90 116static void CMPXCHG8B_Fixup (int, int);
42903f7f 117static void XMM_Fixup (int, int);
381d071f 118static void CRC32_Fixup (int, int);
eacc9c89 119static void FXSAVE_Fixup (int, int);
15c7c1d8 120static void PCMPESTR_Fixup (int, int);
f88c9eb0
SP
121static void OP_LWPCB_E (int, int);
122static void OP_LWP_E (int, int);
5dd85c99
SP
123static void OP_Vex_2src_1 (int, int);
124static void OP_Vex_2src_2 (int, int);
c1e679ec 125
f1f8f695 126static void MOVBE_Fixup (int, int);
252b5132 127
43234a1e
L
128static void OP_Mask (int, int);
129
6608db57 130struct dis_private {
252b5132
RH
131 /* Points to first byte not fetched. */
132 bfd_byte *max_fetched;
0b1cf022 133 bfd_byte the_buffer[MAX_MNEM_SIZE];
252b5132 134 bfd_vma insn_start;
e396998b 135 int orig_sizeflag;
8df14d78 136 OPCODES_SIGJMP_BUF bailout;
252b5132
RH
137};
138
cb712a9e
L
139enum address_mode
140{
141 mode_16bit,
142 mode_32bit,
143 mode_64bit
144};
145
146enum address_mode address_mode;
52b15da3 147
5076851f
ILT
148/* Flags for the prefixes for the current instruction. See below. */
149static int prefixes;
150
52b15da3
JH
151/* REX prefix the current instruction. See below. */
152static int rex;
153/* Bits of REX we've already used. */
154static int rex_used;
d869730d 155/* REX bits in original REX prefix ignored. */
c0f3af97 156static int rex_ignored;
52b15da3
JH
157/* Mark parts used in the REX prefix. When we are testing for
158 empty prefix (for 8bit register REX extension), just mask it
159 out. Otherwise test for REX bit is excuse for existence of REX
160 only in case value is nonzero. */
161#define USED_REX(value) \
162 { \
163 if (value) \
161a04f6
L
164 { \
165 if ((rex & value)) \
166 rex_used |= (value) | REX_OPCODE; \
167 } \
52b15da3 168 else \
161a04f6 169 rex_used |= REX_OPCODE; \
52b15da3
JH
170 }
171
7d421014
ILT
172/* Flags for prefixes which we somehow handled when printing the
173 current instruction. */
174static int used_prefixes;
175
5076851f
ILT
176/* Flags stored in PREFIXES. */
177#define PREFIX_REPZ 1
178#define PREFIX_REPNZ 2
179#define PREFIX_LOCK 4
180#define PREFIX_CS 8
181#define PREFIX_SS 0x10
182#define PREFIX_DS 0x20
183#define PREFIX_ES 0x40
184#define PREFIX_FS 0x80
185#define PREFIX_GS 0x100
186#define PREFIX_DATA 0x200
187#define PREFIX_ADDR 0x400
188#define PREFIX_FWAIT 0x800
189
252b5132
RH
190/* Make sure that bytes from INFO->PRIVATE_DATA->BUFFER (inclusive)
191 to ADDR (exclusive) are valid. Returns 1 for success, longjmps
192 on error. */
193#define FETCH_DATA(info, addr) \
6608db57 194 ((addr) <= ((struct dis_private *) (info->private_data))->max_fetched \
252b5132
RH
195 ? 1 : fetch_data ((info), (addr)))
196
197static int
26ca5450 198fetch_data (struct disassemble_info *info, bfd_byte *addr)
252b5132
RH
199{
200 int status;
6608db57 201 struct dis_private *priv = (struct dis_private *) info->private_data;
252b5132
RH
202 bfd_vma start = priv->insn_start + (priv->max_fetched - priv->the_buffer);
203
0b1cf022 204 if (addr <= priv->the_buffer + MAX_MNEM_SIZE)
272c9217
JB
205 status = (*info->read_memory_func) (start,
206 priv->max_fetched,
207 addr - priv->max_fetched,
208 info);
209 else
210 status = -1;
252b5132
RH
211 if (status != 0)
212 {
7d421014 213 /* If we did manage to read at least one byte, then
db6eb5be
AM
214 print_insn_i386 will do something sensible. Otherwise, print
215 an error. We do that here because this is where we know
216 STATUS. */
7d421014 217 if (priv->max_fetched == priv->the_buffer)
5076851f 218 (*info->memory_error_func) (status, start, info);
8df14d78 219 OPCODES_SIGLONGJMP (priv->bailout, 1);
252b5132
RH
220 }
221 else
222 priv->max_fetched = addr;
223 return 1;
224}
225
bf890a93 226/* Possible values for prefix requirement. */
507bd325
L
227#define PREFIX_IGNORED_SHIFT 16
228#define PREFIX_IGNORED_REPZ (PREFIX_REPZ << PREFIX_IGNORED_SHIFT)
229#define PREFIX_IGNORED_REPNZ (PREFIX_REPNZ << PREFIX_IGNORED_SHIFT)
230#define PREFIX_IGNORED_DATA (PREFIX_DATA << PREFIX_IGNORED_SHIFT)
231#define PREFIX_IGNORED_ADDR (PREFIX_ADDR << PREFIX_IGNORED_SHIFT)
232#define PREFIX_IGNORED_LOCK (PREFIX_LOCK << PREFIX_IGNORED_SHIFT)
233
234/* Opcode prefixes. */
235#define PREFIX_OPCODE (PREFIX_REPZ \
236 | PREFIX_REPNZ \
237 | PREFIX_DATA)
238
239/* Prefixes ignored. */
240#define PREFIX_IGNORED (PREFIX_IGNORED_REPZ \
241 | PREFIX_IGNORED_REPNZ \
242 | PREFIX_IGNORED_DATA)
bf890a93 243
ce518a5f 244#define XX { NULL, 0 }
507bd325 245#define Bad_Opcode NULL, { { NULL, 0 } }, 0
ce518a5f
L
246
247#define Eb { OP_E, b_mode }
7e8b059b 248#define Ebnd { OP_E, bnd_mode }
b6169b20 249#define EbS { OP_E, b_swap_mode }
9f79e886 250#define EbndS { OP_E, bnd_swap_mode }
ce518a5f 251#define Ev { OP_E, v_mode }
de89d0a3 252#define Eva { OP_E, va_mode }
7e8b059b 253#define Ev_bnd { OP_E, v_bnd_mode }
b6169b20 254#define EvS { OP_E, v_swap_mode }
ce518a5f
L
255#define Ed { OP_E, d_mode }
256#define Edq { OP_E, dq_mode }
257#define Edqw { OP_E, dqw_mode }
42903f7f 258#define Edqb { OP_E, dqb_mode }
1ba585e8
IT
259#define Edb { OP_E, db_mode }
260#define Edw { OP_E, dw_mode }
42903f7f 261#define Edqd { OP_E, dqd_mode }
d20dee9e 262#define Edqa { OP_E, dqa_mode }
09335d05 263#define Eq { OP_E, q_mode }
07f5af7d 264#define indirEv { OP_indirE, indir_v_mode }
ce518a5f
L
265#define indirEp { OP_indirE, f_mode }
266#define stackEv { OP_E, stack_v_mode }
267#define Em { OP_E, m_mode }
268#define Ew { OP_E, w_mode }
269#define M { OP_M, 0 } /* lea, lgdt, etc. */
34b772a6 270#define Ma { OP_M, a_mode }
b844680a 271#define Mb { OP_M, b_mode }
d9a5e5e5 272#define Md { OP_M, d_mode }
f1f8f695 273#define Mo { OP_M, o_mode }
ce518a5f
L
274#define Mp { OP_M, f_mode } /* 32 or 48 bit memory operand for LDS, LES etc */
275#define Mq { OP_M, q_mode }
d276ec69 276#define Mv_bnd { OP_M, v_bndmk_mode }
4ee52178 277#define Mx { OP_M, x_mode }
c0f3af97 278#define Mxmm { OP_M, xmm_mode }
ce518a5f 279#define Gb { OP_G, b_mode }
7e8b059b 280#define Gbnd { OP_G, bnd_mode }
ce518a5f
L
281#define Gv { OP_G, v_mode }
282#define Gd { OP_G, d_mode }
283#define Gdq { OP_G, dq_mode }
284#define Gm { OP_G, m_mode }
c0a30a9f 285#define Gva { OP_G, va_mode }
ce518a5f 286#define Gw { OP_G, w_mode }
6f74c397 287#define Rd { OP_R, d_mode }
43234a1e 288#define Rdq { OP_R, dq_mode }
6f74c397 289#define Rm { OP_R, m_mode }
ce518a5f
L
290#define Ib { OP_I, b_mode }
291#define sIb { OP_sI, b_mode } /* sign extened byte */
e3949f17 292#define sIbT { OP_sI, b_T_mode } /* sign extened byte like 'T' */
ce518a5f 293#define Iv { OP_I, v_mode }
7bb15c6f 294#define sIv { OP_sI, v_mode }
ce518a5f
L
295#define Iq { OP_I, q_mode }
296#define Iv64 { OP_I64, v_mode }
297#define Iw { OP_I, w_mode }
298#define I1 { OP_I, const_1_mode }
299#define Jb { OP_J, b_mode }
300#define Jv { OP_J, v_mode }
301#define Cm { OP_C, m_mode }
302#define Dm { OP_D, m_mode }
303#define Td { OP_T, d_mode }
b844680a 304#define Skip_MODRM { OP_Skip_MODRM, 0 }
ce518a5f
L
305
306#define RMeAX { OP_REG, eAX_reg }
307#define RMeBX { OP_REG, eBX_reg }
308#define RMeCX { OP_REG, eCX_reg }
309#define RMeDX { OP_REG, eDX_reg }
310#define RMeSP { OP_REG, eSP_reg }
311#define RMeBP { OP_REG, eBP_reg }
312#define RMeSI { OP_REG, eSI_reg }
313#define RMeDI { OP_REG, eDI_reg }
314#define RMrAX { OP_REG, rAX_reg }
315#define RMrBX { OP_REG, rBX_reg }
316#define RMrCX { OP_REG, rCX_reg }
317#define RMrDX { OP_REG, rDX_reg }
318#define RMrSP { OP_REG, rSP_reg }
319#define RMrBP { OP_REG, rBP_reg }
320#define RMrSI { OP_REG, rSI_reg }
321#define RMrDI { OP_REG, rDI_reg }
322#define RMAL { OP_REG, al_reg }
ce518a5f
L
323#define RMCL { OP_REG, cl_reg }
324#define RMDL { OP_REG, dl_reg }
325#define RMBL { OP_REG, bl_reg }
326#define RMAH { OP_REG, ah_reg }
327#define RMCH { OP_REG, ch_reg }
328#define RMDH { OP_REG, dh_reg }
329#define RMBH { OP_REG, bh_reg }
330#define RMAX { OP_REG, ax_reg }
331#define RMDX { OP_REG, dx_reg }
332
333#define eAX { OP_IMREG, eAX_reg }
334#define eBX { OP_IMREG, eBX_reg }
335#define eCX { OP_IMREG, eCX_reg }
336#define eDX { OP_IMREG, eDX_reg }
337#define eSP { OP_IMREG, eSP_reg }
338#define eBP { OP_IMREG, eBP_reg }
339#define eSI { OP_IMREG, eSI_reg }
340#define eDI { OP_IMREG, eDI_reg }
341#define AL { OP_IMREG, al_reg }
342#define CL { OP_IMREG, cl_reg }
343#define DL { OP_IMREG, dl_reg }
344#define BL { OP_IMREG, bl_reg }
345#define AH { OP_IMREG, ah_reg }
346#define CH { OP_IMREG, ch_reg }
347#define DH { OP_IMREG, dh_reg }
348#define BH { OP_IMREG, bh_reg }
349#define AX { OP_IMREG, ax_reg }
350#define DX { OP_IMREG, dx_reg }
351#define zAX { OP_IMREG, z_mode_ax_reg }
352#define indirDX { OP_IMREG, indir_dx_reg }
353
354#define Sw { OP_SEG, w_mode }
355#define Sv { OP_SEG, v_mode }
356#define Ap { OP_DIR, 0 }
357#define Ob { OP_OFF64, b_mode }
358#define Ov { OP_OFF64, v_mode }
359#define Xb { OP_DSreg, eSI_reg }
360#define Xv { OP_DSreg, eSI_reg }
361#define Xz { OP_DSreg, eSI_reg }
362#define Yb { OP_ESreg, eDI_reg }
363#define Yv { OP_ESreg, eDI_reg }
364#define DSBX { OP_DSreg, eBX_reg }
365
366#define es { OP_REG, es_reg }
367#define ss { OP_REG, ss_reg }
368#define cs { OP_REG, cs_reg }
369#define ds { OP_REG, ds_reg }
370#define fs { OP_REG, fs_reg }
371#define gs { OP_REG, gs_reg }
372
373#define MX { OP_MMX, 0 }
374#define XM { OP_XMM, 0 }
539f890d 375#define XMScalar { OP_XMM, scalar_mode }
6c30d220 376#define XMGatherQ { OP_XMM, vex_vsib_q_w_dq_mode }
c0f3af97 377#define XMM { OP_XMM, xmm_mode }
43234a1e 378#define XMxmmq { OP_XMM, xmmq_mode }
ce518a5f 379#define EM { OP_EM, v_mode }
b6169b20 380#define EMS { OP_EM, v_swap_mode }
09a2c6cf 381#define EMd { OP_EM, d_mode }
14051056 382#define EMx { OP_EM, x_mode }
53467f57 383#define EXbScalar { OP_EX, b_scalar_mode }
8976381e 384#define EXw { OP_EX, w_mode }
53467f57 385#define EXwScalar { OP_EX, w_scalar_mode }
09a2c6cf 386#define EXd { OP_EX, d_mode }
539f890d 387#define EXdScalar { OP_EX, d_scalar_mode }
fa99fab2 388#define EXdS { OP_EX, d_swap_mode }
43234a1e 389#define EXdScalarS { OP_EX, d_scalar_swap_mode }
09a2c6cf 390#define EXq { OP_EX, q_mode }
539f890d
L
391#define EXqScalar { OP_EX, q_scalar_mode }
392#define EXqScalarS { OP_EX, q_scalar_swap_mode }
b6169b20 393#define EXqS { OP_EX, q_swap_mode }
09a2c6cf 394#define EXx { OP_EX, x_mode }
b6169b20 395#define EXxS { OP_EX, x_swap_mode }
c0f3af97 396#define EXxmm { OP_EX, xmm_mode }
43234a1e 397#define EXymm { OP_EX, ymm_mode }
c0f3af97 398#define EXxmmq { OP_EX, xmmq_mode }
43234a1e 399#define EXEvexHalfBcstXmmq { OP_EX, evex_half_bcst_xmmq_mode }
6c30d220
L
400#define EXxmm_mb { OP_EX, xmm_mb_mode }
401#define EXxmm_mw { OP_EX, xmm_mw_mode }
402#define EXxmm_md { OP_EX, xmm_md_mode }
403#define EXxmm_mq { OP_EX, xmm_mq_mode }
43234a1e 404#define EXxmm_mdq { OP_EX, xmm_mdq_mode }
6c30d220
L
405#define EXxmmdw { OP_EX, xmmdw_mode }
406#define EXxmmqd { OP_EX, xmmqd_mode }
c0f3af97 407#define EXymmq { OP_EX, ymmq_mode }
0bfee649 408#define EXVexWdq { OP_EX, vex_w_dq_mode }
1c480963 409#define EXVexWdqScalar { OP_EX, vex_scalar_w_dq_mode }
43234a1e
L
410#define EXEvexXGscat { OP_EX, evex_x_gscat_mode }
411#define EXEvexXNoBcst { OP_EX, evex_x_nobcst_mode }
ce518a5f
L
412#define MS { OP_MS, v_mode }
413#define XS { OP_XS, v_mode }
09335d05 414#define EMCq { OP_EMC, q_mode }
ce518a5f 415#define MXC { OP_MXC, 0 }
ce518a5f 416#define OPSUF { OP_3DNowSuffix, 0 }
ad19981d 417#define CMP { CMP_Fixup, 0 }
42903f7f 418#define XMM0 { XMM_Fixup, 0 }
eacc9c89 419#define FXSAVE { FXSAVE_Fixup, 0 }
5dd85c99
SP
420#define Vex_2src_1 { OP_Vex_2src_1, 0 }
421#define Vex_2src_2 { OP_Vex_2src_2, 0 }
252b5132 422
c0f3af97 423#define Vex { OP_VEX, vex_mode }
539f890d 424#define VexScalar { OP_VEX, vex_scalar_mode }
6c30d220 425#define VexGatherQ { OP_VEX, vex_vsib_q_w_dq_mode }
c0f3af97
L
426#define Vex128 { OP_VEX, vex128_mode }
427#define Vex256 { OP_VEX, vex256_mode }
cb21baef 428#define VexGdq { OP_VEX, dq_mode }
c0f3af97 429#define EXdVex { OP_EX_Vex, d_mode }
fa99fab2 430#define EXdVexS { OP_EX_Vex, d_swap_mode }
539f890d 431#define EXdVexScalarS { OP_EX_Vex, d_scalar_swap_mode }
c0f3af97 432#define EXqVex { OP_EX_Vex, q_mode }
fa99fab2 433#define EXqVexS { OP_EX_Vex, q_swap_mode }
539f890d 434#define EXqVexScalarS { OP_EX_Vex, q_scalar_swap_mode }
922d8de8
DR
435#define EXVexW { OP_EX_VexW, x_mode }
436#define EXdVexW { OP_EX_VexW, d_mode }
437#define EXqVexW { OP_EX_VexW, q_mode }
a683cc34 438#define EXVexImmW { OP_EX_VexImmW, x_mode }
c0f3af97 439#define XMVex { OP_XMM_Vex, 0 }
539f890d 440#define XMVexScalar { OP_XMM_Vex, scalar_mode }
922d8de8 441#define XMVexW { OP_XMM_VexW, 0 }
c0f3af97
L
442#define XMVexI4 { OP_REG_VexI4, x_mode }
443#define PCLMUL { PCLMUL_Fixup, 0 }
c0f3af97 444#define VCMP { VCMP_Fixup, 0 }
43234a1e 445#define VPCMP { VPCMP_Fixup, 0 }
be92cb14 446#define VPCOM { VPCOM_Fixup, 0 }
43234a1e
L
447
448#define EXxEVexR { OP_Rounding, evex_rounding_mode }
70df6fc9 449#define EXxEVexR64 { OP_Rounding, evex_rounding_64_mode }
43234a1e
L
450#define EXxEVexS { OP_Rounding, evex_sae_mode }
451
452#define XMask { OP_Mask, mask_mode }
453#define MaskG { OP_G, mask_mode }
454#define MaskE { OP_E, mask_mode }
1ba585e8 455#define MaskBDE { OP_E, mask_bd_mode }
43234a1e
L
456#define MaskR { OP_R, mask_mode }
457#define MaskVex { OP_VEX, mask_mode }
c0f3af97 458
6c30d220 459#define MVexVSIBDWpX { OP_M, vex_vsib_d_w_dq_mode }
5fc35d96 460#define MVexVSIBDQWpX { OP_M, vex_vsib_d_w_d_mode }
6c30d220 461#define MVexVSIBQWpX { OP_M, vex_vsib_q_w_dq_mode }
5fc35d96 462#define MVexVSIBQDWpX { OP_M, vex_vsib_q_w_d_mode }
6c30d220 463
35c52694 464/* Used handle "rep" prefix for string instructions. */
ce518a5f
L
465#define Xbr { REP_Fixup, eSI_reg }
466#define Xvr { REP_Fixup, eSI_reg }
467#define Ybr { REP_Fixup, eDI_reg }
468#define Yvr { REP_Fixup, eDI_reg }
469#define Yzr { REP_Fixup, eDI_reg }
470#define indirDXr { REP_Fixup, indir_dx_reg }
471#define ALr { REP_Fixup, al_reg }
472#define eAXr { REP_Fixup, eAX_reg }
473
42164a71
L
474/* Used handle HLE prefix for lockable instructions. */
475#define Ebh1 { HLE_Fixup1, b_mode }
476#define Evh1 { HLE_Fixup1, v_mode }
477#define Ebh2 { HLE_Fixup2, b_mode }
478#define Evh2 { HLE_Fixup2, v_mode }
479#define Ebh3 { HLE_Fixup3, b_mode }
480#define Evh3 { HLE_Fixup3, v_mode }
481
7e8b059b 482#define BND { BND_Fixup, 0 }
04ef582a 483#define NOTRACK { NOTRACK_Fixup, 0 }
7e8b059b 484
ce518a5f
L
485#define cond_jump_flag { NULL, cond_jump_mode }
486#define loop_jcxz_flag { NULL, loop_jcxz_mode }
3ffd33cf 487
252b5132 488/* bits in sizeflag */
252b5132 489#define SUFFIX_ALWAYS 4
252b5132
RH
490#define AFLAG 2
491#define DFLAG 1
492
51e7da1b
L
493enum
494{
495 /* byte operand */
496 b_mode = 1,
497 /* byte operand with operand swapped */
3873ba12 498 b_swap_mode,
e3949f17
L
499 /* byte operand, sign extend like 'T' suffix */
500 b_T_mode,
51e7da1b 501 /* operand size depends on prefixes */
3873ba12 502 v_mode,
51e7da1b 503 /* operand size depends on prefixes with operand swapped */
3873ba12 504 v_swap_mode,
de89d0a3
IT
505 /* operand size depends on address prefix */
506 va_mode,
51e7da1b 507 /* word operand */
3873ba12 508 w_mode,
51e7da1b 509 /* double word operand */
3873ba12 510 d_mode,
51e7da1b 511 /* double word operand with operand swapped */
3873ba12 512 d_swap_mode,
51e7da1b 513 /* quad word operand */
3873ba12 514 q_mode,
51e7da1b 515 /* quad word operand with operand swapped */
3873ba12 516 q_swap_mode,
51e7da1b 517 /* ten-byte operand */
3873ba12 518 t_mode,
43234a1e
L
519 /* 16-byte XMM, 32-byte YMM or 64-byte ZMM operand. In EVEX with
520 broadcast enabled. */
3873ba12 521 x_mode,
43234a1e
L
522 /* Similar to x_mode, but with different EVEX mem shifts. */
523 evex_x_gscat_mode,
524 /* Similar to x_mode, but with disabled broadcast. */
525 evex_x_nobcst_mode,
526 /* Similar to x_mode, but with operands swapped and disabled broadcast
527 in EVEX. */
3873ba12 528 x_swap_mode,
51e7da1b 529 /* 16-byte XMM operand */
3873ba12 530 xmm_mode,
43234a1e
L
531 /* XMM, XMM or YMM register operand, or quad word, xmmword or ymmword
532 memory operand (depending on vector length). Broadcast isn't
533 allowed. */
3873ba12 534 xmmq_mode,
43234a1e
L
535 /* Same as xmmq_mode, but broadcast is allowed. */
536 evex_half_bcst_xmmq_mode,
6c30d220
L
537 /* XMM register or byte memory operand */
538 xmm_mb_mode,
539 /* XMM register or word memory operand */
540 xmm_mw_mode,
541 /* XMM register or double word memory operand */
542 xmm_md_mode,
543 /* XMM register or quad word memory operand */
544 xmm_mq_mode,
43234a1e
L
545 /* XMM register or double/quad word memory operand, depending on
546 VEX.W. */
547 xmm_mdq_mode,
548 /* 16-byte XMM, word, double word or quad word operand. */
6c30d220 549 xmmdw_mode,
43234a1e 550 /* 16-byte XMM, double word, quad word operand or xmm word operand. */
6c30d220 551 xmmqd_mode,
43234a1e
L
552 /* 32-byte YMM operand */
553 ymm_mode,
554 /* quad word, ymmword or zmmword memory operand. */
3873ba12 555 ymmq_mode,
6c30d220
L
556 /* 32-byte YMM or 16-byte word operand */
557 ymmxmm_mode,
51e7da1b 558 /* d_mode in 32bit, q_mode in 64bit mode. */
3873ba12 559 m_mode,
51e7da1b 560 /* pair of v_mode operands */
3873ba12
L
561 a_mode,
562 cond_jump_mode,
563 loop_jcxz_mode,
7e8b059b 564 v_bnd_mode,
d276ec69
JB
565 /* like v_bnd_mode in 32bit, no RIP-rel in 64bit mode. */
566 v_bndmk_mode,
51e7da1b 567 /* operand size depends on REX prefixes. */
3873ba12 568 dq_mode,
51e7da1b 569 /* registers like dq_mode, memory like w_mode. */
3873ba12 570 dqw_mode,
9f79e886 571 /* bounds operand */
7e8b059b 572 bnd_mode,
9f79e886
JB
573 /* bounds operand with operand swapped */
574 bnd_swap_mode,
51e7da1b 575 /* 4- or 6-byte pointer operand */
3873ba12
L
576 f_mode,
577 const_1_mode,
07f5af7d
L
578 /* v_mode for indirect branch opcodes. */
579 indir_v_mode,
51e7da1b 580 /* v_mode for stack-related opcodes. */
3873ba12 581 stack_v_mode,
51e7da1b 582 /* non-quad operand size depends on prefixes */
3873ba12 583 z_mode,
51e7da1b 584 /* 16-byte operand */
3873ba12 585 o_mode,
51e7da1b 586 /* registers like dq_mode, memory like b_mode. */
3873ba12 587 dqb_mode,
1ba585e8
IT
588 /* registers like d_mode, memory like b_mode. */
589 db_mode,
590 /* registers like d_mode, memory like w_mode. */
591 dw_mode,
51e7da1b 592 /* registers like dq_mode, memory like d_mode. */
3873ba12 593 dqd_mode,
d20dee9e
L
594 /* operand size depends on the W bit as well as address mode. */
595 dqa_mode,
51e7da1b 596 /* normal vex mode */
3873ba12 597 vex_mode,
51e7da1b 598 /* 128bit vex mode */
3873ba12 599 vex128_mode,
51e7da1b 600 /* 256bit vex mode */
3873ba12 601 vex256_mode,
51e7da1b 602 /* operand size depends on the VEX.W bit. */
3873ba12 603 vex_w_dq_mode,
d55ee72f 604
6c30d220
L
605 /* Similar to vex_w_dq_mode, with VSIB dword indices. */
606 vex_vsib_d_w_dq_mode,
5fc35d96
IT
607 /* Similar to vex_vsib_d_w_dq_mode, with smaller memory. */
608 vex_vsib_d_w_d_mode,
6c30d220
L
609 /* Similar to vex_w_dq_mode, with VSIB qword indices. */
610 vex_vsib_q_w_dq_mode,
5fc35d96
IT
611 /* Similar to vex_vsib_q_w_dq_mode, with smaller memory. */
612 vex_vsib_q_w_d_mode,
6c30d220 613
539f890d
L
614 /* scalar, ignore vector length. */
615 scalar_mode,
53467f57
IT
616 /* like b_mode, ignore vector length. */
617 b_scalar_mode,
618 /* like w_mode, ignore vector length. */
619 w_scalar_mode,
539f890d
L
620 /* like d_mode, ignore vector length. */
621 d_scalar_mode,
622 /* like d_swap_mode, ignore vector length. */
623 d_scalar_swap_mode,
624 /* like q_mode, ignore vector length. */
625 q_scalar_mode,
626 /* like q_swap_mode, ignore vector length. */
627 q_scalar_swap_mode,
628 /* like vex_mode, ignore vector length. */
629 vex_scalar_mode,
1c480963
L
630 /* like vex_w_dq_mode, ignore vector length. */
631 vex_scalar_w_dq_mode,
539f890d 632
43234a1e
L
633 /* Static rounding. */
634 evex_rounding_mode,
70df6fc9
L
635 /* Static rounding, 64-bit mode only. */
636 evex_rounding_64_mode,
43234a1e
L
637 /* Supress all exceptions. */
638 evex_sae_mode,
639
640 /* Mask register operand. */
641 mask_mode,
1ba585e8
IT
642 /* Mask register operand. */
643 mask_bd_mode,
43234a1e 644
3873ba12
L
645 es_reg,
646 cs_reg,
647 ss_reg,
648 ds_reg,
649 fs_reg,
650 gs_reg,
d55ee72f 651
3873ba12
L
652 eAX_reg,
653 eCX_reg,
654 eDX_reg,
655 eBX_reg,
656 eSP_reg,
657 eBP_reg,
658 eSI_reg,
659 eDI_reg,
d55ee72f 660
3873ba12
L
661 al_reg,
662 cl_reg,
663 dl_reg,
664 bl_reg,
665 ah_reg,
666 ch_reg,
667 dh_reg,
668 bh_reg,
d55ee72f 669
3873ba12
L
670 ax_reg,
671 cx_reg,
672 dx_reg,
673 bx_reg,
674 sp_reg,
675 bp_reg,
676 si_reg,
677 di_reg,
d55ee72f 678
3873ba12
L
679 rAX_reg,
680 rCX_reg,
681 rDX_reg,
682 rBX_reg,
683 rSP_reg,
684 rBP_reg,
685 rSI_reg,
686 rDI_reg,
d55ee72f 687
3873ba12
L
688 z_mode_ax_reg,
689 indir_dx_reg
51e7da1b 690};
252b5132 691
51e7da1b
L
692enum
693{
694 FLOATCODE = 1,
3873ba12
L
695 USE_REG_TABLE,
696 USE_MOD_TABLE,
697 USE_RM_TABLE,
698 USE_PREFIX_TABLE,
699 USE_X86_64_TABLE,
700 USE_3BYTE_TABLE,
f88c9eb0 701 USE_XOP_8F_TABLE,
3873ba12
L
702 USE_VEX_C4_TABLE,
703 USE_VEX_C5_TABLE,
9e30b8e0 704 USE_VEX_LEN_TABLE,
43234a1e 705 USE_VEX_W_TABLE,
04e2a182
L
706 USE_EVEX_TABLE,
707 USE_EVEX_LEN_TABLE
51e7da1b 708};
6439fc28 709
bf890a93 710#define FLOAT NULL, { { NULL, FLOATCODE } }, 0
4efba78c 711
bf890a93
IT
712#define DIS386(T, I) NULL, { { NULL, (T)}, { NULL, (I) } }, 0
713#define DIS386_PREFIX(T, I, P) NULL, { { NULL, (T)}, { NULL, (I) } }, P
1ceb70f8
L
714#define REG_TABLE(I) DIS386 (USE_REG_TABLE, (I))
715#define MOD_TABLE(I) DIS386 (USE_MOD_TABLE, (I))
716#define RM_TABLE(I) DIS386 (USE_RM_TABLE, (I))
717#define PREFIX_TABLE(I) DIS386 (USE_PREFIX_TABLE, (I))
4e7d34a6
L
718#define X86_64_TABLE(I) DIS386 (USE_X86_64_TABLE, (I))
719#define THREE_BYTE_TABLE(I) DIS386 (USE_3BYTE_TABLE, (I))
bf890a93 720#define THREE_BYTE_TABLE_PREFIX(I, P) DIS386_PREFIX (USE_3BYTE_TABLE, (I), P)
f88c9eb0 721#define XOP_8F_TABLE(I) DIS386 (USE_XOP_8F_TABLE, (I))
c0f3af97
L
722#define VEX_C4_TABLE(I) DIS386 (USE_VEX_C4_TABLE, (I))
723#define VEX_C5_TABLE(I) DIS386 (USE_VEX_C5_TABLE, (I))
724#define VEX_LEN_TABLE(I) DIS386 (USE_VEX_LEN_TABLE, (I))
9e30b8e0 725#define VEX_W_TABLE(I) DIS386 (USE_VEX_W_TABLE, (I))
43234a1e 726#define EVEX_TABLE(I) DIS386 (USE_EVEX_TABLE, (I))
04e2a182 727#define EVEX_LEN_TABLE(I) DIS386 (USE_EVEX_LEN_TABLE, (I))
1ceb70f8 728
51e7da1b
L
729enum
730{
731 REG_80 = 0,
3873ba12 732 REG_81,
7148c369 733 REG_83,
3873ba12
L
734 REG_8F,
735 REG_C0,
736 REG_C1,
737 REG_C6,
738 REG_C7,
739 REG_D0,
740 REG_D1,
741 REG_D2,
742 REG_D3,
743 REG_F6,
744 REG_F7,
745 REG_FE,
746 REG_FF,
747 REG_0F00,
748 REG_0F01,
749 REG_0F0D,
750 REG_0F18,
c48935d7 751 REG_0F1C_MOD_0,
603555e5 752 REG_0F1E_MOD_3,
3873ba12
L
753 REG_0F71,
754 REG_0F72,
755 REG_0F73,
756 REG_0FA6,
757 REG_0FA7,
758 REG_0FAE,
759 REG_0FBA,
760 REG_0FC7,
592a252b
L
761 REG_VEX_0F71,
762 REG_VEX_0F72,
763 REG_VEX_0F73,
764 REG_VEX_0FAE,
f12dc422 765 REG_VEX_0F38F3,
f88c9eb0 766 REG_XOP_LWPCB,
2a2a0f38
QN
767 REG_XOP_LWP,
768 REG_XOP_TBM_01,
43234a1e
L
769 REG_XOP_TBM_02,
770
1ba585e8 771 REG_EVEX_0F71,
43234a1e
L
772 REG_EVEX_0F72,
773 REG_EVEX_0F73,
774 REG_EVEX_0F38C6,
775 REG_EVEX_0F38C7
51e7da1b 776};
1ceb70f8 777
51e7da1b
L
778enum
779{
780 MOD_8D = 0,
42164a71
L
781 MOD_C6_REG_7,
782 MOD_C7_REG_7,
4a357820
MZ
783 MOD_FF_REG_3,
784 MOD_FF_REG_5,
3873ba12
L
785 MOD_0F01_REG_0,
786 MOD_0F01_REG_1,
787 MOD_0F01_REG_2,
788 MOD_0F01_REG_3,
8eab4136 789 MOD_0F01_REG_5,
3873ba12
L
790 MOD_0F01_REG_7,
791 MOD_0F12_PREFIX_0,
792 MOD_0F13,
793 MOD_0F16_PREFIX_0,
794 MOD_0F17,
795 MOD_0F18_REG_0,
796 MOD_0F18_REG_1,
797 MOD_0F18_REG_2,
798 MOD_0F18_REG_3,
d7189fa5
RM
799 MOD_0F18_REG_4,
800 MOD_0F18_REG_5,
801 MOD_0F18_REG_6,
802 MOD_0F18_REG_7,
7e8b059b
L
803 MOD_0F1A_PREFIX_0,
804 MOD_0F1B_PREFIX_0,
805 MOD_0F1B_PREFIX_1,
c48935d7 806 MOD_0F1C_PREFIX_0,
603555e5 807 MOD_0F1E_PREFIX_1,
3873ba12
L
808 MOD_0F24,
809 MOD_0F26,
810 MOD_0F2B_PREFIX_0,
811 MOD_0F2B_PREFIX_1,
812 MOD_0F2B_PREFIX_2,
813 MOD_0F2B_PREFIX_3,
814 MOD_0F51,
815 MOD_0F71_REG_2,
816 MOD_0F71_REG_4,
817 MOD_0F71_REG_6,
818 MOD_0F72_REG_2,
819 MOD_0F72_REG_4,
820 MOD_0F72_REG_6,
821 MOD_0F73_REG_2,
822 MOD_0F73_REG_3,
823 MOD_0F73_REG_6,
824 MOD_0F73_REG_7,
825 MOD_0FAE_REG_0,
826 MOD_0FAE_REG_1,
827 MOD_0FAE_REG_2,
828 MOD_0FAE_REG_3,
829 MOD_0FAE_REG_4,
830 MOD_0FAE_REG_5,
831 MOD_0FAE_REG_6,
832 MOD_0FAE_REG_7,
833 MOD_0FB2,
834 MOD_0FB4,
835 MOD_0FB5,
a8484f96 836 MOD_0FC3,
963f3586
IT
837 MOD_0FC7_REG_3,
838 MOD_0FC7_REG_4,
839 MOD_0FC7_REG_5,
3873ba12
L
840 MOD_0FC7_REG_6,
841 MOD_0FC7_REG_7,
842 MOD_0FD7,
843 MOD_0FE7_PREFIX_2,
844 MOD_0FF0_PREFIX_3,
845 MOD_0F382A_PREFIX_2,
603555e5
L
846 MOD_0F38F5_PREFIX_2,
847 MOD_0F38F6_PREFIX_0,
c0a30a9f
L
848 MOD_0F38F8_PREFIX_2,
849 MOD_0F38F9_PREFIX_0,
3873ba12
L
850 MOD_62_32BIT,
851 MOD_C4_32BIT,
852 MOD_C5_32BIT,
592a252b
L
853 MOD_VEX_0F12_PREFIX_0,
854 MOD_VEX_0F13,
855 MOD_VEX_0F16_PREFIX_0,
856 MOD_VEX_0F17,
857 MOD_VEX_0F2B,
ab4e4ed5
AF
858 MOD_VEX_W_0_0F41_P_0_LEN_1,
859 MOD_VEX_W_1_0F41_P_0_LEN_1,
860 MOD_VEX_W_0_0F41_P_2_LEN_1,
861 MOD_VEX_W_1_0F41_P_2_LEN_1,
862 MOD_VEX_W_0_0F42_P_0_LEN_1,
863 MOD_VEX_W_1_0F42_P_0_LEN_1,
864 MOD_VEX_W_0_0F42_P_2_LEN_1,
865 MOD_VEX_W_1_0F42_P_2_LEN_1,
866 MOD_VEX_W_0_0F44_P_0_LEN_1,
867 MOD_VEX_W_1_0F44_P_0_LEN_1,
868 MOD_VEX_W_0_0F44_P_2_LEN_1,
869 MOD_VEX_W_1_0F44_P_2_LEN_1,
870 MOD_VEX_W_0_0F45_P_0_LEN_1,
871 MOD_VEX_W_1_0F45_P_0_LEN_1,
872 MOD_VEX_W_0_0F45_P_2_LEN_1,
873 MOD_VEX_W_1_0F45_P_2_LEN_1,
874 MOD_VEX_W_0_0F46_P_0_LEN_1,
875 MOD_VEX_W_1_0F46_P_0_LEN_1,
876 MOD_VEX_W_0_0F46_P_2_LEN_1,
877 MOD_VEX_W_1_0F46_P_2_LEN_1,
878 MOD_VEX_W_0_0F47_P_0_LEN_1,
879 MOD_VEX_W_1_0F47_P_0_LEN_1,
880 MOD_VEX_W_0_0F47_P_2_LEN_1,
881 MOD_VEX_W_1_0F47_P_2_LEN_1,
882 MOD_VEX_W_0_0F4A_P_0_LEN_1,
883 MOD_VEX_W_1_0F4A_P_0_LEN_1,
884 MOD_VEX_W_0_0F4A_P_2_LEN_1,
885 MOD_VEX_W_1_0F4A_P_2_LEN_1,
886 MOD_VEX_W_0_0F4B_P_0_LEN_1,
887 MOD_VEX_W_1_0F4B_P_0_LEN_1,
888 MOD_VEX_W_0_0F4B_P_2_LEN_1,
592a252b
L
889 MOD_VEX_0F50,
890 MOD_VEX_0F71_REG_2,
891 MOD_VEX_0F71_REG_4,
892 MOD_VEX_0F71_REG_6,
893 MOD_VEX_0F72_REG_2,
894 MOD_VEX_0F72_REG_4,
895 MOD_VEX_0F72_REG_6,
896 MOD_VEX_0F73_REG_2,
897 MOD_VEX_0F73_REG_3,
898 MOD_VEX_0F73_REG_6,
899 MOD_VEX_0F73_REG_7,
ab4e4ed5
AF
900 MOD_VEX_W_0_0F91_P_0_LEN_0,
901 MOD_VEX_W_1_0F91_P_0_LEN_0,
902 MOD_VEX_W_0_0F91_P_2_LEN_0,
903 MOD_VEX_W_1_0F91_P_2_LEN_0,
904 MOD_VEX_W_0_0F92_P_0_LEN_0,
905 MOD_VEX_W_0_0F92_P_2_LEN_0,
58a211d2 906 MOD_VEX_0F92_P_3_LEN_0,
ab4e4ed5
AF
907 MOD_VEX_W_0_0F93_P_0_LEN_0,
908 MOD_VEX_W_0_0F93_P_2_LEN_0,
58a211d2 909 MOD_VEX_0F93_P_3_LEN_0,
ab4e4ed5
AF
910 MOD_VEX_W_0_0F98_P_0_LEN_0,
911 MOD_VEX_W_1_0F98_P_0_LEN_0,
912 MOD_VEX_W_0_0F98_P_2_LEN_0,
913 MOD_VEX_W_1_0F98_P_2_LEN_0,
914 MOD_VEX_W_0_0F99_P_0_LEN_0,
915 MOD_VEX_W_1_0F99_P_0_LEN_0,
916 MOD_VEX_W_0_0F99_P_2_LEN_0,
917 MOD_VEX_W_1_0F99_P_2_LEN_0,
592a252b
L
918 MOD_VEX_0FAE_REG_2,
919 MOD_VEX_0FAE_REG_3,
920 MOD_VEX_0FD7_PREFIX_2,
921 MOD_VEX_0FE7_PREFIX_2,
922 MOD_VEX_0FF0_PREFIX_3,
592a252b
L
923 MOD_VEX_0F381A_PREFIX_2,
924 MOD_VEX_0F382A_PREFIX_2,
925 MOD_VEX_0F382C_PREFIX_2,
926 MOD_VEX_0F382D_PREFIX_2,
927 MOD_VEX_0F382E_PREFIX_2,
6c30d220
L
928 MOD_VEX_0F382F_PREFIX_2,
929 MOD_VEX_0F385A_PREFIX_2,
930 MOD_VEX_0F388C_PREFIX_2,
931 MOD_VEX_0F388E_PREFIX_2,
ab4e4ed5
AF
932 MOD_VEX_W_0_0F3A30_P_2_LEN_0,
933 MOD_VEX_W_1_0F3A30_P_2_LEN_0,
934 MOD_VEX_W_0_0F3A31_P_2_LEN_0,
935 MOD_VEX_W_1_0F3A31_P_2_LEN_0,
936 MOD_VEX_W_0_0F3A32_P_2_LEN_0,
937 MOD_VEX_W_1_0F3A32_P_2_LEN_0,
938 MOD_VEX_W_0_0F3A33_P_2_LEN_0,
939 MOD_VEX_W_1_0F3A33_P_2_LEN_0,
43234a1e
L
940
941 MOD_EVEX_0F10_PREFIX_1,
942 MOD_EVEX_0F10_PREFIX_3,
943 MOD_EVEX_0F11_PREFIX_1,
944 MOD_EVEX_0F11_PREFIX_3,
945 MOD_EVEX_0F12_PREFIX_0,
946 MOD_EVEX_0F16_PREFIX_0,
947 MOD_EVEX_0F38C6_REG_1,
948 MOD_EVEX_0F38C6_REG_2,
949 MOD_EVEX_0F38C6_REG_5,
950 MOD_EVEX_0F38C6_REG_6,
951 MOD_EVEX_0F38C7_REG_1,
952 MOD_EVEX_0F38C7_REG_2,
953 MOD_EVEX_0F38C7_REG_5,
954 MOD_EVEX_0F38C7_REG_6
51e7da1b 955};
1ceb70f8 956
51e7da1b
L
957enum
958{
42164a71
L
959 RM_C6_REG_7 = 0,
960 RM_C7_REG_7,
961 RM_0F01_REG_0,
3873ba12
L
962 RM_0F01_REG_1,
963 RM_0F01_REG_2,
964 RM_0F01_REG_3,
8eab4136 965 RM_0F01_REG_5,
3873ba12 966 RM_0F01_REG_7,
603555e5 967 RM_0F1E_MOD_3_REG_7,
3873ba12
L
968 RM_0FAE_REG_6,
969 RM_0FAE_REG_7
51e7da1b 970};
1ceb70f8 971
51e7da1b
L
972enum
973{
974 PREFIX_90 = 0,
603555e5 975 PREFIX_MOD_0_0F01_REG_5,
2234eee6 976 PREFIX_MOD_3_0F01_REG_5_RM_0,
603555e5 977 PREFIX_MOD_3_0F01_REG_5_RM_2,
3233d7d0 978 PREFIX_0F09,
3873ba12
L
979 PREFIX_0F10,
980 PREFIX_0F11,
981 PREFIX_0F12,
982 PREFIX_0F16,
7e8b059b
L
983 PREFIX_0F1A,
984 PREFIX_0F1B,
c48935d7 985 PREFIX_0F1C,
603555e5 986 PREFIX_0F1E,
3873ba12
L
987 PREFIX_0F2A,
988 PREFIX_0F2B,
989 PREFIX_0F2C,
990 PREFIX_0F2D,
991 PREFIX_0F2E,
992 PREFIX_0F2F,
993 PREFIX_0F51,
994 PREFIX_0F52,
995 PREFIX_0F53,
996 PREFIX_0F58,
997 PREFIX_0F59,
998 PREFIX_0F5A,
999 PREFIX_0F5B,
1000 PREFIX_0F5C,
1001 PREFIX_0F5D,
1002 PREFIX_0F5E,
1003 PREFIX_0F5F,
1004 PREFIX_0F60,
1005 PREFIX_0F61,
1006 PREFIX_0F62,
1007 PREFIX_0F6C,
1008 PREFIX_0F6D,
1009 PREFIX_0F6F,
1010 PREFIX_0F70,
1011 PREFIX_0F73_REG_3,
1012 PREFIX_0F73_REG_7,
1013 PREFIX_0F78,
1014 PREFIX_0F79,
1015 PREFIX_0F7C,
1016 PREFIX_0F7D,
1017 PREFIX_0F7E,
1018 PREFIX_0F7F,
c7b8aa3a
L
1019 PREFIX_0FAE_REG_0,
1020 PREFIX_0FAE_REG_1,
1021 PREFIX_0FAE_REG_2,
1022 PREFIX_0FAE_REG_3,
6b40c462
L
1023 PREFIX_MOD_0_0FAE_REG_4,
1024 PREFIX_MOD_3_0FAE_REG_4,
603555e5 1025 PREFIX_MOD_0_0FAE_REG_5,
2234eee6 1026 PREFIX_MOD_3_0FAE_REG_5,
de89d0a3
IT
1027 PREFIX_MOD_0_0FAE_REG_6,
1028 PREFIX_MOD_1_0FAE_REG_6,
963f3586 1029 PREFIX_0FAE_REG_7,
3873ba12 1030 PREFIX_0FB8,
f12dc422 1031 PREFIX_0FBC,
3873ba12
L
1032 PREFIX_0FBD,
1033 PREFIX_0FC2,
a8484f96 1034 PREFIX_MOD_0_0FC3,
f24bcbaa
L
1035 PREFIX_MOD_0_0FC7_REG_6,
1036 PREFIX_MOD_3_0FC7_REG_6,
1037 PREFIX_MOD_3_0FC7_REG_7,
3873ba12
L
1038 PREFIX_0FD0,
1039 PREFIX_0FD6,
1040 PREFIX_0FE6,
1041 PREFIX_0FE7,
1042 PREFIX_0FF0,
1043 PREFIX_0FF7,
1044 PREFIX_0F3810,
1045 PREFIX_0F3814,
1046 PREFIX_0F3815,
1047 PREFIX_0F3817,
1048 PREFIX_0F3820,
1049 PREFIX_0F3821,
1050 PREFIX_0F3822,
1051 PREFIX_0F3823,
1052 PREFIX_0F3824,
1053 PREFIX_0F3825,
1054 PREFIX_0F3828,
1055 PREFIX_0F3829,
1056 PREFIX_0F382A,
1057 PREFIX_0F382B,
1058 PREFIX_0F3830,
1059 PREFIX_0F3831,
1060 PREFIX_0F3832,
1061 PREFIX_0F3833,
1062 PREFIX_0F3834,
1063 PREFIX_0F3835,
1064 PREFIX_0F3837,
1065 PREFIX_0F3838,
1066 PREFIX_0F3839,
1067 PREFIX_0F383A,
1068 PREFIX_0F383B,
1069 PREFIX_0F383C,
1070 PREFIX_0F383D,
1071 PREFIX_0F383E,
1072 PREFIX_0F383F,
1073 PREFIX_0F3840,
1074 PREFIX_0F3841,
1075 PREFIX_0F3880,
1076 PREFIX_0F3881,
6c30d220 1077 PREFIX_0F3882,
a0046408
L
1078 PREFIX_0F38C8,
1079 PREFIX_0F38C9,
1080 PREFIX_0F38CA,
1081 PREFIX_0F38CB,
1082 PREFIX_0F38CC,
1083 PREFIX_0F38CD,
48521003 1084 PREFIX_0F38CF,
3873ba12
L
1085 PREFIX_0F38DB,
1086 PREFIX_0F38DC,
1087 PREFIX_0F38DD,
1088 PREFIX_0F38DE,
1089 PREFIX_0F38DF,
1090 PREFIX_0F38F0,
1091 PREFIX_0F38F1,
603555e5 1092 PREFIX_0F38F5,
e2e1fcde 1093 PREFIX_0F38F6,
c0a30a9f
L
1094 PREFIX_0F38F8,
1095 PREFIX_0F38F9,
3873ba12
L
1096 PREFIX_0F3A08,
1097 PREFIX_0F3A09,
1098 PREFIX_0F3A0A,
1099 PREFIX_0F3A0B,
1100 PREFIX_0F3A0C,
1101 PREFIX_0F3A0D,
1102 PREFIX_0F3A0E,
1103 PREFIX_0F3A14,
1104 PREFIX_0F3A15,
1105 PREFIX_0F3A16,
1106 PREFIX_0F3A17,
1107 PREFIX_0F3A20,
1108 PREFIX_0F3A21,
1109 PREFIX_0F3A22,
1110 PREFIX_0F3A40,
1111 PREFIX_0F3A41,
1112 PREFIX_0F3A42,
1113 PREFIX_0F3A44,
1114 PREFIX_0F3A60,
1115 PREFIX_0F3A61,
1116 PREFIX_0F3A62,
1117 PREFIX_0F3A63,
a0046408 1118 PREFIX_0F3ACC,
48521003
IT
1119 PREFIX_0F3ACE,
1120 PREFIX_0F3ACF,
3873ba12 1121 PREFIX_0F3ADF,
592a252b
L
1122 PREFIX_VEX_0F10,
1123 PREFIX_VEX_0F11,
1124 PREFIX_VEX_0F12,
1125 PREFIX_VEX_0F16,
1126 PREFIX_VEX_0F2A,
1127 PREFIX_VEX_0F2C,
1128 PREFIX_VEX_0F2D,
1129 PREFIX_VEX_0F2E,
1130 PREFIX_VEX_0F2F,
43234a1e
L
1131 PREFIX_VEX_0F41,
1132 PREFIX_VEX_0F42,
1133 PREFIX_VEX_0F44,
1134 PREFIX_VEX_0F45,
1135 PREFIX_VEX_0F46,
1136 PREFIX_VEX_0F47,
1ba585e8 1137 PREFIX_VEX_0F4A,
43234a1e 1138 PREFIX_VEX_0F4B,
592a252b
L
1139 PREFIX_VEX_0F51,
1140 PREFIX_VEX_0F52,
1141 PREFIX_VEX_0F53,
1142 PREFIX_VEX_0F58,
1143 PREFIX_VEX_0F59,
1144 PREFIX_VEX_0F5A,
1145 PREFIX_VEX_0F5B,
1146 PREFIX_VEX_0F5C,
1147 PREFIX_VEX_0F5D,
1148 PREFIX_VEX_0F5E,
1149 PREFIX_VEX_0F5F,
1150 PREFIX_VEX_0F60,
1151 PREFIX_VEX_0F61,
1152 PREFIX_VEX_0F62,
1153 PREFIX_VEX_0F63,
1154 PREFIX_VEX_0F64,
1155 PREFIX_VEX_0F65,
1156 PREFIX_VEX_0F66,
1157 PREFIX_VEX_0F67,
1158 PREFIX_VEX_0F68,
1159 PREFIX_VEX_0F69,
1160 PREFIX_VEX_0F6A,
1161 PREFIX_VEX_0F6B,
1162 PREFIX_VEX_0F6C,
1163 PREFIX_VEX_0F6D,
1164 PREFIX_VEX_0F6E,
1165 PREFIX_VEX_0F6F,
1166 PREFIX_VEX_0F70,
1167 PREFIX_VEX_0F71_REG_2,
1168 PREFIX_VEX_0F71_REG_4,
1169 PREFIX_VEX_0F71_REG_6,
1170 PREFIX_VEX_0F72_REG_2,
1171 PREFIX_VEX_0F72_REG_4,
1172 PREFIX_VEX_0F72_REG_6,
1173 PREFIX_VEX_0F73_REG_2,
1174 PREFIX_VEX_0F73_REG_3,
1175 PREFIX_VEX_0F73_REG_6,
1176 PREFIX_VEX_0F73_REG_7,
1177 PREFIX_VEX_0F74,
1178 PREFIX_VEX_0F75,
1179 PREFIX_VEX_0F76,
1180 PREFIX_VEX_0F77,
1181 PREFIX_VEX_0F7C,
1182 PREFIX_VEX_0F7D,
1183 PREFIX_VEX_0F7E,
1184 PREFIX_VEX_0F7F,
43234a1e
L
1185 PREFIX_VEX_0F90,
1186 PREFIX_VEX_0F91,
1187 PREFIX_VEX_0F92,
1188 PREFIX_VEX_0F93,
1189 PREFIX_VEX_0F98,
1ba585e8 1190 PREFIX_VEX_0F99,
592a252b
L
1191 PREFIX_VEX_0FC2,
1192 PREFIX_VEX_0FC4,
1193 PREFIX_VEX_0FC5,
1194 PREFIX_VEX_0FD0,
1195 PREFIX_VEX_0FD1,
1196 PREFIX_VEX_0FD2,
1197 PREFIX_VEX_0FD3,
1198 PREFIX_VEX_0FD4,
1199 PREFIX_VEX_0FD5,
1200 PREFIX_VEX_0FD6,
1201 PREFIX_VEX_0FD7,
1202 PREFIX_VEX_0FD8,
1203 PREFIX_VEX_0FD9,
1204 PREFIX_VEX_0FDA,
1205 PREFIX_VEX_0FDB,
1206 PREFIX_VEX_0FDC,
1207 PREFIX_VEX_0FDD,
1208 PREFIX_VEX_0FDE,
1209 PREFIX_VEX_0FDF,
1210 PREFIX_VEX_0FE0,
1211 PREFIX_VEX_0FE1,
1212 PREFIX_VEX_0FE2,
1213 PREFIX_VEX_0FE3,
1214 PREFIX_VEX_0FE4,
1215 PREFIX_VEX_0FE5,
1216 PREFIX_VEX_0FE6,
1217 PREFIX_VEX_0FE7,
1218 PREFIX_VEX_0FE8,
1219 PREFIX_VEX_0FE9,
1220 PREFIX_VEX_0FEA,
1221 PREFIX_VEX_0FEB,
1222 PREFIX_VEX_0FEC,
1223 PREFIX_VEX_0FED,
1224 PREFIX_VEX_0FEE,
1225 PREFIX_VEX_0FEF,
1226 PREFIX_VEX_0FF0,
1227 PREFIX_VEX_0FF1,
1228 PREFIX_VEX_0FF2,
1229 PREFIX_VEX_0FF3,
1230 PREFIX_VEX_0FF4,
1231 PREFIX_VEX_0FF5,
1232 PREFIX_VEX_0FF6,
1233 PREFIX_VEX_0FF7,
1234 PREFIX_VEX_0FF8,
1235 PREFIX_VEX_0FF9,
1236 PREFIX_VEX_0FFA,
1237 PREFIX_VEX_0FFB,
1238 PREFIX_VEX_0FFC,
1239 PREFIX_VEX_0FFD,
1240 PREFIX_VEX_0FFE,
1241 PREFIX_VEX_0F3800,
1242 PREFIX_VEX_0F3801,
1243 PREFIX_VEX_0F3802,
1244 PREFIX_VEX_0F3803,
1245 PREFIX_VEX_0F3804,
1246 PREFIX_VEX_0F3805,
1247 PREFIX_VEX_0F3806,
1248 PREFIX_VEX_0F3807,
1249 PREFIX_VEX_0F3808,
1250 PREFIX_VEX_0F3809,
1251 PREFIX_VEX_0F380A,
1252 PREFIX_VEX_0F380B,
1253 PREFIX_VEX_0F380C,
1254 PREFIX_VEX_0F380D,
1255 PREFIX_VEX_0F380E,
1256 PREFIX_VEX_0F380F,
1257 PREFIX_VEX_0F3813,
6c30d220 1258 PREFIX_VEX_0F3816,
592a252b
L
1259 PREFIX_VEX_0F3817,
1260 PREFIX_VEX_0F3818,
1261 PREFIX_VEX_0F3819,
1262 PREFIX_VEX_0F381A,
1263 PREFIX_VEX_0F381C,
1264 PREFIX_VEX_0F381D,
1265 PREFIX_VEX_0F381E,
1266 PREFIX_VEX_0F3820,
1267 PREFIX_VEX_0F3821,
1268 PREFIX_VEX_0F3822,
1269 PREFIX_VEX_0F3823,
1270 PREFIX_VEX_0F3824,
1271 PREFIX_VEX_0F3825,
1272 PREFIX_VEX_0F3828,
1273 PREFIX_VEX_0F3829,
1274 PREFIX_VEX_0F382A,
1275 PREFIX_VEX_0F382B,
1276 PREFIX_VEX_0F382C,
1277 PREFIX_VEX_0F382D,
1278 PREFIX_VEX_0F382E,
1279 PREFIX_VEX_0F382F,
1280 PREFIX_VEX_0F3830,
1281 PREFIX_VEX_0F3831,
1282 PREFIX_VEX_0F3832,
1283 PREFIX_VEX_0F3833,
1284 PREFIX_VEX_0F3834,
1285 PREFIX_VEX_0F3835,
6c30d220 1286 PREFIX_VEX_0F3836,
592a252b
L
1287 PREFIX_VEX_0F3837,
1288 PREFIX_VEX_0F3838,
1289 PREFIX_VEX_0F3839,
1290 PREFIX_VEX_0F383A,
1291 PREFIX_VEX_0F383B,
1292 PREFIX_VEX_0F383C,
1293 PREFIX_VEX_0F383D,
1294 PREFIX_VEX_0F383E,
1295 PREFIX_VEX_0F383F,
1296 PREFIX_VEX_0F3840,
1297 PREFIX_VEX_0F3841,
6c30d220
L
1298 PREFIX_VEX_0F3845,
1299 PREFIX_VEX_0F3846,
1300 PREFIX_VEX_0F3847,
1301 PREFIX_VEX_0F3858,
1302 PREFIX_VEX_0F3859,
1303 PREFIX_VEX_0F385A,
1304 PREFIX_VEX_0F3878,
1305 PREFIX_VEX_0F3879,
1306 PREFIX_VEX_0F388C,
1307 PREFIX_VEX_0F388E,
1308 PREFIX_VEX_0F3890,
1309 PREFIX_VEX_0F3891,
1310 PREFIX_VEX_0F3892,
1311 PREFIX_VEX_0F3893,
592a252b
L
1312 PREFIX_VEX_0F3896,
1313 PREFIX_VEX_0F3897,
1314 PREFIX_VEX_0F3898,
1315 PREFIX_VEX_0F3899,
1316 PREFIX_VEX_0F389A,
1317 PREFIX_VEX_0F389B,
1318 PREFIX_VEX_0F389C,
1319 PREFIX_VEX_0F389D,
1320 PREFIX_VEX_0F389E,
1321 PREFIX_VEX_0F389F,
1322 PREFIX_VEX_0F38A6,
1323 PREFIX_VEX_0F38A7,
1324 PREFIX_VEX_0F38A8,
1325 PREFIX_VEX_0F38A9,
1326 PREFIX_VEX_0F38AA,
1327 PREFIX_VEX_0F38AB,
1328 PREFIX_VEX_0F38AC,
1329 PREFIX_VEX_0F38AD,
1330 PREFIX_VEX_0F38AE,
1331 PREFIX_VEX_0F38AF,
1332 PREFIX_VEX_0F38B6,
1333 PREFIX_VEX_0F38B7,
1334 PREFIX_VEX_0F38B8,
1335 PREFIX_VEX_0F38B9,
1336 PREFIX_VEX_0F38BA,
1337 PREFIX_VEX_0F38BB,
1338 PREFIX_VEX_0F38BC,
1339 PREFIX_VEX_0F38BD,
1340 PREFIX_VEX_0F38BE,
1341 PREFIX_VEX_0F38BF,
48521003 1342 PREFIX_VEX_0F38CF,
592a252b
L
1343 PREFIX_VEX_0F38DB,
1344 PREFIX_VEX_0F38DC,
1345 PREFIX_VEX_0F38DD,
1346 PREFIX_VEX_0F38DE,
1347 PREFIX_VEX_0F38DF,
f12dc422
L
1348 PREFIX_VEX_0F38F2,
1349 PREFIX_VEX_0F38F3_REG_1,
1350 PREFIX_VEX_0F38F3_REG_2,
1351 PREFIX_VEX_0F38F3_REG_3,
6c30d220
L
1352 PREFIX_VEX_0F38F5,
1353 PREFIX_VEX_0F38F6,
f12dc422 1354 PREFIX_VEX_0F38F7,
6c30d220
L
1355 PREFIX_VEX_0F3A00,
1356 PREFIX_VEX_0F3A01,
1357 PREFIX_VEX_0F3A02,
592a252b
L
1358 PREFIX_VEX_0F3A04,
1359 PREFIX_VEX_0F3A05,
1360 PREFIX_VEX_0F3A06,
1361 PREFIX_VEX_0F3A08,
1362 PREFIX_VEX_0F3A09,
1363 PREFIX_VEX_0F3A0A,
1364 PREFIX_VEX_0F3A0B,
1365 PREFIX_VEX_0F3A0C,
1366 PREFIX_VEX_0F3A0D,
1367 PREFIX_VEX_0F3A0E,
1368 PREFIX_VEX_0F3A0F,
1369 PREFIX_VEX_0F3A14,
1370 PREFIX_VEX_0F3A15,
1371 PREFIX_VEX_0F3A16,
1372 PREFIX_VEX_0F3A17,
1373 PREFIX_VEX_0F3A18,
1374 PREFIX_VEX_0F3A19,
1375 PREFIX_VEX_0F3A1D,
1376 PREFIX_VEX_0F3A20,
1377 PREFIX_VEX_0F3A21,
1378 PREFIX_VEX_0F3A22,
43234a1e 1379 PREFIX_VEX_0F3A30,
1ba585e8 1380 PREFIX_VEX_0F3A31,
43234a1e 1381 PREFIX_VEX_0F3A32,
1ba585e8 1382 PREFIX_VEX_0F3A33,
6c30d220
L
1383 PREFIX_VEX_0F3A38,
1384 PREFIX_VEX_0F3A39,
592a252b
L
1385 PREFIX_VEX_0F3A40,
1386 PREFIX_VEX_0F3A41,
1387 PREFIX_VEX_0F3A42,
1388 PREFIX_VEX_0F3A44,
6c30d220 1389 PREFIX_VEX_0F3A46,
592a252b
L
1390 PREFIX_VEX_0F3A48,
1391 PREFIX_VEX_0F3A49,
1392 PREFIX_VEX_0F3A4A,
1393 PREFIX_VEX_0F3A4B,
1394 PREFIX_VEX_0F3A4C,
1395 PREFIX_VEX_0F3A5C,
1396 PREFIX_VEX_0F3A5D,
1397 PREFIX_VEX_0F3A5E,
1398 PREFIX_VEX_0F3A5F,
1399 PREFIX_VEX_0F3A60,
1400 PREFIX_VEX_0F3A61,
1401 PREFIX_VEX_0F3A62,
1402 PREFIX_VEX_0F3A63,
1403 PREFIX_VEX_0F3A68,
1404 PREFIX_VEX_0F3A69,
1405 PREFIX_VEX_0F3A6A,
1406 PREFIX_VEX_0F3A6B,
1407 PREFIX_VEX_0F3A6C,
1408 PREFIX_VEX_0F3A6D,
1409 PREFIX_VEX_0F3A6E,
1410 PREFIX_VEX_0F3A6F,
1411 PREFIX_VEX_0F3A78,
1412 PREFIX_VEX_0F3A79,
1413 PREFIX_VEX_0F3A7A,
1414 PREFIX_VEX_0F3A7B,
1415 PREFIX_VEX_0F3A7C,
1416 PREFIX_VEX_0F3A7D,
1417 PREFIX_VEX_0F3A7E,
1418 PREFIX_VEX_0F3A7F,
48521003
IT
1419 PREFIX_VEX_0F3ACE,
1420 PREFIX_VEX_0F3ACF,
6c30d220 1421 PREFIX_VEX_0F3ADF,
43234a1e
L
1422 PREFIX_VEX_0F3AF0,
1423
1424 PREFIX_EVEX_0F10,
1425 PREFIX_EVEX_0F11,
1426 PREFIX_EVEX_0F12,
1427 PREFIX_EVEX_0F13,
1428 PREFIX_EVEX_0F14,
1429 PREFIX_EVEX_0F15,
1430 PREFIX_EVEX_0F16,
1431 PREFIX_EVEX_0F17,
1432 PREFIX_EVEX_0F28,
1433 PREFIX_EVEX_0F29,
1434 PREFIX_EVEX_0F2A,
1435 PREFIX_EVEX_0F2B,
1436 PREFIX_EVEX_0F2C,
1437 PREFIX_EVEX_0F2D,
1438 PREFIX_EVEX_0F2E,
1439 PREFIX_EVEX_0F2F,
1440 PREFIX_EVEX_0F51,
90a915bf
IT
1441 PREFIX_EVEX_0F54,
1442 PREFIX_EVEX_0F55,
1443 PREFIX_EVEX_0F56,
1444 PREFIX_EVEX_0F57,
43234a1e
L
1445 PREFIX_EVEX_0F58,
1446 PREFIX_EVEX_0F59,
1447 PREFIX_EVEX_0F5A,
1448 PREFIX_EVEX_0F5B,
1449 PREFIX_EVEX_0F5C,
1450 PREFIX_EVEX_0F5D,
1451 PREFIX_EVEX_0F5E,
1452 PREFIX_EVEX_0F5F,
1ba585e8
IT
1453 PREFIX_EVEX_0F60,
1454 PREFIX_EVEX_0F61,
43234a1e 1455 PREFIX_EVEX_0F62,
1ba585e8
IT
1456 PREFIX_EVEX_0F63,
1457 PREFIX_EVEX_0F64,
1458 PREFIX_EVEX_0F65,
43234a1e 1459 PREFIX_EVEX_0F66,
1ba585e8
IT
1460 PREFIX_EVEX_0F67,
1461 PREFIX_EVEX_0F68,
1462 PREFIX_EVEX_0F69,
43234a1e 1463 PREFIX_EVEX_0F6A,
1ba585e8 1464 PREFIX_EVEX_0F6B,
43234a1e
L
1465 PREFIX_EVEX_0F6C,
1466 PREFIX_EVEX_0F6D,
1467 PREFIX_EVEX_0F6E,
1468 PREFIX_EVEX_0F6F,
1469 PREFIX_EVEX_0F70,
1ba585e8
IT
1470 PREFIX_EVEX_0F71_REG_2,
1471 PREFIX_EVEX_0F71_REG_4,
1472 PREFIX_EVEX_0F71_REG_6,
43234a1e
L
1473 PREFIX_EVEX_0F72_REG_0,
1474 PREFIX_EVEX_0F72_REG_1,
1475 PREFIX_EVEX_0F72_REG_2,
1476 PREFIX_EVEX_0F72_REG_4,
1477 PREFIX_EVEX_0F72_REG_6,
1478 PREFIX_EVEX_0F73_REG_2,
1ba585e8 1479 PREFIX_EVEX_0F73_REG_3,
43234a1e 1480 PREFIX_EVEX_0F73_REG_6,
1ba585e8
IT
1481 PREFIX_EVEX_0F73_REG_7,
1482 PREFIX_EVEX_0F74,
1483 PREFIX_EVEX_0F75,
43234a1e
L
1484 PREFIX_EVEX_0F76,
1485 PREFIX_EVEX_0F78,
1486 PREFIX_EVEX_0F79,
1487 PREFIX_EVEX_0F7A,
1488 PREFIX_EVEX_0F7B,
1489 PREFIX_EVEX_0F7E,
1490 PREFIX_EVEX_0F7F,
1491 PREFIX_EVEX_0FC2,
1ba585e8
IT
1492 PREFIX_EVEX_0FC4,
1493 PREFIX_EVEX_0FC5,
43234a1e 1494 PREFIX_EVEX_0FC6,
1ba585e8 1495 PREFIX_EVEX_0FD1,
43234a1e
L
1496 PREFIX_EVEX_0FD2,
1497 PREFIX_EVEX_0FD3,
1498 PREFIX_EVEX_0FD4,
1ba585e8 1499 PREFIX_EVEX_0FD5,
43234a1e 1500 PREFIX_EVEX_0FD6,
1ba585e8
IT
1501 PREFIX_EVEX_0FD8,
1502 PREFIX_EVEX_0FD9,
1503 PREFIX_EVEX_0FDA,
43234a1e 1504 PREFIX_EVEX_0FDB,
1ba585e8
IT
1505 PREFIX_EVEX_0FDC,
1506 PREFIX_EVEX_0FDD,
1507 PREFIX_EVEX_0FDE,
43234a1e 1508 PREFIX_EVEX_0FDF,
1ba585e8
IT
1509 PREFIX_EVEX_0FE0,
1510 PREFIX_EVEX_0FE1,
43234a1e 1511 PREFIX_EVEX_0FE2,
1ba585e8
IT
1512 PREFIX_EVEX_0FE3,
1513 PREFIX_EVEX_0FE4,
1514 PREFIX_EVEX_0FE5,
43234a1e
L
1515 PREFIX_EVEX_0FE6,
1516 PREFIX_EVEX_0FE7,
1ba585e8
IT
1517 PREFIX_EVEX_0FE8,
1518 PREFIX_EVEX_0FE9,
1519 PREFIX_EVEX_0FEA,
43234a1e 1520 PREFIX_EVEX_0FEB,
1ba585e8
IT
1521 PREFIX_EVEX_0FEC,
1522 PREFIX_EVEX_0FED,
1523 PREFIX_EVEX_0FEE,
43234a1e 1524 PREFIX_EVEX_0FEF,
1ba585e8 1525 PREFIX_EVEX_0FF1,
43234a1e
L
1526 PREFIX_EVEX_0FF2,
1527 PREFIX_EVEX_0FF3,
1528 PREFIX_EVEX_0FF4,
1ba585e8
IT
1529 PREFIX_EVEX_0FF5,
1530 PREFIX_EVEX_0FF6,
1531 PREFIX_EVEX_0FF8,
1532 PREFIX_EVEX_0FF9,
43234a1e
L
1533 PREFIX_EVEX_0FFA,
1534 PREFIX_EVEX_0FFB,
1ba585e8
IT
1535 PREFIX_EVEX_0FFC,
1536 PREFIX_EVEX_0FFD,
43234a1e 1537 PREFIX_EVEX_0FFE,
1ba585e8
IT
1538 PREFIX_EVEX_0F3800,
1539 PREFIX_EVEX_0F3804,
1540 PREFIX_EVEX_0F380B,
43234a1e
L
1541 PREFIX_EVEX_0F380C,
1542 PREFIX_EVEX_0F380D,
1ba585e8 1543 PREFIX_EVEX_0F3810,
43234a1e
L
1544 PREFIX_EVEX_0F3811,
1545 PREFIX_EVEX_0F3812,
1546 PREFIX_EVEX_0F3813,
1547 PREFIX_EVEX_0F3814,
1548 PREFIX_EVEX_0F3815,
1549 PREFIX_EVEX_0F3816,
1550 PREFIX_EVEX_0F3818,
1551 PREFIX_EVEX_0F3819,
1552 PREFIX_EVEX_0F381A,
1553 PREFIX_EVEX_0F381B,
1ba585e8
IT
1554 PREFIX_EVEX_0F381C,
1555 PREFIX_EVEX_0F381D,
43234a1e
L
1556 PREFIX_EVEX_0F381E,
1557 PREFIX_EVEX_0F381F,
1ba585e8 1558 PREFIX_EVEX_0F3820,
43234a1e
L
1559 PREFIX_EVEX_0F3821,
1560 PREFIX_EVEX_0F3822,
1561 PREFIX_EVEX_0F3823,
1562 PREFIX_EVEX_0F3824,
1563 PREFIX_EVEX_0F3825,
1ba585e8 1564 PREFIX_EVEX_0F3826,
43234a1e
L
1565 PREFIX_EVEX_0F3827,
1566 PREFIX_EVEX_0F3828,
1567 PREFIX_EVEX_0F3829,
1568 PREFIX_EVEX_0F382A,
1ba585e8 1569 PREFIX_EVEX_0F382B,
43234a1e
L
1570 PREFIX_EVEX_0F382C,
1571 PREFIX_EVEX_0F382D,
1ba585e8 1572 PREFIX_EVEX_0F3830,
43234a1e
L
1573 PREFIX_EVEX_0F3831,
1574 PREFIX_EVEX_0F3832,
1575 PREFIX_EVEX_0F3833,
1576 PREFIX_EVEX_0F3834,
1577 PREFIX_EVEX_0F3835,
1578 PREFIX_EVEX_0F3836,
1579 PREFIX_EVEX_0F3837,
1ba585e8 1580 PREFIX_EVEX_0F3838,
43234a1e
L
1581 PREFIX_EVEX_0F3839,
1582 PREFIX_EVEX_0F383A,
1583 PREFIX_EVEX_0F383B,
1ba585e8 1584 PREFIX_EVEX_0F383C,
43234a1e 1585 PREFIX_EVEX_0F383D,
1ba585e8 1586 PREFIX_EVEX_0F383E,
43234a1e
L
1587 PREFIX_EVEX_0F383F,
1588 PREFIX_EVEX_0F3840,
1589 PREFIX_EVEX_0F3842,
1590 PREFIX_EVEX_0F3843,
1591 PREFIX_EVEX_0F3844,
1592 PREFIX_EVEX_0F3845,
1593 PREFIX_EVEX_0F3846,
1594 PREFIX_EVEX_0F3847,
1595 PREFIX_EVEX_0F384C,
1596 PREFIX_EVEX_0F384D,
1597 PREFIX_EVEX_0F384E,
1598 PREFIX_EVEX_0F384F,
8cfcb765
IT
1599 PREFIX_EVEX_0F3850,
1600 PREFIX_EVEX_0F3851,
47acf0bd
IT
1601 PREFIX_EVEX_0F3852,
1602 PREFIX_EVEX_0F3853,
ee6872be 1603 PREFIX_EVEX_0F3854,
620214f7 1604 PREFIX_EVEX_0F3855,
43234a1e
L
1605 PREFIX_EVEX_0F3858,
1606 PREFIX_EVEX_0F3859,
1607 PREFIX_EVEX_0F385A,
1608 PREFIX_EVEX_0F385B,
53467f57
IT
1609 PREFIX_EVEX_0F3862,
1610 PREFIX_EVEX_0F3863,
43234a1e
L
1611 PREFIX_EVEX_0F3864,
1612 PREFIX_EVEX_0F3865,
1ba585e8 1613 PREFIX_EVEX_0F3866,
53467f57
IT
1614 PREFIX_EVEX_0F3870,
1615 PREFIX_EVEX_0F3871,
1616 PREFIX_EVEX_0F3872,
1617 PREFIX_EVEX_0F3873,
1ba585e8 1618 PREFIX_EVEX_0F3875,
43234a1e
L
1619 PREFIX_EVEX_0F3876,
1620 PREFIX_EVEX_0F3877,
1ba585e8
IT
1621 PREFIX_EVEX_0F3878,
1622 PREFIX_EVEX_0F3879,
1623 PREFIX_EVEX_0F387A,
1624 PREFIX_EVEX_0F387B,
43234a1e 1625 PREFIX_EVEX_0F387C,
1ba585e8 1626 PREFIX_EVEX_0F387D,
43234a1e
L
1627 PREFIX_EVEX_0F387E,
1628 PREFIX_EVEX_0F387F,
14f195c9 1629 PREFIX_EVEX_0F3883,
43234a1e
L
1630 PREFIX_EVEX_0F3888,
1631 PREFIX_EVEX_0F3889,
1632 PREFIX_EVEX_0F388A,
1633 PREFIX_EVEX_0F388B,
1ba585e8 1634 PREFIX_EVEX_0F388D,
ee6872be 1635 PREFIX_EVEX_0F388F,
43234a1e
L
1636 PREFIX_EVEX_0F3890,
1637 PREFIX_EVEX_0F3891,
1638 PREFIX_EVEX_0F3892,
1639 PREFIX_EVEX_0F3893,
1640 PREFIX_EVEX_0F3896,
1641 PREFIX_EVEX_0F3897,
1642 PREFIX_EVEX_0F3898,
1643 PREFIX_EVEX_0F3899,
1644 PREFIX_EVEX_0F389A,
1645 PREFIX_EVEX_0F389B,
1646 PREFIX_EVEX_0F389C,
1647 PREFIX_EVEX_0F389D,
1648 PREFIX_EVEX_0F389E,
1649 PREFIX_EVEX_0F389F,
1650 PREFIX_EVEX_0F38A0,
1651 PREFIX_EVEX_0F38A1,
1652 PREFIX_EVEX_0F38A2,
1653 PREFIX_EVEX_0F38A3,
1654 PREFIX_EVEX_0F38A6,
1655 PREFIX_EVEX_0F38A7,
1656 PREFIX_EVEX_0F38A8,
1657 PREFIX_EVEX_0F38A9,
1658 PREFIX_EVEX_0F38AA,
1659 PREFIX_EVEX_0F38AB,
1660 PREFIX_EVEX_0F38AC,
1661 PREFIX_EVEX_0F38AD,
1662 PREFIX_EVEX_0F38AE,
1663 PREFIX_EVEX_0F38AF,
2cc1b5aa
IT
1664 PREFIX_EVEX_0F38B4,
1665 PREFIX_EVEX_0F38B5,
43234a1e
L
1666 PREFIX_EVEX_0F38B6,
1667 PREFIX_EVEX_0F38B7,
1668 PREFIX_EVEX_0F38B8,
1669 PREFIX_EVEX_0F38B9,
1670 PREFIX_EVEX_0F38BA,
1671 PREFIX_EVEX_0F38BB,
1672 PREFIX_EVEX_0F38BC,
1673 PREFIX_EVEX_0F38BD,
1674 PREFIX_EVEX_0F38BE,
1675 PREFIX_EVEX_0F38BF,
1676 PREFIX_EVEX_0F38C4,
1677 PREFIX_EVEX_0F38C6_REG_1,
1678 PREFIX_EVEX_0F38C6_REG_2,
1679 PREFIX_EVEX_0F38C6_REG_5,
1680 PREFIX_EVEX_0F38C6_REG_6,
1681 PREFIX_EVEX_0F38C7_REG_1,
1682 PREFIX_EVEX_0F38C7_REG_2,
1683 PREFIX_EVEX_0F38C7_REG_5,
1684 PREFIX_EVEX_0F38C7_REG_6,
1685 PREFIX_EVEX_0F38C8,
1686 PREFIX_EVEX_0F38CA,
1687 PREFIX_EVEX_0F38CB,
1688 PREFIX_EVEX_0F38CC,
1689 PREFIX_EVEX_0F38CD,
48521003 1690 PREFIX_EVEX_0F38CF,
8dcf1fad
IT
1691 PREFIX_EVEX_0F38DC,
1692 PREFIX_EVEX_0F38DD,
1693 PREFIX_EVEX_0F38DE,
1694 PREFIX_EVEX_0F38DF,
43234a1e
L
1695
1696 PREFIX_EVEX_0F3A00,
1697 PREFIX_EVEX_0F3A01,
1698 PREFIX_EVEX_0F3A03,
1699 PREFIX_EVEX_0F3A04,
1700 PREFIX_EVEX_0F3A05,
1701 PREFIX_EVEX_0F3A08,
1702 PREFIX_EVEX_0F3A09,
1703 PREFIX_EVEX_0F3A0A,
1704 PREFIX_EVEX_0F3A0B,
1ba585e8
IT
1705 PREFIX_EVEX_0F3A0F,
1706 PREFIX_EVEX_0F3A14,
1707 PREFIX_EVEX_0F3A15,
90a915bf 1708 PREFIX_EVEX_0F3A16,
43234a1e
L
1709 PREFIX_EVEX_0F3A17,
1710 PREFIX_EVEX_0F3A18,
1711 PREFIX_EVEX_0F3A19,
1712 PREFIX_EVEX_0F3A1A,
1713 PREFIX_EVEX_0F3A1B,
1714 PREFIX_EVEX_0F3A1D,
1715 PREFIX_EVEX_0F3A1E,
1716 PREFIX_EVEX_0F3A1F,
1ba585e8 1717 PREFIX_EVEX_0F3A20,
43234a1e 1718 PREFIX_EVEX_0F3A21,
90a915bf 1719 PREFIX_EVEX_0F3A22,
43234a1e
L
1720 PREFIX_EVEX_0F3A23,
1721 PREFIX_EVEX_0F3A25,
1722 PREFIX_EVEX_0F3A26,
1723 PREFIX_EVEX_0F3A27,
1724 PREFIX_EVEX_0F3A38,
1725 PREFIX_EVEX_0F3A39,
1726 PREFIX_EVEX_0F3A3A,
1727 PREFIX_EVEX_0F3A3B,
1ba585e8
IT
1728 PREFIX_EVEX_0F3A3E,
1729 PREFIX_EVEX_0F3A3F,
1730 PREFIX_EVEX_0F3A42,
43234a1e 1731 PREFIX_EVEX_0F3A43,
ff1982d5 1732 PREFIX_EVEX_0F3A44,
90a915bf
IT
1733 PREFIX_EVEX_0F3A50,
1734 PREFIX_EVEX_0F3A51,
43234a1e 1735 PREFIX_EVEX_0F3A54,
90a915bf
IT
1736 PREFIX_EVEX_0F3A55,
1737 PREFIX_EVEX_0F3A56,
1738 PREFIX_EVEX_0F3A57,
1739 PREFIX_EVEX_0F3A66,
53467f57
IT
1740 PREFIX_EVEX_0F3A67,
1741 PREFIX_EVEX_0F3A70,
1742 PREFIX_EVEX_0F3A71,
1743 PREFIX_EVEX_0F3A72,
48521003
IT
1744 PREFIX_EVEX_0F3A73,
1745 PREFIX_EVEX_0F3ACE,
1746 PREFIX_EVEX_0F3ACF
51e7da1b 1747};
4e7d34a6 1748
51e7da1b
L
1749enum
1750{
1751 X86_64_06 = 0,
3873ba12
L
1752 X86_64_07,
1753 X86_64_0D,
1754 X86_64_16,
1755 X86_64_17,
1756 X86_64_1E,
1757 X86_64_1F,
1758 X86_64_27,
1759 X86_64_2F,
1760 X86_64_37,
1761 X86_64_3F,
1762 X86_64_60,
1763 X86_64_61,
1764 X86_64_62,
1765 X86_64_63,
1766 X86_64_6D,
1767 X86_64_6F,
d039fef3 1768 X86_64_82,
3873ba12
L
1769 X86_64_9A,
1770 X86_64_C4,
1771 X86_64_C5,
1772 X86_64_CE,
1773 X86_64_D4,
1774 X86_64_D5,
a72d2af2
L
1775 X86_64_E8,
1776 X86_64_E9,
3873ba12
L
1777 X86_64_EA,
1778 X86_64_0F01_REG_0,
1779 X86_64_0F01_REG_1,
1780 X86_64_0F01_REG_2,
1781 X86_64_0F01_REG_3
51e7da1b 1782};
4e7d34a6 1783
51e7da1b
L
1784enum
1785{
1786 THREE_BYTE_0F38 = 0,
1f334aeb 1787 THREE_BYTE_0F3A
51e7da1b 1788};
4e7d34a6 1789
f88c9eb0
SP
1790enum
1791{
5dd85c99
SP
1792 XOP_08 = 0,
1793 XOP_09,
f88c9eb0
SP
1794 XOP_0A
1795};
1796
51e7da1b
L
1797enum
1798{
1799 VEX_0F = 0,
3873ba12
L
1800 VEX_0F38,
1801 VEX_0F3A
51e7da1b 1802};
c0f3af97 1803
43234a1e
L
1804enum
1805{
1806 EVEX_0F = 0,
1807 EVEX_0F38,
1808 EVEX_0F3A
1809};
1810
51e7da1b
L
1811enum
1812{
ec6f095a 1813 VEX_LEN_0F12_P_0_M_0 = 0,
592a252b
L
1814 VEX_LEN_0F12_P_0_M_1,
1815 VEX_LEN_0F12_P_2,
1816 VEX_LEN_0F13_M_0,
1817 VEX_LEN_0F16_P_0_M_0,
1818 VEX_LEN_0F16_P_0_M_1,
1819 VEX_LEN_0F16_P_2,
1820 VEX_LEN_0F17_M_0,
1821 VEX_LEN_0F2A_P_1,
1822 VEX_LEN_0F2A_P_3,
1823 VEX_LEN_0F2C_P_1,
1824 VEX_LEN_0F2C_P_3,
1825 VEX_LEN_0F2D_P_1,
1826 VEX_LEN_0F2D_P_3,
43234a1e 1827 VEX_LEN_0F41_P_0,
1ba585e8 1828 VEX_LEN_0F41_P_2,
43234a1e 1829 VEX_LEN_0F42_P_0,
1ba585e8 1830 VEX_LEN_0F42_P_2,
43234a1e 1831 VEX_LEN_0F44_P_0,
1ba585e8 1832 VEX_LEN_0F44_P_2,
43234a1e 1833 VEX_LEN_0F45_P_0,
1ba585e8 1834 VEX_LEN_0F45_P_2,
43234a1e 1835 VEX_LEN_0F46_P_0,
1ba585e8 1836 VEX_LEN_0F46_P_2,
43234a1e 1837 VEX_LEN_0F47_P_0,
1ba585e8
IT
1838 VEX_LEN_0F47_P_2,
1839 VEX_LEN_0F4A_P_0,
1840 VEX_LEN_0F4A_P_2,
1841 VEX_LEN_0F4B_P_0,
43234a1e 1842 VEX_LEN_0F4B_P_2,
592a252b 1843 VEX_LEN_0F6E_P_2,
ec6f095a 1844 VEX_LEN_0F77_P_0,
592a252b
L
1845 VEX_LEN_0F7E_P_1,
1846 VEX_LEN_0F7E_P_2,
43234a1e 1847 VEX_LEN_0F90_P_0,
1ba585e8 1848 VEX_LEN_0F90_P_2,
43234a1e 1849 VEX_LEN_0F91_P_0,
1ba585e8 1850 VEX_LEN_0F91_P_2,
43234a1e 1851 VEX_LEN_0F92_P_0,
90a915bf 1852 VEX_LEN_0F92_P_2,
1ba585e8 1853 VEX_LEN_0F92_P_3,
43234a1e 1854 VEX_LEN_0F93_P_0,
90a915bf 1855 VEX_LEN_0F93_P_2,
1ba585e8 1856 VEX_LEN_0F93_P_3,
43234a1e 1857 VEX_LEN_0F98_P_0,
1ba585e8
IT
1858 VEX_LEN_0F98_P_2,
1859 VEX_LEN_0F99_P_0,
1860 VEX_LEN_0F99_P_2,
592a252b
L
1861 VEX_LEN_0FAE_R_2_M_0,
1862 VEX_LEN_0FAE_R_3_M_0,
592a252b
L
1863 VEX_LEN_0FC4_P_2,
1864 VEX_LEN_0FC5_P_2,
592a252b 1865 VEX_LEN_0FD6_P_2,
592a252b 1866 VEX_LEN_0FF7_P_2,
6c30d220
L
1867 VEX_LEN_0F3816_P_2,
1868 VEX_LEN_0F3819_P_2,
592a252b 1869 VEX_LEN_0F381A_P_2_M_0,
6c30d220 1870 VEX_LEN_0F3836_P_2,
592a252b 1871 VEX_LEN_0F3841_P_2,
6c30d220 1872 VEX_LEN_0F385A_P_2_M_0,
592a252b 1873 VEX_LEN_0F38DB_P_2,
f12dc422
L
1874 VEX_LEN_0F38F2_P_0,
1875 VEX_LEN_0F38F3_R_1_P_0,
1876 VEX_LEN_0F38F3_R_2_P_0,
1877 VEX_LEN_0F38F3_R_3_P_0,
6c30d220
L
1878 VEX_LEN_0F38F5_P_0,
1879 VEX_LEN_0F38F5_P_1,
1880 VEX_LEN_0F38F5_P_3,
1881 VEX_LEN_0F38F6_P_3,
f12dc422 1882 VEX_LEN_0F38F7_P_0,
6c30d220
L
1883 VEX_LEN_0F38F7_P_1,
1884 VEX_LEN_0F38F7_P_2,
1885 VEX_LEN_0F38F7_P_3,
1886 VEX_LEN_0F3A00_P_2,
1887 VEX_LEN_0F3A01_P_2,
592a252b 1888 VEX_LEN_0F3A06_P_2,
592a252b
L
1889 VEX_LEN_0F3A14_P_2,
1890 VEX_LEN_0F3A15_P_2,
1891 VEX_LEN_0F3A16_P_2,
1892 VEX_LEN_0F3A17_P_2,
1893 VEX_LEN_0F3A18_P_2,
1894 VEX_LEN_0F3A19_P_2,
1895 VEX_LEN_0F3A20_P_2,
1896 VEX_LEN_0F3A21_P_2,
1897 VEX_LEN_0F3A22_P_2,
43234a1e 1898 VEX_LEN_0F3A30_P_2,
1ba585e8 1899 VEX_LEN_0F3A31_P_2,
43234a1e 1900 VEX_LEN_0F3A32_P_2,
1ba585e8 1901 VEX_LEN_0F3A33_P_2,
6c30d220
L
1902 VEX_LEN_0F3A38_P_2,
1903 VEX_LEN_0F3A39_P_2,
592a252b 1904 VEX_LEN_0F3A41_P_2,
6c30d220 1905 VEX_LEN_0F3A46_P_2,
592a252b
L
1906 VEX_LEN_0F3A60_P_2,
1907 VEX_LEN_0F3A61_P_2,
1908 VEX_LEN_0F3A62_P_2,
1909 VEX_LEN_0F3A63_P_2,
1910 VEX_LEN_0F3A6A_P_2,
1911 VEX_LEN_0F3A6B_P_2,
1912 VEX_LEN_0F3A6E_P_2,
1913 VEX_LEN_0F3A6F_P_2,
1914 VEX_LEN_0F3A7A_P_2,
1915 VEX_LEN_0F3A7B_P_2,
1916 VEX_LEN_0F3A7E_P_2,
1917 VEX_LEN_0F3A7F_P_2,
1918 VEX_LEN_0F3ADF_P_2,
6c30d220 1919 VEX_LEN_0F3AF0_P_3,
ff688e1f
L
1920 VEX_LEN_0FXOP_08_CC,
1921 VEX_LEN_0FXOP_08_CD,
1922 VEX_LEN_0FXOP_08_CE,
1923 VEX_LEN_0FXOP_08_CF,
1924 VEX_LEN_0FXOP_08_EC,
1925 VEX_LEN_0FXOP_08_ED,
1926 VEX_LEN_0FXOP_08_EE,
1927 VEX_LEN_0FXOP_08_EF,
592a252b
L
1928 VEX_LEN_0FXOP_09_80,
1929 VEX_LEN_0FXOP_09_81
51e7da1b 1930};
c0f3af97 1931
04e2a182
L
1932enum
1933{
1934 EVEX_LEN_0F6E_P_2 = 0,
1935 EVEX_LEN_0F7E_P_1,
1936 EVEX_LEN_0F7E_P_2,
1937 EVEX_LEN_0FD6_P_2
1938};
1939
9e30b8e0
L
1940enum
1941{
ec6f095a 1942 VEX_W_0F41_P_0_LEN_1 = 0,
1ba585e8 1943 VEX_W_0F41_P_2_LEN_1,
43234a1e 1944 VEX_W_0F42_P_0_LEN_1,
1ba585e8 1945 VEX_W_0F42_P_2_LEN_1,
43234a1e 1946 VEX_W_0F44_P_0_LEN_0,
1ba585e8 1947 VEX_W_0F44_P_2_LEN_0,
43234a1e 1948 VEX_W_0F45_P_0_LEN_1,
1ba585e8 1949 VEX_W_0F45_P_2_LEN_1,
43234a1e 1950 VEX_W_0F46_P_0_LEN_1,
1ba585e8 1951 VEX_W_0F46_P_2_LEN_1,
43234a1e 1952 VEX_W_0F47_P_0_LEN_1,
1ba585e8
IT
1953 VEX_W_0F47_P_2_LEN_1,
1954 VEX_W_0F4A_P_0_LEN_1,
1955 VEX_W_0F4A_P_2_LEN_1,
1956 VEX_W_0F4B_P_0_LEN_1,
43234a1e 1957 VEX_W_0F4B_P_2_LEN_1,
43234a1e 1958 VEX_W_0F90_P_0_LEN_0,
1ba585e8 1959 VEX_W_0F90_P_2_LEN_0,
43234a1e 1960 VEX_W_0F91_P_0_LEN_0,
1ba585e8 1961 VEX_W_0F91_P_2_LEN_0,
43234a1e 1962 VEX_W_0F92_P_0_LEN_0,
90a915bf 1963 VEX_W_0F92_P_2_LEN_0,
43234a1e 1964 VEX_W_0F93_P_0_LEN_0,
90a915bf 1965 VEX_W_0F93_P_2_LEN_0,
43234a1e 1966 VEX_W_0F98_P_0_LEN_0,
1ba585e8
IT
1967 VEX_W_0F98_P_2_LEN_0,
1968 VEX_W_0F99_P_0_LEN_0,
1969 VEX_W_0F99_P_2_LEN_0,
592a252b
L
1970 VEX_W_0F380C_P_2,
1971 VEX_W_0F380D_P_2,
1972 VEX_W_0F380E_P_2,
1973 VEX_W_0F380F_P_2,
6c30d220 1974 VEX_W_0F3816_P_2,
6c30d220
L
1975 VEX_W_0F3818_P_2,
1976 VEX_W_0F3819_P_2,
592a252b 1977 VEX_W_0F381A_P_2_M_0,
592a252b
L
1978 VEX_W_0F382C_P_2_M_0,
1979 VEX_W_0F382D_P_2_M_0,
1980 VEX_W_0F382E_P_2_M_0,
1981 VEX_W_0F382F_P_2_M_0,
6c30d220 1982 VEX_W_0F3836_P_2,
6c30d220
L
1983 VEX_W_0F3846_P_2,
1984 VEX_W_0F3858_P_2,
1985 VEX_W_0F3859_P_2,
1986 VEX_W_0F385A_P_2_M_0,
1987 VEX_W_0F3878_P_2,
1988 VEX_W_0F3879_P_2,
48521003 1989 VEX_W_0F38CF_P_2,
6c30d220
L
1990 VEX_W_0F3A00_P_2,
1991 VEX_W_0F3A01_P_2,
1992 VEX_W_0F3A02_P_2,
592a252b
L
1993 VEX_W_0F3A04_P_2,
1994 VEX_W_0F3A05_P_2,
1995 VEX_W_0F3A06_P_2,
592a252b
L
1996 VEX_W_0F3A18_P_2,
1997 VEX_W_0F3A19_P_2,
43234a1e 1998 VEX_W_0F3A30_P_2_LEN_0,
1ba585e8 1999 VEX_W_0F3A31_P_2_LEN_0,
43234a1e 2000 VEX_W_0F3A32_P_2_LEN_0,
1ba585e8 2001 VEX_W_0F3A33_P_2_LEN_0,
6c30d220
L
2002 VEX_W_0F3A38_P_2,
2003 VEX_W_0F3A39_P_2,
6c30d220 2004 VEX_W_0F3A46_P_2,
592a252b
L
2005 VEX_W_0F3A48_P_2,
2006 VEX_W_0F3A49_P_2,
2007 VEX_W_0F3A4A_P_2,
2008 VEX_W_0F3A4B_P_2,
2009 VEX_W_0F3A4C_P_2,
48521003
IT
2010 VEX_W_0F3ACE_P_2,
2011 VEX_W_0F3ACF_P_2,
43234a1e
L
2012
2013 EVEX_W_0F10_P_0,
2014 EVEX_W_0F10_P_1_M_0,
2015 EVEX_W_0F10_P_1_M_1,
2016 EVEX_W_0F10_P_2,
2017 EVEX_W_0F10_P_3_M_0,
2018 EVEX_W_0F10_P_3_M_1,
2019 EVEX_W_0F11_P_0,
2020 EVEX_W_0F11_P_1_M_0,
2021 EVEX_W_0F11_P_1_M_1,
2022 EVEX_W_0F11_P_2,
2023 EVEX_W_0F11_P_3_M_0,
2024 EVEX_W_0F11_P_3_M_1,
2025 EVEX_W_0F12_P_0_M_0,
2026 EVEX_W_0F12_P_0_M_1,
2027 EVEX_W_0F12_P_1,
2028 EVEX_W_0F12_P_2,
2029 EVEX_W_0F12_P_3,
2030 EVEX_W_0F13_P_0,
2031 EVEX_W_0F13_P_2,
2032 EVEX_W_0F14_P_0,
2033 EVEX_W_0F14_P_2,
2034 EVEX_W_0F15_P_0,
2035 EVEX_W_0F15_P_2,
2036 EVEX_W_0F16_P_0_M_0,
2037 EVEX_W_0F16_P_0_M_1,
2038 EVEX_W_0F16_P_1,
2039 EVEX_W_0F16_P_2,
2040 EVEX_W_0F17_P_0,
2041 EVEX_W_0F17_P_2,
2042 EVEX_W_0F28_P_0,
2043 EVEX_W_0F28_P_2,
2044 EVEX_W_0F29_P_0,
2045 EVEX_W_0F29_P_2,
2046 EVEX_W_0F2A_P_1,
2047 EVEX_W_0F2A_P_3,
2048 EVEX_W_0F2B_P_0,
2049 EVEX_W_0F2B_P_2,
2050 EVEX_W_0F2E_P_0,
2051 EVEX_W_0F2E_P_2,
2052 EVEX_W_0F2F_P_0,
2053 EVEX_W_0F2F_P_2,
2054 EVEX_W_0F51_P_0,
2055 EVEX_W_0F51_P_1,
2056 EVEX_W_0F51_P_2,
2057 EVEX_W_0F51_P_3,
90a915bf
IT
2058 EVEX_W_0F54_P_0,
2059 EVEX_W_0F54_P_2,
2060 EVEX_W_0F55_P_0,
2061 EVEX_W_0F55_P_2,
2062 EVEX_W_0F56_P_0,
2063 EVEX_W_0F56_P_2,
2064 EVEX_W_0F57_P_0,
2065 EVEX_W_0F57_P_2,
43234a1e
L
2066 EVEX_W_0F58_P_0,
2067 EVEX_W_0F58_P_1,
2068 EVEX_W_0F58_P_2,
2069 EVEX_W_0F58_P_3,
2070 EVEX_W_0F59_P_0,
2071 EVEX_W_0F59_P_1,
2072 EVEX_W_0F59_P_2,
2073 EVEX_W_0F59_P_3,
2074 EVEX_W_0F5A_P_0,
2075 EVEX_W_0F5A_P_1,
2076 EVEX_W_0F5A_P_2,
2077 EVEX_W_0F5A_P_3,
2078 EVEX_W_0F5B_P_0,
2079 EVEX_W_0F5B_P_1,
2080 EVEX_W_0F5B_P_2,
2081 EVEX_W_0F5C_P_0,
2082 EVEX_W_0F5C_P_1,
2083 EVEX_W_0F5C_P_2,
2084 EVEX_W_0F5C_P_3,
2085 EVEX_W_0F5D_P_0,
2086 EVEX_W_0F5D_P_1,
2087 EVEX_W_0F5D_P_2,
2088 EVEX_W_0F5D_P_3,
2089 EVEX_W_0F5E_P_0,
2090 EVEX_W_0F5E_P_1,
2091 EVEX_W_0F5E_P_2,
2092 EVEX_W_0F5E_P_3,
2093 EVEX_W_0F5F_P_0,
2094 EVEX_W_0F5F_P_1,
2095 EVEX_W_0F5F_P_2,
2096 EVEX_W_0F5F_P_3,
2097 EVEX_W_0F62_P_2,
2098 EVEX_W_0F66_P_2,
2099 EVEX_W_0F6A_P_2,
1ba585e8 2100 EVEX_W_0F6B_P_2,
43234a1e
L
2101 EVEX_W_0F6C_P_2,
2102 EVEX_W_0F6D_P_2,
43234a1e
L
2103 EVEX_W_0F6F_P_1,
2104 EVEX_W_0F6F_P_2,
1ba585e8 2105 EVEX_W_0F6F_P_3,
43234a1e
L
2106 EVEX_W_0F70_P_2,
2107 EVEX_W_0F72_R_2_P_2,
2108 EVEX_W_0F72_R_6_P_2,
2109 EVEX_W_0F73_R_2_P_2,
2110 EVEX_W_0F73_R_6_P_2,
2111 EVEX_W_0F76_P_2,
2112 EVEX_W_0F78_P_0,
90a915bf 2113 EVEX_W_0F78_P_2,
43234a1e 2114 EVEX_W_0F79_P_0,
90a915bf 2115 EVEX_W_0F79_P_2,
43234a1e 2116 EVEX_W_0F7A_P_1,
90a915bf 2117 EVEX_W_0F7A_P_2,
43234a1e
L
2118 EVEX_W_0F7A_P_3,
2119 EVEX_W_0F7B_P_1,
90a915bf 2120 EVEX_W_0F7B_P_2,
43234a1e
L
2121 EVEX_W_0F7B_P_3,
2122 EVEX_W_0F7E_P_1,
43234a1e
L
2123 EVEX_W_0F7F_P_1,
2124 EVEX_W_0F7F_P_2,
1ba585e8 2125 EVEX_W_0F7F_P_3,
43234a1e
L
2126 EVEX_W_0FC2_P_0,
2127 EVEX_W_0FC2_P_1,
2128 EVEX_W_0FC2_P_2,
2129 EVEX_W_0FC2_P_3,
2130 EVEX_W_0FC6_P_0,
2131 EVEX_W_0FC6_P_2,
2132 EVEX_W_0FD2_P_2,
2133 EVEX_W_0FD3_P_2,
2134 EVEX_W_0FD4_P_2,
2135 EVEX_W_0FD6_P_2,
2136 EVEX_W_0FE6_P_1,
2137 EVEX_W_0FE6_P_2,
2138 EVEX_W_0FE6_P_3,
2139 EVEX_W_0FE7_P_2,
2140 EVEX_W_0FF2_P_2,
2141 EVEX_W_0FF3_P_2,
2142 EVEX_W_0FF4_P_2,
2143 EVEX_W_0FFA_P_2,
2144 EVEX_W_0FFB_P_2,
2145 EVEX_W_0FFE_P_2,
2146 EVEX_W_0F380C_P_2,
2147 EVEX_W_0F380D_P_2,
1ba585e8
IT
2148 EVEX_W_0F3810_P_1,
2149 EVEX_W_0F3810_P_2,
43234a1e 2150 EVEX_W_0F3811_P_1,
1ba585e8 2151 EVEX_W_0F3811_P_2,
43234a1e 2152 EVEX_W_0F3812_P_1,
1ba585e8 2153 EVEX_W_0F3812_P_2,
43234a1e
L
2154 EVEX_W_0F3813_P_1,
2155 EVEX_W_0F3813_P_2,
2156 EVEX_W_0F3814_P_1,
2157 EVEX_W_0F3815_P_1,
2158 EVEX_W_0F3818_P_2,
2159 EVEX_W_0F3819_P_2,
2160 EVEX_W_0F381A_P_2,
2161 EVEX_W_0F381B_P_2,
2162 EVEX_W_0F381E_P_2,
2163 EVEX_W_0F381F_P_2,
1ba585e8 2164 EVEX_W_0F3820_P_1,
43234a1e
L
2165 EVEX_W_0F3821_P_1,
2166 EVEX_W_0F3822_P_1,
2167 EVEX_W_0F3823_P_1,
2168 EVEX_W_0F3824_P_1,
2169 EVEX_W_0F3825_P_1,
2170 EVEX_W_0F3825_P_2,
1ba585e8
IT
2171 EVEX_W_0F3826_P_1,
2172 EVEX_W_0F3826_P_2,
2173 EVEX_W_0F3828_P_1,
43234a1e 2174 EVEX_W_0F3828_P_2,
1ba585e8 2175 EVEX_W_0F3829_P_1,
43234a1e
L
2176 EVEX_W_0F3829_P_2,
2177 EVEX_W_0F382A_P_1,
2178 EVEX_W_0F382A_P_2,
1ba585e8
IT
2179 EVEX_W_0F382B_P_2,
2180 EVEX_W_0F3830_P_1,
43234a1e
L
2181 EVEX_W_0F3831_P_1,
2182 EVEX_W_0F3832_P_1,
2183 EVEX_W_0F3833_P_1,
2184 EVEX_W_0F3834_P_1,
2185 EVEX_W_0F3835_P_1,
2186 EVEX_W_0F3835_P_2,
2187 EVEX_W_0F3837_P_2,
90a915bf
IT
2188 EVEX_W_0F3838_P_1,
2189 EVEX_W_0F3839_P_1,
43234a1e
L
2190 EVEX_W_0F383A_P_1,
2191 EVEX_W_0F3840_P_2,
d6aab7a1 2192 EVEX_W_0F3852_P_1,
ee6872be 2193 EVEX_W_0F3854_P_2,
620214f7 2194 EVEX_W_0F3855_P_2,
43234a1e
L
2195 EVEX_W_0F3858_P_2,
2196 EVEX_W_0F3859_P_2,
2197 EVEX_W_0F385A_P_2,
2198 EVEX_W_0F385B_P_2,
53467f57
IT
2199 EVEX_W_0F3862_P_2,
2200 EVEX_W_0F3863_P_2,
1ba585e8 2201 EVEX_W_0F3866_P_2,
53467f57
IT
2202 EVEX_W_0F3870_P_2,
2203 EVEX_W_0F3871_P_2,
d6aab7a1 2204 EVEX_W_0F3872_P_1,
53467f57 2205 EVEX_W_0F3872_P_2,
d6aab7a1 2206 EVEX_W_0F3872_P_3,
53467f57 2207 EVEX_W_0F3873_P_2,
1ba585e8
IT
2208 EVEX_W_0F3875_P_2,
2209 EVEX_W_0F3878_P_2,
2210 EVEX_W_0F3879_P_2,
2211 EVEX_W_0F387A_P_2,
2212 EVEX_W_0F387B_P_2,
2213 EVEX_W_0F387D_P_2,
14f195c9 2214 EVEX_W_0F3883_P_2,
1ba585e8 2215 EVEX_W_0F388D_P_2,
43234a1e
L
2216 EVEX_W_0F3891_P_2,
2217 EVEX_W_0F3893_P_2,
2218 EVEX_W_0F38A1_P_2,
2219 EVEX_W_0F38A3_P_2,
2220 EVEX_W_0F38C7_R_1_P_2,
2221 EVEX_W_0F38C7_R_2_P_2,
2222 EVEX_W_0F38C7_R_5_P_2,
2223 EVEX_W_0F38C7_R_6_P_2,
2224
2225 EVEX_W_0F3A00_P_2,
2226 EVEX_W_0F3A01_P_2,
2227 EVEX_W_0F3A04_P_2,
2228 EVEX_W_0F3A05_P_2,
2229 EVEX_W_0F3A08_P_2,
2230 EVEX_W_0F3A09_P_2,
2231 EVEX_W_0F3A0A_P_2,
2232 EVEX_W_0F3A0B_P_2,
2233 EVEX_W_0F3A18_P_2,
2234 EVEX_W_0F3A19_P_2,
2235 EVEX_W_0F3A1A_P_2,
2236 EVEX_W_0F3A1B_P_2,
2237 EVEX_W_0F3A1D_P_2,
2238 EVEX_W_0F3A21_P_2,
2239 EVEX_W_0F3A23_P_2,
2240 EVEX_W_0F3A38_P_2,
2241 EVEX_W_0F3A39_P_2,
2242 EVEX_W_0F3A3A_P_2,
2243 EVEX_W_0F3A3B_P_2,
1ba585e8
IT
2244 EVEX_W_0F3A3E_P_2,
2245 EVEX_W_0F3A3F_P_2,
2246 EVEX_W_0F3A42_P_2,
90a915bf
IT
2247 EVEX_W_0F3A43_P_2,
2248 EVEX_W_0F3A50_P_2,
2249 EVEX_W_0F3A51_P_2,
2250 EVEX_W_0F3A56_P_2,
2251 EVEX_W_0F3A57_P_2,
2252 EVEX_W_0F3A66_P_2,
53467f57
IT
2253 EVEX_W_0F3A67_P_2,
2254 EVEX_W_0F3A70_P_2,
2255 EVEX_W_0F3A71_P_2,
2256 EVEX_W_0F3A72_P_2,
48521003
IT
2257 EVEX_W_0F3A73_P_2,
2258 EVEX_W_0F3ACE_P_2,
2259 EVEX_W_0F3ACF_P_2
9e30b8e0
L
2260};
2261
26ca5450 2262typedef void (*op_rtn) (int bytemode, int sizeflag);
252b5132
RH
2263
2264struct dis386 {
2da11e11 2265 const char *name;
ce518a5f
L
2266 struct
2267 {
2268 op_rtn rtn;
2269 int bytemode;
2270 } op[MAX_OPERANDS];
bf890a93 2271 unsigned int prefix_requirement;
252b5132
RH
2272};
2273
2274/* Upper case letters in the instruction names here are macros.
2275 'A' => print 'b' if no register operands or suffix_always is true
2276 'B' => print 'b' if suffix_always is true
9306ca4a 2277 'C' => print 's' or 'l' ('w' or 'd' in Intel mode) depending on operand
98b528ac 2278 size prefix
ed7841b3 2279 'D' => print 'w' if no register operands or 'w', 'l' or 'q', if
98b528ac 2280 suffix_always is true
252b5132 2281 'E' => print 'e' if 32-bit form of jcxz
3ffd33cf 2282 'F' => print 'w' or 'l' depending on address size prefix (loop insns)
52fd6d94 2283 'G' => print 'w' or 'l' depending on operand size prefix (i/o insns)
5dd0794d 2284 'H' => print ",pt" or ",pn" branch hint
9306ca4a 2285 'I' => honor following macro letter even in Intel mode (implemented only
98b528ac 2286 for some of the macro letters)
9306ca4a 2287 'J' => print 'l'
42903f7f 2288 'K' => print 'd' or 'q' if rex prefix is present.
252b5132 2289 'L' => print 'l' if suffix_always is true
9d141669 2290 'M' => print 'r' if intel_mnemonic is false.
252b5132 2291 'N' => print 'n' if instruction has no wait "prefix"
a35ca55a 2292 'O' => print 'd' or 'o' (or 'q' in Intel mode)
52b15da3 2293 'P' => print 'w', 'l' or 'q' if instruction has an operand size prefix,
98b528ac
L
2294 or suffix_always is true. print 'q' if rex prefix is present.
2295 'Q' => print 'w', 'l' or 'q' for memory operand or suffix_always
2296 is true
a35ca55a 2297 'R' => print 'w', 'l' or 'q' ('d' for 'l' and 'e' in Intel mode)
52b15da3 2298 'S' => print 'w', 'l' or 'q' if suffix_always is true
a72d2af2
L
2299 'T' => print 'q' in 64bit mode if instruction has no operand size
2300 prefix and behave as 'P' otherwise
2301 'U' => print 'q' in 64bit mode if instruction has no operand size
2302 prefix and behave as 'Q' otherwise
2303 'V' => print 'q' in 64bit mode if instruction has no operand size
2304 prefix and behave as 'S' otherwise
a35ca55a 2305 'W' => print 'b', 'w' or 'l' ('d' in Intel mode)
9306ca4a 2306 'X' => print 's', 'd' depending on data16 prefix (for XMM)
9646c87b 2307 'Y' unused.
6dd5059a 2308 'Z' => print 'q' in 64bit mode and behave as 'L' otherwise
9d141669 2309 '!' => change condition from true to false or from false to true.
98b528ac 2310 '%' => add 1 upper case letter to the macro.
a72d2af2
L
2311 '^' => print 'w' or 'l' depending on operand size prefix or
2312 suffix_always is true (lcall/ljmp).
5db04b09
L
2313 '@' => print 'q' for Intel64 ISA, 'w' or 'q' for AMD64 ISA depending
2314 on operand size prefix.
07f5af7d
L
2315 '&' => print 'q' in 64bit mode for Intel64 ISA or if instruction
2316 has no operand size prefix for AMD64 ISA, behave as 'P'
2317 otherwise
98b528ac
L
2318
2319 2 upper case letter macros:
04d824a4
JB
2320 "XY" => print 'x' or 'y' if suffix_always is true or no register
2321 operands and no broadcast.
2322 "XZ" => print 'x', 'y', or 'z' if suffix_always is true or no
2323 register operands and no broadcast.
4b06377f
L
2324 "XW" => print 's', 'd' depending on the VEX.W bit (for FMA)
2325 "LQ" => print 'l' ('d' in Intel mode) or 'q' for memory operand
98b528ac 2326 or suffix_always is true
4b06377f
L
2327 "LB" => print "abs" in 64bit mode and behave as 'B' otherwise
2328 "LS" => print "abs" in 64bit mode and behave as 'S' otherwise
2329 "LV" => print "abs" for 64bit operand and behave as 'S' otherwise
6c30d220 2330 "LW" => print 'd', 'q' depending on the VEX.W bit
4b4c407a
L
2331 "LP" => print 'w' or 'l' ('d' in Intel mode) if instruction has
2332 an operand size prefix, or suffix_always is true. print
2333 'q' if rex prefix is present.
52b15da3 2334
6439fc28
AM
2335 Many of the above letters print nothing in Intel mode. See "putop"
2336 for the details.
52b15da3 2337
6439fc28 2338 Braces '{' and '}', and vertical bars '|', indicate alternative
7c52e0e8 2339 mnemonic strings for AT&T and Intel. */
252b5132 2340
6439fc28 2341static const struct dis386 dis386[] = {
252b5132 2342 /* 00 */
bf890a93
IT
2343 { "addB", { Ebh1, Gb }, 0 },
2344 { "addS", { Evh1, Gv }, 0 },
2345 { "addB", { Gb, EbS }, 0 },
2346 { "addS", { Gv, EvS }, 0 },
2347 { "addB", { AL, Ib }, 0 },
2348 { "addS", { eAX, Iv }, 0 },
4e7d34a6
L
2349 { X86_64_TABLE (X86_64_06) },
2350 { X86_64_TABLE (X86_64_07) },
252b5132 2351 /* 08 */
bf890a93
IT
2352 { "orB", { Ebh1, Gb }, 0 },
2353 { "orS", { Evh1, Gv }, 0 },
2354 { "orB", { Gb, EbS }, 0 },
2355 { "orS", { Gv, EvS }, 0 },
2356 { "orB", { AL, Ib }, 0 },
2357 { "orS", { eAX, Iv }, 0 },
4e7d34a6 2358 { X86_64_TABLE (X86_64_0D) },
592d1631 2359 { Bad_Opcode }, /* 0x0f extended opcode escape */
252b5132 2360 /* 10 */
bf890a93
IT
2361 { "adcB", { Ebh1, Gb }, 0 },
2362 { "adcS", { Evh1, Gv }, 0 },
2363 { "adcB", { Gb, EbS }, 0 },
2364 { "adcS", { Gv, EvS }, 0 },
2365 { "adcB", { AL, Ib }, 0 },
2366 { "adcS", { eAX, Iv }, 0 },
4e7d34a6
L
2367 { X86_64_TABLE (X86_64_16) },
2368 { X86_64_TABLE (X86_64_17) },
252b5132 2369 /* 18 */
bf890a93
IT
2370 { "sbbB", { Ebh1, Gb }, 0 },
2371 { "sbbS", { Evh1, Gv }, 0 },
2372 { "sbbB", { Gb, EbS }, 0 },
2373 { "sbbS", { Gv, EvS }, 0 },
2374 { "sbbB", { AL, Ib }, 0 },
2375 { "sbbS", { eAX, Iv }, 0 },
4e7d34a6
L
2376 { X86_64_TABLE (X86_64_1E) },
2377 { X86_64_TABLE (X86_64_1F) },
252b5132 2378 /* 20 */
bf890a93
IT
2379 { "andB", { Ebh1, Gb }, 0 },
2380 { "andS", { Evh1, Gv }, 0 },
2381 { "andB", { Gb, EbS }, 0 },
2382 { "andS", { Gv, EvS }, 0 },
2383 { "andB", { AL, Ib }, 0 },
2384 { "andS", { eAX, Iv }, 0 },
592d1631 2385 { Bad_Opcode }, /* SEG ES prefix */
4e7d34a6 2386 { X86_64_TABLE (X86_64_27) },
252b5132 2387 /* 28 */
bf890a93
IT
2388 { "subB", { Ebh1, Gb }, 0 },
2389 { "subS", { Evh1, Gv }, 0 },
2390 { "subB", { Gb, EbS }, 0 },
2391 { "subS", { Gv, EvS }, 0 },
2392 { "subB", { AL, Ib }, 0 },
2393 { "subS", { eAX, Iv }, 0 },
592d1631 2394 { Bad_Opcode }, /* SEG CS prefix */
4e7d34a6 2395 { X86_64_TABLE (X86_64_2F) },
252b5132 2396 /* 30 */
bf890a93
IT
2397 { "xorB", { Ebh1, Gb }, 0 },
2398 { "xorS", { Evh1, Gv }, 0 },
2399 { "xorB", { Gb, EbS }, 0 },
2400 { "xorS", { Gv, EvS }, 0 },
2401 { "xorB", { AL, Ib }, 0 },
2402 { "xorS", { eAX, Iv }, 0 },
592d1631 2403 { Bad_Opcode }, /* SEG SS prefix */
4e7d34a6 2404 { X86_64_TABLE (X86_64_37) },
252b5132 2405 /* 38 */
bf890a93
IT
2406 { "cmpB", { Eb, Gb }, 0 },
2407 { "cmpS", { Ev, Gv }, 0 },
2408 { "cmpB", { Gb, EbS }, 0 },
2409 { "cmpS", { Gv, EvS }, 0 },
2410 { "cmpB", { AL, Ib }, 0 },
2411 { "cmpS", { eAX, Iv }, 0 },
592d1631 2412 { Bad_Opcode }, /* SEG DS prefix */
4e7d34a6 2413 { X86_64_TABLE (X86_64_3F) },
252b5132 2414 /* 40 */
bf890a93
IT
2415 { "inc{S|}", { RMeAX }, 0 },
2416 { "inc{S|}", { RMeCX }, 0 },
2417 { "inc{S|}", { RMeDX }, 0 },
2418 { "inc{S|}", { RMeBX }, 0 },
2419 { "inc{S|}", { RMeSP }, 0 },
2420 { "inc{S|}", { RMeBP }, 0 },
2421 { "inc{S|}", { RMeSI }, 0 },
2422 { "inc{S|}", { RMeDI }, 0 },
252b5132 2423 /* 48 */
bf890a93
IT
2424 { "dec{S|}", { RMeAX }, 0 },
2425 { "dec{S|}", { RMeCX }, 0 },
2426 { "dec{S|}", { RMeDX }, 0 },
2427 { "dec{S|}", { RMeBX }, 0 },
2428 { "dec{S|}", { RMeSP }, 0 },
2429 { "dec{S|}", { RMeBP }, 0 },
2430 { "dec{S|}", { RMeSI }, 0 },
2431 { "dec{S|}", { RMeDI }, 0 },
252b5132 2432 /* 50 */
bf890a93
IT
2433 { "pushV", { RMrAX }, 0 },
2434 { "pushV", { RMrCX }, 0 },
2435 { "pushV", { RMrDX }, 0 },
2436 { "pushV", { RMrBX }, 0 },
2437 { "pushV", { RMrSP }, 0 },
2438 { "pushV", { RMrBP }, 0 },
2439 { "pushV", { RMrSI }, 0 },
2440 { "pushV", { RMrDI }, 0 },
252b5132 2441 /* 58 */
bf890a93
IT
2442 { "popV", { RMrAX }, 0 },
2443 { "popV", { RMrCX }, 0 },
2444 { "popV", { RMrDX }, 0 },
2445 { "popV", { RMrBX }, 0 },
2446 { "popV", { RMrSP }, 0 },
2447 { "popV", { RMrBP }, 0 },
2448 { "popV", { RMrSI }, 0 },
2449 { "popV", { RMrDI }, 0 },
252b5132 2450 /* 60 */
4e7d34a6
L
2451 { X86_64_TABLE (X86_64_60) },
2452 { X86_64_TABLE (X86_64_61) },
2453 { X86_64_TABLE (X86_64_62) },
2454 { X86_64_TABLE (X86_64_63) },
592d1631
L
2455 { Bad_Opcode }, /* seg fs */
2456 { Bad_Opcode }, /* seg gs */
2457 { Bad_Opcode }, /* op size prefix */
2458 { Bad_Opcode }, /* adr size prefix */
252b5132 2459 /* 68 */
bf890a93
IT
2460 { "pushT", { sIv }, 0 },
2461 { "imulS", { Gv, Ev, Iv }, 0 },
2462 { "pushT", { sIbT }, 0 },
2463 { "imulS", { Gv, Ev, sIb }, 0 },
2464 { "ins{b|}", { Ybr, indirDX }, 0 },
4e7d34a6 2465 { X86_64_TABLE (X86_64_6D) },
bf890a93 2466 { "outs{b|}", { indirDXr, Xb }, 0 },
4e7d34a6 2467 { X86_64_TABLE (X86_64_6F) },
252b5132 2468 /* 70 */
bf890a93
IT
2469 { "joH", { Jb, BND, cond_jump_flag }, 0 },
2470 { "jnoH", { Jb, BND, cond_jump_flag }, 0 },
2471 { "jbH", { Jb, BND, cond_jump_flag }, 0 },
2472 { "jaeH", { Jb, BND, cond_jump_flag }, 0 },
2473 { "jeH", { Jb, BND, cond_jump_flag }, 0 },
2474 { "jneH", { Jb, BND, cond_jump_flag }, 0 },
2475 { "jbeH", { Jb, BND, cond_jump_flag }, 0 },
2476 { "jaH", { Jb, BND, cond_jump_flag }, 0 },
252b5132 2477 /* 78 */
bf890a93
IT
2478 { "jsH", { Jb, BND, cond_jump_flag }, 0 },
2479 { "jnsH", { Jb, BND, cond_jump_flag }, 0 },
2480 { "jpH", { Jb, BND, cond_jump_flag }, 0 },
2481 { "jnpH", { Jb, BND, cond_jump_flag }, 0 },
2482 { "jlH", { Jb, BND, cond_jump_flag }, 0 },
2483 { "jgeH", { Jb, BND, cond_jump_flag }, 0 },
2484 { "jleH", { Jb, BND, cond_jump_flag }, 0 },
2485 { "jgH", { Jb, BND, cond_jump_flag }, 0 },
252b5132 2486 /* 80 */
1ceb70f8
L
2487 { REG_TABLE (REG_80) },
2488 { REG_TABLE (REG_81) },
d039fef3 2489 { X86_64_TABLE (X86_64_82) },
7148c369 2490 { REG_TABLE (REG_83) },
bf890a93
IT
2491 { "testB", { Eb, Gb }, 0 },
2492 { "testS", { Ev, Gv }, 0 },
2493 { "xchgB", { Ebh2, Gb }, 0 },
2494 { "xchgS", { Evh2, Gv }, 0 },
252b5132 2495 /* 88 */
bf890a93
IT
2496 { "movB", { Ebh3, Gb }, 0 },
2497 { "movS", { Evh3, Gv }, 0 },
2498 { "movB", { Gb, EbS }, 0 },
2499 { "movS", { Gv, EvS }, 0 },
2500 { "movD", { Sv, Sw }, 0 },
1ceb70f8 2501 { MOD_TABLE (MOD_8D) },
bf890a93 2502 { "movD", { Sw, Sv }, 0 },
1ceb70f8 2503 { REG_TABLE (REG_8F) },
252b5132 2504 /* 90 */
1ceb70f8 2505 { PREFIX_TABLE (PREFIX_90) },
bf890a93
IT
2506 { "xchgS", { RMeCX, eAX }, 0 },
2507 { "xchgS", { RMeDX, eAX }, 0 },
2508 { "xchgS", { RMeBX, eAX }, 0 },
2509 { "xchgS", { RMeSP, eAX }, 0 },
2510 { "xchgS", { RMeBP, eAX }, 0 },
2511 { "xchgS", { RMeSI, eAX }, 0 },
2512 { "xchgS", { RMeDI, eAX }, 0 },
252b5132 2513 /* 98 */
bf890a93
IT
2514 { "cW{t|}R", { XX }, 0 },
2515 { "cR{t|}O", { XX }, 0 },
4e7d34a6 2516 { X86_64_TABLE (X86_64_9A) },
592d1631 2517 { Bad_Opcode }, /* fwait */
bf890a93
IT
2518 { "pushfT", { XX }, 0 },
2519 { "popfT", { XX }, 0 },
2520 { "sahf", { XX }, 0 },
2521 { "lahf", { XX }, 0 },
252b5132 2522 /* a0 */
bf890a93
IT
2523 { "mov%LB", { AL, Ob }, 0 },
2524 { "mov%LS", { eAX, Ov }, 0 },
2525 { "mov%LB", { Ob, AL }, 0 },
2526 { "mov%LS", { Ov, eAX }, 0 },
2527 { "movs{b|}", { Ybr, Xb }, 0 },
2528 { "movs{R|}", { Yvr, Xv }, 0 },
2529 { "cmps{b|}", { Xb, Yb }, 0 },
2530 { "cmps{R|}", { Xv, Yv }, 0 },
252b5132 2531 /* a8 */
bf890a93
IT
2532 { "testB", { AL, Ib }, 0 },
2533 { "testS", { eAX, Iv }, 0 },
2534 { "stosB", { Ybr, AL }, 0 },
2535 { "stosS", { Yvr, eAX }, 0 },
2536 { "lodsB", { ALr, Xb }, 0 },
2537 { "lodsS", { eAXr, Xv }, 0 },
2538 { "scasB", { AL, Yb }, 0 },
2539 { "scasS", { eAX, Yv }, 0 },
252b5132 2540 /* b0 */
bf890a93
IT
2541 { "movB", { RMAL, Ib }, 0 },
2542 { "movB", { RMCL, Ib }, 0 },
2543 { "movB", { RMDL, Ib }, 0 },
2544 { "movB", { RMBL, Ib }, 0 },
2545 { "movB", { RMAH, Ib }, 0 },
2546 { "movB", { RMCH, Ib }, 0 },
2547 { "movB", { RMDH, Ib }, 0 },
2548 { "movB", { RMBH, Ib }, 0 },
252b5132 2549 /* b8 */
bf890a93
IT
2550 { "mov%LV", { RMeAX, Iv64 }, 0 },
2551 { "mov%LV", { RMeCX, Iv64 }, 0 },
2552 { "mov%LV", { RMeDX, Iv64 }, 0 },
2553 { "mov%LV", { RMeBX, Iv64 }, 0 },
2554 { "mov%LV", { RMeSP, Iv64 }, 0 },
2555 { "mov%LV", { RMeBP, Iv64 }, 0 },
2556 { "mov%LV", { RMeSI, Iv64 }, 0 },
2557 { "mov%LV", { RMeDI, Iv64 }, 0 },
252b5132 2558 /* c0 */
1ceb70f8
L
2559 { REG_TABLE (REG_C0) },
2560 { REG_TABLE (REG_C1) },
bf890a93
IT
2561 { "retT", { Iw, BND }, 0 },
2562 { "retT", { BND }, 0 },
4e7d34a6
L
2563 { X86_64_TABLE (X86_64_C4) },
2564 { X86_64_TABLE (X86_64_C5) },
1ceb70f8
L
2565 { REG_TABLE (REG_C6) },
2566 { REG_TABLE (REG_C7) },
252b5132 2567 /* c8 */
bf890a93
IT
2568 { "enterT", { Iw, Ib }, 0 },
2569 { "leaveT", { XX }, 0 },
2570 { "Jret{|f}P", { Iw }, 0 },
2571 { "Jret{|f}P", { XX }, 0 },
2572 { "int3", { XX }, 0 },
2573 { "int", { Ib }, 0 },
4e7d34a6 2574 { X86_64_TABLE (X86_64_CE) },
bf890a93 2575 { "iret%LP", { XX }, 0 },
252b5132 2576 /* d0 */
1ceb70f8
L
2577 { REG_TABLE (REG_D0) },
2578 { REG_TABLE (REG_D1) },
2579 { REG_TABLE (REG_D2) },
2580 { REG_TABLE (REG_D3) },
4e7d34a6
L
2581 { X86_64_TABLE (X86_64_D4) },
2582 { X86_64_TABLE (X86_64_D5) },
592d1631 2583 { Bad_Opcode },
bf890a93 2584 { "xlat", { DSBX }, 0 },
252b5132
RH
2585 /* d8 */
2586 { FLOAT },
2587 { FLOAT },
2588 { FLOAT },
2589 { FLOAT },
2590 { FLOAT },
2591 { FLOAT },
2592 { FLOAT },
2593 { FLOAT },
2594 /* e0 */
bf890a93
IT
2595 { "loopneFH", { Jb, XX, loop_jcxz_flag }, 0 },
2596 { "loopeFH", { Jb, XX, loop_jcxz_flag }, 0 },
2597 { "loopFH", { Jb, XX, loop_jcxz_flag }, 0 },
2598 { "jEcxzH", { Jb, XX, loop_jcxz_flag }, 0 },
2599 { "inB", { AL, Ib }, 0 },
2600 { "inG", { zAX, Ib }, 0 },
2601 { "outB", { Ib, AL }, 0 },
2602 { "outG", { Ib, zAX }, 0 },
252b5132 2603 /* e8 */
a72d2af2
L
2604 { X86_64_TABLE (X86_64_E8) },
2605 { X86_64_TABLE (X86_64_E9) },
4e7d34a6 2606 { X86_64_TABLE (X86_64_EA) },
bf890a93
IT
2607 { "jmp", { Jb, BND }, 0 },
2608 { "inB", { AL, indirDX }, 0 },
2609 { "inG", { zAX, indirDX }, 0 },
2610 { "outB", { indirDX, AL }, 0 },
2611 { "outG", { indirDX, zAX }, 0 },
252b5132 2612 /* f0 */
592d1631 2613 { Bad_Opcode }, /* lock prefix */
bf890a93 2614 { "icebp", { XX }, 0 },
592d1631
L
2615 { Bad_Opcode }, /* repne */
2616 { Bad_Opcode }, /* repz */
bf890a93
IT
2617 { "hlt", { XX }, 0 },
2618 { "cmc", { XX }, 0 },
1ceb70f8
L
2619 { REG_TABLE (REG_F6) },
2620 { REG_TABLE (REG_F7) },
252b5132 2621 /* f8 */
bf890a93
IT
2622 { "clc", { XX }, 0 },
2623 { "stc", { XX }, 0 },
2624 { "cli", { XX }, 0 },
2625 { "sti", { XX }, 0 },
2626 { "cld", { XX }, 0 },
2627 { "std", { XX }, 0 },
1ceb70f8
L
2628 { REG_TABLE (REG_FE) },
2629 { REG_TABLE (REG_FF) },
252b5132
RH
2630};
2631
6439fc28 2632static const struct dis386 dis386_twobyte[] = {
252b5132 2633 /* 00 */
1ceb70f8
L
2634 { REG_TABLE (REG_0F00 ) },
2635 { REG_TABLE (REG_0F01 ) },
bf890a93
IT
2636 { "larS", { Gv, Ew }, 0 },
2637 { "lslS", { Gv, Ew }, 0 },
592d1631 2638 { Bad_Opcode },
bf890a93
IT
2639 { "syscall", { XX }, 0 },
2640 { "clts", { XX }, 0 },
2641 { "sysret%LP", { XX }, 0 },
252b5132 2642 /* 08 */
bf890a93 2643 { "invd", { XX }, 0 },
3233d7d0 2644 { PREFIX_TABLE (PREFIX_0F09) },
592d1631 2645 { Bad_Opcode },
bf890a93 2646 { "ud2", { XX }, 0 },
592d1631 2647 { Bad_Opcode },
b5b1fc4f 2648 { REG_TABLE (REG_0F0D) },
bf890a93
IT
2649 { "femms", { XX }, 0 },
2650 { "", { MX, EM, OPSUF }, 0 }, /* See OP_3DNowSuffix. */
252b5132 2651 /* 10 */
1ceb70f8
L
2652 { PREFIX_TABLE (PREFIX_0F10) },
2653 { PREFIX_TABLE (PREFIX_0F11) },
2654 { PREFIX_TABLE (PREFIX_0F12) },
2655 { MOD_TABLE (MOD_0F13) },
507bd325
L
2656 { "unpcklpX", { XM, EXx }, PREFIX_OPCODE },
2657 { "unpckhpX", { XM, EXx }, PREFIX_OPCODE },
1ceb70f8
L
2658 { PREFIX_TABLE (PREFIX_0F16) },
2659 { MOD_TABLE (MOD_0F17) },
252b5132 2660 /* 18 */
1ceb70f8 2661 { REG_TABLE (REG_0F18) },
bf890a93 2662 { "nopQ", { Ev }, 0 },
7e8b059b
L
2663 { PREFIX_TABLE (PREFIX_0F1A) },
2664 { PREFIX_TABLE (PREFIX_0F1B) },
c48935d7 2665 { PREFIX_TABLE (PREFIX_0F1C) },
bf890a93 2666 { "nopQ", { Ev }, 0 },
603555e5 2667 { PREFIX_TABLE (PREFIX_0F1E) },
bf890a93 2668 { "nopQ", { Ev }, 0 },
252b5132 2669 /* 20 */
bf890a93
IT
2670 { "movZ", { Rm, Cm }, 0 },
2671 { "movZ", { Rm, Dm }, 0 },
2672 { "movZ", { Cm, Rm }, 0 },
2673 { "movZ", { Dm, Rm }, 0 },
1ceb70f8 2674 { MOD_TABLE (MOD_0F24) },
592d1631 2675 { Bad_Opcode },
1ceb70f8 2676 { MOD_TABLE (MOD_0F26) },
592d1631 2677 { Bad_Opcode },
252b5132 2678 /* 28 */
507bd325
L
2679 { "movapX", { XM, EXx }, PREFIX_OPCODE },
2680 { "movapX", { EXxS, XM }, PREFIX_OPCODE },
1ceb70f8
L
2681 { PREFIX_TABLE (PREFIX_0F2A) },
2682 { PREFIX_TABLE (PREFIX_0F2B) },
2683 { PREFIX_TABLE (PREFIX_0F2C) },
2684 { PREFIX_TABLE (PREFIX_0F2D) },
2685 { PREFIX_TABLE (PREFIX_0F2E) },
2686 { PREFIX_TABLE (PREFIX_0F2F) },
252b5132 2687 /* 30 */
bf890a93
IT
2688 { "wrmsr", { XX }, 0 },
2689 { "rdtsc", { XX }, 0 },
2690 { "rdmsr", { XX }, 0 },
2691 { "rdpmc", { XX }, 0 },
2692 { "sysenter", { XX }, 0 },
2693 { "sysexit", { XX }, 0 },
592d1631 2694 { Bad_Opcode },
bf890a93 2695 { "getsec", { XX }, 0 },
252b5132 2696 /* 38 */
507bd325 2697 { THREE_BYTE_TABLE_PREFIX (THREE_BYTE_0F38, PREFIX_OPCODE) },
592d1631 2698 { Bad_Opcode },
507bd325 2699 { THREE_BYTE_TABLE_PREFIX (THREE_BYTE_0F3A, PREFIX_OPCODE) },
592d1631
L
2700 { Bad_Opcode },
2701 { Bad_Opcode },
2702 { Bad_Opcode },
2703 { Bad_Opcode },
2704 { Bad_Opcode },
252b5132 2705 /* 40 */
bf890a93
IT
2706 { "cmovoS", { Gv, Ev }, 0 },
2707 { "cmovnoS", { Gv, Ev }, 0 },
2708 { "cmovbS", { Gv, Ev }, 0 },
2709 { "cmovaeS", { Gv, Ev }, 0 },
2710 { "cmoveS", { Gv, Ev }, 0 },
2711 { "cmovneS", { Gv, Ev }, 0 },
2712 { "cmovbeS", { Gv, Ev }, 0 },
2713 { "cmovaS", { Gv, Ev }, 0 },
252b5132 2714 /* 48 */
bf890a93
IT
2715 { "cmovsS", { Gv, Ev }, 0 },
2716 { "cmovnsS", { Gv, Ev }, 0 },
2717 { "cmovpS", { Gv, Ev }, 0 },
2718 { "cmovnpS", { Gv, Ev }, 0 },
2719 { "cmovlS", { Gv, Ev }, 0 },
2720 { "cmovgeS", { Gv, Ev }, 0 },
2721 { "cmovleS", { Gv, Ev }, 0 },
2722 { "cmovgS", { Gv, Ev }, 0 },
252b5132 2723 /* 50 */
75c135a8 2724 { MOD_TABLE (MOD_0F51) },
1ceb70f8
L
2725 { PREFIX_TABLE (PREFIX_0F51) },
2726 { PREFIX_TABLE (PREFIX_0F52) },
2727 { PREFIX_TABLE (PREFIX_0F53) },
507bd325
L
2728 { "andpX", { XM, EXx }, PREFIX_OPCODE },
2729 { "andnpX", { XM, EXx }, PREFIX_OPCODE },
2730 { "orpX", { XM, EXx }, PREFIX_OPCODE },
2731 { "xorpX", { XM, EXx }, PREFIX_OPCODE },
252b5132 2732 /* 58 */
1ceb70f8
L
2733 { PREFIX_TABLE (PREFIX_0F58) },
2734 { PREFIX_TABLE (PREFIX_0F59) },
2735 { PREFIX_TABLE (PREFIX_0F5A) },
2736 { PREFIX_TABLE (PREFIX_0F5B) },
2737 { PREFIX_TABLE (PREFIX_0F5C) },
2738 { PREFIX_TABLE (PREFIX_0F5D) },
2739 { PREFIX_TABLE (PREFIX_0F5E) },
2740 { PREFIX_TABLE (PREFIX_0F5F) },
252b5132 2741 /* 60 */
1ceb70f8
L
2742 { PREFIX_TABLE (PREFIX_0F60) },
2743 { PREFIX_TABLE (PREFIX_0F61) },
2744 { PREFIX_TABLE (PREFIX_0F62) },
507bd325
L
2745 { "packsswb", { MX, EM }, PREFIX_OPCODE },
2746 { "pcmpgtb", { MX, EM }, PREFIX_OPCODE },
2747 { "pcmpgtw", { MX, EM }, PREFIX_OPCODE },
2748 { "pcmpgtd", { MX, EM }, PREFIX_OPCODE },
2749 { "packuswb", { MX, EM }, PREFIX_OPCODE },
252b5132 2750 /* 68 */
507bd325
L
2751 { "punpckhbw", { MX, EM }, PREFIX_OPCODE },
2752 { "punpckhwd", { MX, EM }, PREFIX_OPCODE },
2753 { "punpckhdq", { MX, EM }, PREFIX_OPCODE },
2754 { "packssdw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8
L
2755 { PREFIX_TABLE (PREFIX_0F6C) },
2756 { PREFIX_TABLE (PREFIX_0F6D) },
507bd325 2757 { "movK", { MX, Edq }, PREFIX_OPCODE },
1ceb70f8 2758 { PREFIX_TABLE (PREFIX_0F6F) },
252b5132 2759 /* 70 */
1ceb70f8
L
2760 { PREFIX_TABLE (PREFIX_0F70) },
2761 { REG_TABLE (REG_0F71) },
2762 { REG_TABLE (REG_0F72) },
2763 { REG_TABLE (REG_0F73) },
507bd325
L
2764 { "pcmpeqb", { MX, EM }, PREFIX_OPCODE },
2765 { "pcmpeqw", { MX, EM }, PREFIX_OPCODE },
2766 { "pcmpeqd", { MX, EM }, PREFIX_OPCODE },
2767 { "emms", { XX }, PREFIX_OPCODE },
252b5132 2768 /* 78 */
1ceb70f8
L
2769 { PREFIX_TABLE (PREFIX_0F78) },
2770 { PREFIX_TABLE (PREFIX_0F79) },
1f334aeb 2771 { Bad_Opcode },
592d1631 2772 { Bad_Opcode },
1ceb70f8
L
2773 { PREFIX_TABLE (PREFIX_0F7C) },
2774 { PREFIX_TABLE (PREFIX_0F7D) },
2775 { PREFIX_TABLE (PREFIX_0F7E) },
2776 { PREFIX_TABLE (PREFIX_0F7F) },
252b5132 2777 /* 80 */
bf890a93
IT
2778 { "joH", { Jv, BND, cond_jump_flag }, 0 },
2779 { "jnoH", { Jv, BND, cond_jump_flag }, 0 },
2780 { "jbH", { Jv, BND, cond_jump_flag }, 0 },
2781 { "jaeH", { Jv, BND, cond_jump_flag }, 0 },
2782 { "jeH", { Jv, BND, cond_jump_flag }, 0 },
2783 { "jneH", { Jv, BND, cond_jump_flag }, 0 },
2784 { "jbeH", { Jv, BND, cond_jump_flag }, 0 },
2785 { "jaH", { Jv, BND, cond_jump_flag }, 0 },
252b5132 2786 /* 88 */
bf890a93
IT
2787 { "jsH", { Jv, BND, cond_jump_flag }, 0 },
2788 { "jnsH", { Jv, BND, cond_jump_flag }, 0 },
2789 { "jpH", { Jv, BND, cond_jump_flag }, 0 },
2790 { "jnpH", { Jv, BND, cond_jump_flag }, 0 },
2791 { "jlH", { Jv, BND, cond_jump_flag }, 0 },
2792 { "jgeH", { Jv, BND, cond_jump_flag }, 0 },
2793 { "jleH", { Jv, BND, cond_jump_flag }, 0 },
2794 { "jgH", { Jv, BND, cond_jump_flag }, 0 },
252b5132 2795 /* 90 */
bf890a93
IT
2796 { "seto", { Eb }, 0 },
2797 { "setno", { Eb }, 0 },
2798 { "setb", { Eb }, 0 },
2799 { "setae", { Eb }, 0 },
2800 { "sete", { Eb }, 0 },
2801 { "setne", { Eb }, 0 },
2802 { "setbe", { Eb }, 0 },
2803 { "seta", { Eb }, 0 },
252b5132 2804 /* 98 */
bf890a93
IT
2805 { "sets", { Eb }, 0 },
2806 { "setns", { Eb }, 0 },
2807 { "setp", { Eb }, 0 },
2808 { "setnp", { Eb }, 0 },
2809 { "setl", { Eb }, 0 },
2810 { "setge", { Eb }, 0 },
2811 { "setle", { Eb }, 0 },
2812 { "setg", { Eb }, 0 },
252b5132 2813 /* a0 */
bf890a93
IT
2814 { "pushT", { fs }, 0 },
2815 { "popT", { fs }, 0 },
2816 { "cpuid", { XX }, 0 },
2817 { "btS", { Ev, Gv }, 0 },
2818 { "shldS", { Ev, Gv, Ib }, 0 },
2819 { "shldS", { Ev, Gv, CL }, 0 },
1ceb70f8
L
2820 { REG_TABLE (REG_0FA6) },
2821 { REG_TABLE (REG_0FA7) },
252b5132 2822 /* a8 */
bf890a93
IT
2823 { "pushT", { gs }, 0 },
2824 { "popT", { gs }, 0 },
2825 { "rsm", { XX }, 0 },
2826 { "btsS", { Evh1, Gv }, 0 },
2827 { "shrdS", { Ev, Gv, Ib }, 0 },
2828 { "shrdS", { Ev, Gv, CL }, 0 },
1ceb70f8 2829 { REG_TABLE (REG_0FAE) },
bf890a93 2830 { "imulS", { Gv, Ev }, 0 },
252b5132 2831 /* b0 */
bf890a93
IT
2832 { "cmpxchgB", { Ebh1, Gb }, 0 },
2833 { "cmpxchgS", { Evh1, Gv }, 0 },
1ceb70f8 2834 { MOD_TABLE (MOD_0FB2) },
bf890a93 2835 { "btrS", { Evh1, Gv }, 0 },
1ceb70f8
L
2836 { MOD_TABLE (MOD_0FB4) },
2837 { MOD_TABLE (MOD_0FB5) },
bf890a93
IT
2838 { "movz{bR|x}", { Gv, Eb }, 0 },
2839 { "movz{wR|x}", { Gv, Ew }, 0 }, /* yes, there really is movzww ! */
252b5132 2840 /* b8 */
1ceb70f8 2841 { PREFIX_TABLE (PREFIX_0FB8) },
66f1eba0 2842 { "ud1S", { Gv, Ev }, 0 },
1ceb70f8 2843 { REG_TABLE (REG_0FBA) },
bf890a93 2844 { "btcS", { Evh1, Gv }, 0 },
f12dc422 2845 { PREFIX_TABLE (PREFIX_0FBC) },
1ceb70f8 2846 { PREFIX_TABLE (PREFIX_0FBD) },
bf890a93
IT
2847 { "movs{bR|x}", { Gv, Eb }, 0 },
2848 { "movs{wR|x}", { Gv, Ew }, 0 }, /* yes, there really is movsww ! */
252b5132 2849 /* c0 */
bf890a93
IT
2850 { "xaddB", { Ebh1, Gb }, 0 },
2851 { "xaddS", { Evh1, Gv }, 0 },
1ceb70f8 2852 { PREFIX_TABLE (PREFIX_0FC2) },
a8484f96 2853 { MOD_TABLE (MOD_0FC3) },
507bd325
L
2854 { "pinsrw", { MX, Edqw, Ib }, PREFIX_OPCODE },
2855 { "pextrw", { Gdq, MS, Ib }, PREFIX_OPCODE },
2856 { "shufpX", { XM, EXx, Ib }, PREFIX_OPCODE },
1ceb70f8 2857 { REG_TABLE (REG_0FC7) },
252b5132 2858 /* c8 */
bf890a93
IT
2859 { "bswap", { RMeAX }, 0 },
2860 { "bswap", { RMeCX }, 0 },
2861 { "bswap", { RMeDX }, 0 },
2862 { "bswap", { RMeBX }, 0 },
2863 { "bswap", { RMeSP }, 0 },
2864 { "bswap", { RMeBP }, 0 },
2865 { "bswap", { RMeSI }, 0 },
2866 { "bswap", { RMeDI }, 0 },
252b5132 2867 /* d0 */
1ceb70f8 2868 { PREFIX_TABLE (PREFIX_0FD0) },
507bd325
L
2869 { "psrlw", { MX, EM }, PREFIX_OPCODE },
2870 { "psrld", { MX, EM }, PREFIX_OPCODE },
2871 { "psrlq", { MX, EM }, PREFIX_OPCODE },
2872 { "paddq", { MX, EM }, PREFIX_OPCODE },
2873 { "pmullw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8 2874 { PREFIX_TABLE (PREFIX_0FD6) },
75c135a8 2875 { MOD_TABLE (MOD_0FD7) },
252b5132 2876 /* d8 */
507bd325
L
2877 { "psubusb", { MX, EM }, PREFIX_OPCODE },
2878 { "psubusw", { MX, EM }, PREFIX_OPCODE },
2879 { "pminub", { MX, EM }, PREFIX_OPCODE },
2880 { "pand", { MX, EM }, PREFIX_OPCODE },
2881 { "paddusb", { MX, EM }, PREFIX_OPCODE },
2882 { "paddusw", { MX, EM }, PREFIX_OPCODE },
2883 { "pmaxub", { MX, EM }, PREFIX_OPCODE },
2884 { "pandn", { MX, EM }, PREFIX_OPCODE },
252b5132 2885 /* e0 */
507bd325
L
2886 { "pavgb", { MX, EM }, PREFIX_OPCODE },
2887 { "psraw", { MX, EM }, PREFIX_OPCODE },
2888 { "psrad", { MX, EM }, PREFIX_OPCODE },
2889 { "pavgw", { MX, EM }, PREFIX_OPCODE },
2890 { "pmulhuw", { MX, EM }, PREFIX_OPCODE },
2891 { "pmulhw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8
L
2892 { PREFIX_TABLE (PREFIX_0FE6) },
2893 { PREFIX_TABLE (PREFIX_0FE7) },
252b5132 2894 /* e8 */
507bd325
L
2895 { "psubsb", { MX, EM }, PREFIX_OPCODE },
2896 { "psubsw", { MX, EM }, PREFIX_OPCODE },
2897 { "pminsw", { MX, EM }, PREFIX_OPCODE },
2898 { "por", { MX, EM }, PREFIX_OPCODE },
2899 { "paddsb", { MX, EM }, PREFIX_OPCODE },
2900 { "paddsw", { MX, EM }, PREFIX_OPCODE },
2901 { "pmaxsw", { MX, EM }, PREFIX_OPCODE },
2902 { "pxor", { MX, EM }, PREFIX_OPCODE },
252b5132 2903 /* f0 */
1ceb70f8 2904 { PREFIX_TABLE (PREFIX_0FF0) },
507bd325
L
2905 { "psllw", { MX, EM }, PREFIX_OPCODE },
2906 { "pslld", { MX, EM }, PREFIX_OPCODE },
2907 { "psllq", { MX, EM }, PREFIX_OPCODE },
2908 { "pmuludq", { MX, EM }, PREFIX_OPCODE },
2909 { "pmaddwd", { MX, EM }, PREFIX_OPCODE },
2910 { "psadbw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8 2911 { PREFIX_TABLE (PREFIX_0FF7) },
252b5132 2912 /* f8 */
507bd325
L
2913 { "psubb", { MX, EM }, PREFIX_OPCODE },
2914 { "psubw", { MX, EM }, PREFIX_OPCODE },
2915 { "psubd", { MX, EM }, PREFIX_OPCODE },
2916 { "psubq", { MX, EM }, PREFIX_OPCODE },
2917 { "paddb", { MX, EM }, PREFIX_OPCODE },
2918 { "paddw", { MX, EM }, PREFIX_OPCODE },
2919 { "paddd", { MX, EM }, PREFIX_OPCODE },
66f1eba0 2920 { "ud0S", { Gv, Ev }, 0 },
252b5132
RH
2921};
2922
2923static const unsigned char onebyte_has_modrm[256] = {
c608c12e
AM
2924 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2925 /* ------------------------------- */
2926 /* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 00 */
2927 /* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 10 */
2928 /* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 20 */
2929 /* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 30 */
2930 /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40 */
2931 /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50 */
2932 /* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, /* 60 */
2933 /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70 */
2934 /* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 80 */
2935 /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 90 */
2936 /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* a0 */
2937 /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* b0 */
2938 /* c0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* c0 */
2939 /* d0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* d0 */
2940 /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* e0 */
2941 /* f0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1 /* f0 */
2942 /* ------------------------------- */
2943 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
252b5132
RH
2944};
2945
2946static const unsigned char twobyte_has_modrm[256] = {
c608c12e
AM
2947 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2948 /* ------------------------------- */
252b5132 2949 /* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */
b5b1fc4f 2950 /* 10 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1f */
85f10a01 2951 /* 20 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 2f */
331d2d0d 2952 /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
252b5132 2953 /* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */
4bba6815
AM
2954 /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */
2955 /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */
85f10a01 2956 /* 70 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 7f */
252b5132
RH
2957 /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
2958 /* 90 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9f */
30d1c836 2959 /* a0 */ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1, /* af */
66f1eba0 2960 /* b0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* bf */
252b5132 2961 /* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */
ca164297 2962 /* d0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
4bba6815 2963 /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
66f1eba0 2964 /* f0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 /* ff */
c608c12e
AM
2965 /* ------------------------------- */
2966 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2967};
2968
252b5132
RH
2969static char obuf[100];
2970static char *obufp;
ea397f5b 2971static char *mnemonicendp;
252b5132
RH
2972static char scratchbuf[100];
2973static unsigned char *start_codep;
2974static unsigned char *insn_codep;
2975static unsigned char *codep;
285ca992 2976static unsigned char *end_codep;
f16cd0d5
L
2977static int last_lock_prefix;
2978static int last_repz_prefix;
2979static int last_repnz_prefix;
2980static int last_data_prefix;
2981static int last_addr_prefix;
2982static int last_rex_prefix;
2983static int last_seg_prefix;
d9949a36 2984static int fwait_prefix;
285ca992
L
2985/* The active segment register prefix. */
2986static int active_seg_prefix;
f16cd0d5
L
2987#define MAX_CODE_LENGTH 15
2988/* We can up to 14 prefixes since the maximum instruction length is
2989 15bytes. */
2990static int all_prefixes[MAX_CODE_LENGTH - 1];
252b5132 2991static disassemble_info *the_info;
7967e09e
L
2992static struct
2993 {
2994 int mod;
7967e09e 2995 int reg;
484c222e 2996 int rm;
7967e09e
L
2997 }
2998modrm;
4bba6815 2999static unsigned char need_modrm;
dfc8cf43
L
3000static struct
3001 {
3002 int scale;
3003 int index;
3004 int base;
3005 }
3006sib;
c0f3af97
L
3007static struct
3008 {
3009 int register_specifier;
3010 int length;
3011 int prefix;
3012 int w;
43234a1e
L
3013 int evex;
3014 int r;
3015 int v;
3016 int mask_register_specifier;
3017 int zeroing;
3018 int ll;
3019 int b;
c0f3af97
L
3020 }
3021vex;
3022static unsigned char need_vex;
3023static unsigned char need_vex_reg;
dae39acc 3024static unsigned char vex_w_done;
252b5132 3025
ea397f5b
L
3026struct op
3027 {
3028 const char *name;
3029 unsigned int len;
3030 };
3031
4bba6815
AM
3032/* If we are accessing mod/rm/reg without need_modrm set, then the
3033 values are stale. Hitting this abort likely indicates that you
3034 need to update onebyte_has_modrm or twobyte_has_modrm. */
3035#define MODRM_CHECK if (!need_modrm) abort ()
3036
d708bcba
AM
3037static const char **names64;
3038static const char **names32;
3039static const char **names16;
3040static const char **names8;
3041static const char **names8rex;
3042static const char **names_seg;
db51cc60
L
3043static const char *index64;
3044static const char *index32;
d708bcba 3045static const char **index16;
7e8b059b 3046static const char **names_bnd;
d708bcba
AM
3047
3048static const char *intel_names64[] = {
3049 "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
3050 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
3051};
3052static const char *intel_names32[] = {
3053 "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
3054 "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"
3055};
3056static const char *intel_names16[] = {
3057 "ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
3058 "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
3059};
3060static const char *intel_names8[] = {
3061 "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh",
3062};
3063static const char *intel_names8rex[] = {
3064 "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
3065 "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"
3066};
3067static const char *intel_names_seg[] = {
3068 "es", "cs", "ss", "ds", "fs", "gs", "?", "?",
3069};
db51cc60
L
3070static const char *intel_index64 = "riz";
3071static const char *intel_index32 = "eiz";
d708bcba
AM
3072static const char *intel_index16[] = {
3073 "bx+si", "bx+di", "bp+si", "bp+di", "si", "di", "bp", "bx"
3074};
3075
3076static const char *att_names64[] = {
3077 "%rax", "%rcx", "%rdx", "%rbx", "%rsp", "%rbp", "%rsi", "%rdi",
52b15da3
JH
3078 "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
3079};
d708bcba
AM
3080static const char *att_names32[] = {
3081 "%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi",
52b15da3 3082 "%r8d", "%r9d", "%r10d", "%r11d", "%r12d", "%r13d", "%r14d", "%r15d"
252b5132 3083};
d708bcba
AM
3084static const char *att_names16[] = {
3085 "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di",
52b15da3 3086 "%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w"
252b5132 3087};
d708bcba
AM
3088static const char *att_names8[] = {
3089 "%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh",
252b5132 3090};
d708bcba
AM
3091static const char *att_names8rex[] = {
3092 "%al", "%cl", "%dl", "%bl", "%spl", "%bpl", "%sil", "%dil",
52b15da3
JH
3093 "%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b"
3094};
d708bcba
AM
3095static const char *att_names_seg[] = {
3096 "%es", "%cs", "%ss", "%ds", "%fs", "%gs", "%?", "%?",
252b5132 3097};
db51cc60
L
3098static const char *att_index64 = "%riz";
3099static const char *att_index32 = "%eiz";
d708bcba
AM
3100static const char *att_index16[] = {
3101 "%bx,%si", "%bx,%di", "%bp,%si", "%bp,%di", "%si", "%di", "%bp", "%bx"
252b5132
RH
3102};
3103
b9733481
L
3104static const char **names_mm;
3105static const char *intel_names_mm[] = {
3106 "mm0", "mm1", "mm2", "mm3",
3107 "mm4", "mm5", "mm6", "mm7"
3108};
3109static const char *att_names_mm[] = {
3110 "%mm0", "%mm1", "%mm2", "%mm3",
3111 "%mm4", "%mm5", "%mm6", "%mm7"
3112};
3113
7e8b059b
L
3114static const char *intel_names_bnd[] = {
3115 "bnd0", "bnd1", "bnd2", "bnd3"
3116};
3117
3118static const char *att_names_bnd[] = {
3119 "%bnd0", "%bnd1", "%bnd2", "%bnd3"
3120};
3121
b9733481
L
3122static const char **names_xmm;
3123static const char *intel_names_xmm[] = {
3124 "xmm0", "xmm1", "xmm2", "xmm3",
3125 "xmm4", "xmm5", "xmm6", "xmm7",
3126 "xmm8", "xmm9", "xmm10", "xmm11",
43234a1e
L
3127 "xmm12", "xmm13", "xmm14", "xmm15",
3128 "xmm16", "xmm17", "xmm18", "xmm19",
3129 "xmm20", "xmm21", "xmm22", "xmm23",
3130 "xmm24", "xmm25", "xmm26", "xmm27",
3131 "xmm28", "xmm29", "xmm30", "xmm31"
b9733481
L
3132};
3133static const char *att_names_xmm[] = {
3134 "%xmm0", "%xmm1", "%xmm2", "%xmm3",
3135 "%xmm4", "%xmm5", "%xmm6", "%xmm7",
3136 "%xmm8", "%xmm9", "%xmm10", "%xmm11",
43234a1e
L
3137 "%xmm12", "%xmm13", "%xmm14", "%xmm15",
3138 "%xmm16", "%xmm17", "%xmm18", "%xmm19",
3139 "%xmm20", "%xmm21", "%xmm22", "%xmm23",
3140 "%xmm24", "%xmm25", "%xmm26", "%xmm27",
3141 "%xmm28", "%xmm29", "%xmm30", "%xmm31"
b9733481
L
3142};
3143
3144static const char **names_ymm;
3145static const char *intel_names_ymm[] = {
3146 "ymm0", "ymm1", "ymm2", "ymm3",
3147 "ymm4", "ymm5", "ymm6", "ymm7",
3148 "ymm8", "ymm9", "ymm10", "ymm11",
43234a1e
L
3149 "ymm12", "ymm13", "ymm14", "ymm15",
3150 "ymm16", "ymm17", "ymm18", "ymm19",
3151 "ymm20", "ymm21", "ymm22", "ymm23",
3152 "ymm24", "ymm25", "ymm26", "ymm27",
3153 "ymm28", "ymm29", "ymm30", "ymm31"
b9733481
L
3154};
3155static const char *att_names_ymm[] = {
3156 "%ymm0", "%ymm1", "%ymm2", "%ymm3",
3157 "%ymm4", "%ymm5", "%ymm6", "%ymm7",
3158 "%ymm8", "%ymm9", "%ymm10", "%ymm11",
43234a1e
L
3159 "%ymm12", "%ymm13", "%ymm14", "%ymm15",
3160 "%ymm16", "%ymm17", "%ymm18", "%ymm19",
3161 "%ymm20", "%ymm21", "%ymm22", "%ymm23",
3162 "%ymm24", "%ymm25", "%ymm26", "%ymm27",
3163 "%ymm28", "%ymm29", "%ymm30", "%ymm31"
3164};
3165
3166static const char **names_zmm;
3167static const char *intel_names_zmm[] = {
3168 "zmm0", "zmm1", "zmm2", "zmm3",
3169 "zmm4", "zmm5", "zmm6", "zmm7",
3170 "zmm8", "zmm9", "zmm10", "zmm11",
3171 "zmm12", "zmm13", "zmm14", "zmm15",
3172 "zmm16", "zmm17", "zmm18", "zmm19",
3173 "zmm20", "zmm21", "zmm22", "zmm23",
3174 "zmm24", "zmm25", "zmm26", "zmm27",
3175 "zmm28", "zmm29", "zmm30", "zmm31"
3176};
3177static const char *att_names_zmm[] = {
3178 "%zmm0", "%zmm1", "%zmm2", "%zmm3",
3179 "%zmm4", "%zmm5", "%zmm6", "%zmm7",
3180 "%zmm8", "%zmm9", "%zmm10", "%zmm11",
3181 "%zmm12", "%zmm13", "%zmm14", "%zmm15",
3182 "%zmm16", "%zmm17", "%zmm18", "%zmm19",
3183 "%zmm20", "%zmm21", "%zmm22", "%zmm23",
3184 "%zmm24", "%zmm25", "%zmm26", "%zmm27",
3185 "%zmm28", "%zmm29", "%zmm30", "%zmm31"
3186};
3187
3188static const char **names_mask;
3189static const char *intel_names_mask[] = {
3190 "k0", "k1", "k2", "k3", "k4", "k5", "k6", "k7"
3191};
3192static const char *att_names_mask[] = {
3193 "%k0", "%k1", "%k2", "%k3", "%k4", "%k5", "%k6", "%k7"
3194};
3195
3196static const char *names_rounding[] =
3197{
3198 "{rn-sae}",
3199 "{rd-sae}",
3200 "{ru-sae}",
3201 "{rz-sae}"
b9733481
L
3202};
3203
1ceb70f8
L
3204static const struct dis386 reg_table[][8] = {
3205 /* REG_80 */
252b5132 3206 {
bf890a93
IT
3207 { "addA", { Ebh1, Ib }, 0 },
3208 { "orA", { Ebh1, Ib }, 0 },
3209 { "adcA", { Ebh1, Ib }, 0 },
3210 { "sbbA", { Ebh1, Ib }, 0 },
3211 { "andA", { Ebh1, Ib }, 0 },
3212 { "subA", { Ebh1, Ib }, 0 },
3213 { "xorA", { Ebh1, Ib }, 0 },
3214 { "cmpA", { Eb, Ib }, 0 },
252b5132 3215 },
1ceb70f8 3216 /* REG_81 */
252b5132 3217 {
bf890a93
IT
3218 { "addQ", { Evh1, Iv }, 0 },
3219 { "orQ", { Evh1, Iv }, 0 },
3220 { "adcQ", { Evh1, Iv }, 0 },
3221 { "sbbQ", { Evh1, Iv }, 0 },
3222 { "andQ", { Evh1, Iv }, 0 },
3223 { "subQ", { Evh1, Iv }, 0 },
3224 { "xorQ", { Evh1, Iv }, 0 },
3225 { "cmpQ", { Ev, Iv }, 0 },
252b5132 3226 },
7148c369 3227 /* REG_83 */
252b5132 3228 {
bf890a93
IT
3229 { "addQ", { Evh1, sIb }, 0 },
3230 { "orQ", { Evh1, sIb }, 0 },
3231 { "adcQ", { Evh1, sIb }, 0 },
3232 { "sbbQ", { Evh1, sIb }, 0 },
3233 { "andQ", { Evh1, sIb }, 0 },
3234 { "subQ", { Evh1, sIb }, 0 },
3235 { "xorQ", { Evh1, sIb }, 0 },
3236 { "cmpQ", { Ev, sIb }, 0 },
252b5132 3237 },
1ceb70f8 3238 /* REG_8F */
4e7d34a6 3239 {
bf890a93 3240 { "popU", { stackEv }, 0 },
c48244a5 3241 { XOP_8F_TABLE (XOP_09) },
592d1631
L
3242 { Bad_Opcode },
3243 { Bad_Opcode },
3244 { Bad_Opcode },
f88c9eb0 3245 { XOP_8F_TABLE (XOP_09) },
4e7d34a6 3246 },
1ceb70f8 3247 /* REG_C0 */
252b5132 3248 {
bf890a93
IT
3249 { "rolA", { Eb, Ib }, 0 },
3250 { "rorA", { Eb, Ib }, 0 },
3251 { "rclA", { Eb, Ib }, 0 },
3252 { "rcrA", { Eb, Ib }, 0 },
3253 { "shlA", { Eb, Ib }, 0 },
3254 { "shrA", { Eb, Ib }, 0 },
e4bdd679 3255 { "shlA", { Eb, Ib }, 0 },
bf890a93 3256 { "sarA", { Eb, Ib }, 0 },
252b5132 3257 },
1ceb70f8 3258 /* REG_C1 */
252b5132 3259 {
bf890a93
IT
3260 { "rolQ", { Ev, Ib }, 0 },
3261 { "rorQ", { Ev, Ib }, 0 },
3262 { "rclQ", { Ev, Ib }, 0 },
3263 { "rcrQ", { Ev, Ib }, 0 },
3264 { "shlQ", { Ev, Ib }, 0 },
3265 { "shrQ", { Ev, Ib }, 0 },
e4bdd679 3266 { "shlQ", { Ev, Ib }, 0 },
bf890a93 3267 { "sarQ", { Ev, Ib }, 0 },
252b5132 3268 },
1ceb70f8 3269 /* REG_C6 */
4e7d34a6 3270 {
bf890a93 3271 { "movA", { Ebh3, Ib }, 0 },
42164a71
L
3272 { Bad_Opcode },
3273 { Bad_Opcode },
3274 { Bad_Opcode },
3275 { Bad_Opcode },
3276 { Bad_Opcode },
3277 { Bad_Opcode },
3278 { MOD_TABLE (MOD_C6_REG_7) },
4e7d34a6 3279 },
1ceb70f8 3280 /* REG_C7 */
4e7d34a6 3281 {
bf890a93 3282 { "movQ", { Evh3, Iv }, 0 },
42164a71
L
3283 { Bad_Opcode },
3284 { Bad_Opcode },
3285 { Bad_Opcode },
3286 { Bad_Opcode },
3287 { Bad_Opcode },
3288 { Bad_Opcode },
3289 { MOD_TABLE (MOD_C7_REG_7) },
4e7d34a6 3290 },
1ceb70f8 3291 /* REG_D0 */
252b5132 3292 {
bf890a93
IT
3293 { "rolA", { Eb, I1 }, 0 },
3294 { "rorA", { Eb, I1 }, 0 },
3295 { "rclA", { Eb, I1 }, 0 },
3296 { "rcrA", { Eb, I1 }, 0 },
3297 { "shlA", { Eb, I1 }, 0 },
3298 { "shrA", { Eb, I1 }, 0 },
e4bdd679 3299 { "shlA", { Eb, I1 }, 0 },
bf890a93 3300 { "sarA", { Eb, I1 }, 0 },
252b5132 3301 },
1ceb70f8 3302 /* REG_D1 */
252b5132 3303 {
bf890a93
IT
3304 { "rolQ", { Ev, I1 }, 0 },
3305 { "rorQ", { Ev, I1 }, 0 },
3306 { "rclQ", { Ev, I1 }, 0 },
3307 { "rcrQ", { Ev, I1 }, 0 },
3308 { "shlQ", { Ev, I1 }, 0 },
3309 { "shrQ", { Ev, I1 }, 0 },
e4bdd679 3310 { "shlQ", { Ev, I1 }, 0 },
bf890a93 3311 { "sarQ", { Ev, I1 }, 0 },
252b5132 3312 },
1ceb70f8 3313 /* REG_D2 */
252b5132 3314 {
bf890a93
IT
3315 { "rolA", { Eb, CL }, 0 },
3316 { "rorA", { Eb, CL }, 0 },
3317 { "rclA", { Eb, CL }, 0 },
3318 { "rcrA", { Eb, CL }, 0 },
3319 { "shlA", { Eb, CL }, 0 },
3320 { "shrA", { Eb, CL }, 0 },
e4bdd679 3321 { "shlA", { Eb, CL }, 0 },
bf890a93 3322 { "sarA", { Eb, CL }, 0 },
252b5132 3323 },
1ceb70f8 3324 /* REG_D3 */
252b5132 3325 {
bf890a93
IT
3326 { "rolQ", { Ev, CL }, 0 },
3327 { "rorQ", { Ev, CL }, 0 },
3328 { "rclQ", { Ev, CL }, 0 },
3329 { "rcrQ", { Ev, CL }, 0 },
3330 { "shlQ", { Ev, CL }, 0 },
3331 { "shrQ", { Ev, CL }, 0 },
e4bdd679 3332 { "shlQ", { Ev, CL }, 0 },
bf890a93 3333 { "sarQ", { Ev, CL }, 0 },
252b5132 3334 },
1ceb70f8 3335 /* REG_F6 */
252b5132 3336 {
bf890a93 3337 { "testA", { Eb, Ib }, 0 },
7db2c588 3338 { "testA", { Eb, Ib }, 0 },
bf890a93
IT
3339 { "notA", { Ebh1 }, 0 },
3340 { "negA", { Ebh1 }, 0 },
3341 { "mulA", { Eb }, 0 }, /* Don't print the implicit %al register, */
3342 { "imulA", { Eb }, 0 }, /* to distinguish these opcodes from other */
3343 { "divA", { Eb }, 0 }, /* mul/imul opcodes. Do the same for div */
3344 { "idivA", { Eb }, 0 }, /* and idiv for consistency. */
252b5132 3345 },
1ceb70f8 3346 /* REG_F7 */
252b5132 3347 {
bf890a93 3348 { "testQ", { Ev, Iv }, 0 },
7db2c588 3349 { "testQ", { Ev, Iv }, 0 },
bf890a93
IT
3350 { "notQ", { Evh1 }, 0 },
3351 { "negQ", { Evh1 }, 0 },
3352 { "mulQ", { Ev }, 0 }, /* Don't print the implicit register. */
3353 { "imulQ", { Ev }, 0 },
3354 { "divQ", { Ev }, 0 },
3355 { "idivQ", { Ev }, 0 },
252b5132 3356 },
1ceb70f8 3357 /* REG_FE */
252b5132 3358 {
bf890a93
IT
3359 { "incA", { Ebh1 }, 0 },
3360 { "decA", { Ebh1 }, 0 },
252b5132 3361 },
1ceb70f8 3362 /* REG_FF */
252b5132 3363 {
bf890a93
IT
3364 { "incQ", { Evh1 }, 0 },
3365 { "decQ", { Evh1 }, 0 },
9fef80d6 3366 { "call{&|}", { NOTRACK, indirEv, BND }, 0 },
4a357820 3367 { MOD_TABLE (MOD_FF_REG_3) },
9fef80d6 3368 { "jmp{&|}", { NOTRACK, indirEv, BND }, 0 },
4a357820 3369 { MOD_TABLE (MOD_FF_REG_5) },
bf890a93 3370 { "pushU", { stackEv }, 0 },
592d1631 3371 { Bad_Opcode },
252b5132 3372 },
1ceb70f8 3373 /* REG_0F00 */
252b5132 3374 {
bf890a93
IT
3375 { "sldtD", { Sv }, 0 },
3376 { "strD", { Sv }, 0 },
3377 { "lldt", { Ew }, 0 },
3378 { "ltr", { Ew }, 0 },
3379 { "verr", { Ew }, 0 },
3380 { "verw", { Ew }, 0 },
592d1631
L
3381 { Bad_Opcode },
3382 { Bad_Opcode },
252b5132 3383 },
1ceb70f8 3384 /* REG_0F01 */
252b5132 3385 {
1ceb70f8
L
3386 { MOD_TABLE (MOD_0F01_REG_0) },
3387 { MOD_TABLE (MOD_0F01_REG_1) },
3388 { MOD_TABLE (MOD_0F01_REG_2) },
3389 { MOD_TABLE (MOD_0F01_REG_3) },
bf890a93 3390 { "smswD", { Sv }, 0 },
8eab4136 3391 { MOD_TABLE (MOD_0F01_REG_5) },
bf890a93 3392 { "lmsw", { Ew }, 0 },
1ceb70f8 3393 { MOD_TABLE (MOD_0F01_REG_7) },
252b5132 3394 },
b5b1fc4f 3395 /* REG_0F0D */
252b5132 3396 {
bf890a93
IT
3397 { "prefetch", { Mb }, 0 },
3398 { "prefetchw", { Mb }, 0 },
3399 { "prefetchwt1", { Mb }, 0 },
3400 { "prefetch", { Mb }, 0 },
3401 { "prefetch", { Mb }, 0 },
3402 { "prefetch", { Mb }, 0 },
3403 { "prefetch", { Mb }, 0 },
3404 { "prefetch", { Mb }, 0 },
252b5132 3405 },
1ceb70f8 3406 /* REG_0F18 */
252b5132 3407 {
1ceb70f8
L
3408 { MOD_TABLE (MOD_0F18_REG_0) },
3409 { MOD_TABLE (MOD_0F18_REG_1) },
3410 { MOD_TABLE (MOD_0F18_REG_2) },
3411 { MOD_TABLE (MOD_0F18_REG_3) },
d7189fa5
RM
3412 { MOD_TABLE (MOD_0F18_REG_4) },
3413 { MOD_TABLE (MOD_0F18_REG_5) },
3414 { MOD_TABLE (MOD_0F18_REG_6) },
3415 { MOD_TABLE (MOD_0F18_REG_7) },
252b5132 3416 },
c48935d7
IT
3417 /* REG_0F1C_MOD_0 */
3418 {
3419 { "cldemote", { Mb }, 0 },
3420 { "nopQ", { Ev }, 0 },
3421 { "nopQ", { Ev }, 0 },
3422 { "nopQ", { Ev }, 0 },
3423 { "nopQ", { Ev }, 0 },
3424 { "nopQ", { Ev }, 0 },
3425 { "nopQ", { Ev }, 0 },
3426 { "nopQ", { Ev }, 0 },
3427 },
603555e5
L
3428 /* REG_0F1E_MOD_3 */
3429 {
3430 { "nopQ", { Ev }, 0 },
3431 { "rdsspK", { Rdq }, PREFIX_OPCODE },
3432 { "nopQ", { Ev }, 0 },
3433 { "nopQ", { Ev }, 0 },
3434 { "nopQ", { Ev }, 0 },
3435 { "nopQ", { Ev }, 0 },
3436 { "nopQ", { Ev }, 0 },
3437 { RM_TABLE (RM_0F1E_MOD_3_REG_7) },
3438 },
1ceb70f8 3439 /* REG_0F71 */
a6bd098c 3440 {
592d1631
L
3441 { Bad_Opcode },
3442 { Bad_Opcode },
1ceb70f8 3443 { MOD_TABLE (MOD_0F71_REG_2) },
592d1631 3444 { Bad_Opcode },
1ceb70f8 3445 { MOD_TABLE (MOD_0F71_REG_4) },
592d1631 3446 { Bad_Opcode },
1ceb70f8 3447 { MOD_TABLE (MOD_0F71_REG_6) },
a6bd098c 3448 },
1ceb70f8 3449 /* REG_0F72 */
a6bd098c 3450 {
592d1631
L
3451 { Bad_Opcode },
3452 { Bad_Opcode },
1ceb70f8 3453 { MOD_TABLE (MOD_0F72_REG_2) },
592d1631 3454 { Bad_Opcode },
1ceb70f8 3455 { MOD_TABLE (MOD_0F72_REG_4) },
592d1631 3456 { Bad_Opcode },
1ceb70f8 3457 { MOD_TABLE (MOD_0F72_REG_6) },
a6bd098c 3458 },
1ceb70f8 3459 /* REG_0F73 */
252b5132 3460 {
592d1631
L
3461 { Bad_Opcode },
3462 { Bad_Opcode },
1ceb70f8
L
3463 { MOD_TABLE (MOD_0F73_REG_2) },
3464 { MOD_TABLE (MOD_0F73_REG_3) },
592d1631
L
3465 { Bad_Opcode },
3466 { Bad_Opcode },
1ceb70f8
L
3467 { MOD_TABLE (MOD_0F73_REG_6) },
3468 { MOD_TABLE (MOD_0F73_REG_7) },
252b5132 3469 },
1ceb70f8 3470 /* REG_0FA6 */
252b5132 3471 {
bf890a93
IT
3472 { "montmul", { { OP_0f07, 0 } }, 0 },
3473 { "xsha1", { { OP_0f07, 0 } }, 0 },
3474 { "xsha256", { { OP_0f07, 0 } }, 0 },
4e7d34a6 3475 },
1ceb70f8 3476 /* REG_0FA7 */
4e7d34a6 3477 {
bf890a93
IT
3478 { "xstore-rng", { { OP_0f07, 0 } }, 0 },
3479 { "xcrypt-ecb", { { OP_0f07, 0 } }, 0 },
3480 { "xcrypt-cbc", { { OP_0f07, 0 } }, 0 },
3481 { "xcrypt-ctr", { { OP_0f07, 0 } }, 0 },
3482 { "xcrypt-cfb", { { OP_0f07, 0 } }, 0 },
3483 { "xcrypt-ofb", { { OP_0f07, 0 } }, 0 },
4e7d34a6 3484 },
1ceb70f8 3485 /* REG_0FAE */
4e7d34a6 3486 {
1ceb70f8
L
3487 { MOD_TABLE (MOD_0FAE_REG_0) },
3488 { MOD_TABLE (MOD_0FAE_REG_1) },
3489 { MOD_TABLE (MOD_0FAE_REG_2) },
3490 { MOD_TABLE (MOD_0FAE_REG_3) },
475a2301 3491 { MOD_TABLE (MOD_0FAE_REG_4) },
1ceb70f8
L
3492 { MOD_TABLE (MOD_0FAE_REG_5) },
3493 { MOD_TABLE (MOD_0FAE_REG_6) },
3494 { MOD_TABLE (MOD_0FAE_REG_7) },
252b5132 3495 },
1ceb70f8 3496 /* REG_0FBA */
252b5132 3497 {
592d1631
L
3498 { Bad_Opcode },
3499 { Bad_Opcode },
3500 { Bad_Opcode },
3501 { Bad_Opcode },
bf890a93
IT
3502 { "btQ", { Ev, Ib }, 0 },
3503 { "btsQ", { Evh1, Ib }, 0 },
3504 { "btrQ", { Evh1, Ib }, 0 },
3505 { "btcQ", { Evh1, Ib }, 0 },
c608c12e 3506 },
1ceb70f8 3507 /* REG_0FC7 */
c608c12e 3508 {
592d1631 3509 { Bad_Opcode },
bf890a93 3510 { "cmpxchg8b", { { CMPXCHG8B_Fixup, q_mode } }, 0 },
592d1631 3511 { Bad_Opcode },
963f3586
IT
3512 { MOD_TABLE (MOD_0FC7_REG_3) },
3513 { MOD_TABLE (MOD_0FC7_REG_4) },
3514 { MOD_TABLE (MOD_0FC7_REG_5) },
1ceb70f8
L
3515 { MOD_TABLE (MOD_0FC7_REG_6) },
3516 { MOD_TABLE (MOD_0FC7_REG_7) },
252b5132 3517 },
592a252b 3518 /* REG_VEX_0F71 */
c0f3af97 3519 {
592d1631
L
3520 { Bad_Opcode },
3521 { Bad_Opcode },
592a252b 3522 { MOD_TABLE (MOD_VEX_0F71_REG_2) },
592d1631 3523 { Bad_Opcode },
592a252b 3524 { MOD_TABLE (MOD_VEX_0F71_REG_4) },
592d1631 3525 { Bad_Opcode },
592a252b 3526 { MOD_TABLE (MOD_VEX_0F71_REG_6) },
c0f3af97 3527 },
592a252b 3528 /* REG_VEX_0F72 */
c0f3af97 3529 {
592d1631
L
3530 { Bad_Opcode },
3531 { Bad_Opcode },
592a252b 3532 { MOD_TABLE (MOD_VEX_0F72_REG_2) },
592d1631 3533 { Bad_Opcode },
592a252b 3534 { MOD_TABLE (MOD_VEX_0F72_REG_4) },
592d1631 3535 { Bad_Opcode },
592a252b 3536 { MOD_TABLE (MOD_VEX_0F72_REG_6) },
c0f3af97 3537 },
592a252b 3538 /* REG_VEX_0F73 */
c0f3af97 3539 {
592d1631
L
3540 { Bad_Opcode },
3541 { Bad_Opcode },
592a252b
L
3542 { MOD_TABLE (MOD_VEX_0F73_REG_2) },
3543 { MOD_TABLE (MOD_VEX_0F73_REG_3) },
592d1631
L
3544 { Bad_Opcode },
3545 { Bad_Opcode },
592a252b
L
3546 { MOD_TABLE (MOD_VEX_0F73_REG_6) },
3547 { MOD_TABLE (MOD_VEX_0F73_REG_7) },
c0f3af97 3548 },
592a252b 3549 /* REG_VEX_0FAE */
c0f3af97 3550 {
592d1631
L
3551 { Bad_Opcode },
3552 { Bad_Opcode },
592a252b
L
3553 { MOD_TABLE (MOD_VEX_0FAE_REG_2) },
3554 { MOD_TABLE (MOD_VEX_0FAE_REG_3) },
c0f3af97 3555 },
f12dc422
L
3556 /* REG_VEX_0F38F3 */
3557 {
3558 { Bad_Opcode },
3559 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_1) },
3560 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_2) },
3561 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_3) },
3562 },
f88c9eb0
SP
3563 /* REG_XOP_LWPCB */
3564 {
bf890a93
IT
3565 { "llwpcb", { { OP_LWPCB_E, 0 } }, 0 },
3566 { "slwpcb", { { OP_LWPCB_E, 0 } }, 0 },
f88c9eb0
SP
3567 },
3568 /* REG_XOP_LWP */
3569 {
bf890a93
IT
3570 { "lwpins", { { OP_LWP_E, 0 }, Ed, Iq }, 0 },
3571 { "lwpval", { { OP_LWP_E, 0 }, Ed, Iq }, 0 },
f88c9eb0 3572 },
2a2a0f38
QN
3573 /* REG_XOP_TBM_01 */
3574 {
3575 { Bad_Opcode },
bf890a93
IT
3576 { "blcfill", { { OP_LWP_E, 0 }, Ev }, 0 },
3577 { "blsfill", { { OP_LWP_E, 0 }, Ev }, 0 },
3578 { "blcs", { { OP_LWP_E, 0 }, Ev }, 0 },
3579 { "tzmsk", { { OP_LWP_E, 0 }, Ev }, 0 },
3580 { "blcic", { { OP_LWP_E, 0 }, Ev }, 0 },
3581 { "blsic", { { OP_LWP_E, 0 }, Ev }, 0 },
3582 { "t1mskc", { { OP_LWP_E, 0 }, Ev }, 0 },
2a2a0f38
QN
3583 },
3584 /* REG_XOP_TBM_02 */
3585 {
3586 { Bad_Opcode },
bf890a93 3587 { "blcmsk", { { OP_LWP_E, 0 }, Ev }, 0 },
2a2a0f38
QN
3588 { Bad_Opcode },
3589 { Bad_Opcode },
3590 { Bad_Opcode },
3591 { Bad_Opcode },
bf890a93 3592 { "blci", { { OP_LWP_E, 0 }, Ev }, 0 },
2a2a0f38 3593 },
43234a1e
L
3594#define NEED_REG_TABLE
3595#include "i386-dis-evex.h"
3596#undef NEED_REG_TABLE
4e7d34a6
L
3597};
3598
1ceb70f8
L
3599static const struct dis386 prefix_table[][4] = {
3600 /* PREFIX_90 */
252b5132 3601 {
bf890a93
IT
3602 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } }, 0 },
3603 { "pause", { XX }, 0 },
3604 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } }, 0 },
507bd325 3605 { NULL, { { NULL, 0 } }, PREFIX_IGNORED }
0f10071e 3606 },
4e7d34a6 3607
603555e5
L
3608 /* PREFIX_MOD_0_0F01_REG_5 */
3609 {
3610 { Bad_Opcode },
3611 { "rstorssp", { Mq }, PREFIX_OPCODE },
3612 },
3613
2234eee6 3614 /* PREFIX_MOD_3_0F01_REG_5_RM_0 */
603555e5
L
3615 {
3616 { Bad_Opcode },
2234eee6 3617 { "setssbsy", { Skip_MODRM }, PREFIX_OPCODE },
603555e5
L
3618 },
3619
3620 /* PREFIX_MOD_3_0F01_REG_5_RM_2 */
3621 {
3622 { Bad_Opcode },
c2f76402 3623 { "saveprevssp", { Skip_MODRM }, PREFIX_OPCODE },
603555e5
L
3624 },
3625
3233d7d0
IT
3626 /* PREFIX_0F09 */
3627 {
3628 { "wbinvd", { XX }, 0 },
3629 { "wbnoinvd", { XX }, 0 },
3630 },
3631
1ceb70f8 3632 /* PREFIX_0F10 */
cc0ec051 3633 {
507bd325
L
3634 { "movups", { XM, EXx }, PREFIX_OPCODE },
3635 { "movss", { XM, EXd }, PREFIX_OPCODE },
3636 { "movupd", { XM, EXx }, PREFIX_OPCODE },
3637 { "movsd", { XM, EXq }, PREFIX_OPCODE },
30d1c836 3638 },
4e7d34a6 3639
1ceb70f8 3640 /* PREFIX_0F11 */
30d1c836 3641 {
507bd325
L
3642 { "movups", { EXxS, XM }, PREFIX_OPCODE },
3643 { "movss", { EXdS, XM }, PREFIX_OPCODE },
3644 { "movupd", { EXxS, XM }, PREFIX_OPCODE },
3645 { "movsd", { EXqS, XM }, PREFIX_OPCODE },
4e7d34a6 3646 },
252b5132 3647
1ceb70f8 3648 /* PREFIX_0F12 */
c608c12e 3649 {
1ceb70f8 3650 { MOD_TABLE (MOD_0F12_PREFIX_0) },
507bd325
L
3651 { "movsldup", { XM, EXx }, PREFIX_OPCODE },
3652 { "movlpd", { XM, EXq }, PREFIX_OPCODE },
3653 { "movddup", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3654 },
4e7d34a6 3655
1ceb70f8 3656 /* PREFIX_0F16 */
c608c12e 3657 {
1ceb70f8 3658 { MOD_TABLE (MOD_0F16_PREFIX_0) },
507bd325
L
3659 { "movshdup", { XM, EXx }, PREFIX_OPCODE },
3660 { "movhpd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3661 },
4e7d34a6 3662
7e8b059b
L
3663 /* PREFIX_0F1A */
3664 {
3665 { MOD_TABLE (MOD_0F1A_PREFIX_0) },
bf890a93
IT
3666 { "bndcl", { Gbnd, Ev_bnd }, 0 },
3667 { "bndmov", { Gbnd, Ebnd }, 0 },
3668 { "bndcu", { Gbnd, Ev_bnd }, 0 },
7e8b059b
L
3669 },
3670
3671 /* PREFIX_0F1B */
3672 {
3673 { MOD_TABLE (MOD_0F1B_PREFIX_0) },
3674 { MOD_TABLE (MOD_0F1B_PREFIX_1) },
9f79e886 3675 { "bndmov", { EbndS, Gbnd }, 0 },
bf890a93 3676 { "bndcn", { Gbnd, Ev_bnd }, 0 },
7e8b059b
L
3677 },
3678
c48935d7
IT
3679 /* PREFIX_0F1C */
3680 {
3681 { MOD_TABLE (MOD_0F1C_PREFIX_0) },
3682 { "nopQ", { Ev }, PREFIX_OPCODE },
3683 { "nopQ", { Ev }, PREFIX_OPCODE },
3684 { "nopQ", { Ev }, PREFIX_OPCODE },
3685 },
3686
603555e5
L
3687 /* PREFIX_0F1E */
3688 {
3689 { "nopQ", { Ev }, PREFIX_OPCODE },
3690 { MOD_TABLE (MOD_0F1E_PREFIX_1) },
3691 { "nopQ", { Ev }, PREFIX_OPCODE },
3692 { "nopQ", { Ev }, PREFIX_OPCODE },
3693 },
3694
1ceb70f8 3695 /* PREFIX_0F2A */
c608c12e 3696 {
507bd325
L
3697 { "cvtpi2ps", { XM, EMCq }, PREFIX_OPCODE },
3698 { "cvtsi2ss%LQ", { XM, Ev }, PREFIX_OPCODE },
3699 { "cvtpi2pd", { XM, EMCq }, PREFIX_OPCODE },
bf890a93 3700 { "cvtsi2sd%LQ", { XM, Ev }, 0 },
c608c12e 3701 },
4e7d34a6 3702
1ceb70f8 3703 /* PREFIX_0F2B */
c608c12e 3704 {
75c135a8
L
3705 { MOD_TABLE (MOD_0F2B_PREFIX_0) },
3706 { MOD_TABLE (MOD_0F2B_PREFIX_1) },
3707 { MOD_TABLE (MOD_0F2B_PREFIX_2) },
3708 { MOD_TABLE (MOD_0F2B_PREFIX_3) },
c608c12e 3709 },
4e7d34a6 3710
1ceb70f8 3711 /* PREFIX_0F2C */
c608c12e 3712 {
507bd325 3713 { "cvttps2pi", { MXC, EXq }, PREFIX_OPCODE },
9646c87b 3714 { "cvttss2si", { Gv, EXd }, PREFIX_OPCODE },
507bd325 3715 { "cvttpd2pi", { MXC, EXx }, PREFIX_OPCODE },
9646c87b 3716 { "cvttsd2si", { Gv, EXq }, PREFIX_OPCODE },
c608c12e 3717 },
4e7d34a6 3718
1ceb70f8 3719 /* PREFIX_0F2D */
c608c12e 3720 {
507bd325 3721 { "cvtps2pi", { MXC, EXq }, PREFIX_OPCODE },
9646c87b 3722 { "cvtss2si", { Gv, EXd }, PREFIX_OPCODE },
507bd325 3723 { "cvtpd2pi", { MXC, EXx }, PREFIX_OPCODE },
9646c87b 3724 { "cvtsd2si", { Gv, EXq }, PREFIX_OPCODE },
c608c12e 3725 },
4e7d34a6 3726
1ceb70f8 3727 /* PREFIX_0F2E */
c608c12e 3728 {
bf890a93 3729 { "ucomiss",{ XM, EXd }, 0 },
592d1631 3730 { Bad_Opcode },
bf890a93 3731 { "ucomisd",{ XM, EXq }, 0 },
c608c12e 3732 },
4e7d34a6 3733
1ceb70f8 3734 /* PREFIX_0F2F */
c608c12e 3735 {
bf890a93 3736 { "comiss", { XM, EXd }, 0 },
592d1631 3737 { Bad_Opcode },
bf890a93 3738 { "comisd", { XM, EXq }, 0 },
c608c12e 3739 },
4e7d34a6 3740
1ceb70f8 3741 /* PREFIX_0F51 */
c608c12e 3742 {
507bd325
L
3743 { "sqrtps", { XM, EXx }, PREFIX_OPCODE },
3744 { "sqrtss", { XM, EXd }, PREFIX_OPCODE },
3745 { "sqrtpd", { XM, EXx }, PREFIX_OPCODE },
3746 { "sqrtsd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3747 },
4e7d34a6 3748
1ceb70f8 3749 /* PREFIX_0F52 */
c608c12e 3750 {
507bd325
L
3751 { "rsqrtps",{ XM, EXx }, PREFIX_OPCODE },
3752 { "rsqrtss",{ XM, EXd }, PREFIX_OPCODE },
c608c12e 3753 },
4e7d34a6 3754
1ceb70f8 3755 /* PREFIX_0F53 */
c608c12e 3756 {
507bd325
L
3757 { "rcpps", { XM, EXx }, PREFIX_OPCODE },
3758 { "rcpss", { XM, EXd }, PREFIX_OPCODE },
c608c12e 3759 },
4e7d34a6 3760
1ceb70f8 3761 /* PREFIX_0F58 */
c608c12e 3762 {
507bd325
L
3763 { "addps", { XM, EXx }, PREFIX_OPCODE },
3764 { "addss", { XM, EXd }, PREFIX_OPCODE },
3765 { "addpd", { XM, EXx }, PREFIX_OPCODE },
3766 { "addsd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3767 },
4e7d34a6 3768
1ceb70f8 3769 /* PREFIX_0F59 */
c608c12e 3770 {
507bd325
L
3771 { "mulps", { XM, EXx }, PREFIX_OPCODE },
3772 { "mulss", { XM, EXd }, PREFIX_OPCODE },
3773 { "mulpd", { XM, EXx }, PREFIX_OPCODE },
3774 { "mulsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3775 },
4e7d34a6 3776
1ceb70f8 3777 /* PREFIX_0F5A */
041bd2e0 3778 {
507bd325
L
3779 { "cvtps2pd", { XM, EXq }, PREFIX_OPCODE },
3780 { "cvtss2sd", { XM, EXd }, PREFIX_OPCODE },
3781 { "cvtpd2ps", { XM, EXx }, PREFIX_OPCODE },
3782 { "cvtsd2ss", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3783 },
4e7d34a6 3784
1ceb70f8 3785 /* PREFIX_0F5B */
041bd2e0 3786 {
507bd325
L
3787 { "cvtdq2ps", { XM, EXx }, PREFIX_OPCODE },
3788 { "cvttps2dq", { XM, EXx }, PREFIX_OPCODE },
3789 { "cvtps2dq", { XM, EXx }, PREFIX_OPCODE },
041bd2e0 3790 },
4e7d34a6 3791
1ceb70f8 3792 /* PREFIX_0F5C */
041bd2e0 3793 {
507bd325
L
3794 { "subps", { XM, EXx }, PREFIX_OPCODE },
3795 { "subss", { XM, EXd }, PREFIX_OPCODE },
3796 { "subpd", { XM, EXx }, PREFIX_OPCODE },
3797 { "subsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3798 },
4e7d34a6 3799
1ceb70f8 3800 /* PREFIX_0F5D */
041bd2e0 3801 {
507bd325
L
3802 { "minps", { XM, EXx }, PREFIX_OPCODE },
3803 { "minss", { XM, EXd }, PREFIX_OPCODE },
3804 { "minpd", { XM, EXx }, PREFIX_OPCODE },
3805 { "minsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3806 },
4e7d34a6 3807
1ceb70f8 3808 /* PREFIX_0F5E */
041bd2e0 3809 {
507bd325
L
3810 { "divps", { XM, EXx }, PREFIX_OPCODE },
3811 { "divss", { XM, EXd }, PREFIX_OPCODE },
3812 { "divpd", { XM, EXx }, PREFIX_OPCODE },
3813 { "divsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3814 },
4e7d34a6 3815
1ceb70f8 3816 /* PREFIX_0F5F */
041bd2e0 3817 {
507bd325
L
3818 { "maxps", { XM, EXx }, PREFIX_OPCODE },
3819 { "maxss", { XM, EXd }, PREFIX_OPCODE },
3820 { "maxpd", { XM, EXx }, PREFIX_OPCODE },
3821 { "maxsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3822 },
4e7d34a6 3823
1ceb70f8 3824 /* PREFIX_0F60 */
041bd2e0 3825 {
507bd325 3826 { "punpcklbw",{ MX, EMd }, PREFIX_OPCODE },
592d1631 3827 { Bad_Opcode },
507bd325 3828 { "punpcklbw",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 3829 },
4e7d34a6 3830
1ceb70f8 3831 /* PREFIX_0F61 */
041bd2e0 3832 {
507bd325 3833 { "punpcklwd",{ MX, EMd }, PREFIX_OPCODE },
592d1631 3834 { Bad_Opcode },
507bd325 3835 { "punpcklwd",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 3836 },
4e7d34a6 3837
1ceb70f8 3838 /* PREFIX_0F62 */
041bd2e0 3839 {
507bd325 3840 { "punpckldq",{ MX, EMd }, PREFIX_OPCODE },
592d1631 3841 { Bad_Opcode },
507bd325 3842 { "punpckldq",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 3843 },
4e7d34a6 3844
1ceb70f8 3845 /* PREFIX_0F6C */
041bd2e0 3846 {
592d1631
L
3847 { Bad_Opcode },
3848 { Bad_Opcode },
507bd325 3849 { "punpcklqdq", { XM, EXx }, PREFIX_OPCODE },
0f17484f 3850 },
4e7d34a6 3851
1ceb70f8 3852 /* PREFIX_0F6D */
0f17484f 3853 {
592d1631
L
3854 { Bad_Opcode },
3855 { Bad_Opcode },
507bd325 3856 { "punpckhqdq", { XM, EXx }, PREFIX_OPCODE },
041bd2e0 3857 },
4e7d34a6 3858
1ceb70f8 3859 /* PREFIX_0F6F */
ca164297 3860 {
507bd325
L
3861 { "movq", { MX, EM }, PREFIX_OPCODE },
3862 { "movdqu", { XM, EXx }, PREFIX_OPCODE },
3863 { "movdqa", { XM, EXx }, PREFIX_OPCODE },
ca164297 3864 },
4e7d34a6 3865
1ceb70f8 3866 /* PREFIX_0F70 */
4e7d34a6 3867 {
507bd325
L
3868 { "pshufw", { MX, EM, Ib }, PREFIX_OPCODE },
3869 { "pshufhw",{ XM, EXx, Ib }, PREFIX_OPCODE },
3870 { "pshufd", { XM, EXx, Ib }, PREFIX_OPCODE },
3871 { "pshuflw",{ XM, EXx, Ib }, PREFIX_OPCODE },
4e7d34a6
L
3872 },
3873
92fddf8e
L
3874 /* PREFIX_0F73_REG_3 */
3875 {
592d1631
L
3876 { Bad_Opcode },
3877 { Bad_Opcode },
bf890a93 3878 { "psrldq", { XS, Ib }, 0 },
92fddf8e
L
3879 },
3880
3881 /* PREFIX_0F73_REG_7 */
3882 {
592d1631
L
3883 { Bad_Opcode },
3884 { Bad_Opcode },
bf890a93 3885 { "pslldq", { XS, Ib }, 0 },
92fddf8e
L
3886 },
3887
1ceb70f8 3888 /* PREFIX_0F78 */
4e7d34a6 3889 {
bf890a93 3890 {"vmread", { Em, Gm }, 0 },
592d1631 3891 { Bad_Opcode },
bf890a93
IT
3892 {"extrq", { XS, Ib, Ib }, 0 },
3893 {"insertq", { XM, XS, Ib, Ib }, 0 },
4e7d34a6
L
3894 },
3895
1ceb70f8 3896 /* PREFIX_0F79 */
4e7d34a6 3897 {
bf890a93 3898 {"vmwrite", { Gm, Em }, 0 },
592d1631 3899 { Bad_Opcode },
bf890a93
IT
3900 {"extrq", { XM, XS }, 0 },
3901 {"insertq", { XM, XS }, 0 },
4e7d34a6
L
3902 },
3903
1ceb70f8 3904 /* PREFIX_0F7C */
ca164297 3905 {
592d1631
L
3906 { Bad_Opcode },
3907 { Bad_Opcode },
507bd325
L
3908 { "haddpd", { XM, EXx }, PREFIX_OPCODE },
3909 { "haddps", { XM, EXx }, PREFIX_OPCODE },
ca164297 3910 },
4e7d34a6 3911
1ceb70f8 3912 /* PREFIX_0F7D */
ca164297 3913 {
592d1631
L
3914 { Bad_Opcode },
3915 { Bad_Opcode },
507bd325
L
3916 { "hsubpd", { XM, EXx }, PREFIX_OPCODE },
3917 { "hsubps", { XM, EXx }, PREFIX_OPCODE },
ca164297 3918 },
4e7d34a6 3919
1ceb70f8 3920 /* PREFIX_0F7E */
ca164297 3921 {
507bd325
L
3922 { "movK", { Edq, MX }, PREFIX_OPCODE },
3923 { "movq", { XM, EXq }, PREFIX_OPCODE },
3924 { "movK", { Edq, XM }, PREFIX_OPCODE },
ca164297 3925 },
4e7d34a6 3926
1ceb70f8 3927 /* PREFIX_0F7F */
ca164297 3928 {
507bd325
L
3929 { "movq", { EMS, MX }, PREFIX_OPCODE },
3930 { "movdqu", { EXxS, XM }, PREFIX_OPCODE },
3931 { "movdqa", { EXxS, XM }, PREFIX_OPCODE },
ca164297 3932 },
4e7d34a6 3933
c7b8aa3a
L
3934 /* PREFIX_0FAE_REG_0 */
3935 {
3936 { Bad_Opcode },
bf890a93 3937 { "rdfsbase", { Ev }, 0 },
c7b8aa3a
L
3938 },
3939
3940 /* PREFIX_0FAE_REG_1 */
3941 {
3942 { Bad_Opcode },
bf890a93 3943 { "rdgsbase", { Ev }, 0 },
c7b8aa3a
L
3944 },
3945
3946 /* PREFIX_0FAE_REG_2 */
3947 {
3948 { Bad_Opcode },
bf890a93 3949 { "wrfsbase", { Ev }, 0 },
c7b8aa3a
L
3950 },
3951
3952 /* PREFIX_0FAE_REG_3 */
3953 {
3954 { Bad_Opcode },
bf890a93 3955 { "wrgsbase", { Ev }, 0 },
c7b8aa3a
L
3956 },
3957
6b40c462
L
3958 /* PREFIX_MOD_0_0FAE_REG_4 */
3959 {
3960 { "xsave", { FXSAVE }, 0 },
3961 { "ptwrite%LQ", { Edq }, 0 },
3962 },
3963
3964 /* PREFIX_MOD_3_0FAE_REG_4 */
3965 {
3966 { Bad_Opcode },
3967 { "ptwrite%LQ", { Edq }, 0 },
3968 },
3969
603555e5
L
3970 /* PREFIX_MOD_0_0FAE_REG_5 */
3971 {
3972 { "xrstor", { FXSAVE }, PREFIX_OPCODE },
2234eee6
L
3973 },
3974
3975 /* PREFIX_MOD_3_0FAE_REG_5 */
3976 {
3977 { "lfence", { Skip_MODRM }, 0 },
3978 { "incsspK", { Rdq }, PREFIX_OPCODE },
603555e5
L
3979 },
3980
de89d0a3 3981 /* PREFIX_MOD_0_0FAE_REG_6 */
c5e7287a 3982 {
603555e5
L
3983 { "xsaveopt", { FXSAVE }, PREFIX_OPCODE },
3984 { "clrssbsy", { Mq }, PREFIX_OPCODE },
3985 { "clwb", { Mb }, PREFIX_OPCODE },
c5e7287a
IT
3986 },
3987
de89d0a3
IT
3988 /* PREFIX_MOD_1_0FAE_REG_6 */
3989 {
3990 { RM_TABLE (RM_0FAE_REG_6) },
3991 { "umonitor", { Eva }, PREFIX_OPCODE },
ae1d3843
L
3992 { "tpause", { Edq }, PREFIX_OPCODE },
3993 { "umwait", { Edq }, PREFIX_OPCODE },
de89d0a3
IT
3994 },
3995
963f3586
IT
3996 /* PREFIX_0FAE_REG_7 */
3997 {
bf890a93 3998 { "clflush", { Mb }, 0 },
963f3586 3999 { Bad_Opcode },
bf890a93 4000 { "clflushopt", { Mb }, 0 },
963f3586
IT
4001 },
4002
1ceb70f8 4003 /* PREFIX_0FB8 */
ca164297 4004 {
592d1631 4005 { Bad_Opcode },
bf890a93 4006 { "popcntS", { Gv, Ev }, 0 },
ca164297 4007 },
4e7d34a6 4008
f12dc422
L
4009 /* PREFIX_0FBC */
4010 {
bf890a93
IT
4011 { "bsfS", { Gv, Ev }, 0 },
4012 { "tzcntS", { Gv, Ev }, 0 },
4013 { "bsfS", { Gv, Ev }, 0 },
f12dc422
L
4014 },
4015
1ceb70f8 4016 /* PREFIX_0FBD */
050dfa73 4017 {
bf890a93
IT
4018 { "bsrS", { Gv, Ev }, 0 },
4019 { "lzcntS", { Gv, Ev }, 0 },
4020 { "bsrS", { Gv, Ev }, 0 },
050dfa73
MM
4021 },
4022
1ceb70f8 4023 /* PREFIX_0FC2 */
050dfa73 4024 {
507bd325
L
4025 { "cmpps", { XM, EXx, CMP }, PREFIX_OPCODE },
4026 { "cmpss", { XM, EXd, CMP }, PREFIX_OPCODE },
4027 { "cmppd", { XM, EXx, CMP }, PREFIX_OPCODE },
4028 { "cmpsd", { XM, EXq, CMP }, PREFIX_OPCODE },
050dfa73 4029 },
246c51aa 4030
a8484f96 4031 /* PREFIX_MOD_0_0FC3 */
4ee52178 4032 {
a8484f96 4033 { "movntiS", { Ev, Gv }, PREFIX_OPCODE },
4ee52178
L
4034 },
4035
f24bcbaa 4036 /* PREFIX_MOD_0_0FC7_REG_6 */
92fddf8e 4037 {
bf890a93
IT
4038 { "vmptrld",{ Mq }, 0 },
4039 { "vmxon", { Mq }, 0 },
4040 { "vmclear",{ Mq }, 0 },
92fddf8e
L
4041 },
4042
f24bcbaa
L
4043 /* PREFIX_MOD_3_0FC7_REG_6 */
4044 {
4045 { "rdrand", { Ev }, 0 },
4046 { Bad_Opcode },
4047 { "rdrand", { Ev }, 0 }
4048 },
4049
4050 /* PREFIX_MOD_3_0FC7_REG_7 */
4051 {
4052 { "rdseed", { Ev }, 0 },
8bc52696 4053 { "rdpid", { Em }, 0 },
f24bcbaa
L
4054 { "rdseed", { Ev }, 0 },
4055 },
4056
1ceb70f8 4057 /* PREFIX_0FD0 */
050dfa73 4058 {
592d1631
L
4059 { Bad_Opcode },
4060 { Bad_Opcode },
bf890a93
IT
4061 { "addsubpd", { XM, EXx }, 0 },
4062 { "addsubps", { XM, EXx }, 0 },
246c51aa 4063 },
050dfa73 4064
1ceb70f8 4065 /* PREFIX_0FD6 */
050dfa73 4066 {
592d1631 4067 { Bad_Opcode },
bf890a93
IT
4068 { "movq2dq",{ XM, MS }, 0 },
4069 { "movq", { EXqS, XM }, 0 },
4070 { "movdq2q",{ MX, XS }, 0 },
050dfa73
MM
4071 },
4072
1ceb70f8 4073 /* PREFIX_0FE6 */
7918206c 4074 {
592d1631 4075 { Bad_Opcode },
507bd325
L
4076 { "cvtdq2pd", { XM, EXq }, PREFIX_OPCODE },
4077 { "cvttpd2dq", { XM, EXx }, PREFIX_OPCODE },
4078 { "cvtpd2dq", { XM, EXx }, PREFIX_OPCODE },
7918206c 4079 },
8b38ad71 4080
1ceb70f8 4081 /* PREFIX_0FE7 */
8b38ad71 4082 {
507bd325 4083 { "movntq", { Mq, MX }, PREFIX_OPCODE },
592d1631 4084 { Bad_Opcode },
75c135a8 4085 { MOD_TABLE (MOD_0FE7_PREFIX_2) },
4e7d34a6
L
4086 },
4087
1ceb70f8 4088 /* PREFIX_0FF0 */
4e7d34a6 4089 {
592d1631
L
4090 { Bad_Opcode },
4091 { Bad_Opcode },
4092 { Bad_Opcode },
1ceb70f8 4093 { MOD_TABLE (MOD_0FF0_PREFIX_3) },
4e7d34a6
L
4094 },
4095
1ceb70f8 4096 /* PREFIX_0FF7 */
4e7d34a6 4097 {
507bd325 4098 { "maskmovq", { MX, MS }, PREFIX_OPCODE },
592d1631 4099 { Bad_Opcode },
507bd325 4100 { "maskmovdqu", { XM, XS }, PREFIX_OPCODE },
8b38ad71 4101 },
42903f7f 4102
1ceb70f8 4103 /* PREFIX_0F3810 */
42903f7f 4104 {
592d1631
L
4105 { Bad_Opcode },
4106 { Bad_Opcode },
507bd325 4107 { "pblendvb", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4108 },
4109
1ceb70f8 4110 /* PREFIX_0F3814 */
42903f7f 4111 {
592d1631
L
4112 { Bad_Opcode },
4113 { Bad_Opcode },
507bd325 4114 { "blendvps", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4115 },
4116
1ceb70f8 4117 /* PREFIX_0F3815 */
42903f7f 4118 {
592d1631
L
4119 { Bad_Opcode },
4120 { Bad_Opcode },
507bd325 4121 { "blendvpd", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4122 },
4123
1ceb70f8 4124 /* PREFIX_0F3817 */
42903f7f 4125 {
592d1631
L
4126 { Bad_Opcode },
4127 { Bad_Opcode },
507bd325 4128 { "ptest", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4129 },
4130
1ceb70f8 4131 /* PREFIX_0F3820 */
42903f7f 4132 {
592d1631
L
4133 { Bad_Opcode },
4134 { Bad_Opcode },
507bd325 4135 { "pmovsxbw", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4136 },
4137
1ceb70f8 4138 /* PREFIX_0F3821 */
42903f7f 4139 {
592d1631
L
4140 { Bad_Opcode },
4141 { Bad_Opcode },
507bd325 4142 { "pmovsxbd", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4143 },
4144
1ceb70f8 4145 /* PREFIX_0F3822 */
42903f7f 4146 {
592d1631
L
4147 { Bad_Opcode },
4148 { Bad_Opcode },
507bd325 4149 { "pmovsxbq", { XM, EXw }, PREFIX_OPCODE },
42903f7f
L
4150 },
4151
1ceb70f8 4152 /* PREFIX_0F3823 */
42903f7f 4153 {
592d1631
L
4154 { Bad_Opcode },
4155 { Bad_Opcode },
507bd325 4156 { "pmovsxwd", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4157 },
4158
1ceb70f8 4159 /* PREFIX_0F3824 */
42903f7f 4160 {
592d1631
L
4161 { Bad_Opcode },
4162 { Bad_Opcode },
507bd325 4163 { "pmovsxwq", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4164 },
4165
1ceb70f8 4166 /* PREFIX_0F3825 */
42903f7f 4167 {
592d1631
L
4168 { Bad_Opcode },
4169 { Bad_Opcode },
507bd325 4170 { "pmovsxdq", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4171 },
4172
1ceb70f8 4173 /* PREFIX_0F3828 */
42903f7f 4174 {
592d1631
L
4175 { Bad_Opcode },
4176 { Bad_Opcode },
507bd325 4177 { "pmuldq", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4178 },
4179
1ceb70f8 4180 /* PREFIX_0F3829 */
42903f7f 4181 {
592d1631
L
4182 { Bad_Opcode },
4183 { Bad_Opcode },
507bd325 4184 { "pcmpeqq", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4185 },
4186
1ceb70f8 4187 /* PREFIX_0F382A */
42903f7f 4188 {
592d1631
L
4189 { Bad_Opcode },
4190 { Bad_Opcode },
75c135a8 4191 { MOD_TABLE (MOD_0F382A_PREFIX_2) },
42903f7f
L
4192 },
4193
1ceb70f8 4194 /* PREFIX_0F382B */
42903f7f 4195 {
592d1631
L
4196 { Bad_Opcode },
4197 { Bad_Opcode },
507bd325 4198 { "packusdw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4199 },
4200
1ceb70f8 4201 /* PREFIX_0F3830 */
42903f7f 4202 {
592d1631
L
4203 { Bad_Opcode },
4204 { Bad_Opcode },
507bd325 4205 { "pmovzxbw", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4206 },
4207
1ceb70f8 4208 /* PREFIX_0F3831 */
42903f7f 4209 {
592d1631
L
4210 { Bad_Opcode },
4211 { Bad_Opcode },
507bd325 4212 { "pmovzxbd", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4213 },
4214
1ceb70f8 4215 /* PREFIX_0F3832 */
42903f7f 4216 {
592d1631
L
4217 { Bad_Opcode },
4218 { Bad_Opcode },
507bd325 4219 { "pmovzxbq", { XM, EXw }, PREFIX_OPCODE },
42903f7f
L
4220 },
4221
1ceb70f8 4222 /* PREFIX_0F3833 */
42903f7f 4223 {
592d1631
L
4224 { Bad_Opcode },
4225 { Bad_Opcode },
507bd325 4226 { "pmovzxwd", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4227 },
4228
1ceb70f8 4229 /* PREFIX_0F3834 */
42903f7f 4230 {
592d1631
L
4231 { Bad_Opcode },
4232 { Bad_Opcode },
507bd325 4233 { "pmovzxwq", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4234 },
4235
1ceb70f8 4236 /* PREFIX_0F3835 */
42903f7f 4237 {
592d1631
L
4238 { Bad_Opcode },
4239 { Bad_Opcode },
507bd325 4240 { "pmovzxdq", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4241 },
4242
1ceb70f8 4243 /* PREFIX_0F3837 */
4e7d34a6 4244 {
592d1631
L
4245 { Bad_Opcode },
4246 { Bad_Opcode },
507bd325 4247 { "pcmpgtq", { XM, EXx }, PREFIX_OPCODE },
4e7d34a6
L
4248 },
4249
1ceb70f8 4250 /* PREFIX_0F3838 */
42903f7f 4251 {
592d1631
L
4252 { Bad_Opcode },
4253 { Bad_Opcode },
507bd325 4254 { "pminsb", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4255 },
4256
1ceb70f8 4257 /* PREFIX_0F3839 */
42903f7f 4258 {
592d1631
L
4259 { Bad_Opcode },
4260 { Bad_Opcode },
507bd325 4261 { "pminsd", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4262 },
4263
1ceb70f8 4264 /* PREFIX_0F383A */
42903f7f 4265 {
592d1631
L
4266 { Bad_Opcode },
4267 { Bad_Opcode },
507bd325 4268 { "pminuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4269 },
4270
1ceb70f8 4271 /* PREFIX_0F383B */
42903f7f 4272 {
592d1631
L
4273 { Bad_Opcode },
4274 { Bad_Opcode },
507bd325 4275 { "pminud", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4276 },
4277
1ceb70f8 4278 /* PREFIX_0F383C */
42903f7f 4279 {
592d1631
L
4280 { Bad_Opcode },
4281 { Bad_Opcode },
507bd325 4282 { "pmaxsb", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4283 },
4284
1ceb70f8 4285 /* PREFIX_0F383D */
42903f7f 4286 {
592d1631
L
4287 { Bad_Opcode },
4288 { Bad_Opcode },
507bd325 4289 { "pmaxsd", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4290 },
4291
1ceb70f8 4292 /* PREFIX_0F383E */
42903f7f 4293 {
592d1631
L
4294 { Bad_Opcode },
4295 { Bad_Opcode },
507bd325 4296 { "pmaxuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4297 },
4298
1ceb70f8 4299 /* PREFIX_0F383F */
42903f7f 4300 {
592d1631
L
4301 { Bad_Opcode },
4302 { Bad_Opcode },
507bd325 4303 { "pmaxud", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4304 },
4305
1ceb70f8 4306 /* PREFIX_0F3840 */
42903f7f 4307 {
592d1631
L
4308 { Bad_Opcode },
4309 { Bad_Opcode },
507bd325 4310 { "pmulld", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4311 },
4312
1ceb70f8 4313 /* PREFIX_0F3841 */
42903f7f 4314 {
592d1631
L
4315 { Bad_Opcode },
4316 { Bad_Opcode },
507bd325 4317 { "phminposuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4318 },
4319
f1f8f695
L
4320 /* PREFIX_0F3880 */
4321 {
592d1631
L
4322 { Bad_Opcode },
4323 { Bad_Opcode },
507bd325 4324 { "invept", { Gm, Mo }, PREFIX_OPCODE },
f1f8f695
L
4325 },
4326
4327 /* PREFIX_0F3881 */
4328 {
592d1631
L
4329 { Bad_Opcode },
4330 { Bad_Opcode },
507bd325 4331 { "invvpid", { Gm, Mo }, PREFIX_OPCODE },
f1f8f695
L
4332 },
4333
6c30d220
L
4334 /* PREFIX_0F3882 */
4335 {
4336 { Bad_Opcode },
4337 { Bad_Opcode },
507bd325 4338 { "invpcid", { Gm, M }, PREFIX_OPCODE },
6c30d220
L
4339 },
4340
a0046408
L
4341 /* PREFIX_0F38C8 */
4342 {
507bd325 4343 { "sha1nexte", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4344 },
4345
4346 /* PREFIX_0F38C9 */
4347 {
507bd325 4348 { "sha1msg1", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4349 },
4350
4351 /* PREFIX_0F38CA */
4352 {
507bd325 4353 { "sha1msg2", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4354 },
4355
4356 /* PREFIX_0F38CB */
4357 {
507bd325 4358 { "sha256rnds2", { XM, EXxmm, XMM0 }, PREFIX_OPCODE },
a0046408
L
4359 },
4360
4361 /* PREFIX_0F38CC */
4362 {
507bd325 4363 { "sha256msg1", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4364 },
4365
4366 /* PREFIX_0F38CD */
4367 {
507bd325 4368 { "sha256msg2", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4369 },
4370
48521003
IT
4371 /* PREFIX_0F38CF */
4372 {
4373 { Bad_Opcode },
4374 { Bad_Opcode },
4375 { "gf2p8mulb", { XM, EXxmm }, PREFIX_OPCODE },
4376 },
4377
c0f3af97
L
4378 /* PREFIX_0F38DB */
4379 {
592d1631
L
4380 { Bad_Opcode },
4381 { Bad_Opcode },
507bd325 4382 { "aesimc", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4383 },
4384
4385 /* PREFIX_0F38DC */
4386 {
592d1631
L
4387 { Bad_Opcode },
4388 { Bad_Opcode },
507bd325 4389 { "aesenc", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4390 },
4391
4392 /* PREFIX_0F38DD */
4393 {
592d1631
L
4394 { Bad_Opcode },
4395 { Bad_Opcode },
507bd325 4396 { "aesenclast", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4397 },
4398
4399 /* PREFIX_0F38DE */
4400 {
592d1631
L
4401 { Bad_Opcode },
4402 { Bad_Opcode },
507bd325 4403 { "aesdec", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4404 },
4405
4406 /* PREFIX_0F38DF */
4407 {
592d1631
L
4408 { Bad_Opcode },
4409 { Bad_Opcode },
507bd325 4410 { "aesdeclast", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4411 },
4412
1ceb70f8 4413 /* PREFIX_0F38F0 */
4e7d34a6 4414 {
507bd325 4415 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } }, PREFIX_OPCODE },
592d1631 4416 { Bad_Opcode },
507bd325
L
4417 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } }, PREFIX_OPCODE },
4418 { "crc32", { Gdq, { CRC32_Fixup, b_mode } }, PREFIX_OPCODE },
4e7d34a6
L
4419 },
4420
1ceb70f8 4421 /* PREFIX_0F38F1 */
4e7d34a6 4422 {
507bd325 4423 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv }, PREFIX_OPCODE },
592d1631 4424 { Bad_Opcode },
507bd325
L
4425 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv }, PREFIX_OPCODE },
4426 { "crc32", { Gdq, { CRC32_Fixup, v_mode } }, PREFIX_OPCODE },
4e7d34a6
L
4427 },
4428
603555e5 4429 /* PREFIX_0F38F5 */
e2e1fcde
L
4430 {
4431 { Bad_Opcode },
603555e5
L
4432 { Bad_Opcode },
4433 { MOD_TABLE (MOD_0F38F5_PREFIX_2) },
4434 },
4435
4436 /* PREFIX_0F38F6 */
4437 {
4438 { MOD_TABLE (MOD_0F38F6_PREFIX_0) },
507bd325
L
4439 { "adoxS", { Gdq, Edq}, PREFIX_OPCODE },
4440 { "adcxS", { Gdq, Edq}, PREFIX_OPCODE },
e2e1fcde
L
4441 { Bad_Opcode },
4442 },
4443
c0a30a9f
L
4444 /* PREFIX_0F38F8 */
4445 {
4446 { Bad_Opcode },
4447 { Bad_Opcode },
4448 { MOD_TABLE (MOD_0F38F8_PREFIX_2) },
4449 },
4450
4451 /* PREFIX_0F38F9 */
4452 {
4453 { MOD_TABLE (MOD_0F38F9_PREFIX_0) },
4454 },
4455
1ceb70f8 4456 /* PREFIX_0F3A08 */
42903f7f 4457 {
592d1631
L
4458 { Bad_Opcode },
4459 { Bad_Opcode },
507bd325 4460 { "roundps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4461 },
4462
1ceb70f8 4463 /* PREFIX_0F3A09 */
42903f7f 4464 {
592d1631
L
4465 { Bad_Opcode },
4466 { Bad_Opcode },
507bd325 4467 { "roundpd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4468 },
4469
1ceb70f8 4470 /* PREFIX_0F3A0A */
42903f7f 4471 {
592d1631
L
4472 { Bad_Opcode },
4473 { Bad_Opcode },
507bd325 4474 { "roundss", { XM, EXd, Ib }, PREFIX_OPCODE },
42903f7f
L
4475 },
4476
1ceb70f8 4477 /* PREFIX_0F3A0B */
42903f7f 4478 {
592d1631
L
4479 { Bad_Opcode },
4480 { Bad_Opcode },
507bd325 4481 { "roundsd", { XM, EXq, Ib }, PREFIX_OPCODE },
42903f7f
L
4482 },
4483
1ceb70f8 4484 /* PREFIX_0F3A0C */
42903f7f 4485 {
592d1631
L
4486 { Bad_Opcode },
4487 { Bad_Opcode },
507bd325 4488 { "blendps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4489 },
4490
1ceb70f8 4491 /* PREFIX_0F3A0D */
42903f7f 4492 {
592d1631
L
4493 { Bad_Opcode },
4494 { Bad_Opcode },
507bd325 4495 { "blendpd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4496 },
4497
1ceb70f8 4498 /* PREFIX_0F3A0E */
42903f7f 4499 {
592d1631
L
4500 { Bad_Opcode },
4501 { Bad_Opcode },
507bd325 4502 { "pblendw", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4503 },
4504
1ceb70f8 4505 /* PREFIX_0F3A14 */
42903f7f 4506 {
592d1631
L
4507 { Bad_Opcode },
4508 { Bad_Opcode },
507bd325 4509 { "pextrb", { Edqb, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4510 },
4511
1ceb70f8 4512 /* PREFIX_0F3A15 */
42903f7f 4513 {
592d1631
L
4514 { Bad_Opcode },
4515 { Bad_Opcode },
507bd325 4516 { "pextrw", { Edqw, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4517 },
4518
1ceb70f8 4519 /* PREFIX_0F3A16 */
42903f7f 4520 {
592d1631
L
4521 { Bad_Opcode },
4522 { Bad_Opcode },
507bd325 4523 { "pextrK", { Edq, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4524 },
4525
1ceb70f8 4526 /* PREFIX_0F3A17 */
42903f7f 4527 {
592d1631
L
4528 { Bad_Opcode },
4529 { Bad_Opcode },
507bd325 4530 { "extractps", { Edqd, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4531 },
4532
1ceb70f8 4533 /* PREFIX_0F3A20 */
42903f7f 4534 {
592d1631
L
4535 { Bad_Opcode },
4536 { Bad_Opcode },
507bd325 4537 { "pinsrb", { XM, Edqb, Ib }, PREFIX_OPCODE },
42903f7f
L
4538 },
4539
1ceb70f8 4540 /* PREFIX_0F3A21 */
42903f7f 4541 {
592d1631
L
4542 { Bad_Opcode },
4543 { Bad_Opcode },
507bd325 4544 { "insertps", { XM, EXd, Ib }, PREFIX_OPCODE },
42903f7f
L
4545 },
4546
1ceb70f8 4547 /* PREFIX_0F3A22 */
42903f7f 4548 {
592d1631
L
4549 { Bad_Opcode },
4550 { Bad_Opcode },
507bd325 4551 { "pinsrK", { XM, Edq, Ib }, PREFIX_OPCODE },
42903f7f
L
4552 },
4553
1ceb70f8 4554 /* PREFIX_0F3A40 */
42903f7f 4555 {
592d1631
L
4556 { Bad_Opcode },
4557 { Bad_Opcode },
507bd325 4558 { "dpps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4559 },
4560
1ceb70f8 4561 /* PREFIX_0F3A41 */
42903f7f 4562 {
592d1631
L
4563 { Bad_Opcode },
4564 { Bad_Opcode },
507bd325 4565 { "dppd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4566 },
4567
1ceb70f8 4568 /* PREFIX_0F3A42 */
42903f7f 4569 {
592d1631
L
4570 { Bad_Opcode },
4571 { Bad_Opcode },
507bd325 4572 { "mpsadbw", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f 4573 },
381d071f 4574
c0f3af97
L
4575 /* PREFIX_0F3A44 */
4576 {
592d1631
L
4577 { Bad_Opcode },
4578 { Bad_Opcode },
507bd325 4579 { "pclmulqdq", { XM, EXx, PCLMUL }, PREFIX_OPCODE },
c0f3af97
L
4580 },
4581
1ceb70f8 4582 /* PREFIX_0F3A60 */
381d071f 4583 {
592d1631
L
4584 { Bad_Opcode },
4585 { Bad_Opcode },
15c7c1d8 4586 { "pcmpestrm", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, PREFIX_OPCODE },
381d071f
L
4587 },
4588
1ceb70f8 4589 /* PREFIX_0F3A61 */
381d071f 4590 {
592d1631
L
4591 { Bad_Opcode },
4592 { Bad_Opcode },
15c7c1d8 4593 { "pcmpestri", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, PREFIX_OPCODE },
381d071f
L
4594 },
4595
1ceb70f8 4596 /* PREFIX_0F3A62 */
381d071f 4597 {
592d1631
L
4598 { Bad_Opcode },
4599 { Bad_Opcode },
507bd325 4600 { "pcmpistrm", { XM, EXx, Ib }, PREFIX_OPCODE },
381d071f
L
4601 },
4602
1ceb70f8 4603 /* PREFIX_0F3A63 */
381d071f 4604 {
592d1631
L
4605 { Bad_Opcode },
4606 { Bad_Opcode },
507bd325 4607 { "pcmpistri", { XM, EXx, Ib }, PREFIX_OPCODE },
381d071f 4608 },
09a2c6cf 4609
a0046408
L
4610 /* PREFIX_0F3ACC */
4611 {
507bd325 4612 { "sha1rnds4", { XM, EXxmm, Ib }, PREFIX_OPCODE },
a0046408
L
4613 },
4614
48521003
IT
4615 /* PREFIX_0F3ACE */
4616 {
4617 { Bad_Opcode },
4618 { Bad_Opcode },
4619 { "gf2p8affineqb", { XM, EXxmm, Ib }, PREFIX_OPCODE },
4620 },
4621
4622 /* PREFIX_0F3ACF */
4623 {
4624 { Bad_Opcode },
4625 { Bad_Opcode },
4626 { "gf2p8affineinvqb", { XM, EXxmm, Ib }, PREFIX_OPCODE },
4627 },
4628
c0f3af97 4629 /* PREFIX_0F3ADF */
09a2c6cf 4630 {
592d1631
L
4631 { Bad_Opcode },
4632 { Bad_Opcode },
507bd325 4633 { "aeskeygenassist", { XM, EXx, Ib }, PREFIX_OPCODE },
09a2c6cf
L
4634 },
4635
592a252b 4636 /* PREFIX_VEX_0F10 */
09a2c6cf 4637 {
ec6f095a
L
4638 { "vmovups", { XM, EXx }, 0 },
4639 { "vmovss", { XMVexScalar, VexScalar, EXdScalar }, 0 },
4640 { "vmovupd", { XM, EXx }, 0 },
4641 { "vmovsd", { XMVexScalar, VexScalar, EXqScalar }, 0 },
09a2c6cf
L
4642 },
4643
592a252b 4644 /* PREFIX_VEX_0F11 */
09a2c6cf 4645 {
ec6f095a
L
4646 { "vmovups", { EXxS, XM }, 0 },
4647 { "vmovss", { EXdVexScalarS, VexScalar, XMScalar }, 0 },
4648 { "vmovupd", { EXxS, XM }, 0 },
4649 { "vmovsd", { EXqVexScalarS, VexScalar, XMScalar }, 0 },
09a2c6cf
L
4650 },
4651
592a252b 4652 /* PREFIX_VEX_0F12 */
09a2c6cf 4653 {
592a252b 4654 { MOD_TABLE (MOD_VEX_0F12_PREFIX_0) },
ec6f095a 4655 { "vmovsldup", { XM, EXx }, 0 },
592a252b 4656 { VEX_LEN_TABLE (VEX_LEN_0F12_P_2) },
ec6f095a 4657 { "vmovddup", { XM, EXymmq }, 0 },
09a2c6cf
L
4658 },
4659
592a252b 4660 /* PREFIX_VEX_0F16 */
09a2c6cf 4661 {
592a252b 4662 { MOD_TABLE (MOD_VEX_0F16_PREFIX_0) },
ec6f095a 4663 { "vmovshdup", { XM, EXx }, 0 },
592a252b 4664 { VEX_LEN_TABLE (VEX_LEN_0F16_P_2) },
5f754f58 4665 },
7c52e0e8 4666
592a252b 4667 /* PREFIX_VEX_0F2A */
5f754f58 4668 {
592d1631 4669 { Bad_Opcode },
592a252b 4670 { VEX_LEN_TABLE (VEX_LEN_0F2A_P_1) },
592d1631 4671 { Bad_Opcode },
592a252b 4672 { VEX_LEN_TABLE (VEX_LEN_0F2A_P_3) },
5f754f58 4673 },
7c52e0e8 4674
592a252b 4675 /* PREFIX_VEX_0F2C */
5f754f58 4676 {
592d1631 4677 { Bad_Opcode },
592a252b 4678 { VEX_LEN_TABLE (VEX_LEN_0F2C_P_1) },
592d1631 4679 { Bad_Opcode },
592a252b 4680 { VEX_LEN_TABLE (VEX_LEN_0F2C_P_3) },
5f754f58 4681 },
7c52e0e8 4682
592a252b 4683 /* PREFIX_VEX_0F2D */
7c52e0e8 4684 {
592d1631 4685 { Bad_Opcode },
592a252b 4686 { VEX_LEN_TABLE (VEX_LEN_0F2D_P_1) },
592d1631 4687 { Bad_Opcode },
592a252b 4688 { VEX_LEN_TABLE (VEX_LEN_0F2D_P_3) },
7c52e0e8
L
4689 },
4690
592a252b 4691 /* PREFIX_VEX_0F2E */
7c52e0e8 4692 {
ec6f095a 4693 { "vucomiss", { XMScalar, EXdScalar }, 0 },
592d1631 4694 { Bad_Opcode },
ec6f095a 4695 { "vucomisd", { XMScalar, EXqScalar }, 0 },
7c52e0e8
L
4696 },
4697
592a252b 4698 /* PREFIX_VEX_0F2F */
7c52e0e8 4699 {
ec6f095a 4700 { "vcomiss", { XMScalar, EXdScalar }, 0 },
592d1631 4701 { Bad_Opcode },
ec6f095a 4702 { "vcomisd", { XMScalar, EXqScalar }, 0 },
7c52e0e8
L
4703 },
4704
43234a1e
L
4705 /* PREFIX_VEX_0F41 */
4706 {
4707 { VEX_LEN_TABLE (VEX_LEN_0F41_P_0) },
1ba585e8
IT
4708 { Bad_Opcode },
4709 { VEX_LEN_TABLE (VEX_LEN_0F41_P_2) },
43234a1e
L
4710 },
4711
4712 /* PREFIX_VEX_0F42 */
4713 {
4714 { VEX_LEN_TABLE (VEX_LEN_0F42_P_0) },
1ba585e8
IT
4715 { Bad_Opcode },
4716 { VEX_LEN_TABLE (VEX_LEN_0F42_P_2) },
43234a1e
L
4717 },
4718
4719 /* PREFIX_VEX_0F44 */
4720 {
4721 { VEX_LEN_TABLE (VEX_LEN_0F44_P_0) },
1ba585e8
IT
4722 { Bad_Opcode },
4723 { VEX_LEN_TABLE (VEX_LEN_0F44_P_2) },
43234a1e
L
4724 },
4725
4726 /* PREFIX_VEX_0F45 */
4727 {
4728 { VEX_LEN_TABLE (VEX_LEN_0F45_P_0) },
1ba585e8
IT
4729 { Bad_Opcode },
4730 { VEX_LEN_TABLE (VEX_LEN_0F45_P_2) },
43234a1e
L
4731 },
4732
4733 /* PREFIX_VEX_0F46 */
4734 {
4735 { VEX_LEN_TABLE (VEX_LEN_0F46_P_0) },
1ba585e8
IT
4736 { Bad_Opcode },
4737 { VEX_LEN_TABLE (VEX_LEN_0F46_P_2) },
43234a1e
L
4738 },
4739
4740 /* PREFIX_VEX_0F47 */
4741 {
4742 { VEX_LEN_TABLE (VEX_LEN_0F47_P_0) },
1ba585e8
IT
4743 { Bad_Opcode },
4744 { VEX_LEN_TABLE (VEX_LEN_0F47_P_2) },
43234a1e
L
4745 },
4746
1ba585e8 4747 /* PREFIX_VEX_0F4A */
43234a1e 4748 {
1ba585e8 4749 { VEX_LEN_TABLE (VEX_LEN_0F4A_P_0) },
43234a1e 4750 { Bad_Opcode },
1ba585e8
IT
4751 { VEX_LEN_TABLE (VEX_LEN_0F4A_P_2) },
4752 },
4753
4754 /* PREFIX_VEX_0F4B */
4755 {
4756 { VEX_LEN_TABLE (VEX_LEN_0F4B_P_0) },
43234a1e
L
4757 { Bad_Opcode },
4758 { VEX_LEN_TABLE (VEX_LEN_0F4B_P_2) },
4759 },
4760
592a252b 4761 /* PREFIX_VEX_0F51 */
7c52e0e8 4762 {
ec6f095a
L
4763 { "vsqrtps", { XM, EXx }, 0 },
4764 { "vsqrtss", { XMScalar, VexScalar, EXdScalar }, 0 },
4765 { "vsqrtpd", { XM, EXx }, 0 },
4766 { "vsqrtsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4767 },
4768
592a252b 4769 /* PREFIX_VEX_0F52 */
7c52e0e8 4770 {
ec6f095a
L
4771 { "vrsqrtps", { XM, EXx }, 0 },
4772 { "vrsqrtss", { XMScalar, VexScalar, EXdScalar }, 0 },
7c52e0e8
L
4773 },
4774
592a252b 4775 /* PREFIX_VEX_0F53 */
7c52e0e8 4776 {
ec6f095a
L
4777 { "vrcpps", { XM, EXx }, 0 },
4778 { "vrcpss", { XMScalar, VexScalar, EXdScalar }, 0 },
7c52e0e8
L
4779 },
4780
592a252b 4781 /* PREFIX_VEX_0F58 */
7c52e0e8 4782 {
ec6f095a
L
4783 { "vaddps", { XM, Vex, EXx }, 0 },
4784 { "vaddss", { XMScalar, VexScalar, EXdScalar }, 0 },
4785 { "vaddpd", { XM, Vex, EXx }, 0 },
4786 { "vaddsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4787 },
4788
592a252b 4789 /* PREFIX_VEX_0F59 */
7c52e0e8 4790 {
ec6f095a
L
4791 { "vmulps", { XM, Vex, EXx }, 0 },
4792 { "vmulss", { XMScalar, VexScalar, EXdScalar }, 0 },
4793 { "vmulpd", { XM, Vex, EXx }, 0 },
4794 { "vmulsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4795 },
4796
592a252b 4797 /* PREFIX_VEX_0F5A */
7c52e0e8 4798 {
ec6f095a
L
4799 { "vcvtps2pd", { XM, EXxmmq }, 0 },
4800 { "vcvtss2sd", { XMScalar, VexScalar, EXdScalar }, 0 },
4801 { "vcvtpd2ps%XY",{ XMM, EXx }, 0 },
4802 { "vcvtsd2ss", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4803 },
4804
592a252b 4805 /* PREFIX_VEX_0F5B */
7c52e0e8 4806 {
ec6f095a
L
4807 { "vcvtdq2ps", { XM, EXx }, 0 },
4808 { "vcvttps2dq", { XM, EXx }, 0 },
4809 { "vcvtps2dq", { XM, EXx }, 0 },
7c52e0e8
L
4810 },
4811
592a252b 4812 /* PREFIX_VEX_0F5C */
7c52e0e8 4813 {
ec6f095a
L
4814 { "vsubps", { XM, Vex, EXx }, 0 },
4815 { "vsubss", { XMScalar, VexScalar, EXdScalar }, 0 },
4816 { "vsubpd", { XM, Vex, EXx }, 0 },
4817 { "vsubsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4818 },
4819
592a252b 4820 /* PREFIX_VEX_0F5D */
7c52e0e8 4821 {
ec6f095a
L
4822 { "vminps", { XM, Vex, EXx }, 0 },
4823 { "vminss", { XMScalar, VexScalar, EXdScalar }, 0 },
4824 { "vminpd", { XM, Vex, EXx }, 0 },
4825 { "vminsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4826 },
4827
592a252b 4828 /* PREFIX_VEX_0F5E */
7c52e0e8 4829 {
ec6f095a
L
4830 { "vdivps", { XM, Vex, EXx }, 0 },
4831 { "vdivss", { XMScalar, VexScalar, EXdScalar }, 0 },
4832 { "vdivpd", { XM, Vex, EXx }, 0 },
4833 { "vdivsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4834 },
4835
592a252b 4836 /* PREFIX_VEX_0F5F */
7c52e0e8 4837 {
ec6f095a
L
4838 { "vmaxps", { XM, Vex, EXx }, 0 },
4839 { "vmaxss", { XMScalar, VexScalar, EXdScalar }, 0 },
4840 { "vmaxpd", { XM, Vex, EXx }, 0 },
4841 { "vmaxsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4842 },
4843
592a252b 4844 /* PREFIX_VEX_0F60 */
7c52e0e8 4845 {
592d1631
L
4846 { Bad_Opcode },
4847 { Bad_Opcode },
ec6f095a 4848 { "vpunpcklbw", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4849 },
4850
592a252b 4851 /* PREFIX_VEX_0F61 */
7c52e0e8 4852 {
592d1631
L
4853 { Bad_Opcode },
4854 { Bad_Opcode },
ec6f095a 4855 { "vpunpcklwd", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4856 },
4857
592a252b 4858 /* PREFIX_VEX_0F62 */
7c52e0e8 4859 {
592d1631
L
4860 { Bad_Opcode },
4861 { Bad_Opcode },
ec6f095a 4862 { "vpunpckldq", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4863 },
4864
592a252b 4865 /* PREFIX_VEX_0F63 */
7c52e0e8 4866 {
592d1631
L
4867 { Bad_Opcode },
4868 { Bad_Opcode },
ec6f095a 4869 { "vpacksswb", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4870 },
4871
592a252b 4872 /* PREFIX_VEX_0F64 */
7c52e0e8 4873 {
592d1631
L
4874 { Bad_Opcode },
4875 { Bad_Opcode },
ec6f095a 4876 { "vpcmpgtb", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4877 },
4878
592a252b 4879 /* PREFIX_VEX_0F65 */
7c52e0e8 4880 {
592d1631
L
4881 { Bad_Opcode },
4882 { Bad_Opcode },
ec6f095a 4883 { "vpcmpgtw", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4884 },
4885
592a252b 4886 /* PREFIX_VEX_0F66 */
7c52e0e8 4887 {
592d1631
L
4888 { Bad_Opcode },
4889 { Bad_Opcode },
ec6f095a 4890 { "vpcmpgtd", { XM, Vex, EXx }, 0 },
7c52e0e8 4891 },
6439fc28 4892
592a252b 4893 /* PREFIX_VEX_0F67 */
331d2d0d 4894 {
592d1631
L
4895 { Bad_Opcode },
4896 { Bad_Opcode },
ec6f095a 4897 { "vpackuswb", { XM, Vex, EXx }, 0 },
c0f3af97
L
4898 },
4899
592a252b 4900 /* PREFIX_VEX_0F68 */
c0f3af97 4901 {
592d1631
L
4902 { Bad_Opcode },
4903 { Bad_Opcode },
ec6f095a 4904 { "vpunpckhbw", { XM, Vex, EXx }, 0 },
c0f3af97
L
4905 },
4906
592a252b 4907 /* PREFIX_VEX_0F69 */
c0f3af97 4908 {
592d1631
L
4909 { Bad_Opcode },
4910 { Bad_Opcode },
ec6f095a 4911 { "vpunpckhwd", { XM, Vex, EXx }, 0 },
c0f3af97
L
4912 },
4913
592a252b 4914 /* PREFIX_VEX_0F6A */
c0f3af97 4915 {
592d1631
L
4916 { Bad_Opcode },
4917 { Bad_Opcode },
ec6f095a 4918 { "vpunpckhdq", { XM, Vex, EXx }, 0 },
c0f3af97
L
4919 },
4920
592a252b 4921 /* PREFIX_VEX_0F6B */
c0f3af97 4922 {
592d1631
L
4923 { Bad_Opcode },
4924 { Bad_Opcode },
ec6f095a 4925 { "vpackssdw", { XM, Vex, EXx }, 0 },
c0f3af97
L
4926 },
4927
592a252b 4928 /* PREFIX_VEX_0F6C */
c0f3af97 4929 {
592d1631
L
4930 { Bad_Opcode },
4931 { Bad_Opcode },
ec6f095a 4932 { "vpunpcklqdq", { XM, Vex, EXx }, 0 },
c0f3af97
L
4933 },
4934
592a252b 4935 /* PREFIX_VEX_0F6D */
c0f3af97 4936 {
592d1631
L
4937 { Bad_Opcode },
4938 { Bad_Opcode },
ec6f095a 4939 { "vpunpckhqdq", { XM, Vex, EXx }, 0 },
c0f3af97
L
4940 },
4941
592a252b 4942 /* PREFIX_VEX_0F6E */
c0f3af97 4943 {
592d1631
L
4944 { Bad_Opcode },
4945 { Bad_Opcode },
592a252b 4946 { VEX_LEN_TABLE (VEX_LEN_0F6E_P_2) },
c0f3af97
L
4947 },
4948
592a252b 4949 /* PREFIX_VEX_0F6F */
c0f3af97 4950 {
592d1631 4951 { Bad_Opcode },
ec6f095a
L
4952 { "vmovdqu", { XM, EXx }, 0 },
4953 { "vmovdqa", { XM, EXx }, 0 },
c0f3af97
L
4954 },
4955
592a252b 4956 /* PREFIX_VEX_0F70 */
c0f3af97 4957 {
592d1631 4958 { Bad_Opcode },
ec6f095a
L
4959 { "vpshufhw", { XM, EXx, Ib }, 0 },
4960 { "vpshufd", { XM, EXx, Ib }, 0 },
4961 { "vpshuflw", { XM, EXx, Ib }, 0 },
c0f3af97
L
4962 },
4963
592a252b 4964 /* PREFIX_VEX_0F71_REG_2 */
c0f3af97 4965 {
592d1631
L
4966 { Bad_Opcode },
4967 { Bad_Opcode },
ec6f095a 4968 { "vpsrlw", { Vex, XS, Ib }, 0 },
c0f3af97
L
4969 },
4970
592a252b 4971 /* PREFIX_VEX_0F71_REG_4 */
c0f3af97 4972 {
592d1631
L
4973 { Bad_Opcode },
4974 { Bad_Opcode },
ec6f095a 4975 { "vpsraw", { Vex, XS, Ib }, 0 },
c0f3af97
L
4976 },
4977
592a252b 4978 /* PREFIX_VEX_0F71_REG_6 */
c0f3af97 4979 {
592d1631
L
4980 { Bad_Opcode },
4981 { Bad_Opcode },
ec6f095a 4982 { "vpsllw", { Vex, XS, Ib }, 0 },
c0f3af97
L
4983 },
4984
592a252b 4985 /* PREFIX_VEX_0F72_REG_2 */
c0f3af97 4986 {
592d1631
L
4987 { Bad_Opcode },
4988 { Bad_Opcode },
ec6f095a 4989 { "vpsrld", { Vex, XS, Ib }, 0 },
c0f3af97
L
4990 },
4991
592a252b 4992 /* PREFIX_VEX_0F72_REG_4 */
c0f3af97 4993 {
592d1631
L
4994 { Bad_Opcode },
4995 { Bad_Opcode },
ec6f095a 4996 { "vpsrad", { Vex, XS, Ib }, 0 },
c0f3af97
L
4997 },
4998
592a252b 4999 /* PREFIX_VEX_0F72_REG_6 */
c0f3af97 5000 {
592d1631
L
5001 { Bad_Opcode },
5002 { Bad_Opcode },
ec6f095a 5003 { "vpslld", { Vex, XS, Ib }, 0 },
c0f3af97
L
5004 },
5005
592a252b 5006 /* PREFIX_VEX_0F73_REG_2 */
c0f3af97 5007 {
592d1631
L
5008 { Bad_Opcode },
5009 { Bad_Opcode },
ec6f095a 5010 { "vpsrlq", { Vex, XS, Ib }, 0 },
c0f3af97
L
5011 },
5012
592a252b 5013 /* PREFIX_VEX_0F73_REG_3 */
c0f3af97 5014 {
592d1631
L
5015 { Bad_Opcode },
5016 { Bad_Opcode },
ec6f095a 5017 { "vpsrldq", { Vex, XS, Ib }, 0 },
c0f3af97
L
5018 },
5019
592a252b 5020 /* PREFIX_VEX_0F73_REG_6 */
c0f3af97 5021 {
592d1631
L
5022 { Bad_Opcode },
5023 { Bad_Opcode },
ec6f095a 5024 { "vpsllq", { Vex, XS, Ib }, 0 },
c0f3af97
L
5025 },
5026
592a252b 5027 /* PREFIX_VEX_0F73_REG_7 */
c0f3af97 5028 {
592d1631
L
5029 { Bad_Opcode },
5030 { Bad_Opcode },
ec6f095a 5031 { "vpslldq", { Vex, XS, Ib }, 0 },
c0f3af97
L
5032 },
5033
592a252b 5034 /* PREFIX_VEX_0F74 */
c0f3af97 5035 {
592d1631
L
5036 { Bad_Opcode },
5037 { Bad_Opcode },
ec6f095a 5038 { "vpcmpeqb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5039 },
5040
592a252b 5041 /* PREFIX_VEX_0F75 */
c0f3af97 5042 {
592d1631
L
5043 { Bad_Opcode },
5044 { Bad_Opcode },
ec6f095a 5045 { "vpcmpeqw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5046 },
5047
592a252b 5048 /* PREFIX_VEX_0F76 */
c0f3af97 5049 {
592d1631
L
5050 { Bad_Opcode },
5051 { Bad_Opcode },
ec6f095a 5052 { "vpcmpeqd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5053 },
5054
592a252b 5055 /* PREFIX_VEX_0F77 */
c0f3af97 5056 {
ec6f095a 5057 { VEX_LEN_TABLE (VEX_LEN_0F77_P_0) },
c0f3af97
L
5058 },
5059
592a252b 5060 /* PREFIX_VEX_0F7C */
c0f3af97 5061 {
592d1631
L
5062 { Bad_Opcode },
5063 { Bad_Opcode },
ec6f095a
L
5064 { "vhaddpd", { XM, Vex, EXx }, 0 },
5065 { "vhaddps", { XM, Vex, EXx }, 0 },
c0f3af97
L
5066 },
5067
592a252b 5068 /* PREFIX_VEX_0F7D */
c0f3af97 5069 {
592d1631
L
5070 { Bad_Opcode },
5071 { Bad_Opcode },
ec6f095a
L
5072 { "vhsubpd", { XM, Vex, EXx }, 0 },
5073 { "vhsubps", { XM, Vex, EXx }, 0 },
c0f3af97
L
5074 },
5075
592a252b 5076 /* PREFIX_VEX_0F7E */
c0f3af97 5077 {
592d1631 5078 { Bad_Opcode },
592a252b
L
5079 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_1) },
5080 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_2) },
c0f3af97
L
5081 },
5082
592a252b 5083 /* PREFIX_VEX_0F7F */
c0f3af97 5084 {
592d1631 5085 { Bad_Opcode },
ec6f095a
L
5086 { "vmovdqu", { EXxS, XM }, 0 },
5087 { "vmovdqa", { EXxS, XM }, 0 },
c0f3af97
L
5088 },
5089
43234a1e
L
5090 /* PREFIX_VEX_0F90 */
5091 {
5092 { VEX_LEN_TABLE (VEX_LEN_0F90_P_0) },
1ba585e8
IT
5093 { Bad_Opcode },
5094 { VEX_LEN_TABLE (VEX_LEN_0F90_P_2) },
43234a1e
L
5095 },
5096
5097 /* PREFIX_VEX_0F91 */
5098 {
5099 { VEX_LEN_TABLE (VEX_LEN_0F91_P_0) },
1ba585e8
IT
5100 { Bad_Opcode },
5101 { VEX_LEN_TABLE (VEX_LEN_0F91_P_2) },
43234a1e
L
5102 },
5103
5104 /* PREFIX_VEX_0F92 */
5105 {
5106 { VEX_LEN_TABLE (VEX_LEN_0F92_P_0) },
1ba585e8 5107 { Bad_Opcode },
90a915bf 5108 { VEX_LEN_TABLE (VEX_LEN_0F92_P_2) },
1ba585e8 5109 { VEX_LEN_TABLE (VEX_LEN_0F92_P_3) },
43234a1e
L
5110 },
5111
5112 /* PREFIX_VEX_0F93 */
5113 {
5114 { VEX_LEN_TABLE (VEX_LEN_0F93_P_0) },
1ba585e8 5115 { Bad_Opcode },
90a915bf 5116 { VEX_LEN_TABLE (VEX_LEN_0F93_P_2) },
1ba585e8 5117 { VEX_LEN_TABLE (VEX_LEN_0F93_P_3) },
43234a1e
L
5118 },
5119
5120 /* PREFIX_VEX_0F98 */
5121 {
5122 { VEX_LEN_TABLE (VEX_LEN_0F98_P_0) },
1ba585e8
IT
5123 { Bad_Opcode },
5124 { VEX_LEN_TABLE (VEX_LEN_0F98_P_2) },
5125 },
5126
5127 /* PREFIX_VEX_0F99 */
5128 {
5129 { VEX_LEN_TABLE (VEX_LEN_0F99_P_0) },
5130 { Bad_Opcode },
5131 { VEX_LEN_TABLE (VEX_LEN_0F99_P_2) },
43234a1e
L
5132 },
5133
592a252b 5134 /* PREFIX_VEX_0FC2 */
c0f3af97 5135 {
ec6f095a
L
5136 { "vcmpps", { XM, Vex, EXx, VCMP }, 0 },
5137 { "vcmpss", { XMScalar, VexScalar, EXdScalar, VCMP }, 0 },
5138 { "vcmppd", { XM, Vex, EXx, VCMP }, 0 },
5139 { "vcmpsd", { XMScalar, VexScalar, EXqScalar, VCMP }, 0 },
c0f3af97
L
5140 },
5141
592a252b 5142 /* PREFIX_VEX_0FC4 */
c0f3af97 5143 {
592d1631
L
5144 { Bad_Opcode },
5145 { Bad_Opcode },
592a252b 5146 { VEX_LEN_TABLE (VEX_LEN_0FC4_P_2) },
c0f3af97
L
5147 },
5148
592a252b 5149 /* PREFIX_VEX_0FC5 */
c0f3af97 5150 {
592d1631
L
5151 { Bad_Opcode },
5152 { Bad_Opcode },
592a252b 5153 { VEX_LEN_TABLE (VEX_LEN_0FC5_P_2) },
c0f3af97
L
5154 },
5155
592a252b 5156 /* PREFIX_VEX_0FD0 */
c0f3af97 5157 {
592d1631
L
5158 { Bad_Opcode },
5159 { Bad_Opcode },
ec6f095a
L
5160 { "vaddsubpd", { XM, Vex, EXx }, 0 },
5161 { "vaddsubps", { XM, Vex, EXx }, 0 },
c0f3af97
L
5162 },
5163
592a252b 5164 /* PREFIX_VEX_0FD1 */
c0f3af97 5165 {
592d1631
L
5166 { Bad_Opcode },
5167 { Bad_Opcode },
ec6f095a 5168 { "vpsrlw", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5169 },
5170
592a252b 5171 /* PREFIX_VEX_0FD2 */
c0f3af97 5172 {
592d1631
L
5173 { Bad_Opcode },
5174 { Bad_Opcode },
ec6f095a 5175 { "vpsrld", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5176 },
5177
592a252b 5178 /* PREFIX_VEX_0FD3 */
c0f3af97 5179 {
592d1631
L
5180 { Bad_Opcode },
5181 { Bad_Opcode },
ec6f095a 5182 { "vpsrlq", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5183 },
5184
592a252b 5185 /* PREFIX_VEX_0FD4 */
c0f3af97 5186 {
592d1631
L
5187 { Bad_Opcode },
5188 { Bad_Opcode },
ec6f095a 5189 { "vpaddq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5190 },
5191
592a252b 5192 /* PREFIX_VEX_0FD5 */
c0f3af97 5193 {
592d1631
L
5194 { Bad_Opcode },
5195 { Bad_Opcode },
ec6f095a 5196 { "vpmullw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5197 },
5198
592a252b 5199 /* PREFIX_VEX_0FD6 */
c0f3af97 5200 {
592d1631
L
5201 { Bad_Opcode },
5202 { Bad_Opcode },
592a252b 5203 { VEX_LEN_TABLE (VEX_LEN_0FD6_P_2) },
c0f3af97
L
5204 },
5205
592a252b 5206 /* PREFIX_VEX_0FD7 */
c0f3af97 5207 {
592d1631
L
5208 { Bad_Opcode },
5209 { Bad_Opcode },
592a252b 5210 { MOD_TABLE (MOD_VEX_0FD7_PREFIX_2) },
c0f3af97
L
5211 },
5212
592a252b 5213 /* PREFIX_VEX_0FD8 */
c0f3af97 5214 {
592d1631
L
5215 { Bad_Opcode },
5216 { Bad_Opcode },
ec6f095a 5217 { "vpsubusb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5218 },
5219
592a252b 5220 /* PREFIX_VEX_0FD9 */
c0f3af97 5221 {
592d1631
L
5222 { Bad_Opcode },
5223 { Bad_Opcode },
ec6f095a 5224 { "vpsubusw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5225 },
5226
592a252b 5227 /* PREFIX_VEX_0FDA */
c0f3af97 5228 {
592d1631
L
5229 { Bad_Opcode },
5230 { Bad_Opcode },
ec6f095a 5231 { "vpminub", { XM, Vex, EXx }, 0 },
c0f3af97
L
5232 },
5233
592a252b 5234 /* PREFIX_VEX_0FDB */
c0f3af97 5235 {
592d1631
L
5236 { Bad_Opcode },
5237 { Bad_Opcode },
ec6f095a 5238 { "vpand", { XM, Vex, EXx }, 0 },
c0f3af97
L
5239 },
5240
592a252b 5241 /* PREFIX_VEX_0FDC */
c0f3af97 5242 {
592d1631
L
5243 { Bad_Opcode },
5244 { Bad_Opcode },
ec6f095a 5245 { "vpaddusb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5246 },
5247
592a252b 5248 /* PREFIX_VEX_0FDD */
c0f3af97 5249 {
592d1631
L
5250 { Bad_Opcode },
5251 { Bad_Opcode },
ec6f095a 5252 { "vpaddusw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5253 },
5254
592a252b 5255 /* PREFIX_VEX_0FDE */
c0f3af97 5256 {
592d1631
L
5257 { Bad_Opcode },
5258 { Bad_Opcode },
ec6f095a 5259 { "vpmaxub", { XM, Vex, EXx }, 0 },
c0f3af97
L
5260 },
5261
592a252b 5262 /* PREFIX_VEX_0FDF */
c0f3af97 5263 {
592d1631
L
5264 { Bad_Opcode },
5265 { Bad_Opcode },
ec6f095a 5266 { "vpandn", { XM, Vex, EXx }, 0 },
c0f3af97
L
5267 },
5268
592a252b 5269 /* PREFIX_VEX_0FE0 */
c0f3af97 5270 {
592d1631
L
5271 { Bad_Opcode },
5272 { Bad_Opcode },
ec6f095a 5273 { "vpavgb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5274 },
5275
592a252b 5276 /* PREFIX_VEX_0FE1 */
c0f3af97 5277 {
592d1631
L
5278 { Bad_Opcode },
5279 { Bad_Opcode },
ec6f095a 5280 { "vpsraw", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5281 },
5282
592a252b 5283 /* PREFIX_VEX_0FE2 */
c0f3af97 5284 {
592d1631
L
5285 { Bad_Opcode },
5286 { Bad_Opcode },
ec6f095a 5287 { "vpsrad", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5288 },
5289
592a252b 5290 /* PREFIX_VEX_0FE3 */
c0f3af97 5291 {
592d1631
L
5292 { Bad_Opcode },
5293 { Bad_Opcode },
ec6f095a 5294 { "vpavgw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5295 },
5296
592a252b 5297 /* PREFIX_VEX_0FE4 */
c0f3af97 5298 {
592d1631
L
5299 { Bad_Opcode },
5300 { Bad_Opcode },
ec6f095a 5301 { "vpmulhuw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5302 },
5303
592a252b 5304 /* PREFIX_VEX_0FE5 */
c0f3af97 5305 {
592d1631
L
5306 { Bad_Opcode },
5307 { Bad_Opcode },
ec6f095a 5308 { "vpmulhw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5309 },
5310
592a252b 5311 /* PREFIX_VEX_0FE6 */
c0f3af97 5312 {
592d1631 5313 { Bad_Opcode },
ec6f095a
L
5314 { "vcvtdq2pd", { XM, EXxmmq }, 0 },
5315 { "vcvttpd2dq%XY", { XMM, EXx }, 0 },
5316 { "vcvtpd2dq%XY", { XMM, EXx }, 0 },
c0f3af97
L
5317 },
5318
592a252b 5319 /* PREFIX_VEX_0FE7 */
c0f3af97 5320 {
592d1631
L
5321 { Bad_Opcode },
5322 { Bad_Opcode },
592a252b 5323 { MOD_TABLE (MOD_VEX_0FE7_PREFIX_2) },
c0f3af97
L
5324 },
5325
592a252b 5326 /* PREFIX_VEX_0FE8 */
c0f3af97 5327 {
592d1631
L
5328 { Bad_Opcode },
5329 { Bad_Opcode },
ec6f095a 5330 { "vpsubsb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5331 },
5332
592a252b 5333 /* PREFIX_VEX_0FE9 */
c0f3af97 5334 {
592d1631
L
5335 { Bad_Opcode },
5336 { Bad_Opcode },
ec6f095a 5337 { "vpsubsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5338 },
5339
592a252b 5340 /* PREFIX_VEX_0FEA */
c0f3af97 5341 {
592d1631
L
5342 { Bad_Opcode },
5343 { Bad_Opcode },
ec6f095a 5344 { "vpminsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5345 },
5346
592a252b 5347 /* PREFIX_VEX_0FEB */
c0f3af97 5348 {
592d1631
L
5349 { Bad_Opcode },
5350 { Bad_Opcode },
ec6f095a 5351 { "vpor", { XM, Vex, EXx }, 0 },
c0f3af97
L
5352 },
5353
592a252b 5354 /* PREFIX_VEX_0FEC */
c0f3af97 5355 {
592d1631
L
5356 { Bad_Opcode },
5357 { Bad_Opcode },
ec6f095a 5358 { "vpaddsb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5359 },
5360
592a252b 5361 /* PREFIX_VEX_0FED */
c0f3af97 5362 {
592d1631
L
5363 { Bad_Opcode },
5364 { Bad_Opcode },
ec6f095a 5365 { "vpaddsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5366 },
5367
592a252b 5368 /* PREFIX_VEX_0FEE */
c0f3af97 5369 {
592d1631
L
5370 { Bad_Opcode },
5371 { Bad_Opcode },
ec6f095a 5372 { "vpmaxsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5373 },
5374
592a252b 5375 /* PREFIX_VEX_0FEF */
c0f3af97 5376 {
592d1631
L
5377 { Bad_Opcode },
5378 { Bad_Opcode },
ec6f095a 5379 { "vpxor", { XM, Vex, EXx }, 0 },
c0f3af97
L
5380 },
5381
592a252b 5382 /* PREFIX_VEX_0FF0 */
c0f3af97 5383 {
592d1631
L
5384 { Bad_Opcode },
5385 { Bad_Opcode },
5386 { Bad_Opcode },
592a252b 5387 { MOD_TABLE (MOD_VEX_0FF0_PREFIX_3) },
c0f3af97
L
5388 },
5389
592a252b 5390 /* PREFIX_VEX_0FF1 */
c0f3af97 5391 {
592d1631
L
5392 { Bad_Opcode },
5393 { Bad_Opcode },
ec6f095a 5394 { "vpsllw", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5395 },
5396
592a252b 5397 /* PREFIX_VEX_0FF2 */
c0f3af97 5398 {
592d1631
L
5399 { Bad_Opcode },
5400 { Bad_Opcode },
ec6f095a 5401 { "vpslld", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5402 },
5403
592a252b 5404 /* PREFIX_VEX_0FF3 */
c0f3af97 5405 {
592d1631
L
5406 { Bad_Opcode },
5407 { Bad_Opcode },
ec6f095a 5408 { "vpsllq", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5409 },
5410
592a252b 5411 /* PREFIX_VEX_0FF4 */
c0f3af97 5412 {
592d1631
L
5413 { Bad_Opcode },
5414 { Bad_Opcode },
ec6f095a 5415 { "vpmuludq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5416 },
5417
592a252b 5418 /* PREFIX_VEX_0FF5 */
c0f3af97 5419 {
592d1631
L
5420 { Bad_Opcode },
5421 { Bad_Opcode },
ec6f095a 5422 { "vpmaddwd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5423 },
5424
592a252b 5425 /* PREFIX_VEX_0FF6 */
c0f3af97 5426 {
592d1631
L
5427 { Bad_Opcode },
5428 { Bad_Opcode },
ec6f095a 5429 { "vpsadbw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5430 },
5431
592a252b 5432 /* PREFIX_VEX_0FF7 */
c0f3af97 5433 {
592d1631
L
5434 { Bad_Opcode },
5435 { Bad_Opcode },
592a252b 5436 { VEX_LEN_TABLE (VEX_LEN_0FF7_P_2) },
c0f3af97
L
5437 },
5438
592a252b 5439 /* PREFIX_VEX_0FF8 */
c0f3af97 5440 {
592d1631
L
5441 { Bad_Opcode },
5442 { Bad_Opcode },
ec6f095a 5443 { "vpsubb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5444 },
5445
592a252b 5446 /* PREFIX_VEX_0FF9 */
c0f3af97 5447 {
592d1631
L
5448 { Bad_Opcode },
5449 { Bad_Opcode },
ec6f095a 5450 { "vpsubw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5451 },
5452
592a252b 5453 /* PREFIX_VEX_0FFA */
c0f3af97 5454 {
592d1631
L
5455 { Bad_Opcode },
5456 { Bad_Opcode },
ec6f095a 5457 { "vpsubd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5458 },
5459
592a252b 5460 /* PREFIX_VEX_0FFB */
c0f3af97 5461 {
592d1631
L
5462 { Bad_Opcode },
5463 { Bad_Opcode },
ec6f095a 5464 { "vpsubq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5465 },
5466
592a252b 5467 /* PREFIX_VEX_0FFC */
c0f3af97 5468 {
592d1631
L
5469 { Bad_Opcode },
5470 { Bad_Opcode },
ec6f095a 5471 { "vpaddb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5472 },
5473
592a252b 5474 /* PREFIX_VEX_0FFD */
c0f3af97 5475 {
592d1631
L
5476 { Bad_Opcode },
5477 { Bad_Opcode },
ec6f095a 5478 { "vpaddw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5479 },
5480
592a252b 5481 /* PREFIX_VEX_0FFE */
c0f3af97 5482 {
592d1631
L
5483 { Bad_Opcode },
5484 { Bad_Opcode },
ec6f095a 5485 { "vpaddd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5486 },
5487
592a252b 5488 /* PREFIX_VEX_0F3800 */
c0f3af97 5489 {
592d1631
L
5490 { Bad_Opcode },
5491 { Bad_Opcode },
ec6f095a 5492 { "vpshufb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5493 },
5494
592a252b 5495 /* PREFIX_VEX_0F3801 */
c0f3af97 5496 {
592d1631
L
5497 { Bad_Opcode },
5498 { Bad_Opcode },
ec6f095a 5499 { "vphaddw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5500 },
5501
592a252b 5502 /* PREFIX_VEX_0F3802 */
c0f3af97 5503 {
592d1631
L
5504 { Bad_Opcode },
5505 { Bad_Opcode },
ec6f095a 5506 { "vphaddd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5507 },
5508
592a252b 5509 /* PREFIX_VEX_0F3803 */
c0f3af97 5510 {
592d1631
L
5511 { Bad_Opcode },
5512 { Bad_Opcode },
ec6f095a 5513 { "vphaddsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5514 },
5515
592a252b 5516 /* PREFIX_VEX_0F3804 */
c0f3af97 5517 {
592d1631
L
5518 { Bad_Opcode },
5519 { Bad_Opcode },
ec6f095a 5520 { "vpmaddubsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5521 },
5522
592a252b 5523 /* PREFIX_VEX_0F3805 */
c0f3af97 5524 {
592d1631
L
5525 { Bad_Opcode },
5526 { Bad_Opcode },
ec6f095a 5527 { "vphsubw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5528 },
5529
592a252b 5530 /* PREFIX_VEX_0F3806 */
c0f3af97 5531 {
592d1631
L
5532 { Bad_Opcode },
5533 { Bad_Opcode },
ec6f095a 5534 { "vphsubd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5535 },
5536
592a252b 5537 /* PREFIX_VEX_0F3807 */
c0f3af97 5538 {
592d1631
L
5539 { Bad_Opcode },
5540 { Bad_Opcode },
ec6f095a 5541 { "vphsubsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5542 },
5543
592a252b 5544 /* PREFIX_VEX_0F3808 */
c0f3af97 5545 {
592d1631
L
5546 { Bad_Opcode },
5547 { Bad_Opcode },
ec6f095a 5548 { "vpsignb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5549 },
5550
592a252b 5551 /* PREFIX_VEX_0F3809 */
c0f3af97 5552 {
592d1631
L
5553 { Bad_Opcode },
5554 { Bad_Opcode },
ec6f095a 5555 { "vpsignw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5556 },
5557
592a252b 5558 /* PREFIX_VEX_0F380A */
c0f3af97 5559 {
592d1631
L
5560 { Bad_Opcode },
5561 { Bad_Opcode },
ec6f095a 5562 { "vpsignd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5563 },
5564
592a252b 5565 /* PREFIX_VEX_0F380B */
c0f3af97 5566 {
592d1631
L
5567 { Bad_Opcode },
5568 { Bad_Opcode },
ec6f095a 5569 { "vpmulhrsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5570 },
5571
592a252b 5572 /* PREFIX_VEX_0F380C */
c0f3af97 5573 {
592d1631
L
5574 { Bad_Opcode },
5575 { Bad_Opcode },
592a252b 5576 { VEX_W_TABLE (VEX_W_0F380C_P_2) },
c0f3af97
L
5577 },
5578
592a252b 5579 /* PREFIX_VEX_0F380D */
c0f3af97 5580 {
592d1631
L
5581 { Bad_Opcode },
5582 { Bad_Opcode },
592a252b 5583 { VEX_W_TABLE (VEX_W_0F380D_P_2) },
c0f3af97
L
5584 },
5585
592a252b 5586 /* PREFIX_VEX_0F380E */
c0f3af97 5587 {
592d1631
L
5588 { Bad_Opcode },
5589 { Bad_Opcode },
592a252b 5590 { VEX_W_TABLE (VEX_W_0F380E_P_2) },
c0f3af97
L
5591 },
5592
592a252b 5593 /* PREFIX_VEX_0F380F */
c0f3af97 5594 {
592d1631
L
5595 { Bad_Opcode },
5596 { Bad_Opcode },
592a252b 5597 { VEX_W_TABLE (VEX_W_0F380F_P_2) },
c0f3af97
L
5598 },
5599
592a252b 5600 /* PREFIX_VEX_0F3813 */
c7b8aa3a
L
5601 {
5602 { Bad_Opcode },
5603 { Bad_Opcode },
bf890a93 5604 { "vcvtph2ps", { XM, EXxmmq }, 0 },
c7b8aa3a
L
5605 },
5606
6c30d220
L
5607 /* PREFIX_VEX_0F3816 */
5608 {
5609 { Bad_Opcode },
5610 { Bad_Opcode },
5611 { VEX_LEN_TABLE (VEX_LEN_0F3816_P_2) },
5612 },
5613
592a252b 5614 /* PREFIX_VEX_0F3817 */
c0f3af97 5615 {
592d1631
L
5616 { Bad_Opcode },
5617 { Bad_Opcode },
ec6f095a 5618 { "vptest", { XM, EXx }, 0 },
c0f3af97
L
5619 },
5620
592a252b 5621 /* PREFIX_VEX_0F3818 */
c0f3af97 5622 {
592d1631
L
5623 { Bad_Opcode },
5624 { Bad_Opcode },
6c30d220 5625 { VEX_W_TABLE (VEX_W_0F3818_P_2) },
c0f3af97
L
5626 },
5627
592a252b 5628 /* PREFIX_VEX_0F3819 */
c0f3af97 5629 {
592d1631
L
5630 { Bad_Opcode },
5631 { Bad_Opcode },
6c30d220 5632 { VEX_LEN_TABLE (VEX_LEN_0F3819_P_2) },
c0f3af97
L
5633 },
5634
592a252b 5635 /* PREFIX_VEX_0F381A */
c0f3af97 5636 {
592d1631
L
5637 { Bad_Opcode },
5638 { Bad_Opcode },
592a252b 5639 { MOD_TABLE (MOD_VEX_0F381A_PREFIX_2) },
c0f3af97
L
5640 },
5641
592a252b 5642 /* PREFIX_VEX_0F381C */
c0f3af97 5643 {
592d1631
L
5644 { Bad_Opcode },
5645 { Bad_Opcode },
ec6f095a 5646 { "vpabsb", { XM, EXx }, 0 },
c0f3af97
L
5647 },
5648
592a252b 5649 /* PREFIX_VEX_0F381D */
c0f3af97 5650 {
592d1631
L
5651 { Bad_Opcode },
5652 { Bad_Opcode },
ec6f095a 5653 { "vpabsw", { XM, EXx }, 0 },
c0f3af97
L
5654 },
5655
592a252b 5656 /* PREFIX_VEX_0F381E */
c0f3af97 5657 {
592d1631
L
5658 { Bad_Opcode },
5659 { Bad_Opcode },
ec6f095a 5660 { "vpabsd", { XM, EXx }, 0 },
c0f3af97
L
5661 },
5662
592a252b 5663 /* PREFIX_VEX_0F3820 */
c0f3af97 5664 {
592d1631
L
5665 { Bad_Opcode },
5666 { Bad_Opcode },
ec6f095a 5667 { "vpmovsxbw", { XM, EXxmmq }, 0 },
c0f3af97
L
5668 },
5669
592a252b 5670 /* PREFIX_VEX_0F3821 */
c0f3af97 5671 {
592d1631
L
5672 { Bad_Opcode },
5673 { Bad_Opcode },
ec6f095a 5674 { "vpmovsxbd", { XM, EXxmmqd }, 0 },
c0f3af97
L
5675 },
5676
592a252b 5677 /* PREFIX_VEX_0F3822 */
c0f3af97 5678 {
592d1631
L
5679 { Bad_Opcode },
5680 { Bad_Opcode },
ec6f095a 5681 { "vpmovsxbq", { XM, EXxmmdw }, 0 },
c0f3af97
L
5682 },
5683
592a252b 5684 /* PREFIX_VEX_0F3823 */
c0f3af97 5685 {
592d1631
L
5686 { Bad_Opcode },
5687 { Bad_Opcode },
ec6f095a 5688 { "vpmovsxwd", { XM, EXxmmq }, 0 },
c0f3af97
L
5689 },
5690
592a252b 5691 /* PREFIX_VEX_0F3824 */
c0f3af97 5692 {
592d1631
L
5693 { Bad_Opcode },
5694 { Bad_Opcode },
ec6f095a 5695 { "vpmovsxwq", { XM, EXxmmqd }, 0 },
c0f3af97
L
5696 },
5697
592a252b 5698 /* PREFIX_VEX_0F3825 */
c0f3af97 5699 {
592d1631
L
5700 { Bad_Opcode },
5701 { Bad_Opcode },
ec6f095a 5702 { "vpmovsxdq", { XM, EXxmmq }, 0 },
c0f3af97
L
5703 },
5704
592a252b 5705 /* PREFIX_VEX_0F3828 */
c0f3af97 5706 {
592d1631
L
5707 { Bad_Opcode },
5708 { Bad_Opcode },
ec6f095a 5709 { "vpmuldq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5710 },
5711
592a252b 5712 /* PREFIX_VEX_0F3829 */
c0f3af97 5713 {
592d1631
L
5714 { Bad_Opcode },
5715 { Bad_Opcode },
ec6f095a 5716 { "vpcmpeqq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5717 },
5718
592a252b 5719 /* PREFIX_VEX_0F382A */
c0f3af97 5720 {
592d1631
L
5721 { Bad_Opcode },
5722 { Bad_Opcode },
592a252b 5723 { MOD_TABLE (MOD_VEX_0F382A_PREFIX_2) },
c0f3af97
L
5724 },
5725
592a252b 5726 /* PREFIX_VEX_0F382B */
c0f3af97 5727 {
592d1631
L
5728 { Bad_Opcode },
5729 { Bad_Opcode },
ec6f095a 5730 { "vpackusdw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5731 },
5732
592a252b 5733 /* PREFIX_VEX_0F382C */
c0f3af97 5734 {
592d1631
L
5735 { Bad_Opcode },
5736 { Bad_Opcode },
592a252b 5737 { MOD_TABLE (MOD_VEX_0F382C_PREFIX_2) },
c0f3af97
L
5738 },
5739
592a252b 5740 /* PREFIX_VEX_0F382D */
c0f3af97 5741 {
592d1631
L
5742 { Bad_Opcode },
5743 { Bad_Opcode },
592a252b 5744 { MOD_TABLE (MOD_VEX_0F382D_PREFIX_2) },
c0f3af97
L
5745 },
5746
592a252b 5747 /* PREFIX_VEX_0F382E */
c0f3af97 5748 {
592d1631
L
5749 { Bad_Opcode },
5750 { Bad_Opcode },
592a252b 5751 { MOD_TABLE (MOD_VEX_0F382E_PREFIX_2) },
c0f3af97
L
5752 },
5753
592a252b 5754 /* PREFIX_VEX_0F382F */
c0f3af97 5755 {
592d1631
L
5756 { Bad_Opcode },
5757 { Bad_Opcode },
592a252b 5758 { MOD_TABLE (MOD_VEX_0F382F_PREFIX_2) },
c0f3af97
L
5759 },
5760
592a252b 5761 /* PREFIX_VEX_0F3830 */
c0f3af97 5762 {
592d1631
L
5763 { Bad_Opcode },
5764 { Bad_Opcode },
ec6f095a 5765 { "vpmovzxbw", { XM, EXxmmq }, 0 },
c0f3af97
L
5766 },
5767
592a252b 5768 /* PREFIX_VEX_0F3831 */
c0f3af97 5769 {
592d1631
L
5770 { Bad_Opcode },
5771 { Bad_Opcode },
ec6f095a 5772 { "vpmovzxbd", { XM, EXxmmqd }, 0 },
c0f3af97
L
5773 },
5774
592a252b 5775 /* PREFIX_VEX_0F3832 */
c0f3af97 5776 {
592d1631
L
5777 { Bad_Opcode },
5778 { Bad_Opcode },
ec6f095a 5779 { "vpmovzxbq", { XM, EXxmmdw }, 0 },
c0f3af97
L
5780 },
5781
592a252b 5782 /* PREFIX_VEX_0F3833 */
c0f3af97 5783 {
592d1631
L
5784 { Bad_Opcode },
5785 { Bad_Opcode },
ec6f095a 5786 { "vpmovzxwd", { XM, EXxmmq }, 0 },
c0f3af97
L
5787 },
5788
592a252b 5789 /* PREFIX_VEX_0F3834 */
c0f3af97 5790 {
592d1631
L
5791 { Bad_Opcode },
5792 { Bad_Opcode },
ec6f095a 5793 { "vpmovzxwq", { XM, EXxmmqd }, 0 },
c0f3af97
L
5794 },
5795
592a252b 5796 /* PREFIX_VEX_0F3835 */
c0f3af97 5797 {
592d1631
L
5798 { Bad_Opcode },
5799 { Bad_Opcode },
ec6f095a 5800 { "vpmovzxdq", { XM, EXxmmq }, 0 },
6c30d220
L
5801 },
5802
5803 /* PREFIX_VEX_0F3836 */
5804 {
5805 { Bad_Opcode },
5806 { Bad_Opcode },
5807 { VEX_LEN_TABLE (VEX_LEN_0F3836_P_2) },
c0f3af97
L
5808 },
5809
592a252b 5810 /* PREFIX_VEX_0F3837 */
c0f3af97 5811 {
592d1631
L
5812 { Bad_Opcode },
5813 { Bad_Opcode },
ec6f095a 5814 { "vpcmpgtq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5815 },
5816
592a252b 5817 /* PREFIX_VEX_0F3838 */
c0f3af97 5818 {
592d1631
L
5819 { Bad_Opcode },
5820 { Bad_Opcode },
ec6f095a 5821 { "vpminsb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5822 },
5823
592a252b 5824 /* PREFIX_VEX_0F3839 */
c0f3af97 5825 {
592d1631
L
5826 { Bad_Opcode },
5827 { Bad_Opcode },
ec6f095a 5828 { "vpminsd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5829 },
5830
592a252b 5831 /* PREFIX_VEX_0F383A */
c0f3af97 5832 {
592d1631
L
5833 { Bad_Opcode },
5834 { Bad_Opcode },
ec6f095a 5835 { "vpminuw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5836 },
5837
592a252b 5838 /* PREFIX_VEX_0F383B */
c0f3af97 5839 {
592d1631
L
5840 { Bad_Opcode },
5841 { Bad_Opcode },
ec6f095a 5842 { "vpminud", { XM, Vex, EXx }, 0 },
c0f3af97
L
5843 },
5844
592a252b 5845 /* PREFIX_VEX_0F383C */
c0f3af97 5846 {
592d1631
L
5847 { Bad_Opcode },
5848 { Bad_Opcode },
ec6f095a 5849 { "vpmaxsb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5850 },
5851
592a252b 5852 /* PREFIX_VEX_0F383D */
c0f3af97 5853 {
592d1631
L
5854 { Bad_Opcode },
5855 { Bad_Opcode },
ec6f095a 5856 { "vpmaxsd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5857 },
5858
592a252b 5859 /* PREFIX_VEX_0F383E */
c0f3af97 5860 {
592d1631
L
5861 { Bad_Opcode },
5862 { Bad_Opcode },
ec6f095a 5863 { "vpmaxuw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5864 },
5865
592a252b 5866 /* PREFIX_VEX_0F383F */
c0f3af97 5867 {
592d1631
L
5868 { Bad_Opcode },
5869 { Bad_Opcode },
ec6f095a 5870 { "vpmaxud", { XM, Vex, EXx }, 0 },
c0f3af97
L
5871 },
5872
592a252b 5873 /* PREFIX_VEX_0F3840 */
c0f3af97 5874 {
592d1631
L
5875 { Bad_Opcode },
5876 { Bad_Opcode },
ec6f095a 5877 { "vpmulld", { XM, Vex, EXx }, 0 },
c0f3af97
L
5878 },
5879
592a252b 5880 /* PREFIX_VEX_0F3841 */
c0f3af97 5881 {
592d1631
L
5882 { Bad_Opcode },
5883 { Bad_Opcode },
592a252b 5884 { VEX_LEN_TABLE (VEX_LEN_0F3841_P_2) },
c0f3af97
L
5885 },
5886
6c30d220
L
5887 /* PREFIX_VEX_0F3845 */
5888 {
5889 { Bad_Opcode },
5890 { Bad_Opcode },
bf890a93 5891 { "vpsrlv%LW", { XM, Vex, EXx }, 0 },
6c30d220
L
5892 },
5893
5894 /* PREFIX_VEX_0F3846 */
5895 {
5896 { Bad_Opcode },
5897 { Bad_Opcode },
5898 { VEX_W_TABLE (VEX_W_0F3846_P_2) },
5899 },
5900
5901 /* PREFIX_VEX_0F3847 */
5902 {
5903 { Bad_Opcode },
5904 { Bad_Opcode },
bf890a93 5905 { "vpsllv%LW", { XM, Vex, EXx }, 0 },
6c30d220
L
5906 },
5907
5908 /* PREFIX_VEX_0F3858 */
5909 {
5910 { Bad_Opcode },
5911 { Bad_Opcode },
5912 { VEX_W_TABLE (VEX_W_0F3858_P_2) },
5913 },
5914
5915 /* PREFIX_VEX_0F3859 */
5916 {
5917 { Bad_Opcode },
5918 { Bad_Opcode },
5919 { VEX_W_TABLE (VEX_W_0F3859_P_2) },
5920 },
5921
5922 /* PREFIX_VEX_0F385A */
5923 {
5924 { Bad_Opcode },
5925 { Bad_Opcode },
5926 { MOD_TABLE (MOD_VEX_0F385A_PREFIX_2) },
5927 },
5928
5929 /* PREFIX_VEX_0F3878 */
5930 {
5931 { Bad_Opcode },
5932 { Bad_Opcode },
5933 { VEX_W_TABLE (VEX_W_0F3878_P_2) },
5934 },
5935
5936 /* PREFIX_VEX_0F3879 */
5937 {
5938 { Bad_Opcode },
5939 { Bad_Opcode },
5940 { VEX_W_TABLE (VEX_W_0F3879_P_2) },
5941 },
5942
5943 /* PREFIX_VEX_0F388C */
5944 {
5945 { Bad_Opcode },
5946 { Bad_Opcode },
f7002f42 5947 { MOD_TABLE (MOD_VEX_0F388C_PREFIX_2) },
6c30d220
L
5948 },
5949
5950 /* PREFIX_VEX_0F388E */
5951 {
5952 { Bad_Opcode },
5953 { Bad_Opcode },
f7002f42 5954 { MOD_TABLE (MOD_VEX_0F388E_PREFIX_2) },
6c30d220
L
5955 },
5956
5957 /* PREFIX_VEX_0F3890 */
5958 {
5959 { Bad_Opcode },
5960 { Bad_Opcode },
bf890a93 5961 { "vpgatherd%LW", { XM, MVexVSIBDWpX, Vex }, 0 },
6c30d220
L
5962 },
5963
5964 /* PREFIX_VEX_0F3891 */
5965 {
5966 { Bad_Opcode },
5967 { Bad_Opcode },
bf890a93 5968 { "vpgatherq%LW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ }, 0 },
6c30d220
L
5969 },
5970
5971 /* PREFIX_VEX_0F3892 */
5972 {
5973 { Bad_Opcode },
5974 { Bad_Opcode },
bf890a93 5975 { "vgatherdp%XW", { XM, MVexVSIBDWpX, Vex }, 0 },
6c30d220
L
5976 },
5977
5978 /* PREFIX_VEX_0F3893 */
5979 {
5980 { Bad_Opcode },
5981 { Bad_Opcode },
bf890a93 5982 { "vgatherqp%XW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ }, 0 },
6c30d220
L
5983 },
5984
592a252b 5985 /* PREFIX_VEX_0F3896 */
a5ff0eb2 5986 {
592d1631
L
5987 { Bad_Opcode },
5988 { Bad_Opcode },
bf890a93 5989 { "vfmaddsub132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
5990 },
5991
592a252b 5992 /* PREFIX_VEX_0F3897 */
a5ff0eb2 5993 {
592d1631
L
5994 { Bad_Opcode },
5995 { Bad_Opcode },
bf890a93 5996 { "vfmsubadd132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
5997 },
5998
592a252b 5999 /* PREFIX_VEX_0F3898 */
a5ff0eb2 6000 {
592d1631
L
6001 { Bad_Opcode },
6002 { Bad_Opcode },
bf890a93 6003 { "vfmadd132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6004 },
6005
592a252b 6006 /* PREFIX_VEX_0F3899 */
a5ff0eb2 6007 {
592d1631
L
6008 { Bad_Opcode },
6009 { Bad_Opcode },
bf890a93 6010 { "vfmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
a5ff0eb2
L
6011 },
6012
592a252b 6013 /* PREFIX_VEX_0F389A */
a5ff0eb2 6014 {
592d1631
L
6015 { Bad_Opcode },
6016 { Bad_Opcode },
bf890a93 6017 { "vfmsub132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6018 },
6019
592a252b 6020 /* PREFIX_VEX_0F389B */
c0f3af97 6021 {
592d1631
L
6022 { Bad_Opcode },
6023 { Bad_Opcode },
bf890a93 6024 { "vfmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6025 },
6026
592a252b 6027 /* PREFIX_VEX_0F389C */
c0f3af97 6028 {
592d1631
L
6029 { Bad_Opcode },
6030 { Bad_Opcode },
bf890a93 6031 { "vfnmadd132p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6032 },
6033
592a252b 6034 /* PREFIX_VEX_0F389D */
c0f3af97 6035 {
592d1631
L
6036 { Bad_Opcode },
6037 { Bad_Opcode },
bf890a93 6038 { "vfnmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6039 },
6040
592a252b 6041 /* PREFIX_VEX_0F389E */
c0f3af97 6042 {
592d1631
L
6043 { Bad_Opcode },
6044 { Bad_Opcode },
bf890a93 6045 { "vfnmsub132p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6046 },
6047
592a252b 6048 /* PREFIX_VEX_0F389F */
c0f3af97 6049 {
592d1631
L
6050 { Bad_Opcode },
6051 { Bad_Opcode },
bf890a93 6052 { "vfnmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6053 },
6054
592a252b 6055 /* PREFIX_VEX_0F38A6 */
c0f3af97 6056 {
592d1631
L
6057 { Bad_Opcode },
6058 { Bad_Opcode },
bf890a93 6059 { "vfmaddsub213p%XW", { XM, Vex, EXx }, 0 },
592d1631 6060 { Bad_Opcode },
c0f3af97
L
6061 },
6062
592a252b 6063 /* PREFIX_VEX_0F38A7 */
c0f3af97 6064 {
592d1631
L
6065 { Bad_Opcode },
6066 { Bad_Opcode },
bf890a93 6067 { "vfmsubadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6068 },
6069
592a252b 6070 /* PREFIX_VEX_0F38A8 */
c0f3af97 6071 {
592d1631
L
6072 { Bad_Opcode },
6073 { Bad_Opcode },
bf890a93 6074 { "vfmadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6075 },
6076
592a252b 6077 /* PREFIX_VEX_0F38A9 */
c0f3af97 6078 {
592d1631
L
6079 { Bad_Opcode },
6080 { Bad_Opcode },
bf890a93 6081 { "vfmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6082 },
6083
592a252b 6084 /* PREFIX_VEX_0F38AA */
c0f3af97 6085 {
592d1631
L
6086 { Bad_Opcode },
6087 { Bad_Opcode },
bf890a93 6088 { "vfmsub213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6089 },
6090
592a252b 6091 /* PREFIX_VEX_0F38AB */
c0f3af97 6092 {
592d1631
L
6093 { Bad_Opcode },
6094 { Bad_Opcode },
bf890a93 6095 { "vfmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6096 },
6097
592a252b 6098 /* PREFIX_VEX_0F38AC */
c0f3af97 6099 {
592d1631
L
6100 { Bad_Opcode },
6101 { Bad_Opcode },
bf890a93 6102 { "vfnmadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6103 },
6104
592a252b 6105 /* PREFIX_VEX_0F38AD */
c0f3af97 6106 {
592d1631
L
6107 { Bad_Opcode },
6108 { Bad_Opcode },
bf890a93 6109 { "vfnmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6110 },
6111
592a252b 6112 /* PREFIX_VEX_0F38AE */
c0f3af97 6113 {
592d1631
L
6114 { Bad_Opcode },
6115 { Bad_Opcode },
bf890a93 6116 { "vfnmsub213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6117 },
6118
592a252b 6119 /* PREFIX_VEX_0F38AF */
c0f3af97 6120 {
592d1631
L
6121 { Bad_Opcode },
6122 { Bad_Opcode },
bf890a93 6123 { "vfnmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6124 },
6125
592a252b 6126 /* PREFIX_VEX_0F38B6 */
c0f3af97 6127 {
592d1631
L
6128 { Bad_Opcode },
6129 { Bad_Opcode },
bf890a93 6130 { "vfmaddsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6131 },
6132
592a252b 6133 /* PREFIX_VEX_0F38B7 */
c0f3af97 6134 {
592d1631
L
6135 { Bad_Opcode },
6136 { Bad_Opcode },
bf890a93 6137 { "vfmsubadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6138 },
6139
592a252b 6140 /* PREFIX_VEX_0F38B8 */
c0f3af97 6141 {
592d1631
L
6142 { Bad_Opcode },
6143 { Bad_Opcode },
bf890a93 6144 { "vfmadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6145 },
6146
592a252b 6147 /* PREFIX_VEX_0F38B9 */
c0f3af97 6148 {
592d1631
L
6149 { Bad_Opcode },
6150 { Bad_Opcode },
bf890a93 6151 { "vfmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6152 },
6153
592a252b 6154 /* PREFIX_VEX_0F38BA */
c0f3af97 6155 {
592d1631
L
6156 { Bad_Opcode },
6157 { Bad_Opcode },
bf890a93 6158 { "vfmsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6159 },
6160
592a252b 6161 /* PREFIX_VEX_0F38BB */
c0f3af97 6162 {
592d1631
L
6163 { Bad_Opcode },
6164 { Bad_Opcode },
bf890a93 6165 { "vfmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6166 },
6167
592a252b 6168 /* PREFIX_VEX_0F38BC */
c0f3af97 6169 {
592d1631
L
6170 { Bad_Opcode },
6171 { Bad_Opcode },
bf890a93 6172 { "vfnmadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6173 },
6174
592a252b 6175 /* PREFIX_VEX_0F38BD */
c0f3af97 6176 {
592d1631
L
6177 { Bad_Opcode },
6178 { Bad_Opcode },
bf890a93 6179 { "vfnmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6180 },
6181
592a252b 6182 /* PREFIX_VEX_0F38BE */
c0f3af97 6183 {
592d1631
L
6184 { Bad_Opcode },
6185 { Bad_Opcode },
bf890a93 6186 { "vfnmsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6187 },
6188
592a252b 6189 /* PREFIX_VEX_0F38BF */
c0f3af97 6190 {
592d1631
L
6191 { Bad_Opcode },
6192 { Bad_Opcode },
bf890a93 6193 { "vfnmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6194 },
6195
48521003
IT
6196 /* PREFIX_VEX_0F38CF */
6197 {
6198 { Bad_Opcode },
6199 { Bad_Opcode },
6200 { VEX_W_TABLE (VEX_W_0F38CF_P_2) },
6201 },
6202
592a252b 6203 /* PREFIX_VEX_0F38DB */
c0f3af97 6204 {
592d1631
L
6205 { Bad_Opcode },
6206 { Bad_Opcode },
592a252b 6207 { VEX_LEN_TABLE (VEX_LEN_0F38DB_P_2) },
c0f3af97
L
6208 },
6209
592a252b 6210 /* PREFIX_VEX_0F38DC */
c0f3af97 6211 {
592d1631
L
6212 { Bad_Opcode },
6213 { Bad_Opcode },
8dcf1fad 6214 { "vaesenc", { XM, Vex, EXx }, 0 },
c0f3af97
L
6215 },
6216
592a252b 6217 /* PREFIX_VEX_0F38DD */
c0f3af97 6218 {
592d1631
L
6219 { Bad_Opcode },
6220 { Bad_Opcode },
8dcf1fad 6221 { "vaesenclast", { XM, Vex, EXx }, 0 },
c0f3af97
L
6222 },
6223
592a252b 6224 /* PREFIX_VEX_0F38DE */
c0f3af97 6225 {
592d1631
L
6226 { Bad_Opcode },
6227 { Bad_Opcode },
8dcf1fad 6228 { "vaesdec", { XM, Vex, EXx }, 0 },
c0f3af97
L
6229 },
6230
592a252b 6231 /* PREFIX_VEX_0F38DF */
c0f3af97 6232 {
592d1631
L
6233 { Bad_Opcode },
6234 { Bad_Opcode },
8dcf1fad 6235 { "vaesdeclast", { XM, Vex, EXx }, 0 },
c0f3af97
L
6236 },
6237
f12dc422
L
6238 /* PREFIX_VEX_0F38F2 */
6239 {
6240 { VEX_LEN_TABLE (VEX_LEN_0F38F2_P_0) },
6241 },
6242
6243 /* PREFIX_VEX_0F38F3_REG_1 */
6244 {
6245 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_1_P_0) },
6246 },
6247
6248 /* PREFIX_VEX_0F38F3_REG_2 */
6249 {
6250 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_2_P_0) },
6251 },
6252
6253 /* PREFIX_VEX_0F38F3_REG_3 */
6254 {
6255 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_3_P_0) },
6256 },
6257
6c30d220
L
6258 /* PREFIX_VEX_0F38F5 */
6259 {
6260 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_0) },
6261 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_1) },
6262 { Bad_Opcode },
6263 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_3) },
6264 },
6265
6266 /* PREFIX_VEX_0F38F6 */
6267 {
6268 { Bad_Opcode },
6269 { Bad_Opcode },
6270 { Bad_Opcode },
6271 { VEX_LEN_TABLE (VEX_LEN_0F38F6_P_3) },
6272 },
6273
f12dc422
L
6274 /* PREFIX_VEX_0F38F7 */
6275 {
6276 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_0) },
6c30d220
L
6277 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_1) },
6278 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_2) },
6279 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_3) },
6280 },
6281
6282 /* PREFIX_VEX_0F3A00 */
6283 {
6284 { Bad_Opcode },
6285 { Bad_Opcode },
6286 { VEX_LEN_TABLE (VEX_LEN_0F3A00_P_2) },
6287 },
6288
6289 /* PREFIX_VEX_0F3A01 */
6290 {
6291 { Bad_Opcode },
6292 { Bad_Opcode },
6293 { VEX_LEN_TABLE (VEX_LEN_0F3A01_P_2) },
6294 },
6295
6296 /* PREFIX_VEX_0F3A02 */
6297 {
6298 { Bad_Opcode },
6299 { Bad_Opcode },
6300 { VEX_W_TABLE (VEX_W_0F3A02_P_2) },
f12dc422
L
6301 },
6302
592a252b 6303 /* PREFIX_VEX_0F3A04 */
c0f3af97 6304 {
592d1631
L
6305 { Bad_Opcode },
6306 { Bad_Opcode },
592a252b 6307 { VEX_W_TABLE (VEX_W_0F3A04_P_2) },
c0f3af97
L
6308 },
6309
592a252b 6310 /* PREFIX_VEX_0F3A05 */
c0f3af97 6311 {
592d1631
L
6312 { Bad_Opcode },
6313 { Bad_Opcode },
592a252b 6314 { VEX_W_TABLE (VEX_W_0F3A05_P_2) },
c0f3af97
L
6315 },
6316
592a252b 6317 /* PREFIX_VEX_0F3A06 */
c0f3af97 6318 {
592d1631
L
6319 { Bad_Opcode },
6320 { Bad_Opcode },
592a252b 6321 { VEX_LEN_TABLE (VEX_LEN_0F3A06_P_2) },
c0f3af97
L
6322 },
6323
592a252b 6324 /* PREFIX_VEX_0F3A08 */
c0f3af97 6325 {
592d1631
L
6326 { Bad_Opcode },
6327 { Bad_Opcode },
ec6f095a 6328 { "vroundps", { XM, EXx, Ib }, 0 },
c0f3af97
L
6329 },
6330
592a252b 6331 /* PREFIX_VEX_0F3A09 */
c0f3af97 6332 {
592d1631
L
6333 { Bad_Opcode },
6334 { Bad_Opcode },
ec6f095a 6335 { "vroundpd", { XM, EXx, Ib }, 0 },
c0f3af97
L
6336 },
6337
592a252b 6338 /* PREFIX_VEX_0F3A0A */
c0f3af97 6339 {
592d1631
L
6340 { Bad_Opcode },
6341 { Bad_Opcode },
ec6f095a 6342 { "vroundss", { XMScalar, VexScalar, EXdScalar, Ib }, 0 },
0bfee649
L
6343 },
6344
592a252b 6345 /* PREFIX_VEX_0F3A0B */
0bfee649 6346 {
592d1631
L
6347 { Bad_Opcode },
6348 { Bad_Opcode },
ec6f095a 6349 { "vroundsd", { XMScalar, VexScalar, EXqScalar, Ib }, 0 },
0bfee649
L
6350 },
6351
592a252b 6352 /* PREFIX_VEX_0F3A0C */
0bfee649 6353 {
592d1631
L
6354 { Bad_Opcode },
6355 { Bad_Opcode },
ec6f095a 6356 { "vblendps", { XM, Vex, EXx, Ib }, 0 },
0bfee649
L
6357 },
6358
592a252b 6359 /* PREFIX_VEX_0F3A0D */
0bfee649 6360 {
592d1631
L
6361 { Bad_Opcode },
6362 { Bad_Opcode },
ec6f095a 6363 { "vblendpd", { XM, Vex, EXx, Ib }, 0 },
c0f3af97
L
6364 },
6365
592a252b 6366 /* PREFIX_VEX_0F3A0E */
0bfee649 6367 {
592d1631
L
6368 { Bad_Opcode },
6369 { Bad_Opcode },
ec6f095a 6370 { "vpblendw", { XM, Vex, EXx, Ib }, 0 },
0bfee649
L
6371 },
6372
592a252b 6373 /* PREFIX_VEX_0F3A0F */
0bfee649 6374 {
592d1631
L
6375 { Bad_Opcode },
6376 { Bad_Opcode },
ec6f095a 6377 { "vpalignr", { XM, Vex, EXx, Ib }, 0 },
0bfee649
L
6378 },
6379
592a252b 6380 /* PREFIX_VEX_0F3A14 */
0bfee649 6381 {
592d1631
L
6382 { Bad_Opcode },
6383 { Bad_Opcode },
592a252b 6384 { VEX_LEN_TABLE (VEX_LEN_0F3A14_P_2) },
0bfee649
L
6385 },
6386
592a252b 6387 /* PREFIX_VEX_0F3A15 */
0bfee649 6388 {
592d1631
L
6389 { Bad_Opcode },
6390 { Bad_Opcode },
592a252b 6391 { VEX_LEN_TABLE (VEX_LEN_0F3A15_P_2) },
0bfee649
L
6392 },
6393
592a252b 6394 /* PREFIX_VEX_0F3A16 */
c0f3af97 6395 {
592d1631
L
6396 { Bad_Opcode },
6397 { Bad_Opcode },
592a252b 6398 { VEX_LEN_TABLE (VEX_LEN_0F3A16_P_2) },
c0f3af97
L
6399 },
6400
592a252b 6401 /* PREFIX_VEX_0F3A17 */
c0f3af97 6402 {
592d1631
L
6403 { Bad_Opcode },
6404 { Bad_Opcode },
592a252b 6405 { VEX_LEN_TABLE (VEX_LEN_0F3A17_P_2) },
c0f3af97
L
6406 },
6407
592a252b 6408 /* PREFIX_VEX_0F3A18 */
c0f3af97 6409 {
592d1631
L
6410 { Bad_Opcode },
6411 { Bad_Opcode },
592a252b 6412 { VEX_LEN_TABLE (VEX_LEN_0F3A18_P_2) },
c0f3af97
L
6413 },
6414
592a252b 6415 /* PREFIX_VEX_0F3A19 */
c0f3af97 6416 {
592d1631
L
6417 { Bad_Opcode },
6418 { Bad_Opcode },
592a252b 6419 { VEX_LEN_TABLE (VEX_LEN_0F3A19_P_2) },
c0f3af97
L
6420 },
6421
592a252b 6422 /* PREFIX_VEX_0F3A1D */
c7b8aa3a
L
6423 {
6424 { Bad_Opcode },
6425 { Bad_Opcode },
bf890a93 6426 { "vcvtps2ph", { EXxmmq, XM, Ib }, 0 },
c7b8aa3a
L
6427 },
6428
592a252b 6429 /* PREFIX_VEX_0F3A20 */
c0f3af97 6430 {
592d1631
L
6431 { Bad_Opcode },
6432 { Bad_Opcode },
592a252b 6433 { VEX_LEN_TABLE (VEX_LEN_0F3A20_P_2) },
c0f3af97
L
6434 },
6435
592a252b 6436 /* PREFIX_VEX_0F3A21 */
c0f3af97 6437 {
592d1631
L
6438 { Bad_Opcode },
6439 { Bad_Opcode },
592a252b 6440 { VEX_LEN_TABLE (VEX_LEN_0F3A21_P_2) },
c0f3af97
L
6441 },
6442
592a252b 6443 /* PREFIX_VEX_0F3A22 */
0bfee649 6444 {
592d1631
L
6445 { Bad_Opcode },
6446 { Bad_Opcode },
592a252b 6447 { VEX_LEN_TABLE (VEX_LEN_0F3A22_P_2) },
0bfee649
L
6448 },
6449
43234a1e
L
6450 /* PREFIX_VEX_0F3A30 */
6451 {
6452 { Bad_Opcode },
6453 { Bad_Opcode },
6454 { VEX_LEN_TABLE (VEX_LEN_0F3A30_P_2) },
6455 },
6456
1ba585e8
IT
6457 /* PREFIX_VEX_0F3A31 */
6458 {
6459 { Bad_Opcode },
6460 { Bad_Opcode },
6461 { VEX_LEN_TABLE (VEX_LEN_0F3A31_P_2) },
6462 },
6463
43234a1e
L
6464 /* PREFIX_VEX_0F3A32 */
6465 {
6466 { Bad_Opcode },
6467 { Bad_Opcode },
6468 { VEX_LEN_TABLE (VEX_LEN_0F3A32_P_2) },
6469 },
6470
1ba585e8
IT
6471 /* PREFIX_VEX_0F3A33 */
6472 {
6473 { Bad_Opcode },
6474 { Bad_Opcode },
6475 { VEX_LEN_TABLE (VEX_LEN_0F3A33_P_2) },
6476 },
6477
6c30d220
L
6478 /* PREFIX_VEX_0F3A38 */
6479 {
6480 { Bad_Opcode },
6481 { Bad_Opcode },
6482 { VEX_LEN_TABLE (VEX_LEN_0F3A38_P_2) },
6483 },
6484
6485 /* PREFIX_VEX_0F3A39 */
6486 {
6487 { Bad_Opcode },
6488 { Bad_Opcode },
6489 { VEX_LEN_TABLE (VEX_LEN_0F3A39_P_2) },
6490 },
6491
592a252b 6492 /* PREFIX_VEX_0F3A40 */
c0f3af97 6493 {
592d1631
L
6494 { Bad_Opcode },
6495 { Bad_Opcode },
ec6f095a 6496 { "vdpps", { XM, Vex, EXx, Ib }, 0 },
c0f3af97
L
6497 },
6498
592a252b 6499 /* PREFIX_VEX_0F3A41 */
c0f3af97 6500 {
592d1631
L
6501 { Bad_Opcode },
6502 { Bad_Opcode },
592a252b 6503 { VEX_LEN_TABLE (VEX_LEN_0F3A41_P_2) },
c0f3af97
L
6504 },
6505
592a252b 6506 /* PREFIX_VEX_0F3A42 */
c0f3af97 6507 {
592d1631
L
6508 { Bad_Opcode },
6509 { Bad_Opcode },
ec6f095a 6510 { "vmpsadbw", { XM, Vex, EXx, Ib }, 0 },
c0f3af97
L
6511 },
6512
592a252b 6513 /* PREFIX_VEX_0F3A44 */
ce2f5b3c 6514 {
592d1631
L
6515 { Bad_Opcode },
6516 { Bad_Opcode },
ff1982d5 6517 { "vpclmulqdq", { XM, Vex, EXx, PCLMUL }, 0 },
ce2f5b3c
L
6518 },
6519
6c30d220
L
6520 /* PREFIX_VEX_0F3A46 */
6521 {
6522 { Bad_Opcode },
6523 { Bad_Opcode },
6524 { VEX_LEN_TABLE (VEX_LEN_0F3A46_P_2) },
6525 },
6526
592a252b 6527 /* PREFIX_VEX_0F3A48 */
a683cc34
SP
6528 {
6529 { Bad_Opcode },
6530 { Bad_Opcode },
592a252b 6531 { VEX_W_TABLE (VEX_W_0F3A48_P_2) },
a683cc34
SP
6532 },
6533
592a252b 6534 /* PREFIX_VEX_0F3A49 */
a683cc34
SP
6535 {
6536 { Bad_Opcode },
6537 { Bad_Opcode },
592a252b 6538 { VEX_W_TABLE (VEX_W_0F3A49_P_2) },
a683cc34
SP
6539 },
6540
592a252b 6541 /* PREFIX_VEX_0F3A4A */
c0f3af97 6542 {
592d1631
L
6543 { Bad_Opcode },
6544 { Bad_Opcode },
592a252b 6545 { VEX_W_TABLE (VEX_W_0F3A4A_P_2) },
c0f3af97
L
6546 },
6547
592a252b 6548 /* PREFIX_VEX_0F3A4B */
c0f3af97 6549 {
592d1631
L
6550 { Bad_Opcode },
6551 { Bad_Opcode },
592a252b 6552 { VEX_W_TABLE (VEX_W_0F3A4B_P_2) },
c0f3af97
L
6553 },
6554
592a252b 6555 /* PREFIX_VEX_0F3A4C */
c0f3af97 6556 {
592d1631
L
6557 { Bad_Opcode },
6558 { Bad_Opcode },
6c30d220 6559 { VEX_W_TABLE (VEX_W_0F3A4C_P_2) },
c0f3af97
L
6560 },
6561
592a252b 6562 /* PREFIX_VEX_0F3A5C */
922d8de8 6563 {
592d1631
L
6564 { Bad_Opcode },
6565 { Bad_Opcode },
3a2430e0 6566 { "vfmaddsubps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6567 },
6568
592a252b 6569 /* PREFIX_VEX_0F3A5D */
922d8de8 6570 {
592d1631
L
6571 { Bad_Opcode },
6572 { Bad_Opcode },
3a2430e0 6573 { "vfmaddsubpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6574 },
6575
592a252b 6576 /* PREFIX_VEX_0F3A5E */
922d8de8 6577 {
592d1631
L
6578 { Bad_Opcode },
6579 { Bad_Opcode },
3a2430e0 6580 { "vfmsubaddps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6581 },
6582
592a252b 6583 /* PREFIX_VEX_0F3A5F */
922d8de8 6584 {
592d1631
L
6585 { Bad_Opcode },
6586 { Bad_Opcode },
3a2430e0 6587 { "vfmsubaddpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6588 },
6589
592a252b 6590 /* PREFIX_VEX_0F3A60 */
c0f3af97 6591 {
592d1631
L
6592 { Bad_Opcode },
6593 { Bad_Opcode },
592a252b 6594 { VEX_LEN_TABLE (VEX_LEN_0F3A60_P_2) },
592d1631 6595 { Bad_Opcode },
c0f3af97
L
6596 },
6597
592a252b 6598 /* PREFIX_VEX_0F3A61 */
c0f3af97 6599 {
592d1631
L
6600 { Bad_Opcode },
6601 { Bad_Opcode },
592a252b 6602 { VEX_LEN_TABLE (VEX_LEN_0F3A61_P_2) },
c0f3af97
L
6603 },
6604
592a252b 6605 /* PREFIX_VEX_0F3A62 */
c0f3af97 6606 {
592d1631
L
6607 { Bad_Opcode },
6608 { Bad_Opcode },
592a252b 6609 { VEX_LEN_TABLE (VEX_LEN_0F3A62_P_2) },
c0f3af97
L
6610 },
6611
592a252b 6612 /* PREFIX_VEX_0F3A63 */
c0f3af97 6613 {
592d1631
L
6614 { Bad_Opcode },
6615 { Bad_Opcode },
592a252b 6616 { VEX_LEN_TABLE (VEX_LEN_0F3A63_P_2) },
c0f3af97 6617 },
a5ff0eb2 6618
592a252b 6619 /* PREFIX_VEX_0F3A68 */
922d8de8 6620 {
592d1631
L
6621 { Bad_Opcode },
6622 { Bad_Opcode },
3a2430e0 6623 { "vfmaddps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6624 },
6625
592a252b 6626 /* PREFIX_VEX_0F3A69 */
922d8de8 6627 {
592d1631
L
6628 { Bad_Opcode },
6629 { Bad_Opcode },
3a2430e0 6630 { "vfmaddpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6631 },
6632
592a252b 6633 /* PREFIX_VEX_0F3A6A */
922d8de8 6634 {
592d1631
L
6635 { Bad_Opcode },
6636 { Bad_Opcode },
592a252b 6637 { VEX_LEN_TABLE (VEX_LEN_0F3A6A_P_2) },
922d8de8
DR
6638 },
6639
592a252b 6640 /* PREFIX_VEX_0F3A6B */
922d8de8 6641 {
592d1631
L
6642 { Bad_Opcode },
6643 { Bad_Opcode },
592a252b 6644 { VEX_LEN_TABLE (VEX_LEN_0F3A6B_P_2) },
922d8de8
DR
6645 },
6646
592a252b 6647 /* PREFIX_VEX_0F3A6C */
922d8de8 6648 {
592d1631
L
6649 { Bad_Opcode },
6650 { Bad_Opcode },
3a2430e0 6651 { "vfmsubps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6652 },
6653
592a252b 6654 /* PREFIX_VEX_0F3A6D */
922d8de8 6655 {
592d1631
L
6656 { Bad_Opcode },
6657 { Bad_Opcode },
3a2430e0 6658 { "vfmsubpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6659 },
6660
592a252b 6661 /* PREFIX_VEX_0F3A6E */
922d8de8 6662 {
592d1631
L
6663 { Bad_Opcode },
6664 { Bad_Opcode },
592a252b 6665 { VEX_LEN_TABLE (VEX_LEN_0F3A6E_P_2) },
922d8de8
DR
6666 },
6667
592a252b 6668 /* PREFIX_VEX_0F3A6F */
922d8de8 6669 {
592d1631
L
6670 { Bad_Opcode },
6671 { Bad_Opcode },
592a252b 6672 { VEX_LEN_TABLE (VEX_LEN_0F3A6F_P_2) },
922d8de8
DR
6673 },
6674
592a252b 6675 /* PREFIX_VEX_0F3A78 */
922d8de8 6676 {
592d1631
L
6677 { Bad_Opcode },
6678 { Bad_Opcode },
3a2430e0 6679 { "vfnmaddps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6680 },
6681
592a252b 6682 /* PREFIX_VEX_0F3A79 */
922d8de8 6683 {
592d1631
L
6684 { Bad_Opcode },
6685 { Bad_Opcode },
3a2430e0 6686 { "vfnmaddpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6687 },
6688
592a252b 6689 /* PREFIX_VEX_0F3A7A */
922d8de8 6690 {
592d1631
L
6691 { Bad_Opcode },
6692 { Bad_Opcode },
592a252b 6693 { VEX_LEN_TABLE (VEX_LEN_0F3A7A_P_2) },
922d8de8
DR
6694 },
6695
592a252b 6696 /* PREFIX_VEX_0F3A7B */
922d8de8 6697 {
592d1631
L
6698 { Bad_Opcode },
6699 { Bad_Opcode },
592a252b 6700 { VEX_LEN_TABLE (VEX_LEN_0F3A7B_P_2) },
922d8de8
DR
6701 },
6702
592a252b 6703 /* PREFIX_VEX_0F3A7C */
922d8de8 6704 {
592d1631
L
6705 { Bad_Opcode },
6706 { Bad_Opcode },
3a2430e0 6707 { "vfnmsubps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
592d1631 6708 { Bad_Opcode },
922d8de8
DR
6709 },
6710
592a252b 6711 /* PREFIX_VEX_0F3A7D */
922d8de8 6712 {
592d1631
L
6713 { Bad_Opcode },
6714 { Bad_Opcode },
3a2430e0 6715 { "vfnmsubpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6716 },
6717
592a252b 6718 /* PREFIX_VEX_0F3A7E */
922d8de8 6719 {
592d1631
L
6720 { Bad_Opcode },
6721 { Bad_Opcode },
592a252b 6722 { VEX_LEN_TABLE (VEX_LEN_0F3A7E_P_2) },
922d8de8
DR
6723 },
6724
592a252b 6725 /* PREFIX_VEX_0F3A7F */
922d8de8 6726 {
592d1631
L
6727 { Bad_Opcode },
6728 { Bad_Opcode },
592a252b 6729 { VEX_LEN_TABLE (VEX_LEN_0F3A7F_P_2) },
922d8de8
DR
6730 },
6731
48521003
IT
6732 /* PREFIX_VEX_0F3ACE */
6733 {
6734 { Bad_Opcode },
6735 { Bad_Opcode },
6736 { VEX_W_TABLE (VEX_W_0F3ACE_P_2) },
6737 },
6738
6739 /* PREFIX_VEX_0F3ACF */
6740 {
6741 { Bad_Opcode },
6742 { Bad_Opcode },
6743 { VEX_W_TABLE (VEX_W_0F3ACF_P_2) },
6744 },
6745
592a252b 6746 /* PREFIX_VEX_0F3ADF */
a5ff0eb2 6747 {
592d1631
L
6748 { Bad_Opcode },
6749 { Bad_Opcode },
592a252b 6750 { VEX_LEN_TABLE (VEX_LEN_0F3ADF_P_2) },
a5ff0eb2 6751 },
6c30d220
L
6752
6753 /* PREFIX_VEX_0F3AF0 */
6754 {
6755 { Bad_Opcode },
6756 { Bad_Opcode },
6757 { Bad_Opcode },
6758 { VEX_LEN_TABLE (VEX_LEN_0F3AF0_P_3) },
6759 },
43234a1e
L
6760
6761#define NEED_PREFIX_TABLE
6762#include "i386-dis-evex.h"
6763#undef NEED_PREFIX_TABLE
c0f3af97
L
6764};
6765
6766static const struct dis386 x86_64_table[][2] = {
6767 /* X86_64_06 */
6768 {
bf890a93 6769 { "pushP", { es }, 0 },
c0f3af97
L
6770 },
6771
6772 /* X86_64_07 */
6773 {
bf890a93 6774 { "popP", { es }, 0 },
c0f3af97
L
6775 },
6776
6777 /* X86_64_0D */
6778 {
bf890a93 6779 { "pushP", { cs }, 0 },
c0f3af97
L
6780 },
6781
6782 /* X86_64_16 */
6783 {
bf890a93 6784 { "pushP", { ss }, 0 },
c0f3af97
L
6785 },
6786
6787 /* X86_64_17 */
6788 {
bf890a93 6789 { "popP", { ss }, 0 },
c0f3af97
L
6790 },
6791
6792 /* X86_64_1E */
6793 {
bf890a93 6794 { "pushP", { ds }, 0 },
c0f3af97
L
6795 },
6796
6797 /* X86_64_1F */
6798 {
bf890a93 6799 { "popP", { ds }, 0 },
c0f3af97
L
6800 },
6801
6802 /* X86_64_27 */
6803 {
bf890a93 6804 { "daa", { XX }, 0 },
c0f3af97
L
6805 },
6806
6807 /* X86_64_2F */
6808 {
bf890a93 6809 { "das", { XX }, 0 },
c0f3af97
L
6810 },
6811
6812 /* X86_64_37 */
6813 {
bf890a93 6814 { "aaa", { XX }, 0 },
c0f3af97
L
6815 },
6816
6817 /* X86_64_3F */
6818 {
bf890a93 6819 { "aas", { XX }, 0 },
c0f3af97
L
6820 },
6821
6822 /* X86_64_60 */
6823 {
bf890a93 6824 { "pushaP", { XX }, 0 },
c0f3af97
L
6825 },
6826
6827 /* X86_64_61 */
6828 {
bf890a93 6829 { "popaP", { XX }, 0 },
c0f3af97
L
6830 },
6831
6832 /* X86_64_62 */
6833 {
6834 { MOD_TABLE (MOD_62_32BIT) },
43234a1e 6835 { EVEX_TABLE (EVEX_0F) },
c0f3af97
L
6836 },
6837
6838 /* X86_64_63 */
6839 {
bf890a93
IT
6840 { "arpl", { Ew, Gw }, 0 },
6841 { "movs{lq|xd}", { Gv, Ed }, 0 },
c0f3af97
L
6842 },
6843
6844 /* X86_64_6D */
6845 {
bf890a93
IT
6846 { "ins{R|}", { Yzr, indirDX }, 0 },
6847 { "ins{G|}", { Yzr, indirDX }, 0 },
c0f3af97
L
6848 },
6849
6850 /* X86_64_6F */
6851 {
bf890a93
IT
6852 { "outs{R|}", { indirDXr, Xz }, 0 },
6853 { "outs{G|}", { indirDXr, Xz }, 0 },
c0f3af97
L
6854 },
6855
d039fef3 6856 /* X86_64_82 */
8b89fe14 6857 {
de194d85 6858 /* Opcode 0x82 is an alias of opcode 0x80 in 32-bit mode. */
d039fef3 6859 { REG_TABLE (REG_80) },
8b89fe14
L
6860 },
6861
c0f3af97
L
6862 /* X86_64_9A */
6863 {
bf890a93 6864 { "Jcall{T|}", { Ap }, 0 },
c0f3af97
L
6865 },
6866
6867 /* X86_64_C4 */
6868 {
6869 { MOD_TABLE (MOD_C4_32BIT) },
6870 { VEX_C4_TABLE (VEX_0F) },
6871 },
6872
6873 /* X86_64_C5 */
6874 {
6875 { MOD_TABLE (MOD_C5_32BIT) },
6876 { VEX_C5_TABLE (VEX_0F) },
6877 },
6878
6879 /* X86_64_CE */
6880 {
bf890a93 6881 { "into", { XX }, 0 },
c0f3af97
L
6882 },
6883
6884 /* X86_64_D4 */
6885 {
bf890a93 6886 { "aam", { Ib }, 0 },
c0f3af97
L
6887 },
6888
6889 /* X86_64_D5 */
6890 {
bf890a93 6891 { "aad", { Ib }, 0 },
c0f3af97
L
6892 },
6893
a72d2af2
L
6894 /* X86_64_E8 */
6895 {
6896 { "callP", { Jv, BND }, 0 },
5db04b09 6897 { "call@", { Jv, BND }, 0 }
a72d2af2
L
6898 },
6899
6900 /* X86_64_E9 */
6901 {
6902 { "jmpP", { Jv, BND }, 0 },
5db04b09 6903 { "jmp@", { Jv, BND }, 0 }
a72d2af2
L
6904 },
6905
c0f3af97
L
6906 /* X86_64_EA */
6907 {
bf890a93 6908 { "Jjmp{T|}", { Ap }, 0 },
c0f3af97
L
6909 },
6910
6911 /* X86_64_0F01_REG_0 */
6912 {
bf890a93
IT
6913 { "sgdt{Q|IQ}", { M }, 0 },
6914 { "sgdt", { M }, 0 },
c0f3af97
L
6915 },
6916
6917 /* X86_64_0F01_REG_1 */
6918 {
bf890a93
IT
6919 { "sidt{Q|IQ}", { M }, 0 },
6920 { "sidt", { M }, 0 },
c0f3af97
L
6921 },
6922
6923 /* X86_64_0F01_REG_2 */
6924 {
bf890a93
IT
6925 { "lgdt{Q|Q}", { M }, 0 },
6926 { "lgdt", { M }, 0 },
c0f3af97
L
6927 },
6928
6929 /* X86_64_0F01_REG_3 */
6930 {
bf890a93
IT
6931 { "lidt{Q|Q}", { M }, 0 },
6932 { "lidt", { M }, 0 },
c0f3af97
L
6933 },
6934};
6935
6936static const struct dis386 three_byte_table[][256] = {
c1e679ec
DR
6937
6938 /* THREE_BYTE_0F38 */
c0f3af97
L
6939 {
6940 /* 00 */
507bd325
L
6941 { "pshufb", { MX, EM }, PREFIX_OPCODE },
6942 { "phaddw", { MX, EM }, PREFIX_OPCODE },
6943 { "phaddd", { MX, EM }, PREFIX_OPCODE },
6944 { "phaddsw", { MX, EM }, PREFIX_OPCODE },
6945 { "pmaddubsw", { MX, EM }, PREFIX_OPCODE },
6946 { "phsubw", { MX, EM }, PREFIX_OPCODE },
6947 { "phsubd", { MX, EM }, PREFIX_OPCODE },
6948 { "phsubsw", { MX, EM }, PREFIX_OPCODE },
c0f3af97 6949 /* 08 */
507bd325
L
6950 { "psignb", { MX, EM }, PREFIX_OPCODE },
6951 { "psignw", { MX, EM }, PREFIX_OPCODE },
6952 { "psignd", { MX, EM }, PREFIX_OPCODE },
6953 { "pmulhrsw", { MX, EM }, PREFIX_OPCODE },
592d1631
L
6954 { Bad_Opcode },
6955 { Bad_Opcode },
6956 { Bad_Opcode },
6957 { Bad_Opcode },
f88c9eb0
SP
6958 /* 10 */
6959 { PREFIX_TABLE (PREFIX_0F3810) },
592d1631
L
6960 { Bad_Opcode },
6961 { Bad_Opcode },
6962 { Bad_Opcode },
f88c9eb0
SP
6963 { PREFIX_TABLE (PREFIX_0F3814) },
6964 { PREFIX_TABLE (PREFIX_0F3815) },
592d1631 6965 { Bad_Opcode },
f88c9eb0
SP
6966 { PREFIX_TABLE (PREFIX_0F3817) },
6967 /* 18 */
592d1631
L
6968 { Bad_Opcode },
6969 { Bad_Opcode },
6970 { Bad_Opcode },
6971 { Bad_Opcode },
507bd325
L
6972 { "pabsb", { MX, EM }, PREFIX_OPCODE },
6973 { "pabsw", { MX, EM }, PREFIX_OPCODE },
6974 { "pabsd", { MX, EM }, PREFIX_OPCODE },
592d1631 6975 { Bad_Opcode },
f88c9eb0
SP
6976 /* 20 */
6977 { PREFIX_TABLE (PREFIX_0F3820) },
6978 { PREFIX_TABLE (PREFIX_0F3821) },
6979 { PREFIX_TABLE (PREFIX_0F3822) },
6980 { PREFIX_TABLE (PREFIX_0F3823) },
6981 { PREFIX_TABLE (PREFIX_0F3824) },
6982 { PREFIX_TABLE (PREFIX_0F3825) },
592d1631
L
6983 { Bad_Opcode },
6984 { Bad_Opcode },
f88c9eb0
SP
6985 /* 28 */
6986 { PREFIX_TABLE (PREFIX_0F3828) },
6987 { PREFIX_TABLE (PREFIX_0F3829) },
6988 { PREFIX_TABLE (PREFIX_0F382A) },
6989 { PREFIX_TABLE (PREFIX_0F382B) },
592d1631
L
6990 { Bad_Opcode },
6991 { Bad_Opcode },
6992 { Bad_Opcode },
6993 { Bad_Opcode },
f88c9eb0
SP
6994 /* 30 */
6995 { PREFIX_TABLE (PREFIX_0F3830) },
6996 { PREFIX_TABLE (PREFIX_0F3831) },
6997 { PREFIX_TABLE (PREFIX_0F3832) },
6998 { PREFIX_TABLE (PREFIX_0F3833) },
6999 { PREFIX_TABLE (PREFIX_0F3834) },
7000 { PREFIX_TABLE (PREFIX_0F3835) },
592d1631 7001 { Bad_Opcode },
f88c9eb0
SP
7002 { PREFIX_TABLE (PREFIX_0F3837) },
7003 /* 38 */
7004 { PREFIX_TABLE (PREFIX_0F3838) },
7005 { PREFIX_TABLE (PREFIX_0F3839) },
7006 { PREFIX_TABLE (PREFIX_0F383A) },
7007 { PREFIX_TABLE (PREFIX_0F383B) },
7008 { PREFIX_TABLE (PREFIX_0F383C) },
7009 { PREFIX_TABLE (PREFIX_0F383D) },
7010 { PREFIX_TABLE (PREFIX_0F383E) },
7011 { PREFIX_TABLE (PREFIX_0F383F) },
7012 /* 40 */
7013 { PREFIX_TABLE (PREFIX_0F3840) },
7014 { PREFIX_TABLE (PREFIX_0F3841) },
592d1631
L
7015 { Bad_Opcode },
7016 { Bad_Opcode },
7017 { Bad_Opcode },
7018 { Bad_Opcode },
7019 { Bad_Opcode },
7020 { Bad_Opcode },
f88c9eb0 7021 /* 48 */
592d1631
L
7022 { Bad_Opcode },
7023 { Bad_Opcode },
7024 { Bad_Opcode },
7025 { Bad_Opcode },
7026 { Bad_Opcode },
7027 { Bad_Opcode },
7028 { Bad_Opcode },
7029 { Bad_Opcode },
f88c9eb0 7030 /* 50 */
592d1631
L
7031 { Bad_Opcode },
7032 { Bad_Opcode },
7033 { Bad_Opcode },
7034 { Bad_Opcode },
7035 { Bad_Opcode },
7036 { Bad_Opcode },
7037 { Bad_Opcode },
7038 { Bad_Opcode },
f88c9eb0 7039 /* 58 */
592d1631
L
7040 { Bad_Opcode },
7041 { Bad_Opcode },
7042 { Bad_Opcode },
7043 { Bad_Opcode },
7044 { Bad_Opcode },
7045 { Bad_Opcode },
7046 { Bad_Opcode },
7047 { Bad_Opcode },
f88c9eb0 7048 /* 60 */
592d1631
L
7049 { Bad_Opcode },
7050 { Bad_Opcode },
7051 { Bad_Opcode },
7052 { Bad_Opcode },
7053 { Bad_Opcode },
7054 { Bad_Opcode },
7055 { Bad_Opcode },
7056 { Bad_Opcode },
f88c9eb0 7057 /* 68 */
592d1631
L
7058 { Bad_Opcode },
7059 { Bad_Opcode },
7060 { Bad_Opcode },
7061 { Bad_Opcode },
7062 { Bad_Opcode },
7063 { Bad_Opcode },
7064 { Bad_Opcode },
7065 { Bad_Opcode },
f88c9eb0 7066 /* 70 */
592d1631
L
7067 { Bad_Opcode },
7068 { Bad_Opcode },
7069 { Bad_Opcode },
7070 { Bad_Opcode },
7071 { Bad_Opcode },
7072 { Bad_Opcode },
7073 { Bad_Opcode },
7074 { Bad_Opcode },
f88c9eb0 7075 /* 78 */
592d1631
L
7076 { Bad_Opcode },
7077 { Bad_Opcode },
7078 { Bad_Opcode },
7079 { Bad_Opcode },
7080 { Bad_Opcode },
7081 { Bad_Opcode },
7082 { Bad_Opcode },
7083 { Bad_Opcode },
f88c9eb0
SP
7084 /* 80 */
7085 { PREFIX_TABLE (PREFIX_0F3880) },
7086 { PREFIX_TABLE (PREFIX_0F3881) },
6c30d220 7087 { PREFIX_TABLE (PREFIX_0F3882) },
592d1631
L
7088 { Bad_Opcode },
7089 { Bad_Opcode },
7090 { Bad_Opcode },
7091 { Bad_Opcode },
7092 { Bad_Opcode },
f88c9eb0 7093 /* 88 */
592d1631
L
7094 { Bad_Opcode },
7095 { Bad_Opcode },
7096 { Bad_Opcode },
7097 { Bad_Opcode },
7098 { Bad_Opcode },
7099 { Bad_Opcode },
7100 { Bad_Opcode },
7101 { Bad_Opcode },
f88c9eb0 7102 /* 90 */
592d1631
L
7103 { Bad_Opcode },
7104 { Bad_Opcode },
7105 { Bad_Opcode },
7106 { Bad_Opcode },
7107 { Bad_Opcode },
7108 { Bad_Opcode },
7109 { Bad_Opcode },
7110 { Bad_Opcode },
f88c9eb0 7111 /* 98 */
592d1631
L
7112 { Bad_Opcode },
7113 { Bad_Opcode },
7114 { Bad_Opcode },
7115 { Bad_Opcode },
7116 { Bad_Opcode },
7117 { Bad_Opcode },
7118 { Bad_Opcode },
7119 { Bad_Opcode },
f88c9eb0 7120 /* a0 */
592d1631
L
7121 { Bad_Opcode },
7122 { Bad_Opcode },
7123 { Bad_Opcode },
7124 { Bad_Opcode },
7125 { Bad_Opcode },
7126 { Bad_Opcode },
7127 { Bad_Opcode },
7128 { Bad_Opcode },
f88c9eb0 7129 /* a8 */
592d1631
L
7130 { Bad_Opcode },
7131 { Bad_Opcode },
7132 { Bad_Opcode },
7133 { Bad_Opcode },
7134 { Bad_Opcode },
7135 { Bad_Opcode },
7136 { Bad_Opcode },
7137 { Bad_Opcode },
f88c9eb0 7138 /* b0 */
592d1631
L
7139 { Bad_Opcode },
7140 { Bad_Opcode },
7141 { Bad_Opcode },
7142 { Bad_Opcode },
7143 { Bad_Opcode },
7144 { Bad_Opcode },
7145 { Bad_Opcode },
7146 { Bad_Opcode },
f88c9eb0 7147 /* b8 */
592d1631
L
7148 { Bad_Opcode },
7149 { Bad_Opcode },
7150 { Bad_Opcode },
7151 { Bad_Opcode },
7152 { Bad_Opcode },
7153 { Bad_Opcode },
7154 { Bad_Opcode },
7155 { Bad_Opcode },
f88c9eb0 7156 /* c0 */
592d1631
L
7157 { Bad_Opcode },
7158 { Bad_Opcode },
7159 { Bad_Opcode },
7160 { Bad_Opcode },
7161 { Bad_Opcode },
7162 { Bad_Opcode },
7163 { Bad_Opcode },
7164 { Bad_Opcode },
f88c9eb0 7165 /* c8 */
a0046408
L
7166 { PREFIX_TABLE (PREFIX_0F38C8) },
7167 { PREFIX_TABLE (PREFIX_0F38C9) },
7168 { PREFIX_TABLE (PREFIX_0F38CA) },
7169 { PREFIX_TABLE (PREFIX_0F38CB) },
7170 { PREFIX_TABLE (PREFIX_0F38CC) },
7171 { PREFIX_TABLE (PREFIX_0F38CD) },
592d1631 7172 { Bad_Opcode },
48521003 7173 { PREFIX_TABLE (PREFIX_0F38CF) },
f88c9eb0 7174 /* d0 */
592d1631
L
7175 { Bad_Opcode },
7176 { Bad_Opcode },
7177 { Bad_Opcode },
7178 { Bad_Opcode },
7179 { Bad_Opcode },
7180 { Bad_Opcode },
7181 { Bad_Opcode },
7182 { Bad_Opcode },
f88c9eb0 7183 /* d8 */
592d1631
L
7184 { Bad_Opcode },
7185 { Bad_Opcode },
7186 { Bad_Opcode },
f88c9eb0
SP
7187 { PREFIX_TABLE (PREFIX_0F38DB) },
7188 { PREFIX_TABLE (PREFIX_0F38DC) },
7189 { PREFIX_TABLE (PREFIX_0F38DD) },
7190 { PREFIX_TABLE (PREFIX_0F38DE) },
7191 { PREFIX_TABLE (PREFIX_0F38DF) },
7192 /* e0 */
592d1631
L
7193 { Bad_Opcode },
7194 { Bad_Opcode },
7195 { Bad_Opcode },
7196 { Bad_Opcode },
7197 { Bad_Opcode },
7198 { Bad_Opcode },
7199 { Bad_Opcode },
7200 { Bad_Opcode },
f88c9eb0 7201 /* e8 */
592d1631
L
7202 { Bad_Opcode },
7203 { Bad_Opcode },
7204 { Bad_Opcode },
7205 { Bad_Opcode },
7206 { Bad_Opcode },
7207 { Bad_Opcode },
7208 { Bad_Opcode },
7209 { Bad_Opcode },
f88c9eb0
SP
7210 /* f0 */
7211 { PREFIX_TABLE (PREFIX_0F38F0) },
7212 { PREFIX_TABLE (PREFIX_0F38F1) },
592d1631
L
7213 { Bad_Opcode },
7214 { Bad_Opcode },
7215 { Bad_Opcode },
603555e5 7216 { PREFIX_TABLE (PREFIX_0F38F5) },
e2e1fcde 7217 { PREFIX_TABLE (PREFIX_0F38F6) },
592d1631 7218 { Bad_Opcode },
f88c9eb0 7219 /* f8 */
c0a30a9f
L
7220 { PREFIX_TABLE (PREFIX_0F38F8) },
7221 { PREFIX_TABLE (PREFIX_0F38F9) },
592d1631
L
7222 { Bad_Opcode },
7223 { Bad_Opcode },
7224 { Bad_Opcode },
7225 { Bad_Opcode },
7226 { Bad_Opcode },
7227 { Bad_Opcode },
f88c9eb0
SP
7228 },
7229 /* THREE_BYTE_0F3A */
7230 {
7231 /* 00 */
592d1631
L
7232 { Bad_Opcode },
7233 { Bad_Opcode },
7234 { Bad_Opcode },
7235 { Bad_Opcode },
7236 { Bad_Opcode },
7237 { Bad_Opcode },
7238 { Bad_Opcode },
7239 { Bad_Opcode },
f88c9eb0
SP
7240 /* 08 */
7241 { PREFIX_TABLE (PREFIX_0F3A08) },
7242 { PREFIX_TABLE (PREFIX_0F3A09) },
7243 { PREFIX_TABLE (PREFIX_0F3A0A) },
7244 { PREFIX_TABLE (PREFIX_0F3A0B) },
7245 { PREFIX_TABLE (PREFIX_0F3A0C) },
7246 { PREFIX_TABLE (PREFIX_0F3A0D) },
7247 { PREFIX_TABLE (PREFIX_0F3A0E) },
507bd325 7248 { "palignr", { MX, EM, Ib }, PREFIX_OPCODE },
f88c9eb0 7249 /* 10 */
592d1631
L
7250 { Bad_Opcode },
7251 { Bad_Opcode },
7252 { Bad_Opcode },
7253 { Bad_Opcode },
f88c9eb0
SP
7254 { PREFIX_TABLE (PREFIX_0F3A14) },
7255 { PREFIX_TABLE (PREFIX_0F3A15) },
7256 { PREFIX_TABLE (PREFIX_0F3A16) },
7257 { PREFIX_TABLE (PREFIX_0F3A17) },
7258 /* 18 */
592d1631
L
7259 { Bad_Opcode },
7260 { Bad_Opcode },
7261 { Bad_Opcode },
7262 { Bad_Opcode },
7263 { Bad_Opcode },
7264 { Bad_Opcode },
7265 { Bad_Opcode },
7266 { Bad_Opcode },
f88c9eb0
SP
7267 /* 20 */
7268 { PREFIX_TABLE (PREFIX_0F3A20) },
7269 { PREFIX_TABLE (PREFIX_0F3A21) },
7270 { PREFIX_TABLE (PREFIX_0F3A22) },
592d1631
L
7271 { Bad_Opcode },
7272 { Bad_Opcode },
7273 { Bad_Opcode },
7274 { Bad_Opcode },
7275 { Bad_Opcode },
f88c9eb0 7276 /* 28 */
592d1631
L
7277 { Bad_Opcode },
7278 { Bad_Opcode },
7279 { Bad_Opcode },
7280 { Bad_Opcode },
7281 { Bad_Opcode },
7282 { Bad_Opcode },
7283 { Bad_Opcode },
7284 { Bad_Opcode },
f88c9eb0 7285 /* 30 */
592d1631
L
7286 { Bad_Opcode },
7287 { Bad_Opcode },
7288 { Bad_Opcode },
7289 { Bad_Opcode },
7290 { Bad_Opcode },
7291 { Bad_Opcode },
7292 { Bad_Opcode },
7293 { Bad_Opcode },
f88c9eb0 7294 /* 38 */
592d1631
L
7295 { Bad_Opcode },
7296 { Bad_Opcode },
7297 { Bad_Opcode },
7298 { Bad_Opcode },
7299 { Bad_Opcode },
7300 { Bad_Opcode },
7301 { Bad_Opcode },
7302 { Bad_Opcode },
f88c9eb0
SP
7303 /* 40 */
7304 { PREFIX_TABLE (PREFIX_0F3A40) },
7305 { PREFIX_TABLE (PREFIX_0F3A41) },
7306 { PREFIX_TABLE (PREFIX_0F3A42) },
592d1631 7307 { Bad_Opcode },
f88c9eb0 7308 { PREFIX_TABLE (PREFIX_0F3A44) },
592d1631
L
7309 { Bad_Opcode },
7310 { Bad_Opcode },
7311 { Bad_Opcode },
f88c9eb0 7312 /* 48 */
592d1631
L
7313 { Bad_Opcode },
7314 { Bad_Opcode },
7315 { Bad_Opcode },
7316 { Bad_Opcode },
7317 { Bad_Opcode },
7318 { Bad_Opcode },
7319 { Bad_Opcode },
7320 { Bad_Opcode },
f88c9eb0 7321 /* 50 */
592d1631
L
7322 { Bad_Opcode },
7323 { Bad_Opcode },
7324 { Bad_Opcode },
7325 { Bad_Opcode },
7326 { Bad_Opcode },
7327 { Bad_Opcode },
7328 { Bad_Opcode },
7329 { Bad_Opcode },
f88c9eb0 7330 /* 58 */
592d1631
L
7331 { Bad_Opcode },
7332 { Bad_Opcode },
7333 { Bad_Opcode },
7334 { Bad_Opcode },
7335 { Bad_Opcode },
7336 { Bad_Opcode },
7337 { Bad_Opcode },
7338 { Bad_Opcode },
f88c9eb0
SP
7339 /* 60 */
7340 { PREFIX_TABLE (PREFIX_0F3A60) },
7341 { PREFIX_TABLE (PREFIX_0F3A61) },
7342 { PREFIX_TABLE (PREFIX_0F3A62) },
7343 { PREFIX_TABLE (PREFIX_0F3A63) },
592d1631
L
7344 { Bad_Opcode },
7345 { Bad_Opcode },
7346 { Bad_Opcode },
7347 { Bad_Opcode },
f88c9eb0 7348 /* 68 */
592d1631
L
7349 { Bad_Opcode },
7350 { Bad_Opcode },
7351 { Bad_Opcode },
7352 { Bad_Opcode },
7353 { Bad_Opcode },
7354 { Bad_Opcode },
7355 { Bad_Opcode },
7356 { Bad_Opcode },
f88c9eb0 7357 /* 70 */
592d1631
L
7358 { Bad_Opcode },
7359 { Bad_Opcode },
7360 { Bad_Opcode },
7361 { Bad_Opcode },
7362 { Bad_Opcode },
7363 { Bad_Opcode },
7364 { Bad_Opcode },
7365 { Bad_Opcode },
f88c9eb0 7366 /* 78 */
592d1631
L
7367 { Bad_Opcode },
7368 { Bad_Opcode },
7369 { Bad_Opcode },
7370 { Bad_Opcode },
7371 { Bad_Opcode },
7372 { Bad_Opcode },
7373 { Bad_Opcode },
7374 { Bad_Opcode },
f88c9eb0 7375 /* 80 */
592d1631
L
7376 { Bad_Opcode },
7377 { Bad_Opcode },
7378 { Bad_Opcode },
7379 { Bad_Opcode },
7380 { Bad_Opcode },
7381 { Bad_Opcode },
7382 { Bad_Opcode },
7383 { Bad_Opcode },
f88c9eb0 7384 /* 88 */
592d1631
L
7385 { Bad_Opcode },
7386 { Bad_Opcode },
7387 { Bad_Opcode },
7388 { Bad_Opcode },
7389 { Bad_Opcode },
7390 { Bad_Opcode },
7391 { Bad_Opcode },
7392 { Bad_Opcode },
f88c9eb0 7393 /* 90 */
592d1631
L
7394 { Bad_Opcode },
7395 { Bad_Opcode },
7396 { Bad_Opcode },
7397 { Bad_Opcode },
7398 { Bad_Opcode },
7399 { Bad_Opcode },
7400 { Bad_Opcode },
7401 { Bad_Opcode },
f88c9eb0 7402 /* 98 */
592d1631
L
7403 { Bad_Opcode },
7404 { Bad_Opcode },
7405 { Bad_Opcode },
7406 { Bad_Opcode },
7407 { Bad_Opcode },
7408 { Bad_Opcode },
7409 { Bad_Opcode },
7410 { Bad_Opcode },
f88c9eb0 7411 /* a0 */
592d1631
L
7412 { Bad_Opcode },
7413 { Bad_Opcode },
7414 { Bad_Opcode },
7415 { Bad_Opcode },
7416 { Bad_Opcode },
7417 { Bad_Opcode },
7418 { Bad_Opcode },
7419 { Bad_Opcode },
f88c9eb0 7420 /* a8 */
592d1631
L
7421 { Bad_Opcode },
7422 { Bad_Opcode },
7423 { Bad_Opcode },
7424 { Bad_Opcode },
7425 { Bad_Opcode },
7426 { Bad_Opcode },
7427 { Bad_Opcode },
7428 { Bad_Opcode },
f88c9eb0 7429 /* b0 */
592d1631
L
7430 { Bad_Opcode },
7431 { Bad_Opcode },
7432 { Bad_Opcode },
7433 { Bad_Opcode },
7434 { Bad_Opcode },
7435 { Bad_Opcode },
7436 { Bad_Opcode },
7437 { Bad_Opcode },
f88c9eb0 7438 /* b8 */
592d1631
L
7439 { Bad_Opcode },
7440 { Bad_Opcode },
7441 { Bad_Opcode },
7442 { Bad_Opcode },
7443 { Bad_Opcode },
7444 { Bad_Opcode },
7445 { Bad_Opcode },
7446 { Bad_Opcode },
f88c9eb0 7447 /* c0 */
592d1631
L
7448 { Bad_Opcode },
7449 { Bad_Opcode },
7450 { Bad_Opcode },
7451 { Bad_Opcode },
7452 { Bad_Opcode },
7453 { Bad_Opcode },
7454 { Bad_Opcode },
7455 { Bad_Opcode },
f88c9eb0 7456 /* c8 */
592d1631
L
7457 { Bad_Opcode },
7458 { Bad_Opcode },
7459 { Bad_Opcode },
7460 { Bad_Opcode },
a0046408 7461 { PREFIX_TABLE (PREFIX_0F3ACC) },
592d1631 7462 { Bad_Opcode },
48521003
IT
7463 { PREFIX_TABLE (PREFIX_0F3ACE) },
7464 { PREFIX_TABLE (PREFIX_0F3ACF) },
f88c9eb0 7465 /* d0 */
592d1631
L
7466 { Bad_Opcode },
7467 { Bad_Opcode },
7468 { Bad_Opcode },
7469 { Bad_Opcode },
7470 { Bad_Opcode },
7471 { Bad_Opcode },
7472 { Bad_Opcode },
7473 { Bad_Opcode },
f88c9eb0 7474 /* d8 */
592d1631
L
7475 { Bad_Opcode },
7476 { Bad_Opcode },
7477 { Bad_Opcode },
7478 { Bad_Opcode },
7479 { Bad_Opcode },
7480 { Bad_Opcode },
7481 { Bad_Opcode },
f88c9eb0
SP
7482 { PREFIX_TABLE (PREFIX_0F3ADF) },
7483 /* e0 */
592d1631
L
7484 { Bad_Opcode },
7485 { Bad_Opcode },
7486 { Bad_Opcode },
7487 { Bad_Opcode },
7488 { Bad_Opcode },
592d1631
L
7489 { Bad_Opcode },
7490 { Bad_Opcode },
7491 { Bad_Opcode },
85f10a01 7492 /* e8 */
592d1631
L
7493 { Bad_Opcode },
7494 { Bad_Opcode },
7495 { Bad_Opcode },
7496 { Bad_Opcode },
7497 { Bad_Opcode },
7498 { Bad_Opcode },
7499 { Bad_Opcode },
7500 { Bad_Opcode },
85f10a01 7501 /* f0 */
592d1631
L
7502 { Bad_Opcode },
7503 { Bad_Opcode },
7504 { Bad_Opcode },
7505 { Bad_Opcode },
7506 { Bad_Opcode },
7507 { Bad_Opcode },
7508 { Bad_Opcode },
7509 { Bad_Opcode },
85f10a01 7510 /* f8 */
592d1631
L
7511 { Bad_Opcode },
7512 { Bad_Opcode },
7513 { Bad_Opcode },
7514 { Bad_Opcode },
7515 { Bad_Opcode },
7516 { Bad_Opcode },
7517 { Bad_Opcode },
7518 { Bad_Opcode },
85f10a01 7519 },
f88c9eb0
SP
7520};
7521
7522static const struct dis386 xop_table[][256] = {
5dd85c99 7523 /* XOP_08 */
85f10a01
MM
7524 {
7525 /* 00 */
592d1631
L
7526 { Bad_Opcode },
7527 { Bad_Opcode },
7528 { Bad_Opcode },
7529 { Bad_Opcode },
7530 { Bad_Opcode },
7531 { Bad_Opcode },
7532 { Bad_Opcode },
7533 { Bad_Opcode },
85f10a01 7534 /* 08 */
592d1631
L
7535 { Bad_Opcode },
7536 { Bad_Opcode },
7537 { Bad_Opcode },
7538 { Bad_Opcode },
7539 { Bad_Opcode },
7540 { Bad_Opcode },
7541 { Bad_Opcode },
7542 { Bad_Opcode },
85f10a01 7543 /* 10 */
3929df09 7544 { Bad_Opcode },
592d1631
L
7545 { Bad_Opcode },
7546 { Bad_Opcode },
7547 { Bad_Opcode },
7548 { Bad_Opcode },
7549 { Bad_Opcode },
7550 { Bad_Opcode },
7551 { Bad_Opcode },
85f10a01 7552 /* 18 */
592d1631
L
7553 { Bad_Opcode },
7554 { Bad_Opcode },
7555 { Bad_Opcode },
7556 { Bad_Opcode },
7557 { Bad_Opcode },
7558 { Bad_Opcode },
7559 { Bad_Opcode },
7560 { Bad_Opcode },
85f10a01 7561 /* 20 */
592d1631
L
7562 { Bad_Opcode },
7563 { Bad_Opcode },
7564 { Bad_Opcode },
7565 { Bad_Opcode },
7566 { Bad_Opcode },
7567 { Bad_Opcode },
7568 { Bad_Opcode },
7569 { Bad_Opcode },
85f10a01 7570 /* 28 */
592d1631
L
7571 { Bad_Opcode },
7572 { Bad_Opcode },
7573 { Bad_Opcode },
7574 { Bad_Opcode },
7575 { Bad_Opcode },
7576 { Bad_Opcode },
7577 { Bad_Opcode },
7578 { Bad_Opcode },
c0f3af97 7579 /* 30 */
592d1631
L
7580 { Bad_Opcode },
7581 { Bad_Opcode },
7582 { Bad_Opcode },
7583 { Bad_Opcode },
7584 { Bad_Opcode },
7585 { Bad_Opcode },
7586 { Bad_Opcode },
7587 { Bad_Opcode },
c0f3af97 7588 /* 38 */
592d1631
L
7589 { Bad_Opcode },
7590 { Bad_Opcode },
7591 { Bad_Opcode },
7592 { Bad_Opcode },
7593 { Bad_Opcode },
7594 { Bad_Opcode },
7595 { Bad_Opcode },
7596 { Bad_Opcode },
c0f3af97 7597 /* 40 */
592d1631
L
7598 { Bad_Opcode },
7599 { Bad_Opcode },
7600 { Bad_Opcode },
7601 { Bad_Opcode },
7602 { Bad_Opcode },
7603 { Bad_Opcode },
7604 { Bad_Opcode },
7605 { Bad_Opcode },
85f10a01 7606 /* 48 */
592d1631
L
7607 { Bad_Opcode },
7608 { Bad_Opcode },
7609 { Bad_Opcode },
7610 { Bad_Opcode },
7611 { Bad_Opcode },
7612 { Bad_Opcode },
7613 { Bad_Opcode },
7614 { Bad_Opcode },
c0f3af97 7615 /* 50 */
592d1631
L
7616 { Bad_Opcode },
7617 { Bad_Opcode },
7618 { Bad_Opcode },
7619 { Bad_Opcode },
7620 { Bad_Opcode },
7621 { Bad_Opcode },
7622 { Bad_Opcode },
7623 { Bad_Opcode },
85f10a01 7624 /* 58 */
592d1631
L
7625 { Bad_Opcode },
7626 { Bad_Opcode },
7627 { Bad_Opcode },
7628 { Bad_Opcode },
7629 { Bad_Opcode },
7630 { Bad_Opcode },
7631 { Bad_Opcode },
7632 { Bad_Opcode },
c1e679ec 7633 /* 60 */
592d1631
L
7634 { Bad_Opcode },
7635 { Bad_Opcode },
7636 { Bad_Opcode },
7637 { Bad_Opcode },
7638 { Bad_Opcode },
7639 { Bad_Opcode },
7640 { Bad_Opcode },
7641 { Bad_Opcode },
c0f3af97 7642 /* 68 */
592d1631
L
7643 { Bad_Opcode },
7644 { Bad_Opcode },
7645 { Bad_Opcode },
7646 { Bad_Opcode },
7647 { Bad_Opcode },
7648 { Bad_Opcode },
7649 { Bad_Opcode },
7650 { Bad_Opcode },
85f10a01 7651 /* 70 */
592d1631
L
7652 { Bad_Opcode },
7653 { Bad_Opcode },
7654 { Bad_Opcode },
7655 { Bad_Opcode },
7656 { Bad_Opcode },
7657 { Bad_Opcode },
7658 { Bad_Opcode },
7659 { Bad_Opcode },
85f10a01 7660 /* 78 */
592d1631
L
7661 { Bad_Opcode },
7662 { Bad_Opcode },
7663 { Bad_Opcode },
7664 { Bad_Opcode },
7665 { Bad_Opcode },
7666 { Bad_Opcode },
7667 { Bad_Opcode },
7668 { Bad_Opcode },
85f10a01 7669 /* 80 */
592d1631
L
7670 { Bad_Opcode },
7671 { Bad_Opcode },
7672 { Bad_Opcode },
7673 { Bad_Opcode },
7674 { Bad_Opcode },
3a2430e0
JB
7675 { "vpmacssww", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7676 { "vpmacsswd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7677 { "vpmacssdql", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
5dd85c99 7678 /* 88 */
592d1631
L
7679 { Bad_Opcode },
7680 { Bad_Opcode },
7681 { Bad_Opcode },
7682 { Bad_Opcode },
7683 { Bad_Opcode },
7684 { Bad_Opcode },
3a2430e0
JB
7685 { "vpmacssdd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7686 { "vpmacssdqh", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
5dd85c99 7687 /* 90 */
592d1631
L
7688 { Bad_Opcode },
7689 { Bad_Opcode },
7690 { Bad_Opcode },
7691 { Bad_Opcode },
7692 { Bad_Opcode },
3a2430e0
JB
7693 { "vpmacsww", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7694 { "vpmacswd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7695 { "vpmacsdql", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
5dd85c99 7696 /* 98 */
592d1631
L
7697 { Bad_Opcode },
7698 { Bad_Opcode },
7699 { Bad_Opcode },
7700 { Bad_Opcode },
7701 { Bad_Opcode },
7702 { Bad_Opcode },
3a2430e0
JB
7703 { "vpmacsdd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7704 { "vpmacsdqh", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
5dd85c99 7705 /* a0 */
592d1631
L
7706 { Bad_Opcode },
7707 { Bad_Opcode },
3a2430e0
JB
7708 { "vpcmov", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7709 { "vpperm", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
592d1631
L
7710 { Bad_Opcode },
7711 { Bad_Opcode },
3a2430e0 7712 { "vpmadcsswd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
592d1631 7713 { Bad_Opcode },
5dd85c99 7714 /* a8 */
592d1631
L
7715 { Bad_Opcode },
7716 { Bad_Opcode },
7717 { Bad_Opcode },
7718 { Bad_Opcode },
7719 { Bad_Opcode },
7720 { Bad_Opcode },
7721 { Bad_Opcode },
7722 { Bad_Opcode },
5dd85c99 7723 /* b0 */
592d1631
L
7724 { Bad_Opcode },
7725 { Bad_Opcode },
7726 { Bad_Opcode },
7727 { Bad_Opcode },
7728 { Bad_Opcode },
7729 { Bad_Opcode },
3a2430e0 7730 { "vpmadcswd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
592d1631 7731 { Bad_Opcode },
5dd85c99 7732 /* b8 */
592d1631
L
7733 { Bad_Opcode },
7734 { Bad_Opcode },
7735 { Bad_Opcode },
7736 { Bad_Opcode },
7737 { Bad_Opcode },
7738 { Bad_Opcode },
7739 { Bad_Opcode },
7740 { Bad_Opcode },
5dd85c99 7741 /* c0 */
bf890a93
IT
7742 { "vprotb", { XM, Vex_2src_1, Ib }, 0 },
7743 { "vprotw", { XM, Vex_2src_1, Ib }, 0 },
7744 { "vprotd", { XM, Vex_2src_1, Ib }, 0 },
7745 { "vprotq", { XM, Vex_2src_1, Ib }, 0 },
592d1631
L
7746 { Bad_Opcode },
7747 { Bad_Opcode },
7748 { Bad_Opcode },
7749 { Bad_Opcode },
5dd85c99 7750 /* c8 */
592d1631
L
7751 { Bad_Opcode },
7752 { Bad_Opcode },
7753 { Bad_Opcode },
7754 { Bad_Opcode },
ff688e1f
L
7755 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CC) },
7756 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CD) },
7757 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CE) },
7758 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CF) },
5dd85c99 7759 /* d0 */
592d1631
L
7760 { Bad_Opcode },
7761 { Bad_Opcode },
7762 { Bad_Opcode },
7763 { Bad_Opcode },
7764 { Bad_Opcode },
7765 { Bad_Opcode },
7766 { Bad_Opcode },
7767 { Bad_Opcode },
5dd85c99 7768 /* d8 */
592d1631
L
7769 { Bad_Opcode },
7770 { Bad_Opcode },
7771 { Bad_Opcode },
7772 { Bad_Opcode },
7773 { Bad_Opcode },
7774 { Bad_Opcode },
7775 { Bad_Opcode },
7776 { Bad_Opcode },
5dd85c99 7777 /* e0 */
592d1631
L
7778 { Bad_Opcode },
7779 { Bad_Opcode },
7780 { Bad_Opcode },
7781 { Bad_Opcode },
7782 { Bad_Opcode },
7783 { Bad_Opcode },
7784 { Bad_Opcode },
7785 { Bad_Opcode },
5dd85c99 7786 /* e8 */
592d1631
L
7787 { Bad_Opcode },
7788 { Bad_Opcode },
7789 { Bad_Opcode },
7790 { Bad_Opcode },
ff688e1f
L
7791 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EC) },
7792 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_ED) },
7793 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EE) },
7794 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EF) },
5dd85c99 7795 /* f0 */
592d1631
L
7796 { Bad_Opcode },
7797 { Bad_Opcode },
7798 { Bad_Opcode },
7799 { Bad_Opcode },
7800 { Bad_Opcode },
7801 { Bad_Opcode },
7802 { Bad_Opcode },
7803 { Bad_Opcode },
5dd85c99 7804 /* f8 */
592d1631
L
7805 { Bad_Opcode },
7806 { Bad_Opcode },
7807 { Bad_Opcode },
7808 { Bad_Opcode },
7809 { Bad_Opcode },
7810 { Bad_Opcode },
7811 { Bad_Opcode },
7812 { Bad_Opcode },
5dd85c99
SP
7813 },
7814 /* XOP_09 */
7815 {
7816 /* 00 */
592d1631 7817 { Bad_Opcode },
2a2a0f38
QN
7818 { REG_TABLE (REG_XOP_TBM_01) },
7819 { REG_TABLE (REG_XOP_TBM_02) },
592d1631
L
7820 { Bad_Opcode },
7821 { Bad_Opcode },
7822 { Bad_Opcode },
7823 { Bad_Opcode },
7824 { Bad_Opcode },
5dd85c99 7825 /* 08 */
592d1631
L
7826 { Bad_Opcode },
7827 { Bad_Opcode },
7828 { Bad_Opcode },
7829 { Bad_Opcode },
7830 { Bad_Opcode },
7831 { Bad_Opcode },
7832 { Bad_Opcode },
7833 { Bad_Opcode },
5dd85c99 7834 /* 10 */
592d1631
L
7835 { Bad_Opcode },
7836 { Bad_Opcode },
5dd85c99 7837 { REG_TABLE (REG_XOP_LWPCB) },
592d1631
L
7838 { Bad_Opcode },
7839 { Bad_Opcode },
7840 { Bad_Opcode },
7841 { Bad_Opcode },
7842 { Bad_Opcode },
5dd85c99 7843 /* 18 */
592d1631
L
7844 { Bad_Opcode },
7845 { Bad_Opcode },
7846 { Bad_Opcode },
7847 { Bad_Opcode },
7848 { Bad_Opcode },
7849 { Bad_Opcode },
7850 { Bad_Opcode },
7851 { Bad_Opcode },
5dd85c99 7852 /* 20 */
592d1631
L
7853 { Bad_Opcode },
7854 { Bad_Opcode },
7855 { Bad_Opcode },
7856 { Bad_Opcode },
7857 { Bad_Opcode },
7858 { Bad_Opcode },
7859 { Bad_Opcode },
7860 { Bad_Opcode },
5dd85c99 7861 /* 28 */
592d1631
L
7862 { Bad_Opcode },
7863 { Bad_Opcode },
7864 { Bad_Opcode },
7865 { Bad_Opcode },
7866 { Bad_Opcode },
7867 { Bad_Opcode },
7868 { Bad_Opcode },
7869 { Bad_Opcode },
5dd85c99 7870 /* 30 */
592d1631
L
7871 { Bad_Opcode },
7872 { Bad_Opcode },
7873 { Bad_Opcode },
7874 { Bad_Opcode },
7875 { Bad_Opcode },
7876 { Bad_Opcode },
7877 { Bad_Opcode },
7878 { Bad_Opcode },
5dd85c99 7879 /* 38 */
592d1631
L
7880 { Bad_Opcode },
7881 { Bad_Opcode },
7882 { Bad_Opcode },
7883 { Bad_Opcode },
7884 { Bad_Opcode },
7885 { Bad_Opcode },
7886 { Bad_Opcode },
7887 { Bad_Opcode },
5dd85c99 7888 /* 40 */
592d1631
L
7889 { Bad_Opcode },
7890 { Bad_Opcode },
7891 { Bad_Opcode },
7892 { Bad_Opcode },
7893 { Bad_Opcode },
7894 { Bad_Opcode },
7895 { Bad_Opcode },
7896 { Bad_Opcode },
5dd85c99 7897 /* 48 */
592d1631
L
7898 { Bad_Opcode },
7899 { Bad_Opcode },
7900 { Bad_Opcode },
7901 { Bad_Opcode },
7902 { Bad_Opcode },
7903 { Bad_Opcode },
7904 { Bad_Opcode },
7905 { Bad_Opcode },
5dd85c99 7906 /* 50 */
592d1631
L
7907 { Bad_Opcode },
7908 { Bad_Opcode },
7909 { Bad_Opcode },
7910 { Bad_Opcode },
7911 { Bad_Opcode },
7912 { Bad_Opcode },
7913 { Bad_Opcode },
7914 { Bad_Opcode },
5dd85c99 7915 /* 58 */
592d1631
L
7916 { Bad_Opcode },
7917 { Bad_Opcode },
7918 { Bad_Opcode },
7919 { Bad_Opcode },
7920 { Bad_Opcode },
7921 { Bad_Opcode },
7922 { Bad_Opcode },
7923 { Bad_Opcode },
5dd85c99 7924 /* 60 */
592d1631
L
7925 { Bad_Opcode },
7926 { Bad_Opcode },
7927 { Bad_Opcode },
7928 { Bad_Opcode },
7929 { Bad_Opcode },
7930 { Bad_Opcode },
7931 { Bad_Opcode },
7932 { Bad_Opcode },
5dd85c99 7933 /* 68 */
592d1631
L
7934 { Bad_Opcode },
7935 { Bad_Opcode },
7936 { Bad_Opcode },
7937 { Bad_Opcode },
7938 { Bad_Opcode },
7939 { Bad_Opcode },
7940 { Bad_Opcode },
7941 { Bad_Opcode },
5dd85c99 7942 /* 70 */
592d1631
L
7943 { Bad_Opcode },
7944 { Bad_Opcode },
7945 { Bad_Opcode },
7946 { Bad_Opcode },
7947 { Bad_Opcode },
7948 { Bad_Opcode },
7949 { Bad_Opcode },
7950 { Bad_Opcode },
5dd85c99 7951 /* 78 */
592d1631
L
7952 { Bad_Opcode },
7953 { Bad_Opcode },
7954 { Bad_Opcode },
7955 { Bad_Opcode },
7956 { Bad_Opcode },
7957 { Bad_Opcode },
7958 { Bad_Opcode },
7959 { Bad_Opcode },
5dd85c99 7960 /* 80 */
592a252b
L
7961 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_80) },
7962 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_81) },
bf890a93
IT
7963 { "vfrczss", { XM, EXd }, 0 },
7964 { "vfrczsd", { XM, EXq }, 0 },
592d1631
L
7965 { Bad_Opcode },
7966 { Bad_Opcode },
7967 { Bad_Opcode },
7968 { Bad_Opcode },
5dd85c99 7969 /* 88 */
592d1631
L
7970 { Bad_Opcode },
7971 { Bad_Opcode },
7972 { Bad_Opcode },
7973 { Bad_Opcode },
7974 { Bad_Opcode },
7975 { Bad_Opcode },
7976 { Bad_Opcode },
7977 { Bad_Opcode },
5dd85c99 7978 /* 90 */
bf890a93
IT
7979 { "vprotb", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
7980 { "vprotw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
7981 { "vprotd", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
7982 { "vprotq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
7983 { "vpshlb", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
7984 { "vpshlw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
7985 { "vpshld", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
7986 { "vpshlq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
5dd85c99 7987 /* 98 */
bf890a93
IT
7988 { "vpshab", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
7989 { "vpshaw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
7990 { "vpshad", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
7991 { "vpshaq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
592d1631
L
7992 { Bad_Opcode },
7993 { Bad_Opcode },
7994 { Bad_Opcode },
7995 { Bad_Opcode },
5dd85c99 7996 /* a0 */
592d1631
L
7997 { Bad_Opcode },
7998 { Bad_Opcode },
7999 { Bad_Opcode },
8000 { Bad_Opcode },
8001 { Bad_Opcode },
8002 { Bad_Opcode },
8003 { Bad_Opcode },
8004 { Bad_Opcode },
5dd85c99 8005 /* a8 */
592d1631
L
8006 { Bad_Opcode },
8007 { Bad_Opcode },
8008 { Bad_Opcode },
8009 { Bad_Opcode },
8010 { Bad_Opcode },
8011 { Bad_Opcode },
8012 { Bad_Opcode },
8013 { Bad_Opcode },
5dd85c99 8014 /* b0 */
592d1631
L
8015 { Bad_Opcode },
8016 { Bad_Opcode },
8017 { Bad_Opcode },
8018 { Bad_Opcode },
8019 { Bad_Opcode },
8020 { Bad_Opcode },
8021 { Bad_Opcode },
8022 { Bad_Opcode },
5dd85c99 8023 /* b8 */
592d1631
L
8024 { Bad_Opcode },
8025 { Bad_Opcode },
8026 { Bad_Opcode },
8027 { Bad_Opcode },
8028 { Bad_Opcode },
8029 { Bad_Opcode },
8030 { Bad_Opcode },
8031 { Bad_Opcode },
5dd85c99 8032 /* c0 */
592d1631 8033 { Bad_Opcode },
bf890a93
IT
8034 { "vphaddbw", { XM, EXxmm }, 0 },
8035 { "vphaddbd", { XM, EXxmm }, 0 },
8036 { "vphaddbq", { XM, EXxmm }, 0 },
592d1631
L
8037 { Bad_Opcode },
8038 { Bad_Opcode },
bf890a93
IT
8039 { "vphaddwd", { XM, EXxmm }, 0 },
8040 { "vphaddwq", { XM, EXxmm }, 0 },
5dd85c99 8041 /* c8 */
592d1631
L
8042 { Bad_Opcode },
8043 { Bad_Opcode },
8044 { Bad_Opcode },
bf890a93 8045 { "vphadddq", { XM, EXxmm }, 0 },
592d1631
L
8046 { Bad_Opcode },
8047 { Bad_Opcode },
8048 { Bad_Opcode },
8049 { Bad_Opcode },
5dd85c99 8050 /* d0 */
592d1631 8051 { Bad_Opcode },
bf890a93
IT
8052 { "vphaddubw", { XM, EXxmm }, 0 },
8053 { "vphaddubd", { XM, EXxmm }, 0 },
8054 { "vphaddubq", { XM, EXxmm }, 0 },
592d1631
L
8055 { Bad_Opcode },
8056 { Bad_Opcode },
bf890a93
IT
8057 { "vphadduwd", { XM, EXxmm }, 0 },
8058 { "vphadduwq", { XM, EXxmm }, 0 },
5dd85c99 8059 /* d8 */
592d1631
L
8060 { Bad_Opcode },
8061 { Bad_Opcode },
8062 { Bad_Opcode },
bf890a93 8063 { "vphaddudq", { XM, EXxmm }, 0 },
592d1631
L
8064 { Bad_Opcode },
8065 { Bad_Opcode },
8066 { Bad_Opcode },
8067 { Bad_Opcode },
5dd85c99 8068 /* e0 */
592d1631 8069 { Bad_Opcode },
bf890a93
IT
8070 { "vphsubbw", { XM, EXxmm }, 0 },
8071 { "vphsubwd", { XM, EXxmm }, 0 },
8072 { "vphsubdq", { XM, EXxmm }, 0 },
592d1631
L
8073 { Bad_Opcode },
8074 { Bad_Opcode },
8075 { Bad_Opcode },
8076 { Bad_Opcode },
4e7d34a6 8077 /* e8 */
592d1631
L
8078 { Bad_Opcode },
8079 { Bad_Opcode },
8080 { Bad_Opcode },
8081 { Bad_Opcode },
8082 { Bad_Opcode },
8083 { Bad_Opcode },
8084 { Bad_Opcode },
8085 { Bad_Opcode },
4e7d34a6 8086 /* f0 */
592d1631
L
8087 { Bad_Opcode },
8088 { Bad_Opcode },
8089 { Bad_Opcode },
8090 { Bad_Opcode },
8091 { Bad_Opcode },
8092 { Bad_Opcode },
8093 { Bad_Opcode },
8094 { Bad_Opcode },
4e7d34a6 8095 /* f8 */
592d1631
L
8096 { Bad_Opcode },
8097 { Bad_Opcode },
8098 { Bad_Opcode },
8099 { Bad_Opcode },
8100 { Bad_Opcode },
8101 { Bad_Opcode },
8102 { Bad_Opcode },
8103 { Bad_Opcode },
4e7d34a6 8104 },
f88c9eb0 8105 /* XOP_0A */
4e7d34a6
L
8106 {
8107 /* 00 */
592d1631
L
8108 { Bad_Opcode },
8109 { Bad_Opcode },
8110 { Bad_Opcode },
8111 { Bad_Opcode },
8112 { Bad_Opcode },
8113 { Bad_Opcode },
8114 { Bad_Opcode },
8115 { Bad_Opcode },
4e7d34a6 8116 /* 08 */
592d1631
L
8117 { Bad_Opcode },
8118 { Bad_Opcode },
8119 { Bad_Opcode },
8120 { Bad_Opcode },
8121 { Bad_Opcode },
8122 { Bad_Opcode },
8123 { Bad_Opcode },
8124 { Bad_Opcode },
4e7d34a6 8125 /* 10 */
bf890a93 8126 { "bextr", { Gv, Ev, Iq }, 0 },
592d1631 8127 { Bad_Opcode },
f88c9eb0 8128 { REG_TABLE (REG_XOP_LWP) },
592d1631
L
8129 { Bad_Opcode },
8130 { Bad_Opcode },
8131 { Bad_Opcode },
8132 { Bad_Opcode },
8133 { Bad_Opcode },
4e7d34a6 8134 /* 18 */
592d1631
L
8135 { Bad_Opcode },
8136 { Bad_Opcode },
8137 { Bad_Opcode },
8138 { Bad_Opcode },
8139 { Bad_Opcode },
8140 { Bad_Opcode },
8141 { Bad_Opcode },
8142 { Bad_Opcode },
4e7d34a6 8143 /* 20 */
592d1631
L
8144 { Bad_Opcode },
8145 { Bad_Opcode },
8146 { Bad_Opcode },
8147 { Bad_Opcode },
8148 { Bad_Opcode },
8149 { Bad_Opcode },
8150 { Bad_Opcode },
8151 { Bad_Opcode },
4e7d34a6 8152 /* 28 */
592d1631
L
8153 { Bad_Opcode },
8154 { Bad_Opcode },
8155 { Bad_Opcode },
8156 { Bad_Opcode },
8157 { Bad_Opcode },
8158 { Bad_Opcode },
8159 { Bad_Opcode },
8160 { Bad_Opcode },
4e7d34a6 8161 /* 30 */
592d1631
L
8162 { Bad_Opcode },
8163 { Bad_Opcode },
8164 { Bad_Opcode },
8165 { Bad_Opcode },
8166 { Bad_Opcode },
8167 { Bad_Opcode },
8168 { Bad_Opcode },
8169 { Bad_Opcode },
c0f3af97 8170 /* 38 */
592d1631
L
8171 { Bad_Opcode },
8172 { Bad_Opcode },
8173 { Bad_Opcode },
8174 { Bad_Opcode },
8175 { Bad_Opcode },
8176 { Bad_Opcode },
8177 { Bad_Opcode },
8178 { Bad_Opcode },
c0f3af97 8179 /* 40 */
592d1631
L
8180 { Bad_Opcode },
8181 { Bad_Opcode },
8182 { Bad_Opcode },
8183 { Bad_Opcode },
8184 { Bad_Opcode },
8185 { Bad_Opcode },
8186 { Bad_Opcode },
8187 { Bad_Opcode },
c1e679ec 8188 /* 48 */
592d1631
L
8189 { Bad_Opcode },
8190 { Bad_Opcode },
8191 { Bad_Opcode },
8192 { Bad_Opcode },
8193 { Bad_Opcode },
8194 { Bad_Opcode },
8195 { Bad_Opcode },
8196 { Bad_Opcode },
c1e679ec 8197 /* 50 */
592d1631
L
8198 { Bad_Opcode },
8199 { Bad_Opcode },
8200 { Bad_Opcode },
8201 { Bad_Opcode },
8202 { Bad_Opcode },
8203 { Bad_Opcode },
8204 { Bad_Opcode },
8205 { Bad_Opcode },
4e7d34a6 8206 /* 58 */
592d1631
L
8207 { Bad_Opcode },
8208 { Bad_Opcode },
8209 { Bad_Opcode },
8210 { Bad_Opcode },
8211 { Bad_Opcode },
8212 { Bad_Opcode },
8213 { Bad_Opcode },
8214 { Bad_Opcode },
4e7d34a6 8215 /* 60 */
592d1631
L
8216 { Bad_Opcode },
8217 { Bad_Opcode },
8218 { Bad_Opcode },
8219 { Bad_Opcode },
8220 { Bad_Opcode },
8221 { Bad_Opcode },
8222 { Bad_Opcode },
8223 { Bad_Opcode },
4e7d34a6 8224 /* 68 */
592d1631
L
8225 { Bad_Opcode },
8226 { Bad_Opcode },
8227 { Bad_Opcode },
8228 { Bad_Opcode },
8229 { Bad_Opcode },
8230 { Bad_Opcode },
8231 { Bad_Opcode },
8232 { Bad_Opcode },
4e7d34a6 8233 /* 70 */
592d1631
L
8234 { Bad_Opcode },
8235 { Bad_Opcode },
8236 { Bad_Opcode },
8237 { Bad_Opcode },
8238 { Bad_Opcode },
8239 { Bad_Opcode },
8240 { Bad_Opcode },
8241 { Bad_Opcode },
4e7d34a6 8242 /* 78 */
592d1631
L
8243 { Bad_Opcode },
8244 { Bad_Opcode },
8245 { Bad_Opcode },
8246 { Bad_Opcode },
8247 { Bad_Opcode },
8248 { Bad_Opcode },
8249 { Bad_Opcode },
8250 { Bad_Opcode },
4e7d34a6 8251 /* 80 */
592d1631
L
8252 { Bad_Opcode },
8253 { Bad_Opcode },
8254 { Bad_Opcode },
8255 { Bad_Opcode },
8256 { Bad_Opcode },
8257 { Bad_Opcode },
8258 { Bad_Opcode },
8259 { Bad_Opcode },
4e7d34a6 8260 /* 88 */
592d1631
L
8261 { Bad_Opcode },
8262 { Bad_Opcode },
8263 { Bad_Opcode },
8264 { Bad_Opcode },
8265 { Bad_Opcode },
8266 { Bad_Opcode },
8267 { Bad_Opcode },
8268 { Bad_Opcode },
4e7d34a6 8269 /* 90 */
592d1631
L
8270 { Bad_Opcode },
8271 { Bad_Opcode },
8272 { Bad_Opcode },
8273 { Bad_Opcode },
8274 { Bad_Opcode },
8275 { Bad_Opcode },
8276 { Bad_Opcode },
8277 { Bad_Opcode },
4e7d34a6 8278 /* 98 */
592d1631
L
8279 { Bad_Opcode },
8280 { Bad_Opcode },
8281 { Bad_Opcode },
8282 { Bad_Opcode },
8283 { Bad_Opcode },
8284 { Bad_Opcode },
8285 { Bad_Opcode },
8286 { Bad_Opcode },
4e7d34a6 8287 /* a0 */
592d1631
L
8288 { Bad_Opcode },
8289 { Bad_Opcode },
8290 { Bad_Opcode },
8291 { Bad_Opcode },
8292 { Bad_Opcode },
8293 { Bad_Opcode },
8294 { Bad_Opcode },
8295 { Bad_Opcode },
4e7d34a6 8296 /* a8 */
592d1631
L
8297 { Bad_Opcode },
8298 { Bad_Opcode },
8299 { Bad_Opcode },
8300 { Bad_Opcode },
8301 { Bad_Opcode },
8302 { Bad_Opcode },
8303 { Bad_Opcode },
8304 { Bad_Opcode },
d5d7db8e 8305 /* b0 */
592d1631
L
8306 { Bad_Opcode },
8307 { Bad_Opcode },
8308 { Bad_Opcode },
8309 { Bad_Opcode },
8310 { Bad_Opcode },
8311 { Bad_Opcode },
8312 { Bad_Opcode },
8313 { Bad_Opcode },
85f10a01 8314 /* b8 */
592d1631
L
8315 { Bad_Opcode },
8316 { Bad_Opcode },
8317 { Bad_Opcode },
8318 { Bad_Opcode },
8319 { Bad_Opcode },
8320 { Bad_Opcode },
8321 { Bad_Opcode },
8322 { Bad_Opcode },
85f10a01 8323 /* c0 */
592d1631
L
8324 { Bad_Opcode },
8325 { Bad_Opcode },
8326 { Bad_Opcode },
8327 { Bad_Opcode },
8328 { Bad_Opcode },
8329 { Bad_Opcode },
8330 { Bad_Opcode },
8331 { Bad_Opcode },
85f10a01 8332 /* c8 */
592d1631
L
8333 { Bad_Opcode },
8334 { Bad_Opcode },
8335 { Bad_Opcode },
8336 { Bad_Opcode },
8337 { Bad_Opcode },
8338 { Bad_Opcode },
8339 { Bad_Opcode },
8340 { Bad_Opcode },
85f10a01 8341 /* d0 */
592d1631
L
8342 { Bad_Opcode },
8343 { Bad_Opcode },
8344 { Bad_Opcode },
8345 { Bad_Opcode },
8346 { Bad_Opcode },
8347 { Bad_Opcode },
8348 { Bad_Opcode },
8349 { Bad_Opcode },
85f10a01 8350 /* d8 */
592d1631
L
8351 { Bad_Opcode },
8352 { Bad_Opcode },
8353 { Bad_Opcode },
8354 { Bad_Opcode },
8355 { Bad_Opcode },
8356 { Bad_Opcode },
8357 { Bad_Opcode },
8358 { Bad_Opcode },
85f10a01 8359 /* e0 */
592d1631
L
8360 { Bad_Opcode },
8361 { Bad_Opcode },
8362 { Bad_Opcode },
8363 { Bad_Opcode },
8364 { Bad_Opcode },
8365 { Bad_Opcode },
8366 { Bad_Opcode },
8367 { Bad_Opcode },
85f10a01 8368 /* e8 */
592d1631
L
8369 { Bad_Opcode },
8370 { Bad_Opcode },
8371 { Bad_Opcode },
8372 { Bad_Opcode },
8373 { Bad_Opcode },
8374 { Bad_Opcode },
8375 { Bad_Opcode },
8376 { Bad_Opcode },
85f10a01 8377 /* f0 */
592d1631
L
8378 { Bad_Opcode },
8379 { Bad_Opcode },
8380 { Bad_Opcode },
8381 { Bad_Opcode },
8382 { Bad_Opcode },
8383 { Bad_Opcode },
8384 { Bad_Opcode },
8385 { Bad_Opcode },
85f10a01 8386 /* f8 */
592d1631
L
8387 { Bad_Opcode },
8388 { Bad_Opcode },
8389 { Bad_Opcode },
8390 { Bad_Opcode },
8391 { Bad_Opcode },
8392 { Bad_Opcode },
8393 { Bad_Opcode },
8394 { Bad_Opcode },
85f10a01 8395 },
c0f3af97
L
8396};
8397
8398static const struct dis386 vex_table[][256] = {
8399 /* VEX_0F */
85f10a01
MM
8400 {
8401 /* 00 */
592d1631
L
8402 { Bad_Opcode },
8403 { Bad_Opcode },
8404 { Bad_Opcode },
8405 { Bad_Opcode },
8406 { Bad_Opcode },
8407 { Bad_Opcode },
8408 { Bad_Opcode },
8409 { Bad_Opcode },
85f10a01 8410 /* 08 */
592d1631
L
8411 { Bad_Opcode },
8412 { Bad_Opcode },
8413 { Bad_Opcode },
8414 { Bad_Opcode },
8415 { Bad_Opcode },
8416 { Bad_Opcode },
8417 { Bad_Opcode },
8418 { Bad_Opcode },
c0f3af97 8419 /* 10 */
592a252b
L
8420 { PREFIX_TABLE (PREFIX_VEX_0F10) },
8421 { PREFIX_TABLE (PREFIX_VEX_0F11) },
8422 { PREFIX_TABLE (PREFIX_VEX_0F12) },
8423 { MOD_TABLE (MOD_VEX_0F13) },
ec6f095a
L
8424 { "vunpcklpX", { XM, Vex, EXx }, 0 },
8425 { "vunpckhpX", { XM, Vex, EXx }, 0 },
592a252b
L
8426 { PREFIX_TABLE (PREFIX_VEX_0F16) },
8427 { MOD_TABLE (MOD_VEX_0F17) },
c0f3af97 8428 /* 18 */
592d1631
L
8429 { Bad_Opcode },
8430 { Bad_Opcode },
8431 { Bad_Opcode },
8432 { Bad_Opcode },
8433 { Bad_Opcode },
8434 { Bad_Opcode },
8435 { Bad_Opcode },
8436 { Bad_Opcode },
c0f3af97 8437 /* 20 */
592d1631
L
8438 { Bad_Opcode },
8439 { Bad_Opcode },
8440 { Bad_Opcode },
8441 { Bad_Opcode },
8442 { Bad_Opcode },
8443 { Bad_Opcode },
8444 { Bad_Opcode },
8445 { Bad_Opcode },
c0f3af97 8446 /* 28 */
ec6f095a
L
8447 { "vmovapX", { XM, EXx }, 0 },
8448 { "vmovapX", { EXxS, XM }, 0 },
592a252b
L
8449 { PREFIX_TABLE (PREFIX_VEX_0F2A) },
8450 { MOD_TABLE (MOD_VEX_0F2B) },
8451 { PREFIX_TABLE (PREFIX_VEX_0F2C) },
8452 { PREFIX_TABLE (PREFIX_VEX_0F2D) },
8453 { PREFIX_TABLE (PREFIX_VEX_0F2E) },
8454 { PREFIX_TABLE (PREFIX_VEX_0F2F) },
85f10a01 8455 /* 30 */
592d1631
L
8456 { Bad_Opcode },
8457 { Bad_Opcode },
8458 { Bad_Opcode },
8459 { Bad_Opcode },
8460 { Bad_Opcode },
8461 { Bad_Opcode },
8462 { Bad_Opcode },
8463 { Bad_Opcode },
4e7d34a6 8464 /* 38 */
592d1631
L
8465 { Bad_Opcode },
8466 { Bad_Opcode },
8467 { Bad_Opcode },
8468 { Bad_Opcode },
8469 { Bad_Opcode },
8470 { Bad_Opcode },
8471 { Bad_Opcode },
8472 { Bad_Opcode },
d5d7db8e 8473 /* 40 */
592d1631 8474 { Bad_Opcode },
43234a1e
L
8475 { PREFIX_TABLE (PREFIX_VEX_0F41) },
8476 { PREFIX_TABLE (PREFIX_VEX_0F42) },
592d1631 8477 { Bad_Opcode },
43234a1e
L
8478 { PREFIX_TABLE (PREFIX_VEX_0F44) },
8479 { PREFIX_TABLE (PREFIX_VEX_0F45) },
8480 { PREFIX_TABLE (PREFIX_VEX_0F46) },
8481 { PREFIX_TABLE (PREFIX_VEX_0F47) },
85f10a01 8482 /* 48 */
592d1631
L
8483 { Bad_Opcode },
8484 { Bad_Opcode },
1ba585e8 8485 { PREFIX_TABLE (PREFIX_VEX_0F4A) },
43234a1e 8486 { PREFIX_TABLE (PREFIX_VEX_0F4B) },
592d1631
L
8487 { Bad_Opcode },
8488 { Bad_Opcode },
8489 { Bad_Opcode },
8490 { Bad_Opcode },
d5d7db8e 8491 /* 50 */
592a252b
L
8492 { MOD_TABLE (MOD_VEX_0F50) },
8493 { PREFIX_TABLE (PREFIX_VEX_0F51) },
8494 { PREFIX_TABLE (PREFIX_VEX_0F52) },
8495 { PREFIX_TABLE (PREFIX_VEX_0F53) },
bf890a93
IT
8496 { "vandpX", { XM, Vex, EXx }, 0 },
8497 { "vandnpX", { XM, Vex, EXx }, 0 },
8498 { "vorpX", { XM, Vex, EXx }, 0 },
8499 { "vxorpX", { XM, Vex, EXx }, 0 },
c0f3af97 8500 /* 58 */
592a252b
L
8501 { PREFIX_TABLE (PREFIX_VEX_0F58) },
8502 { PREFIX_TABLE (PREFIX_VEX_0F59) },
8503 { PREFIX_TABLE (PREFIX_VEX_0F5A) },
8504 { PREFIX_TABLE (PREFIX_VEX_0F5B) },
8505 { PREFIX_TABLE (PREFIX_VEX_0F5C) },
8506 { PREFIX_TABLE (PREFIX_VEX_0F5D) },
8507 { PREFIX_TABLE (PREFIX_VEX_0F5E) },
8508 { PREFIX_TABLE (PREFIX_VEX_0F5F) },
c0f3af97 8509 /* 60 */
592a252b
L
8510 { PREFIX_TABLE (PREFIX_VEX_0F60) },
8511 { PREFIX_TABLE (PREFIX_VEX_0F61) },
8512 { PREFIX_TABLE (PREFIX_VEX_0F62) },
8513 { PREFIX_TABLE (PREFIX_VEX_0F63) },
8514 { PREFIX_TABLE (PREFIX_VEX_0F64) },
8515 { PREFIX_TABLE (PREFIX_VEX_0F65) },
8516 { PREFIX_TABLE (PREFIX_VEX_0F66) },
8517 { PREFIX_TABLE (PREFIX_VEX_0F67) },
c0f3af97 8518 /* 68 */
592a252b
L
8519 { PREFIX_TABLE (PREFIX_VEX_0F68) },
8520 { PREFIX_TABLE (PREFIX_VEX_0F69) },
8521 { PREFIX_TABLE (PREFIX_VEX_0F6A) },
8522 { PREFIX_TABLE (PREFIX_VEX_0F6B) },
8523 { PREFIX_TABLE (PREFIX_VEX_0F6C) },
8524 { PREFIX_TABLE (PREFIX_VEX_0F6D) },
8525 { PREFIX_TABLE (PREFIX_VEX_0F6E) },
8526 { PREFIX_TABLE (PREFIX_VEX_0F6F) },
c0f3af97 8527 /* 70 */
592a252b
L
8528 { PREFIX_TABLE (PREFIX_VEX_0F70) },
8529 { REG_TABLE (REG_VEX_0F71) },
8530 { REG_TABLE (REG_VEX_0F72) },
8531 { REG_TABLE (REG_VEX_0F73) },
8532 { PREFIX_TABLE (PREFIX_VEX_0F74) },
8533 { PREFIX_TABLE (PREFIX_VEX_0F75) },
8534 { PREFIX_TABLE (PREFIX_VEX_0F76) },
8535 { PREFIX_TABLE (PREFIX_VEX_0F77) },
c0f3af97 8536 /* 78 */
592d1631
L
8537 { Bad_Opcode },
8538 { Bad_Opcode },
8539 { Bad_Opcode },
8540 { Bad_Opcode },
592a252b
L
8541 { PREFIX_TABLE (PREFIX_VEX_0F7C) },
8542 { PREFIX_TABLE (PREFIX_VEX_0F7D) },
8543 { PREFIX_TABLE (PREFIX_VEX_0F7E) },
8544 { PREFIX_TABLE (PREFIX_VEX_0F7F) },
c0f3af97 8545 /* 80 */
592d1631
L
8546 { Bad_Opcode },
8547 { Bad_Opcode },
8548 { Bad_Opcode },
8549 { Bad_Opcode },
8550 { Bad_Opcode },
8551 { Bad_Opcode },
8552 { Bad_Opcode },
8553 { Bad_Opcode },
c0f3af97 8554 /* 88 */
592d1631
L
8555 { Bad_Opcode },
8556 { Bad_Opcode },
8557 { Bad_Opcode },
8558 { Bad_Opcode },
8559 { Bad_Opcode },
8560 { Bad_Opcode },
8561 { Bad_Opcode },
8562 { Bad_Opcode },
c0f3af97 8563 /* 90 */
43234a1e
L
8564 { PREFIX_TABLE (PREFIX_VEX_0F90) },
8565 { PREFIX_TABLE (PREFIX_VEX_0F91) },
8566 { PREFIX_TABLE (PREFIX_VEX_0F92) },
8567 { PREFIX_TABLE (PREFIX_VEX_0F93) },
592d1631
L
8568 { Bad_Opcode },
8569 { Bad_Opcode },
8570 { Bad_Opcode },
8571 { Bad_Opcode },
c0f3af97 8572 /* 98 */
43234a1e 8573 { PREFIX_TABLE (PREFIX_VEX_0F98) },
1ba585e8 8574 { PREFIX_TABLE (PREFIX_VEX_0F99) },
592d1631
L
8575 { Bad_Opcode },
8576 { Bad_Opcode },
8577 { Bad_Opcode },
8578 { Bad_Opcode },
8579 { Bad_Opcode },
8580 { Bad_Opcode },
c0f3af97 8581 /* a0 */
592d1631
L
8582 { Bad_Opcode },
8583 { Bad_Opcode },
8584 { Bad_Opcode },
8585 { Bad_Opcode },
8586 { Bad_Opcode },
8587 { Bad_Opcode },
8588 { Bad_Opcode },
8589 { Bad_Opcode },
c0f3af97 8590 /* a8 */
592d1631
L
8591 { Bad_Opcode },
8592 { Bad_Opcode },
8593 { Bad_Opcode },
8594 { Bad_Opcode },
8595 { Bad_Opcode },
8596 { Bad_Opcode },
592a252b 8597 { REG_TABLE (REG_VEX_0FAE) },
592d1631 8598 { Bad_Opcode },
c0f3af97 8599 /* b0 */
592d1631
L
8600 { Bad_Opcode },
8601 { Bad_Opcode },
8602 { Bad_Opcode },
8603 { Bad_Opcode },
8604 { Bad_Opcode },
8605 { Bad_Opcode },
8606 { Bad_Opcode },
8607 { Bad_Opcode },
c0f3af97 8608 /* b8 */
592d1631
L
8609 { Bad_Opcode },
8610 { Bad_Opcode },
8611 { Bad_Opcode },
8612 { Bad_Opcode },
8613 { Bad_Opcode },
8614 { Bad_Opcode },
8615 { Bad_Opcode },
8616 { Bad_Opcode },
c0f3af97 8617 /* c0 */
592d1631
L
8618 { Bad_Opcode },
8619 { Bad_Opcode },
592a252b 8620 { PREFIX_TABLE (PREFIX_VEX_0FC2) },
592d1631 8621 { Bad_Opcode },
592a252b
L
8622 { PREFIX_TABLE (PREFIX_VEX_0FC4) },
8623 { PREFIX_TABLE (PREFIX_VEX_0FC5) },
bf890a93 8624 { "vshufpX", { XM, Vex, EXx, Ib }, 0 },
592d1631 8625 { Bad_Opcode },
c0f3af97 8626 /* c8 */
592d1631
L
8627 { Bad_Opcode },
8628 { Bad_Opcode },
8629 { Bad_Opcode },
8630 { Bad_Opcode },
8631 { Bad_Opcode },
8632 { Bad_Opcode },
8633 { Bad_Opcode },
8634 { Bad_Opcode },
c0f3af97 8635 /* d0 */
592a252b
L
8636 { PREFIX_TABLE (PREFIX_VEX_0FD0) },
8637 { PREFIX_TABLE (PREFIX_VEX_0FD1) },
8638 { PREFIX_TABLE (PREFIX_VEX_0FD2) },
8639 { PREFIX_TABLE (PREFIX_VEX_0FD3) },
8640 { PREFIX_TABLE (PREFIX_VEX_0FD4) },
8641 { PREFIX_TABLE (PREFIX_VEX_0FD5) },
8642 { PREFIX_TABLE (PREFIX_VEX_0FD6) },
8643 { PREFIX_TABLE (PREFIX_VEX_0FD7) },
c0f3af97 8644 /* d8 */
592a252b
L
8645 { PREFIX_TABLE (PREFIX_VEX_0FD8) },
8646 { PREFIX_TABLE (PREFIX_VEX_0FD9) },
8647 { PREFIX_TABLE (PREFIX_VEX_0FDA) },
8648 { PREFIX_TABLE (PREFIX_VEX_0FDB) },
8649 { PREFIX_TABLE (PREFIX_VEX_0FDC) },
8650 { PREFIX_TABLE (PREFIX_VEX_0FDD) },
8651 { PREFIX_TABLE (PREFIX_VEX_0FDE) },
8652 { PREFIX_TABLE (PREFIX_VEX_0FDF) },
c0f3af97 8653 /* e0 */
592a252b
L
8654 { PREFIX_TABLE (PREFIX_VEX_0FE0) },
8655 { PREFIX_TABLE (PREFIX_VEX_0FE1) },
8656 { PREFIX_TABLE (PREFIX_VEX_0FE2) },
8657 { PREFIX_TABLE (PREFIX_VEX_0FE3) },
8658 { PREFIX_TABLE (PREFIX_VEX_0FE4) },
8659 { PREFIX_TABLE (PREFIX_VEX_0FE5) },
8660 { PREFIX_TABLE (PREFIX_VEX_0FE6) },
8661 { PREFIX_TABLE (PREFIX_VEX_0FE7) },
c0f3af97 8662 /* e8 */
592a252b
L
8663 { PREFIX_TABLE (PREFIX_VEX_0FE8) },
8664 { PREFIX_TABLE (PREFIX_VEX_0FE9) },
8665 { PREFIX_TABLE (PREFIX_VEX_0FEA) },
8666 { PREFIX_TABLE (PREFIX_VEX_0FEB) },
8667 { PREFIX_TABLE (PREFIX_VEX_0FEC) },
8668 { PREFIX_TABLE (PREFIX_VEX_0FED) },
8669 { PREFIX_TABLE (PREFIX_VEX_0FEE) },
8670 { PREFIX_TABLE (PREFIX_VEX_0FEF) },
c0f3af97 8671 /* f0 */
592a252b
L
8672 { PREFIX_TABLE (PREFIX_VEX_0FF0) },
8673 { PREFIX_TABLE (PREFIX_VEX_0FF1) },
8674 { PREFIX_TABLE (PREFIX_VEX_0FF2) },
8675 { PREFIX_TABLE (PREFIX_VEX_0FF3) },
8676 { PREFIX_TABLE (PREFIX_VEX_0FF4) },
8677 { PREFIX_TABLE (PREFIX_VEX_0FF5) },
8678 { PREFIX_TABLE (PREFIX_VEX_0FF6) },
8679 { PREFIX_TABLE (PREFIX_VEX_0FF7) },
c0f3af97 8680 /* f8 */
592a252b
L
8681 { PREFIX_TABLE (PREFIX_VEX_0FF8) },
8682 { PREFIX_TABLE (PREFIX_VEX_0FF9) },
8683 { PREFIX_TABLE (PREFIX_VEX_0FFA) },
8684 { PREFIX_TABLE (PREFIX_VEX_0FFB) },
8685 { PREFIX_TABLE (PREFIX_VEX_0FFC) },
8686 { PREFIX_TABLE (PREFIX_VEX_0FFD) },
8687 { PREFIX_TABLE (PREFIX_VEX_0FFE) },
592d1631 8688 { Bad_Opcode },
c0f3af97
L
8689 },
8690 /* VEX_0F38 */
8691 {
8692 /* 00 */
592a252b
L
8693 { PREFIX_TABLE (PREFIX_VEX_0F3800) },
8694 { PREFIX_TABLE (PREFIX_VEX_0F3801) },
8695 { PREFIX_TABLE (PREFIX_VEX_0F3802) },
8696 { PREFIX_TABLE (PREFIX_VEX_0F3803) },
8697 { PREFIX_TABLE (PREFIX_VEX_0F3804) },
8698 { PREFIX_TABLE (PREFIX_VEX_0F3805) },
8699 { PREFIX_TABLE (PREFIX_VEX_0F3806) },
8700 { PREFIX_TABLE (PREFIX_VEX_0F3807) },
c0f3af97 8701 /* 08 */
592a252b
L
8702 { PREFIX_TABLE (PREFIX_VEX_0F3808) },
8703 { PREFIX_TABLE (PREFIX_VEX_0F3809) },
8704 { PREFIX_TABLE (PREFIX_VEX_0F380A) },
8705 { PREFIX_TABLE (PREFIX_VEX_0F380B) },
8706 { PREFIX_TABLE (PREFIX_VEX_0F380C) },
8707 { PREFIX_TABLE (PREFIX_VEX_0F380D) },
8708 { PREFIX_TABLE (PREFIX_VEX_0F380E) },
8709 { PREFIX_TABLE (PREFIX_VEX_0F380F) },
c0f3af97 8710 /* 10 */
592d1631
L
8711 { Bad_Opcode },
8712 { Bad_Opcode },
8713 { Bad_Opcode },
592a252b 8714 { PREFIX_TABLE (PREFIX_VEX_0F3813) },
592d1631
L
8715 { Bad_Opcode },
8716 { Bad_Opcode },
6c30d220 8717 { PREFIX_TABLE (PREFIX_VEX_0F3816) },
592a252b 8718 { PREFIX_TABLE (PREFIX_VEX_0F3817) },
c0f3af97 8719 /* 18 */
592a252b
L
8720 { PREFIX_TABLE (PREFIX_VEX_0F3818) },
8721 { PREFIX_TABLE (PREFIX_VEX_0F3819) },
8722 { PREFIX_TABLE (PREFIX_VEX_0F381A) },
592d1631 8723 { Bad_Opcode },
592a252b
L
8724 { PREFIX_TABLE (PREFIX_VEX_0F381C) },
8725 { PREFIX_TABLE (PREFIX_VEX_0F381D) },
8726 { PREFIX_TABLE (PREFIX_VEX_0F381E) },
592d1631 8727 { Bad_Opcode },
c0f3af97 8728 /* 20 */
592a252b
L
8729 { PREFIX_TABLE (PREFIX_VEX_0F3820) },
8730 { PREFIX_TABLE (PREFIX_VEX_0F3821) },
8731 { PREFIX_TABLE (PREFIX_VEX_0F3822) },
8732 { PREFIX_TABLE (PREFIX_VEX_0F3823) },
8733 { PREFIX_TABLE (PREFIX_VEX_0F3824) },
8734 { PREFIX_TABLE (PREFIX_VEX_0F3825) },
592d1631
L
8735 { Bad_Opcode },
8736 { Bad_Opcode },
c0f3af97 8737 /* 28 */
592a252b
L
8738 { PREFIX_TABLE (PREFIX_VEX_0F3828) },
8739 { PREFIX_TABLE (PREFIX_VEX_0F3829) },
8740 { PREFIX_TABLE (PREFIX_VEX_0F382A) },
8741 { PREFIX_TABLE (PREFIX_VEX_0F382B) },
8742 { PREFIX_TABLE (PREFIX_VEX_0F382C) },
8743 { PREFIX_TABLE (PREFIX_VEX_0F382D) },
8744 { PREFIX_TABLE (PREFIX_VEX_0F382E) },
8745 { PREFIX_TABLE (PREFIX_VEX_0F382F) },
c0f3af97 8746 /* 30 */
592a252b
L
8747 { PREFIX_TABLE (PREFIX_VEX_0F3830) },
8748 { PREFIX_TABLE (PREFIX_VEX_0F3831) },
8749 { PREFIX_TABLE (PREFIX_VEX_0F3832) },
8750 { PREFIX_TABLE (PREFIX_VEX_0F3833) },
8751 { PREFIX_TABLE (PREFIX_VEX_0F3834) },
8752 { PREFIX_TABLE (PREFIX_VEX_0F3835) },
6c30d220 8753 { PREFIX_TABLE (PREFIX_VEX_0F3836) },
592a252b 8754 { PREFIX_TABLE (PREFIX_VEX_0F3837) },
c0f3af97 8755 /* 38 */
592a252b
L
8756 { PREFIX_TABLE (PREFIX_VEX_0F3838) },
8757 { PREFIX_TABLE (PREFIX_VEX_0F3839) },
8758 { PREFIX_TABLE (PREFIX_VEX_0F383A) },
8759 { PREFIX_TABLE (PREFIX_VEX_0F383B) },
8760 { PREFIX_TABLE (PREFIX_VEX_0F383C) },
8761 { PREFIX_TABLE (PREFIX_VEX_0F383D) },
8762 { PREFIX_TABLE (PREFIX_VEX_0F383E) },
8763 { PREFIX_TABLE (PREFIX_VEX_0F383F) },
c0f3af97 8764 /* 40 */
592a252b
L
8765 { PREFIX_TABLE (PREFIX_VEX_0F3840) },
8766 { PREFIX_TABLE (PREFIX_VEX_0F3841) },
592d1631
L
8767 { Bad_Opcode },
8768 { Bad_Opcode },
8769 { Bad_Opcode },
6c30d220
L
8770 { PREFIX_TABLE (PREFIX_VEX_0F3845) },
8771 { PREFIX_TABLE (PREFIX_VEX_0F3846) },
8772 { PREFIX_TABLE (PREFIX_VEX_0F3847) },
c0f3af97 8773 /* 48 */
592d1631
L
8774 { Bad_Opcode },
8775 { Bad_Opcode },
8776 { Bad_Opcode },
8777 { Bad_Opcode },
8778 { Bad_Opcode },
8779 { Bad_Opcode },
8780 { Bad_Opcode },
8781 { Bad_Opcode },
c0f3af97 8782 /* 50 */
592d1631
L
8783 { Bad_Opcode },
8784 { Bad_Opcode },
8785 { Bad_Opcode },
8786 { Bad_Opcode },
8787 { Bad_Opcode },
8788 { Bad_Opcode },
8789 { Bad_Opcode },
8790 { Bad_Opcode },
c0f3af97 8791 /* 58 */
6c30d220
L
8792 { PREFIX_TABLE (PREFIX_VEX_0F3858) },
8793 { PREFIX_TABLE (PREFIX_VEX_0F3859) },
8794 { PREFIX_TABLE (PREFIX_VEX_0F385A) },
592d1631
L
8795 { Bad_Opcode },
8796 { Bad_Opcode },
8797 { Bad_Opcode },
8798 { Bad_Opcode },
8799 { Bad_Opcode },
c0f3af97 8800 /* 60 */
592d1631
L
8801 { Bad_Opcode },
8802 { Bad_Opcode },
8803 { Bad_Opcode },
8804 { Bad_Opcode },
8805 { Bad_Opcode },
8806 { Bad_Opcode },
8807 { Bad_Opcode },
8808 { Bad_Opcode },
c0f3af97 8809 /* 68 */
592d1631
L
8810 { Bad_Opcode },
8811 { Bad_Opcode },
8812 { Bad_Opcode },
8813 { Bad_Opcode },
8814 { Bad_Opcode },
8815 { Bad_Opcode },
8816 { Bad_Opcode },
8817 { Bad_Opcode },
c0f3af97 8818 /* 70 */
592d1631
L
8819 { Bad_Opcode },
8820 { Bad_Opcode },
8821 { Bad_Opcode },
8822 { Bad_Opcode },
8823 { Bad_Opcode },
8824 { Bad_Opcode },
8825 { Bad_Opcode },
8826 { Bad_Opcode },
c0f3af97 8827 /* 78 */
6c30d220
L
8828 { PREFIX_TABLE (PREFIX_VEX_0F3878) },
8829 { PREFIX_TABLE (PREFIX_VEX_0F3879) },
592d1631
L
8830 { Bad_Opcode },
8831 { Bad_Opcode },
8832 { Bad_Opcode },
8833 { Bad_Opcode },
8834 { Bad_Opcode },
8835 { Bad_Opcode },
c0f3af97 8836 /* 80 */
592d1631
L
8837 { Bad_Opcode },
8838 { Bad_Opcode },
8839 { Bad_Opcode },
8840 { Bad_Opcode },
8841 { Bad_Opcode },
8842 { Bad_Opcode },
8843 { Bad_Opcode },
8844 { Bad_Opcode },
c0f3af97 8845 /* 88 */
592d1631
L
8846 { Bad_Opcode },
8847 { Bad_Opcode },
8848 { Bad_Opcode },
8849 { Bad_Opcode },
6c30d220 8850 { PREFIX_TABLE (PREFIX_VEX_0F388C) },
592d1631 8851 { Bad_Opcode },
6c30d220 8852 { PREFIX_TABLE (PREFIX_VEX_0F388E) },
592d1631 8853 { Bad_Opcode },
c0f3af97 8854 /* 90 */
6c30d220
L
8855 { PREFIX_TABLE (PREFIX_VEX_0F3890) },
8856 { PREFIX_TABLE (PREFIX_VEX_0F3891) },
8857 { PREFIX_TABLE (PREFIX_VEX_0F3892) },
8858 { PREFIX_TABLE (PREFIX_VEX_0F3893) },
592d1631
L
8859 { Bad_Opcode },
8860 { Bad_Opcode },
592a252b
L
8861 { PREFIX_TABLE (PREFIX_VEX_0F3896) },
8862 { PREFIX_TABLE (PREFIX_VEX_0F3897) },
c0f3af97 8863 /* 98 */
592a252b
L
8864 { PREFIX_TABLE (PREFIX_VEX_0F3898) },
8865 { PREFIX_TABLE (PREFIX_VEX_0F3899) },
8866 { PREFIX_TABLE (PREFIX_VEX_0F389A) },
8867 { PREFIX_TABLE (PREFIX_VEX_0F389B) },
8868 { PREFIX_TABLE (PREFIX_VEX_0F389C) },
8869 { PREFIX_TABLE (PREFIX_VEX_0F389D) },
8870 { PREFIX_TABLE (PREFIX_VEX_0F389E) },
8871 { PREFIX_TABLE (PREFIX_VEX_0F389F) },
c0f3af97 8872 /* a0 */
592d1631
L
8873 { Bad_Opcode },
8874 { Bad_Opcode },
8875 { Bad_Opcode },
8876 { Bad_Opcode },
8877 { Bad_Opcode },
8878 { Bad_Opcode },
592a252b
L
8879 { PREFIX_TABLE (PREFIX_VEX_0F38A6) },
8880 { PREFIX_TABLE (PREFIX_VEX_0F38A7) },
c0f3af97 8881 /* a8 */
592a252b
L
8882 { PREFIX_TABLE (PREFIX_VEX_0F38A8) },
8883 { PREFIX_TABLE (PREFIX_VEX_0F38A9) },
8884 { PREFIX_TABLE (PREFIX_VEX_0F38AA) },
8885 { PREFIX_TABLE (PREFIX_VEX_0F38AB) },
8886 { PREFIX_TABLE (PREFIX_VEX_0F38AC) },
8887 { PREFIX_TABLE (PREFIX_VEX_0F38AD) },
8888 { PREFIX_TABLE (PREFIX_VEX_0F38AE) },
8889 { PREFIX_TABLE (PREFIX_VEX_0F38AF) },
c0f3af97 8890 /* b0 */
592d1631
L
8891 { Bad_Opcode },
8892 { Bad_Opcode },
8893 { Bad_Opcode },
8894 { Bad_Opcode },
8895 { Bad_Opcode },
8896 { Bad_Opcode },
592a252b
L
8897 { PREFIX_TABLE (PREFIX_VEX_0F38B6) },
8898 { PREFIX_TABLE (PREFIX_VEX_0F38B7) },
c0f3af97 8899 /* b8 */
592a252b
L
8900 { PREFIX_TABLE (PREFIX_VEX_0F38B8) },
8901 { PREFIX_TABLE (PREFIX_VEX_0F38B9) },
8902 { PREFIX_TABLE (PREFIX_VEX_0F38BA) },
8903 { PREFIX_TABLE (PREFIX_VEX_0F38BB) },
8904 { PREFIX_TABLE (PREFIX_VEX_0F38BC) },
8905 { PREFIX_TABLE (PREFIX_VEX_0F38BD) },
8906 { PREFIX_TABLE (PREFIX_VEX_0F38BE) },
8907 { PREFIX_TABLE (PREFIX_VEX_0F38BF) },
c0f3af97 8908 /* c0 */
592d1631
L
8909 { Bad_Opcode },
8910 { Bad_Opcode },
8911 { Bad_Opcode },
8912 { Bad_Opcode },
8913 { Bad_Opcode },
8914 { Bad_Opcode },
8915 { Bad_Opcode },
8916 { Bad_Opcode },
c0f3af97 8917 /* c8 */
592d1631
L
8918 { Bad_Opcode },
8919 { Bad_Opcode },
8920 { Bad_Opcode },
8921 { Bad_Opcode },
8922 { Bad_Opcode },
8923 { Bad_Opcode },
8924 { Bad_Opcode },
48521003 8925 { PREFIX_TABLE (PREFIX_VEX_0F38CF) },
c0f3af97 8926 /* d0 */
592d1631
L
8927 { Bad_Opcode },
8928 { Bad_Opcode },
8929 { Bad_Opcode },
8930 { Bad_Opcode },
8931 { Bad_Opcode },
8932 { Bad_Opcode },
8933 { Bad_Opcode },
8934 { Bad_Opcode },
c0f3af97 8935 /* d8 */
592d1631
L
8936 { Bad_Opcode },
8937 { Bad_Opcode },
8938 { Bad_Opcode },
592a252b
L
8939 { PREFIX_TABLE (PREFIX_VEX_0F38DB) },
8940 { PREFIX_TABLE (PREFIX_VEX_0F38DC) },
8941 { PREFIX_TABLE (PREFIX_VEX_0F38DD) },
8942 { PREFIX_TABLE (PREFIX_VEX_0F38DE) },
8943 { PREFIX_TABLE (PREFIX_VEX_0F38DF) },
c0f3af97 8944 /* e0 */
592d1631
L
8945 { Bad_Opcode },
8946 { Bad_Opcode },
8947 { Bad_Opcode },
8948 { Bad_Opcode },
8949 { Bad_Opcode },
8950 { Bad_Opcode },
8951 { Bad_Opcode },
8952 { Bad_Opcode },
c0f3af97 8953 /* e8 */
592d1631
L
8954 { Bad_Opcode },
8955 { Bad_Opcode },
8956 { Bad_Opcode },
8957 { Bad_Opcode },
8958 { Bad_Opcode },
8959 { Bad_Opcode },
8960 { Bad_Opcode },
8961 { Bad_Opcode },
c0f3af97 8962 /* f0 */
592d1631
L
8963 { Bad_Opcode },
8964 { Bad_Opcode },
f12dc422
L
8965 { PREFIX_TABLE (PREFIX_VEX_0F38F2) },
8966 { REG_TABLE (REG_VEX_0F38F3) },
592d1631 8967 { Bad_Opcode },
6c30d220
L
8968 { PREFIX_TABLE (PREFIX_VEX_0F38F5) },
8969 { PREFIX_TABLE (PREFIX_VEX_0F38F6) },
f12dc422 8970 { PREFIX_TABLE (PREFIX_VEX_0F38F7) },
c0f3af97 8971 /* f8 */
592d1631
L
8972 { Bad_Opcode },
8973 { Bad_Opcode },
8974 { Bad_Opcode },
8975 { Bad_Opcode },
8976 { Bad_Opcode },
8977 { Bad_Opcode },
8978 { Bad_Opcode },
8979 { Bad_Opcode },
c0f3af97
L
8980 },
8981 /* VEX_0F3A */
8982 {
8983 /* 00 */
6c30d220
L
8984 { PREFIX_TABLE (PREFIX_VEX_0F3A00) },
8985 { PREFIX_TABLE (PREFIX_VEX_0F3A01) },
8986 { PREFIX_TABLE (PREFIX_VEX_0F3A02) },
592d1631 8987 { Bad_Opcode },
592a252b
L
8988 { PREFIX_TABLE (PREFIX_VEX_0F3A04) },
8989 { PREFIX_TABLE (PREFIX_VEX_0F3A05) },
8990 { PREFIX_TABLE (PREFIX_VEX_0F3A06) },
592d1631 8991 { Bad_Opcode },
c0f3af97 8992 /* 08 */
592a252b
L
8993 { PREFIX_TABLE (PREFIX_VEX_0F3A08) },
8994 { PREFIX_TABLE (PREFIX_VEX_0F3A09) },
8995 { PREFIX_TABLE (PREFIX_VEX_0F3A0A) },
8996 { PREFIX_TABLE (PREFIX_VEX_0F3A0B) },
8997 { PREFIX_TABLE (PREFIX_VEX_0F3A0C) },
8998 { PREFIX_TABLE (PREFIX_VEX_0F3A0D) },
8999 { PREFIX_TABLE (PREFIX_VEX_0F3A0E) },
9000 { PREFIX_TABLE (PREFIX_VEX_0F3A0F) },
c0f3af97 9001 /* 10 */
592d1631
L
9002 { Bad_Opcode },
9003 { Bad_Opcode },
9004 { Bad_Opcode },
9005 { Bad_Opcode },
592a252b
L
9006 { PREFIX_TABLE (PREFIX_VEX_0F3A14) },
9007 { PREFIX_TABLE (PREFIX_VEX_0F3A15) },
9008 { PREFIX_TABLE (PREFIX_VEX_0F3A16) },
9009 { PREFIX_TABLE (PREFIX_VEX_0F3A17) },
c0f3af97 9010 /* 18 */
592a252b
L
9011 { PREFIX_TABLE (PREFIX_VEX_0F3A18) },
9012 { PREFIX_TABLE (PREFIX_VEX_0F3A19) },
592d1631
L
9013 { Bad_Opcode },
9014 { Bad_Opcode },
9015 { Bad_Opcode },
592a252b 9016 { PREFIX_TABLE (PREFIX_VEX_0F3A1D) },
592d1631
L
9017 { Bad_Opcode },
9018 { Bad_Opcode },
c0f3af97 9019 /* 20 */
592a252b
L
9020 { PREFIX_TABLE (PREFIX_VEX_0F3A20) },
9021 { PREFIX_TABLE (PREFIX_VEX_0F3A21) },
9022 { PREFIX_TABLE (PREFIX_VEX_0F3A22) },
592d1631
L
9023 { Bad_Opcode },
9024 { Bad_Opcode },
9025 { Bad_Opcode },
9026 { Bad_Opcode },
9027 { Bad_Opcode },
c0f3af97 9028 /* 28 */
592d1631
L
9029 { Bad_Opcode },
9030 { Bad_Opcode },
9031 { Bad_Opcode },
9032 { Bad_Opcode },
9033 { Bad_Opcode },
9034 { Bad_Opcode },
9035 { Bad_Opcode },
9036 { Bad_Opcode },
c0f3af97 9037 /* 30 */
43234a1e 9038 { PREFIX_TABLE (PREFIX_VEX_0F3A30) },
1ba585e8 9039 { PREFIX_TABLE (PREFIX_VEX_0F3A31) },
43234a1e 9040 { PREFIX_TABLE (PREFIX_VEX_0F3A32) },
1ba585e8 9041 { PREFIX_TABLE (PREFIX_VEX_0F3A33) },
592d1631
L
9042 { Bad_Opcode },
9043 { Bad_Opcode },
9044 { Bad_Opcode },
9045 { Bad_Opcode },
c0f3af97 9046 /* 38 */
6c30d220
L
9047 { PREFIX_TABLE (PREFIX_VEX_0F3A38) },
9048 { PREFIX_TABLE (PREFIX_VEX_0F3A39) },
592d1631
L
9049 { Bad_Opcode },
9050 { Bad_Opcode },
9051 { Bad_Opcode },
9052 { Bad_Opcode },
9053 { Bad_Opcode },
9054 { Bad_Opcode },
c0f3af97 9055 /* 40 */
592a252b
L
9056 { PREFIX_TABLE (PREFIX_VEX_0F3A40) },
9057 { PREFIX_TABLE (PREFIX_VEX_0F3A41) },
9058 { PREFIX_TABLE (PREFIX_VEX_0F3A42) },
592d1631 9059 { Bad_Opcode },
592a252b 9060 { PREFIX_TABLE (PREFIX_VEX_0F3A44) },
592d1631 9061 { Bad_Opcode },
6c30d220 9062 { PREFIX_TABLE (PREFIX_VEX_0F3A46) },
592d1631 9063 { Bad_Opcode },
c0f3af97 9064 /* 48 */
592a252b
L
9065 { PREFIX_TABLE (PREFIX_VEX_0F3A48) },
9066 { PREFIX_TABLE (PREFIX_VEX_0F3A49) },
9067 { PREFIX_TABLE (PREFIX_VEX_0F3A4A) },
9068 { PREFIX_TABLE (PREFIX_VEX_0F3A4B) },
9069 { PREFIX_TABLE (PREFIX_VEX_0F3A4C) },
592d1631
L
9070 { Bad_Opcode },
9071 { Bad_Opcode },
9072 { Bad_Opcode },
c0f3af97 9073 /* 50 */
592d1631
L
9074 { Bad_Opcode },
9075 { Bad_Opcode },
9076 { Bad_Opcode },
9077 { Bad_Opcode },
9078 { Bad_Opcode },
9079 { Bad_Opcode },
9080 { Bad_Opcode },
9081 { Bad_Opcode },
c0f3af97 9082 /* 58 */
592d1631
L
9083 { Bad_Opcode },
9084 { Bad_Opcode },
9085 { Bad_Opcode },
9086 { Bad_Opcode },
592a252b
L
9087 { PREFIX_TABLE (PREFIX_VEX_0F3A5C) },
9088 { PREFIX_TABLE (PREFIX_VEX_0F3A5D) },
9089 { PREFIX_TABLE (PREFIX_VEX_0F3A5E) },
9090 { PREFIX_TABLE (PREFIX_VEX_0F3A5F) },
c0f3af97 9091 /* 60 */
592a252b
L
9092 { PREFIX_TABLE (PREFIX_VEX_0F3A60) },
9093 { PREFIX_TABLE (PREFIX_VEX_0F3A61) },
9094 { PREFIX_TABLE (PREFIX_VEX_0F3A62) },
9095 { PREFIX_TABLE (PREFIX_VEX_0F3A63) },
592d1631
L
9096 { Bad_Opcode },
9097 { Bad_Opcode },
9098 { Bad_Opcode },
9099 { Bad_Opcode },
c0f3af97 9100 /* 68 */
592a252b
L
9101 { PREFIX_TABLE (PREFIX_VEX_0F3A68) },
9102 { PREFIX_TABLE (PREFIX_VEX_0F3A69) },
9103 { PREFIX_TABLE (PREFIX_VEX_0F3A6A) },
9104 { PREFIX_TABLE (PREFIX_VEX_0F3A6B) },
9105 { PREFIX_TABLE (PREFIX_VEX_0F3A6C) },
9106 { PREFIX_TABLE (PREFIX_VEX_0F3A6D) },
9107 { PREFIX_TABLE (PREFIX_VEX_0F3A6E) },
9108 { PREFIX_TABLE (PREFIX_VEX_0F3A6F) },
c0f3af97 9109 /* 70 */
592d1631
L
9110 { Bad_Opcode },
9111 { Bad_Opcode },
9112 { Bad_Opcode },
9113 { Bad_Opcode },
9114 { Bad_Opcode },
9115 { Bad_Opcode },
9116 { Bad_Opcode },
9117 { Bad_Opcode },
c0f3af97 9118 /* 78 */
592a252b
L
9119 { PREFIX_TABLE (PREFIX_VEX_0F3A78) },
9120 { PREFIX_TABLE (PREFIX_VEX_0F3A79) },
9121 { PREFIX_TABLE (PREFIX_VEX_0F3A7A) },
9122 { PREFIX_TABLE (PREFIX_VEX_0F3A7B) },
9123 { PREFIX_TABLE (PREFIX_VEX_0F3A7C) },
9124 { PREFIX_TABLE (PREFIX_VEX_0F3A7D) },
9125 { PREFIX_TABLE (PREFIX_VEX_0F3A7E) },
9126 { PREFIX_TABLE (PREFIX_VEX_0F3A7F) },
c0f3af97 9127 /* 80 */
592d1631
L
9128 { Bad_Opcode },
9129 { Bad_Opcode },
9130 { Bad_Opcode },
9131 { Bad_Opcode },
9132 { Bad_Opcode },
9133 { Bad_Opcode },
9134 { Bad_Opcode },
9135 { Bad_Opcode },
c0f3af97 9136 /* 88 */
592d1631
L
9137 { Bad_Opcode },
9138 { Bad_Opcode },
9139 { Bad_Opcode },
9140 { Bad_Opcode },
9141 { Bad_Opcode },
9142 { Bad_Opcode },
9143 { Bad_Opcode },
9144 { Bad_Opcode },
c0f3af97 9145 /* 90 */
592d1631
L
9146 { Bad_Opcode },
9147 { Bad_Opcode },
9148 { Bad_Opcode },
9149 { Bad_Opcode },
9150 { Bad_Opcode },
9151 { Bad_Opcode },
9152 { Bad_Opcode },
9153 { Bad_Opcode },
c0f3af97 9154 /* 98 */
592d1631
L
9155 { Bad_Opcode },
9156 { Bad_Opcode },
9157 { Bad_Opcode },
9158 { Bad_Opcode },
9159 { Bad_Opcode },
9160 { Bad_Opcode },
9161 { Bad_Opcode },
9162 { Bad_Opcode },
c0f3af97 9163 /* a0 */
592d1631
L
9164 { Bad_Opcode },
9165 { Bad_Opcode },
9166 { Bad_Opcode },
9167 { Bad_Opcode },
9168 { Bad_Opcode },
9169 { Bad_Opcode },
9170 { Bad_Opcode },
9171 { Bad_Opcode },
c0f3af97 9172 /* a8 */
592d1631
L
9173 { Bad_Opcode },
9174 { Bad_Opcode },
9175 { Bad_Opcode },
9176 { Bad_Opcode },
9177 { Bad_Opcode },
9178 { Bad_Opcode },
9179 { Bad_Opcode },
9180 { Bad_Opcode },
c0f3af97 9181 /* b0 */
592d1631
L
9182 { Bad_Opcode },
9183 { Bad_Opcode },
9184 { Bad_Opcode },
9185 { Bad_Opcode },
9186 { Bad_Opcode },
9187 { Bad_Opcode },
9188 { Bad_Opcode },
9189 { Bad_Opcode },
c0f3af97 9190 /* b8 */
592d1631
L
9191 { Bad_Opcode },
9192 { Bad_Opcode },
9193 { Bad_Opcode },
9194 { Bad_Opcode },
9195 { Bad_Opcode },
9196 { Bad_Opcode },
9197 { Bad_Opcode },
9198 { Bad_Opcode },
c0f3af97 9199 /* c0 */
592d1631
L
9200 { Bad_Opcode },
9201 { Bad_Opcode },
9202 { Bad_Opcode },
9203 { Bad_Opcode },
9204 { Bad_Opcode },
9205 { Bad_Opcode },
9206 { Bad_Opcode },
9207 { Bad_Opcode },
c0f3af97 9208 /* c8 */
592d1631
L
9209 { Bad_Opcode },
9210 { Bad_Opcode },
9211 { Bad_Opcode },
9212 { Bad_Opcode },
9213 { Bad_Opcode },
9214 { Bad_Opcode },
48521003
IT
9215 { PREFIX_TABLE(PREFIX_VEX_0F3ACE) },
9216 { PREFIX_TABLE(PREFIX_VEX_0F3ACF) },
c0f3af97 9217 /* d0 */
592d1631
L
9218 { Bad_Opcode },
9219 { Bad_Opcode },
9220 { Bad_Opcode },
9221 { Bad_Opcode },
9222 { Bad_Opcode },
9223 { Bad_Opcode },
9224 { Bad_Opcode },
9225 { Bad_Opcode },
c0f3af97 9226 /* d8 */
592d1631
L
9227 { Bad_Opcode },
9228 { Bad_Opcode },
9229 { Bad_Opcode },
9230 { Bad_Opcode },
9231 { Bad_Opcode },
9232 { Bad_Opcode },
9233 { Bad_Opcode },
592a252b 9234 { PREFIX_TABLE (PREFIX_VEX_0F3ADF) },
c0f3af97 9235 /* e0 */
592d1631
L
9236 { Bad_Opcode },
9237 { Bad_Opcode },
9238 { Bad_Opcode },
9239 { Bad_Opcode },
9240 { Bad_Opcode },
9241 { Bad_Opcode },
9242 { Bad_Opcode },
9243 { Bad_Opcode },
c0f3af97 9244 /* e8 */
592d1631
L
9245 { Bad_Opcode },
9246 { Bad_Opcode },
9247 { Bad_Opcode },
9248 { Bad_Opcode },
9249 { Bad_Opcode },
9250 { Bad_Opcode },
9251 { Bad_Opcode },
9252 { Bad_Opcode },
c0f3af97 9253 /* f0 */
6c30d220 9254 { PREFIX_TABLE (PREFIX_VEX_0F3AF0) },
592d1631
L
9255 { Bad_Opcode },
9256 { Bad_Opcode },
9257 { Bad_Opcode },
9258 { Bad_Opcode },
9259 { Bad_Opcode },
9260 { Bad_Opcode },
9261 { Bad_Opcode },
c0f3af97 9262 /* f8 */
592d1631
L
9263 { Bad_Opcode },
9264 { Bad_Opcode },
9265 { Bad_Opcode },
9266 { Bad_Opcode },
9267 { Bad_Opcode },
9268 { Bad_Opcode },
9269 { Bad_Opcode },
9270 { Bad_Opcode },
c0f3af97
L
9271 },
9272};
9273
43234a1e
L
9274#define NEED_OPCODE_TABLE
9275#include "i386-dis-evex.h"
9276#undef NEED_OPCODE_TABLE
c0f3af97 9277static const struct dis386 vex_len_table[][2] = {
592a252b 9278 /* VEX_LEN_0F12_P_0_M_0 */
c0f3af97 9279 {
ec6f095a 9280 { "vmovlps", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9281 },
9282
592a252b 9283 /* VEX_LEN_0F12_P_0_M_1 */
c0f3af97 9284 {
ec6f095a 9285 { "vmovhlps", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9286 },
9287
592a252b 9288 /* VEX_LEN_0F12_P_2 */
c0f3af97 9289 {
ec6f095a 9290 { "vmovlpd", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9291 },
9292
592a252b 9293 /* VEX_LEN_0F13_M_0 */
c0f3af97 9294 {
ec6f095a 9295 { "vmovlpX", { EXq, XM }, 0 },
c0f3af97
L
9296 },
9297
592a252b 9298 /* VEX_LEN_0F16_P_0_M_0 */
c0f3af97 9299 {
ec6f095a 9300 { "vmovhps", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9301 },
9302
592a252b 9303 /* VEX_LEN_0F16_P_0_M_1 */
c0f3af97 9304 {
ec6f095a 9305 { "vmovlhps", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9306 },
9307
592a252b 9308 /* VEX_LEN_0F16_P_2 */
c0f3af97 9309 {
ec6f095a 9310 { "vmovhpd", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9311 },
9312
592a252b 9313 /* VEX_LEN_0F17_M_0 */
c0f3af97 9314 {
ec6f095a 9315 { "vmovhpX", { EXq, XM }, 0 },
c0f3af97
L
9316 },
9317
592a252b 9318 /* VEX_LEN_0F2A_P_1 */
c0f3af97 9319 {
bf890a93
IT
9320 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev }, 0 },
9321 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev }, 0 },
c0f3af97
L
9322 },
9323
592a252b 9324 /* VEX_LEN_0F2A_P_3 */
c0f3af97 9325 {
bf890a93
IT
9326 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev }, 0 },
9327 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev }, 0 },
c0f3af97
L
9328 },
9329
592a252b 9330 /* VEX_LEN_0F2C_P_1 */
c0f3af97 9331 {
9646c87b
JB
9332 { "vcvttss2si", { Gv, EXdScalar }, 0 },
9333 { "vcvttss2si", { Gv, EXdScalar }, 0 },
c0f3af97
L
9334 },
9335
592a252b 9336 /* VEX_LEN_0F2C_P_3 */
c0f3af97 9337 {
9646c87b
JB
9338 { "vcvttsd2si", { Gv, EXqScalar }, 0 },
9339 { "vcvttsd2si", { Gv, EXqScalar }, 0 },
c0f3af97
L
9340 },
9341
592a252b 9342 /* VEX_LEN_0F2D_P_1 */
c0f3af97 9343 {
9646c87b
JB
9344 { "vcvtss2si", { Gv, EXdScalar }, 0 },
9345 { "vcvtss2si", { Gv, EXdScalar }, 0 },
c0f3af97
L
9346 },
9347
592a252b 9348 /* VEX_LEN_0F2D_P_3 */
c0f3af97 9349 {
9646c87b
JB
9350 { "vcvtsd2si", { Gv, EXqScalar }, 0 },
9351 { "vcvtsd2si", { Gv, EXqScalar }, 0 },
c0f3af97
L
9352 },
9353
43234a1e
L
9354 /* VEX_LEN_0F41_P_0 */
9355 {
9356 { Bad_Opcode },
9357 { VEX_W_TABLE (VEX_W_0F41_P_0_LEN_1) },
9358 },
1ba585e8
IT
9359 /* VEX_LEN_0F41_P_2 */
9360 {
9361 { Bad_Opcode },
9362 { VEX_W_TABLE (VEX_W_0F41_P_2_LEN_1) },
9363 },
43234a1e
L
9364 /* VEX_LEN_0F42_P_0 */
9365 {
9366 { Bad_Opcode },
9367 { VEX_W_TABLE (VEX_W_0F42_P_0_LEN_1) },
9368 },
1ba585e8
IT
9369 /* VEX_LEN_0F42_P_2 */
9370 {
9371 { Bad_Opcode },
9372 { VEX_W_TABLE (VEX_W_0F42_P_2_LEN_1) },
9373 },
43234a1e
L
9374 /* VEX_LEN_0F44_P_0 */
9375 {
9376 { VEX_W_TABLE (VEX_W_0F44_P_0_LEN_0) },
9377 },
1ba585e8
IT
9378 /* VEX_LEN_0F44_P_2 */
9379 {
9380 { VEX_W_TABLE (VEX_W_0F44_P_2_LEN_0) },
9381 },
43234a1e
L
9382 /* VEX_LEN_0F45_P_0 */
9383 {
9384 { Bad_Opcode },
9385 { VEX_W_TABLE (VEX_W_0F45_P_0_LEN_1) },
9386 },
1ba585e8
IT
9387 /* VEX_LEN_0F45_P_2 */
9388 {
9389 { Bad_Opcode },
9390 { VEX_W_TABLE (VEX_W_0F45_P_2_LEN_1) },
9391 },
43234a1e
L
9392 /* VEX_LEN_0F46_P_0 */
9393 {
9394 { Bad_Opcode },
9395 { VEX_W_TABLE (VEX_W_0F46_P_0_LEN_1) },
9396 },
1ba585e8
IT
9397 /* VEX_LEN_0F46_P_2 */
9398 {
9399 { Bad_Opcode },
9400 { VEX_W_TABLE (VEX_W_0F46_P_2_LEN_1) },
9401 },
43234a1e
L
9402 /* VEX_LEN_0F47_P_0 */
9403 {
9404 { Bad_Opcode },
9405 { VEX_W_TABLE (VEX_W_0F47_P_0_LEN_1) },
9406 },
1ba585e8
IT
9407 /* VEX_LEN_0F47_P_2 */
9408 {
9409 { Bad_Opcode },
9410 { VEX_W_TABLE (VEX_W_0F47_P_2_LEN_1) },
9411 },
9412 /* VEX_LEN_0F4A_P_0 */
9413 {
9414 { Bad_Opcode },
9415 { VEX_W_TABLE (VEX_W_0F4A_P_0_LEN_1) },
9416 },
9417 /* VEX_LEN_0F4A_P_2 */
9418 {
9419 { Bad_Opcode },
9420 { VEX_W_TABLE (VEX_W_0F4A_P_2_LEN_1) },
9421 },
9422 /* VEX_LEN_0F4B_P_0 */
9423 {
9424 { Bad_Opcode },
9425 { VEX_W_TABLE (VEX_W_0F4B_P_0_LEN_1) },
9426 },
43234a1e
L
9427 /* VEX_LEN_0F4B_P_2 */
9428 {
9429 { Bad_Opcode },
9430 { VEX_W_TABLE (VEX_W_0F4B_P_2_LEN_1) },
9431 },
9432
ec6f095a 9433 /* VEX_LEN_0F6E_P_2 */
c0f3af97 9434 {
ec6f095a 9435 { "vmovK", { XMScalar, Edq }, 0 },
c0f3af97
L
9436 },
9437
ec6f095a 9438 /* VEX_LEN_0F77_P_1 */
c0f3af97 9439 {
ec6f095a
L
9440 { "vzeroupper", { XX }, 0 },
9441 { "vzeroall", { XX }, 0 },
c0f3af97
L
9442 },
9443
ec6f095a 9444 /* VEX_LEN_0F7E_P_1 */
c0f3af97 9445 {
ec6f095a 9446 { "vmovq", { XMScalar, EXqScalar }, 0 },
c0f3af97
L
9447 },
9448
ec6f095a 9449 /* VEX_LEN_0F7E_P_2 */
c0f3af97 9450 {
ec6f095a 9451 { "vmovK", { Edq, XMScalar }, 0 },
c0f3af97
L
9452 },
9453
ec6f095a 9454 /* VEX_LEN_0F90_P_0 */
c0f3af97 9455 {
ec6f095a 9456 { VEX_W_TABLE (VEX_W_0F90_P_0_LEN_0) },
c0f3af97
L
9457 },
9458
ec6f095a 9459 /* VEX_LEN_0F90_P_2 */
c0f3af97 9460 {
ec6f095a 9461 { VEX_W_TABLE (VEX_W_0F90_P_2_LEN_0) },
c0f3af97
L
9462 },
9463
ec6f095a 9464 /* VEX_LEN_0F91_P_0 */
c0f3af97 9465 {
ec6f095a 9466 { VEX_W_TABLE (VEX_W_0F91_P_0_LEN_0) },
c0f3af97
L
9467 },
9468
ec6f095a 9469 /* VEX_LEN_0F91_P_2 */
c0f3af97 9470 {
ec6f095a 9471 { VEX_W_TABLE (VEX_W_0F91_P_2_LEN_0) },
c0f3af97
L
9472 },
9473
ec6f095a 9474 /* VEX_LEN_0F92_P_0 */
c0f3af97 9475 {
ec6f095a 9476 { VEX_W_TABLE (VEX_W_0F92_P_0_LEN_0) },
c0f3af97
L
9477 },
9478
ec6f095a 9479 /* VEX_LEN_0F92_P_2 */
c0f3af97 9480 {
ec6f095a 9481 { VEX_W_TABLE (VEX_W_0F92_P_2_LEN_0) },
c0f3af97
L
9482 },
9483
ec6f095a 9484 /* VEX_LEN_0F92_P_3 */
c0f3af97 9485 {
58a211d2 9486 { MOD_TABLE (MOD_VEX_0F92_P_3_LEN_0) },
c0f3af97
L
9487 },
9488
ec6f095a 9489 /* VEX_LEN_0F93_P_0 */
c0f3af97 9490 {
ec6f095a 9491 { VEX_W_TABLE (VEX_W_0F93_P_0_LEN_0) },
c0f3af97
L
9492 },
9493
ec6f095a 9494 /* VEX_LEN_0F93_P_2 */
c0f3af97 9495 {
ec6f095a 9496 { VEX_W_TABLE (VEX_W_0F93_P_2_LEN_0) },
c0f3af97
L
9497 },
9498
ec6f095a 9499 /* VEX_LEN_0F93_P_3 */
c0f3af97 9500 {
58a211d2 9501 { MOD_TABLE (MOD_VEX_0F93_P_3_LEN_0) },
c0f3af97
L
9502 },
9503
ec6f095a 9504 /* VEX_LEN_0F98_P_0 */
43234a1e
L
9505 {
9506 { VEX_W_TABLE (VEX_W_0F98_P_0_LEN_0) },
9507 },
9508
1ba585e8
IT
9509 /* VEX_LEN_0F98_P_2 */
9510 {
9511 { VEX_W_TABLE (VEX_W_0F98_P_2_LEN_0) },
9512 },
9513
9514 /* VEX_LEN_0F99_P_0 */
9515 {
9516 { VEX_W_TABLE (VEX_W_0F99_P_0_LEN_0) },
9517 },
9518
9519 /* VEX_LEN_0F99_P_2 */
9520 {
9521 { VEX_W_TABLE (VEX_W_0F99_P_2_LEN_0) },
9522 },
9523
6c30d220 9524 /* VEX_LEN_0FAE_R_2_M_0 */
c0f3af97 9525 {
ec6f095a 9526 { "vldmxcsr", { Md }, 0 },
c0f3af97
L
9527 },
9528
6c30d220 9529 /* VEX_LEN_0FAE_R_3_M_0 */
c0f3af97 9530 {
ec6f095a 9531 { "vstmxcsr", { Md }, 0 },
c0f3af97
L
9532 },
9533
6c30d220 9534 /* VEX_LEN_0FC4_P_2 */
c0f3af97 9535 {
b50c9f31 9536 { "vpinsrw", { XM, Vex128, Edqw, Ib }, 0 },
c0f3af97
L
9537 },
9538
6c30d220 9539 /* VEX_LEN_0FC5_P_2 */
c0f3af97 9540 {
b50c9f31 9541 { "vpextrw", { Gdq, XS, Ib }, 0 },
c0f3af97
L
9542 },
9543
6c30d220 9544 /* VEX_LEN_0FD6_P_2 */
c0f3af97 9545 {
ec6f095a 9546 { "vmovq", { EXqScalarS, XMScalar }, 0 },
c0f3af97
L
9547 },
9548
6c30d220 9549 /* VEX_LEN_0FF7_P_2 */
c0f3af97 9550 {
ec6f095a 9551 { "vmaskmovdqu", { XM, XS }, 0 },
c0f3af97
L
9552 },
9553
6c30d220 9554 /* VEX_LEN_0F3816_P_2 */
c0f3af97 9555 {
6c30d220
L
9556 { Bad_Opcode },
9557 { VEX_W_TABLE (VEX_W_0F3816_P_2) },
c0f3af97
L
9558 },
9559
6c30d220 9560 /* VEX_LEN_0F3819_P_2 */
c0f3af97 9561 {
6c30d220
L
9562 { Bad_Opcode },
9563 { VEX_W_TABLE (VEX_W_0F3819_P_2) },
c0f3af97
L
9564 },
9565
6c30d220 9566 /* VEX_LEN_0F381A_P_2_M_0 */
c0f3af97 9567 {
6c30d220
L
9568 { Bad_Opcode },
9569 { VEX_W_TABLE (VEX_W_0F381A_P_2_M_0) },
c0f3af97
L
9570 },
9571
6c30d220 9572 /* VEX_LEN_0F3836_P_2 */
c0f3af97 9573 {
6c30d220
L
9574 { Bad_Opcode },
9575 { VEX_W_TABLE (VEX_W_0F3836_P_2) },
c0f3af97
L
9576 },
9577
592a252b 9578 /* VEX_LEN_0F3841_P_2 */
c0f3af97 9579 {
ec6f095a 9580 { "vphminposuw", { XM, EXx }, 0 },
c0f3af97
L
9581 },
9582
6c30d220
L
9583 /* VEX_LEN_0F385A_P_2_M_0 */
9584 {
9585 { Bad_Opcode },
9586 { VEX_W_TABLE (VEX_W_0F385A_P_2_M_0) },
9587 },
9588
592a252b 9589 /* VEX_LEN_0F38DB_P_2 */
a5ff0eb2 9590 {
ec6f095a 9591 { "vaesimc", { XM, EXx }, 0 },
a5ff0eb2
L
9592 },
9593
f12dc422
L
9594 /* VEX_LEN_0F38F2_P_0 */
9595 {
bf890a93 9596 { "andnS", { Gdq, VexGdq, Edq }, 0 },
f12dc422
L
9597 },
9598
9599 /* VEX_LEN_0F38F3_R_1_P_0 */
9600 {
bf890a93 9601 { "blsrS", { VexGdq, Edq }, 0 },
f12dc422
L
9602 },
9603
9604 /* VEX_LEN_0F38F3_R_2_P_0 */
9605 {
bf890a93 9606 { "blsmskS", { VexGdq, Edq }, 0 },
f12dc422
L
9607 },
9608
9609 /* VEX_LEN_0F38F3_R_3_P_0 */
9610 {
bf890a93 9611 { "blsiS", { VexGdq, Edq }, 0 },
f12dc422
L
9612 },
9613
6c30d220
L
9614 /* VEX_LEN_0F38F5_P_0 */
9615 {
bf890a93 9616 { "bzhiS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
9617 },
9618
9619 /* VEX_LEN_0F38F5_P_1 */
9620 {
bf890a93 9621 { "pextS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
9622 },
9623
9624 /* VEX_LEN_0F38F5_P_3 */
9625 {
bf890a93 9626 { "pdepS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
9627 },
9628
9629 /* VEX_LEN_0F38F6_P_3 */
9630 {
bf890a93 9631 { "mulxS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
9632 },
9633
f12dc422
L
9634 /* VEX_LEN_0F38F7_P_0 */
9635 {
bf890a93 9636 { "bextrS", { Gdq, Edq, VexGdq }, 0 },
f12dc422
L
9637 },
9638
6c30d220
L
9639 /* VEX_LEN_0F38F7_P_1 */
9640 {
bf890a93 9641 { "sarxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
9642 },
9643
9644 /* VEX_LEN_0F38F7_P_2 */
9645 {
bf890a93 9646 { "shlxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
9647 },
9648
9649 /* VEX_LEN_0F38F7_P_3 */
9650 {
bf890a93 9651 { "shrxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
9652 },
9653
9654 /* VEX_LEN_0F3A00_P_2 */
9655 {
9656 { Bad_Opcode },
9657 { VEX_W_TABLE (VEX_W_0F3A00_P_2) },
9658 },
9659
9660 /* VEX_LEN_0F3A01_P_2 */
9661 {
9662 { Bad_Opcode },
9663 { VEX_W_TABLE (VEX_W_0F3A01_P_2) },
9664 },
9665
592a252b 9666 /* VEX_LEN_0F3A06_P_2 */
c0f3af97 9667 {
592d1631 9668 { Bad_Opcode },
592a252b 9669 { VEX_W_TABLE (VEX_W_0F3A06_P_2) },
c0f3af97
L
9670 },
9671
592a252b 9672 /* VEX_LEN_0F3A14_P_2 */
c0f3af97 9673 {
b50c9f31 9674 { "vpextrb", { Edqb, XM, Ib }, 0 },
c0f3af97
L
9675 },
9676
592a252b 9677 /* VEX_LEN_0F3A15_P_2 */
c0f3af97 9678 {
b50c9f31 9679 { "vpextrw", { Edqw, XM, Ib }, 0 },
c0f3af97
L
9680 },
9681
592a252b 9682 /* VEX_LEN_0F3A16_P_2 */
c0f3af97 9683 {
bf890a93 9684 { "vpextrK", { Edq, XM, Ib }, 0 },
c0f3af97
L
9685 },
9686
592a252b 9687 /* VEX_LEN_0F3A17_P_2 */
c0f3af97 9688 {
bf890a93 9689 { "vextractps", { Edqd, XM, Ib }, 0 },
c0f3af97
L
9690 },
9691
592a252b 9692 /* VEX_LEN_0F3A18_P_2 */
c0f3af97 9693 {
592d1631 9694 { Bad_Opcode },
592a252b 9695 { VEX_W_TABLE (VEX_W_0F3A18_P_2) },
c0f3af97
L
9696 },
9697
592a252b 9698 /* VEX_LEN_0F3A19_P_2 */
c0f3af97 9699 {
592d1631 9700 { Bad_Opcode },
592a252b 9701 { VEX_W_TABLE (VEX_W_0F3A19_P_2) },
c0f3af97
L
9702 },
9703
592a252b 9704 /* VEX_LEN_0F3A20_P_2 */
c0f3af97 9705 {
b50c9f31 9706 { "vpinsrb", { XM, Vex128, Edqb, Ib }, 0 },
c0f3af97
L
9707 },
9708
592a252b 9709 /* VEX_LEN_0F3A21_P_2 */
c0f3af97 9710 {
ec6f095a 9711 { "vinsertps", { XM, Vex128, EXd, Ib }, 0 },
c0f3af97
L
9712 },
9713
592a252b 9714 /* VEX_LEN_0F3A22_P_2 */
c0f3af97 9715 {
bf890a93 9716 { "vpinsrK", { XM, Vex128, Edq, Ib }, 0 },
c0f3af97
L
9717 },
9718
43234a1e
L
9719 /* VEX_LEN_0F3A30_P_2 */
9720 {
9721 { VEX_W_TABLE (VEX_W_0F3A30_P_2_LEN_0) },
9722 },
9723
1ba585e8
IT
9724 /* VEX_LEN_0F3A31_P_2 */
9725 {
9726 { VEX_W_TABLE (VEX_W_0F3A31_P_2_LEN_0) },
9727 },
9728
43234a1e
L
9729 /* VEX_LEN_0F3A32_P_2 */
9730 {
9731 { VEX_W_TABLE (VEX_W_0F3A32_P_2_LEN_0) },
9732 },
9733
1ba585e8
IT
9734 /* VEX_LEN_0F3A33_P_2 */
9735 {
9736 { VEX_W_TABLE (VEX_W_0F3A33_P_2_LEN_0) },
9737 },
9738
6c30d220 9739 /* VEX_LEN_0F3A38_P_2 */
c0f3af97 9740 {
6c30d220
L
9741 { Bad_Opcode },
9742 { VEX_W_TABLE (VEX_W_0F3A38_P_2) },
c0f3af97
L
9743 },
9744
6c30d220 9745 /* VEX_LEN_0F3A39_P_2 */
c0f3af97 9746 {
6c30d220
L
9747 { Bad_Opcode },
9748 { VEX_W_TABLE (VEX_W_0F3A39_P_2) },
9749 },
9750
9751 /* VEX_LEN_0F3A41_P_2 */
9752 {
ec6f095a 9753 { "vdppd", { XM, Vex128, EXx, Ib }, 0 },
c0f3af97
L
9754 },
9755
6c30d220 9756 /* VEX_LEN_0F3A46_P_2 */
c0f3af97 9757 {
6c30d220
L
9758 { Bad_Opcode },
9759 { VEX_W_TABLE (VEX_W_0F3A46_P_2) },
c0f3af97
L
9760 },
9761
592a252b 9762 /* VEX_LEN_0F3A60_P_2 */
c0f3af97 9763 {
15c7c1d8 9764 { "vpcmpestrm", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, 0 },
c0f3af97
L
9765 },
9766
592a252b 9767 /* VEX_LEN_0F3A61_P_2 */
c0f3af97 9768 {
15c7c1d8 9769 { "vpcmpestri", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, 0 },
c0f3af97
L
9770 },
9771
592a252b 9772 /* VEX_LEN_0F3A62_P_2 */
c0f3af97 9773 {
ec6f095a 9774 { "vpcmpistrm", { XM, EXx, Ib }, 0 },
c0f3af97
L
9775 },
9776
592a252b 9777 /* VEX_LEN_0F3A63_P_2 */
c0f3af97 9778 {
ec6f095a 9779 { "vpcmpistri", { XM, EXx, Ib }, 0 },
c0f3af97
L
9780 },
9781
592a252b 9782 /* VEX_LEN_0F3A6A_P_2 */
922d8de8 9783 {
3a2430e0 9784 { "vfmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 },
922d8de8
DR
9785 },
9786
592a252b 9787 /* VEX_LEN_0F3A6B_P_2 */
922d8de8 9788 {
3a2430e0 9789 { "vfmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 },
922d8de8
DR
9790 },
9791
592a252b 9792 /* VEX_LEN_0F3A6E_P_2 */
922d8de8 9793 {
3a2430e0 9794 { "vfmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 },
922d8de8
DR
9795 },
9796
592a252b 9797 /* VEX_LEN_0F3A6F_P_2 */
922d8de8 9798 {
3a2430e0 9799 { "vfmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 },
922d8de8
DR
9800 },
9801
592a252b 9802 /* VEX_LEN_0F3A7A_P_2 */
922d8de8 9803 {
3a2430e0 9804 { "vfnmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 },
922d8de8
DR
9805 },
9806
592a252b 9807 /* VEX_LEN_0F3A7B_P_2 */
922d8de8 9808 {
3a2430e0 9809 { "vfnmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 },
922d8de8
DR
9810 },
9811
592a252b 9812 /* VEX_LEN_0F3A7E_P_2 */
922d8de8 9813 {
3a2430e0 9814 { "vfnmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 },
922d8de8
DR
9815 },
9816
592a252b 9817 /* VEX_LEN_0F3A7F_P_2 */
922d8de8 9818 {
3a2430e0 9819 { "vfnmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 },
922d8de8
DR
9820 },
9821
592a252b 9822 /* VEX_LEN_0F3ADF_P_2 */
a5ff0eb2 9823 {
ec6f095a 9824 { "vaeskeygenassist", { XM, EXx, Ib }, 0 },
a5ff0eb2 9825 },
4c807e72 9826
6c30d220
L
9827 /* VEX_LEN_0F3AF0_P_3 */
9828 {
bf890a93 9829 { "rorxS", { Gdq, Edq, Ib }, 0 },
6c30d220
L
9830 },
9831
ff688e1f
L
9832 /* VEX_LEN_0FXOP_08_CC */
9833 {
be92cb14 9834 { "vpcomb", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9835 },
9836
9837 /* VEX_LEN_0FXOP_08_CD */
9838 {
be92cb14 9839 { "vpcomw", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9840 },
9841
9842 /* VEX_LEN_0FXOP_08_CE */
9843 {
be92cb14 9844 { "vpcomd", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9845 },
9846
9847 /* VEX_LEN_0FXOP_08_CF */
9848 {
be92cb14 9849 { "vpcomq", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9850 },
9851
9852 /* VEX_LEN_0FXOP_08_EC */
9853 {
be92cb14 9854 { "vpcomub", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9855 },
9856
9857 /* VEX_LEN_0FXOP_08_ED */
9858 {
be92cb14 9859 { "vpcomuw", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9860 },
9861
9862 /* VEX_LEN_0FXOP_08_EE */
9863 {
be92cb14 9864 { "vpcomud", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9865 },
9866
9867 /* VEX_LEN_0FXOP_08_EF */
9868 {
be92cb14 9869 { "vpcomuq", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9870 },
9871
592a252b 9872 /* VEX_LEN_0FXOP_09_80 */
5dd85c99 9873 {
bf890a93
IT
9874 { "vfrczps", { XM, EXxmm }, 0 },
9875 { "vfrczps", { XM, EXymmq }, 0 },
5dd85c99 9876 },
4c807e72 9877
592a252b 9878 /* VEX_LEN_0FXOP_09_81 */
5dd85c99 9879 {
bf890a93
IT
9880 { "vfrczpd", { XM, EXxmm }, 0 },
9881 { "vfrczpd", { XM, EXymmq }, 0 },
5dd85c99 9882 },
331d2d0d
L
9883};
9884
04e2a182
L
9885static const struct dis386 evex_len_table[][3] = {
9886#define NEED_EVEX_LEN_TABLE
9887#include "i386-dis-evex.h"
9888#undef NEED_EVEX_LEN_TABLE
9889};
9890
9e30b8e0 9891static const struct dis386 vex_w_table[][2] = {
43234a1e
L
9892 {
9893 /* VEX_W_0F41_P_0_LEN_1 */
ab4e4ed5
AF
9894 { MOD_TABLE (MOD_VEX_W_0_0F41_P_0_LEN_1) },
9895 { MOD_TABLE (MOD_VEX_W_1_0F41_P_0_LEN_1) },
1ba585e8
IT
9896 },
9897 {
9898 /* VEX_W_0F41_P_2_LEN_1 */
ab4e4ed5
AF
9899 { MOD_TABLE (MOD_VEX_W_0_0F41_P_2_LEN_1) },
9900 { MOD_TABLE (MOD_VEX_W_1_0F41_P_2_LEN_1) }
43234a1e
L
9901 },
9902 {
9903 /* VEX_W_0F42_P_0_LEN_1 */
ab4e4ed5
AF
9904 { MOD_TABLE (MOD_VEX_W_0_0F42_P_0_LEN_1) },
9905 { MOD_TABLE (MOD_VEX_W_1_0F42_P_0_LEN_1) },
1ba585e8
IT
9906 },
9907 {
9908 /* VEX_W_0F42_P_2_LEN_1 */
ab4e4ed5
AF
9909 { MOD_TABLE (MOD_VEX_W_0_0F42_P_2_LEN_1) },
9910 { MOD_TABLE (MOD_VEX_W_1_0F42_P_2_LEN_1) },
43234a1e
L
9911 },
9912 {
9913 /* VEX_W_0F44_P_0_LEN_0 */
ab4e4ed5
AF
9914 { MOD_TABLE (MOD_VEX_W_0_0F44_P_0_LEN_1) },
9915 { MOD_TABLE (MOD_VEX_W_1_0F44_P_0_LEN_1) },
1ba585e8
IT
9916 },
9917 {
9918 /* VEX_W_0F44_P_2_LEN_0 */
ab4e4ed5
AF
9919 { MOD_TABLE (MOD_VEX_W_0_0F44_P_2_LEN_1) },
9920 { MOD_TABLE (MOD_VEX_W_1_0F44_P_2_LEN_1) },
43234a1e
L
9921 },
9922 {
ec6f095a
L
9923 /* VEX_W_0F45_P_0_LEN_1 */
9924 { MOD_TABLE (MOD_VEX_W_0_0F45_P_0_LEN_1) },
9925 { MOD_TABLE (MOD_VEX_W_1_0F45_P_0_LEN_1) },
9e30b8e0
L
9926 },
9927 {
ec6f095a
L
9928 /* VEX_W_0F45_P_2_LEN_1 */
9929 { MOD_TABLE (MOD_VEX_W_0_0F45_P_2_LEN_1) },
9930 { MOD_TABLE (MOD_VEX_W_1_0F45_P_2_LEN_1) },
9e30b8e0
L
9931 },
9932 {
ec6f095a
L
9933 /* VEX_W_0F46_P_0_LEN_1 */
9934 { MOD_TABLE (MOD_VEX_W_0_0F46_P_0_LEN_1) },
9935 { MOD_TABLE (MOD_VEX_W_1_0F46_P_0_LEN_1) },
9e30b8e0
L
9936 },
9937 {
ec6f095a
L
9938 /* VEX_W_0F46_P_2_LEN_1 */
9939 { MOD_TABLE (MOD_VEX_W_0_0F46_P_2_LEN_1) },
9940 { MOD_TABLE (MOD_VEX_W_1_0F46_P_2_LEN_1) },
9e30b8e0
L
9941 },
9942 {
ec6f095a
L
9943 /* VEX_W_0F47_P_0_LEN_1 */
9944 { MOD_TABLE (MOD_VEX_W_0_0F47_P_0_LEN_1) },
9945 { MOD_TABLE (MOD_VEX_W_1_0F47_P_0_LEN_1) },
9e30b8e0
L
9946 },
9947 {
ec6f095a
L
9948 /* VEX_W_0F47_P_2_LEN_1 */
9949 { MOD_TABLE (MOD_VEX_W_0_0F47_P_2_LEN_1) },
9950 { MOD_TABLE (MOD_VEX_W_1_0F47_P_2_LEN_1) },
9e30b8e0
L
9951 },
9952 {
ec6f095a
L
9953 /* VEX_W_0F4A_P_0_LEN_1 */
9954 { MOD_TABLE (MOD_VEX_W_0_0F4A_P_0_LEN_1) },
9955 { MOD_TABLE (MOD_VEX_W_1_0F4A_P_0_LEN_1) },
9e30b8e0
L
9956 },
9957 {
ec6f095a
L
9958 /* VEX_W_0F4A_P_2_LEN_1 */
9959 { MOD_TABLE (MOD_VEX_W_0_0F4A_P_2_LEN_1) },
9960 { MOD_TABLE (MOD_VEX_W_1_0F4A_P_2_LEN_1) },
9e30b8e0
L
9961 },
9962 {
ec6f095a
L
9963 /* VEX_W_0F4B_P_0_LEN_1 */
9964 { MOD_TABLE (MOD_VEX_W_0_0F4B_P_0_LEN_1) },
9965 { MOD_TABLE (MOD_VEX_W_1_0F4B_P_0_LEN_1) },
9e30b8e0
L
9966 },
9967 {
ec6f095a
L
9968 /* VEX_W_0F4B_P_2_LEN_1 */
9969 { MOD_TABLE (MOD_VEX_W_0_0F4B_P_2_LEN_1) },
9e30b8e0
L
9970 },
9971 {
ec6f095a
L
9972 /* VEX_W_0F90_P_0_LEN_0 */
9973 { "kmovw", { MaskG, MaskE }, 0 },
9974 { "kmovq", { MaskG, MaskE }, 0 },
9e30b8e0
L
9975 },
9976 {
ec6f095a
L
9977 /* VEX_W_0F90_P_2_LEN_0 */
9978 { "kmovb", { MaskG, MaskBDE }, 0 },
9979 { "kmovd", { MaskG, MaskBDE }, 0 },
9e30b8e0
L
9980 },
9981 {
ec6f095a
L
9982 /* VEX_W_0F91_P_0_LEN_0 */
9983 { MOD_TABLE (MOD_VEX_W_0_0F91_P_0_LEN_0) },
9984 { MOD_TABLE (MOD_VEX_W_1_0F91_P_0_LEN_0) },
9e30b8e0
L
9985 },
9986 {
ec6f095a
L
9987 /* VEX_W_0F91_P_2_LEN_0 */
9988 { MOD_TABLE (MOD_VEX_W_0_0F91_P_2_LEN_0) },
9989 { MOD_TABLE (MOD_VEX_W_1_0F91_P_2_LEN_0) },
9e30b8e0
L
9990 },
9991 {
ec6f095a
L
9992 /* VEX_W_0F92_P_0_LEN_0 */
9993 { MOD_TABLE (MOD_VEX_W_0_0F92_P_0_LEN_0) },
9e30b8e0
L
9994 },
9995 {
ec6f095a
L
9996 /* VEX_W_0F92_P_2_LEN_0 */
9997 { MOD_TABLE (MOD_VEX_W_0_0F92_P_2_LEN_0) },
9e30b8e0 9998 },
9e30b8e0 9999 {
ec6f095a
L
10000 /* VEX_W_0F93_P_0_LEN_0 */
10001 { MOD_TABLE (MOD_VEX_W_0_0F93_P_0_LEN_0) },
9e30b8e0
L
10002 },
10003 {
ec6f095a
L
10004 /* VEX_W_0F93_P_2_LEN_0 */
10005 { MOD_TABLE (MOD_VEX_W_0_0F93_P_2_LEN_0) },
9e30b8e0 10006 },
9e30b8e0 10007 {
ec6f095a
L
10008 /* VEX_W_0F98_P_0_LEN_0 */
10009 { MOD_TABLE (MOD_VEX_W_0_0F98_P_0_LEN_0) },
10010 { MOD_TABLE (MOD_VEX_W_1_0F98_P_0_LEN_0) },
9e30b8e0
L
10011 },
10012 {
ec6f095a
L
10013 /* VEX_W_0F98_P_2_LEN_0 */
10014 { MOD_TABLE (MOD_VEX_W_0_0F98_P_2_LEN_0) },
10015 { MOD_TABLE (MOD_VEX_W_1_0F98_P_2_LEN_0) },
9e30b8e0
L
10016 },
10017 {
ec6f095a
L
10018 /* VEX_W_0F99_P_0_LEN_0 */
10019 { MOD_TABLE (MOD_VEX_W_0_0F99_P_0_LEN_0) },
10020 { MOD_TABLE (MOD_VEX_W_1_0F99_P_0_LEN_0) },
9e30b8e0
L
10021 },
10022 {
ec6f095a
L
10023 /* VEX_W_0F99_P_2_LEN_0 */
10024 { MOD_TABLE (MOD_VEX_W_0_0F99_P_2_LEN_0) },
10025 { MOD_TABLE (MOD_VEX_W_1_0F99_P_2_LEN_0) },
9e30b8e0 10026 },
9e30b8e0 10027 {
592a252b 10028 /* VEX_W_0F380C_P_2 */
bf890a93 10029 { "vpermilps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10030 },
10031 {
592a252b 10032 /* VEX_W_0F380D_P_2 */
bf890a93 10033 { "vpermilpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10034 },
10035 {
592a252b 10036 /* VEX_W_0F380E_P_2 */
bf890a93 10037 { "vtestps", { XM, EXx }, 0 },
9e30b8e0
L
10038 },
10039 {
592a252b 10040 /* VEX_W_0F380F_P_2 */
bf890a93 10041 { "vtestpd", { XM, EXx }, 0 },
9e30b8e0 10042 },
6c30d220
L
10043 {
10044 /* VEX_W_0F3816_P_2 */
bf890a93 10045 { "vpermps", { XM, Vex, EXx }, 0 },
6c30d220 10046 },
bcf2684f 10047 {
6c30d220 10048 /* VEX_W_0F3818_P_2 */
bf890a93 10049 { "vbroadcastss", { XM, EXxmm_md }, 0 },
bcf2684f 10050 },
9e30b8e0 10051 {
6c30d220 10052 /* VEX_W_0F3819_P_2 */
bf890a93 10053 { "vbroadcastsd", { XM, EXxmm_mq }, 0 },
9e30b8e0
L
10054 },
10055 {
592a252b 10056 /* VEX_W_0F381A_P_2_M_0 */
bf890a93 10057 { "vbroadcastf128", { XM, Mxmm }, 0 },
9e30b8e0 10058 },
53aa04a0 10059 {
592a252b 10060 /* VEX_W_0F382C_P_2_M_0 */
bf890a93 10061 { "vmaskmovps", { XM, Vex, Mx }, 0 },
53aa04a0
L
10062 },
10063 {
592a252b 10064 /* VEX_W_0F382D_P_2_M_0 */
bf890a93 10065 { "vmaskmovpd", { XM, Vex, Mx }, 0 },
53aa04a0
L
10066 },
10067 {
592a252b 10068 /* VEX_W_0F382E_P_2_M_0 */
bf890a93 10069 { "vmaskmovps", { Mx, Vex, XM }, 0 },
53aa04a0
L
10070 },
10071 {
592a252b 10072 /* VEX_W_0F382F_P_2_M_0 */
bf890a93 10073 { "vmaskmovpd", { Mx, Vex, XM }, 0 },
53aa04a0 10074 },
6c30d220
L
10075 {
10076 /* VEX_W_0F3836_P_2 */
bf890a93 10077 { "vpermd", { XM, Vex, EXx }, 0 },
9e30b8e0 10078 },
6c30d220
L
10079 {
10080 /* VEX_W_0F3846_P_2 */
bf890a93 10081 { "vpsravd", { XM, Vex, EXx }, 0 },
6c30d220
L
10082 },
10083 {
10084 /* VEX_W_0F3858_P_2 */
bf890a93 10085 { "vpbroadcastd", { XM, EXxmm_md }, 0 },
6c30d220
L
10086 },
10087 {
10088 /* VEX_W_0F3859_P_2 */
bf890a93 10089 { "vpbroadcastq", { XM, EXxmm_mq }, 0 },
6c30d220
L
10090 },
10091 {
10092 /* VEX_W_0F385A_P_2_M_0 */
bf890a93 10093 { "vbroadcasti128", { XM, Mxmm }, 0 },
6c30d220
L
10094 },
10095 {
10096 /* VEX_W_0F3878_P_2 */
bf890a93 10097 { "vpbroadcastb", { XM, EXxmm_mb }, 0 },
6c30d220
L
10098 },
10099 {
10100 /* VEX_W_0F3879_P_2 */
bf890a93 10101 { "vpbroadcastw", { XM, EXxmm_mw }, 0 },
6c30d220 10102 },
48521003
IT
10103 {
10104 /* VEX_W_0F38CF_P_2 */
10105 { "vgf2p8mulb", { XM, Vex, EXx }, 0 },
10106 },
6c30d220
L
10107 {
10108 /* VEX_W_0F3A00_P_2 */
10109 { Bad_Opcode },
bf890a93 10110 { "vpermq", { XM, EXx, Ib }, 0 },
6c30d220
L
10111 },
10112 {
10113 /* VEX_W_0F3A01_P_2 */
10114 { Bad_Opcode },
bf890a93 10115 { "vpermpd", { XM, EXx, Ib }, 0 },
6c30d220
L
10116 },
10117 {
10118 /* VEX_W_0F3A02_P_2 */
bf890a93 10119 { "vpblendd", { XM, Vex, EXx, Ib }, 0 },
6c30d220 10120 },
9e30b8e0 10121 {
592a252b 10122 /* VEX_W_0F3A04_P_2 */
bf890a93 10123 { "vpermilps", { XM, EXx, Ib }, 0 },
9e30b8e0
L
10124 },
10125 {
592a252b 10126 /* VEX_W_0F3A05_P_2 */
bf890a93 10127 { "vpermilpd", { XM, EXx, Ib }, 0 },
9e30b8e0
L
10128 },
10129 {
592a252b 10130 /* VEX_W_0F3A06_P_2 */
bf890a93 10131 { "vperm2f128", { XM, Vex256, EXx, Ib }, 0 },
9e30b8e0 10132 },
9e30b8e0 10133 {
592a252b 10134 /* VEX_W_0F3A18_P_2 */
bf890a93 10135 { "vinsertf128", { XM, Vex256, EXxmm, Ib }, 0 },
9e30b8e0
L
10136 },
10137 {
592a252b 10138 /* VEX_W_0F3A19_P_2 */
bf890a93 10139 { "vextractf128", { EXxmm, XM, Ib }, 0 },
9e30b8e0 10140 },
43234a1e 10141 {
1ba585e8 10142 /* VEX_W_0F3A30_P_2_LEN_0 */
ab4e4ed5
AF
10143 { MOD_TABLE (MOD_VEX_W_0_0F3A30_P_2_LEN_0) },
10144 { MOD_TABLE (MOD_VEX_W_1_0F3A30_P_2_LEN_0) },
43234a1e
L
10145 },
10146 {
1ba585e8 10147 /* VEX_W_0F3A31_P_2_LEN_0 */
ab4e4ed5
AF
10148 { MOD_TABLE (MOD_VEX_W_0_0F3A31_P_2_LEN_0) },
10149 { MOD_TABLE (MOD_VEX_W_1_0F3A31_P_2_LEN_0) },
1ba585e8
IT
10150 },
10151 {
10152 /* VEX_W_0F3A32_P_2_LEN_0 */
ab4e4ed5
AF
10153 { MOD_TABLE (MOD_VEX_W_0_0F3A32_P_2_LEN_0) },
10154 { MOD_TABLE (MOD_VEX_W_1_0F3A32_P_2_LEN_0) },
43234a1e 10155 },
1ba585e8
IT
10156 {
10157 /* VEX_W_0F3A33_P_2_LEN_0 */
ab4e4ed5
AF
10158 { MOD_TABLE (MOD_VEX_W_0_0F3A33_P_2_LEN_0) },
10159 { MOD_TABLE (MOD_VEX_W_1_0F3A33_P_2_LEN_0) },
1ba585e8 10160 },
6c30d220
L
10161 {
10162 /* VEX_W_0F3A38_P_2 */
bf890a93 10163 { "vinserti128", { XM, Vex256, EXxmm, Ib }, 0 },
6c30d220
L
10164 },
10165 {
10166 /* VEX_W_0F3A39_P_2 */
bf890a93 10167 { "vextracti128", { EXxmm, XM, Ib }, 0 },
6c30d220 10168 },
6c30d220
L
10169 {
10170 /* VEX_W_0F3A46_P_2 */
bf890a93 10171 { "vperm2i128", { XM, Vex256, EXx, Ib }, 0 },
6c30d220 10172 },
a683cc34 10173 {
592a252b 10174 /* VEX_W_0F3A48_P_2 */
bf890a93
IT
10175 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
10176 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
a683cc34
SP
10177 },
10178 {
592a252b 10179 /* VEX_W_0F3A49_P_2 */
bf890a93
IT
10180 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
10181 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
a683cc34 10182 },
9e30b8e0 10183 {
592a252b 10184 /* VEX_W_0F3A4A_P_2 */
bf890a93 10185 { "vblendvps", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0
L
10186 },
10187 {
592a252b 10188 /* VEX_W_0F3A4B_P_2 */
bf890a93 10189 { "vblendvpd", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0
L
10190 },
10191 {
592a252b 10192 /* VEX_W_0F3A4C_P_2 */
bf890a93 10193 { "vpblendvb", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0 10194 },
48521003
IT
10195 {
10196 /* VEX_W_0F3ACE_P_2 */
10197 { Bad_Opcode },
10198 { "vgf2p8affineqb", { XM, Vex, EXx, Ib }, 0 },
10199 },
10200 {
10201 /* VEX_W_0F3ACF_P_2 */
10202 { Bad_Opcode },
10203 { "vgf2p8affineinvqb", { XM, Vex, EXx, Ib }, 0 },
10204 },
43234a1e
L
10205#define NEED_VEX_W_TABLE
10206#include "i386-dis-evex.h"
10207#undef NEED_VEX_W_TABLE
9e30b8e0
L
10208};
10209
10210static const struct dis386 mod_table[][2] = {
10211 {
10212 /* MOD_8D */
bf890a93 10213 { "leaS", { Gv, M }, 0 },
9e30b8e0 10214 },
42164a71
L
10215 {
10216 /* MOD_C6_REG_7 */
10217 { Bad_Opcode },
10218 { RM_TABLE (RM_C6_REG_7) },
10219 },
10220 {
10221 /* MOD_C7_REG_7 */
10222 { Bad_Opcode },
10223 { RM_TABLE (RM_C7_REG_7) },
10224 },
4a357820
MZ
10225 {
10226 /* MOD_FF_REG_3 */
a72d2af2 10227 { "Jcall^", { indirEp }, 0 },
4a357820
MZ
10228 },
10229 {
10230 /* MOD_FF_REG_5 */
a72d2af2 10231 { "Jjmp^", { indirEp }, 0 },
4a357820 10232 },
9e30b8e0
L
10233 {
10234 /* MOD_0F01_REG_0 */
10235 { X86_64_TABLE (X86_64_0F01_REG_0) },
10236 { RM_TABLE (RM_0F01_REG_0) },
10237 },
10238 {
10239 /* MOD_0F01_REG_1 */
10240 { X86_64_TABLE (X86_64_0F01_REG_1) },
10241 { RM_TABLE (RM_0F01_REG_1) },
10242 },
10243 {
10244 /* MOD_0F01_REG_2 */
10245 { X86_64_TABLE (X86_64_0F01_REG_2) },
10246 { RM_TABLE (RM_0F01_REG_2) },
10247 },
10248 {
10249 /* MOD_0F01_REG_3 */
10250 { X86_64_TABLE (X86_64_0F01_REG_3) },
10251 { RM_TABLE (RM_0F01_REG_3) },
10252 },
8eab4136
L
10253 {
10254 /* MOD_0F01_REG_5 */
603555e5 10255 { PREFIX_TABLE (PREFIX_MOD_0_0F01_REG_5) },
8eab4136
L
10256 { RM_TABLE (RM_0F01_REG_5) },
10257 },
9e30b8e0
L
10258 {
10259 /* MOD_0F01_REG_7 */
bf890a93 10260 { "invlpg", { Mb }, 0 },
9e30b8e0
L
10261 { RM_TABLE (RM_0F01_REG_7) },
10262 },
10263 {
10264 /* MOD_0F12_PREFIX_0 */
507bd325
L
10265 { "movlps", { XM, EXq }, PREFIX_OPCODE },
10266 { "movhlps", { XM, EXq }, PREFIX_OPCODE },
9e30b8e0
L
10267 },
10268 {
10269 /* MOD_0F13 */
507bd325 10270 { "movlpX", { EXq, XM }, PREFIX_OPCODE },
9e30b8e0
L
10271 },
10272 {
10273 /* MOD_0F16_PREFIX_0 */
bf890a93
IT
10274 { "movhps", { XM, EXq }, 0 },
10275 { "movlhps", { XM, EXq }, 0 },
9e30b8e0
L
10276 },
10277 {
10278 /* MOD_0F17 */
507bd325 10279 { "movhpX", { EXq, XM }, PREFIX_OPCODE },
9e30b8e0
L
10280 },
10281 {
10282 /* MOD_0F18_REG_0 */
bf890a93 10283 { "prefetchnta", { Mb }, 0 },
9e30b8e0
L
10284 },
10285 {
10286 /* MOD_0F18_REG_1 */
bf890a93 10287 { "prefetcht0", { Mb }, 0 },
9e30b8e0
L
10288 },
10289 {
10290 /* MOD_0F18_REG_2 */
bf890a93 10291 { "prefetcht1", { Mb }, 0 },
9e30b8e0
L
10292 },
10293 {
10294 /* MOD_0F18_REG_3 */
bf890a93 10295 { "prefetcht2", { Mb }, 0 },
9e30b8e0 10296 },
d7189fa5
RM
10297 {
10298 /* MOD_0F18_REG_4 */
bf890a93 10299 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
10300 },
10301 {
10302 /* MOD_0F18_REG_5 */
bf890a93 10303 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
10304 },
10305 {
10306 /* MOD_0F18_REG_6 */
bf890a93 10307 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
10308 },
10309 {
10310 /* MOD_0F18_REG_7 */
bf890a93 10311 { "nop/reserved", { Mb }, 0 },
d7189fa5 10312 },
7e8b059b
L
10313 {
10314 /* MOD_0F1A_PREFIX_0 */
d276ec69 10315 { "bndldx", { Gbnd, Mv_bnd }, 0 },
bf890a93 10316 { "nopQ", { Ev }, 0 },
7e8b059b
L
10317 },
10318 {
10319 /* MOD_0F1B_PREFIX_0 */
d276ec69 10320 { "bndstx", { Mv_bnd, Gbnd }, 0 },
bf890a93 10321 { "nopQ", { Ev }, 0 },
7e8b059b
L
10322 },
10323 {
10324 /* MOD_0F1B_PREFIX_1 */
d276ec69 10325 { "bndmk", { Gbnd, Mv_bnd }, 0 },
bf890a93 10326 { "nopQ", { Ev }, 0 },
7e8b059b 10327 },
c48935d7
IT
10328 {
10329 /* MOD_0F1C_PREFIX_0 */
10330 { REG_TABLE (REG_0F1C_MOD_0) },
10331 { "nopQ", { Ev }, 0 },
10332 },
603555e5
L
10333 {
10334 /* MOD_0F1E_PREFIX_1 */
10335 { "nopQ", { Ev }, 0 },
10336 { REG_TABLE (REG_0F1E_MOD_3) },
10337 },
b844680a 10338 {
92fddf8e 10339 /* MOD_0F24 */
7bb15c6f 10340 { Bad_Opcode },
bf890a93 10341 { "movL", { Rd, Td }, 0 },
b844680a
L
10342 },
10343 {
92fddf8e 10344 /* MOD_0F26 */
592d1631 10345 { Bad_Opcode },
bf890a93 10346 { "movL", { Td, Rd }, 0 },
b844680a 10347 },
75c135a8
L
10348 {
10349 /* MOD_0F2B_PREFIX_0 */
507bd325 10350 {"movntps", { Mx, XM }, PREFIX_OPCODE },
75c135a8
L
10351 },
10352 {
10353 /* MOD_0F2B_PREFIX_1 */
507bd325 10354 {"movntss", { Md, XM }, PREFIX_OPCODE },
75c135a8
L
10355 },
10356 {
10357 /* MOD_0F2B_PREFIX_2 */
507bd325 10358 {"movntpd", { Mx, XM }, PREFIX_OPCODE },
75c135a8
L
10359 },
10360 {
10361 /* MOD_0F2B_PREFIX_3 */
507bd325 10362 {"movntsd", { Mq, XM }, PREFIX_OPCODE },
75c135a8
L
10363 },
10364 {
10365 /* MOD_0F51 */
592d1631 10366 { Bad_Opcode },
507bd325 10367 { "movmskpX", { Gdq, XS }, PREFIX_OPCODE },
75c135a8 10368 },
b844680a 10369 {
1ceb70f8 10370 /* MOD_0F71_REG_2 */
592d1631 10371 { Bad_Opcode },
bf890a93 10372 { "psrlw", { MS, Ib }, 0 },
b844680a
L
10373 },
10374 {
1ceb70f8 10375 /* MOD_0F71_REG_4 */
592d1631 10376 { Bad_Opcode },
bf890a93 10377 { "psraw", { MS, Ib }, 0 },
b844680a
L
10378 },
10379 {
1ceb70f8 10380 /* MOD_0F71_REG_6 */
592d1631 10381 { Bad_Opcode },
bf890a93 10382 { "psllw", { MS, Ib }, 0 },
b844680a
L
10383 },
10384 {
1ceb70f8 10385 /* MOD_0F72_REG_2 */
592d1631 10386 { Bad_Opcode },
bf890a93 10387 { "psrld", { MS, Ib }, 0 },
b844680a
L
10388 },
10389 {
1ceb70f8 10390 /* MOD_0F72_REG_4 */
592d1631 10391 { Bad_Opcode },
bf890a93 10392 { "psrad", { MS, Ib }, 0 },
b844680a
L
10393 },
10394 {
1ceb70f8 10395 /* MOD_0F72_REG_6 */
592d1631 10396 { Bad_Opcode },
bf890a93 10397 { "pslld", { MS, Ib }, 0 },
b844680a
L
10398 },
10399 {
1ceb70f8 10400 /* MOD_0F73_REG_2 */
592d1631 10401 { Bad_Opcode },
bf890a93 10402 { "psrlq", { MS, Ib }, 0 },
b844680a
L
10403 },
10404 {
1ceb70f8 10405 /* MOD_0F73_REG_3 */
592d1631 10406 { Bad_Opcode },
c0f3af97
L
10407 { PREFIX_TABLE (PREFIX_0F73_REG_3) },
10408 },
10409 {
10410 /* MOD_0F73_REG_6 */
592d1631 10411 { Bad_Opcode },
bf890a93 10412 { "psllq", { MS, Ib }, 0 },
c0f3af97
L
10413 },
10414 {
10415 /* MOD_0F73_REG_7 */
592d1631 10416 { Bad_Opcode },
c0f3af97
L
10417 { PREFIX_TABLE (PREFIX_0F73_REG_7) },
10418 },
10419 {
10420 /* MOD_0FAE_REG_0 */
bf890a93 10421 { "fxsave", { FXSAVE }, 0 },
c7b8aa3a 10422 { PREFIX_TABLE (PREFIX_0FAE_REG_0) },
c0f3af97
L
10423 },
10424 {
10425 /* MOD_0FAE_REG_1 */
bf890a93 10426 { "fxrstor", { FXSAVE }, 0 },
c7b8aa3a 10427 { PREFIX_TABLE (PREFIX_0FAE_REG_1) },
c0f3af97
L
10428 },
10429 {
10430 /* MOD_0FAE_REG_2 */
bf890a93 10431 { "ldmxcsr", { Md }, 0 },
c7b8aa3a 10432 { PREFIX_TABLE (PREFIX_0FAE_REG_2) },
c0f3af97
L
10433 },
10434 {
10435 /* MOD_0FAE_REG_3 */
bf890a93 10436 { "stmxcsr", { Md }, 0 },
c7b8aa3a 10437 { PREFIX_TABLE (PREFIX_0FAE_REG_3) },
c0f3af97
L
10438 },
10439 {
10440 /* MOD_0FAE_REG_4 */
6b40c462
L
10441 { PREFIX_TABLE (PREFIX_MOD_0_0FAE_REG_4) },
10442 { PREFIX_TABLE (PREFIX_MOD_3_0FAE_REG_4) },
c0f3af97
L
10443 },
10444 {
10445 /* MOD_0FAE_REG_5 */
603555e5 10446 { PREFIX_TABLE (PREFIX_MOD_0_0FAE_REG_5) },
2234eee6 10447 { PREFIX_TABLE (PREFIX_MOD_3_0FAE_REG_5) },
c0f3af97
L
10448 },
10449 {
10450 /* MOD_0FAE_REG_6 */
de89d0a3
IT
10451 { PREFIX_TABLE (PREFIX_MOD_0_0FAE_REG_6) },
10452 { PREFIX_TABLE (PREFIX_MOD_1_0FAE_REG_6) },
c0f3af97
L
10453 },
10454 {
10455 /* MOD_0FAE_REG_7 */
963f3586 10456 { PREFIX_TABLE (PREFIX_0FAE_REG_7) },
c0f3af97
L
10457 { RM_TABLE (RM_0FAE_REG_7) },
10458 },
10459 {
10460 /* MOD_0FB2 */
bf890a93 10461 { "lssS", { Gv, Mp }, 0 },
c0f3af97
L
10462 },
10463 {
10464 /* MOD_0FB4 */
bf890a93 10465 { "lfsS", { Gv, Mp }, 0 },
c0f3af97
L
10466 },
10467 {
10468 /* MOD_0FB5 */
bf890a93 10469 { "lgsS", { Gv, Mp }, 0 },
c0f3af97 10470 },
a8484f96
L
10471 {
10472 /* MOD_0FC3 */
10473 { PREFIX_TABLE (PREFIX_MOD_0_0FC3) },
10474 },
963f3586
IT
10475 {
10476 /* MOD_0FC7_REG_3 */
a8484f96 10477 { "xrstors", { FXSAVE }, 0 },
963f3586
IT
10478 },
10479 {
10480 /* MOD_0FC7_REG_4 */
bf890a93 10481 { "xsavec", { FXSAVE }, 0 },
963f3586
IT
10482 },
10483 {
10484 /* MOD_0FC7_REG_5 */
bf890a93 10485 { "xsaves", { FXSAVE }, 0 },
963f3586 10486 },
c0f3af97
L
10487 {
10488 /* MOD_0FC7_REG_6 */
f24bcbaa
L
10489 { PREFIX_TABLE (PREFIX_MOD_0_0FC7_REG_6) },
10490 { PREFIX_TABLE (PREFIX_MOD_3_0FC7_REG_6) }
c0f3af97
L
10491 },
10492 {
10493 /* MOD_0FC7_REG_7 */
bf890a93 10494 { "vmptrst", { Mq }, 0 },
f24bcbaa 10495 { PREFIX_TABLE (PREFIX_MOD_3_0FC7_REG_7) }
c0f3af97
L
10496 },
10497 {
10498 /* MOD_0FD7 */
592d1631 10499 { Bad_Opcode },
bf890a93 10500 { "pmovmskb", { Gdq, MS }, 0 },
c0f3af97
L
10501 },
10502 {
10503 /* MOD_0FE7_PREFIX_2 */
bf890a93 10504 { "movntdq", { Mx, XM }, 0 },
c0f3af97
L
10505 },
10506 {
10507 /* MOD_0FF0_PREFIX_3 */
bf890a93 10508 { "lddqu", { XM, M }, 0 },
c0f3af97
L
10509 },
10510 {
10511 /* MOD_0F382A_PREFIX_2 */
bf890a93 10512 { "movntdqa", { XM, Mx }, 0 },
c0f3af97 10513 },
603555e5
L
10514 {
10515 /* MOD_0F38F5_PREFIX_2 */
10516 { "wrussK", { M, Gdq }, PREFIX_OPCODE },
10517 },
10518 {
10519 /* MOD_0F38F6_PREFIX_0 */
10520 { "wrssK", { M, Gdq }, PREFIX_OPCODE },
10521 },
c0a30a9f
L
10522 {
10523 /* MOD_0F38F8_PREFIX_2 */
10524 { "movdir64b", { Gva, M }, PREFIX_OPCODE },
10525 },
10526 {
10527 /* MOD_0F38F9_PREFIX_0 */
10528 { "movdiri", { Em, Gv }, PREFIX_OPCODE },
10529 },
c0f3af97
L
10530 {
10531 /* MOD_62_32BIT */
bf890a93 10532 { "bound{S|}", { Gv, Ma }, 0 },
43234a1e 10533 { EVEX_TABLE (EVEX_0F) },
c0f3af97
L
10534 },
10535 {
10536 /* MOD_C4_32BIT */
bf890a93 10537 { "lesS", { Gv, Mp }, 0 },
c0f3af97
L
10538 { VEX_C4_TABLE (VEX_0F) },
10539 },
10540 {
10541 /* MOD_C5_32BIT */
bf890a93 10542 { "ldsS", { Gv, Mp }, 0 },
c0f3af97
L
10543 { VEX_C5_TABLE (VEX_0F) },
10544 },
10545 {
592a252b
L
10546 /* MOD_VEX_0F12_PREFIX_0 */
10547 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_0) },
10548 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_1) },
c0f3af97
L
10549 },
10550 {
592a252b
L
10551 /* MOD_VEX_0F13 */
10552 { VEX_LEN_TABLE (VEX_LEN_0F13_M_0) },
c0f3af97
L
10553 },
10554 {
592a252b
L
10555 /* MOD_VEX_0F16_PREFIX_0 */
10556 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_0) },
10557 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_1) },
c0f3af97
L
10558 },
10559 {
592a252b
L
10560 /* MOD_VEX_0F17 */
10561 { VEX_LEN_TABLE (VEX_LEN_0F17_M_0) },
c0f3af97
L
10562 },
10563 {
592a252b 10564 /* MOD_VEX_0F2B */
ec6f095a 10565 { "vmovntpX", { Mx, XM }, 0 },
c0f3af97 10566 },
ab4e4ed5
AF
10567 {
10568 /* MOD_VEX_W_0_0F41_P_0_LEN_1 */
10569 { Bad_Opcode },
10570 { "kandw", { MaskG, MaskVex, MaskR }, 0 },
10571 },
10572 {
10573 /* MOD_VEX_W_1_0F41_P_0_LEN_1 */
10574 { Bad_Opcode },
10575 { "kandq", { MaskG, MaskVex, MaskR }, 0 },
10576 },
10577 {
10578 /* MOD_VEX_W_0_0F41_P_2_LEN_1 */
10579 { Bad_Opcode },
10580 { "kandb", { MaskG, MaskVex, MaskR }, 0 },
10581 },
10582 {
10583 /* MOD_VEX_W_1_0F41_P_2_LEN_1 */
10584 { Bad_Opcode },
10585 { "kandd", { MaskG, MaskVex, MaskR }, 0 },
10586 },
10587 {
10588 /* MOD_VEX_W_0_0F42_P_0_LEN_1 */
10589 { Bad_Opcode },
10590 { "kandnw", { MaskG, MaskVex, MaskR }, 0 },
10591 },
10592 {
10593 /* MOD_VEX_W_1_0F42_P_0_LEN_1 */
10594 { Bad_Opcode },
10595 { "kandnq", { MaskG, MaskVex, MaskR }, 0 },
10596 },
10597 {
10598 /* MOD_VEX_W_0_0F42_P_2_LEN_1 */
10599 { Bad_Opcode },
10600 { "kandnb", { MaskG, MaskVex, MaskR }, 0 },
10601 },
10602 {
10603 /* MOD_VEX_W_1_0F42_P_2_LEN_1 */
10604 { Bad_Opcode },
10605 { "kandnd", { MaskG, MaskVex, MaskR }, 0 },
10606 },
10607 {
10608 /* MOD_VEX_W_0_0F44_P_0_LEN_0 */
10609 { Bad_Opcode },
10610 { "knotw", { MaskG, MaskR }, 0 },
10611 },
10612 {
10613 /* MOD_VEX_W_1_0F44_P_0_LEN_0 */
10614 { Bad_Opcode },
10615 { "knotq", { MaskG, MaskR }, 0 },
10616 },
10617 {
10618 /* MOD_VEX_W_0_0F44_P_2_LEN_0 */
10619 { Bad_Opcode },
10620 { "knotb", { MaskG, MaskR }, 0 },
10621 },
10622 {
10623 /* MOD_VEX_W_1_0F44_P_2_LEN_0 */
10624 { Bad_Opcode },
10625 { "knotd", { MaskG, MaskR }, 0 },
10626 },
10627 {
10628 /* MOD_VEX_W_0_0F45_P_0_LEN_1 */
10629 { Bad_Opcode },
10630 { "korw", { MaskG, MaskVex, MaskR }, 0 },
10631 },
10632 {
10633 /* MOD_VEX_W_1_0F45_P_0_LEN_1 */
10634 { Bad_Opcode },
10635 { "korq", { MaskG, MaskVex, MaskR }, 0 },
10636 },
10637 {
10638 /* MOD_VEX_W_0_0F45_P_2_LEN_1 */
10639 { Bad_Opcode },
10640 { "korb", { MaskG, MaskVex, MaskR }, 0 },
10641 },
10642 {
10643 /* MOD_VEX_W_1_0F45_P_2_LEN_1 */
10644 { Bad_Opcode },
10645 { "kord", { MaskG, MaskVex, MaskR }, 0 },
10646 },
10647 {
10648 /* MOD_VEX_W_0_0F46_P_0_LEN_1 */
10649 { Bad_Opcode },
10650 { "kxnorw", { MaskG, MaskVex, MaskR }, 0 },
10651 },
10652 {
10653 /* MOD_VEX_W_1_0F46_P_0_LEN_1 */
10654 { Bad_Opcode },
10655 { "kxnorq", { MaskG, MaskVex, MaskR }, 0 },
10656 },
10657 {
10658 /* MOD_VEX_W_0_0F46_P_2_LEN_1 */
10659 { Bad_Opcode },
10660 { "kxnorb", { MaskG, MaskVex, MaskR }, 0 },
10661 },
10662 {
10663 /* MOD_VEX_W_1_0F46_P_2_LEN_1 */
10664 { Bad_Opcode },
10665 { "kxnord", { MaskG, MaskVex, MaskR }, 0 },
10666 },
10667 {
10668 /* MOD_VEX_W_0_0F47_P_0_LEN_1 */
10669 { Bad_Opcode },
10670 { "kxorw", { MaskG, MaskVex, MaskR }, 0 },
10671 },
10672 {
10673 /* MOD_VEX_W_1_0F47_P_0_LEN_1 */
10674 { Bad_Opcode },
10675 { "kxorq", { MaskG, MaskVex, MaskR }, 0 },
10676 },
10677 {
10678 /* MOD_VEX_W_0_0F47_P_2_LEN_1 */
10679 { Bad_Opcode },
10680 { "kxorb", { MaskG, MaskVex, MaskR }, 0 },
10681 },
10682 {
10683 /* MOD_VEX_W_1_0F47_P_2_LEN_1 */
10684 { Bad_Opcode },
10685 { "kxord", { MaskG, MaskVex, MaskR }, 0 },
10686 },
10687 {
10688 /* MOD_VEX_W_0_0F4A_P_0_LEN_1 */
10689 { Bad_Opcode },
10690 { "kaddw", { MaskG, MaskVex, MaskR }, 0 },
10691 },
10692 {
10693 /* MOD_VEX_W_1_0F4A_P_0_LEN_1 */
10694 { Bad_Opcode },
10695 { "kaddq", { MaskG, MaskVex, MaskR }, 0 },
10696 },
10697 {
10698 /* MOD_VEX_W_0_0F4A_P_2_LEN_1 */
10699 { Bad_Opcode },
10700 { "kaddb", { MaskG, MaskVex, MaskR }, 0 },
10701 },
10702 {
10703 /* MOD_VEX_W_1_0F4A_P_2_LEN_1 */
10704 { Bad_Opcode },
10705 { "kaddd", { MaskG, MaskVex, MaskR }, 0 },
10706 },
10707 {
10708 /* MOD_VEX_W_0_0F4B_P_0_LEN_1 */
10709 { Bad_Opcode },
10710 { "kunpckwd", { MaskG, MaskVex, MaskR }, 0 },
10711 },
10712 {
10713 /* MOD_VEX_W_1_0F4B_P_0_LEN_1 */
10714 { Bad_Opcode },
10715 { "kunpckdq", { MaskG, MaskVex, MaskR }, 0 },
10716 },
10717 {
10718 /* MOD_VEX_W_0_0F4B_P_2_LEN_1 */
10719 { Bad_Opcode },
10720 { "kunpckbw", { MaskG, MaskVex, MaskR }, 0 },
10721 },
c0f3af97 10722 {
592a252b 10723 /* MOD_VEX_0F50 */
592d1631 10724 { Bad_Opcode },
ec6f095a 10725 { "vmovmskpX", { Gdq, XS }, 0 },
c0f3af97
L
10726 },
10727 {
592a252b 10728 /* MOD_VEX_0F71_REG_2 */
592d1631 10729 { Bad_Opcode },
592a252b 10730 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_2) },
b844680a
L
10731 },
10732 {
592a252b 10733 /* MOD_VEX_0F71_REG_4 */
592d1631 10734 { Bad_Opcode },
592a252b 10735 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_4) },
b844680a
L
10736 },
10737 {
592a252b 10738 /* MOD_VEX_0F71_REG_6 */
592d1631 10739 { Bad_Opcode },
592a252b 10740 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_6) },
b844680a
L
10741 },
10742 {
592a252b 10743 /* MOD_VEX_0F72_REG_2 */
592d1631 10744 { Bad_Opcode },
592a252b 10745 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_2) },
b844680a 10746 },
d8faab4e 10747 {
592a252b 10748 /* MOD_VEX_0F72_REG_4 */
592d1631 10749 { Bad_Opcode },
592a252b 10750 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_4) },
d8faab4e
L
10751 },
10752 {
592a252b 10753 /* MOD_VEX_0F72_REG_6 */
592d1631 10754 { Bad_Opcode },
592a252b 10755 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_6) },
d8faab4e 10756 },
876d4bfa 10757 {
592a252b 10758 /* MOD_VEX_0F73_REG_2 */
592d1631 10759 { Bad_Opcode },
592a252b 10760 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_2) },
876d4bfa
L
10761 },
10762 {
592a252b 10763 /* MOD_VEX_0F73_REG_3 */
592d1631 10764 { Bad_Opcode },
592a252b 10765 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_3) },
475a2301
L
10766 },
10767 {
592a252b 10768 /* MOD_VEX_0F73_REG_6 */
592d1631 10769 { Bad_Opcode },
592a252b 10770 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_6) },
876d4bfa
L
10771 },
10772 {
592a252b 10773 /* MOD_VEX_0F73_REG_7 */
592d1631 10774 { Bad_Opcode },
592a252b 10775 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_7) },
876d4bfa 10776 },
ab4e4ed5
AF
10777 {
10778 /* MOD_VEX_W_0_0F91_P_0_LEN_0 */
10779 { "kmovw", { Ew, MaskG }, 0 },
10780 { Bad_Opcode },
10781 },
10782 {
10783 /* MOD_VEX_W_0_0F91_P_0_LEN_0 */
10784 { "kmovq", { Eq, MaskG }, 0 },
10785 { Bad_Opcode },
10786 },
10787 {
10788 /* MOD_VEX_W_0_0F91_P_2_LEN_0 */
10789 { "kmovb", { Eb, MaskG }, 0 },
10790 { Bad_Opcode },
10791 },
10792 {
10793 /* MOD_VEX_W_0_0F91_P_2_LEN_0 */
10794 { "kmovd", { Ed, MaskG }, 0 },
10795 { Bad_Opcode },
10796 },
10797 {
10798 /* MOD_VEX_W_0_0F92_P_0_LEN_0 */
10799 { Bad_Opcode },
10800 { "kmovw", { MaskG, Rdq }, 0 },
10801 },
10802 {
10803 /* MOD_VEX_W_0_0F92_P_2_LEN_0 */
10804 { Bad_Opcode },
10805 { "kmovb", { MaskG, Rdq }, 0 },
10806 },
10807 {
58a211d2 10808 /* MOD_VEX_0F92_P_3_LEN_0 */
ab4e4ed5 10809 { Bad_Opcode },
58a211d2 10810 { "kmovK", { MaskG, Rdq }, 0 },
ab4e4ed5
AF
10811 },
10812 {
10813 /* MOD_VEX_W_0_0F93_P_0_LEN_0 */
10814 { Bad_Opcode },
10815 { "kmovw", { Gdq, MaskR }, 0 },
10816 },
10817 {
10818 /* MOD_VEX_W_0_0F93_P_2_LEN_0 */
10819 { Bad_Opcode },
10820 { "kmovb", { Gdq, MaskR }, 0 },
10821 },
10822 {
58a211d2 10823 /* MOD_VEX_0F93_P_3_LEN_0 */
ab4e4ed5 10824 { Bad_Opcode },
58a211d2 10825 { "kmovK", { Gdq, MaskR }, 0 },
ab4e4ed5
AF
10826 },
10827 {
10828 /* MOD_VEX_W_0_0F98_P_0_LEN_0 */
10829 { Bad_Opcode },
10830 { "kortestw", { MaskG, MaskR }, 0 },
10831 },
10832 {
10833 /* MOD_VEX_W_1_0F98_P_0_LEN_0 */
10834 { Bad_Opcode },
10835 { "kortestq", { MaskG, MaskR }, 0 },
10836 },
10837 {
10838 /* MOD_VEX_W_0_0F98_P_2_LEN_0 */
10839 { Bad_Opcode },
10840 { "kortestb", { MaskG, MaskR }, 0 },
10841 },
10842 {
10843 /* MOD_VEX_W_1_0F98_P_2_LEN_0 */
10844 { Bad_Opcode },
10845 { "kortestd", { MaskG, MaskR }, 0 },
10846 },
10847 {
10848 /* MOD_VEX_W_0_0F99_P_0_LEN_0 */
10849 { Bad_Opcode },
10850 { "ktestw", { MaskG, MaskR }, 0 },
10851 },
10852 {
10853 /* MOD_VEX_W_1_0F99_P_0_LEN_0 */
10854 { Bad_Opcode },
10855 { "ktestq", { MaskG, MaskR }, 0 },
10856 },
10857 {
10858 /* MOD_VEX_W_0_0F99_P_2_LEN_0 */
10859 { Bad_Opcode },
10860 { "ktestb", { MaskG, MaskR }, 0 },
10861 },
10862 {
10863 /* MOD_VEX_W_1_0F99_P_2_LEN_0 */
10864 { Bad_Opcode },
10865 { "ktestd", { MaskG, MaskR }, 0 },
10866 },
876d4bfa 10867 {
592a252b
L
10868 /* MOD_VEX_0FAE_REG_2 */
10869 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_2_M_0) },
876d4bfa 10870 },
bbedc832 10871 {
592a252b
L
10872 /* MOD_VEX_0FAE_REG_3 */
10873 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_3_M_0) },
bbedc832 10874 },
144c41d9 10875 {
592a252b 10876 /* MOD_VEX_0FD7_PREFIX_2 */
592d1631 10877 { Bad_Opcode },
ec6f095a 10878 { "vpmovmskb", { Gdq, XS }, 0 },
144c41d9 10879 },
1afd85e3 10880 {
592a252b 10881 /* MOD_VEX_0FE7_PREFIX_2 */
ec6f095a 10882 { "vmovntdq", { Mx, XM }, 0 },
1afd85e3
L
10883 },
10884 {
592a252b 10885 /* MOD_VEX_0FF0_PREFIX_3 */
ec6f095a 10886 { "vlddqu", { XM, M }, 0 },
92fddf8e 10887 },
75c135a8 10888 {
592a252b
L
10889 /* MOD_VEX_0F381A_PREFIX_2 */
10890 { VEX_LEN_TABLE (VEX_LEN_0F381A_P_2_M_0) },
75c135a8 10891 },
1afd85e3 10892 {
592a252b 10893 /* MOD_VEX_0F382A_PREFIX_2 */
ec6f095a 10894 { "vmovntdqa", { XM, Mx }, 0 },
1afd85e3 10895 },
75c135a8 10896 {
592a252b
L
10897 /* MOD_VEX_0F382C_PREFIX_2 */
10898 { VEX_W_TABLE (VEX_W_0F382C_P_2_M_0) },
75c135a8 10899 },
1afd85e3 10900 {
592a252b
L
10901 /* MOD_VEX_0F382D_PREFIX_2 */
10902 { VEX_W_TABLE (VEX_W_0F382D_P_2_M_0) },
1afd85e3
L
10903 },
10904 {
592a252b
L
10905 /* MOD_VEX_0F382E_PREFIX_2 */
10906 { VEX_W_TABLE (VEX_W_0F382E_P_2_M_0) },
1afd85e3
L
10907 },
10908 {
592a252b
L
10909 /* MOD_VEX_0F382F_PREFIX_2 */
10910 { VEX_W_TABLE (VEX_W_0F382F_P_2_M_0) },
1afd85e3 10911 },
6c30d220
L
10912 {
10913 /* MOD_VEX_0F385A_PREFIX_2 */
10914 { VEX_LEN_TABLE (VEX_LEN_0F385A_P_2_M_0) },
10915 },
10916 {
10917 /* MOD_VEX_0F388C_PREFIX_2 */
bf890a93 10918 { "vpmaskmov%LW", { XM, Vex, Mx }, 0 },
6c30d220
L
10919 },
10920 {
10921 /* MOD_VEX_0F388E_PREFIX_2 */
bf890a93 10922 { "vpmaskmov%LW", { Mx, Vex, XM }, 0 },
6c30d220 10923 },
ab4e4ed5
AF
10924 {
10925 /* MOD_VEX_W_0_0F3A30_P_2_LEN_0 */
10926 { Bad_Opcode },
10927 { "kshiftrb", { MaskG, MaskR, Ib }, 0 },
10928 },
10929 {
10930 /* MOD_VEX_W_1_0F3A30_P_2_LEN_0 */
10931 { Bad_Opcode },
10932 { "kshiftrw", { MaskG, MaskR, Ib }, 0 },
10933 },
10934 {
10935 /* MOD_VEX_W_0_0F3A31_P_2_LEN_0 */
10936 { Bad_Opcode },
10937 { "kshiftrd", { MaskG, MaskR, Ib }, 0 },
10938 },
10939 {
10940 /* MOD_VEX_W_1_0F3A31_P_2_LEN_0 */
10941 { Bad_Opcode },
10942 { "kshiftrq", { MaskG, MaskR, Ib }, 0 },
10943 },
10944 {
10945 /* MOD_VEX_W_0_0F3A32_P_2_LEN_0 */
10946 { Bad_Opcode },
10947 { "kshiftlb", { MaskG, MaskR, Ib }, 0 },
10948 },
10949 {
10950 /* MOD_VEX_W_1_0F3A32_P_2_LEN_0 */
10951 { Bad_Opcode },
10952 { "kshiftlw", { MaskG, MaskR, Ib }, 0 },
10953 },
10954 {
10955 /* MOD_VEX_W_0_0F3A33_P_2_LEN_0 */
10956 { Bad_Opcode },
10957 { "kshiftld", { MaskG, MaskR, Ib }, 0 },
10958 },
10959 {
10960 /* MOD_VEX_W_1_0F3A33_P_2_LEN_0 */
10961 { Bad_Opcode },
10962 { "kshiftlq", { MaskG, MaskR, Ib }, 0 },
10963 },
43234a1e
L
10964#define NEED_MOD_TABLE
10965#include "i386-dis-evex.h"
10966#undef NEED_MOD_TABLE
b844680a
L
10967};
10968
1ceb70f8 10969static const struct dis386 rm_table[][8] = {
42164a71
L
10970 {
10971 /* RM_C6_REG_7 */
bf890a93 10972 { "xabort", { Skip_MODRM, Ib }, 0 },
42164a71
L
10973 },
10974 {
10975 /* RM_C7_REG_7 */
bf890a93 10976 { "xbeginT", { Skip_MODRM, Jv }, 0 },
42164a71 10977 },
b844680a 10978 {
1ceb70f8 10979 /* RM_0F01_REG_0 */
a4e78aa5 10980 { "enclv", { Skip_MODRM }, 0 },
bf890a93
IT
10981 { "vmcall", { Skip_MODRM }, 0 },
10982 { "vmlaunch", { Skip_MODRM }, 0 },
10983 { "vmresume", { Skip_MODRM }, 0 },
10984 { "vmxoff", { Skip_MODRM }, 0 },
be3a8dca 10985 { "pconfig", { Skip_MODRM }, 0 },
b844680a
L
10986 },
10987 {
1ceb70f8 10988 /* RM_0F01_REG_1 */
bf890a93
IT
10989 { "monitor", { { OP_Monitor, 0 } }, 0 },
10990 { "mwait", { { OP_Mwait, 0 } }, 0 },
10991 { "clac", { Skip_MODRM }, 0 },
10992 { "stac", { Skip_MODRM }, 0 },
2cf200a4
IT
10993 { Bad_Opcode },
10994 { Bad_Opcode },
10995 { Bad_Opcode },
bf890a93 10996 { "encls", { Skip_MODRM }, 0 },
b844680a 10997 },
475a2301
L
10998 {
10999 /* RM_0F01_REG_2 */
bf890a93
IT
11000 { "xgetbv", { Skip_MODRM }, 0 },
11001 { "xsetbv", { Skip_MODRM }, 0 },
8729a6f6
L
11002 { Bad_Opcode },
11003 { Bad_Opcode },
bf890a93
IT
11004 { "vmfunc", { Skip_MODRM }, 0 },
11005 { "xend", { Skip_MODRM }, 0 },
11006 { "xtest", { Skip_MODRM }, 0 },
11007 { "enclu", { Skip_MODRM }, 0 },
475a2301 11008 },
b844680a 11009 {
1ceb70f8 11010 /* RM_0F01_REG_3 */
bf890a93
IT
11011 { "vmrun", { Skip_MODRM }, 0 },
11012 { "vmmcall", { Skip_MODRM }, 0 },
11013 { "vmload", { Skip_MODRM }, 0 },
11014 { "vmsave", { Skip_MODRM }, 0 },
11015 { "stgi", { Skip_MODRM }, 0 },
11016 { "clgi", { Skip_MODRM }, 0 },
11017 { "skinit", { Skip_MODRM }, 0 },
11018 { "invlpga", { Skip_MODRM }, 0 },
4e7d34a6 11019 },
8eab4136
L
11020 {
11021 /* RM_0F01_REG_5 */
2234eee6 11022 { PREFIX_TABLE (PREFIX_MOD_3_0F01_REG_5_RM_0) },
8eab4136 11023 { Bad_Opcode },
603555e5 11024 { PREFIX_TABLE (PREFIX_MOD_3_0F01_REG_5_RM_2) },
8eab4136
L
11025 { Bad_Opcode },
11026 { Bad_Opcode },
11027 { Bad_Opcode },
11028 { "rdpkru", { Skip_MODRM }, 0 },
11029 { "wrpkru", { Skip_MODRM }, 0 },
11030 },
4e7d34a6 11031 {
1ceb70f8 11032 /* RM_0F01_REG_7 */
bf890a93
IT
11033 { "swapgs", { Skip_MODRM }, 0 },
11034 { "rdtscp", { Skip_MODRM }, 0 },
9916071f
AP
11035 { "monitorx", { { OP_Monitor, 0 } }, 0 },
11036 { "mwaitx", { { OP_Mwaitx, 0 } }, 0 },
bf890a93 11037 { "clzero", { Skip_MODRM }, 0 },
b844680a 11038 },
603555e5
L
11039 {
11040 /* RM_0F1E_MOD_3_REG_7 */
11041 { "nopQ", { Ev }, 0 },
11042 { "nopQ", { Ev }, 0 },
11043 { "endbr64", { Skip_MODRM }, PREFIX_OPCODE },
11044 { "endbr32", { Skip_MODRM }, PREFIX_OPCODE },
11045 { "nopQ", { Ev }, 0 },
11046 { "nopQ", { Ev }, 0 },
11047 { "nopQ", { Ev }, 0 },
11048 { "nopQ", { Ev }, 0 },
11049 },
b844680a 11050 {
1ceb70f8 11051 /* RM_0FAE_REG_6 */
bf890a93 11052 { "mfence", { Skip_MODRM }, 0 },
b844680a 11053 },
bbedc832 11054 {
1ceb70f8 11055 /* RM_0FAE_REG_7 */
b5cefcca
L
11056 { "sfence", { Skip_MODRM }, 0 },
11057
144c41d9 11058 },
b844680a
L
11059};
11060
c608c12e
AM
11061#define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")
11062
f16cd0d5
L
11063/* We use the high bit to indicate different name for the same
11064 prefix. */
f16cd0d5 11065#define REP_PREFIX (0xf3 | 0x100)
42164a71
L
11066#define XACQUIRE_PREFIX (0xf2 | 0x200)
11067#define XRELEASE_PREFIX (0xf3 | 0x400)
7e8b059b 11068#define BND_PREFIX (0xf2 | 0x400)
04ef582a 11069#define NOTRACK_PREFIX (0x3e | 0x100)
f16cd0d5
L
11070
11071static int
26ca5450 11072ckprefix (void)
252b5132 11073{
f16cd0d5 11074 int newrex, i, length;
52b15da3 11075 rex = 0;
c0f3af97 11076 rex_ignored = 0;
252b5132 11077 prefixes = 0;
7d421014 11078 used_prefixes = 0;
52b15da3 11079 rex_used = 0;
f16cd0d5
L
11080 last_lock_prefix = -1;
11081 last_repz_prefix = -1;
11082 last_repnz_prefix = -1;
11083 last_data_prefix = -1;
11084 last_addr_prefix = -1;
11085 last_rex_prefix = -1;
11086 last_seg_prefix = -1;
d9949a36 11087 fwait_prefix = -1;
285ca992 11088 active_seg_prefix = 0;
f310f33d
L
11089 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
11090 all_prefixes[i] = 0;
11091 i = 0;
f16cd0d5
L
11092 length = 0;
11093 /* The maximum instruction length is 15bytes. */
11094 while (length < MAX_CODE_LENGTH - 1)
252b5132
RH
11095 {
11096 FETCH_DATA (the_info, codep + 1);
52b15da3 11097 newrex = 0;
252b5132
RH
11098 switch (*codep)
11099 {
52b15da3
JH
11100 /* REX prefixes family. */
11101 case 0x40:
11102 case 0x41:
11103 case 0x42:
11104 case 0x43:
11105 case 0x44:
11106 case 0x45:
11107 case 0x46:
11108 case 0x47:
11109 case 0x48:
11110 case 0x49:
11111 case 0x4a:
11112 case 0x4b:
11113 case 0x4c:
11114 case 0x4d:
11115 case 0x4e:
11116 case 0x4f:
f16cd0d5
L
11117 if (address_mode == mode_64bit)
11118 newrex = *codep;
11119 else
11120 return 1;
11121 last_rex_prefix = i;
52b15da3 11122 break;
252b5132
RH
11123 case 0xf3:
11124 prefixes |= PREFIX_REPZ;
f16cd0d5 11125 last_repz_prefix = i;
252b5132
RH
11126 break;
11127 case 0xf2:
11128 prefixes |= PREFIX_REPNZ;
f16cd0d5 11129 last_repnz_prefix = i;
252b5132
RH
11130 break;
11131 case 0xf0:
11132 prefixes |= PREFIX_LOCK;
f16cd0d5 11133 last_lock_prefix = i;
252b5132
RH
11134 break;
11135 case 0x2e:
11136 prefixes |= PREFIX_CS;
f16cd0d5 11137 last_seg_prefix = i;
285ca992 11138 active_seg_prefix = PREFIX_CS;
252b5132
RH
11139 break;
11140 case 0x36:
11141 prefixes |= PREFIX_SS;
f16cd0d5 11142 last_seg_prefix = i;
285ca992 11143 active_seg_prefix = PREFIX_SS;
252b5132
RH
11144 break;
11145 case 0x3e:
11146 prefixes |= PREFIX_DS;
f16cd0d5 11147 last_seg_prefix = i;
285ca992 11148 active_seg_prefix = PREFIX_DS;
252b5132
RH
11149 break;
11150 case 0x26:
11151 prefixes |= PREFIX_ES;
f16cd0d5 11152 last_seg_prefix = i;
285ca992 11153 active_seg_prefix = PREFIX_ES;
252b5132
RH
11154 break;
11155 case 0x64:
11156 prefixes |= PREFIX_FS;
f16cd0d5 11157 last_seg_prefix = i;
285ca992 11158 active_seg_prefix = PREFIX_FS;
252b5132
RH
11159 break;
11160 case 0x65:
11161 prefixes |= PREFIX_GS;
f16cd0d5 11162 last_seg_prefix = i;
285ca992 11163 active_seg_prefix = PREFIX_GS;
252b5132
RH
11164 break;
11165 case 0x66:
11166 prefixes |= PREFIX_DATA;
f16cd0d5 11167 last_data_prefix = i;
252b5132
RH
11168 break;
11169 case 0x67:
11170 prefixes |= PREFIX_ADDR;
f16cd0d5 11171 last_addr_prefix = i;
252b5132 11172 break;
5076851f 11173 case FWAIT_OPCODE:
252b5132
RH
11174 /* fwait is really an instruction. If there are prefixes
11175 before the fwait, they belong to the fwait, *not* to the
11176 following instruction. */
d9949a36 11177 fwait_prefix = i;
3e7d61b2 11178 if (prefixes || rex)
252b5132
RH
11179 {
11180 prefixes |= PREFIX_FWAIT;
11181 codep++;
6c067bbb
RM
11182 /* This ensures that the previous REX prefixes are noticed
11183 as unused prefixes, as in the return case below. */
11184 rex_used = rex;
f16cd0d5 11185 return 1;
252b5132
RH
11186 }
11187 prefixes = PREFIX_FWAIT;
11188 break;
11189 default:
f16cd0d5 11190 return 1;
252b5132 11191 }
52b15da3
JH
11192 /* Rex is ignored when followed by another prefix. */
11193 if (rex)
11194 {
3e7d61b2 11195 rex_used = rex;
f16cd0d5 11196 return 1;
52b15da3 11197 }
f16cd0d5 11198 if (*codep != FWAIT_OPCODE)
4e9ac44a 11199 all_prefixes[i++] = *codep;
52b15da3 11200 rex = newrex;
252b5132 11201 codep++;
f16cd0d5
L
11202 length++;
11203 }
11204 return 0;
11205}
11206
7d421014
ILT
11207/* Return the name of the prefix byte PREF, or NULL if PREF is not a
11208 prefix byte. */
11209
11210static const char *
26ca5450 11211prefix_name (int pref, int sizeflag)
7d421014 11212{
0003779b
L
11213 static const char *rexes [16] =
11214 {
11215 "rex", /* 0x40 */
11216 "rex.B", /* 0x41 */
11217 "rex.X", /* 0x42 */
11218 "rex.XB", /* 0x43 */
11219 "rex.R", /* 0x44 */
11220 "rex.RB", /* 0x45 */
11221 "rex.RX", /* 0x46 */
11222 "rex.RXB", /* 0x47 */
11223 "rex.W", /* 0x48 */
11224 "rex.WB", /* 0x49 */
11225 "rex.WX", /* 0x4a */
11226 "rex.WXB", /* 0x4b */
11227 "rex.WR", /* 0x4c */
11228 "rex.WRB", /* 0x4d */
11229 "rex.WRX", /* 0x4e */
11230 "rex.WRXB", /* 0x4f */
11231 };
11232
7d421014
ILT
11233 switch (pref)
11234 {
52b15da3
JH
11235 /* REX prefixes family. */
11236 case 0x40:
52b15da3 11237 case 0x41:
52b15da3 11238 case 0x42:
52b15da3 11239 case 0x43:
52b15da3 11240 case 0x44:
52b15da3 11241 case 0x45:
52b15da3 11242 case 0x46:
52b15da3 11243 case 0x47:
52b15da3 11244 case 0x48:
52b15da3 11245 case 0x49:
52b15da3 11246 case 0x4a:
52b15da3 11247 case 0x4b:
52b15da3 11248 case 0x4c:
52b15da3 11249 case 0x4d:
52b15da3 11250 case 0x4e:
52b15da3 11251 case 0x4f:
0003779b 11252 return rexes [pref - 0x40];
7d421014
ILT
11253 case 0xf3:
11254 return "repz";
11255 case 0xf2:
11256 return "repnz";
11257 case 0xf0:
11258 return "lock";
11259 case 0x2e:
11260 return "cs";
11261 case 0x36:
11262 return "ss";
11263 case 0x3e:
11264 return "ds";
11265 case 0x26:
11266 return "es";
11267 case 0x64:
11268 return "fs";
11269 case 0x65:
11270 return "gs";
11271 case 0x66:
11272 return (sizeflag & DFLAG) ? "data16" : "data32";
11273 case 0x67:
cb712a9e 11274 if (address_mode == mode_64bit)
db6eb5be 11275 return (sizeflag & AFLAG) ? "addr32" : "addr64";
c1a64871 11276 else
2888cb7a 11277 return (sizeflag & AFLAG) ? "addr16" : "addr32";
7d421014
ILT
11278 case FWAIT_OPCODE:
11279 return "fwait";
f16cd0d5
L
11280 case REP_PREFIX:
11281 return "rep";
42164a71
L
11282 case XACQUIRE_PREFIX:
11283 return "xacquire";
11284 case XRELEASE_PREFIX:
11285 return "xrelease";
7e8b059b
L
11286 case BND_PREFIX:
11287 return "bnd";
04ef582a
L
11288 case NOTRACK_PREFIX:
11289 return "notrack";
7d421014
ILT
11290 default:
11291 return NULL;
11292 }
11293}
11294
ce518a5f
L
11295static char op_out[MAX_OPERANDS][100];
11296static int op_ad, op_index[MAX_OPERANDS];
1d9f512f 11297static int two_source_ops;
ce518a5f
L
11298static bfd_vma op_address[MAX_OPERANDS];
11299static bfd_vma op_riprel[MAX_OPERANDS];
52b15da3 11300static bfd_vma start_pc;
ce518a5f 11301
252b5132
RH
11302/*
11303 * On the 386's of 1988, the maximum length of an instruction is 15 bytes.
11304 * (see topic "Redundant prefixes" in the "Differences from 8086"
11305 * section of the "Virtual 8086 Mode" chapter.)
11306 * 'pc' should be the address of this instruction, it will
11307 * be used to print the target address if this is a relative jump or call
11308 * The function returns the length of this instruction in bytes.
11309 */
11310
252b5132 11311static char intel_syntax;
9d141669 11312static char intel_mnemonic = !SYSV386_COMPAT;
252b5132
RH
11313static char open_char;
11314static char close_char;
11315static char separator_char;
11316static char scale_char;
11317
5db04b09
L
11318enum x86_64_isa
11319{
11320 amd64 = 0,
11321 intel64
11322};
11323
11324static enum x86_64_isa isa64;
11325
e396998b
AM
11326/* Here for backwards compatibility. When gdb stops using
11327 print_insn_i386_att and print_insn_i386_intel these functions can
11328 disappear, and print_insn_i386 be merged into print_insn. */
252b5132 11329int
26ca5450 11330print_insn_i386_att (bfd_vma pc, disassemble_info *info)
252b5132
RH
11331{
11332 intel_syntax = 0;
e396998b
AM
11333
11334 return print_insn (pc, info);
252b5132
RH
11335}
11336
11337int
26ca5450 11338print_insn_i386_intel (bfd_vma pc, disassemble_info *info)
252b5132
RH
11339{
11340 intel_syntax = 1;
e396998b
AM
11341
11342 return print_insn (pc, info);
252b5132
RH
11343}
11344
e396998b 11345int
26ca5450 11346print_insn_i386 (bfd_vma pc, disassemble_info *info)
e396998b
AM
11347{
11348 intel_syntax = -1;
11349
11350 return print_insn (pc, info);
11351}
11352
f59a29b9
L
11353void
11354print_i386_disassembler_options (FILE *stream)
11355{
11356 fprintf (stream, _("\n\
11357The following i386/x86-64 specific disassembler options are supported for use\n\
11358with the -M switch (multiple options should be separated by commas):\n"));
11359
11360 fprintf (stream, _(" x86-64 Disassemble in 64bit mode\n"));
11361 fprintf (stream, _(" i386 Disassemble in 32bit mode\n"));
11362 fprintf (stream, _(" i8086 Disassemble in 16bit mode\n"));
11363 fprintf (stream, _(" att Display instruction in AT&T syntax\n"));
11364 fprintf (stream, _(" intel Display instruction in Intel syntax\n"));
9d141669
L
11365 fprintf (stream, _(" att-mnemonic\n"
11366 " Display instruction in AT&T mnemonic\n"));
11367 fprintf (stream, _(" intel-mnemonic\n"
11368 " Display instruction in Intel mnemonic\n"));
f59a29b9
L
11369 fprintf (stream, _(" addr64 Assume 64bit address size\n"));
11370 fprintf (stream, _(" addr32 Assume 32bit address size\n"));
11371 fprintf (stream, _(" addr16 Assume 16bit address size\n"));
11372 fprintf (stream, _(" data32 Assume 32bit data size\n"));
11373 fprintf (stream, _(" data16 Assume 16bit data size\n"));
11374 fprintf (stream, _(" suffix Always display instruction suffix in AT&T syntax\n"));
5db04b09
L
11375 fprintf (stream, _(" amd64 Display instruction in AMD64 ISA\n"));
11376 fprintf (stream, _(" intel64 Display instruction in Intel64 ISA\n"));
f59a29b9
L
11377}
11378
592d1631 11379/* Bad opcode. */
bf890a93 11380static const struct dis386 bad_opcode = { "(bad)", { XX }, 0 };
592d1631 11381
b844680a
L
11382/* Get a pointer to struct dis386 with a valid name. */
11383
11384static const struct dis386 *
8bb15339 11385get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
b844680a 11386{
91d6fa6a 11387 int vindex, vex_table_index;
b844680a
L
11388
11389 if (dp->name != NULL)
11390 return dp;
11391
11392 switch (dp->op[0].bytemode)
11393 {
1ceb70f8
L
11394 case USE_REG_TABLE:
11395 dp = &reg_table[dp->op[1].bytemode][modrm.reg];
11396 break;
11397
11398 case USE_MOD_TABLE:
91d6fa6a
NC
11399 vindex = modrm.mod == 0x3 ? 1 : 0;
11400 dp = &mod_table[dp->op[1].bytemode][vindex];
1ceb70f8
L
11401 break;
11402
11403 case USE_RM_TABLE:
11404 dp = &rm_table[dp->op[1].bytemode][modrm.rm];
b844680a
L
11405 break;
11406
4e7d34a6 11407 case USE_PREFIX_TABLE:
c0f3af97 11408 if (need_vex)
b844680a 11409 {
c0f3af97
L
11410 /* The prefix in VEX is implicit. */
11411 switch (vex.prefix)
11412 {
11413 case 0:
91d6fa6a 11414 vindex = 0;
c0f3af97
L
11415 break;
11416 case REPE_PREFIX_OPCODE:
91d6fa6a 11417 vindex = 1;
c0f3af97
L
11418 break;
11419 case DATA_PREFIX_OPCODE:
91d6fa6a 11420 vindex = 2;
c0f3af97
L
11421 break;
11422 case REPNE_PREFIX_OPCODE:
91d6fa6a 11423 vindex = 3;
c0f3af97
L
11424 break;
11425 default:
11426 abort ();
11427 break;
11428 }
b844680a 11429 }
7bb15c6f 11430 else
b844680a 11431 {
285ca992
L
11432 int last_prefix = -1;
11433 int prefix = 0;
91d6fa6a 11434 vindex = 0;
285ca992
L
11435 /* We check PREFIX_REPNZ and PREFIX_REPZ before PREFIX_DATA.
11436 When there are multiple PREFIX_REPNZ and PREFIX_REPZ, the
11437 last one wins. */
11438 if ((prefixes & (PREFIX_REPZ | PREFIX_REPNZ)) != 0)
b844680a 11439 {
285ca992 11440 if (last_repz_prefix > last_repnz_prefix)
c0f3af97 11441 {
285ca992
L
11442 vindex = 1;
11443 prefix = PREFIX_REPZ;
11444 last_prefix = last_repz_prefix;
c0f3af97
L
11445 }
11446 else
b844680a 11447 {
285ca992
L
11448 vindex = 3;
11449 prefix = PREFIX_REPNZ;
11450 last_prefix = last_repnz_prefix;
b844680a 11451 }
285ca992 11452
507bd325
L
11453 /* Check if prefix should be ignored. */
11454 if ((((prefix_table[dp->op[1].bytemode][vindex].prefix_requirement
11455 & PREFIX_IGNORED) >> PREFIX_IGNORED_SHIFT)
11456 & prefix) != 0)
285ca992
L
11457 vindex = 0;
11458 }
11459
11460 if (vindex == 0 && (prefixes & PREFIX_DATA) != 0)
11461 {
11462 vindex = 2;
11463 prefix = PREFIX_DATA;
11464 last_prefix = last_data_prefix;
11465 }
11466
11467 if (vindex != 0)
11468 {
11469 used_prefixes |= prefix;
11470 all_prefixes[last_prefix] = 0;
b844680a
L
11471 }
11472 }
91d6fa6a 11473 dp = &prefix_table[dp->op[1].bytemode][vindex];
b844680a
L
11474 break;
11475
4e7d34a6 11476 case USE_X86_64_TABLE:
91d6fa6a
NC
11477 vindex = address_mode == mode_64bit ? 1 : 0;
11478 dp = &x86_64_table[dp->op[1].bytemode][vindex];
b844680a
L
11479 break;
11480
4e7d34a6 11481 case USE_3BYTE_TABLE:
8bb15339 11482 FETCH_DATA (info, codep + 2);
91d6fa6a
NC
11483 vindex = *codep++;
11484 dp = &three_byte_table[dp->op[1].bytemode][vindex];
285ca992 11485 end_codep = codep;
8bb15339
L
11486 modrm.mod = (*codep >> 6) & 3;
11487 modrm.reg = (*codep >> 3) & 7;
11488 modrm.rm = *codep & 7;
11489 break;
11490
c0f3af97
L
11491 case USE_VEX_LEN_TABLE:
11492 if (!need_vex)
11493 abort ();
11494
11495 switch (vex.length)
11496 {
11497 case 128:
91d6fa6a 11498 vindex = 0;
c0f3af97
L
11499 break;
11500 case 256:
91d6fa6a 11501 vindex = 1;
c0f3af97
L
11502 break;
11503 default:
11504 abort ();
11505 break;
11506 }
11507
91d6fa6a 11508 dp = &vex_len_table[dp->op[1].bytemode][vindex];
c0f3af97
L
11509 break;
11510
04e2a182
L
11511 case USE_EVEX_LEN_TABLE:
11512 if (!vex.evex)
11513 abort ();
11514
11515 switch (vex.length)
11516 {
11517 case 128:
11518 vindex = 0;
11519 break;
11520 case 256:
11521 vindex = 1;
11522 break;
11523 case 512:
11524 vindex = 2;
11525 break;
11526 default:
11527 abort ();
11528 break;
11529 }
11530
11531 dp = &evex_len_table[dp->op[1].bytemode][vindex];
11532 break;
11533
f88c9eb0
SP
11534 case USE_XOP_8F_TABLE:
11535 FETCH_DATA (info, codep + 3);
11536 /* All bits in the REX prefix are ignored. */
11537 rex_ignored = rex;
11538 rex = ~(*codep >> 5) & 0x7;
11539
11540 /* VEX_TABLE_INDEX is the mmmmm part of the XOP byte 1 "RCB.mmmmm". */
11541 switch ((*codep & 0x1f))
11542 {
11543 default:
f07af43e
L
11544 dp = &bad_opcode;
11545 return dp;
5dd85c99
SP
11546 case 0x8:
11547 vex_table_index = XOP_08;
11548 break;
f88c9eb0
SP
11549 case 0x9:
11550 vex_table_index = XOP_09;
11551 break;
11552 case 0xa:
11553 vex_table_index = XOP_0A;
11554 break;
11555 }
11556 codep++;
11557 vex.w = *codep & 0x80;
11558 if (vex.w && address_mode == mode_64bit)
11559 rex |= REX_W;
11560
11561 vex.register_specifier = (~(*codep >> 3)) & 0xf;
abfcb414 11562 if (address_mode != mode_64bit)
f07af43e 11563 {
abfcb414
AP
11564 /* In 16/32-bit mode REX_B is silently ignored. */
11565 rex &= ~REX_B;
f07af43e 11566 }
f88c9eb0
SP
11567
11568 vex.length = (*codep & 0x4) ? 256 : 128;
11569 switch ((*codep & 0x3))
11570 {
11571 case 0:
f88c9eb0
SP
11572 break;
11573 case 1:
11574 vex.prefix = DATA_PREFIX_OPCODE;
11575 break;
11576 case 2:
11577 vex.prefix = REPE_PREFIX_OPCODE;
11578 break;
11579 case 3:
11580 vex.prefix = REPNE_PREFIX_OPCODE;
11581 break;
11582 }
11583 need_vex = 1;
11584 need_vex_reg = 1;
11585 codep++;
91d6fa6a
NC
11586 vindex = *codep++;
11587 dp = &xop_table[vex_table_index][vindex];
c48244a5 11588
285ca992 11589 end_codep = codep;
c48244a5
SP
11590 FETCH_DATA (info, codep + 1);
11591 modrm.mod = (*codep >> 6) & 3;
11592 modrm.reg = (*codep >> 3) & 7;
11593 modrm.rm = *codep & 7;
f88c9eb0
SP
11594 break;
11595
c0f3af97 11596 case USE_VEX_C4_TABLE:
43234a1e 11597 /* VEX prefix. */
c0f3af97
L
11598 FETCH_DATA (info, codep + 3);
11599 /* All bits in the REX prefix are ignored. */
11600 rex_ignored = rex;
11601 rex = ~(*codep >> 5) & 0x7;
11602 switch ((*codep & 0x1f))
11603 {
11604 default:
f07af43e
L
11605 dp = &bad_opcode;
11606 return dp;
c0f3af97 11607 case 0x1:
f88c9eb0 11608 vex_table_index = VEX_0F;
c0f3af97
L
11609 break;
11610 case 0x2:
f88c9eb0 11611 vex_table_index = VEX_0F38;
c0f3af97
L
11612 break;
11613 case 0x3:
f88c9eb0 11614 vex_table_index = VEX_0F3A;
c0f3af97
L
11615 break;
11616 }
11617 codep++;
11618 vex.w = *codep & 0x80;
9889cbb1 11619 if (address_mode == mode_64bit)
f07af43e 11620 {
9889cbb1
L
11621 if (vex.w)
11622 rex |= REX_W;
9889cbb1
L
11623 }
11624 else
11625 {
11626 /* For the 3-byte VEX prefix in 32-bit mode, the REX_B bit
11627 is ignored, other REX bits are 0 and the highest bit in
5f847646 11628 VEX.vvvv is also ignored (but we mustn't clear it here). */
9889cbb1 11629 rex = 0;
f07af43e 11630 }
5f847646 11631 vex.register_specifier = (~(*codep >> 3)) & 0xf;
c0f3af97
L
11632 vex.length = (*codep & 0x4) ? 256 : 128;
11633 switch ((*codep & 0x3))
11634 {
11635 case 0:
c0f3af97
L
11636 break;
11637 case 1:
11638 vex.prefix = DATA_PREFIX_OPCODE;
11639 break;
11640 case 2:
11641 vex.prefix = REPE_PREFIX_OPCODE;
11642 break;
11643 case 3:
11644 vex.prefix = REPNE_PREFIX_OPCODE;
11645 break;
11646 }
11647 need_vex = 1;
11648 need_vex_reg = 1;
11649 codep++;
91d6fa6a
NC
11650 vindex = *codep++;
11651 dp = &vex_table[vex_table_index][vindex];
285ca992 11652 end_codep = codep;
53c4d625
JB
11653 /* There is no MODRM byte for VEX0F 77. */
11654 if (vex_table_index != VEX_0F || vindex != 0x77)
c0f3af97
L
11655 {
11656 FETCH_DATA (info, codep + 1);
11657 modrm.mod = (*codep >> 6) & 3;
11658 modrm.reg = (*codep >> 3) & 7;
11659 modrm.rm = *codep & 7;
11660 }
11661 break;
11662
11663 case USE_VEX_C5_TABLE:
43234a1e 11664 /* VEX prefix. */
c0f3af97
L
11665 FETCH_DATA (info, codep + 2);
11666 /* All bits in the REX prefix are ignored. */
11667 rex_ignored = rex;
11668 rex = (*codep & 0x80) ? 0 : REX_R;
11669
9889cbb1
L
11670 /* For the 2-byte VEX prefix in 32-bit mode, the highest bit in
11671 VEX.vvvv is 1. */
c0f3af97 11672 vex.register_specifier = (~(*codep >> 3)) & 0xf;
c0f3af97
L
11673 vex.length = (*codep & 0x4) ? 256 : 128;
11674 switch ((*codep & 0x3))
11675 {
11676 case 0:
c0f3af97
L
11677 break;
11678 case 1:
11679 vex.prefix = DATA_PREFIX_OPCODE;
11680 break;
11681 case 2:
11682 vex.prefix = REPE_PREFIX_OPCODE;
11683 break;
11684 case 3:
11685 vex.prefix = REPNE_PREFIX_OPCODE;
11686 break;
11687 }
11688 need_vex = 1;
11689 need_vex_reg = 1;
11690 codep++;
91d6fa6a
NC
11691 vindex = *codep++;
11692 dp = &vex_table[dp->op[1].bytemode][vindex];
285ca992 11693 end_codep = codep;
53c4d625
JB
11694 /* There is no MODRM byte for VEX 77. */
11695 if (vindex != 0x77)
c0f3af97
L
11696 {
11697 FETCH_DATA (info, codep + 1);
11698 modrm.mod = (*codep >> 6) & 3;
11699 modrm.reg = (*codep >> 3) & 7;
11700 modrm.rm = *codep & 7;
11701 }
11702 break;
11703
9e30b8e0
L
11704 case USE_VEX_W_TABLE:
11705 if (!need_vex)
11706 abort ();
11707
11708 dp = &vex_w_table[dp->op[1].bytemode][vex.w ? 1 : 0];
11709 break;
11710
43234a1e
L
11711 case USE_EVEX_TABLE:
11712 two_source_ops = 0;
11713 /* EVEX prefix. */
11714 vex.evex = 1;
11715 FETCH_DATA (info, codep + 4);
11716 /* All bits in the REX prefix are ignored. */
11717 rex_ignored = rex;
11718 /* The first byte after 0x62. */
11719 rex = ~(*codep >> 5) & 0x7;
11720 vex.r = *codep & 0x10;
11721 switch ((*codep & 0xf))
11722 {
11723 default:
11724 return &bad_opcode;
11725 case 0x1:
11726 vex_table_index = EVEX_0F;
11727 break;
11728 case 0x2:
11729 vex_table_index = EVEX_0F38;
11730 break;
11731 case 0x3:
11732 vex_table_index = EVEX_0F3A;
11733 break;
11734 }
11735
11736 /* The second byte after 0x62. */
11737 codep++;
11738 vex.w = *codep & 0x80;
11739 if (vex.w && address_mode == mode_64bit)
11740 rex |= REX_W;
11741
11742 vex.register_specifier = (~(*codep >> 3)) & 0xf;
43234a1e
L
11743
11744 /* The U bit. */
11745 if (!(*codep & 0x4))
11746 return &bad_opcode;
11747
11748 switch ((*codep & 0x3))
11749 {
11750 case 0:
43234a1e
L
11751 break;
11752 case 1:
11753 vex.prefix = DATA_PREFIX_OPCODE;
11754 break;
11755 case 2:
11756 vex.prefix = REPE_PREFIX_OPCODE;
11757 break;
11758 case 3:
11759 vex.prefix = REPNE_PREFIX_OPCODE;
11760 break;
11761 }
11762
11763 /* The third byte after 0x62. */
11764 codep++;
11765
11766 /* Remember the static rounding bits. */
11767 vex.ll = (*codep >> 5) & 3;
11768 vex.b = (*codep & 0x10) != 0;
11769
11770 vex.v = *codep & 0x8;
11771 vex.mask_register_specifier = *codep & 0x7;
11772 vex.zeroing = *codep & 0x80;
11773
5f847646
JB
11774 if (address_mode != mode_64bit)
11775 {
11776 /* In 16/32-bit mode silently ignore following bits. */
11777 rex &= ~REX_B;
11778 vex.r = 1;
11779 vex.v = 1;
11780 }
11781
43234a1e
L
11782 need_vex = 1;
11783 need_vex_reg = 1;
11784 codep++;
11785 vindex = *codep++;
11786 dp = &evex_table[vex_table_index][vindex];
285ca992 11787 end_codep = codep;
43234a1e
L
11788 FETCH_DATA (info, codep + 1);
11789 modrm.mod = (*codep >> 6) & 3;
11790 modrm.reg = (*codep >> 3) & 7;
11791 modrm.rm = *codep & 7;
11792
11793 /* Set vector length. */
11794 if (modrm.mod == 3 && vex.b)
11795 vex.length = 512;
11796 else
11797 {
11798 switch (vex.ll)
11799 {
11800 case 0x0:
11801 vex.length = 128;
11802 break;
11803 case 0x1:
11804 vex.length = 256;
11805 break;
11806 case 0x2:
11807 vex.length = 512;
11808 break;
11809 default:
11810 return &bad_opcode;
11811 }
11812 }
11813 break;
11814
592d1631
L
11815 case 0:
11816 dp = &bad_opcode;
11817 break;
11818
b844680a 11819 default:
d34b5006 11820 abort ();
b844680a
L
11821 }
11822
11823 if (dp->name != NULL)
11824 return dp;
11825 else
8bb15339 11826 return get_valid_dis386 (dp, info);
b844680a
L
11827}
11828
dfc8cf43 11829static void
55cf16e1 11830get_sib (disassemble_info *info, int sizeflag)
dfc8cf43
L
11831{
11832 /* If modrm.mod == 3, operand must be register. */
11833 if (need_modrm
55cf16e1 11834 && ((sizeflag & AFLAG) || address_mode == mode_64bit)
dfc8cf43
L
11835 && modrm.mod != 3
11836 && modrm.rm == 4)
11837 {
11838 FETCH_DATA (info, codep + 2);
11839 sib.index = (codep [1] >> 3) & 7;
11840 sib.scale = (codep [1] >> 6) & 3;
11841 sib.base = codep [1] & 7;
11842 }
11843}
11844
e396998b 11845static int
26ca5450 11846print_insn (bfd_vma pc, disassemble_info *info)
252b5132 11847{
2da11e11 11848 const struct dis386 *dp;
252b5132 11849 int i;
ce518a5f 11850 char *op_txt[MAX_OPERANDS];
252b5132 11851 int needcomma;
df18fdba 11852 int sizeflag, orig_sizeflag;
e396998b 11853 const char *p;
252b5132 11854 struct dis_private priv;
f16cd0d5 11855 int prefix_length;
252b5132 11856
d7921315
L
11857 priv.orig_sizeflag = AFLAG | DFLAG;
11858 if ((info->mach & bfd_mach_i386_i386) != 0)
cb712a9e 11859 address_mode = mode_32bit;
2da11e11 11860 else if (info->mach == bfd_mach_i386_i8086)
d7921315
L
11861 {
11862 address_mode = mode_16bit;
11863 priv.orig_sizeflag = 0;
11864 }
2da11e11 11865 else
d7921315
L
11866 address_mode = mode_64bit;
11867
11868 if (intel_syntax == (char) -1)
11869 intel_syntax = (info->mach & bfd_mach_i386_intel_syntax) != 0;
e396998b
AM
11870
11871 for (p = info->disassembler_options; p != NULL; )
11872 {
5db04b09
L
11873 if (CONST_STRNEQ (p, "amd64"))
11874 isa64 = amd64;
11875 else if (CONST_STRNEQ (p, "intel64"))
11876 isa64 = intel64;
11877 else if (CONST_STRNEQ (p, "x86-64"))
e396998b 11878 {
cb712a9e 11879 address_mode = mode_64bit;
e396998b
AM
11880 priv.orig_sizeflag = AFLAG | DFLAG;
11881 }
0112cd26 11882 else if (CONST_STRNEQ (p, "i386"))
e396998b 11883 {
cb712a9e 11884 address_mode = mode_32bit;
e396998b
AM
11885 priv.orig_sizeflag = AFLAG | DFLAG;
11886 }
0112cd26 11887 else if (CONST_STRNEQ (p, "i8086"))
e396998b 11888 {
cb712a9e 11889 address_mode = mode_16bit;
e396998b
AM
11890 priv.orig_sizeflag = 0;
11891 }
0112cd26 11892 else if (CONST_STRNEQ (p, "intel"))
e396998b
AM
11893 {
11894 intel_syntax = 1;
9d141669
L
11895 if (CONST_STRNEQ (p + 5, "-mnemonic"))
11896 intel_mnemonic = 1;
e396998b 11897 }
0112cd26 11898 else if (CONST_STRNEQ (p, "att"))
e396998b
AM
11899 {
11900 intel_syntax = 0;
9d141669
L
11901 if (CONST_STRNEQ (p + 3, "-mnemonic"))
11902 intel_mnemonic = 0;
e396998b 11903 }
0112cd26 11904 else if (CONST_STRNEQ (p, "addr"))
e396998b 11905 {
f59a29b9
L
11906 if (address_mode == mode_64bit)
11907 {
11908 if (p[4] == '3' && p[5] == '2')
11909 priv.orig_sizeflag &= ~AFLAG;
11910 else if (p[4] == '6' && p[5] == '4')
11911 priv.orig_sizeflag |= AFLAG;
11912 }
11913 else
11914 {
11915 if (p[4] == '1' && p[5] == '6')
11916 priv.orig_sizeflag &= ~AFLAG;
11917 else if (p[4] == '3' && p[5] == '2')
11918 priv.orig_sizeflag |= AFLAG;
11919 }
e396998b 11920 }
0112cd26 11921 else if (CONST_STRNEQ (p, "data"))
e396998b
AM
11922 {
11923 if (p[4] == '1' && p[5] == '6')
11924 priv.orig_sizeflag &= ~DFLAG;
11925 else if (p[4] == '3' && p[5] == '2')
11926 priv.orig_sizeflag |= DFLAG;
11927 }
0112cd26 11928 else if (CONST_STRNEQ (p, "suffix"))
e396998b
AM
11929 priv.orig_sizeflag |= SUFFIX_ALWAYS;
11930
11931 p = strchr (p, ',');
11932 if (p != NULL)
11933 p++;
11934 }
11935
c0f92bf9
L
11936 if (address_mode == mode_64bit && sizeof (bfd_vma) < 8)
11937 {
11938 (*info->fprintf_func) (info->stream,
11939 _("64-bit address is disabled"));
11940 return -1;
11941 }
11942
e396998b
AM
11943 if (intel_syntax)
11944 {
11945 names64 = intel_names64;
11946 names32 = intel_names32;
11947 names16 = intel_names16;
11948 names8 = intel_names8;
11949 names8rex = intel_names8rex;
11950 names_seg = intel_names_seg;
b9733481 11951 names_mm = intel_names_mm;
7e8b059b 11952 names_bnd = intel_names_bnd;
b9733481
L
11953 names_xmm = intel_names_xmm;
11954 names_ymm = intel_names_ymm;
43234a1e 11955 names_zmm = intel_names_zmm;
db51cc60
L
11956 index64 = intel_index64;
11957 index32 = intel_index32;
43234a1e 11958 names_mask = intel_names_mask;
e396998b
AM
11959 index16 = intel_index16;
11960 open_char = '[';
11961 close_char = ']';
11962 separator_char = '+';
11963 scale_char = '*';
11964 }
11965 else
11966 {
11967 names64 = att_names64;
11968 names32 = att_names32;
11969 names16 = att_names16;
11970 names8 = att_names8;
11971 names8rex = att_names8rex;
11972 names_seg = att_names_seg;
b9733481 11973 names_mm = att_names_mm;
7e8b059b 11974 names_bnd = att_names_bnd;
b9733481
L
11975 names_xmm = att_names_xmm;
11976 names_ymm = att_names_ymm;
43234a1e 11977 names_zmm = att_names_zmm;
db51cc60
L
11978 index64 = att_index64;
11979 index32 = att_index32;
43234a1e 11980 names_mask = att_names_mask;
e396998b
AM
11981 index16 = att_index16;
11982 open_char = '(';
11983 close_char = ')';
11984 separator_char = ',';
11985 scale_char = ',';
11986 }
2da11e11 11987
4fe53c98 11988 /* The output looks better if we put 7 bytes on a line, since that
8a9036a4
L
11989 puts most long word instructions on a single line. Use 8 bytes
11990 for Intel L1OM. */
d7921315 11991 if ((info->mach & bfd_mach_l1om) != 0)
8a9036a4
L
11992 info->bytes_per_line = 8;
11993 else
11994 info->bytes_per_line = 7;
252b5132 11995
26ca5450 11996 info->private_data = &priv;
252b5132
RH
11997 priv.max_fetched = priv.the_buffer;
11998 priv.insn_start = pc;
252b5132
RH
11999
12000 obuf[0] = 0;
ce518a5f
L
12001 for (i = 0; i < MAX_OPERANDS; ++i)
12002 {
12003 op_out[i][0] = 0;
12004 op_index[i] = -1;
12005 }
252b5132
RH
12006
12007 the_info = info;
12008 start_pc = pc;
e396998b
AM
12009 start_codep = priv.the_buffer;
12010 codep = priv.the_buffer;
252b5132 12011
8df14d78 12012 if (OPCODES_SIGSETJMP (priv.bailout) != 0)
5076851f 12013 {
7d421014
ILT
12014 const char *name;
12015
5076851f 12016 /* Getting here means we tried for data but didn't get it. That
e396998b
AM
12017 means we have an incomplete instruction of some sort. Just
12018 print the first byte as a prefix or a .byte pseudo-op. */
12019 if (codep > priv.the_buffer)
5076851f 12020 {
e396998b 12021 name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
7d421014
ILT
12022 if (name != NULL)
12023 (*info->fprintf_func) (info->stream, "%s", name);
12024 else
5076851f 12025 {
7d421014
ILT
12026 /* Just print the first byte as a .byte instruction. */
12027 (*info->fprintf_func) (info->stream, ".byte 0x%x",
e396998b 12028 (unsigned int) priv.the_buffer[0]);
5076851f 12029 }
5076851f 12030
7d421014 12031 return 1;
5076851f
ILT
12032 }
12033
12034 return -1;
12035 }
12036
52b15da3 12037 obufp = obuf;
f16cd0d5
L
12038 sizeflag = priv.orig_sizeflag;
12039
12040 if (!ckprefix () || rex_used)
12041 {
12042 /* Too many prefixes or unused REX prefixes. */
12043 for (i = 0;
f6dd4781 12044 i < (int) ARRAY_SIZE (all_prefixes) && all_prefixes[i];
f16cd0d5 12045 i++)
de882298 12046 (*info->fprintf_func) (info->stream, "%s%s",
6c067bbb 12047 i == 0 ? "" : " ",
f16cd0d5 12048 prefix_name (all_prefixes[i], sizeflag));
de882298 12049 return i;
f16cd0d5 12050 }
252b5132
RH
12051
12052 insn_codep = codep;
12053
12054 FETCH_DATA (info, codep + 1);
12055 two_source_ops = (*codep == 0x62) || (*codep == 0xc8);
12056
3e7d61b2 12057 if (((prefixes & PREFIX_FWAIT)
f16cd0d5 12058 && ((*codep < 0xd8) || (*codep > 0xdf))))
252b5132 12059 {
86a80a50 12060 /* Handle prefixes before fwait. */
d9949a36 12061 for (i = 0; i < fwait_prefix && all_prefixes[i];
86a80a50
L
12062 i++)
12063 (*info->fprintf_func) (info->stream, "%s ",
12064 prefix_name (all_prefixes[i], sizeflag));
f16cd0d5 12065 (*info->fprintf_func) (info->stream, "fwait");
86a80a50 12066 return i + 1;
252b5132
RH
12067 }
12068
252b5132
RH
12069 if (*codep == 0x0f)
12070 {
eec0f4ca 12071 unsigned char threebyte;
5f40e14d
JS
12072
12073 codep++;
12074 FETCH_DATA (info, codep + 1);
12075 threebyte = *codep;
eec0f4ca 12076 dp = &dis386_twobyte[threebyte];
252b5132 12077 need_modrm = twobyte_has_modrm[*codep];
eec0f4ca 12078 codep++;
252b5132
RH
12079 }
12080 else
12081 {
6439fc28 12082 dp = &dis386[*codep];
252b5132 12083 need_modrm = onebyte_has_modrm[*codep];
eec0f4ca 12084 codep++;
252b5132 12085 }
246c51aa 12086
df18fdba
L
12087 /* Save sizeflag for printing the extra prefixes later before updating
12088 it for mnemonic and operand processing. The prefix names depend
12089 only on the address mode. */
12090 orig_sizeflag = sizeflag;
c608c12e 12091 if (prefixes & PREFIX_ADDR)
df18fdba 12092 sizeflag ^= AFLAG;
b844680a 12093 if ((prefixes & PREFIX_DATA))
df18fdba 12094 sizeflag ^= DFLAG;
3ffd33cf 12095
285ca992 12096 end_codep = codep;
8bb15339 12097 if (need_modrm)
252b5132
RH
12098 {
12099 FETCH_DATA (info, codep + 1);
7967e09e
L
12100 modrm.mod = (*codep >> 6) & 3;
12101 modrm.reg = (*codep >> 3) & 7;
12102 modrm.rm = *codep & 7;
252b5132
RH
12103 }
12104
42d5f9c6
MS
12105 need_vex = 0;
12106 need_vex_reg = 0;
12107 vex_w_done = 0;
caf0678c 12108 memset (&vex, 0, sizeof (vex));
55b126d4 12109
ce518a5f 12110 if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE)
252b5132 12111 {
55cf16e1 12112 get_sib (info, sizeflag);
252b5132
RH
12113 dofloat (sizeflag);
12114 }
12115 else
12116 {
8bb15339 12117 dp = get_valid_dis386 (dp, info);
b844680a 12118 if (dp != NULL && putop (dp->name, sizeflag) == 0)
6c067bbb 12119 {
55cf16e1 12120 get_sib (info, sizeflag);
ce518a5f
L
12121 for (i = 0; i < MAX_OPERANDS; ++i)
12122 {
246c51aa 12123 obufp = op_out[i];
ce518a5f
L
12124 op_ad = MAX_OPERANDS - 1 - i;
12125 if (dp->op[i].rtn)
12126 (*dp->op[i].rtn) (dp->op[i].bytemode, sizeflag);
43234a1e
L
12127 /* For EVEX instruction after the last operand masking
12128 should be printed. */
12129 if (i == 0 && vex.evex)
12130 {
12131 /* Don't print {%k0}. */
12132 if (vex.mask_register_specifier)
12133 {
12134 oappend ("{");
12135 oappend (names_mask[vex.mask_register_specifier]);
12136 oappend ("}");
12137 }
12138 if (vex.zeroing)
12139 oappend ("{z}");
12140 }
ce518a5f 12141 }
6439fc28 12142 }
252b5132
RH
12143 }
12144
d869730d 12145 /* Check if the REX prefix is used. */
e2e6193d 12146 if (rex_ignored == 0 && (rex ^ rex_used) == 0 && last_rex_prefix >= 0)
f16cd0d5
L
12147 all_prefixes[last_rex_prefix] = 0;
12148
5e6718e4 12149 /* Check if the SEG prefix is used. */
f16cd0d5
L
12150 if ((prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS | PREFIX_ES
12151 | PREFIX_FS | PREFIX_GS)) != 0
285ca992 12152 && (used_prefixes & active_seg_prefix) != 0)
f16cd0d5
L
12153 all_prefixes[last_seg_prefix] = 0;
12154
5e6718e4 12155 /* Check if the ADDR prefix is used. */
f16cd0d5
L
12156 if ((prefixes & PREFIX_ADDR) != 0
12157 && (used_prefixes & PREFIX_ADDR) != 0)
12158 all_prefixes[last_addr_prefix] = 0;
12159
df18fdba
L
12160 /* Check if the DATA prefix is used. */
12161 if ((prefixes & PREFIX_DATA) != 0
12162 && (used_prefixes & PREFIX_DATA) != 0)
12163 all_prefixes[last_data_prefix] = 0;
f16cd0d5 12164
df18fdba 12165 /* Print the extra prefixes. */
f16cd0d5 12166 prefix_length = 0;
f310f33d 12167 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
f16cd0d5
L
12168 if (all_prefixes[i])
12169 {
12170 const char *name;
df18fdba 12171 name = prefix_name (all_prefixes[i], orig_sizeflag);
f16cd0d5
L
12172 if (name == NULL)
12173 abort ();
12174 prefix_length += strlen (name) + 1;
12175 (*info->fprintf_func) (info->stream, "%s ", name);
12176 }
b844680a 12177
285ca992
L
12178 /* If the mandatory PREFIX_REPZ/PREFIX_REPNZ/PREFIX_DATA prefix is
12179 unused, opcode is invalid. Since the PREFIX_DATA prefix may be
12180 used by putop and MMX/SSE operand and may be overriden by the
12181 PREFIX_REPZ/PREFIX_REPNZ fix, we check the PREFIX_DATA prefix
12182 separately. */
3888916d 12183 if (dp->prefix_requirement == PREFIX_OPCODE
285ca992
L
12184 && dp != &bad_opcode
12185 && (((prefixes
12186 & (PREFIX_REPZ | PREFIX_REPNZ)) != 0
12187 && (used_prefixes
12188 & (PREFIX_REPZ | PREFIX_REPNZ)) == 0)
12189 || ((((prefixes
12190 & (PREFIX_REPZ | PREFIX_REPNZ | PREFIX_DATA))
12191 == PREFIX_DATA)
12192 && (used_prefixes & PREFIX_DATA) == 0))))
12193 {
12194 (*info->fprintf_func) (info->stream, "(bad)");
12195 return end_codep - priv.the_buffer;
12196 }
12197
f16cd0d5
L
12198 /* Check maximum code length. */
12199 if ((codep - start_codep) > MAX_CODE_LENGTH)
12200 {
12201 (*info->fprintf_func) (info->stream, "(bad)");
12202 return MAX_CODE_LENGTH;
12203 }
b844680a 12204
ea397f5b 12205 obufp = mnemonicendp;
f16cd0d5 12206 for (i = strlen (obuf) + prefix_length; i < 6; i++)
252b5132
RH
12207 oappend (" ");
12208 oappend (" ");
12209 (*info->fprintf_func) (info->stream, "%s", obuf);
12210
12211 /* The enter and bound instructions are printed with operands in the same
12212 order as the intel book; everything else is printed in reverse order. */
2da11e11 12213 if (intel_syntax || two_source_ops)
252b5132 12214 {
185b1163
L
12215 bfd_vma riprel;
12216
ce518a5f 12217 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 12218 op_txt[i] = op_out[i];
246c51aa 12219
3a8547d2
JB
12220 if (intel_syntax && dp && dp->op[2].rtn == OP_Rounding
12221 && dp->op[3].rtn == OP_E && dp->op[4].rtn == NULL)
12222 {
12223 op_txt[2] = op_out[3];
12224 op_txt[3] = op_out[2];
12225 }
12226
ce518a5f
L
12227 for (i = 0; i < (MAX_OPERANDS >> 1); ++i)
12228 {
6c067bbb
RM
12229 op_ad = op_index[i];
12230 op_index[i] = op_index[MAX_OPERANDS - 1 - i];
12231 op_index[MAX_OPERANDS - 1 - i] = op_ad;
185b1163
L
12232 riprel = op_riprel[i];
12233 op_riprel[i] = op_riprel [MAX_OPERANDS - 1 - i];
12234 op_riprel[MAX_OPERANDS - 1 - i] = riprel;
ce518a5f 12235 }
252b5132
RH
12236 }
12237 else
12238 {
ce518a5f 12239 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 12240 op_txt[MAX_OPERANDS - 1 - i] = op_out[i];
050dfa73
MM
12241 }
12242
ce518a5f
L
12243 needcomma = 0;
12244 for (i = 0; i < MAX_OPERANDS; ++i)
12245 if (*op_txt[i])
12246 {
12247 if (needcomma)
12248 (*info->fprintf_func) (info->stream, ",");
12249 if (op_index[i] != -1 && !op_riprel[i])
12250 (*info->print_address_func) ((bfd_vma) op_address[op_index[i]], info);
12251 else
12252 (*info->fprintf_func) (info->stream, "%s", op_txt[i]);
12253 needcomma = 1;
12254 }
050dfa73 12255
ce518a5f 12256 for (i = 0; i < MAX_OPERANDS; i++)
52b15da3
JH
12257 if (op_index[i] != -1 && op_riprel[i])
12258 {
12259 (*info->fprintf_func) (info->stream, " # ");
4fd7268a 12260 (*info->print_address_func) ((bfd_vma) (start_pc + (codep - start_codep)
52b15da3 12261 + op_address[op_index[i]]), info);
185b1163 12262 break;
52b15da3 12263 }
e396998b 12264 return codep - priv.the_buffer;
252b5132
RH
12265}
12266
6439fc28 12267static const char *float_mem[] = {
252b5132 12268 /* d8 */
7c52e0e8
L
12269 "fadd{s|}",
12270 "fmul{s|}",
12271 "fcom{s|}",
12272 "fcomp{s|}",
12273 "fsub{s|}",
12274 "fsubr{s|}",
12275 "fdiv{s|}",
12276 "fdivr{s|}",
db6eb5be 12277 /* d9 */
7c52e0e8 12278 "fld{s|}",
252b5132 12279 "(bad)",
7c52e0e8
L
12280 "fst{s|}",
12281 "fstp{s|}",
9306ca4a 12282 "fldenvIC",
252b5132 12283 "fldcw",
9306ca4a 12284 "fNstenvIC",
252b5132
RH
12285 "fNstcw",
12286 /* da */
7c52e0e8
L
12287 "fiadd{l|}",
12288 "fimul{l|}",
12289 "ficom{l|}",
12290 "ficomp{l|}",
12291 "fisub{l|}",
12292 "fisubr{l|}",
12293 "fidiv{l|}",
12294 "fidivr{l|}",
252b5132 12295 /* db */
7c52e0e8
L
12296 "fild{l|}",
12297 "fisttp{l|}",
12298 "fist{l|}",
12299 "fistp{l|}",
252b5132 12300 "(bad)",
6439fc28 12301 "fld{t||t|}",
252b5132 12302 "(bad)",
6439fc28 12303 "fstp{t||t|}",
252b5132 12304 /* dc */
7c52e0e8
L
12305 "fadd{l|}",
12306 "fmul{l|}",
12307 "fcom{l|}",
12308 "fcomp{l|}",
12309 "fsub{l|}",
12310 "fsubr{l|}",
12311 "fdiv{l|}",
12312 "fdivr{l|}",
252b5132 12313 /* dd */
7c52e0e8
L
12314 "fld{l|}",
12315 "fisttp{ll|}",
12316 "fst{l||}",
12317 "fstp{l|}",
9306ca4a 12318 "frstorIC",
252b5132 12319 "(bad)",
9306ca4a 12320 "fNsaveIC",
252b5132
RH
12321 "fNstsw",
12322 /* de */
ac465521
JB
12323 "fiadd{s|}",
12324 "fimul{s|}",
12325 "ficom{s|}",
12326 "ficomp{s|}",
12327 "fisub{s|}",
12328 "fisubr{s|}",
12329 "fidiv{s|}",
12330 "fidivr{s|}",
252b5132 12331 /* df */
ac465521
JB
12332 "fild{s|}",
12333 "fisttp{s|}",
12334 "fist{s|}",
12335 "fistp{s|}",
252b5132 12336 "fbld",
7c52e0e8 12337 "fild{ll|}",
252b5132 12338 "fbstp",
7c52e0e8 12339 "fistp{ll|}",
1d9f512f
AM
12340};
12341
12342static const unsigned char float_mem_mode[] = {
12343 /* d8 */
12344 d_mode,
12345 d_mode,
12346 d_mode,
12347 d_mode,
12348 d_mode,
12349 d_mode,
12350 d_mode,
12351 d_mode,
12352 /* d9 */
12353 d_mode,
12354 0,
12355 d_mode,
12356 d_mode,
12357 0,
12358 w_mode,
12359 0,
12360 w_mode,
12361 /* da */
12362 d_mode,
12363 d_mode,
12364 d_mode,
12365 d_mode,
12366 d_mode,
12367 d_mode,
12368 d_mode,
12369 d_mode,
12370 /* db */
12371 d_mode,
12372 d_mode,
12373 d_mode,
12374 d_mode,
12375 0,
9306ca4a 12376 t_mode,
1d9f512f 12377 0,
9306ca4a 12378 t_mode,
1d9f512f
AM
12379 /* dc */
12380 q_mode,
12381 q_mode,
12382 q_mode,
12383 q_mode,
12384 q_mode,
12385 q_mode,
12386 q_mode,
12387 q_mode,
12388 /* dd */
12389 q_mode,
12390 q_mode,
12391 q_mode,
12392 q_mode,
12393 0,
12394 0,
12395 0,
12396 w_mode,
12397 /* de */
12398 w_mode,
12399 w_mode,
12400 w_mode,
12401 w_mode,
12402 w_mode,
12403 w_mode,
12404 w_mode,
12405 w_mode,
12406 /* df */
12407 w_mode,
12408 w_mode,
12409 w_mode,
12410 w_mode,
9306ca4a 12411 t_mode,
1d9f512f 12412 q_mode,
9306ca4a 12413 t_mode,
1d9f512f 12414 q_mode
252b5132
RH
12415};
12416
ce518a5f
L
12417#define ST { OP_ST, 0 }
12418#define STi { OP_STi, 0 }
252b5132 12419
48c97fa1
L
12420#define FGRPd9_2 NULL, { { NULL, 1 } }, 0
12421#define FGRPd9_4 NULL, { { NULL, 2 } }, 0
12422#define FGRPd9_5 NULL, { { NULL, 3 } }, 0
12423#define FGRPd9_6 NULL, { { NULL, 4 } }, 0
12424#define FGRPd9_7 NULL, { { NULL, 5 } }, 0
12425#define FGRPda_5 NULL, { { NULL, 6 } }, 0
12426#define FGRPdb_4 NULL, { { NULL, 7 } }, 0
12427#define FGRPde_3 NULL, { { NULL, 8 } }, 0
12428#define FGRPdf_4 NULL, { { NULL, 9 } }, 0
252b5132 12429
2da11e11 12430static const struct dis386 float_reg[][8] = {
252b5132
RH
12431 /* d8 */
12432 {
bf890a93
IT
12433 { "fadd", { ST, STi }, 0 },
12434 { "fmul", { ST, STi }, 0 },
12435 { "fcom", { STi }, 0 },
12436 { "fcomp", { STi }, 0 },
12437 { "fsub", { ST, STi }, 0 },
12438 { "fsubr", { ST, STi }, 0 },
12439 { "fdiv", { ST, STi }, 0 },
12440 { "fdivr", { ST, STi }, 0 },
252b5132
RH
12441 },
12442 /* d9 */
12443 {
bf890a93
IT
12444 { "fld", { STi }, 0 },
12445 { "fxch", { STi }, 0 },
252b5132 12446 { FGRPd9_2 },
592d1631 12447 { Bad_Opcode },
252b5132
RH
12448 { FGRPd9_4 },
12449 { FGRPd9_5 },
12450 { FGRPd9_6 },
12451 { FGRPd9_7 },
12452 },
12453 /* da */
12454 {
bf890a93
IT
12455 { "fcmovb", { ST, STi }, 0 },
12456 { "fcmove", { ST, STi }, 0 },
12457 { "fcmovbe",{ ST, STi }, 0 },
12458 { "fcmovu", { ST, STi }, 0 },
592d1631 12459 { Bad_Opcode },
252b5132 12460 { FGRPda_5 },
592d1631
L
12461 { Bad_Opcode },
12462 { Bad_Opcode },
252b5132
RH
12463 },
12464 /* db */
12465 {
bf890a93
IT
12466 { "fcmovnb",{ ST, STi }, 0 },
12467 { "fcmovne",{ ST, STi }, 0 },
12468 { "fcmovnbe",{ ST, STi }, 0 },
12469 { "fcmovnu",{ ST, STi }, 0 },
252b5132 12470 { FGRPdb_4 },
bf890a93
IT
12471 { "fucomi", { ST, STi }, 0 },
12472 { "fcomi", { ST, STi }, 0 },
592d1631 12473 { Bad_Opcode },
252b5132
RH
12474 },
12475 /* dc */
12476 {
bf890a93
IT
12477 { "fadd", { STi, ST }, 0 },
12478 { "fmul", { STi, ST }, 0 },
592d1631
L
12479 { Bad_Opcode },
12480 { Bad_Opcode },
d53e6b98
JB
12481 { "fsub{!M|r}", { STi, ST }, 0 },
12482 { "fsub{M|}", { STi, ST }, 0 },
12483 { "fdiv{!M|r}", { STi, ST }, 0 },
12484 { "fdiv{M|}", { STi, ST }, 0 },
252b5132
RH
12485 },
12486 /* dd */
12487 {
bf890a93 12488 { "ffree", { STi }, 0 },
592d1631 12489 { Bad_Opcode },
bf890a93
IT
12490 { "fst", { STi }, 0 },
12491 { "fstp", { STi }, 0 },
12492 { "fucom", { STi }, 0 },
12493 { "fucomp", { STi }, 0 },
592d1631
L
12494 { Bad_Opcode },
12495 { Bad_Opcode },
252b5132
RH
12496 },
12497 /* de */
12498 {
bf890a93
IT
12499 { "faddp", { STi, ST }, 0 },
12500 { "fmulp", { STi, ST }, 0 },
592d1631 12501 { Bad_Opcode },
252b5132 12502 { FGRPde_3 },
d53e6b98
JB
12503 { "fsub{!M|r}p", { STi, ST }, 0 },
12504 { "fsub{M|}p", { STi, ST }, 0 },
12505 { "fdiv{!M|r}p", { STi, ST }, 0 },
12506 { "fdiv{M|}p", { STi, ST }, 0 },
252b5132
RH
12507 },
12508 /* df */
12509 {
bf890a93 12510 { "ffreep", { STi }, 0 },
592d1631
L
12511 { Bad_Opcode },
12512 { Bad_Opcode },
12513 { Bad_Opcode },
252b5132 12514 { FGRPdf_4 },
bf890a93
IT
12515 { "fucomip", { ST, STi }, 0 },
12516 { "fcomip", { ST, STi }, 0 },
592d1631 12517 { Bad_Opcode },
252b5132
RH
12518 },
12519};
12520
252b5132 12521static char *fgrps[][8] = {
48c97fa1
L
12522 /* Bad opcode 0 */
12523 {
12524 "(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12525 },
12526
12527 /* d9_2 1 */
252b5132
RH
12528 {
12529 "fnop","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12530 },
12531
48c97fa1 12532 /* d9_4 2 */
252b5132
RH
12533 {
12534 "fchs","fabs","(bad)","(bad)","ftst","fxam","(bad)","(bad)",
12535 },
12536
48c97fa1 12537 /* d9_5 3 */
252b5132
RH
12538 {
12539 "fld1","fldl2t","fldl2e","fldpi","fldlg2","fldln2","fldz","(bad)",
12540 },
12541
48c97fa1 12542 /* d9_6 4 */
252b5132
RH
12543 {
12544 "f2xm1","fyl2x","fptan","fpatan","fxtract","fprem1","fdecstp","fincstp",
12545 },
12546
48c97fa1 12547 /* d9_7 5 */
252b5132
RH
12548 {
12549 "fprem","fyl2xp1","fsqrt","fsincos","frndint","fscale","fsin","fcos",
12550 },
12551
48c97fa1 12552 /* da_5 6 */
252b5132
RH
12553 {
12554 "(bad)","fucompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12555 },
12556
48c97fa1 12557 /* db_4 7 */
252b5132 12558 {
309d3373
JB
12559 "fNeni(8087 only)","fNdisi(8087 only)","fNclex","fNinit",
12560 "fNsetpm(287 only)","frstpm(287 only)","(bad)","(bad)",
252b5132
RH
12561 },
12562
48c97fa1 12563 /* de_3 8 */
252b5132
RH
12564 {
12565 "(bad)","fcompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12566 },
12567
48c97fa1 12568 /* df_4 9 */
252b5132
RH
12569 {
12570 "fNstsw","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12571 },
12572};
12573
b6169b20
L
12574static void
12575swap_operand (void)
12576{
12577 mnemonicendp[0] = '.';
12578 mnemonicendp[1] = 's';
12579 mnemonicendp += 2;
12580}
12581
b844680a
L
12582static void
12583OP_Skip_MODRM (int bytemode ATTRIBUTE_UNUSED,
12584 int sizeflag ATTRIBUTE_UNUSED)
12585{
12586 /* Skip mod/rm byte. */
12587 MODRM_CHECK;
12588 codep++;
12589}
12590
252b5132 12591static void
26ca5450 12592dofloat (int sizeflag)
252b5132 12593{
2da11e11 12594 const struct dis386 *dp;
252b5132
RH
12595 unsigned char floatop;
12596
12597 floatop = codep[-1];
12598
7967e09e 12599 if (modrm.mod != 3)
252b5132 12600 {
7967e09e 12601 int fp_indx = (floatop - 0xd8) * 8 + modrm.reg;
1d9f512f
AM
12602
12603 putop (float_mem[fp_indx], sizeflag);
ce518a5f 12604 obufp = op_out[0];
6e50d963 12605 op_ad = 2;
1d9f512f 12606 OP_E (float_mem_mode[fp_indx], sizeflag);
252b5132
RH
12607 return;
12608 }
6608db57 12609 /* Skip mod/rm byte. */
4bba6815 12610 MODRM_CHECK;
252b5132
RH
12611 codep++;
12612
7967e09e 12613 dp = &float_reg[floatop - 0xd8][modrm.reg];
252b5132
RH
12614 if (dp->name == NULL)
12615 {
7967e09e 12616 putop (fgrps[dp->op[0].bytemode][modrm.rm], sizeflag);
252b5132 12617
6608db57 12618 /* Instruction fnstsw is only one with strange arg. */
252b5132 12619 if (floatop == 0xdf && codep[-1] == 0xe0)
ce518a5f 12620 strcpy (op_out[0], names16[0]);
252b5132
RH
12621 }
12622 else
12623 {
12624 putop (dp->name, sizeflag);
12625
ce518a5f 12626 obufp = op_out[0];
6e50d963 12627 op_ad = 2;
ce518a5f
L
12628 if (dp->op[0].rtn)
12629 (*dp->op[0].rtn) (dp->op[0].bytemode, sizeflag);
6e50d963 12630
ce518a5f 12631 obufp = op_out[1];
6e50d963 12632 op_ad = 1;
ce518a5f
L
12633 if (dp->op[1].rtn)
12634 (*dp->op[1].rtn) (dp->op[1].bytemode, sizeflag);
252b5132
RH
12635 }
12636}
12637
9ce09ba2
RM
12638/* Like oappend (below), but S is a string starting with '%'.
12639 In Intel syntax, the '%' is elided. */
12640static void
12641oappend_maybe_intel (const char *s)
12642{
12643 oappend (s + intel_syntax);
12644}
12645
252b5132 12646static void
26ca5450 12647OP_ST (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 12648{
9ce09ba2 12649 oappend_maybe_intel ("%st");
252b5132
RH
12650}
12651
252b5132 12652static void
26ca5450 12653OP_STi (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 12654{
7967e09e 12655 sprintf (scratchbuf, "%%st(%d)", modrm.rm);
9ce09ba2 12656 oappend_maybe_intel (scratchbuf);
252b5132
RH
12657}
12658
6608db57 12659/* Capital letters in template are macros. */
6439fc28 12660static int
d3ce72d0 12661putop (const char *in_template, int sizeflag)
252b5132 12662{
2da11e11 12663 const char *p;
9306ca4a 12664 int alt = 0;
9d141669 12665 int cond = 1;
98b528ac
L
12666 unsigned int l = 0, len = 1;
12667 char last[4];
12668
12669#define SAVE_LAST(c) \
12670 if (l < len && l < sizeof (last)) \
12671 last[l++] = c; \
12672 else \
12673 abort ();
252b5132 12674
d3ce72d0 12675 for (p = in_template; *p; p++)
252b5132
RH
12676 {
12677 switch (*p)
12678 {
12679 default:
12680 *obufp++ = *p;
12681 break;
98b528ac
L
12682 case '%':
12683 len++;
12684 break;
9d141669
L
12685 case '!':
12686 cond = 0;
12687 break;
6439fc28 12688 case '{':
6439fc28 12689 if (intel_syntax)
6439fc28
AM
12690 {
12691 while (*++p != '|')
7c52e0e8
L
12692 if (*p == '}' || *p == '\0')
12693 abort ();
6439fc28 12694 }
9306ca4a
JB
12695 /* Fall through. */
12696 case 'I':
12697 alt = 1;
12698 continue;
6439fc28
AM
12699 case '|':
12700 while (*++p != '}')
12701 {
12702 if (*p == '\0')
12703 abort ();
12704 }
12705 break;
12706 case '}':
12707 break;
252b5132 12708 case 'A':
db6eb5be
AM
12709 if (intel_syntax)
12710 break;
7967e09e 12711 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
252b5132
RH
12712 *obufp++ = 'b';
12713 break;
12714 case 'B':
4b06377f
L
12715 if (l == 0 && len == 1)
12716 {
12717case_B:
12718 if (intel_syntax)
12719 break;
12720 if (sizeflag & SUFFIX_ALWAYS)
12721 *obufp++ = 'b';
12722 }
12723 else
12724 {
12725 if (l != 1
12726 || len != 2
12727 || last[0] != 'L')
12728 {
12729 SAVE_LAST (*p);
12730 break;
12731 }
12732
12733 if (address_mode == mode_64bit
12734 && !(prefixes & PREFIX_ADDR))
12735 {
12736 *obufp++ = 'a';
12737 *obufp++ = 'b';
12738 *obufp++ = 's';
12739 }
12740
12741 goto case_B;
12742 }
252b5132 12743 break;
9306ca4a
JB
12744 case 'C':
12745 if (intel_syntax && !alt)
12746 break;
12747 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
12748 {
12749 if (sizeflag & DFLAG)
12750 *obufp++ = intel_syntax ? 'd' : 'l';
12751 else
12752 *obufp++ = intel_syntax ? 'w' : 's';
12753 used_prefixes |= (prefixes & PREFIX_DATA);
12754 }
12755 break;
ed7841b3
JB
12756 case 'D':
12757 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
12758 break;
161a04f6 12759 USED_REX (REX_W);
7967e09e 12760 if (modrm.mod == 3)
ed7841b3 12761 {
161a04f6 12762 if (rex & REX_W)
ed7841b3 12763 *obufp++ = 'q';
ed7841b3 12764 else
f16cd0d5
L
12765 {
12766 if (sizeflag & DFLAG)
12767 *obufp++ = intel_syntax ? 'd' : 'l';
12768 else
12769 *obufp++ = 'w';
12770 used_prefixes |= (prefixes & PREFIX_DATA);
12771 }
ed7841b3
JB
12772 }
12773 else
12774 *obufp++ = 'w';
12775 break;
252b5132 12776 case 'E': /* For jcxz/jecxz */
cb712a9e 12777 if (address_mode == mode_64bit)
c1a64871
JH
12778 {
12779 if (sizeflag & AFLAG)
12780 *obufp++ = 'r';
12781 else
12782 *obufp++ = 'e';
12783 }
12784 else
12785 if (sizeflag & AFLAG)
12786 *obufp++ = 'e';
3ffd33cf
AM
12787 used_prefixes |= (prefixes & PREFIX_ADDR);
12788 break;
12789 case 'F':
db6eb5be
AM
12790 if (intel_syntax)
12791 break;
e396998b 12792 if ((prefixes & PREFIX_ADDR) || (sizeflag & SUFFIX_ALWAYS))
3ffd33cf
AM
12793 {
12794 if (sizeflag & AFLAG)
cb712a9e 12795 *obufp++ = address_mode == mode_64bit ? 'q' : 'l';
3ffd33cf 12796 else
cb712a9e 12797 *obufp++ = address_mode == mode_64bit ? 'l' : 'w';
3ffd33cf
AM
12798 used_prefixes |= (prefixes & PREFIX_ADDR);
12799 }
252b5132 12800 break;
52fd6d94
JB
12801 case 'G':
12802 if (intel_syntax || (obufp[-1] != 's' && !(sizeflag & SUFFIX_ALWAYS)))
12803 break;
161a04f6 12804 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
12805 *obufp++ = 'l';
12806 else
12807 *obufp++ = 'w';
161a04f6 12808 if (!(rex & REX_W))
52fd6d94
JB
12809 used_prefixes |= (prefixes & PREFIX_DATA);
12810 break;
5dd0794d 12811 case 'H':
db6eb5be
AM
12812 if (intel_syntax)
12813 break;
5dd0794d
AM
12814 if ((prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_CS
12815 || (prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_DS)
12816 {
12817 used_prefixes |= prefixes & (PREFIX_CS | PREFIX_DS);
12818 *obufp++ = ',';
12819 *obufp++ = 'p';
12820 if (prefixes & PREFIX_DS)
12821 *obufp++ = 't';
12822 else
12823 *obufp++ = 'n';
12824 }
12825 break;
9306ca4a
JB
12826 case 'J':
12827 if (intel_syntax)
12828 break;
12829 *obufp++ = 'l';
12830 break;
42903f7f
L
12831 case 'K':
12832 USED_REX (REX_W);
12833 if (rex & REX_W)
12834 *obufp++ = 'q';
12835 else
12836 *obufp++ = 'd';
12837 break;
6dd5059a 12838 case 'Z':
04d824a4
JB
12839 if (l != 0 || len != 1)
12840 {
12841 if (l != 1 || len != 2 || last[0] != 'X')
12842 {
12843 SAVE_LAST (*p);
12844 break;
12845 }
12846 if (!need_vex || !vex.evex)
12847 abort ();
12848 if (intel_syntax
12849 || ((modrm.mod == 3 || vex.b) && !(sizeflag & SUFFIX_ALWAYS)))
12850 break;
12851 switch (vex.length)
12852 {
12853 case 128:
12854 *obufp++ = 'x';
12855 break;
12856 case 256:
12857 *obufp++ = 'y';
12858 break;
12859 case 512:
12860 *obufp++ = 'z';
12861 break;
12862 default:
12863 abort ();
12864 }
12865 break;
12866 }
6dd5059a
L
12867 if (intel_syntax)
12868 break;
12869 if (address_mode == mode_64bit && (sizeflag & SUFFIX_ALWAYS))
12870 {
12871 *obufp++ = 'q';
12872 break;
12873 }
12874 /* Fall through. */
98b528ac 12875 goto case_L;
252b5132 12876 case 'L':
98b528ac
L
12877 if (l != 0 || len != 1)
12878 {
12879 SAVE_LAST (*p);
12880 break;
12881 }
12882case_L:
db6eb5be
AM
12883 if (intel_syntax)
12884 break;
252b5132
RH
12885 if (sizeflag & SUFFIX_ALWAYS)
12886 *obufp++ = 'l';
252b5132 12887 break;
9d141669
L
12888 case 'M':
12889 if (intel_mnemonic != cond)
12890 *obufp++ = 'r';
12891 break;
252b5132
RH
12892 case 'N':
12893 if ((prefixes & PREFIX_FWAIT) == 0)
12894 *obufp++ = 'n';
7d421014
ILT
12895 else
12896 used_prefixes |= PREFIX_FWAIT;
252b5132 12897 break;
52b15da3 12898 case 'O':
161a04f6
L
12899 USED_REX (REX_W);
12900 if (rex & REX_W)
6439fc28 12901 *obufp++ = 'o';
a35ca55a
JB
12902 else if (intel_syntax && (sizeflag & DFLAG))
12903 *obufp++ = 'q';
52b15da3
JH
12904 else
12905 *obufp++ = 'd';
161a04f6 12906 if (!(rex & REX_W))
a35ca55a 12907 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 12908 break;
07f5af7d
L
12909 case '&':
12910 if (!intel_syntax
12911 && address_mode == mode_64bit
12912 && isa64 == intel64)
12913 {
12914 *obufp++ = 'q';
12915 break;
12916 }
12917 /* Fall through. */
6439fc28 12918 case 'T':
d9e3625e
L
12919 if (!intel_syntax
12920 && address_mode == mode_64bit
7bb15c6f 12921 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
12922 {
12923 *obufp++ = 'q';
12924 break;
12925 }
6608db57 12926 /* Fall through. */
4b4c407a 12927 goto case_P;
252b5132 12928 case 'P':
4b4c407a 12929 if (l == 0 && len == 1)
d9e3625e 12930 {
4b4c407a
L
12931case_P:
12932 if (intel_syntax)
d9e3625e 12933 {
4b4c407a
L
12934 if ((rex & REX_W) == 0
12935 && (prefixes & PREFIX_DATA))
12936 {
12937 if ((sizeflag & DFLAG) == 0)
12938 *obufp++ = 'w';
12939 used_prefixes |= (prefixes & PREFIX_DATA);
12940 }
12941 break;
12942 }
12943 if ((prefixes & PREFIX_DATA)
12944 || (rex & REX_W)
12945 || (sizeflag & SUFFIX_ALWAYS))
12946 {
12947 USED_REX (REX_W);
12948 if (rex & REX_W)
12949 *obufp++ = 'q';
12950 else
12951 {
12952 if (sizeflag & DFLAG)
12953 *obufp++ = 'l';
12954 else
12955 *obufp++ = 'w';
12956 used_prefixes |= (prefixes & PREFIX_DATA);
12957 }
d9e3625e 12958 }
d9e3625e 12959 }
4b4c407a 12960 else
252b5132 12961 {
4b4c407a
L
12962 if (l != 1 || len != 2 || last[0] != 'L')
12963 {
12964 SAVE_LAST (*p);
12965 break;
12966 }
12967
12968 if ((prefixes & PREFIX_DATA)
12969 || (rex & REX_W)
12970 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 12971 {
4b4c407a
L
12972 USED_REX (REX_W);
12973 if (rex & REX_W)
12974 *obufp++ = 'q';
12975 else
12976 {
12977 if (sizeflag & DFLAG)
12978 *obufp++ = intel_syntax ? 'd' : 'l';
12979 else
12980 *obufp++ = 'w';
12981 used_prefixes |= (prefixes & PREFIX_DATA);
12982 }
52b15da3 12983 }
252b5132
RH
12984 }
12985 break;
6439fc28 12986 case 'U':
db6eb5be
AM
12987 if (intel_syntax)
12988 break;
7bb15c6f 12989 if (address_mode == mode_64bit
6c067bbb 12990 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28 12991 {
7967e09e 12992 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
1a114b12 12993 *obufp++ = 'q';
6439fc28
AM
12994 break;
12995 }
6608db57 12996 /* Fall through. */
98b528ac 12997 goto case_Q;
252b5132 12998 case 'Q':
98b528ac 12999 if (l == 0 && len == 1)
252b5132 13000 {
98b528ac
L
13001case_Q:
13002 if (intel_syntax && !alt)
13003 break;
13004 USED_REX (REX_W);
13005 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 13006 {
98b528ac
L
13007 if (rex & REX_W)
13008 *obufp++ = 'q';
52b15da3 13009 else
98b528ac
L
13010 {
13011 if (sizeflag & DFLAG)
13012 *obufp++ = intel_syntax ? 'd' : 'l';
13013 else
13014 *obufp++ = 'w';
f16cd0d5 13015 used_prefixes |= (prefixes & PREFIX_DATA);
98b528ac 13016 }
52b15da3 13017 }
98b528ac
L
13018 }
13019 else
13020 {
13021 if (l != 1 || len != 2 || last[0] != 'L')
13022 {
13023 SAVE_LAST (*p);
13024 break;
13025 }
13026 if (intel_syntax
13027 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
13028 break;
13029 if ((rex & REX_W))
13030 {
13031 USED_REX (REX_W);
13032 *obufp++ = 'q';
13033 }
13034 else
13035 *obufp++ = 'l';
252b5132
RH
13036 }
13037 break;
13038 case 'R':
161a04f6
L
13039 USED_REX (REX_W);
13040 if (rex & REX_W)
a35ca55a
JB
13041 *obufp++ = 'q';
13042 else if (sizeflag & DFLAG)
c608c12e 13043 {
a35ca55a 13044 if (intel_syntax)
c608c12e 13045 *obufp++ = 'd';
c608c12e 13046 else
a35ca55a 13047 *obufp++ = 'l';
c608c12e 13048 }
252b5132 13049 else
a35ca55a
JB
13050 *obufp++ = 'w';
13051 if (intel_syntax && !p[1]
161a04f6 13052 && ((rex & REX_W) || (sizeflag & DFLAG)))
a35ca55a 13053 *obufp++ = 'e';
161a04f6 13054 if (!(rex & REX_W))
52b15da3 13055 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132 13056 break;
1a114b12 13057 case 'V':
4b06377f 13058 if (l == 0 && len == 1)
1a114b12 13059 {
4b06377f
L
13060 if (intel_syntax)
13061 break;
7bb15c6f 13062 if (address_mode == mode_64bit
6c067bbb 13063 && ((sizeflag & DFLAG) || (rex & REX_W)))
4b06377f
L
13064 {
13065 if (sizeflag & SUFFIX_ALWAYS)
13066 *obufp++ = 'q';
13067 break;
13068 }
13069 }
13070 else
13071 {
13072 if (l != 1
13073 || len != 2
13074 || last[0] != 'L')
13075 {
13076 SAVE_LAST (*p);
13077 break;
13078 }
13079
13080 if (rex & REX_W)
13081 {
13082 *obufp++ = 'a';
13083 *obufp++ = 'b';
13084 *obufp++ = 's';
13085 }
1a114b12
JB
13086 }
13087 /* Fall through. */
4b06377f 13088 goto case_S;
252b5132 13089 case 'S':
4b06377f 13090 if (l == 0 && len == 1)
252b5132 13091 {
4b06377f
L
13092case_S:
13093 if (intel_syntax)
13094 break;
13095 if (sizeflag & SUFFIX_ALWAYS)
52b15da3 13096 {
4b06377f
L
13097 if (rex & REX_W)
13098 *obufp++ = 'q';
52b15da3 13099 else
4b06377f
L
13100 {
13101 if (sizeflag & DFLAG)
13102 *obufp++ = 'l';
13103 else
13104 *obufp++ = 'w';
13105 used_prefixes |= (prefixes & PREFIX_DATA);
13106 }
13107 }
13108 }
13109 else
13110 {
13111 if (l != 1
13112 || len != 2
13113 || last[0] != 'L')
13114 {
13115 SAVE_LAST (*p);
13116 break;
52b15da3 13117 }
4b06377f
L
13118
13119 if (address_mode == mode_64bit
13120 && !(prefixes & PREFIX_ADDR))
13121 {
13122 *obufp++ = 'a';
13123 *obufp++ = 'b';
13124 *obufp++ = 's';
13125 }
13126
13127 goto case_S;
252b5132 13128 }
252b5132 13129 break;
041bd2e0 13130 case 'X':
c0f3af97
L
13131 if (l != 0 || len != 1)
13132 {
13133 SAVE_LAST (*p);
13134 break;
13135 }
13136 if (need_vex && vex.prefix)
13137 {
13138 if (vex.prefix == DATA_PREFIX_OPCODE)
13139 *obufp++ = 'd';
13140 else
13141 *obufp++ = 's';
13142 }
041bd2e0 13143 else
f16cd0d5
L
13144 {
13145 if (prefixes & PREFIX_DATA)
13146 *obufp++ = 'd';
13147 else
13148 *obufp++ = 's';
13149 used_prefixes |= (prefixes & PREFIX_DATA);
13150 }
041bd2e0 13151 break;
76f227a5 13152 case 'Y':
c0f3af97 13153 if (l == 0 && len == 1)
9646c87b 13154 abort ();
c0f3af97
L
13155 else
13156 {
13157 if (l != 1 || len != 2 || last[0] != 'X')
13158 {
13159 SAVE_LAST (*p);
13160 break;
13161 }
13162 if (!need_vex)
13163 abort ();
13164 if (intel_syntax
04d824a4 13165 || ((modrm.mod == 3 || vex.b) && !(sizeflag & SUFFIX_ALWAYS)))
c0f3af97
L
13166 break;
13167 switch (vex.length)
13168 {
13169 case 128:
13170 *obufp++ = 'x';
13171 break;
13172 case 256:
13173 *obufp++ = 'y';
13174 break;
04d824a4
JB
13175 case 512:
13176 if (!vex.evex)
c0f3af97 13177 default:
04d824a4 13178 abort ();
c0f3af97 13179 }
76f227a5
JH
13180 }
13181 break;
252b5132 13182 case 'W':
0bfee649 13183 if (l == 0 && len == 1)
a35ca55a 13184 {
0bfee649
L
13185 /* operand size flag for cwtl, cbtw */
13186 USED_REX (REX_W);
13187 if (rex & REX_W)
13188 {
13189 if (intel_syntax)
13190 *obufp++ = 'd';
13191 else
13192 *obufp++ = 'l';
13193 }
13194 else if (sizeflag & DFLAG)
13195 *obufp++ = 'w';
a35ca55a 13196 else
0bfee649
L
13197 *obufp++ = 'b';
13198 if (!(rex & REX_W))
13199 used_prefixes |= (prefixes & PREFIX_DATA);
a35ca55a 13200 }
252b5132 13201 else
0bfee649 13202 {
6c30d220
L
13203 if (l != 1
13204 || len != 2
13205 || (last[0] != 'X'
13206 && last[0] != 'L'))
0bfee649
L
13207 {
13208 SAVE_LAST (*p);
13209 break;
13210 }
13211 if (!need_vex)
13212 abort ();
6c30d220
L
13213 if (last[0] == 'X')
13214 *obufp++ = vex.w ? 'd': 's';
13215 else
13216 *obufp++ = vex.w ? 'q': 'd';
0bfee649 13217 }
252b5132 13218 break;
a72d2af2
L
13219 case '^':
13220 if (intel_syntax)
13221 break;
13222 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
13223 {
13224 if (sizeflag & DFLAG)
13225 *obufp++ = 'l';
13226 else
13227 *obufp++ = 'w';
13228 used_prefixes |= (prefixes & PREFIX_DATA);
13229 }
13230 break;
5db04b09
L
13231 case '@':
13232 if (intel_syntax)
13233 break;
13234 if (address_mode == mode_64bit
13235 && (isa64 == intel64
13236 || ((sizeflag & DFLAG) || (rex & REX_W))))
13237 *obufp++ = 'q';
13238 else if ((prefixes & PREFIX_DATA))
13239 {
13240 if (!(sizeflag & DFLAG))
13241 *obufp++ = 'w';
13242 used_prefixes |= (prefixes & PREFIX_DATA);
13243 }
13244 break;
252b5132 13245 }
9306ca4a 13246 alt = 0;
252b5132
RH
13247 }
13248 *obufp = 0;
ea397f5b 13249 mnemonicendp = obufp;
6439fc28 13250 return 0;
252b5132
RH
13251}
13252
13253static void
26ca5450 13254oappend (const char *s)
252b5132 13255{
ea397f5b 13256 obufp = stpcpy (obufp, s);
252b5132
RH
13257}
13258
13259static void
26ca5450 13260append_seg (void)
252b5132 13261{
285ca992
L
13262 /* Only print the active segment register. */
13263 if (!active_seg_prefix)
13264 return;
13265
13266 used_prefixes |= active_seg_prefix;
13267 switch (active_seg_prefix)
7d421014 13268 {
285ca992 13269 case PREFIX_CS:
9ce09ba2 13270 oappend_maybe_intel ("%cs:");
285ca992
L
13271 break;
13272 case PREFIX_DS:
9ce09ba2 13273 oappend_maybe_intel ("%ds:");
285ca992
L
13274 break;
13275 case PREFIX_SS:
9ce09ba2 13276 oappend_maybe_intel ("%ss:");
285ca992
L
13277 break;
13278 case PREFIX_ES:
9ce09ba2 13279 oappend_maybe_intel ("%es:");
285ca992
L
13280 break;
13281 case PREFIX_FS:
9ce09ba2 13282 oappend_maybe_intel ("%fs:");
285ca992
L
13283 break;
13284 case PREFIX_GS:
9ce09ba2 13285 oappend_maybe_intel ("%gs:");
285ca992
L
13286 break;
13287 default:
13288 break;
7d421014 13289 }
252b5132
RH
13290}
13291
13292static void
26ca5450 13293OP_indirE (int bytemode, int sizeflag)
252b5132
RH
13294{
13295 if (!intel_syntax)
13296 oappend ("*");
13297 OP_E (bytemode, sizeflag);
13298}
13299
52b15da3 13300static void
26ca5450 13301print_operand_value (char *buf, int hex, bfd_vma disp)
52b15da3 13302{
cb712a9e 13303 if (address_mode == mode_64bit)
52b15da3
JH
13304 {
13305 if (hex)
13306 {
13307 char tmp[30];
13308 int i;
13309 buf[0] = '0';
13310 buf[1] = 'x';
13311 sprintf_vma (tmp, disp);
6608db57 13312 for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++);
52b15da3
JH
13313 strcpy (buf + 2, tmp + i);
13314 }
13315 else
13316 {
13317 bfd_signed_vma v = disp;
13318 char tmp[30];
13319 int i;
13320 if (v < 0)
13321 {
13322 *(buf++) = '-';
13323 v = -disp;
6608db57 13324 /* Check for possible overflow on 0x8000000000000000. */
52b15da3
JH
13325 if (v < 0)
13326 {
13327 strcpy (buf, "9223372036854775808");
13328 return;
13329 }
13330 }
13331 if (!v)
13332 {
13333 strcpy (buf, "0");
13334 return;
13335 }
13336
13337 i = 0;
13338 tmp[29] = 0;
13339 while (v)
13340 {
6608db57 13341 tmp[28 - i] = (v % 10) + '0';
52b15da3
JH
13342 v /= 10;
13343 i++;
13344 }
13345 strcpy (buf, tmp + 29 - i);
13346 }
13347 }
13348 else
13349 {
13350 if (hex)
13351 sprintf (buf, "0x%x", (unsigned int) disp);
13352 else
13353 sprintf (buf, "%d", (int) disp);
13354 }
13355}
13356
5d669648
L
13357/* Put DISP in BUF as signed hex number. */
13358
13359static void
13360print_displacement (char *buf, bfd_vma disp)
13361{
13362 bfd_signed_vma val = disp;
13363 char tmp[30];
13364 int i, j = 0;
13365
13366 if (val < 0)
13367 {
13368 buf[j++] = '-';
13369 val = -disp;
13370
13371 /* Check for possible overflow. */
13372 if (val < 0)
13373 {
13374 switch (address_mode)
13375 {
13376 case mode_64bit:
13377 strcpy (buf + j, "0x8000000000000000");
13378 break;
13379 case mode_32bit:
13380 strcpy (buf + j, "0x80000000");
13381 break;
13382 case mode_16bit:
13383 strcpy (buf + j, "0x8000");
13384 break;
13385 }
13386 return;
13387 }
13388 }
13389
13390 buf[j++] = '0';
13391 buf[j++] = 'x';
13392
0af1713e 13393 sprintf_vma (tmp, (bfd_vma) val);
5d669648
L
13394 for (i = 0; tmp[i] == '0'; i++)
13395 continue;
13396 if (tmp[i] == '\0')
13397 i--;
13398 strcpy (buf + j, tmp + i);
13399}
13400
3f31e633
JB
13401static void
13402intel_operand_size (int bytemode, int sizeflag)
13403{
43234a1e
L
13404 if (vex.evex
13405 && vex.b
13406 && (bytemode == x_mode
13407 || bytemode == evex_half_bcst_xmmq_mode))
13408 {
13409 if (vex.w)
13410 oappend ("QWORD PTR ");
13411 else
13412 oappend ("DWORD PTR ");
13413 return;
13414 }
3f31e633
JB
13415 switch (bytemode)
13416 {
13417 case b_mode:
b6169b20 13418 case b_swap_mode:
42903f7f 13419 case dqb_mode:
1ba585e8 13420 case db_mode:
3f31e633
JB
13421 oappend ("BYTE PTR ");
13422 break;
13423 case w_mode:
1ba585e8 13424 case dw_mode:
3f31e633
JB
13425 case dqw_mode:
13426 oappend ("WORD PTR ");
13427 break;
07f5af7d
L
13428 case indir_v_mode:
13429 if (address_mode == mode_64bit && isa64 == intel64)
13430 {
13431 oappend ("QWORD PTR ");
13432 break;
13433 }
1a0670f3 13434 /* Fall through. */
1a114b12 13435 case stack_v_mode:
7bb15c6f 13436 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
3f31e633
JB
13437 {
13438 oappend ("QWORD PTR ");
3f31e633
JB
13439 break;
13440 }
1a0670f3 13441 /* Fall through. */
3f31e633 13442 case v_mode:
b6169b20 13443 case v_swap_mode:
3f31e633 13444 case dq_mode:
161a04f6
L
13445 USED_REX (REX_W);
13446 if (rex & REX_W)
3f31e633 13447 oappend ("QWORD PTR ");
3f31e633 13448 else
f16cd0d5
L
13449 {
13450 if ((sizeflag & DFLAG) || bytemode == dq_mode)
13451 oappend ("DWORD PTR ");
13452 else
13453 oappend ("WORD PTR ");
13454 used_prefixes |= (prefixes & PREFIX_DATA);
13455 }
3f31e633 13456 break;
52fd6d94 13457 case z_mode:
161a04f6 13458 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
13459 *obufp++ = 'D';
13460 oappend ("WORD PTR ");
161a04f6 13461 if (!(rex & REX_W))
52fd6d94
JB
13462 used_prefixes |= (prefixes & PREFIX_DATA);
13463 break;
34b772a6
JB
13464 case a_mode:
13465 if (sizeflag & DFLAG)
13466 oappend ("QWORD PTR ");
13467 else
13468 oappend ("DWORD PTR ");
13469 used_prefixes |= (prefixes & PREFIX_DATA);
13470 break;
3f31e633 13471 case d_mode:
539f890d
L
13472 case d_scalar_mode:
13473 case d_scalar_swap_mode:
fa99fab2 13474 case d_swap_mode:
42903f7f 13475 case dqd_mode:
3f31e633
JB
13476 oappend ("DWORD PTR ");
13477 break;
13478 case q_mode:
539f890d
L
13479 case q_scalar_mode:
13480 case q_scalar_swap_mode:
b6169b20 13481 case q_swap_mode:
3f31e633
JB
13482 oappend ("QWORD PTR ");
13483 break;
d20dee9e 13484 case dqa_mode:
3f31e633 13485 case m_mode:
cb712a9e 13486 if (address_mode == mode_64bit)
3f31e633
JB
13487 oappend ("QWORD PTR ");
13488 else
13489 oappend ("DWORD PTR ");
13490 break;
13491 case f_mode:
13492 if (sizeflag & DFLAG)
13493 oappend ("FWORD PTR ");
13494 else
13495 oappend ("DWORD PTR ");
13496 used_prefixes |= (prefixes & PREFIX_DATA);
13497 break;
13498 case t_mode:
13499 oappend ("TBYTE PTR ");
13500 break;
13501 case x_mode:
b6169b20 13502 case x_swap_mode:
43234a1e
L
13503 case evex_x_gscat_mode:
13504 case evex_x_nobcst_mode:
53467f57
IT
13505 case b_scalar_mode:
13506 case w_scalar_mode:
c0f3af97
L
13507 if (need_vex)
13508 {
13509 switch (vex.length)
13510 {
13511 case 128:
13512 oappend ("XMMWORD PTR ");
13513 break;
13514 case 256:
13515 oappend ("YMMWORD PTR ");
13516 break;
43234a1e
L
13517 case 512:
13518 oappend ("ZMMWORD PTR ");
13519 break;
c0f3af97
L
13520 default:
13521 abort ();
13522 }
13523 }
13524 else
13525 oappend ("XMMWORD PTR ");
13526 break;
13527 case xmm_mode:
3f31e633
JB
13528 oappend ("XMMWORD PTR ");
13529 break;
43234a1e
L
13530 case ymm_mode:
13531 oappend ("YMMWORD PTR ");
13532 break;
c0f3af97 13533 case xmmq_mode:
43234a1e 13534 case evex_half_bcst_xmmq_mode:
c0f3af97
L
13535 if (!need_vex)
13536 abort ();
13537
13538 switch (vex.length)
13539 {
13540 case 128:
13541 oappend ("QWORD PTR ");
13542 break;
13543 case 256:
13544 oappend ("XMMWORD PTR ");
13545 break;
43234a1e
L
13546 case 512:
13547 oappend ("YMMWORD PTR ");
13548 break;
c0f3af97
L
13549 default:
13550 abort ();
13551 }
13552 break;
6c30d220
L
13553 case xmm_mb_mode:
13554 if (!need_vex)
13555 abort ();
13556
13557 switch (vex.length)
13558 {
13559 case 128:
13560 case 256:
43234a1e 13561 case 512:
6c30d220
L
13562 oappend ("BYTE PTR ");
13563 break;
13564 default:
13565 abort ();
13566 }
13567 break;
13568 case xmm_mw_mode:
13569 if (!need_vex)
13570 abort ();
13571
13572 switch (vex.length)
13573 {
13574 case 128:
13575 case 256:
43234a1e 13576 case 512:
6c30d220
L
13577 oappend ("WORD PTR ");
13578 break;
13579 default:
13580 abort ();
13581 }
13582 break;
13583 case xmm_md_mode:
13584 if (!need_vex)
13585 abort ();
13586
13587 switch (vex.length)
13588 {
13589 case 128:
13590 case 256:
43234a1e 13591 case 512:
6c30d220
L
13592 oappend ("DWORD PTR ");
13593 break;
13594 default:
13595 abort ();
13596 }
13597 break;
13598 case xmm_mq_mode:
13599 if (!need_vex)
13600 abort ();
13601
13602 switch (vex.length)
13603 {
13604 case 128:
13605 case 256:
43234a1e 13606 case 512:
6c30d220
L
13607 oappend ("QWORD PTR ");
13608 break;
13609 default:
13610 abort ();
13611 }
13612 break;
13613 case xmmdw_mode:
13614 if (!need_vex)
13615 abort ();
13616
13617 switch (vex.length)
13618 {
13619 case 128:
13620 oappend ("WORD PTR ");
13621 break;
13622 case 256:
13623 oappend ("DWORD PTR ");
13624 break;
43234a1e
L
13625 case 512:
13626 oappend ("QWORD PTR ");
13627 break;
6c30d220
L
13628 default:
13629 abort ();
13630 }
13631 break;
13632 case xmmqd_mode:
13633 if (!need_vex)
13634 abort ();
13635
13636 switch (vex.length)
13637 {
13638 case 128:
13639 oappend ("DWORD PTR ");
13640 break;
13641 case 256:
13642 oappend ("QWORD PTR ");
13643 break;
43234a1e
L
13644 case 512:
13645 oappend ("XMMWORD PTR ");
13646 break;
6c30d220
L
13647 default:
13648 abort ();
13649 }
13650 break;
c0f3af97
L
13651 case ymmq_mode:
13652 if (!need_vex)
13653 abort ();
13654
13655 switch (vex.length)
13656 {
13657 case 128:
13658 oappend ("QWORD PTR ");
13659 break;
13660 case 256:
13661 oappend ("YMMWORD PTR ");
13662 break;
43234a1e
L
13663 case 512:
13664 oappend ("ZMMWORD PTR ");
13665 break;
c0f3af97
L
13666 default:
13667 abort ();
13668 }
13669 break;
6c30d220
L
13670 case ymmxmm_mode:
13671 if (!need_vex)
13672 abort ();
13673
13674 switch (vex.length)
13675 {
13676 case 128:
13677 case 256:
13678 oappend ("XMMWORD PTR ");
13679 break;
13680 default:
13681 abort ();
13682 }
13683 break;
fb9c77c7
L
13684 case o_mode:
13685 oappend ("OWORD PTR ");
13686 break;
43234a1e 13687 case xmm_mdq_mode:
0bfee649 13688 case vex_w_dq_mode:
1c480963 13689 case vex_scalar_w_dq_mode:
0bfee649
L
13690 if (!need_vex)
13691 abort ();
13692
13693 if (vex.w)
13694 oappend ("QWORD PTR ");
13695 else
13696 oappend ("DWORD PTR ");
13697 break;
43234a1e
L
13698 case vex_vsib_d_w_dq_mode:
13699 case vex_vsib_q_w_dq_mode:
13700 if (!need_vex)
13701 abort ();
13702
13703 if (!vex.evex)
13704 {
13705 if (vex.w)
13706 oappend ("QWORD PTR ");
13707 else
13708 oappend ("DWORD PTR ");
13709 }
13710 else
13711 {
b28d1bda
IT
13712 switch (vex.length)
13713 {
13714 case 128:
13715 oappend ("XMMWORD PTR ");
13716 break;
13717 case 256:
13718 oappend ("YMMWORD PTR ");
13719 break;
13720 case 512:
13721 oappend ("ZMMWORD PTR ");
13722 break;
13723 default:
13724 abort ();
13725 }
43234a1e
L
13726 }
13727 break;
5fc35d96
IT
13728 case vex_vsib_q_w_d_mode:
13729 case vex_vsib_d_w_d_mode:
b28d1bda 13730 if (!need_vex || !vex.evex)
5fc35d96
IT
13731 abort ();
13732
b28d1bda
IT
13733 switch (vex.length)
13734 {
13735 case 128:
13736 oappend ("QWORD PTR ");
13737 break;
13738 case 256:
13739 oappend ("XMMWORD PTR ");
13740 break;
13741 case 512:
13742 oappend ("YMMWORD PTR ");
13743 break;
13744 default:
13745 abort ();
13746 }
5fc35d96
IT
13747
13748 break;
1ba585e8
IT
13749 case mask_bd_mode:
13750 if (!need_vex || vex.length != 128)
13751 abort ();
13752 if (vex.w)
13753 oappend ("DWORD PTR ");
13754 else
13755 oappend ("BYTE PTR ");
13756 break;
43234a1e
L
13757 case mask_mode:
13758 if (!need_vex)
13759 abort ();
1ba585e8
IT
13760 if (vex.w)
13761 oappend ("QWORD PTR ");
13762 else
13763 oappend ("WORD PTR ");
43234a1e 13764 break;
6c75cc62 13765 case v_bnd_mode:
d276ec69 13766 case v_bndmk_mode:
3f31e633
JB
13767 default:
13768 break;
13769 }
13770}
13771
252b5132 13772static void
c0f3af97 13773OP_E_register (int bytemode, int sizeflag)
252b5132 13774{
c0f3af97
L
13775 int reg = modrm.rm;
13776 const char **names;
252b5132 13777
c0f3af97
L
13778 USED_REX (REX_B);
13779 if ((rex & REX_B))
13780 reg += 8;
252b5132 13781
b6169b20 13782 if ((sizeflag & SUFFIX_ALWAYS)
1ba585e8 13783 && (bytemode == b_swap_mode
9f79e886 13784 || bytemode == bnd_swap_mode
60227d64 13785 || bytemode == v_swap_mode))
b6169b20
L
13786 swap_operand ();
13787
c0f3af97 13788 switch (bytemode)
252b5132 13789 {
c0f3af97 13790 case b_mode:
b6169b20 13791 case b_swap_mode:
c0f3af97
L
13792 USED_REX (0);
13793 if (rex)
13794 names = names8rex;
13795 else
13796 names = names8;
13797 break;
13798 case w_mode:
13799 names = names16;
13800 break;
13801 case d_mode:
1ba585e8
IT
13802 case dw_mode:
13803 case db_mode:
c0f3af97
L
13804 names = names32;
13805 break;
13806 case q_mode:
13807 names = names64;
13808 break;
13809 case m_mode:
6c75cc62 13810 case v_bnd_mode:
c0f3af97
L
13811 names = address_mode == mode_64bit ? names64 : names32;
13812 break;
7e8b059b 13813 case bnd_mode:
9f79e886 13814 case bnd_swap_mode:
0d96e4df
L
13815 if (reg > 0x3)
13816 {
13817 oappend ("(bad)");
13818 return;
13819 }
7e8b059b
L
13820 names = names_bnd;
13821 break;
07f5af7d
L
13822 case indir_v_mode:
13823 if (address_mode == mode_64bit && isa64 == intel64)
13824 {
13825 names = names64;
13826 break;
13827 }
1a0670f3 13828 /* Fall through. */
c0f3af97 13829 case stack_v_mode:
7bb15c6f 13830 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
252b5132 13831 {
c0f3af97 13832 names = names64;
252b5132 13833 break;
252b5132 13834 }
c0f3af97 13835 bytemode = v_mode;
1a0670f3 13836 /* Fall through. */
c0f3af97 13837 case v_mode:
b6169b20 13838 case v_swap_mode:
c0f3af97
L
13839 case dq_mode:
13840 case dqb_mode:
13841 case dqd_mode:
13842 case dqw_mode:
d20dee9e 13843 case dqa_mode:
c0f3af97
L
13844 USED_REX (REX_W);
13845 if (rex & REX_W)
13846 names = names64;
c0f3af97 13847 else
f16cd0d5 13848 {
7bb15c6f 13849 if ((sizeflag & DFLAG)
f16cd0d5
L
13850 || (bytemode != v_mode
13851 && bytemode != v_swap_mode))
13852 names = names32;
13853 else
13854 names = names16;
13855 used_prefixes |= (prefixes & PREFIX_DATA);
13856 }
c0f3af97 13857 break;
de89d0a3
IT
13858 case va_mode:
13859 names = (address_mode == mode_64bit
13860 ? names64 : names32);
13861 if (!(prefixes & PREFIX_ADDR))
aa178437
IT
13862 names = (address_mode == mode_16bit
13863 ? names16 : names);
de89d0a3
IT
13864 else
13865 {
13866 /* Remove "addr16/addr32". */
13867 all_prefixes[last_addr_prefix] = 0;
13868 names = (address_mode != mode_32bit
13869 ? names32 : names16);
13870 used_prefixes |= PREFIX_ADDR;
13871 }
13872 break;
1ba585e8 13873 case mask_bd_mode:
43234a1e 13874 case mask_mode:
9889cbb1
L
13875 if (reg > 0x7)
13876 {
13877 oappend ("(bad)");
13878 return;
13879 }
43234a1e
L
13880 names = names_mask;
13881 break;
c0f3af97
L
13882 case 0:
13883 return;
13884 default:
13885 oappend (INTERNAL_DISASSEMBLER_ERROR);
252b5132
RH
13886 return;
13887 }
c0f3af97
L
13888 oappend (names[reg]);
13889}
13890
13891static void
c1e679ec 13892OP_E_memory (int bytemode, int sizeflag)
c0f3af97
L
13893{
13894 bfd_vma disp = 0;
13895 int add = (rex & REX_B) ? 8 : 0;
13896 int riprel = 0;
43234a1e
L
13897 int shift;
13898
13899 if (vex.evex)
13900 {
13901 /* In EVEX, if operand doesn't allow broadcast, vex.b should be 0. */
13902 if (vex.b
13903 && bytemode != x_mode
90a915bf 13904 && bytemode != xmmq_mode
43234a1e
L
13905 && bytemode != evex_half_bcst_xmmq_mode)
13906 {
13907 BadOp ();
13908 return;
13909 }
13910 switch (bytemode)
13911 {
1ba585e8
IT
13912 case dqw_mode:
13913 case dw_mode:
1ba585e8
IT
13914 shift = 1;
13915 break;
13916 case dqb_mode:
13917 case db_mode:
13918 shift = 0;
13919 break;
b50c9f31
JB
13920 case dq_mode:
13921 if (address_mode != mode_64bit)
13922 {
13923 shift = 2;
13924 break;
13925 }
13926 /* fall through */
43234a1e 13927 case vex_vsib_d_w_dq_mode:
5fc35d96 13928 case vex_vsib_d_w_d_mode:
eaa9d1ad 13929 case vex_vsib_q_w_dq_mode:
5fc35d96 13930 case vex_vsib_q_w_d_mode:
43234a1e
L
13931 case evex_x_gscat_mode:
13932 case xmm_mdq_mode:
13933 shift = vex.w ? 3 : 2;
13934 break;
43234a1e
L
13935 case x_mode:
13936 case evex_half_bcst_xmmq_mode:
90a915bf 13937 case xmmq_mode:
43234a1e
L
13938 if (vex.b)
13939 {
13940 shift = vex.w ? 3 : 2;
13941 break;
13942 }
1a0670f3 13943 /* Fall through. */
43234a1e
L
13944 case xmmqd_mode:
13945 case xmmdw_mode:
43234a1e
L
13946 case ymmq_mode:
13947 case evex_x_nobcst_mode:
13948 case x_swap_mode:
13949 switch (vex.length)
13950 {
13951 case 128:
13952 shift = 4;
13953 break;
13954 case 256:
13955 shift = 5;
13956 break;
13957 case 512:
13958 shift = 6;
13959 break;
13960 default:
13961 abort ();
13962 }
13963 break;
13964 case ymm_mode:
13965 shift = 5;
13966 break;
13967 case xmm_mode:
13968 shift = 4;
13969 break;
13970 case xmm_mq_mode:
13971 case q_mode:
13972 case q_scalar_mode:
13973 case q_swap_mode:
13974 case q_scalar_swap_mode:
13975 shift = 3;
13976 break;
13977 case dqd_mode:
13978 case xmm_md_mode:
13979 case d_mode:
13980 case d_scalar_mode:
13981 case d_swap_mode:
13982 case d_scalar_swap_mode:
13983 shift = 2;
13984 break;
5074ad8a 13985 case w_scalar_mode:
43234a1e
L
13986 case xmm_mw_mode:
13987 shift = 1;
13988 break;
5074ad8a 13989 case b_scalar_mode:
43234a1e
L
13990 case xmm_mb_mode:
13991 shift = 0;
13992 break;
d20dee9e
L
13993 case dqa_mode:
13994 shift = address_mode == mode_64bit ? 3 : 2;
13995 break;
43234a1e
L
13996 default:
13997 abort ();
13998 }
13999 /* Make necessary corrections to shift for modes that need it.
14000 For these modes we currently have shift 4, 5 or 6 depending on
14001 vex.length (it corresponds to xmmword, ymmword or zmmword
14002 operand). We might want to make it 3, 4 or 5 (e.g. for
14003 xmmq_mode). In case of broadcast enabled the corrections
14004 aren't needed, as element size is always 32 or 64 bits. */
90a915bf
IT
14005 if (!vex.b
14006 && (bytemode == xmmq_mode
14007 || bytemode == evex_half_bcst_xmmq_mode))
43234a1e
L
14008 shift -= 1;
14009 else if (bytemode == xmmqd_mode)
14010 shift -= 2;
14011 else if (bytemode == xmmdw_mode)
14012 shift -= 3;
b28d1bda
IT
14013 else if (bytemode == ymmq_mode && vex.length == 128)
14014 shift -= 1;
43234a1e
L
14015 }
14016 else
14017 shift = 0;
252b5132 14018
c0f3af97 14019 USED_REX (REX_B);
3f31e633
JB
14020 if (intel_syntax)
14021 intel_operand_size (bytemode, sizeflag);
252b5132
RH
14022 append_seg ();
14023
5d669648 14024 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132 14025 {
5d669648
L
14026 /* 32/64 bit address mode */
14027 int havedisp;
252b5132
RH
14028 int havesib;
14029 int havebase;
0f7da397 14030 int haveindex;
20afcfb7 14031 int needindex;
1bc60e56 14032 int needaddr32;
82c18208 14033 int base, rbase;
91d6fa6a 14034 int vindex = 0;
252b5132 14035 int scale = 0;
7e8b059b
L
14036 int addr32flag = !((sizeflag & AFLAG)
14037 || bytemode == v_bnd_mode
d276ec69 14038 || bytemode == v_bndmk_mode
9f79e886
JB
14039 || bytemode == bnd_mode
14040 || bytemode == bnd_swap_mode);
6c30d220
L
14041 const char **indexes64 = names64;
14042 const char **indexes32 = names32;
252b5132
RH
14043
14044 havesib = 0;
14045 havebase = 1;
0f7da397 14046 haveindex = 0;
7967e09e 14047 base = modrm.rm;
252b5132
RH
14048
14049 if (base == 4)
14050 {
14051 havesib = 1;
dfc8cf43 14052 vindex = sib.index;
161a04f6
L
14053 USED_REX (REX_X);
14054 if (rex & REX_X)
91d6fa6a 14055 vindex += 8;
6c30d220
L
14056 switch (bytemode)
14057 {
14058 case vex_vsib_d_w_dq_mode:
5fc35d96 14059 case vex_vsib_d_w_d_mode:
6c30d220 14060 case vex_vsib_q_w_dq_mode:
5fc35d96 14061 case vex_vsib_q_w_d_mode:
6c30d220
L
14062 if (!need_vex)
14063 abort ();
43234a1e
L
14064 if (vex.evex)
14065 {
14066 if (!vex.v)
14067 vindex += 16;
14068 }
6c30d220
L
14069
14070 haveindex = 1;
14071 switch (vex.length)
14072 {
14073 case 128:
7bb15c6f 14074 indexes64 = indexes32 = names_xmm;
6c30d220
L
14075 break;
14076 case 256:
5fc35d96
IT
14077 if (!vex.w
14078 || bytemode == vex_vsib_q_w_dq_mode
14079 || bytemode == vex_vsib_q_w_d_mode)
7bb15c6f 14080 indexes64 = indexes32 = names_ymm;
6c30d220 14081 else
7bb15c6f 14082 indexes64 = indexes32 = names_xmm;
6c30d220 14083 break;
43234a1e 14084 case 512:
5fc35d96
IT
14085 if (!vex.w
14086 || bytemode == vex_vsib_q_w_dq_mode
14087 || bytemode == vex_vsib_q_w_d_mode)
43234a1e
L
14088 indexes64 = indexes32 = names_zmm;
14089 else
14090 indexes64 = indexes32 = names_ymm;
14091 break;
6c30d220
L
14092 default:
14093 abort ();
14094 }
14095 break;
14096 default:
14097 haveindex = vindex != 4;
14098 break;
14099 }
14100 scale = sib.scale;
14101 base = sib.base;
252b5132
RH
14102 codep++;
14103 }
82c18208 14104 rbase = base + add;
252b5132 14105
7967e09e 14106 switch (modrm.mod)
252b5132
RH
14107 {
14108 case 0:
82c18208 14109 if (base == 5)
252b5132
RH
14110 {
14111 havebase = 0;
cb712a9e 14112 if (address_mode == mode_64bit && !havesib)
52b15da3
JH
14113 riprel = 1;
14114 disp = get32s ();
d276ec69
JB
14115 if (riprel && bytemode == v_bndmk_mode)
14116 {
14117 oappend ("(bad)");
14118 return;
14119 }
252b5132
RH
14120 }
14121 break;
14122 case 1:
14123 FETCH_DATA (the_info, codep + 1);
14124 disp = *codep++;
14125 if ((disp & 0x80) != 0)
14126 disp -= 0x100;
43234a1e
L
14127 if (vex.evex && shift > 0)
14128 disp <<= shift;
252b5132
RH
14129 break;
14130 case 2:
52b15da3 14131 disp = get32s ();
252b5132
RH
14132 break;
14133 }
14134
1bc60e56
L
14135 needindex = 0;
14136 needaddr32 = 0;
14137 if (havesib
14138 && !havebase
14139 && !haveindex
14140 && address_mode != mode_16bit)
14141 {
14142 if (address_mode == mode_64bit)
14143 {
14144 /* Display eiz instead of addr32. */
14145 needindex = addr32flag;
14146 needaddr32 = 1;
14147 }
14148 else
14149 {
14150 /* In 32-bit mode, we need index register to tell [offset]
14151 from [eiz*1 + offset]. */
14152 needindex = 1;
14153 }
14154 }
14155
20afcfb7
L
14156 havedisp = (havebase
14157 || needindex
14158 || (havesib && (haveindex || scale != 0)));
5d669648 14159
252b5132 14160 if (!intel_syntax)
82c18208 14161 if (modrm.mod != 0 || base == 5)
db6eb5be 14162 {
5d669648
L
14163 if (havedisp || riprel)
14164 print_displacement (scratchbuf, disp);
14165 else
14166 print_operand_value (scratchbuf, 1, disp);
db6eb5be 14167 oappend (scratchbuf);
52b15da3
JH
14168 if (riprel)
14169 {
14170 set_op (disp, 1);
28596323 14171 oappend (!addr32flag ? "(%rip)" : "(%eip)");
52b15da3 14172 }
db6eb5be 14173 }
2da11e11 14174
1bc60e56 14175 if ((havebase || haveindex || needaddr32 || riprel)
7e8b059b 14176 && (bytemode != v_bnd_mode)
d276ec69 14177 && (bytemode != v_bndmk_mode)
9f79e886
JB
14178 && (bytemode != bnd_mode)
14179 && (bytemode != bnd_swap_mode))
87767711
JB
14180 used_prefixes |= PREFIX_ADDR;
14181
5d669648 14182 if (havedisp || (intel_syntax && riprel))
252b5132 14183 {
252b5132 14184 *obufp++ = open_char;
52b15da3 14185 if (intel_syntax && riprel)
185b1163
L
14186 {
14187 set_op (disp, 1);
28596323 14188 oappend (!addr32flag ? "rip" : "eip");
185b1163 14189 }
db6eb5be 14190 *obufp = '\0';
252b5132 14191 if (havebase)
7e8b059b 14192 oappend (address_mode == mode_64bit && !addr32flag
82c18208 14193 ? names64[rbase] : names32[rbase]);
252b5132
RH
14194 if (havesib)
14195 {
db51cc60
L
14196 /* ESP/RSP won't allow index. If base isn't ESP/RSP,
14197 print index to tell base + index from base. */
14198 if (scale != 0
20afcfb7 14199 || needindex
db51cc60
L
14200 || haveindex
14201 || (havebase && base != ESP_REG_NUM))
252b5132 14202 {
9306ca4a 14203 if (!intel_syntax || havebase)
db6eb5be 14204 {
9306ca4a
JB
14205 *obufp++ = separator_char;
14206 *obufp = '\0';
db6eb5be 14207 }
db51cc60 14208 if (haveindex)
7e8b059b 14209 oappend (address_mode == mode_64bit && !addr32flag
6c30d220 14210 ? indexes64[vindex] : indexes32[vindex]);
db51cc60 14211 else
7e8b059b 14212 oappend (address_mode == mode_64bit && !addr32flag
db51cc60
L
14213 ? index64 : index32);
14214
db6eb5be
AM
14215 *obufp++ = scale_char;
14216 *obufp = '\0';
14217 sprintf (scratchbuf, "%d", 1 << scale);
14218 oappend (scratchbuf);
14219 }
252b5132 14220 }
185b1163 14221 if (intel_syntax
82c18208 14222 && (disp || modrm.mod != 0 || base == 5))
3d456fa1 14223 {
db51cc60 14224 if (!havedisp || (bfd_signed_vma) disp >= 0)
3d456fa1
JB
14225 {
14226 *obufp++ = '+';
14227 *obufp = '\0';
14228 }
05203043 14229 else if (modrm.mod != 1 && disp != -disp)
3d456fa1
JB
14230 {
14231 *obufp++ = '-';
14232 *obufp = '\0';
14233 disp = - (bfd_signed_vma) disp;
14234 }
14235
db51cc60
L
14236 if (havedisp)
14237 print_displacement (scratchbuf, disp);
14238 else
14239 print_operand_value (scratchbuf, 1, disp);
3d456fa1
JB
14240 oappend (scratchbuf);
14241 }
252b5132
RH
14242
14243 *obufp++ = close_char;
db6eb5be 14244 *obufp = '\0';
252b5132
RH
14245 }
14246 else if (intel_syntax)
db6eb5be 14247 {
82c18208 14248 if (modrm.mod != 0 || base == 5)
db6eb5be 14249 {
285ca992 14250 if (!active_seg_prefix)
252b5132 14251 {
d708bcba 14252 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
14253 oappend (":");
14254 }
52b15da3 14255 print_operand_value (scratchbuf, 1, disp);
db6eb5be
AM
14256 oappend (scratchbuf);
14257 }
14258 }
252b5132
RH
14259 }
14260 else
f16cd0d5
L
14261 {
14262 /* 16 bit address mode */
14263 used_prefixes |= prefixes & PREFIX_ADDR;
7967e09e 14264 switch (modrm.mod)
252b5132
RH
14265 {
14266 case 0:
7967e09e 14267 if (modrm.rm == 6)
252b5132
RH
14268 {
14269 disp = get16 ();
14270 if ((disp & 0x8000) != 0)
14271 disp -= 0x10000;
14272 }
14273 break;
14274 case 1:
14275 FETCH_DATA (the_info, codep + 1);
14276 disp = *codep++;
14277 if ((disp & 0x80) != 0)
14278 disp -= 0x100;
65f3ed04
JB
14279 if (vex.evex && shift > 0)
14280 disp <<= shift;
252b5132
RH
14281 break;
14282 case 2:
14283 disp = get16 ();
14284 if ((disp & 0x8000) != 0)
14285 disp -= 0x10000;
14286 break;
14287 }
14288
14289 if (!intel_syntax)
7967e09e 14290 if (modrm.mod != 0 || modrm.rm == 6)
db6eb5be 14291 {
5d669648 14292 print_displacement (scratchbuf, disp);
db6eb5be
AM
14293 oappend (scratchbuf);
14294 }
252b5132 14295
7967e09e 14296 if (modrm.mod != 0 || modrm.rm != 6)
252b5132
RH
14297 {
14298 *obufp++ = open_char;
db6eb5be 14299 *obufp = '\0';
7967e09e 14300 oappend (index16[modrm.rm]);
5d669648
L
14301 if (intel_syntax
14302 && (disp || modrm.mod != 0 || modrm.rm == 6))
3d456fa1 14303 {
5d669648 14304 if ((bfd_signed_vma) disp >= 0)
3d456fa1
JB
14305 {
14306 *obufp++ = '+';
14307 *obufp = '\0';
14308 }
7967e09e 14309 else if (modrm.mod != 1)
3d456fa1
JB
14310 {
14311 *obufp++ = '-';
14312 *obufp = '\0';
14313 disp = - (bfd_signed_vma) disp;
14314 }
14315
5d669648 14316 print_displacement (scratchbuf, disp);
3d456fa1
JB
14317 oappend (scratchbuf);
14318 }
14319
db6eb5be
AM
14320 *obufp++ = close_char;
14321 *obufp = '\0';
252b5132 14322 }
3d456fa1
JB
14323 else if (intel_syntax)
14324 {
285ca992 14325 if (!active_seg_prefix)
3d456fa1
JB
14326 {
14327 oappend (names_seg[ds_reg - es_reg]);
14328 oappend (":");
14329 }
14330 print_operand_value (scratchbuf, 1, disp & 0xffff);
14331 oappend (scratchbuf);
14332 }
252b5132 14333 }
43234a1e
L
14334 if (vex.evex && vex.b
14335 && (bytemode == x_mode
90a915bf 14336 || bytemode == xmmq_mode
43234a1e
L
14337 || bytemode == evex_half_bcst_xmmq_mode))
14338 {
90a915bf
IT
14339 if (vex.w
14340 || bytemode == xmmq_mode
14341 || bytemode == evex_half_bcst_xmmq_mode)
b28d1bda
IT
14342 {
14343 switch (vex.length)
14344 {
14345 case 128:
14346 oappend ("{1to2}");
14347 break;
14348 case 256:
14349 oappend ("{1to4}");
14350 break;
14351 case 512:
14352 oappend ("{1to8}");
14353 break;
14354 default:
14355 abort ();
14356 }
14357 }
43234a1e 14358 else
b28d1bda
IT
14359 {
14360 switch (vex.length)
14361 {
14362 case 128:
14363 oappend ("{1to4}");
14364 break;
14365 case 256:
14366 oappend ("{1to8}");
14367 break;
14368 case 512:
14369 oappend ("{1to16}");
14370 break;
14371 default:
14372 abort ();
14373 }
14374 }
43234a1e 14375 }
252b5132
RH
14376}
14377
c0f3af97 14378static void
8b3f93e7 14379OP_E (int bytemode, int sizeflag)
c0f3af97
L
14380{
14381 /* Skip mod/rm byte. */
14382 MODRM_CHECK;
14383 codep++;
14384
14385 if (modrm.mod == 3)
14386 OP_E_register (bytemode, sizeflag);
14387 else
c1e679ec 14388 OP_E_memory (bytemode, sizeflag);
c0f3af97
L
14389}
14390
252b5132 14391static void
26ca5450 14392OP_G (int bytemode, int sizeflag)
252b5132 14393{
52b15da3 14394 int add = 0;
c0a30a9f 14395 const char **names;
161a04f6
L
14396 USED_REX (REX_R);
14397 if (rex & REX_R)
52b15da3 14398 add += 8;
252b5132
RH
14399 switch (bytemode)
14400 {
14401 case b_mode:
52b15da3
JH
14402 USED_REX (0);
14403 if (rex)
7967e09e 14404 oappend (names8rex[modrm.reg + add]);
52b15da3 14405 else
7967e09e 14406 oappend (names8[modrm.reg + add]);
252b5132
RH
14407 break;
14408 case w_mode:
7967e09e 14409 oappend (names16[modrm.reg + add]);
252b5132
RH
14410 break;
14411 case d_mode:
1ba585e8
IT
14412 case db_mode:
14413 case dw_mode:
7967e09e 14414 oappend (names32[modrm.reg + add]);
52b15da3
JH
14415 break;
14416 case q_mode:
7967e09e 14417 oappend (names64[modrm.reg + add]);
252b5132 14418 break;
7e8b059b 14419 case bnd_mode:
0d96e4df
L
14420 if (modrm.reg > 0x3)
14421 {
14422 oappend ("(bad)");
14423 return;
14424 }
7e8b059b
L
14425 oappend (names_bnd[modrm.reg]);
14426 break;
252b5132 14427 case v_mode:
9306ca4a 14428 case dq_mode:
42903f7f
L
14429 case dqb_mode:
14430 case dqd_mode:
9306ca4a 14431 case dqw_mode:
161a04f6
L
14432 USED_REX (REX_W);
14433 if (rex & REX_W)
7967e09e 14434 oappend (names64[modrm.reg + add]);
252b5132 14435 else
f16cd0d5
L
14436 {
14437 if ((sizeflag & DFLAG) || bytemode != v_mode)
14438 oappend (names32[modrm.reg + add]);
14439 else
14440 oappend (names16[modrm.reg + add]);
14441 used_prefixes |= (prefixes & PREFIX_DATA);
14442 }
252b5132 14443 break;
c0a30a9f
L
14444 case va_mode:
14445 names = (address_mode == mode_64bit
14446 ? names64 : names32);
14447 if (!(prefixes & PREFIX_ADDR))
14448 {
14449 if (address_mode == mode_16bit)
14450 names = names16;
14451 }
14452 else
14453 {
14454 /* Remove "addr16/addr32". */
14455 all_prefixes[last_addr_prefix] = 0;
14456 names = (address_mode != mode_32bit
14457 ? names32 : names16);
14458 used_prefixes |= PREFIX_ADDR;
14459 }
14460 oappend (names[modrm.reg + add]);
14461 break;
90700ea2 14462 case m_mode:
cb712a9e 14463 if (address_mode == mode_64bit)
7967e09e 14464 oappend (names64[modrm.reg + add]);
90700ea2 14465 else
7967e09e 14466 oappend (names32[modrm.reg + add]);
90700ea2 14467 break;
1ba585e8 14468 case mask_bd_mode:
43234a1e 14469 case mask_mode:
9889cbb1
L
14470 if ((modrm.reg + add) > 0x7)
14471 {
14472 oappend ("(bad)");
14473 return;
14474 }
43234a1e
L
14475 oappend (names_mask[modrm.reg + add]);
14476 break;
252b5132
RH
14477 default:
14478 oappend (INTERNAL_DISASSEMBLER_ERROR);
14479 break;
14480 }
14481}
14482
52b15da3 14483static bfd_vma
26ca5450 14484get64 (void)
52b15da3 14485{
5dd0794d 14486 bfd_vma x;
52b15da3 14487#ifdef BFD64
5dd0794d
AM
14488 unsigned int a;
14489 unsigned int b;
14490
52b15da3
JH
14491 FETCH_DATA (the_info, codep + 8);
14492 a = *codep++ & 0xff;
14493 a |= (*codep++ & 0xff) << 8;
14494 a |= (*codep++ & 0xff) << 16;
070fe95d 14495 a |= (*codep++ & 0xffu) << 24;
5dd0794d 14496 b = *codep++ & 0xff;
52b15da3
JH
14497 b |= (*codep++ & 0xff) << 8;
14498 b |= (*codep++ & 0xff) << 16;
070fe95d 14499 b |= (*codep++ & 0xffu) << 24;
52b15da3
JH
14500 x = a + ((bfd_vma) b << 32);
14501#else
6608db57 14502 abort ();
5dd0794d 14503 x = 0;
52b15da3
JH
14504#endif
14505 return x;
14506}
14507
14508static bfd_signed_vma
26ca5450 14509get32 (void)
252b5132 14510{
52b15da3 14511 bfd_signed_vma x = 0;
252b5132
RH
14512
14513 FETCH_DATA (the_info, codep + 4);
52b15da3
JH
14514 x = *codep++ & (bfd_signed_vma) 0xff;
14515 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
14516 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
14517 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
14518 return x;
14519}
14520
14521static bfd_signed_vma
26ca5450 14522get32s (void)
52b15da3
JH
14523{
14524 bfd_signed_vma x = 0;
14525
14526 FETCH_DATA (the_info, codep + 4);
14527 x = *codep++ & (bfd_signed_vma) 0xff;
14528 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
14529 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
14530 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
14531
14532 x = (x ^ ((bfd_signed_vma) 1 << 31)) - ((bfd_signed_vma) 1 << 31);
14533
252b5132
RH
14534 return x;
14535}
14536
14537static int
26ca5450 14538get16 (void)
252b5132
RH
14539{
14540 int x = 0;
14541
14542 FETCH_DATA (the_info, codep + 2);
14543 x = *codep++ & 0xff;
14544 x |= (*codep++ & 0xff) << 8;
14545 return x;
14546}
14547
14548static void
26ca5450 14549set_op (bfd_vma op, int riprel)
252b5132
RH
14550{
14551 op_index[op_ad] = op_ad;
cb712a9e 14552 if (address_mode == mode_64bit)
7081ff04
AJ
14553 {
14554 op_address[op_ad] = op;
14555 op_riprel[op_ad] = riprel;
14556 }
14557 else
14558 {
14559 /* Mask to get a 32-bit address. */
14560 op_address[op_ad] = op & 0xffffffff;
14561 op_riprel[op_ad] = riprel & 0xffffffff;
14562 }
252b5132
RH
14563}
14564
14565static void
26ca5450 14566OP_REG (int code, int sizeflag)
252b5132 14567{
2da11e11 14568 const char *s;
9b60702d 14569 int add;
de882298
RM
14570
14571 switch (code)
14572 {
14573 case es_reg: case ss_reg: case cs_reg:
14574 case ds_reg: case fs_reg: case gs_reg:
14575 oappend (names_seg[code - es_reg]);
14576 return;
14577 }
14578
161a04f6
L
14579 USED_REX (REX_B);
14580 if (rex & REX_B)
52b15da3 14581 add = 8;
9b60702d
L
14582 else
14583 add = 0;
52b15da3
JH
14584
14585 switch (code)
14586 {
52b15da3
JH
14587 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
14588 case sp_reg: case bp_reg: case si_reg: case di_reg:
14589 s = names16[code - ax_reg + add];
14590 break;
52b15da3
JH
14591 case al_reg: case ah_reg: case cl_reg: case ch_reg:
14592 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
14593 USED_REX (0);
14594 if (rex)
14595 s = names8rex[code - al_reg + add];
14596 else
14597 s = names8[code - al_reg];
14598 break;
6439fc28
AM
14599 case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg:
14600 case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg:
7bb15c6f 14601 if (address_mode == mode_64bit
6c067bbb 14602 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
14603 {
14604 s = names64[code - rAX_reg + add];
14605 break;
14606 }
14607 code += eAX_reg - rAX_reg;
6608db57 14608 /* Fall through. */
52b15da3
JH
14609 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
14610 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
14611 USED_REX (REX_W);
14612 if (rex & REX_W)
52b15da3 14613 s = names64[code - eAX_reg + add];
52b15da3 14614 else
f16cd0d5
L
14615 {
14616 if (sizeflag & DFLAG)
14617 s = names32[code - eAX_reg + add];
14618 else
14619 s = names16[code - eAX_reg + add];
14620 used_prefixes |= (prefixes & PREFIX_DATA);
14621 }
52b15da3 14622 break;
52b15da3
JH
14623 default:
14624 s = INTERNAL_DISASSEMBLER_ERROR;
14625 break;
14626 }
14627 oappend (s);
14628}
14629
14630static void
26ca5450 14631OP_IMREG (int code, int sizeflag)
52b15da3
JH
14632{
14633 const char *s;
252b5132
RH
14634
14635 switch (code)
14636 {
14637 case indir_dx_reg:
d708bcba 14638 if (intel_syntax)
52fd6d94 14639 s = "dx";
d708bcba 14640 else
db6eb5be 14641 s = "(%dx)";
252b5132
RH
14642 break;
14643 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
14644 case sp_reg: case bp_reg: case si_reg: case di_reg:
14645 s = names16[code - ax_reg];
14646 break;
14647 case es_reg: case ss_reg: case cs_reg:
14648 case ds_reg: case fs_reg: case gs_reg:
14649 s = names_seg[code - es_reg];
14650 break;
14651 case al_reg: case ah_reg: case cl_reg: case ch_reg:
14652 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
52b15da3
JH
14653 USED_REX (0);
14654 if (rex)
14655 s = names8rex[code - al_reg];
14656 else
14657 s = names8[code - al_reg];
252b5132
RH
14658 break;
14659 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
14660 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
14661 USED_REX (REX_W);
14662 if (rex & REX_W)
52b15da3 14663 s = names64[code - eAX_reg];
252b5132 14664 else
f16cd0d5
L
14665 {
14666 if (sizeflag & DFLAG)
14667 s = names32[code - eAX_reg];
14668 else
14669 s = names16[code - eAX_reg];
14670 used_prefixes |= (prefixes & PREFIX_DATA);
14671 }
252b5132 14672 break;
52fd6d94 14673 case z_mode_ax_reg:
161a04f6 14674 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
14675 s = *names32;
14676 else
14677 s = *names16;
161a04f6 14678 if (!(rex & REX_W))
52fd6d94
JB
14679 used_prefixes |= (prefixes & PREFIX_DATA);
14680 break;
252b5132
RH
14681 default:
14682 s = INTERNAL_DISASSEMBLER_ERROR;
14683 break;
14684 }
14685 oappend (s);
14686}
14687
14688static void
26ca5450 14689OP_I (int bytemode, int sizeflag)
252b5132 14690{
52b15da3
JH
14691 bfd_signed_vma op;
14692 bfd_signed_vma mask = -1;
252b5132
RH
14693
14694 switch (bytemode)
14695 {
14696 case b_mode:
14697 FETCH_DATA (the_info, codep + 1);
52b15da3
JH
14698 op = *codep++;
14699 mask = 0xff;
14700 break;
14701 case q_mode:
cb712a9e 14702 if (address_mode == mode_64bit)
6439fc28
AM
14703 {
14704 op = get32s ();
14705 break;
14706 }
6608db57 14707 /* Fall through. */
252b5132 14708 case v_mode:
161a04f6
L
14709 USED_REX (REX_W);
14710 if (rex & REX_W)
52b15da3 14711 op = get32s ();
252b5132 14712 else
52b15da3 14713 {
f16cd0d5
L
14714 if (sizeflag & DFLAG)
14715 {
14716 op = get32 ();
14717 mask = 0xffffffff;
14718 }
14719 else
14720 {
14721 op = get16 ();
14722 mask = 0xfffff;
14723 }
14724 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 14725 }
252b5132
RH
14726 break;
14727 case w_mode:
52b15da3 14728 mask = 0xfffff;
252b5132
RH
14729 op = get16 ();
14730 break;
9306ca4a
JB
14731 case const_1_mode:
14732 if (intel_syntax)
6c067bbb 14733 oappend ("1");
9306ca4a 14734 return;
252b5132
RH
14735 default:
14736 oappend (INTERNAL_DISASSEMBLER_ERROR);
14737 return;
14738 }
14739
52b15da3
JH
14740 op &= mask;
14741 scratchbuf[0] = '$';
d708bcba 14742 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 14743 oappend_maybe_intel (scratchbuf);
52b15da3
JH
14744 scratchbuf[0] = '\0';
14745}
14746
14747static void
26ca5450 14748OP_I64 (int bytemode, int sizeflag)
52b15da3
JH
14749{
14750 bfd_signed_vma op;
14751 bfd_signed_vma mask = -1;
14752
cb712a9e 14753 if (address_mode != mode_64bit)
6439fc28
AM
14754 {
14755 OP_I (bytemode, sizeflag);
14756 return;
14757 }
14758
52b15da3
JH
14759 switch (bytemode)
14760 {
14761 case b_mode:
14762 FETCH_DATA (the_info, codep + 1);
14763 op = *codep++;
14764 mask = 0xff;
14765 break;
14766 case v_mode:
161a04f6
L
14767 USED_REX (REX_W);
14768 if (rex & REX_W)
52b15da3 14769 op = get64 ();
52b15da3
JH
14770 else
14771 {
f16cd0d5
L
14772 if (sizeflag & DFLAG)
14773 {
14774 op = get32 ();
14775 mask = 0xffffffff;
14776 }
14777 else
14778 {
14779 op = get16 ();
14780 mask = 0xfffff;
14781 }
14782 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 14783 }
52b15da3
JH
14784 break;
14785 case w_mode:
14786 mask = 0xfffff;
14787 op = get16 ();
14788 break;
14789 default:
14790 oappend (INTERNAL_DISASSEMBLER_ERROR);
14791 return;
14792 }
14793
14794 op &= mask;
14795 scratchbuf[0] = '$';
d708bcba 14796 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 14797 oappend_maybe_intel (scratchbuf);
252b5132
RH
14798 scratchbuf[0] = '\0';
14799}
14800
14801static void
26ca5450 14802OP_sI (int bytemode, int sizeflag)
252b5132 14803{
52b15da3 14804 bfd_signed_vma op;
252b5132
RH
14805
14806 switch (bytemode)
14807 {
14808 case b_mode:
e3949f17 14809 case b_T_mode:
252b5132
RH
14810 FETCH_DATA (the_info, codep + 1);
14811 op = *codep++;
14812 if ((op & 0x80) != 0)
14813 op -= 0x100;
e3949f17
L
14814 if (bytemode == b_T_mode)
14815 {
14816 if (address_mode != mode_64bit
7bb15c6f 14817 || !((sizeflag & DFLAG) || (rex & REX_W)))
e3949f17 14818 {
6c067bbb
RM
14819 /* The operand-size prefix is overridden by a REX prefix. */
14820 if ((sizeflag & DFLAG) || (rex & REX_W))
e3949f17
L
14821 op &= 0xffffffff;
14822 else
14823 op &= 0xffff;
14824 }
14825 }
14826 else
14827 {
14828 if (!(rex & REX_W))
14829 {
14830 if (sizeflag & DFLAG)
14831 op &= 0xffffffff;
14832 else
14833 op &= 0xffff;
14834 }
14835 }
252b5132
RH
14836 break;
14837 case v_mode:
7bb15c6f
RM
14838 /* The operand-size prefix is overridden by a REX prefix. */
14839 if ((sizeflag & DFLAG) || (rex & REX_W))
52b15da3 14840 op = get32s ();
252b5132 14841 else
d9e3625e 14842 op = get16 ();
252b5132
RH
14843 break;
14844 default:
14845 oappend (INTERNAL_DISASSEMBLER_ERROR);
14846 return;
14847 }
52b15da3
JH
14848
14849 scratchbuf[0] = '$';
14850 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 14851 oappend_maybe_intel (scratchbuf);
252b5132
RH
14852}
14853
14854static void
26ca5450 14855OP_J (int bytemode, int sizeflag)
252b5132 14856{
52b15da3 14857 bfd_vma disp;
7081ff04 14858 bfd_vma mask = -1;
65ca155d 14859 bfd_vma segment = 0;
252b5132
RH
14860
14861 switch (bytemode)
14862 {
14863 case b_mode:
14864 FETCH_DATA (the_info, codep + 1);
14865 disp = *codep++;
14866 if ((disp & 0x80) != 0)
14867 disp -= 0x100;
14868 break;
14869 case v_mode:
5db04b09
L
14870 if (isa64 == amd64)
14871 USED_REX (REX_W);
14872 if ((sizeflag & DFLAG)
14873 || (address_mode == mode_64bit
14874 && (isa64 != amd64 || (rex & REX_W))))
52b15da3 14875 disp = get32s ();
252b5132
RH
14876 else
14877 {
14878 disp = get16 ();
206717e8
L
14879 if ((disp & 0x8000) != 0)
14880 disp -= 0x10000;
65ca155d
L
14881 /* In 16bit mode, address is wrapped around at 64k within
14882 the same segment. Otherwise, a data16 prefix on a jump
14883 instruction means that the pc is masked to 16 bits after
14884 the displacement is added! */
14885 mask = 0xffff;
14886 if ((prefixes & PREFIX_DATA) == 0)
4fd7268a 14887 segment = ((start_pc + (codep - start_codep))
65ca155d 14888 & ~((bfd_vma) 0xffff));
252b5132 14889 }
5db04b09
L
14890 if (address_mode != mode_64bit
14891 || (isa64 == amd64 && !(rex & REX_W)))
f16cd0d5 14892 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132
RH
14893 break;
14894 default:
14895 oappend (INTERNAL_DISASSEMBLER_ERROR);
14896 return;
14897 }
42d5f9c6 14898 disp = ((start_pc + (codep - start_codep) + disp) & mask) | segment;
52b15da3
JH
14899 set_op (disp, 0);
14900 print_operand_value (scratchbuf, 1, disp);
252b5132
RH
14901 oappend (scratchbuf);
14902}
14903
252b5132 14904static void
ed7841b3 14905OP_SEG (int bytemode, int sizeflag)
252b5132 14906{
ed7841b3 14907 if (bytemode == w_mode)
7967e09e 14908 oappend (names_seg[modrm.reg]);
ed7841b3 14909 else
7967e09e 14910 OP_E (modrm.mod == 3 ? bytemode : w_mode, sizeflag);
252b5132
RH
14911}
14912
14913static void
26ca5450 14914OP_DIR (int dummy ATTRIBUTE_UNUSED, int sizeflag)
252b5132
RH
14915{
14916 int seg, offset;
14917
c608c12e 14918 if (sizeflag & DFLAG)
252b5132 14919 {
c608c12e
AM
14920 offset = get32 ();
14921 seg = get16 ();
252b5132 14922 }
c608c12e
AM
14923 else
14924 {
14925 offset = get16 ();
14926 seg = get16 ();
14927 }
7d421014 14928 used_prefixes |= (prefixes & PREFIX_DATA);
d708bcba 14929 if (intel_syntax)
3f31e633 14930 sprintf (scratchbuf, "0x%x:0x%x", seg, offset);
d708bcba
AM
14931 else
14932 sprintf (scratchbuf, "$0x%x,$0x%x", seg, offset);
c608c12e 14933 oappend (scratchbuf);
252b5132
RH
14934}
14935
252b5132 14936static void
3f31e633 14937OP_OFF (int bytemode, int sizeflag)
252b5132 14938{
52b15da3 14939 bfd_vma off;
252b5132 14940
3f31e633
JB
14941 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
14942 intel_operand_size (bytemode, sizeflag);
252b5132
RH
14943 append_seg ();
14944
cb712a9e 14945 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132
RH
14946 off = get32 ();
14947 else
14948 off = get16 ();
14949
14950 if (intel_syntax)
14951 {
285ca992 14952 if (!active_seg_prefix)
252b5132 14953 {
d708bcba 14954 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
14955 oappend (":");
14956 }
14957 }
52b15da3
JH
14958 print_operand_value (scratchbuf, 1, off);
14959 oappend (scratchbuf);
14960}
6439fc28 14961
52b15da3 14962static void
3f31e633 14963OP_OFF64 (int bytemode, int sizeflag)
52b15da3
JH
14964{
14965 bfd_vma off;
14966
539e75ad
L
14967 if (address_mode != mode_64bit
14968 || (prefixes & PREFIX_ADDR))
6439fc28
AM
14969 {
14970 OP_OFF (bytemode, sizeflag);
14971 return;
14972 }
14973
3f31e633
JB
14974 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
14975 intel_operand_size (bytemode, sizeflag);
52b15da3
JH
14976 append_seg ();
14977
6608db57 14978 off = get64 ();
52b15da3
JH
14979
14980 if (intel_syntax)
14981 {
285ca992 14982 if (!active_seg_prefix)
52b15da3 14983 {
d708bcba 14984 oappend (names_seg[ds_reg - es_reg]);
52b15da3
JH
14985 oappend (":");
14986 }
14987 }
14988 print_operand_value (scratchbuf, 1, off);
252b5132
RH
14989 oappend (scratchbuf);
14990}
14991
14992static void
26ca5450 14993ptr_reg (int code, int sizeflag)
252b5132 14994{
2da11e11 14995 const char *s;
d708bcba 14996
1d9f512f 14997 *obufp++ = open_char;
20f0a1fc 14998 used_prefixes |= (prefixes & PREFIX_ADDR);
cb712a9e 14999 if (address_mode == mode_64bit)
c1a64871
JH
15000 {
15001 if (!(sizeflag & AFLAG))
db6eb5be 15002 s = names32[code - eAX_reg];
c1a64871 15003 else
db6eb5be 15004 s = names64[code - eAX_reg];
c1a64871 15005 }
52b15da3 15006 else if (sizeflag & AFLAG)
252b5132
RH
15007 s = names32[code - eAX_reg];
15008 else
15009 s = names16[code - eAX_reg];
15010 oappend (s);
1d9f512f
AM
15011 *obufp++ = close_char;
15012 *obufp = 0;
252b5132
RH
15013}
15014
15015static void
26ca5450 15016OP_ESreg (int code, int sizeflag)
252b5132 15017{
9306ca4a 15018 if (intel_syntax)
52fd6d94
JB
15019 {
15020 switch (codep[-1])
15021 {
15022 case 0x6d: /* insw/insl */
15023 intel_operand_size (z_mode, sizeflag);
15024 break;
15025 case 0xa5: /* movsw/movsl/movsq */
15026 case 0xa7: /* cmpsw/cmpsl/cmpsq */
15027 case 0xab: /* stosw/stosl */
15028 case 0xaf: /* scasw/scasl */
15029 intel_operand_size (v_mode, sizeflag);
15030 break;
15031 default:
15032 intel_operand_size (b_mode, sizeflag);
15033 }
15034 }
9ce09ba2 15035 oappend_maybe_intel ("%es:");
252b5132
RH
15036 ptr_reg (code, sizeflag);
15037}
15038
15039static void
26ca5450 15040OP_DSreg (int code, int sizeflag)
252b5132 15041{
9306ca4a 15042 if (intel_syntax)
52fd6d94
JB
15043 {
15044 switch (codep[-1])
15045 {
15046 case 0x6f: /* outsw/outsl */
15047 intel_operand_size (z_mode, sizeflag);
15048 break;
15049 case 0xa5: /* movsw/movsl/movsq */
15050 case 0xa7: /* cmpsw/cmpsl/cmpsq */
15051 case 0xad: /* lodsw/lodsl/lodsq */
15052 intel_operand_size (v_mode, sizeflag);
15053 break;
15054 default:
15055 intel_operand_size (b_mode, sizeflag);
15056 }
15057 }
285ca992
L
15058 /* Set active_seg_prefix to PREFIX_DS if it is unset so that the
15059 default segment register DS is printed. */
15060 if (!active_seg_prefix)
15061 active_seg_prefix = PREFIX_DS;
6608db57 15062 append_seg ();
252b5132
RH
15063 ptr_reg (code, sizeflag);
15064}
15065
252b5132 15066static void
26ca5450 15067OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15068{
9b60702d 15069 int add;
161a04f6 15070 if (rex & REX_R)
c4a530c5 15071 {
161a04f6 15072 USED_REX (REX_R);
c4a530c5
JB
15073 add = 8;
15074 }
cb712a9e 15075 else if (address_mode != mode_64bit && (prefixes & PREFIX_LOCK))
c4a530c5 15076 {
f16cd0d5 15077 all_prefixes[last_lock_prefix] = 0;
c4a530c5
JB
15078 used_prefixes |= PREFIX_LOCK;
15079 add = 8;
15080 }
9b60702d
L
15081 else
15082 add = 0;
7967e09e 15083 sprintf (scratchbuf, "%%cr%d", modrm.reg + add);
9ce09ba2 15084 oappend_maybe_intel (scratchbuf);
252b5132
RH
15085}
15086
252b5132 15087static void
26ca5450 15088OP_D (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15089{
9b60702d 15090 int add;
161a04f6
L
15091 USED_REX (REX_R);
15092 if (rex & REX_R)
52b15da3 15093 add = 8;
9b60702d
L
15094 else
15095 add = 0;
d708bcba 15096 if (intel_syntax)
7967e09e 15097 sprintf (scratchbuf, "db%d", modrm.reg + add);
d708bcba 15098 else
7967e09e 15099 sprintf (scratchbuf, "%%db%d", modrm.reg + add);
252b5132
RH
15100 oappend (scratchbuf);
15101}
15102
252b5132 15103static void
26ca5450 15104OP_T (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15105{
7967e09e 15106 sprintf (scratchbuf, "%%tr%d", modrm.reg);
9ce09ba2 15107 oappend_maybe_intel (scratchbuf);
252b5132
RH
15108}
15109
15110static void
6f74c397 15111OP_R (int bytemode, int sizeflag)
252b5132 15112{
68f34464
L
15113 /* Skip mod/rm byte. */
15114 MODRM_CHECK;
15115 codep++;
15116 OP_E_register (bytemode, sizeflag);
252b5132
RH
15117}
15118
15119static void
26ca5450 15120OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15121{
b9733481
L
15122 int reg = modrm.reg;
15123 const char **names;
15124
041bd2e0
JH
15125 used_prefixes |= (prefixes & PREFIX_DATA);
15126 if (prefixes & PREFIX_DATA)
20f0a1fc 15127 {
b9733481 15128 names = names_xmm;
161a04f6
L
15129 USED_REX (REX_R);
15130 if (rex & REX_R)
b9733481 15131 reg += 8;
20f0a1fc 15132 }
041bd2e0 15133 else
b9733481
L
15134 names = names_mm;
15135 oappend (names[reg]);
252b5132
RH
15136}
15137
c608c12e 15138static void
c0f3af97 15139OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
c608c12e 15140{
b9733481
L
15141 int reg = modrm.reg;
15142 const char **names;
15143
161a04f6
L
15144 USED_REX (REX_R);
15145 if (rex & REX_R)
b9733481 15146 reg += 8;
43234a1e
L
15147 if (vex.evex)
15148 {
15149 if (!vex.r)
15150 reg += 16;
15151 }
15152
539f890d
L
15153 if (need_vex
15154 && bytemode != xmm_mode
43234a1e
L
15155 && bytemode != xmmq_mode
15156 && bytemode != evex_half_bcst_xmmq_mode
15157 && bytemode != ymm_mode
539f890d 15158 && bytemode != scalar_mode)
c0f3af97
L
15159 {
15160 switch (vex.length)
15161 {
15162 case 128:
b9733481 15163 names = names_xmm;
c0f3af97
L
15164 break;
15165 case 256:
5fc35d96
IT
15166 if (vex.w
15167 || (bytemode != vex_vsib_q_w_dq_mode
15168 && bytemode != vex_vsib_q_w_d_mode))
6c30d220
L
15169 names = names_ymm;
15170 else
15171 names = names_xmm;
c0f3af97 15172 break;
43234a1e
L
15173 case 512:
15174 names = names_zmm;
15175 break;
c0f3af97
L
15176 default:
15177 abort ();
15178 }
15179 }
43234a1e
L
15180 else if (bytemode == xmmq_mode
15181 || bytemode == evex_half_bcst_xmmq_mode)
15182 {
15183 switch (vex.length)
15184 {
15185 case 128:
15186 case 256:
15187 names = names_xmm;
15188 break;
15189 case 512:
15190 names = names_ymm;
15191 break;
15192 default:
15193 abort ();
15194 }
15195 }
15196 else if (bytemode == ymm_mode)
15197 names = names_ymm;
c0f3af97 15198 else
b9733481
L
15199 names = names_xmm;
15200 oappend (names[reg]);
c608c12e
AM
15201}
15202
252b5132 15203static void
26ca5450 15204OP_EM (int bytemode, int sizeflag)
252b5132 15205{
b9733481
L
15206 int reg;
15207 const char **names;
15208
7967e09e 15209 if (modrm.mod != 3)
252b5132 15210 {
b6169b20
L
15211 if (intel_syntax
15212 && (bytemode == v_mode || bytemode == v_swap_mode))
9306ca4a
JB
15213 {
15214 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
15215 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 15216 }
252b5132
RH
15217 OP_E (bytemode, sizeflag);
15218 return;
15219 }
15220
b6169b20
L
15221 if ((sizeflag & SUFFIX_ALWAYS) && bytemode == v_swap_mode)
15222 swap_operand ();
15223
6608db57 15224 /* Skip mod/rm byte. */
4bba6815 15225 MODRM_CHECK;
252b5132 15226 codep++;
041bd2e0 15227 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 15228 reg = modrm.rm;
041bd2e0 15229 if (prefixes & PREFIX_DATA)
20f0a1fc 15230 {
b9733481 15231 names = names_xmm;
161a04f6
L
15232 USED_REX (REX_B);
15233 if (rex & REX_B)
b9733481 15234 reg += 8;
20f0a1fc 15235 }
041bd2e0 15236 else
b9733481
L
15237 names = names_mm;
15238 oappend (names[reg]);
252b5132
RH
15239}
15240
246c51aa
L
15241/* cvt* are the only instructions in sse2 which have
15242 both SSE and MMX operands and also have 0x66 prefix
15243 in their opcode. 0x66 was originally used to differentiate
15244 between SSE and MMX instruction(operands). So we have to handle the
4d9567e0
MM
15245 cvt* separately using OP_EMC and OP_MXC */
15246static void
15247OP_EMC (int bytemode, int sizeflag)
15248{
7967e09e 15249 if (modrm.mod != 3)
4d9567e0
MM
15250 {
15251 if (intel_syntax && bytemode == v_mode)
15252 {
15253 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
15254 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 15255 }
4d9567e0
MM
15256 OP_E (bytemode, sizeflag);
15257 return;
15258 }
246c51aa 15259
4d9567e0
MM
15260 /* Skip mod/rm byte. */
15261 MODRM_CHECK;
15262 codep++;
15263 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 15264 oappend (names_mm[modrm.rm]);
4d9567e0
MM
15265}
15266
15267static void
15268OP_MXC (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15269{
15270 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 15271 oappend (names_mm[modrm.reg]);
4d9567e0
MM
15272}
15273
c608c12e 15274static void
26ca5450 15275OP_EX (int bytemode, int sizeflag)
c608c12e 15276{
b9733481
L
15277 int reg;
15278 const char **names;
d6f574e0
L
15279
15280 /* Skip mod/rm byte. */
15281 MODRM_CHECK;
15282 codep++;
15283
7967e09e 15284 if (modrm.mod != 3)
c608c12e 15285 {
c1e679ec 15286 OP_E_memory (bytemode, sizeflag);
c608c12e
AM
15287 return;
15288 }
d6f574e0 15289
b9733481 15290 reg = modrm.rm;
161a04f6
L
15291 USED_REX (REX_B);
15292 if (rex & REX_B)
b9733481 15293 reg += 8;
43234a1e
L
15294 if (vex.evex)
15295 {
15296 USED_REX (REX_X);
15297 if ((rex & REX_X))
15298 reg += 16;
15299 }
c608c12e 15300
b6169b20 15301 if ((sizeflag & SUFFIX_ALWAYS)
fa99fab2
L
15302 && (bytemode == x_swap_mode
15303 || bytemode == d_swap_mode
7bb15c6f 15304 || bytemode == d_scalar_swap_mode
539f890d
L
15305 || bytemode == q_swap_mode
15306 || bytemode == q_scalar_swap_mode))
b6169b20
L
15307 swap_operand ();
15308
c0f3af97
L
15309 if (need_vex
15310 && bytemode != xmm_mode
6c30d220
L
15311 && bytemode != xmmdw_mode
15312 && bytemode != xmmqd_mode
15313 && bytemode != xmm_mb_mode
15314 && bytemode != xmm_mw_mode
15315 && bytemode != xmm_md_mode
15316 && bytemode != xmm_mq_mode
43234a1e 15317 && bytemode != xmm_mdq_mode
539f890d 15318 && bytemode != xmmq_mode
43234a1e
L
15319 && bytemode != evex_half_bcst_xmmq_mode
15320 && bytemode != ymm_mode
539f890d 15321 && bytemode != d_scalar_mode
7bb15c6f 15322 && bytemode != d_scalar_swap_mode
539f890d 15323 && bytemode != q_scalar_mode
1c480963
L
15324 && bytemode != q_scalar_swap_mode
15325 && bytemode != vex_scalar_w_dq_mode)
c0f3af97
L
15326 {
15327 switch (vex.length)
15328 {
15329 case 128:
b9733481 15330 names = names_xmm;
c0f3af97
L
15331 break;
15332 case 256:
b9733481 15333 names = names_ymm;
c0f3af97 15334 break;
43234a1e
L
15335 case 512:
15336 names = names_zmm;
15337 break;
c0f3af97
L
15338 default:
15339 abort ();
15340 }
15341 }
43234a1e
L
15342 else if (bytemode == xmmq_mode
15343 || bytemode == evex_half_bcst_xmmq_mode)
15344 {
15345 switch (vex.length)
15346 {
15347 case 128:
15348 case 256:
15349 names = names_xmm;
15350 break;
15351 case 512:
15352 names = names_ymm;
15353 break;
15354 default:
15355 abort ();
15356 }
15357 }
15358 else if (bytemode == ymm_mode)
15359 names = names_ymm;
c0f3af97 15360 else
b9733481
L
15361 names = names_xmm;
15362 oappend (names[reg]);
c608c12e
AM
15363}
15364
252b5132 15365static void
26ca5450 15366OP_MS (int bytemode, int sizeflag)
252b5132 15367{
7967e09e 15368 if (modrm.mod == 3)
2da11e11
AM
15369 OP_EM (bytemode, sizeflag);
15370 else
6608db57 15371 BadOp ();
252b5132
RH
15372}
15373
992aaec9 15374static void
26ca5450 15375OP_XS (int bytemode, int sizeflag)
992aaec9 15376{
7967e09e 15377 if (modrm.mod == 3)
992aaec9
AM
15378 OP_EX (bytemode, sizeflag);
15379 else
6608db57 15380 BadOp ();
992aaec9
AM
15381}
15382
cc0ec051
AM
15383static void
15384OP_M (int bytemode, int sizeflag)
15385{
7967e09e 15386 if (modrm.mod == 3)
75413a22
L
15387 /* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */
15388 BadOp ();
cc0ec051
AM
15389 else
15390 OP_E (bytemode, sizeflag);
15391}
15392
15393static void
15394OP_0f07 (int bytemode, int sizeflag)
15395{
7967e09e 15396 if (modrm.mod != 3 || modrm.rm != 0)
cc0ec051
AM
15397 BadOp ();
15398 else
15399 OP_E (bytemode, sizeflag);
15400}
15401
46e883c5 15402/* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
246c51aa 15403 32bit mode and "xchg %rax,%rax" in 64bit mode. */
46e883c5 15404
cc0ec051 15405static void
46e883c5 15406NOP_Fixup1 (int bytemode, int sizeflag)
cc0ec051 15407{
8b38ad71
L
15408 if ((prefixes & PREFIX_DATA) != 0
15409 || (rex != 0
15410 && rex != 0x48
15411 && address_mode == mode_64bit))
46e883c5
L
15412 OP_REG (bytemode, sizeflag);
15413 else
15414 strcpy (obuf, "nop");
15415}
15416
15417static void
15418NOP_Fixup2 (int bytemode, int sizeflag)
15419{
8b38ad71
L
15420 if ((prefixes & PREFIX_DATA) != 0
15421 || (rex != 0
15422 && rex != 0x48
15423 && address_mode == mode_64bit))
46e883c5 15424 OP_IMREG (bytemode, sizeflag);
cc0ec051
AM
15425}
15426
84037f8c 15427static const char *const Suffix3DNow[] = {
252b5132
RH
15428/* 00 */ NULL, NULL, NULL, NULL,
15429/* 04 */ NULL, NULL, NULL, NULL,
15430/* 08 */ NULL, NULL, NULL, NULL,
9e525108 15431/* 0C */ "pi2fw", "pi2fd", NULL, NULL,
252b5132
RH
15432/* 10 */ NULL, NULL, NULL, NULL,
15433/* 14 */ NULL, NULL, NULL, NULL,
15434/* 18 */ NULL, NULL, NULL, NULL,
9e525108 15435/* 1C */ "pf2iw", "pf2id", NULL, NULL,
252b5132
RH
15436/* 20 */ NULL, NULL, NULL, NULL,
15437/* 24 */ NULL, NULL, NULL, NULL,
15438/* 28 */ NULL, NULL, NULL, NULL,
15439/* 2C */ NULL, NULL, NULL, NULL,
15440/* 30 */ NULL, NULL, NULL, NULL,
15441/* 34 */ NULL, NULL, NULL, NULL,
15442/* 38 */ NULL, NULL, NULL, NULL,
15443/* 3C */ NULL, NULL, NULL, NULL,
15444/* 40 */ NULL, NULL, NULL, NULL,
15445/* 44 */ NULL, NULL, NULL, NULL,
15446/* 48 */ NULL, NULL, NULL, NULL,
15447/* 4C */ NULL, NULL, NULL, NULL,
15448/* 50 */ NULL, NULL, NULL, NULL,
15449/* 54 */ NULL, NULL, NULL, NULL,
15450/* 58 */ NULL, NULL, NULL, NULL,
15451/* 5C */ NULL, NULL, NULL, NULL,
15452/* 60 */ NULL, NULL, NULL, NULL,
15453/* 64 */ NULL, NULL, NULL, NULL,
15454/* 68 */ NULL, NULL, NULL, NULL,
15455/* 6C */ NULL, NULL, NULL, NULL,
15456/* 70 */ NULL, NULL, NULL, NULL,
15457/* 74 */ NULL, NULL, NULL, NULL,
15458/* 78 */ NULL, NULL, NULL, NULL,
15459/* 7C */ NULL, NULL, NULL, NULL,
15460/* 80 */ NULL, NULL, NULL, NULL,
15461/* 84 */ NULL, NULL, NULL, NULL,
9e525108
AM
15462/* 88 */ NULL, NULL, "pfnacc", NULL,
15463/* 8C */ NULL, NULL, "pfpnacc", NULL,
252b5132
RH
15464/* 90 */ "pfcmpge", NULL, NULL, NULL,
15465/* 94 */ "pfmin", NULL, "pfrcp", "pfrsqrt",
15466/* 98 */ NULL, NULL, "pfsub", NULL,
15467/* 9C */ NULL, NULL, "pfadd", NULL,
15468/* A0 */ "pfcmpgt", NULL, NULL, NULL,
15469/* A4 */ "pfmax", NULL, "pfrcpit1", "pfrsqit1",
15470/* A8 */ NULL, NULL, "pfsubr", NULL,
15471/* AC */ NULL, NULL, "pfacc", NULL,
15472/* B0 */ "pfcmpeq", NULL, NULL, NULL,
9beff690 15473/* B4 */ "pfmul", NULL, "pfrcpit2", "pmulhrw",
9e525108 15474/* B8 */ NULL, NULL, NULL, "pswapd",
252b5132
RH
15475/* BC */ NULL, NULL, NULL, "pavgusb",
15476/* C0 */ NULL, NULL, NULL, NULL,
15477/* C4 */ NULL, NULL, NULL, NULL,
15478/* C8 */ NULL, NULL, NULL, NULL,
15479/* CC */ NULL, NULL, NULL, NULL,
15480/* D0 */ NULL, NULL, NULL, NULL,
15481/* D4 */ NULL, NULL, NULL, NULL,
15482/* D8 */ NULL, NULL, NULL, NULL,
15483/* DC */ NULL, NULL, NULL, NULL,
15484/* E0 */ NULL, NULL, NULL, NULL,
15485/* E4 */ NULL, NULL, NULL, NULL,
15486/* E8 */ NULL, NULL, NULL, NULL,
15487/* EC */ NULL, NULL, NULL, NULL,
15488/* F0 */ NULL, NULL, NULL, NULL,
15489/* F4 */ NULL, NULL, NULL, NULL,
15490/* F8 */ NULL, NULL, NULL, NULL,
15491/* FC */ NULL, NULL, NULL, NULL,
15492};
15493
15494static void
26ca5450 15495OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132
RH
15496{
15497 const char *mnemonic;
15498
15499 FETCH_DATA (the_info, codep + 1);
15500 /* AMD 3DNow! instructions are specified by an opcode suffix in the
15501 place where an 8-bit immediate would normally go. ie. the last
15502 byte of the instruction. */
ea397f5b 15503 obufp = mnemonicendp;
c608c12e 15504 mnemonic = Suffix3DNow[*codep++ & 0xff];
252b5132 15505 if (mnemonic)
2da11e11 15506 oappend (mnemonic);
252b5132
RH
15507 else
15508 {
15509 /* Since a variable sized modrm/sib chunk is between the start
15510 of the opcode (0x0f0f) and the opcode suffix, we need to do
15511 all the modrm processing first, and don't know until now that
15512 we have a bad opcode. This necessitates some cleaning up. */
ce518a5f
L
15513 op_out[0][0] = '\0';
15514 op_out[1][0] = '\0';
6608db57 15515 BadOp ();
252b5132 15516 }
ea397f5b 15517 mnemonicendp = obufp;
252b5132 15518}
c608c12e 15519
ea397f5b
L
15520static struct op simd_cmp_op[] =
15521{
15522 { STRING_COMMA_LEN ("eq") },
15523 { STRING_COMMA_LEN ("lt") },
15524 { STRING_COMMA_LEN ("le") },
15525 { STRING_COMMA_LEN ("unord") },
15526 { STRING_COMMA_LEN ("neq") },
15527 { STRING_COMMA_LEN ("nlt") },
15528 { STRING_COMMA_LEN ("nle") },
15529 { STRING_COMMA_LEN ("ord") }
c608c12e
AM
15530};
15531
15532static void
ad19981d 15533CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
c608c12e
AM
15534{
15535 unsigned int cmp_type;
15536
15537 FETCH_DATA (the_info, codep + 1);
15538 cmp_type = *codep++ & 0xff;
c0f3af97 15539 if (cmp_type < ARRAY_SIZE (simd_cmp_op))
c608c12e 15540 {
ad19981d 15541 char suffix [3];
ea397f5b 15542 char *p = mnemonicendp - 2;
ad19981d
L
15543 suffix[0] = p[0];
15544 suffix[1] = p[1];
15545 suffix[2] = '\0';
ea397f5b
L
15546 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
15547 mnemonicendp += simd_cmp_op[cmp_type].len;
c608c12e
AM
15548 }
15549 else
15550 {
ad19981d
L
15551 /* We have a reserved extension byte. Output it directly. */
15552 scratchbuf[0] = '$';
15553 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 15554 oappend_maybe_intel (scratchbuf);
ad19981d 15555 scratchbuf[0] = '\0';
c608c12e
AM
15556 }
15557}
15558
9916071f
AP
15559static void
15560OP_Mwaitx (int bytemode ATTRIBUTE_UNUSED,
15561 int sizeflag ATTRIBUTE_UNUSED)
15562{
15563 /* mwaitx %eax,%ecx,%ebx */
15564 if (!intel_syntax)
15565 {
15566 const char **names = (address_mode == mode_64bit
15567 ? names64 : names32);
15568 strcpy (op_out[0], names[0]);
15569 strcpy (op_out[1], names[1]);
15570 strcpy (op_out[2], names[3]);
15571 two_source_ops = 1;
15572 }
15573 /* Skip mod/rm byte. */
15574 MODRM_CHECK;
15575 codep++;
15576}
15577
ca164297 15578static void
b844680a
L
15579OP_Mwait (int bytemode ATTRIBUTE_UNUSED,
15580 int sizeflag ATTRIBUTE_UNUSED)
15581{
15582 /* mwait %eax,%ecx */
15583 if (!intel_syntax)
15584 {
15585 const char **names = (address_mode == mode_64bit
15586 ? names64 : names32);
15587 strcpy (op_out[0], names[0]);
15588 strcpy (op_out[1], names[1]);
15589 two_source_ops = 1;
15590 }
15591 /* Skip mod/rm byte. */
15592 MODRM_CHECK;
15593 codep++;
15594}
15595
15596static void
15597OP_Monitor (int bytemode ATTRIBUTE_UNUSED,
15598 int sizeflag ATTRIBUTE_UNUSED)
ca164297 15599{
b844680a
L
15600 /* monitor %eax,%ecx,%edx" */
15601 if (!intel_syntax)
ca164297 15602 {
b844680a 15603 const char **op1_names;
cb712a9e
L
15604 const char **names = (address_mode == mode_64bit
15605 ? names64 : names32);
1d9f512f 15606
b844680a
L
15607 if (!(prefixes & PREFIX_ADDR))
15608 op1_names = (address_mode == mode_16bit
15609 ? names16 : names);
ca164297
L
15610 else
15611 {
b844680a 15612 /* Remove "addr16/addr32". */
f16cd0d5 15613 all_prefixes[last_addr_prefix] = 0;
b844680a
L
15614 op1_names = (address_mode != mode_32bit
15615 ? names32 : names16);
15616 used_prefixes |= PREFIX_ADDR;
ca164297 15617 }
b844680a
L
15618 strcpy (op_out[0], op1_names[0]);
15619 strcpy (op_out[1], names[1]);
15620 strcpy (op_out[2], names[2]);
15621 two_source_ops = 1;
ca164297 15622 }
b844680a
L
15623 /* Skip mod/rm byte. */
15624 MODRM_CHECK;
15625 codep++;
30123838
JB
15626}
15627
6608db57
KH
15628static void
15629BadOp (void)
2da11e11 15630{
6608db57
KH
15631 /* Throw away prefixes and 1st. opcode byte. */
15632 codep = insn_codep + 1;
2da11e11
AM
15633 oappend ("(bad)");
15634}
4cc91dba 15635
35c52694
L
15636static void
15637REP_Fixup (int bytemode, int sizeflag)
15638{
15639 /* The 0xf3 prefix should be displayed as "rep" for ins, outs, movs,
15640 lods and stos. */
35c52694 15641 if (prefixes & PREFIX_REPZ)
f16cd0d5 15642 all_prefixes[last_repz_prefix] = REP_PREFIX;
35c52694
L
15643
15644 switch (bytemode)
15645 {
15646 case al_reg:
15647 case eAX_reg:
15648 case indir_dx_reg:
15649 OP_IMREG (bytemode, sizeflag);
15650 break;
15651 case eDI_reg:
15652 OP_ESreg (bytemode, sizeflag);
15653 break;
15654 case eSI_reg:
15655 OP_DSreg (bytemode, sizeflag);
15656 break;
15657 default:
15658 abort ();
15659 break;
15660 }
15661}
f5804c90 15662
7e8b059b
L
15663/* For BND-prefixed instructions 0xF2 prefix should be displayed as
15664 "bnd". */
15665
15666static void
15667BND_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15668{
15669 if (prefixes & PREFIX_REPNZ)
15670 all_prefixes[last_repnz_prefix] = BND_PREFIX;
15671}
15672
04ef582a
L
15673/* For NOTRACK-prefixed instructions, 0x3E prefix should be displayed as
15674 "notrack". */
15675
15676static void
15677NOTRACK_Fixup (int bytemode ATTRIBUTE_UNUSED,
15678 int sizeflag ATTRIBUTE_UNUSED)
15679{
9fef80d6 15680 if (active_seg_prefix == PREFIX_DS
04ef582a
L
15681 && (address_mode != mode_64bit || last_data_prefix < 0))
15682 {
4e9ac44a 15683 /* NOTRACK prefix is only valid on indirect branch instructions.
9fef80d6 15684 NB: DATA prefix is unsupported for Intel64. */
04ef582a
L
15685 active_seg_prefix = 0;
15686 all_prefixes[last_seg_prefix] = NOTRACK_PREFIX;
15687 }
15688}
15689
42164a71
L
15690/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
15691 "xacquire"/"xrelease" for memory operand if there is a LOCK prefix.
15692 */
15693
15694static void
15695HLE_Fixup1 (int bytemode, int sizeflag)
15696{
15697 if (modrm.mod != 3
15698 && (prefixes & PREFIX_LOCK) != 0)
15699 {
15700 if (prefixes & PREFIX_REPZ)
15701 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15702 if (prefixes & PREFIX_REPNZ)
15703 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
15704 }
15705
15706 OP_E (bytemode, sizeflag);
15707}
15708
15709/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
15710 "xacquire"/"xrelease" for memory operand. No check for LOCK prefix.
15711 */
15712
15713static void
15714HLE_Fixup2 (int bytemode, int sizeflag)
15715{
15716 if (modrm.mod != 3)
15717 {
15718 if (prefixes & PREFIX_REPZ)
15719 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15720 if (prefixes & PREFIX_REPNZ)
15721 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
15722 }
15723
15724 OP_E (bytemode, sizeflag);
15725}
15726
15727/* Similar to OP_E. But the 0xf3 prefixes should be displayed as
15728 "xrelease" for memory operand. No check for LOCK prefix. */
15729
15730static void
15731HLE_Fixup3 (int bytemode, int sizeflag)
15732{
15733 if (modrm.mod != 3
15734 && last_repz_prefix > last_repnz_prefix
15735 && (prefixes & PREFIX_REPZ) != 0)
15736 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15737
15738 OP_E (bytemode, sizeflag);
15739}
15740
f5804c90
L
15741static void
15742CMPXCHG8B_Fixup (int bytemode, int sizeflag)
15743{
161a04f6
L
15744 USED_REX (REX_W);
15745 if (rex & REX_W)
f5804c90
L
15746 {
15747 /* Change cmpxchg8b to cmpxchg16b. */
ea397f5b
L
15748 char *p = mnemonicendp - 2;
15749 mnemonicendp = stpcpy (p, "16b");
fb9c77c7 15750 bytemode = o_mode;
f5804c90 15751 }
42164a71
L
15752 else if ((prefixes & PREFIX_LOCK) != 0)
15753 {
15754 if (prefixes & PREFIX_REPZ)
15755 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15756 if (prefixes & PREFIX_REPNZ)
15757 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
15758 }
15759
f5804c90
L
15760 OP_M (bytemode, sizeflag);
15761}
42903f7f
L
15762
15763static void
15764XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED)
15765{
b9733481
L
15766 const char **names;
15767
c0f3af97
L
15768 if (need_vex)
15769 {
15770 switch (vex.length)
15771 {
15772 case 128:
b9733481 15773 names = names_xmm;
c0f3af97
L
15774 break;
15775 case 256:
b9733481 15776 names = names_ymm;
c0f3af97
L
15777 break;
15778 default:
15779 abort ();
15780 }
15781 }
15782 else
b9733481
L
15783 names = names_xmm;
15784 oappend (names[reg]);
42903f7f 15785}
381d071f
L
15786
15787static void
15788CRC32_Fixup (int bytemode, int sizeflag)
15789{
15790 /* Add proper suffix to "crc32". */
ea397f5b 15791 char *p = mnemonicendp;
381d071f
L
15792
15793 switch (bytemode)
15794 {
15795 case b_mode:
20592a94 15796 if (intel_syntax)
ea397f5b 15797 goto skip;
20592a94 15798
381d071f
L
15799 *p++ = 'b';
15800 break;
15801 case v_mode:
20592a94 15802 if (intel_syntax)
ea397f5b 15803 goto skip;
20592a94 15804
381d071f
L
15805 USED_REX (REX_W);
15806 if (rex & REX_W)
15807 *p++ = 'q';
7bb15c6f 15808 else
f16cd0d5
L
15809 {
15810 if (sizeflag & DFLAG)
15811 *p++ = 'l';
15812 else
15813 *p++ = 'w';
15814 used_prefixes |= (prefixes & PREFIX_DATA);
15815 }
381d071f
L
15816 break;
15817 default:
15818 oappend (INTERNAL_DISASSEMBLER_ERROR);
15819 break;
15820 }
ea397f5b 15821 mnemonicendp = p;
381d071f
L
15822 *p = '\0';
15823
ea397f5b 15824skip:
381d071f
L
15825 if (modrm.mod == 3)
15826 {
15827 int add;
15828
15829 /* Skip mod/rm byte. */
15830 MODRM_CHECK;
15831 codep++;
15832
15833 USED_REX (REX_B);
15834 add = (rex & REX_B) ? 8 : 0;
15835 if (bytemode == b_mode)
15836 {
15837 USED_REX (0);
15838 if (rex)
15839 oappend (names8rex[modrm.rm + add]);
15840 else
15841 oappend (names8[modrm.rm + add]);
15842 }
15843 else
15844 {
15845 USED_REX (REX_W);
15846 if (rex & REX_W)
15847 oappend (names64[modrm.rm + add]);
15848 else if ((prefixes & PREFIX_DATA))
15849 oappend (names16[modrm.rm + add]);
15850 else
15851 oappend (names32[modrm.rm + add]);
15852 }
15853 }
15854 else
9344ff29 15855 OP_E (bytemode, sizeflag);
381d071f 15856}
85f10a01 15857
eacc9c89
L
15858static void
15859FXSAVE_Fixup (int bytemode, int sizeflag)
15860{
15861 /* Add proper suffix to "fxsave" and "fxrstor". */
15862 USED_REX (REX_W);
15863 if (rex & REX_W)
15864 {
15865 char *p = mnemonicendp;
15866 *p++ = '6';
15867 *p++ = '4';
15868 *p = '\0';
15869 mnemonicendp = p;
15870 }
15871 OP_M (bytemode, sizeflag);
15872}
15873
15c7c1d8
JB
15874static void
15875PCMPESTR_Fixup (int bytemode, int sizeflag)
15876{
15877 /* Add proper suffix to "{,v}pcmpestr{i,m}". */
15878 if (!intel_syntax)
15879 {
15880 char *p = mnemonicendp;
15881
15882 USED_REX (REX_W);
15883 if (rex & REX_W)
15884 *p++ = 'q';
15885 else if (sizeflag & SUFFIX_ALWAYS)
15886 *p++ = 'l';
15887
15888 *p = '\0';
15889 mnemonicendp = p;
15890 }
15891
15892 OP_EX (bytemode, sizeflag);
15893}
15894
c0f3af97
L
15895/* Display the destination register operand for instructions with
15896 VEX. */
15897
15898static void
15899OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
15900{
539f890d 15901 int reg;
b9733481
L
15902 const char **names;
15903
c0f3af97
L
15904 if (!need_vex)
15905 abort ();
15906
15907 if (!need_vex_reg)
15908 return;
15909
539f890d 15910 reg = vex.register_specifier;
5f847646
JB
15911 if (address_mode != mode_64bit)
15912 reg &= 7;
15913 else if (vex.evex && !vex.v)
15914 reg += 16;
43234a1e 15915
539f890d
L
15916 if (bytemode == vex_scalar_mode)
15917 {
15918 oappend (names_xmm[reg]);
15919 return;
15920 }
15921
c0f3af97
L
15922 switch (vex.length)
15923 {
15924 case 128:
15925 switch (bytemode)
15926 {
15927 case vex_mode:
15928 case vex128_mode:
6c30d220 15929 case vex_vsib_q_w_dq_mode:
5fc35d96 15930 case vex_vsib_q_w_d_mode:
cb21baef
L
15931 names = names_xmm;
15932 break;
15933 case dq_mode:
390a6789 15934 if (rex & REX_W)
cb21baef
L
15935 names = names64;
15936 else
15937 names = names32;
c0f3af97 15938 break;
1ba585e8 15939 case mask_bd_mode:
43234a1e 15940 case mask_mode:
9889cbb1
L
15941 if (reg > 0x7)
15942 {
15943 oappend ("(bad)");
15944 return;
15945 }
43234a1e
L
15946 names = names_mask;
15947 break;
c0f3af97
L
15948 default:
15949 abort ();
15950 return;
15951 }
c0f3af97
L
15952 break;
15953 case 256:
15954 switch (bytemode)
15955 {
15956 case vex_mode:
15957 case vex256_mode:
6c30d220
L
15958 names = names_ymm;
15959 break;
15960 case vex_vsib_q_w_dq_mode:
5fc35d96 15961 case vex_vsib_q_w_d_mode:
6c30d220 15962 names = vex.w ? names_ymm : names_xmm;
c0f3af97 15963 break;
1ba585e8 15964 case mask_bd_mode:
43234a1e 15965 case mask_mode:
9889cbb1
L
15966 if (reg > 0x7)
15967 {
15968 oappend ("(bad)");
15969 return;
15970 }
43234a1e
L
15971 names = names_mask;
15972 break;
c0f3af97 15973 default:
a37a2806
NC
15974 /* See PR binutils/20893 for a reproducer. */
15975 oappend ("(bad)");
c0f3af97
L
15976 return;
15977 }
c0f3af97 15978 break;
43234a1e
L
15979 case 512:
15980 names = names_zmm;
15981 break;
c0f3af97
L
15982 default:
15983 abort ();
15984 break;
15985 }
539f890d 15986 oappend (names[reg]);
c0f3af97
L
15987}
15988
922d8de8
DR
15989/* Get the VEX immediate byte without moving codep. */
15990
15991static unsigned char
ccc5981b 15992get_vex_imm8 (int sizeflag, int opnum)
922d8de8
DR
15993{
15994 int bytes_before_imm = 0;
15995
922d8de8
DR
15996 if (modrm.mod != 3)
15997 {
15998 /* There are SIB/displacement bytes. */
15999 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
6c067bbb 16000 {
922d8de8 16001 /* 32/64 bit address mode */
6c067bbb 16002 int base = modrm.rm;
922d8de8
DR
16003
16004 /* Check SIB byte. */
6c067bbb
RM
16005 if (base == 4)
16006 {
16007 FETCH_DATA (the_info, codep + 1);
16008 base = *codep & 7;
16009 /* When decoding the third source, don't increase
16010 bytes_before_imm as this has already been incremented
16011 by one in OP_E_memory while decoding the second
16012 source operand. */
16013 if (opnum == 0)
16014 bytes_before_imm++;
16015 }
16016
16017 /* Don't increase bytes_before_imm when decoding the third source,
16018 it has already been incremented by OP_E_memory while decoding
16019 the second source operand. */
16020 if (opnum == 0)
16021 {
16022 switch (modrm.mod)
16023 {
16024 case 0:
16025 /* When modrm.rm == 5 or modrm.rm == 4 and base in
16026 SIB == 5, there is a 4 byte displacement. */
16027 if (base != 5)
16028 /* No displacement. */
16029 break;
1a0670f3 16030 /* Fall through. */
6c067bbb
RM
16031 case 2:
16032 /* 4 byte displacement. */
16033 bytes_before_imm += 4;
16034 break;
16035 case 1:
16036 /* 1 byte displacement. */
16037 bytes_before_imm++;
16038 break;
16039 }
16040 }
16041 }
922d8de8 16042 else
02e647f9
SP
16043 {
16044 /* 16 bit address mode */
6c067bbb
RM
16045 /* Don't increase bytes_before_imm when decoding the third source,
16046 it has already been incremented by OP_E_memory while decoding
16047 the second source operand. */
16048 if (opnum == 0)
16049 {
02e647f9
SP
16050 switch (modrm.mod)
16051 {
16052 case 0:
16053 /* When modrm.rm == 6, there is a 2 byte displacement. */
16054 if (modrm.rm != 6)
16055 /* No displacement. */
16056 break;
1a0670f3 16057 /* Fall through. */
02e647f9
SP
16058 case 2:
16059 /* 2 byte displacement. */
16060 bytes_before_imm += 2;
16061 break;
16062 case 1:
16063 /* 1 byte displacement: when decoding the third source,
16064 don't increase bytes_before_imm as this has already
16065 been incremented by one in OP_E_memory while decoding
16066 the second source operand. */
16067 if (opnum == 0)
16068 bytes_before_imm++;
ccc5981b 16069
02e647f9
SP
16070 break;
16071 }
922d8de8
DR
16072 }
16073 }
16074 }
16075
16076 FETCH_DATA (the_info, codep + bytes_before_imm + 1);
16077 return codep [bytes_before_imm];
16078}
16079
16080static void
16081OP_EX_VexReg (int bytemode, int sizeflag, int reg)
16082{
b9733481
L
16083 const char **names;
16084
922d8de8
DR
16085 if (reg == -1 && modrm.mod != 3)
16086 {
16087 OP_E_memory (bytemode, sizeflag);
16088 return;
16089 }
16090 else
16091 {
16092 if (reg == -1)
16093 {
16094 reg = modrm.rm;
16095 USED_REX (REX_B);
16096 if (rex & REX_B)
16097 reg += 8;
16098 }
5f847646
JB
16099 if (address_mode != mode_64bit)
16100 reg &= 7;
922d8de8
DR
16101 }
16102
16103 switch (vex.length)
16104 {
16105 case 128:
b9733481 16106 names = names_xmm;
922d8de8
DR
16107 break;
16108 case 256:
b9733481 16109 names = names_ymm;
922d8de8
DR
16110 break;
16111 default:
16112 abort ();
16113 }
b9733481 16114 oappend (names[reg]);
922d8de8
DR
16115}
16116
a683cc34
SP
16117static void
16118OP_EX_VexImmW (int bytemode, int sizeflag)
16119{
16120 int reg = -1;
16121 static unsigned char vex_imm8;
16122
16123 if (vex_w_done == 0)
16124 {
16125 vex_w_done = 1;
16126
16127 /* Skip mod/rm byte. */
16128 MODRM_CHECK;
16129 codep++;
16130
16131 vex_imm8 = get_vex_imm8 (sizeflag, 0);
16132
16133 if (vex.w)
16134 reg = vex_imm8 >> 4;
16135
16136 OP_EX_VexReg (bytemode, sizeflag, reg);
16137 }
16138 else if (vex_w_done == 1)
16139 {
16140 vex_w_done = 2;
16141
16142 if (!vex.w)
16143 reg = vex_imm8 >> 4;
16144
16145 OP_EX_VexReg (bytemode, sizeflag, reg);
16146 }
16147 else
16148 {
16149 /* Output the imm8 directly. */
16150 scratchbuf[0] = '$';
16151 print_operand_value (scratchbuf + 1, 1, vex_imm8 & 0xf);
9ce09ba2 16152 oappend_maybe_intel (scratchbuf);
a683cc34
SP
16153 scratchbuf[0] = '\0';
16154 codep++;
16155 }
16156}
16157
5dd85c99
SP
16158static void
16159OP_Vex_2src (int bytemode, int sizeflag)
16160{
16161 if (modrm.mod == 3)
16162 {
b9733481 16163 int reg = modrm.rm;
5dd85c99 16164 USED_REX (REX_B);
b9733481
L
16165 if (rex & REX_B)
16166 reg += 8;
16167 oappend (names_xmm[reg]);
5dd85c99
SP
16168 }
16169 else
16170 {
16171 if (intel_syntax
16172 && (bytemode == v_mode || bytemode == v_swap_mode))
16173 {
16174 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
16175 used_prefixes |= (prefixes & PREFIX_DATA);
16176 }
16177 OP_E (bytemode, sizeflag);
16178 }
16179}
16180
16181static void
16182OP_Vex_2src_1 (int bytemode, int sizeflag)
16183{
16184 if (modrm.mod == 3)
16185 {
16186 /* Skip mod/rm byte. */
16187 MODRM_CHECK;
16188 codep++;
16189 }
16190
16191 if (vex.w)
5f847646
JB
16192 {
16193 unsigned int reg = vex.register_specifier;
16194
16195 if (address_mode != mode_64bit)
16196 reg &= 7;
16197 oappend (names_xmm[reg]);
16198 }
5dd85c99
SP
16199 else
16200 OP_Vex_2src (bytemode, sizeflag);
16201}
16202
16203static void
16204OP_Vex_2src_2 (int bytemode, int sizeflag)
16205{
16206 if (vex.w)
16207 OP_Vex_2src (bytemode, sizeflag);
16208 else
5f847646
JB
16209 {
16210 unsigned int reg = vex.register_specifier;
16211
16212 if (address_mode != mode_64bit)
16213 reg &= 7;
16214 oappend (names_xmm[reg]);
16215 }
5dd85c99
SP
16216}
16217
922d8de8
DR
16218static void
16219OP_EX_VexW (int bytemode, int sizeflag)
16220{
16221 int reg = -1;
16222
16223 if (!vex_w_done)
16224 {
41effecb
SP
16225 /* Skip mod/rm byte. */
16226 MODRM_CHECK;
16227 codep++;
16228
922d8de8 16229 if (vex.w)
ccc5981b 16230 reg = get_vex_imm8 (sizeflag, 0) >> 4;
922d8de8
DR
16231 }
16232 else
16233 {
16234 if (!vex.w)
ccc5981b 16235 reg = get_vex_imm8 (sizeflag, 1) >> 4;
922d8de8
DR
16236 }
16237
16238 OP_EX_VexReg (bytemode, sizeflag, reg);
922d8de8 16239
3a2430e0
JB
16240 if (vex_w_done)
16241 codep++;
16242 vex_w_done = 1;
922d8de8
DR
16243}
16244
c0f3af97
L
16245static void
16246OP_REG_VexI4 (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16247{
16248 int reg;
b9733481
L
16249 const char **names;
16250
c0f3af97
L
16251 FETCH_DATA (the_info, codep + 1);
16252 reg = *codep++;
16253
16254 if (bytemode != x_mode)
16255 abort ();
16256
c0f3af97 16257 reg >>= 4;
5f847646
JB
16258 if (address_mode != mode_64bit)
16259 reg &= 7;
dae39acc 16260
c0f3af97
L
16261 switch (vex.length)
16262 {
16263 case 128:
b9733481 16264 names = names_xmm;
c0f3af97
L
16265 break;
16266 case 256:
b9733481 16267 names = names_ymm;
c0f3af97
L
16268 break;
16269 default:
16270 abort ();
16271 }
b9733481 16272 oappend (names[reg]);
c0f3af97
L
16273}
16274
922d8de8
DR
16275static void
16276OP_XMM_VexW (int bytemode, int sizeflag)
16277{
16278 /* Turn off the REX.W bit since it is used for swapping operands
16279 now. */
16280 rex &= ~REX_W;
16281 OP_XMM (bytemode, sizeflag);
16282}
16283
c0f3af97
L
16284static void
16285OP_EX_Vex (int bytemode, int sizeflag)
16286{
16287 if (modrm.mod != 3)
16288 {
16289 if (vex.register_specifier != 0)
16290 BadOp ();
16291 need_vex_reg = 0;
16292 }
16293 OP_EX (bytemode, sizeflag);
16294}
16295
16296static void
16297OP_XMM_Vex (int bytemode, int sizeflag)
16298{
16299 if (modrm.mod != 3)
16300 {
16301 if (vex.register_specifier != 0)
16302 BadOp ();
16303 need_vex_reg = 0;
16304 }
16305 OP_XMM (bytemode, sizeflag);
16306}
16307
ea397f5b
L
16308static struct op vex_cmp_op[] =
16309{
16310 { STRING_COMMA_LEN ("eq") },
16311 { STRING_COMMA_LEN ("lt") },
16312 { STRING_COMMA_LEN ("le") },
16313 { STRING_COMMA_LEN ("unord") },
16314 { STRING_COMMA_LEN ("neq") },
16315 { STRING_COMMA_LEN ("nlt") },
16316 { STRING_COMMA_LEN ("nle") },
16317 { STRING_COMMA_LEN ("ord") },
16318 { STRING_COMMA_LEN ("eq_uq") },
16319 { STRING_COMMA_LEN ("nge") },
16320 { STRING_COMMA_LEN ("ngt") },
16321 { STRING_COMMA_LEN ("false") },
16322 { STRING_COMMA_LEN ("neq_oq") },
16323 { STRING_COMMA_LEN ("ge") },
16324 { STRING_COMMA_LEN ("gt") },
16325 { STRING_COMMA_LEN ("true") },
16326 { STRING_COMMA_LEN ("eq_os") },
16327 { STRING_COMMA_LEN ("lt_oq") },
16328 { STRING_COMMA_LEN ("le_oq") },
16329 { STRING_COMMA_LEN ("unord_s") },
16330 { STRING_COMMA_LEN ("neq_us") },
16331 { STRING_COMMA_LEN ("nlt_uq") },
16332 { STRING_COMMA_LEN ("nle_uq") },
16333 { STRING_COMMA_LEN ("ord_s") },
16334 { STRING_COMMA_LEN ("eq_us") },
16335 { STRING_COMMA_LEN ("nge_uq") },
16336 { STRING_COMMA_LEN ("ngt_uq") },
16337 { STRING_COMMA_LEN ("false_os") },
16338 { STRING_COMMA_LEN ("neq_os") },
16339 { STRING_COMMA_LEN ("ge_oq") },
16340 { STRING_COMMA_LEN ("gt_oq") },
16341 { STRING_COMMA_LEN ("true_us") },
c0f3af97
L
16342};
16343
16344static void
16345VCMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16346{
16347 unsigned int cmp_type;
16348
16349 FETCH_DATA (the_info, codep + 1);
16350 cmp_type = *codep++ & 0xff;
16351 if (cmp_type < ARRAY_SIZE (vex_cmp_op))
16352 {
16353 char suffix [3];
ea397f5b 16354 char *p = mnemonicendp - 2;
c0f3af97
L
16355 suffix[0] = p[0];
16356 suffix[1] = p[1];
16357 suffix[2] = '\0';
ea397f5b
L
16358 sprintf (p, "%s%s", vex_cmp_op[cmp_type].name, suffix);
16359 mnemonicendp += vex_cmp_op[cmp_type].len;
c0f3af97
L
16360 }
16361 else
16362 {
16363 /* We have a reserved extension byte. Output it directly. */
16364 scratchbuf[0] = '$';
16365 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 16366 oappend_maybe_intel (scratchbuf);
c0f3af97
L
16367 scratchbuf[0] = '\0';
16368 }
16369}
16370
43234a1e
L
16371static void
16372VPCMP_Fixup (int bytemode ATTRIBUTE_UNUSED,
16373 int sizeflag ATTRIBUTE_UNUSED)
16374{
16375 unsigned int cmp_type;
16376
16377 if (!vex.evex)
16378 abort ();
16379
16380 FETCH_DATA (the_info, codep + 1);
16381 cmp_type = *codep++ & 0xff;
16382 /* There are aliases for immediates 0, 1, 2, 4, 5, 6.
16383 If it's the case, print suffix, otherwise - print the immediate. */
16384 if (cmp_type < ARRAY_SIZE (simd_cmp_op)
16385 && cmp_type != 3
16386 && cmp_type != 7)
16387 {
16388 char suffix [3];
16389 char *p = mnemonicendp - 2;
16390
16391 /* vpcmp* can have both one- and two-lettered suffix. */
16392 if (p[0] == 'p')
16393 {
16394 p++;
16395 suffix[0] = p[0];
16396 suffix[1] = '\0';
16397 }
16398 else
16399 {
16400 suffix[0] = p[0];
16401 suffix[1] = p[1];
16402 suffix[2] = '\0';
16403 }
16404
16405 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
16406 mnemonicendp += simd_cmp_op[cmp_type].len;
16407 }
be92cb14
JB
16408 else
16409 {
16410 /* We have a reserved extension byte. Output it directly. */
16411 scratchbuf[0] = '$';
16412 print_operand_value (scratchbuf + 1, 1, cmp_type);
16413 oappend_maybe_intel (scratchbuf);
16414 scratchbuf[0] = '\0';
16415 }
16416}
16417
16418static const struct op xop_cmp_op[] =
16419{
16420 { STRING_COMMA_LEN ("lt") },
16421 { STRING_COMMA_LEN ("le") },
16422 { STRING_COMMA_LEN ("gt") },
16423 { STRING_COMMA_LEN ("ge") },
16424 { STRING_COMMA_LEN ("eq") },
16425 { STRING_COMMA_LEN ("neq") },
16426 { STRING_COMMA_LEN ("false") },
16427 { STRING_COMMA_LEN ("true") }
16428};
16429
16430static void
16431VPCOM_Fixup (int bytemode ATTRIBUTE_UNUSED,
16432 int sizeflag ATTRIBUTE_UNUSED)
16433{
16434 unsigned int cmp_type;
16435
16436 FETCH_DATA (the_info, codep + 1);
16437 cmp_type = *codep++ & 0xff;
16438 if (cmp_type < ARRAY_SIZE (xop_cmp_op))
16439 {
16440 char suffix[3];
16441 char *p = mnemonicendp - 2;
16442
16443 /* vpcom* can have both one- and two-lettered suffix. */
16444 if (p[0] == 'm')
16445 {
16446 p++;
16447 suffix[0] = p[0];
16448 suffix[1] = '\0';
16449 }
16450 else
16451 {
16452 suffix[0] = p[0];
16453 suffix[1] = p[1];
16454 suffix[2] = '\0';
16455 }
16456
16457 sprintf (p, "%s%s", xop_cmp_op[cmp_type].name, suffix);
16458 mnemonicendp += xop_cmp_op[cmp_type].len;
16459 }
43234a1e
L
16460 else
16461 {
16462 /* We have a reserved extension byte. Output it directly. */
16463 scratchbuf[0] = '$';
16464 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 16465 oappend_maybe_intel (scratchbuf);
43234a1e
L
16466 scratchbuf[0] = '\0';
16467 }
16468}
16469
ea397f5b
L
16470static const struct op pclmul_op[] =
16471{
16472 { STRING_COMMA_LEN ("lql") },
16473 { STRING_COMMA_LEN ("hql") },
16474 { STRING_COMMA_LEN ("lqh") },
16475 { STRING_COMMA_LEN ("hqh") }
c0f3af97
L
16476};
16477
16478static void
16479PCLMUL_Fixup (int bytemode ATTRIBUTE_UNUSED,
16480 int sizeflag ATTRIBUTE_UNUSED)
16481{
16482 unsigned int pclmul_type;
16483
16484 FETCH_DATA (the_info, codep + 1);
16485 pclmul_type = *codep++ & 0xff;
16486 switch (pclmul_type)
16487 {
16488 case 0x10:
16489 pclmul_type = 2;
16490 break;
16491 case 0x11:
16492 pclmul_type = 3;
16493 break;
16494 default:
16495 break;
7bb15c6f 16496 }
c0f3af97
L
16497 if (pclmul_type < ARRAY_SIZE (pclmul_op))
16498 {
16499 char suffix [4];
ea397f5b 16500 char *p = mnemonicendp - 3;
c0f3af97
L
16501 suffix[0] = p[0];
16502 suffix[1] = p[1];
16503 suffix[2] = p[2];
16504 suffix[3] = '\0';
ea397f5b
L
16505 sprintf (p, "%s%s", pclmul_op[pclmul_type].name, suffix);
16506 mnemonicendp += pclmul_op[pclmul_type].len;
c0f3af97
L
16507 }
16508 else
16509 {
16510 /* We have a reserved extension byte. Output it directly. */
16511 scratchbuf[0] = '$';
16512 print_operand_value (scratchbuf + 1, 1, pclmul_type);
9ce09ba2 16513 oappend_maybe_intel (scratchbuf);
c0f3af97
L
16514 scratchbuf[0] = '\0';
16515 }
16516}
16517
f1f8f695
L
16518static void
16519MOVBE_Fixup (int bytemode, int sizeflag)
16520{
16521 /* Add proper suffix to "movbe". */
ea397f5b 16522 char *p = mnemonicendp;
f1f8f695
L
16523
16524 switch (bytemode)
16525 {
16526 case v_mode:
16527 if (intel_syntax)
ea397f5b 16528 goto skip;
f1f8f695
L
16529
16530 USED_REX (REX_W);
16531 if (sizeflag & SUFFIX_ALWAYS)
16532 {
16533 if (rex & REX_W)
16534 *p++ = 'q';
f1f8f695 16535 else
f16cd0d5
L
16536 {
16537 if (sizeflag & DFLAG)
16538 *p++ = 'l';
16539 else
16540 *p++ = 'w';
16541 used_prefixes |= (prefixes & PREFIX_DATA);
16542 }
f1f8f695 16543 }
f1f8f695
L
16544 break;
16545 default:
16546 oappend (INTERNAL_DISASSEMBLER_ERROR);
16547 break;
16548 }
ea397f5b 16549 mnemonicendp = p;
f1f8f695
L
16550 *p = '\0';
16551
ea397f5b 16552skip:
f1f8f695
L
16553 OP_M (bytemode, sizeflag);
16554}
f88c9eb0
SP
16555
16556static void
16557OP_LWPCB_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16558{
16559 int reg;
16560 const char **names;
16561
16562 /* Skip mod/rm byte. */
16563 MODRM_CHECK;
16564 codep++;
16565
390a6789 16566 if (rex & REX_W)
f88c9eb0 16567 names = names64;
f88c9eb0 16568 else
ce7d077e 16569 names = names32;
f88c9eb0
SP
16570
16571 reg = modrm.rm;
16572 USED_REX (REX_B);
16573 if (rex & REX_B)
16574 reg += 8;
16575
16576 oappend (names[reg]);
16577}
16578
16579static void
16580OP_LWP_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16581{
16582 const char **names;
5f847646 16583 unsigned int reg = vex.register_specifier;
f88c9eb0 16584
390a6789 16585 if (rex & REX_W)
f88c9eb0 16586 names = names64;
f88c9eb0 16587 else
ce7d077e 16588 names = names32;
f88c9eb0 16589
5f847646
JB
16590 if (address_mode != mode_64bit)
16591 reg &= 7;
16592 oappend (names[reg]);
f88c9eb0 16593}
43234a1e
L
16594
16595static void
16596OP_Mask (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16597{
16598 if (!vex.evex
1ba585e8 16599 || (bytemode != mask_mode && bytemode != mask_bd_mode))
43234a1e
L
16600 abort ();
16601
16602 USED_REX (REX_R);
16603 if ((rex & REX_R) != 0 || !vex.r)
16604 {
16605 BadOp ();
16606 return;
16607 }
16608
16609 oappend (names_mask [modrm.reg]);
16610}
16611
16612static void
16613OP_Rounding (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16614{
16615 if (!vex.evex
16616 || (bytemode != evex_rounding_mode
70df6fc9 16617 && bytemode != evex_rounding_64_mode
43234a1e
L
16618 && bytemode != evex_sae_mode))
16619 abort ();
16620 if (modrm.mod == 3 && vex.b)
16621 switch (bytemode)
16622 {
70df6fc9
L
16623 case evex_rounding_64_mode:
16624 if (address_mode != mode_64bit)
16625 {
16626 oappend ("(bad)");
16627 break;
16628 }
16629 /* Fall through. */
43234a1e
L
16630 case evex_rounding_mode:
16631 oappend (names_rounding[vex.ll]);
16632 break;
16633 case evex_sae_mode:
16634 oappend ("{sae}");
16635 break;
16636 default:
16637 break;
16638 }
16639}
This page took 2.377753 seconds and 4 git commands to generate.