x86: Update disassembler for VexWIG
[deliverable/binutils-gdb.git] / opcodes / i386-dis.c
CommitLineData
252b5132 1/* Print i386 instructions for GDB, the GNU debugger.
219d1afa 2 Copyright (C) 1988-2018 Free Software Foundation, Inc.
252b5132 3
9b201bb5 4 This file is part of the GNU opcodes library.
20f0a1fc 5
9b201bb5 6 This library is free software; you can redistribute it and/or modify
20f0a1fc 7 it under the terms of the GNU General Public License as published by
9b201bb5
NC
8 the Free Software Foundation; either version 3, or (at your option)
9 any later version.
20f0a1fc 10
9b201bb5
NC
11 It is distributed in the hope that it will be useful, but WITHOUT
12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
14 License for more details.
20f0a1fc
NC
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
9b201bb5
NC
18 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
19 MA 02110-1301, USA. */
20
20f0a1fc
NC
21
22/* 80386 instruction printer by Pace Willisson (pace@prep.ai.mit.edu)
23 July 1988
24 modified by John Hassey (hassey@dg-rtp.dg.com)
25 x86-64 support added by Jan Hubicka (jh@suse.cz)
26 VIA PadLock support by Michal Ludvig (mludvig@suse.cz). */
27
28/* The main tables describing the instructions is essentially a copy
29 of the "Opcode Map" chapter (Appendix A) of the Intel 80386
30 Programmers Manual. Usually, there is a capital letter, followed
31 by a small letter. The capital letter tell the addressing mode,
32 and the small letter tells about the operand size. Refer to
33 the Intel manual for details. */
252b5132 34
252b5132 35#include "sysdep.h"
88c1242d 36#include "disassemble.h"
252b5132 37#include "opintl.h"
0b1cf022 38#include "opcode/i386.h"
85f10a01 39#include "libiberty.h"
252b5132
RH
40
41#include <setjmp.h>
42
26ca5450
AJ
43static int print_insn (bfd_vma, disassemble_info *);
44static void dofloat (int);
45static void OP_ST (int, int);
46static void OP_STi (int, int);
47static int putop (const char *, int);
48static void oappend (const char *);
49static void append_seg (void);
50static void OP_indirE (int, int);
51static void print_operand_value (char *, int, bfd_vma);
c0f3af97 52static void OP_E_register (int, int);
c1e679ec 53static void OP_E_memory (int, int);
5d669648 54static void print_displacement (char *, bfd_vma);
26ca5450
AJ
55static void OP_E (int, int);
56static void OP_G (int, int);
57static bfd_vma get64 (void);
58static bfd_signed_vma get32 (void);
59static bfd_signed_vma get32s (void);
60static int get16 (void);
61static void set_op (bfd_vma, int);
b844680a 62static void OP_Skip_MODRM (int, int);
26ca5450
AJ
63static void OP_REG (int, int);
64static void OP_IMREG (int, int);
65static void OP_I (int, int);
66static void OP_I64 (int, int);
67static void OP_sI (int, int);
68static void OP_J (int, int);
69static void OP_SEG (int, int);
70static void OP_DIR (int, int);
71static void OP_OFF (int, int);
72static void OP_OFF64 (int, int);
73static void ptr_reg (int, int);
74static void OP_ESreg (int, int);
75static void OP_DSreg (int, int);
76static void OP_C (int, int);
77static void OP_D (int, int);
78static void OP_T (int, int);
6f74c397 79static void OP_R (int, int);
26ca5450
AJ
80static void OP_MMX (int, int);
81static void OP_XMM (int, int);
82static void OP_EM (int, int);
83static void OP_EX (int, int);
4d9567e0
MM
84static void OP_EMC (int,int);
85static void OP_MXC (int,int);
26ca5450
AJ
86static void OP_MS (int, int);
87static void OP_XS (int, int);
cc0ec051 88static void OP_M (int, int);
c0f3af97
L
89static void OP_VEX (int, int);
90static void OP_EX_Vex (int, int);
922d8de8 91static void OP_EX_VexW (int, int);
a683cc34 92static void OP_EX_VexImmW (int, int);
c0f3af97 93static void OP_XMM_Vex (int, int);
922d8de8 94static void OP_XMM_VexW (int, int);
43234a1e 95static void OP_Rounding (int, int);
c0f3af97
L
96static void OP_REG_VexI4 (int, int);
97static void PCLMUL_Fixup (int, int);
c0f3af97 98static void VCMP_Fixup (int, int);
43234a1e 99static void VPCMP_Fixup (int, int);
be92cb14 100static void VPCOM_Fixup (int, int);
cc0ec051 101static void OP_0f07 (int, int);
b844680a
L
102static void OP_Monitor (int, int);
103static void OP_Mwait (int, int);
9916071f 104static void OP_Mwaitx (int, int);
46e883c5
L
105static void NOP_Fixup1 (int, int);
106static void NOP_Fixup2 (int, int);
26ca5450 107static void OP_3DNowSuffix (int, int);
ad19981d 108static void CMP_Fixup (int, int);
26ca5450 109static void BadOp (void);
35c52694 110static void REP_Fixup (int, int);
7e8b059b 111static void BND_Fixup (int, int);
04ef582a 112static void NOTRACK_Fixup (int, int);
42164a71
L
113static void HLE_Fixup1 (int, int);
114static void HLE_Fixup2 (int, int);
115static void HLE_Fixup3 (int, int);
f5804c90 116static void CMPXCHG8B_Fixup (int, int);
42903f7f 117static void XMM_Fixup (int, int);
381d071f 118static void CRC32_Fixup (int, int);
eacc9c89 119static void FXSAVE_Fixup (int, int);
15c7c1d8 120static void PCMPESTR_Fixup (int, int);
f88c9eb0
SP
121static void OP_LWPCB_E (int, int);
122static void OP_LWP_E (int, int);
5dd85c99
SP
123static void OP_Vex_2src_1 (int, int);
124static void OP_Vex_2src_2 (int, int);
c1e679ec 125
f1f8f695 126static void MOVBE_Fixup (int, int);
252b5132 127
43234a1e
L
128static void OP_Mask (int, int);
129
6608db57 130struct dis_private {
252b5132
RH
131 /* Points to first byte not fetched. */
132 bfd_byte *max_fetched;
0b1cf022 133 bfd_byte the_buffer[MAX_MNEM_SIZE];
252b5132 134 bfd_vma insn_start;
e396998b 135 int orig_sizeflag;
8df14d78 136 OPCODES_SIGJMP_BUF bailout;
252b5132
RH
137};
138
cb712a9e
L
139enum address_mode
140{
141 mode_16bit,
142 mode_32bit,
143 mode_64bit
144};
145
146enum address_mode address_mode;
52b15da3 147
5076851f
ILT
148/* Flags for the prefixes for the current instruction. See below. */
149static int prefixes;
150
52b15da3
JH
151/* REX prefix the current instruction. See below. */
152static int rex;
153/* Bits of REX we've already used. */
154static int rex_used;
d869730d 155/* REX bits in original REX prefix ignored. */
c0f3af97 156static int rex_ignored;
52b15da3
JH
157/* Mark parts used in the REX prefix. When we are testing for
158 empty prefix (for 8bit register REX extension), just mask it
159 out. Otherwise test for REX bit is excuse for existence of REX
160 only in case value is nonzero. */
161#define USED_REX(value) \
162 { \
163 if (value) \
161a04f6
L
164 { \
165 if ((rex & value)) \
166 rex_used |= (value) | REX_OPCODE; \
167 } \
52b15da3 168 else \
161a04f6 169 rex_used |= REX_OPCODE; \
52b15da3
JH
170 }
171
7d421014
ILT
172/* Flags for prefixes which we somehow handled when printing the
173 current instruction. */
174static int used_prefixes;
175
5076851f
ILT
176/* Flags stored in PREFIXES. */
177#define PREFIX_REPZ 1
178#define PREFIX_REPNZ 2
179#define PREFIX_LOCK 4
180#define PREFIX_CS 8
181#define PREFIX_SS 0x10
182#define PREFIX_DS 0x20
183#define PREFIX_ES 0x40
184#define PREFIX_FS 0x80
185#define PREFIX_GS 0x100
186#define PREFIX_DATA 0x200
187#define PREFIX_ADDR 0x400
188#define PREFIX_FWAIT 0x800
189
252b5132
RH
190/* Make sure that bytes from INFO->PRIVATE_DATA->BUFFER (inclusive)
191 to ADDR (exclusive) are valid. Returns 1 for success, longjmps
192 on error. */
193#define FETCH_DATA(info, addr) \
6608db57 194 ((addr) <= ((struct dis_private *) (info->private_data))->max_fetched \
252b5132
RH
195 ? 1 : fetch_data ((info), (addr)))
196
197static int
26ca5450 198fetch_data (struct disassemble_info *info, bfd_byte *addr)
252b5132
RH
199{
200 int status;
6608db57 201 struct dis_private *priv = (struct dis_private *) info->private_data;
252b5132
RH
202 bfd_vma start = priv->insn_start + (priv->max_fetched - priv->the_buffer);
203
0b1cf022 204 if (addr <= priv->the_buffer + MAX_MNEM_SIZE)
272c9217
JB
205 status = (*info->read_memory_func) (start,
206 priv->max_fetched,
207 addr - priv->max_fetched,
208 info);
209 else
210 status = -1;
252b5132
RH
211 if (status != 0)
212 {
7d421014 213 /* If we did manage to read at least one byte, then
db6eb5be
AM
214 print_insn_i386 will do something sensible. Otherwise, print
215 an error. We do that here because this is where we know
216 STATUS. */
7d421014 217 if (priv->max_fetched == priv->the_buffer)
5076851f 218 (*info->memory_error_func) (status, start, info);
8df14d78 219 OPCODES_SIGLONGJMP (priv->bailout, 1);
252b5132
RH
220 }
221 else
222 priv->max_fetched = addr;
223 return 1;
224}
225
bf890a93 226/* Possible values for prefix requirement. */
507bd325
L
227#define PREFIX_IGNORED_SHIFT 16
228#define PREFIX_IGNORED_REPZ (PREFIX_REPZ << PREFIX_IGNORED_SHIFT)
229#define PREFIX_IGNORED_REPNZ (PREFIX_REPNZ << PREFIX_IGNORED_SHIFT)
230#define PREFIX_IGNORED_DATA (PREFIX_DATA << PREFIX_IGNORED_SHIFT)
231#define PREFIX_IGNORED_ADDR (PREFIX_ADDR << PREFIX_IGNORED_SHIFT)
232#define PREFIX_IGNORED_LOCK (PREFIX_LOCK << PREFIX_IGNORED_SHIFT)
233
234/* Opcode prefixes. */
235#define PREFIX_OPCODE (PREFIX_REPZ \
236 | PREFIX_REPNZ \
237 | PREFIX_DATA)
238
239/* Prefixes ignored. */
240#define PREFIX_IGNORED (PREFIX_IGNORED_REPZ \
241 | PREFIX_IGNORED_REPNZ \
242 | PREFIX_IGNORED_DATA)
bf890a93 243
ce518a5f 244#define XX { NULL, 0 }
507bd325 245#define Bad_Opcode NULL, { { NULL, 0 } }, 0
ce518a5f
L
246
247#define Eb { OP_E, b_mode }
7e8b059b 248#define Ebnd { OP_E, bnd_mode }
b6169b20 249#define EbS { OP_E, b_swap_mode }
9f79e886 250#define EbndS { OP_E, bnd_swap_mode }
ce518a5f 251#define Ev { OP_E, v_mode }
de89d0a3 252#define Eva { OP_E, va_mode }
7e8b059b 253#define Ev_bnd { OP_E, v_bnd_mode }
b6169b20 254#define EvS { OP_E, v_swap_mode }
ce518a5f
L
255#define Ed { OP_E, d_mode }
256#define Edq { OP_E, dq_mode }
257#define Edqw { OP_E, dqw_mode }
42903f7f 258#define Edqb { OP_E, dqb_mode }
1ba585e8
IT
259#define Edb { OP_E, db_mode }
260#define Edw { OP_E, dw_mode }
42903f7f 261#define Edqd { OP_E, dqd_mode }
d20dee9e 262#define Edqa { OP_E, dqa_mode }
09335d05 263#define Eq { OP_E, q_mode }
07f5af7d 264#define indirEv { OP_indirE, indir_v_mode }
ce518a5f
L
265#define indirEp { OP_indirE, f_mode }
266#define stackEv { OP_E, stack_v_mode }
267#define Em { OP_E, m_mode }
268#define Ew { OP_E, w_mode }
269#define M { OP_M, 0 } /* lea, lgdt, etc. */
34b772a6 270#define Ma { OP_M, a_mode }
b844680a 271#define Mb { OP_M, b_mode }
d9a5e5e5 272#define Md { OP_M, d_mode }
f1f8f695 273#define Mo { OP_M, o_mode }
ce518a5f
L
274#define Mp { OP_M, f_mode } /* 32 or 48 bit memory operand for LDS, LES etc */
275#define Mq { OP_M, q_mode }
d276ec69 276#define Mv_bnd { OP_M, v_bndmk_mode }
4ee52178 277#define Mx { OP_M, x_mode }
c0f3af97 278#define Mxmm { OP_M, xmm_mode }
ce518a5f 279#define Gb { OP_G, b_mode }
7e8b059b 280#define Gbnd { OP_G, bnd_mode }
ce518a5f
L
281#define Gv { OP_G, v_mode }
282#define Gd { OP_G, d_mode }
283#define Gdq { OP_G, dq_mode }
284#define Gm { OP_G, m_mode }
c0a30a9f 285#define Gva { OP_G, va_mode }
ce518a5f 286#define Gw { OP_G, w_mode }
6f74c397 287#define Rd { OP_R, d_mode }
43234a1e 288#define Rdq { OP_R, dq_mode }
6f74c397 289#define Rm { OP_R, m_mode }
ce518a5f
L
290#define Ib { OP_I, b_mode }
291#define sIb { OP_sI, b_mode } /* sign extened byte */
e3949f17 292#define sIbT { OP_sI, b_T_mode } /* sign extened byte like 'T' */
ce518a5f 293#define Iv { OP_I, v_mode }
7bb15c6f 294#define sIv { OP_sI, v_mode }
ce518a5f
L
295#define Iq { OP_I, q_mode }
296#define Iv64 { OP_I64, v_mode }
297#define Iw { OP_I, w_mode }
298#define I1 { OP_I, const_1_mode }
299#define Jb { OP_J, b_mode }
300#define Jv { OP_J, v_mode }
301#define Cm { OP_C, m_mode }
302#define Dm { OP_D, m_mode }
303#define Td { OP_T, d_mode }
b844680a 304#define Skip_MODRM { OP_Skip_MODRM, 0 }
ce518a5f
L
305
306#define RMeAX { OP_REG, eAX_reg }
307#define RMeBX { OP_REG, eBX_reg }
308#define RMeCX { OP_REG, eCX_reg }
309#define RMeDX { OP_REG, eDX_reg }
310#define RMeSP { OP_REG, eSP_reg }
311#define RMeBP { OP_REG, eBP_reg }
312#define RMeSI { OP_REG, eSI_reg }
313#define RMeDI { OP_REG, eDI_reg }
314#define RMrAX { OP_REG, rAX_reg }
315#define RMrBX { OP_REG, rBX_reg }
316#define RMrCX { OP_REG, rCX_reg }
317#define RMrDX { OP_REG, rDX_reg }
318#define RMrSP { OP_REG, rSP_reg }
319#define RMrBP { OP_REG, rBP_reg }
320#define RMrSI { OP_REG, rSI_reg }
321#define RMrDI { OP_REG, rDI_reg }
322#define RMAL { OP_REG, al_reg }
ce518a5f
L
323#define RMCL { OP_REG, cl_reg }
324#define RMDL { OP_REG, dl_reg }
325#define RMBL { OP_REG, bl_reg }
326#define RMAH { OP_REG, ah_reg }
327#define RMCH { OP_REG, ch_reg }
328#define RMDH { OP_REG, dh_reg }
329#define RMBH { OP_REG, bh_reg }
330#define RMAX { OP_REG, ax_reg }
331#define RMDX { OP_REG, dx_reg }
332
333#define eAX { OP_IMREG, eAX_reg }
334#define eBX { OP_IMREG, eBX_reg }
335#define eCX { OP_IMREG, eCX_reg }
336#define eDX { OP_IMREG, eDX_reg }
337#define eSP { OP_IMREG, eSP_reg }
338#define eBP { OP_IMREG, eBP_reg }
339#define eSI { OP_IMREG, eSI_reg }
340#define eDI { OP_IMREG, eDI_reg }
341#define AL { OP_IMREG, al_reg }
342#define CL { OP_IMREG, cl_reg }
343#define DL { OP_IMREG, dl_reg }
344#define BL { OP_IMREG, bl_reg }
345#define AH { OP_IMREG, ah_reg }
346#define CH { OP_IMREG, ch_reg }
347#define DH { OP_IMREG, dh_reg }
348#define BH { OP_IMREG, bh_reg }
349#define AX { OP_IMREG, ax_reg }
350#define DX { OP_IMREG, dx_reg }
351#define zAX { OP_IMREG, z_mode_ax_reg }
352#define indirDX { OP_IMREG, indir_dx_reg }
353
354#define Sw { OP_SEG, w_mode }
355#define Sv { OP_SEG, v_mode }
356#define Ap { OP_DIR, 0 }
357#define Ob { OP_OFF64, b_mode }
358#define Ov { OP_OFF64, v_mode }
359#define Xb { OP_DSreg, eSI_reg }
360#define Xv { OP_DSreg, eSI_reg }
361#define Xz { OP_DSreg, eSI_reg }
362#define Yb { OP_ESreg, eDI_reg }
363#define Yv { OP_ESreg, eDI_reg }
364#define DSBX { OP_DSreg, eBX_reg }
365
366#define es { OP_REG, es_reg }
367#define ss { OP_REG, ss_reg }
368#define cs { OP_REG, cs_reg }
369#define ds { OP_REG, ds_reg }
370#define fs { OP_REG, fs_reg }
371#define gs { OP_REG, gs_reg }
372
373#define MX { OP_MMX, 0 }
374#define XM { OP_XMM, 0 }
539f890d 375#define XMScalar { OP_XMM, scalar_mode }
6c30d220 376#define XMGatherQ { OP_XMM, vex_vsib_q_w_dq_mode }
c0f3af97 377#define XMM { OP_XMM, xmm_mode }
43234a1e 378#define XMxmmq { OP_XMM, xmmq_mode }
ce518a5f 379#define EM { OP_EM, v_mode }
b6169b20 380#define EMS { OP_EM, v_swap_mode }
09a2c6cf 381#define EMd { OP_EM, d_mode }
14051056 382#define EMx { OP_EM, x_mode }
53467f57 383#define EXbScalar { OP_EX, b_scalar_mode }
8976381e 384#define EXw { OP_EX, w_mode }
53467f57 385#define EXwScalar { OP_EX, w_scalar_mode }
09a2c6cf 386#define EXd { OP_EX, d_mode }
539f890d 387#define EXdScalar { OP_EX, d_scalar_mode }
fa99fab2 388#define EXdS { OP_EX, d_swap_mode }
43234a1e 389#define EXdScalarS { OP_EX, d_scalar_swap_mode }
09a2c6cf 390#define EXq { OP_EX, q_mode }
539f890d
L
391#define EXqScalar { OP_EX, q_scalar_mode }
392#define EXqScalarS { OP_EX, q_scalar_swap_mode }
b6169b20 393#define EXqS { OP_EX, q_swap_mode }
09a2c6cf 394#define EXx { OP_EX, x_mode }
b6169b20 395#define EXxS { OP_EX, x_swap_mode }
c0f3af97 396#define EXxmm { OP_EX, xmm_mode }
43234a1e 397#define EXymm { OP_EX, ymm_mode }
c0f3af97 398#define EXxmmq { OP_EX, xmmq_mode }
43234a1e 399#define EXEvexHalfBcstXmmq { OP_EX, evex_half_bcst_xmmq_mode }
6c30d220
L
400#define EXxmm_mb { OP_EX, xmm_mb_mode }
401#define EXxmm_mw { OP_EX, xmm_mw_mode }
402#define EXxmm_md { OP_EX, xmm_md_mode }
403#define EXxmm_mq { OP_EX, xmm_mq_mode }
43234a1e 404#define EXxmm_mdq { OP_EX, xmm_mdq_mode }
6c30d220
L
405#define EXxmmdw { OP_EX, xmmdw_mode }
406#define EXxmmqd { OP_EX, xmmqd_mode }
c0f3af97 407#define EXymmq { OP_EX, ymmq_mode }
0bfee649 408#define EXVexWdq { OP_EX, vex_w_dq_mode }
1c480963 409#define EXVexWdqScalar { OP_EX, vex_scalar_w_dq_mode }
43234a1e
L
410#define EXEvexXGscat { OP_EX, evex_x_gscat_mode }
411#define EXEvexXNoBcst { OP_EX, evex_x_nobcst_mode }
ce518a5f
L
412#define MS { OP_MS, v_mode }
413#define XS { OP_XS, v_mode }
09335d05 414#define EMCq { OP_EMC, q_mode }
ce518a5f 415#define MXC { OP_MXC, 0 }
ce518a5f 416#define OPSUF { OP_3DNowSuffix, 0 }
ad19981d 417#define CMP { CMP_Fixup, 0 }
42903f7f 418#define XMM0 { XMM_Fixup, 0 }
eacc9c89 419#define FXSAVE { FXSAVE_Fixup, 0 }
5dd85c99
SP
420#define Vex_2src_1 { OP_Vex_2src_1, 0 }
421#define Vex_2src_2 { OP_Vex_2src_2, 0 }
252b5132 422
c0f3af97 423#define Vex { OP_VEX, vex_mode }
539f890d 424#define VexScalar { OP_VEX, vex_scalar_mode }
6c30d220 425#define VexGatherQ { OP_VEX, vex_vsib_q_w_dq_mode }
c0f3af97
L
426#define Vex128 { OP_VEX, vex128_mode }
427#define Vex256 { OP_VEX, vex256_mode }
cb21baef 428#define VexGdq { OP_VEX, dq_mode }
c0f3af97 429#define EXdVex { OP_EX_Vex, d_mode }
fa99fab2 430#define EXdVexS { OP_EX_Vex, d_swap_mode }
539f890d 431#define EXdVexScalarS { OP_EX_Vex, d_scalar_swap_mode }
c0f3af97 432#define EXqVex { OP_EX_Vex, q_mode }
fa99fab2 433#define EXqVexS { OP_EX_Vex, q_swap_mode }
539f890d 434#define EXqVexScalarS { OP_EX_Vex, q_scalar_swap_mode }
922d8de8
DR
435#define EXVexW { OP_EX_VexW, x_mode }
436#define EXdVexW { OP_EX_VexW, d_mode }
437#define EXqVexW { OP_EX_VexW, q_mode }
a683cc34 438#define EXVexImmW { OP_EX_VexImmW, x_mode }
c0f3af97 439#define XMVex { OP_XMM_Vex, 0 }
539f890d 440#define XMVexScalar { OP_XMM_Vex, scalar_mode }
922d8de8 441#define XMVexW { OP_XMM_VexW, 0 }
c0f3af97
L
442#define XMVexI4 { OP_REG_VexI4, x_mode }
443#define PCLMUL { PCLMUL_Fixup, 0 }
c0f3af97 444#define VCMP { VCMP_Fixup, 0 }
43234a1e 445#define VPCMP { VPCMP_Fixup, 0 }
be92cb14 446#define VPCOM { VPCOM_Fixup, 0 }
43234a1e
L
447
448#define EXxEVexR { OP_Rounding, evex_rounding_mode }
70df6fc9 449#define EXxEVexR64 { OP_Rounding, evex_rounding_64_mode }
43234a1e
L
450#define EXxEVexS { OP_Rounding, evex_sae_mode }
451
452#define XMask { OP_Mask, mask_mode }
453#define MaskG { OP_G, mask_mode }
454#define MaskE { OP_E, mask_mode }
1ba585e8 455#define MaskBDE { OP_E, mask_bd_mode }
43234a1e
L
456#define MaskR { OP_R, mask_mode }
457#define MaskVex { OP_VEX, mask_mode }
c0f3af97 458
6c30d220 459#define MVexVSIBDWpX { OP_M, vex_vsib_d_w_dq_mode }
5fc35d96 460#define MVexVSIBDQWpX { OP_M, vex_vsib_d_w_d_mode }
6c30d220 461#define MVexVSIBQWpX { OP_M, vex_vsib_q_w_dq_mode }
5fc35d96 462#define MVexVSIBQDWpX { OP_M, vex_vsib_q_w_d_mode }
6c30d220 463
35c52694 464/* Used handle "rep" prefix for string instructions. */
ce518a5f
L
465#define Xbr { REP_Fixup, eSI_reg }
466#define Xvr { REP_Fixup, eSI_reg }
467#define Ybr { REP_Fixup, eDI_reg }
468#define Yvr { REP_Fixup, eDI_reg }
469#define Yzr { REP_Fixup, eDI_reg }
470#define indirDXr { REP_Fixup, indir_dx_reg }
471#define ALr { REP_Fixup, al_reg }
472#define eAXr { REP_Fixup, eAX_reg }
473
42164a71
L
474/* Used handle HLE prefix for lockable instructions. */
475#define Ebh1 { HLE_Fixup1, b_mode }
476#define Evh1 { HLE_Fixup1, v_mode }
477#define Ebh2 { HLE_Fixup2, b_mode }
478#define Evh2 { HLE_Fixup2, v_mode }
479#define Ebh3 { HLE_Fixup3, b_mode }
480#define Evh3 { HLE_Fixup3, v_mode }
481
7e8b059b 482#define BND { BND_Fixup, 0 }
04ef582a 483#define NOTRACK { NOTRACK_Fixup, 0 }
7e8b059b 484
ce518a5f
L
485#define cond_jump_flag { NULL, cond_jump_mode }
486#define loop_jcxz_flag { NULL, loop_jcxz_mode }
3ffd33cf 487
252b5132 488/* bits in sizeflag */
252b5132 489#define SUFFIX_ALWAYS 4
252b5132
RH
490#define AFLAG 2
491#define DFLAG 1
492
51e7da1b
L
493enum
494{
495 /* byte operand */
496 b_mode = 1,
497 /* byte operand with operand swapped */
3873ba12 498 b_swap_mode,
e3949f17
L
499 /* byte operand, sign extend like 'T' suffix */
500 b_T_mode,
51e7da1b 501 /* operand size depends on prefixes */
3873ba12 502 v_mode,
51e7da1b 503 /* operand size depends on prefixes with operand swapped */
3873ba12 504 v_swap_mode,
de89d0a3
IT
505 /* operand size depends on address prefix */
506 va_mode,
51e7da1b 507 /* word operand */
3873ba12 508 w_mode,
51e7da1b 509 /* double word operand */
3873ba12 510 d_mode,
51e7da1b 511 /* double word operand with operand swapped */
3873ba12 512 d_swap_mode,
51e7da1b 513 /* quad word operand */
3873ba12 514 q_mode,
51e7da1b 515 /* quad word operand with operand swapped */
3873ba12 516 q_swap_mode,
51e7da1b 517 /* ten-byte operand */
3873ba12 518 t_mode,
43234a1e
L
519 /* 16-byte XMM, 32-byte YMM or 64-byte ZMM operand. In EVEX with
520 broadcast enabled. */
3873ba12 521 x_mode,
43234a1e
L
522 /* Similar to x_mode, but with different EVEX mem shifts. */
523 evex_x_gscat_mode,
524 /* Similar to x_mode, but with disabled broadcast. */
525 evex_x_nobcst_mode,
526 /* Similar to x_mode, but with operands swapped and disabled broadcast
527 in EVEX. */
3873ba12 528 x_swap_mode,
51e7da1b 529 /* 16-byte XMM operand */
3873ba12 530 xmm_mode,
43234a1e
L
531 /* XMM, XMM or YMM register operand, or quad word, xmmword or ymmword
532 memory operand (depending on vector length). Broadcast isn't
533 allowed. */
3873ba12 534 xmmq_mode,
43234a1e
L
535 /* Same as xmmq_mode, but broadcast is allowed. */
536 evex_half_bcst_xmmq_mode,
6c30d220
L
537 /* XMM register or byte memory operand */
538 xmm_mb_mode,
539 /* XMM register or word memory operand */
540 xmm_mw_mode,
541 /* XMM register or double word memory operand */
542 xmm_md_mode,
543 /* XMM register or quad word memory operand */
544 xmm_mq_mode,
43234a1e
L
545 /* XMM register or double/quad word memory operand, depending on
546 VEX.W. */
547 xmm_mdq_mode,
548 /* 16-byte XMM, word, double word or quad word operand. */
6c30d220 549 xmmdw_mode,
43234a1e 550 /* 16-byte XMM, double word, quad word operand or xmm word operand. */
6c30d220 551 xmmqd_mode,
43234a1e
L
552 /* 32-byte YMM operand */
553 ymm_mode,
554 /* quad word, ymmword or zmmword memory operand. */
3873ba12 555 ymmq_mode,
6c30d220
L
556 /* 32-byte YMM or 16-byte word operand */
557 ymmxmm_mode,
51e7da1b 558 /* d_mode in 32bit, q_mode in 64bit mode. */
3873ba12 559 m_mode,
51e7da1b 560 /* pair of v_mode operands */
3873ba12
L
561 a_mode,
562 cond_jump_mode,
563 loop_jcxz_mode,
7e8b059b 564 v_bnd_mode,
d276ec69
JB
565 /* like v_bnd_mode in 32bit, no RIP-rel in 64bit mode. */
566 v_bndmk_mode,
51e7da1b 567 /* operand size depends on REX prefixes. */
3873ba12 568 dq_mode,
51e7da1b 569 /* registers like dq_mode, memory like w_mode. */
3873ba12 570 dqw_mode,
9f79e886 571 /* bounds operand */
7e8b059b 572 bnd_mode,
9f79e886
JB
573 /* bounds operand with operand swapped */
574 bnd_swap_mode,
51e7da1b 575 /* 4- or 6-byte pointer operand */
3873ba12
L
576 f_mode,
577 const_1_mode,
07f5af7d
L
578 /* v_mode for indirect branch opcodes. */
579 indir_v_mode,
51e7da1b 580 /* v_mode for stack-related opcodes. */
3873ba12 581 stack_v_mode,
51e7da1b 582 /* non-quad operand size depends on prefixes */
3873ba12 583 z_mode,
51e7da1b 584 /* 16-byte operand */
3873ba12 585 o_mode,
51e7da1b 586 /* registers like dq_mode, memory like b_mode. */
3873ba12 587 dqb_mode,
1ba585e8
IT
588 /* registers like d_mode, memory like b_mode. */
589 db_mode,
590 /* registers like d_mode, memory like w_mode. */
591 dw_mode,
51e7da1b 592 /* registers like dq_mode, memory like d_mode. */
3873ba12 593 dqd_mode,
d20dee9e
L
594 /* operand size depends on the W bit as well as address mode. */
595 dqa_mode,
51e7da1b 596 /* normal vex mode */
3873ba12 597 vex_mode,
51e7da1b 598 /* 128bit vex mode */
3873ba12 599 vex128_mode,
51e7da1b 600 /* 256bit vex mode */
3873ba12 601 vex256_mode,
51e7da1b 602 /* operand size depends on the VEX.W bit. */
3873ba12 603 vex_w_dq_mode,
d55ee72f 604
6c30d220
L
605 /* Similar to vex_w_dq_mode, with VSIB dword indices. */
606 vex_vsib_d_w_dq_mode,
5fc35d96
IT
607 /* Similar to vex_vsib_d_w_dq_mode, with smaller memory. */
608 vex_vsib_d_w_d_mode,
6c30d220
L
609 /* Similar to vex_w_dq_mode, with VSIB qword indices. */
610 vex_vsib_q_w_dq_mode,
5fc35d96
IT
611 /* Similar to vex_vsib_q_w_dq_mode, with smaller memory. */
612 vex_vsib_q_w_d_mode,
6c30d220 613
539f890d
L
614 /* scalar, ignore vector length. */
615 scalar_mode,
53467f57
IT
616 /* like b_mode, ignore vector length. */
617 b_scalar_mode,
618 /* like w_mode, ignore vector length. */
619 w_scalar_mode,
539f890d
L
620 /* like d_mode, ignore vector length. */
621 d_scalar_mode,
622 /* like d_swap_mode, ignore vector length. */
623 d_scalar_swap_mode,
624 /* like q_mode, ignore vector length. */
625 q_scalar_mode,
626 /* like q_swap_mode, ignore vector length. */
627 q_scalar_swap_mode,
628 /* like vex_mode, ignore vector length. */
629 vex_scalar_mode,
1c480963
L
630 /* like vex_w_dq_mode, ignore vector length. */
631 vex_scalar_w_dq_mode,
539f890d 632
43234a1e
L
633 /* Static rounding. */
634 evex_rounding_mode,
70df6fc9
L
635 /* Static rounding, 64-bit mode only. */
636 evex_rounding_64_mode,
43234a1e
L
637 /* Supress all exceptions. */
638 evex_sae_mode,
639
640 /* Mask register operand. */
641 mask_mode,
1ba585e8
IT
642 /* Mask register operand. */
643 mask_bd_mode,
43234a1e 644
3873ba12
L
645 es_reg,
646 cs_reg,
647 ss_reg,
648 ds_reg,
649 fs_reg,
650 gs_reg,
d55ee72f 651
3873ba12
L
652 eAX_reg,
653 eCX_reg,
654 eDX_reg,
655 eBX_reg,
656 eSP_reg,
657 eBP_reg,
658 eSI_reg,
659 eDI_reg,
d55ee72f 660
3873ba12
L
661 al_reg,
662 cl_reg,
663 dl_reg,
664 bl_reg,
665 ah_reg,
666 ch_reg,
667 dh_reg,
668 bh_reg,
d55ee72f 669
3873ba12
L
670 ax_reg,
671 cx_reg,
672 dx_reg,
673 bx_reg,
674 sp_reg,
675 bp_reg,
676 si_reg,
677 di_reg,
d55ee72f 678
3873ba12
L
679 rAX_reg,
680 rCX_reg,
681 rDX_reg,
682 rBX_reg,
683 rSP_reg,
684 rBP_reg,
685 rSI_reg,
686 rDI_reg,
d55ee72f 687
3873ba12
L
688 z_mode_ax_reg,
689 indir_dx_reg
51e7da1b 690};
252b5132 691
51e7da1b
L
692enum
693{
694 FLOATCODE = 1,
3873ba12
L
695 USE_REG_TABLE,
696 USE_MOD_TABLE,
697 USE_RM_TABLE,
698 USE_PREFIX_TABLE,
699 USE_X86_64_TABLE,
700 USE_3BYTE_TABLE,
f88c9eb0 701 USE_XOP_8F_TABLE,
3873ba12
L
702 USE_VEX_C4_TABLE,
703 USE_VEX_C5_TABLE,
9e30b8e0 704 USE_VEX_LEN_TABLE,
43234a1e
L
705 USE_VEX_W_TABLE,
706 USE_EVEX_TABLE
51e7da1b 707};
6439fc28 708
bf890a93 709#define FLOAT NULL, { { NULL, FLOATCODE } }, 0
4efba78c 710
bf890a93
IT
711#define DIS386(T, I) NULL, { { NULL, (T)}, { NULL, (I) } }, 0
712#define DIS386_PREFIX(T, I, P) NULL, { { NULL, (T)}, { NULL, (I) } }, P
1ceb70f8
L
713#define REG_TABLE(I) DIS386 (USE_REG_TABLE, (I))
714#define MOD_TABLE(I) DIS386 (USE_MOD_TABLE, (I))
715#define RM_TABLE(I) DIS386 (USE_RM_TABLE, (I))
716#define PREFIX_TABLE(I) DIS386 (USE_PREFIX_TABLE, (I))
4e7d34a6
L
717#define X86_64_TABLE(I) DIS386 (USE_X86_64_TABLE, (I))
718#define THREE_BYTE_TABLE(I) DIS386 (USE_3BYTE_TABLE, (I))
bf890a93 719#define THREE_BYTE_TABLE_PREFIX(I, P) DIS386_PREFIX (USE_3BYTE_TABLE, (I), P)
f88c9eb0 720#define XOP_8F_TABLE(I) DIS386 (USE_XOP_8F_TABLE, (I))
c0f3af97
L
721#define VEX_C4_TABLE(I) DIS386 (USE_VEX_C4_TABLE, (I))
722#define VEX_C5_TABLE(I) DIS386 (USE_VEX_C5_TABLE, (I))
723#define VEX_LEN_TABLE(I) DIS386 (USE_VEX_LEN_TABLE, (I))
9e30b8e0 724#define VEX_W_TABLE(I) DIS386 (USE_VEX_W_TABLE, (I))
43234a1e 725#define EVEX_TABLE(I) DIS386 (USE_EVEX_TABLE, (I))
1ceb70f8 726
51e7da1b
L
727enum
728{
729 REG_80 = 0,
3873ba12 730 REG_81,
7148c369 731 REG_83,
3873ba12
L
732 REG_8F,
733 REG_C0,
734 REG_C1,
735 REG_C6,
736 REG_C7,
737 REG_D0,
738 REG_D1,
739 REG_D2,
740 REG_D3,
741 REG_F6,
742 REG_F7,
743 REG_FE,
744 REG_FF,
745 REG_0F00,
746 REG_0F01,
747 REG_0F0D,
748 REG_0F18,
c48935d7 749 REG_0F1C_MOD_0,
603555e5 750 REG_0F1E_MOD_3,
3873ba12
L
751 REG_0F71,
752 REG_0F72,
753 REG_0F73,
754 REG_0FA6,
755 REG_0FA7,
756 REG_0FAE,
757 REG_0FBA,
758 REG_0FC7,
592a252b
L
759 REG_VEX_0F71,
760 REG_VEX_0F72,
761 REG_VEX_0F73,
762 REG_VEX_0FAE,
f12dc422 763 REG_VEX_0F38F3,
f88c9eb0 764 REG_XOP_LWPCB,
2a2a0f38
QN
765 REG_XOP_LWP,
766 REG_XOP_TBM_01,
43234a1e
L
767 REG_XOP_TBM_02,
768
1ba585e8 769 REG_EVEX_0F71,
43234a1e
L
770 REG_EVEX_0F72,
771 REG_EVEX_0F73,
772 REG_EVEX_0F38C6,
773 REG_EVEX_0F38C7
51e7da1b 774};
1ceb70f8 775
51e7da1b
L
776enum
777{
778 MOD_8D = 0,
42164a71
L
779 MOD_C6_REG_7,
780 MOD_C7_REG_7,
4a357820
MZ
781 MOD_FF_REG_3,
782 MOD_FF_REG_5,
3873ba12
L
783 MOD_0F01_REG_0,
784 MOD_0F01_REG_1,
785 MOD_0F01_REG_2,
786 MOD_0F01_REG_3,
8eab4136 787 MOD_0F01_REG_5,
3873ba12
L
788 MOD_0F01_REG_7,
789 MOD_0F12_PREFIX_0,
790 MOD_0F13,
791 MOD_0F16_PREFIX_0,
792 MOD_0F17,
793 MOD_0F18_REG_0,
794 MOD_0F18_REG_1,
795 MOD_0F18_REG_2,
796 MOD_0F18_REG_3,
d7189fa5
RM
797 MOD_0F18_REG_4,
798 MOD_0F18_REG_5,
799 MOD_0F18_REG_6,
800 MOD_0F18_REG_7,
7e8b059b
L
801 MOD_0F1A_PREFIX_0,
802 MOD_0F1B_PREFIX_0,
803 MOD_0F1B_PREFIX_1,
c48935d7 804 MOD_0F1C_PREFIX_0,
603555e5 805 MOD_0F1E_PREFIX_1,
3873ba12
L
806 MOD_0F24,
807 MOD_0F26,
808 MOD_0F2B_PREFIX_0,
809 MOD_0F2B_PREFIX_1,
810 MOD_0F2B_PREFIX_2,
811 MOD_0F2B_PREFIX_3,
812 MOD_0F51,
813 MOD_0F71_REG_2,
814 MOD_0F71_REG_4,
815 MOD_0F71_REG_6,
816 MOD_0F72_REG_2,
817 MOD_0F72_REG_4,
818 MOD_0F72_REG_6,
819 MOD_0F73_REG_2,
820 MOD_0F73_REG_3,
821 MOD_0F73_REG_6,
822 MOD_0F73_REG_7,
823 MOD_0FAE_REG_0,
824 MOD_0FAE_REG_1,
825 MOD_0FAE_REG_2,
826 MOD_0FAE_REG_3,
827 MOD_0FAE_REG_4,
828 MOD_0FAE_REG_5,
829 MOD_0FAE_REG_6,
830 MOD_0FAE_REG_7,
831 MOD_0FB2,
832 MOD_0FB4,
833 MOD_0FB5,
a8484f96 834 MOD_0FC3,
963f3586
IT
835 MOD_0FC7_REG_3,
836 MOD_0FC7_REG_4,
837 MOD_0FC7_REG_5,
3873ba12
L
838 MOD_0FC7_REG_6,
839 MOD_0FC7_REG_7,
840 MOD_0FD7,
841 MOD_0FE7_PREFIX_2,
842 MOD_0FF0_PREFIX_3,
843 MOD_0F382A_PREFIX_2,
603555e5
L
844 MOD_0F38F5_PREFIX_2,
845 MOD_0F38F6_PREFIX_0,
c0a30a9f
L
846 MOD_0F38F8_PREFIX_2,
847 MOD_0F38F9_PREFIX_0,
3873ba12
L
848 MOD_62_32BIT,
849 MOD_C4_32BIT,
850 MOD_C5_32BIT,
592a252b
L
851 MOD_VEX_0F12_PREFIX_0,
852 MOD_VEX_0F13,
853 MOD_VEX_0F16_PREFIX_0,
854 MOD_VEX_0F17,
855 MOD_VEX_0F2B,
ab4e4ed5
AF
856 MOD_VEX_W_0_0F41_P_0_LEN_1,
857 MOD_VEX_W_1_0F41_P_0_LEN_1,
858 MOD_VEX_W_0_0F41_P_2_LEN_1,
859 MOD_VEX_W_1_0F41_P_2_LEN_1,
860 MOD_VEX_W_0_0F42_P_0_LEN_1,
861 MOD_VEX_W_1_0F42_P_0_LEN_1,
862 MOD_VEX_W_0_0F42_P_2_LEN_1,
863 MOD_VEX_W_1_0F42_P_2_LEN_1,
864 MOD_VEX_W_0_0F44_P_0_LEN_1,
865 MOD_VEX_W_1_0F44_P_0_LEN_1,
866 MOD_VEX_W_0_0F44_P_2_LEN_1,
867 MOD_VEX_W_1_0F44_P_2_LEN_1,
868 MOD_VEX_W_0_0F45_P_0_LEN_1,
869 MOD_VEX_W_1_0F45_P_0_LEN_1,
870 MOD_VEX_W_0_0F45_P_2_LEN_1,
871 MOD_VEX_W_1_0F45_P_2_LEN_1,
872 MOD_VEX_W_0_0F46_P_0_LEN_1,
873 MOD_VEX_W_1_0F46_P_0_LEN_1,
874 MOD_VEX_W_0_0F46_P_2_LEN_1,
875 MOD_VEX_W_1_0F46_P_2_LEN_1,
876 MOD_VEX_W_0_0F47_P_0_LEN_1,
877 MOD_VEX_W_1_0F47_P_0_LEN_1,
878 MOD_VEX_W_0_0F47_P_2_LEN_1,
879 MOD_VEX_W_1_0F47_P_2_LEN_1,
880 MOD_VEX_W_0_0F4A_P_0_LEN_1,
881 MOD_VEX_W_1_0F4A_P_0_LEN_1,
882 MOD_VEX_W_0_0F4A_P_2_LEN_1,
883 MOD_VEX_W_1_0F4A_P_2_LEN_1,
884 MOD_VEX_W_0_0F4B_P_0_LEN_1,
885 MOD_VEX_W_1_0F4B_P_0_LEN_1,
886 MOD_VEX_W_0_0F4B_P_2_LEN_1,
592a252b
L
887 MOD_VEX_0F50,
888 MOD_VEX_0F71_REG_2,
889 MOD_VEX_0F71_REG_4,
890 MOD_VEX_0F71_REG_6,
891 MOD_VEX_0F72_REG_2,
892 MOD_VEX_0F72_REG_4,
893 MOD_VEX_0F72_REG_6,
894 MOD_VEX_0F73_REG_2,
895 MOD_VEX_0F73_REG_3,
896 MOD_VEX_0F73_REG_6,
897 MOD_VEX_0F73_REG_7,
ab4e4ed5
AF
898 MOD_VEX_W_0_0F91_P_0_LEN_0,
899 MOD_VEX_W_1_0F91_P_0_LEN_0,
900 MOD_VEX_W_0_0F91_P_2_LEN_0,
901 MOD_VEX_W_1_0F91_P_2_LEN_0,
902 MOD_VEX_W_0_0F92_P_0_LEN_0,
903 MOD_VEX_W_0_0F92_P_2_LEN_0,
904 MOD_VEX_W_0_0F92_P_3_LEN_0,
905 MOD_VEX_W_1_0F92_P_3_LEN_0,
906 MOD_VEX_W_0_0F93_P_0_LEN_0,
907 MOD_VEX_W_0_0F93_P_2_LEN_0,
908 MOD_VEX_W_0_0F93_P_3_LEN_0,
909 MOD_VEX_W_1_0F93_P_3_LEN_0,
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
9e30b8e0
L
1932enum
1933{
ec6f095a 1934 VEX_W_0F41_P_0_LEN_1 = 0,
1ba585e8 1935 VEX_W_0F41_P_2_LEN_1,
43234a1e 1936 VEX_W_0F42_P_0_LEN_1,
1ba585e8 1937 VEX_W_0F42_P_2_LEN_1,
43234a1e 1938 VEX_W_0F44_P_0_LEN_0,
1ba585e8 1939 VEX_W_0F44_P_2_LEN_0,
43234a1e 1940 VEX_W_0F45_P_0_LEN_1,
1ba585e8 1941 VEX_W_0F45_P_2_LEN_1,
43234a1e 1942 VEX_W_0F46_P_0_LEN_1,
1ba585e8 1943 VEX_W_0F46_P_2_LEN_1,
43234a1e 1944 VEX_W_0F47_P_0_LEN_1,
1ba585e8
IT
1945 VEX_W_0F47_P_2_LEN_1,
1946 VEX_W_0F4A_P_0_LEN_1,
1947 VEX_W_0F4A_P_2_LEN_1,
1948 VEX_W_0F4B_P_0_LEN_1,
43234a1e 1949 VEX_W_0F4B_P_2_LEN_1,
43234a1e 1950 VEX_W_0F90_P_0_LEN_0,
1ba585e8 1951 VEX_W_0F90_P_2_LEN_0,
43234a1e 1952 VEX_W_0F91_P_0_LEN_0,
1ba585e8 1953 VEX_W_0F91_P_2_LEN_0,
43234a1e 1954 VEX_W_0F92_P_0_LEN_0,
90a915bf 1955 VEX_W_0F92_P_2_LEN_0,
1ba585e8 1956 VEX_W_0F92_P_3_LEN_0,
43234a1e 1957 VEX_W_0F93_P_0_LEN_0,
90a915bf 1958 VEX_W_0F93_P_2_LEN_0,
1ba585e8 1959 VEX_W_0F93_P_3_LEN_0,
43234a1e 1960 VEX_W_0F98_P_0_LEN_0,
1ba585e8
IT
1961 VEX_W_0F98_P_2_LEN_0,
1962 VEX_W_0F99_P_0_LEN_0,
1963 VEX_W_0F99_P_2_LEN_0,
592a252b
L
1964 VEX_W_0FC4_P_2,
1965 VEX_W_0FC5_P_2,
592a252b
L
1966 VEX_W_0F380C_P_2,
1967 VEX_W_0F380D_P_2,
1968 VEX_W_0F380E_P_2,
1969 VEX_W_0F380F_P_2,
6c30d220 1970 VEX_W_0F3816_P_2,
6c30d220
L
1971 VEX_W_0F3818_P_2,
1972 VEX_W_0F3819_P_2,
592a252b 1973 VEX_W_0F381A_P_2_M_0,
592a252b
L
1974 VEX_W_0F382C_P_2_M_0,
1975 VEX_W_0F382D_P_2_M_0,
1976 VEX_W_0F382E_P_2_M_0,
1977 VEX_W_0F382F_P_2_M_0,
6c30d220 1978 VEX_W_0F3836_P_2,
6c30d220
L
1979 VEX_W_0F3846_P_2,
1980 VEX_W_0F3858_P_2,
1981 VEX_W_0F3859_P_2,
1982 VEX_W_0F385A_P_2_M_0,
1983 VEX_W_0F3878_P_2,
1984 VEX_W_0F3879_P_2,
48521003 1985 VEX_W_0F38CF_P_2,
6c30d220
L
1986 VEX_W_0F3A00_P_2,
1987 VEX_W_0F3A01_P_2,
1988 VEX_W_0F3A02_P_2,
592a252b
L
1989 VEX_W_0F3A04_P_2,
1990 VEX_W_0F3A05_P_2,
1991 VEX_W_0F3A06_P_2,
592a252b
L
1992 VEX_W_0F3A14_P_2,
1993 VEX_W_0F3A15_P_2,
1994 VEX_W_0F3A18_P_2,
1995 VEX_W_0F3A19_P_2,
1996 VEX_W_0F3A20_P_2,
43234a1e 1997 VEX_W_0F3A30_P_2_LEN_0,
1ba585e8 1998 VEX_W_0F3A31_P_2_LEN_0,
43234a1e 1999 VEX_W_0F3A32_P_2_LEN_0,
1ba585e8 2000 VEX_W_0F3A33_P_2_LEN_0,
6c30d220
L
2001 VEX_W_0F3A38_P_2,
2002 VEX_W_0F3A39_P_2,
6c30d220 2003 VEX_W_0F3A46_P_2,
592a252b
L
2004 VEX_W_0F3A48_P_2,
2005 VEX_W_0F3A49_P_2,
2006 VEX_W_0F3A4A_P_2,
2007 VEX_W_0F3A4B_P_2,
2008 VEX_W_0F3A4C_P_2,
48521003
IT
2009 VEX_W_0F3ACE_P_2,
2010 VEX_W_0F3ACF_P_2,
43234a1e
L
2011
2012 EVEX_W_0F10_P_0,
2013 EVEX_W_0F10_P_1_M_0,
2014 EVEX_W_0F10_P_1_M_1,
2015 EVEX_W_0F10_P_2,
2016 EVEX_W_0F10_P_3_M_0,
2017 EVEX_W_0F10_P_3_M_1,
2018 EVEX_W_0F11_P_0,
2019 EVEX_W_0F11_P_1_M_0,
2020 EVEX_W_0F11_P_1_M_1,
2021 EVEX_W_0F11_P_2,
2022 EVEX_W_0F11_P_3_M_0,
2023 EVEX_W_0F11_P_3_M_1,
2024 EVEX_W_0F12_P_0_M_0,
2025 EVEX_W_0F12_P_0_M_1,
2026 EVEX_W_0F12_P_1,
2027 EVEX_W_0F12_P_2,
2028 EVEX_W_0F12_P_3,
2029 EVEX_W_0F13_P_0,
2030 EVEX_W_0F13_P_2,
2031 EVEX_W_0F14_P_0,
2032 EVEX_W_0F14_P_2,
2033 EVEX_W_0F15_P_0,
2034 EVEX_W_0F15_P_2,
2035 EVEX_W_0F16_P_0_M_0,
2036 EVEX_W_0F16_P_0_M_1,
2037 EVEX_W_0F16_P_1,
2038 EVEX_W_0F16_P_2,
2039 EVEX_W_0F17_P_0,
2040 EVEX_W_0F17_P_2,
2041 EVEX_W_0F28_P_0,
2042 EVEX_W_0F28_P_2,
2043 EVEX_W_0F29_P_0,
2044 EVEX_W_0F29_P_2,
2045 EVEX_W_0F2A_P_1,
2046 EVEX_W_0F2A_P_3,
2047 EVEX_W_0F2B_P_0,
2048 EVEX_W_0F2B_P_2,
2049 EVEX_W_0F2E_P_0,
2050 EVEX_W_0F2E_P_2,
2051 EVEX_W_0F2F_P_0,
2052 EVEX_W_0F2F_P_2,
2053 EVEX_W_0F51_P_0,
2054 EVEX_W_0F51_P_1,
2055 EVEX_W_0F51_P_2,
2056 EVEX_W_0F51_P_3,
90a915bf
IT
2057 EVEX_W_0F54_P_0,
2058 EVEX_W_0F54_P_2,
2059 EVEX_W_0F55_P_0,
2060 EVEX_W_0F55_P_2,
2061 EVEX_W_0F56_P_0,
2062 EVEX_W_0F56_P_2,
2063 EVEX_W_0F57_P_0,
2064 EVEX_W_0F57_P_2,
43234a1e
L
2065 EVEX_W_0F58_P_0,
2066 EVEX_W_0F58_P_1,
2067 EVEX_W_0F58_P_2,
2068 EVEX_W_0F58_P_3,
2069 EVEX_W_0F59_P_0,
2070 EVEX_W_0F59_P_1,
2071 EVEX_W_0F59_P_2,
2072 EVEX_W_0F59_P_3,
2073 EVEX_W_0F5A_P_0,
2074 EVEX_W_0F5A_P_1,
2075 EVEX_W_0F5A_P_2,
2076 EVEX_W_0F5A_P_3,
2077 EVEX_W_0F5B_P_0,
2078 EVEX_W_0F5B_P_1,
2079 EVEX_W_0F5B_P_2,
2080 EVEX_W_0F5C_P_0,
2081 EVEX_W_0F5C_P_1,
2082 EVEX_W_0F5C_P_2,
2083 EVEX_W_0F5C_P_3,
2084 EVEX_W_0F5D_P_0,
2085 EVEX_W_0F5D_P_1,
2086 EVEX_W_0F5D_P_2,
2087 EVEX_W_0F5D_P_3,
2088 EVEX_W_0F5E_P_0,
2089 EVEX_W_0F5E_P_1,
2090 EVEX_W_0F5E_P_2,
2091 EVEX_W_0F5E_P_3,
2092 EVEX_W_0F5F_P_0,
2093 EVEX_W_0F5F_P_1,
2094 EVEX_W_0F5F_P_2,
2095 EVEX_W_0F5F_P_3,
2096 EVEX_W_0F62_P_2,
2097 EVEX_W_0F66_P_2,
2098 EVEX_W_0F6A_P_2,
1ba585e8 2099 EVEX_W_0F6B_P_2,
43234a1e
L
2100 EVEX_W_0F6C_P_2,
2101 EVEX_W_0F6D_P_2,
2102 EVEX_W_0F6E_P_2,
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,
2123 EVEX_W_0F7E_P_2,
2124 EVEX_W_0F7F_P_1,
2125 EVEX_W_0F7F_P_2,
1ba585e8 2126 EVEX_W_0F7F_P_3,
43234a1e
L
2127 EVEX_W_0FC2_P_0,
2128 EVEX_W_0FC2_P_1,
2129 EVEX_W_0FC2_P_2,
2130 EVEX_W_0FC2_P_3,
2131 EVEX_W_0FC6_P_0,
2132 EVEX_W_0FC6_P_2,
2133 EVEX_W_0FD2_P_2,
2134 EVEX_W_0FD3_P_2,
2135 EVEX_W_0FD4_P_2,
2136 EVEX_W_0FD6_P_2,
2137 EVEX_W_0FE6_P_1,
2138 EVEX_W_0FE6_P_2,
2139 EVEX_W_0FE6_P_3,
2140 EVEX_W_0FE7_P_2,
2141 EVEX_W_0FF2_P_2,
2142 EVEX_W_0FF3_P_2,
2143 EVEX_W_0FF4_P_2,
2144 EVEX_W_0FFA_P_2,
2145 EVEX_W_0FFB_P_2,
2146 EVEX_W_0FFE_P_2,
2147 EVEX_W_0F380C_P_2,
2148 EVEX_W_0F380D_P_2,
1ba585e8
IT
2149 EVEX_W_0F3810_P_1,
2150 EVEX_W_0F3810_P_2,
43234a1e 2151 EVEX_W_0F3811_P_1,
1ba585e8 2152 EVEX_W_0F3811_P_2,
43234a1e 2153 EVEX_W_0F3812_P_1,
1ba585e8 2154 EVEX_W_0F3812_P_2,
43234a1e
L
2155 EVEX_W_0F3813_P_1,
2156 EVEX_W_0F3813_P_2,
2157 EVEX_W_0F3814_P_1,
2158 EVEX_W_0F3815_P_1,
2159 EVEX_W_0F3818_P_2,
2160 EVEX_W_0F3819_P_2,
2161 EVEX_W_0F381A_P_2,
2162 EVEX_W_0F381B_P_2,
2163 EVEX_W_0F381E_P_2,
2164 EVEX_W_0F381F_P_2,
1ba585e8 2165 EVEX_W_0F3820_P_1,
43234a1e
L
2166 EVEX_W_0F3821_P_1,
2167 EVEX_W_0F3822_P_1,
2168 EVEX_W_0F3823_P_1,
2169 EVEX_W_0F3824_P_1,
2170 EVEX_W_0F3825_P_1,
2171 EVEX_W_0F3825_P_2,
1ba585e8
IT
2172 EVEX_W_0F3826_P_1,
2173 EVEX_W_0F3826_P_2,
2174 EVEX_W_0F3828_P_1,
43234a1e 2175 EVEX_W_0F3828_P_2,
1ba585e8 2176 EVEX_W_0F3829_P_1,
43234a1e
L
2177 EVEX_W_0F3829_P_2,
2178 EVEX_W_0F382A_P_1,
2179 EVEX_W_0F382A_P_2,
1ba585e8
IT
2180 EVEX_W_0F382B_P_2,
2181 EVEX_W_0F3830_P_1,
43234a1e
L
2182 EVEX_W_0F3831_P_1,
2183 EVEX_W_0F3832_P_1,
2184 EVEX_W_0F3833_P_1,
2185 EVEX_W_0F3834_P_1,
2186 EVEX_W_0F3835_P_1,
2187 EVEX_W_0F3835_P_2,
2188 EVEX_W_0F3837_P_2,
90a915bf
IT
2189 EVEX_W_0F3838_P_1,
2190 EVEX_W_0F3839_P_1,
43234a1e
L
2191 EVEX_W_0F383A_P_1,
2192 EVEX_W_0F3840_P_2,
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,
2204 EVEX_W_0F3872_P_2,
2205 EVEX_W_0F3873_P_2,
1ba585e8
IT
2206 EVEX_W_0F3875_P_2,
2207 EVEX_W_0F3878_P_2,
2208 EVEX_W_0F3879_P_2,
2209 EVEX_W_0F387A_P_2,
2210 EVEX_W_0F387B_P_2,
2211 EVEX_W_0F387D_P_2,
14f195c9 2212 EVEX_W_0F3883_P_2,
1ba585e8 2213 EVEX_W_0F388D_P_2,
43234a1e
L
2214 EVEX_W_0F3891_P_2,
2215 EVEX_W_0F3893_P_2,
2216 EVEX_W_0F38A1_P_2,
2217 EVEX_W_0F38A3_P_2,
2218 EVEX_W_0F38C7_R_1_P_2,
2219 EVEX_W_0F38C7_R_2_P_2,
2220 EVEX_W_0F38C7_R_5_P_2,
2221 EVEX_W_0F38C7_R_6_P_2,
2222
2223 EVEX_W_0F3A00_P_2,
2224 EVEX_W_0F3A01_P_2,
2225 EVEX_W_0F3A04_P_2,
2226 EVEX_W_0F3A05_P_2,
2227 EVEX_W_0F3A08_P_2,
2228 EVEX_W_0F3A09_P_2,
2229 EVEX_W_0F3A0A_P_2,
2230 EVEX_W_0F3A0B_P_2,
90a915bf 2231 EVEX_W_0F3A16_P_2,
43234a1e
L
2232 EVEX_W_0F3A18_P_2,
2233 EVEX_W_0F3A19_P_2,
2234 EVEX_W_0F3A1A_P_2,
2235 EVEX_W_0F3A1B_P_2,
2236 EVEX_W_0F3A1D_P_2,
2237 EVEX_W_0F3A21_P_2,
90a915bf 2238 EVEX_W_0F3A22_P_2,
43234a1e
L
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
L
9435 { "vmovK", { XMScalar, Edq }, 0 },
9436 { "vmovK", { XMScalar, Edq }, 0 },
c0f3af97
L
9437 },
9438
ec6f095a 9439 /* VEX_LEN_0F77_P_1 */
c0f3af97 9440 {
ec6f095a
L
9441 { "vzeroupper", { XX }, 0 },
9442 { "vzeroall", { XX }, 0 },
c0f3af97
L
9443 },
9444
ec6f095a 9445 /* VEX_LEN_0F7E_P_1 */
c0f3af97 9446 {
ec6f095a 9447 { "vmovq", { XMScalar, EXqScalar }, 0 },
c0f3af97
L
9448 },
9449
ec6f095a 9450 /* VEX_LEN_0F7E_P_2 */
c0f3af97 9451 {
ec6f095a
L
9452 { "vmovK", { Edq, XMScalar }, 0 },
9453 { "vmovK", { Edq, XMScalar }, 0 },
c0f3af97
L
9454 },
9455
ec6f095a 9456 /* VEX_LEN_0F90_P_0 */
c0f3af97 9457 {
ec6f095a 9458 { VEX_W_TABLE (VEX_W_0F90_P_0_LEN_0) },
c0f3af97
L
9459 },
9460
ec6f095a 9461 /* VEX_LEN_0F90_P_2 */
c0f3af97 9462 {
ec6f095a 9463 { VEX_W_TABLE (VEX_W_0F90_P_2_LEN_0) },
c0f3af97
L
9464 },
9465
ec6f095a 9466 /* VEX_LEN_0F91_P_0 */
c0f3af97 9467 {
ec6f095a 9468 { VEX_W_TABLE (VEX_W_0F91_P_0_LEN_0) },
c0f3af97
L
9469 },
9470
ec6f095a 9471 /* VEX_LEN_0F91_P_2 */
c0f3af97 9472 {
ec6f095a 9473 { VEX_W_TABLE (VEX_W_0F91_P_2_LEN_0) },
c0f3af97
L
9474 },
9475
ec6f095a 9476 /* VEX_LEN_0F92_P_0 */
c0f3af97 9477 {
ec6f095a 9478 { VEX_W_TABLE (VEX_W_0F92_P_0_LEN_0) },
c0f3af97
L
9479 },
9480
ec6f095a 9481 /* VEX_LEN_0F92_P_2 */
c0f3af97 9482 {
ec6f095a 9483 { VEX_W_TABLE (VEX_W_0F92_P_2_LEN_0) },
c0f3af97
L
9484 },
9485
ec6f095a 9486 /* VEX_LEN_0F92_P_3 */
c0f3af97 9487 {
ec6f095a 9488 { VEX_W_TABLE (VEX_W_0F92_P_3_LEN_0) },
c0f3af97
L
9489 },
9490
ec6f095a 9491 /* VEX_LEN_0F93_P_0 */
c0f3af97 9492 {
ec6f095a 9493 { VEX_W_TABLE (VEX_W_0F93_P_0_LEN_0) },
c0f3af97
L
9494 },
9495
ec6f095a 9496 /* VEX_LEN_0F93_P_2 */
c0f3af97 9497 {
ec6f095a 9498 { VEX_W_TABLE (VEX_W_0F93_P_2_LEN_0) },
c0f3af97
L
9499 },
9500
ec6f095a 9501 /* VEX_LEN_0F93_P_3 */
c0f3af97 9502 {
ec6f095a 9503 { VEX_W_TABLE (VEX_W_0F93_P_3_LEN_0) },
c0f3af97
L
9504 },
9505
ec6f095a 9506 /* VEX_LEN_0F98_P_0 */
43234a1e
L
9507 {
9508 { VEX_W_TABLE (VEX_W_0F98_P_0_LEN_0) },
9509 },
9510
1ba585e8
IT
9511 /* VEX_LEN_0F98_P_2 */
9512 {
9513 { VEX_W_TABLE (VEX_W_0F98_P_2_LEN_0) },
9514 },
9515
9516 /* VEX_LEN_0F99_P_0 */
9517 {
9518 { VEX_W_TABLE (VEX_W_0F99_P_0_LEN_0) },
9519 },
9520
9521 /* VEX_LEN_0F99_P_2 */
9522 {
9523 { VEX_W_TABLE (VEX_W_0F99_P_2_LEN_0) },
9524 },
9525
6c30d220 9526 /* VEX_LEN_0FAE_R_2_M_0 */
c0f3af97 9527 {
ec6f095a 9528 { "vldmxcsr", { Md }, 0 },
c0f3af97
L
9529 },
9530
6c30d220 9531 /* VEX_LEN_0FAE_R_3_M_0 */
c0f3af97 9532 {
ec6f095a 9533 { "vstmxcsr", { Md }, 0 },
c0f3af97
L
9534 },
9535
6c30d220 9536 /* VEX_LEN_0FC4_P_2 */
c0f3af97 9537 {
6c30d220 9538 { VEX_W_TABLE (VEX_W_0FC4_P_2) },
c0f3af97
L
9539 },
9540
6c30d220 9541 /* VEX_LEN_0FC5_P_2 */
c0f3af97 9542 {
6c30d220 9543 { VEX_W_TABLE (VEX_W_0FC5_P_2) },
c0f3af97
L
9544 },
9545
6c30d220 9546 /* VEX_LEN_0FD6_P_2 */
c0f3af97 9547 {
ec6f095a 9548 { "vmovq", { EXqScalarS, XMScalar }, 0 },
c0f3af97
L
9549 },
9550
6c30d220 9551 /* VEX_LEN_0FF7_P_2 */
c0f3af97 9552 {
ec6f095a 9553 { "vmaskmovdqu", { XM, XS }, 0 },
c0f3af97
L
9554 },
9555
6c30d220 9556 /* VEX_LEN_0F3816_P_2 */
c0f3af97 9557 {
6c30d220
L
9558 { Bad_Opcode },
9559 { VEX_W_TABLE (VEX_W_0F3816_P_2) },
c0f3af97
L
9560 },
9561
6c30d220 9562 /* VEX_LEN_0F3819_P_2 */
c0f3af97 9563 {
6c30d220
L
9564 { Bad_Opcode },
9565 { VEX_W_TABLE (VEX_W_0F3819_P_2) },
c0f3af97
L
9566 },
9567
6c30d220 9568 /* VEX_LEN_0F381A_P_2_M_0 */
c0f3af97 9569 {
6c30d220
L
9570 { Bad_Opcode },
9571 { VEX_W_TABLE (VEX_W_0F381A_P_2_M_0) },
c0f3af97
L
9572 },
9573
6c30d220 9574 /* VEX_LEN_0F3836_P_2 */
c0f3af97 9575 {
6c30d220
L
9576 { Bad_Opcode },
9577 { VEX_W_TABLE (VEX_W_0F3836_P_2) },
c0f3af97
L
9578 },
9579
592a252b 9580 /* VEX_LEN_0F3841_P_2 */
c0f3af97 9581 {
ec6f095a 9582 { "vphminposuw", { XM, EXx }, 0 },
c0f3af97
L
9583 },
9584
6c30d220
L
9585 /* VEX_LEN_0F385A_P_2_M_0 */
9586 {
9587 { Bad_Opcode },
9588 { VEX_W_TABLE (VEX_W_0F385A_P_2_M_0) },
9589 },
9590
592a252b 9591 /* VEX_LEN_0F38DB_P_2 */
a5ff0eb2 9592 {
ec6f095a 9593 { "vaesimc", { XM, EXx }, 0 },
a5ff0eb2
L
9594 },
9595
f12dc422
L
9596 /* VEX_LEN_0F38F2_P_0 */
9597 {
bf890a93 9598 { "andnS", { Gdq, VexGdq, Edq }, 0 },
f12dc422
L
9599 },
9600
9601 /* VEX_LEN_0F38F3_R_1_P_0 */
9602 {
bf890a93 9603 { "blsrS", { VexGdq, Edq }, 0 },
f12dc422
L
9604 },
9605
9606 /* VEX_LEN_0F38F3_R_2_P_0 */
9607 {
bf890a93 9608 { "blsmskS", { VexGdq, Edq }, 0 },
f12dc422
L
9609 },
9610
9611 /* VEX_LEN_0F38F3_R_3_P_0 */
9612 {
bf890a93 9613 { "blsiS", { VexGdq, Edq }, 0 },
f12dc422
L
9614 },
9615
6c30d220
L
9616 /* VEX_LEN_0F38F5_P_0 */
9617 {
bf890a93 9618 { "bzhiS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
9619 },
9620
9621 /* VEX_LEN_0F38F5_P_1 */
9622 {
bf890a93 9623 { "pextS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
9624 },
9625
9626 /* VEX_LEN_0F38F5_P_3 */
9627 {
bf890a93 9628 { "pdepS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
9629 },
9630
9631 /* VEX_LEN_0F38F6_P_3 */
9632 {
bf890a93 9633 { "mulxS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
9634 },
9635
f12dc422
L
9636 /* VEX_LEN_0F38F7_P_0 */
9637 {
bf890a93 9638 { "bextrS", { Gdq, Edq, VexGdq }, 0 },
f12dc422
L
9639 },
9640
6c30d220
L
9641 /* VEX_LEN_0F38F7_P_1 */
9642 {
bf890a93 9643 { "sarxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
9644 },
9645
9646 /* VEX_LEN_0F38F7_P_2 */
9647 {
bf890a93 9648 { "shlxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
9649 },
9650
9651 /* VEX_LEN_0F38F7_P_3 */
9652 {
bf890a93 9653 { "shrxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
9654 },
9655
9656 /* VEX_LEN_0F3A00_P_2 */
9657 {
9658 { Bad_Opcode },
9659 { VEX_W_TABLE (VEX_W_0F3A00_P_2) },
9660 },
9661
9662 /* VEX_LEN_0F3A01_P_2 */
9663 {
9664 { Bad_Opcode },
9665 { VEX_W_TABLE (VEX_W_0F3A01_P_2) },
9666 },
9667
592a252b 9668 /* VEX_LEN_0F3A06_P_2 */
c0f3af97 9669 {
592d1631 9670 { Bad_Opcode },
592a252b 9671 { VEX_W_TABLE (VEX_W_0F3A06_P_2) },
c0f3af97
L
9672 },
9673
592a252b 9674 /* VEX_LEN_0F3A14_P_2 */
c0f3af97 9675 {
592a252b 9676 { VEX_W_TABLE (VEX_W_0F3A14_P_2) },
c0f3af97
L
9677 },
9678
592a252b 9679 /* VEX_LEN_0F3A15_P_2 */
c0f3af97 9680 {
592a252b 9681 { VEX_W_TABLE (VEX_W_0F3A15_P_2) },
c0f3af97
L
9682 },
9683
592a252b 9684 /* VEX_LEN_0F3A16_P_2 */
c0f3af97 9685 {
bf890a93 9686 { "vpextrK", { Edq, XM, Ib }, 0 },
c0f3af97
L
9687 },
9688
592a252b 9689 /* VEX_LEN_0F3A17_P_2 */
c0f3af97 9690 {
bf890a93 9691 { "vextractps", { Edqd, XM, Ib }, 0 },
c0f3af97
L
9692 },
9693
592a252b 9694 /* VEX_LEN_0F3A18_P_2 */
c0f3af97 9695 {
592d1631 9696 { Bad_Opcode },
592a252b 9697 { VEX_W_TABLE (VEX_W_0F3A18_P_2) },
c0f3af97
L
9698 },
9699
592a252b 9700 /* VEX_LEN_0F3A19_P_2 */
c0f3af97 9701 {
592d1631 9702 { Bad_Opcode },
592a252b 9703 { VEX_W_TABLE (VEX_W_0F3A19_P_2) },
c0f3af97
L
9704 },
9705
592a252b 9706 /* VEX_LEN_0F3A20_P_2 */
c0f3af97 9707 {
592a252b 9708 { VEX_W_TABLE (VEX_W_0F3A20_P_2) },
c0f3af97
L
9709 },
9710
592a252b 9711 /* VEX_LEN_0F3A21_P_2 */
c0f3af97 9712 {
ec6f095a 9713 { "vinsertps", { XM, Vex128, EXd, Ib }, 0 },
c0f3af97
L
9714 },
9715
592a252b 9716 /* VEX_LEN_0F3A22_P_2 */
c0f3af97 9717 {
bf890a93 9718 { "vpinsrK", { XM, Vex128, Edq, Ib }, 0 },
c0f3af97
L
9719 },
9720
43234a1e
L
9721 /* VEX_LEN_0F3A30_P_2 */
9722 {
9723 { VEX_W_TABLE (VEX_W_0F3A30_P_2_LEN_0) },
9724 },
9725
1ba585e8
IT
9726 /* VEX_LEN_0F3A31_P_2 */
9727 {
9728 { VEX_W_TABLE (VEX_W_0F3A31_P_2_LEN_0) },
9729 },
9730
43234a1e
L
9731 /* VEX_LEN_0F3A32_P_2 */
9732 {
9733 { VEX_W_TABLE (VEX_W_0F3A32_P_2_LEN_0) },
9734 },
9735
1ba585e8
IT
9736 /* VEX_LEN_0F3A33_P_2 */
9737 {
9738 { VEX_W_TABLE (VEX_W_0F3A33_P_2_LEN_0) },
9739 },
9740
6c30d220 9741 /* VEX_LEN_0F3A38_P_2 */
c0f3af97 9742 {
6c30d220
L
9743 { Bad_Opcode },
9744 { VEX_W_TABLE (VEX_W_0F3A38_P_2) },
c0f3af97
L
9745 },
9746
6c30d220 9747 /* VEX_LEN_0F3A39_P_2 */
c0f3af97 9748 {
6c30d220
L
9749 { Bad_Opcode },
9750 { VEX_W_TABLE (VEX_W_0F3A39_P_2) },
9751 },
9752
9753 /* VEX_LEN_0F3A41_P_2 */
9754 {
ec6f095a 9755 { "vdppd", { XM, Vex128, EXx, Ib }, 0 },
c0f3af97
L
9756 },
9757
6c30d220 9758 /* VEX_LEN_0F3A46_P_2 */
c0f3af97 9759 {
6c30d220
L
9760 { Bad_Opcode },
9761 { VEX_W_TABLE (VEX_W_0F3A46_P_2) },
c0f3af97
L
9762 },
9763
592a252b 9764 /* VEX_LEN_0F3A60_P_2 */
c0f3af97 9765 {
15c7c1d8 9766 { "vpcmpestrm", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, 0 },
c0f3af97
L
9767 },
9768
592a252b 9769 /* VEX_LEN_0F3A61_P_2 */
c0f3af97 9770 {
15c7c1d8 9771 { "vpcmpestri", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, 0 },
c0f3af97
L
9772 },
9773
592a252b 9774 /* VEX_LEN_0F3A62_P_2 */
c0f3af97 9775 {
ec6f095a 9776 { "vpcmpistrm", { XM, EXx, Ib }, 0 },
c0f3af97
L
9777 },
9778
592a252b 9779 /* VEX_LEN_0F3A63_P_2 */
c0f3af97 9780 {
ec6f095a 9781 { "vpcmpistri", { XM, EXx, Ib }, 0 },
c0f3af97
L
9782 },
9783
592a252b 9784 /* VEX_LEN_0F3A6A_P_2 */
922d8de8 9785 {
3a2430e0 9786 { "vfmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 },
922d8de8
DR
9787 },
9788
592a252b 9789 /* VEX_LEN_0F3A6B_P_2 */
922d8de8 9790 {
3a2430e0 9791 { "vfmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 },
922d8de8
DR
9792 },
9793
592a252b 9794 /* VEX_LEN_0F3A6E_P_2 */
922d8de8 9795 {
3a2430e0 9796 { "vfmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 },
922d8de8
DR
9797 },
9798
592a252b 9799 /* VEX_LEN_0F3A6F_P_2 */
922d8de8 9800 {
3a2430e0 9801 { "vfmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 },
922d8de8
DR
9802 },
9803
592a252b 9804 /* VEX_LEN_0F3A7A_P_2 */
922d8de8 9805 {
3a2430e0 9806 { "vfnmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 },
922d8de8
DR
9807 },
9808
592a252b 9809 /* VEX_LEN_0F3A7B_P_2 */
922d8de8 9810 {
3a2430e0 9811 { "vfnmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 },
922d8de8
DR
9812 },
9813
592a252b 9814 /* VEX_LEN_0F3A7E_P_2 */
922d8de8 9815 {
3a2430e0 9816 { "vfnmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 },
922d8de8
DR
9817 },
9818
592a252b 9819 /* VEX_LEN_0F3A7F_P_2 */
922d8de8 9820 {
3a2430e0 9821 { "vfnmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 },
922d8de8
DR
9822 },
9823
592a252b 9824 /* VEX_LEN_0F3ADF_P_2 */
a5ff0eb2 9825 {
ec6f095a 9826 { "vaeskeygenassist", { XM, EXx, Ib }, 0 },
a5ff0eb2 9827 },
4c807e72 9828
6c30d220
L
9829 /* VEX_LEN_0F3AF0_P_3 */
9830 {
bf890a93 9831 { "rorxS", { Gdq, Edq, Ib }, 0 },
6c30d220
L
9832 },
9833
ff688e1f
L
9834 /* VEX_LEN_0FXOP_08_CC */
9835 {
be92cb14 9836 { "vpcomb", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9837 },
9838
9839 /* VEX_LEN_0FXOP_08_CD */
9840 {
be92cb14 9841 { "vpcomw", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9842 },
9843
9844 /* VEX_LEN_0FXOP_08_CE */
9845 {
be92cb14 9846 { "vpcomd", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9847 },
9848
9849 /* VEX_LEN_0FXOP_08_CF */
9850 {
be92cb14 9851 { "vpcomq", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9852 },
9853
9854 /* VEX_LEN_0FXOP_08_EC */
9855 {
be92cb14 9856 { "vpcomub", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9857 },
9858
9859 /* VEX_LEN_0FXOP_08_ED */
9860 {
be92cb14 9861 { "vpcomuw", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9862 },
9863
9864 /* VEX_LEN_0FXOP_08_EE */
9865 {
be92cb14 9866 { "vpcomud", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9867 },
9868
9869 /* VEX_LEN_0FXOP_08_EF */
9870 {
be92cb14 9871 { "vpcomuq", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9872 },
9873
592a252b 9874 /* VEX_LEN_0FXOP_09_80 */
5dd85c99 9875 {
bf890a93
IT
9876 { "vfrczps", { XM, EXxmm }, 0 },
9877 { "vfrczps", { XM, EXymmq }, 0 },
5dd85c99 9878 },
4c807e72 9879
592a252b 9880 /* VEX_LEN_0FXOP_09_81 */
5dd85c99 9881 {
bf890a93
IT
9882 { "vfrczpd", { XM, EXxmm }, 0 },
9883 { "vfrczpd", { XM, EXymmq }, 0 },
5dd85c99 9884 },
331d2d0d
L
9885};
9886
9e30b8e0 9887static const struct dis386 vex_w_table[][2] = {
43234a1e
L
9888 {
9889 /* VEX_W_0F41_P_0_LEN_1 */
ab4e4ed5
AF
9890 { MOD_TABLE (MOD_VEX_W_0_0F41_P_0_LEN_1) },
9891 { MOD_TABLE (MOD_VEX_W_1_0F41_P_0_LEN_1) },
1ba585e8
IT
9892 },
9893 {
9894 /* VEX_W_0F41_P_2_LEN_1 */
ab4e4ed5
AF
9895 { MOD_TABLE (MOD_VEX_W_0_0F41_P_2_LEN_1) },
9896 { MOD_TABLE (MOD_VEX_W_1_0F41_P_2_LEN_1) }
43234a1e
L
9897 },
9898 {
9899 /* VEX_W_0F42_P_0_LEN_1 */
ab4e4ed5
AF
9900 { MOD_TABLE (MOD_VEX_W_0_0F42_P_0_LEN_1) },
9901 { MOD_TABLE (MOD_VEX_W_1_0F42_P_0_LEN_1) },
1ba585e8
IT
9902 },
9903 {
9904 /* VEX_W_0F42_P_2_LEN_1 */
ab4e4ed5
AF
9905 { MOD_TABLE (MOD_VEX_W_0_0F42_P_2_LEN_1) },
9906 { MOD_TABLE (MOD_VEX_W_1_0F42_P_2_LEN_1) },
43234a1e
L
9907 },
9908 {
9909 /* VEX_W_0F44_P_0_LEN_0 */
ab4e4ed5
AF
9910 { MOD_TABLE (MOD_VEX_W_0_0F44_P_0_LEN_1) },
9911 { MOD_TABLE (MOD_VEX_W_1_0F44_P_0_LEN_1) },
1ba585e8
IT
9912 },
9913 {
9914 /* VEX_W_0F44_P_2_LEN_0 */
ab4e4ed5
AF
9915 { MOD_TABLE (MOD_VEX_W_0_0F44_P_2_LEN_1) },
9916 { MOD_TABLE (MOD_VEX_W_1_0F44_P_2_LEN_1) },
43234a1e
L
9917 },
9918 {
ec6f095a
L
9919 /* VEX_W_0F45_P_0_LEN_1 */
9920 { MOD_TABLE (MOD_VEX_W_0_0F45_P_0_LEN_1) },
9921 { MOD_TABLE (MOD_VEX_W_1_0F45_P_0_LEN_1) },
9e30b8e0
L
9922 },
9923 {
ec6f095a
L
9924 /* VEX_W_0F45_P_2_LEN_1 */
9925 { MOD_TABLE (MOD_VEX_W_0_0F45_P_2_LEN_1) },
9926 { MOD_TABLE (MOD_VEX_W_1_0F45_P_2_LEN_1) },
9e30b8e0
L
9927 },
9928 {
ec6f095a
L
9929 /* VEX_W_0F46_P_0_LEN_1 */
9930 { MOD_TABLE (MOD_VEX_W_0_0F46_P_0_LEN_1) },
9931 { MOD_TABLE (MOD_VEX_W_1_0F46_P_0_LEN_1) },
9e30b8e0
L
9932 },
9933 {
ec6f095a
L
9934 /* VEX_W_0F46_P_2_LEN_1 */
9935 { MOD_TABLE (MOD_VEX_W_0_0F46_P_2_LEN_1) },
9936 { MOD_TABLE (MOD_VEX_W_1_0F46_P_2_LEN_1) },
9e30b8e0
L
9937 },
9938 {
ec6f095a
L
9939 /* VEX_W_0F47_P_0_LEN_1 */
9940 { MOD_TABLE (MOD_VEX_W_0_0F47_P_0_LEN_1) },
9941 { MOD_TABLE (MOD_VEX_W_1_0F47_P_0_LEN_1) },
9e30b8e0
L
9942 },
9943 {
ec6f095a
L
9944 /* VEX_W_0F47_P_2_LEN_1 */
9945 { MOD_TABLE (MOD_VEX_W_0_0F47_P_2_LEN_1) },
9946 { MOD_TABLE (MOD_VEX_W_1_0F47_P_2_LEN_1) },
9e30b8e0
L
9947 },
9948 {
ec6f095a
L
9949 /* VEX_W_0F4A_P_0_LEN_1 */
9950 { MOD_TABLE (MOD_VEX_W_0_0F4A_P_0_LEN_1) },
9951 { MOD_TABLE (MOD_VEX_W_1_0F4A_P_0_LEN_1) },
9e30b8e0
L
9952 },
9953 {
ec6f095a
L
9954 /* VEX_W_0F4A_P_2_LEN_1 */
9955 { MOD_TABLE (MOD_VEX_W_0_0F4A_P_2_LEN_1) },
9956 { MOD_TABLE (MOD_VEX_W_1_0F4A_P_2_LEN_1) },
9e30b8e0
L
9957 },
9958 {
ec6f095a
L
9959 /* VEX_W_0F4B_P_0_LEN_1 */
9960 { MOD_TABLE (MOD_VEX_W_0_0F4B_P_0_LEN_1) },
9961 { MOD_TABLE (MOD_VEX_W_1_0F4B_P_0_LEN_1) },
9e30b8e0
L
9962 },
9963 {
ec6f095a
L
9964 /* VEX_W_0F4B_P_2_LEN_1 */
9965 { MOD_TABLE (MOD_VEX_W_0_0F4B_P_2_LEN_1) },
9e30b8e0
L
9966 },
9967 {
ec6f095a
L
9968 /* VEX_W_0F90_P_0_LEN_0 */
9969 { "kmovw", { MaskG, MaskE }, 0 },
9970 { "kmovq", { MaskG, MaskE }, 0 },
9e30b8e0
L
9971 },
9972 {
ec6f095a
L
9973 /* VEX_W_0F90_P_2_LEN_0 */
9974 { "kmovb", { MaskG, MaskBDE }, 0 },
9975 { "kmovd", { MaskG, MaskBDE }, 0 },
9e30b8e0
L
9976 },
9977 {
ec6f095a
L
9978 /* VEX_W_0F91_P_0_LEN_0 */
9979 { MOD_TABLE (MOD_VEX_W_0_0F91_P_0_LEN_0) },
9980 { MOD_TABLE (MOD_VEX_W_1_0F91_P_0_LEN_0) },
9e30b8e0
L
9981 },
9982 {
ec6f095a
L
9983 /* VEX_W_0F91_P_2_LEN_0 */
9984 { MOD_TABLE (MOD_VEX_W_0_0F91_P_2_LEN_0) },
9985 { MOD_TABLE (MOD_VEX_W_1_0F91_P_2_LEN_0) },
9e30b8e0
L
9986 },
9987 {
ec6f095a
L
9988 /* VEX_W_0F92_P_0_LEN_0 */
9989 { MOD_TABLE (MOD_VEX_W_0_0F92_P_0_LEN_0) },
9e30b8e0
L
9990 },
9991 {
ec6f095a
L
9992 /* VEX_W_0F92_P_2_LEN_0 */
9993 { MOD_TABLE (MOD_VEX_W_0_0F92_P_2_LEN_0) },
9e30b8e0
L
9994 },
9995 {
ec6f095a
L
9996 /* VEX_W_0F92_P_3_LEN_0 */
9997 { MOD_TABLE (MOD_VEX_W_0_0F92_P_3_LEN_0) },
9998 { MOD_TABLE (MOD_VEX_W_1_0F92_P_3_LEN_0) },
9e30b8e0
L
9999 },
10000 {
ec6f095a
L
10001 /* VEX_W_0F93_P_0_LEN_0 */
10002 { MOD_TABLE (MOD_VEX_W_0_0F93_P_0_LEN_0) },
9e30b8e0
L
10003 },
10004 {
ec6f095a
L
10005 /* VEX_W_0F93_P_2_LEN_0 */
10006 { MOD_TABLE (MOD_VEX_W_0_0F93_P_2_LEN_0) },
9e30b8e0
L
10007 },
10008 {
ec6f095a
L
10009 /* VEX_W_0F93_P_3_LEN_0 */
10010 { MOD_TABLE (MOD_VEX_W_0_0F93_P_3_LEN_0) },
10011 { MOD_TABLE (MOD_VEX_W_1_0F93_P_3_LEN_0) },
9e30b8e0
L
10012 },
10013 {
ec6f095a
L
10014 /* VEX_W_0F98_P_0_LEN_0 */
10015 { MOD_TABLE (MOD_VEX_W_0_0F98_P_0_LEN_0) },
10016 { MOD_TABLE (MOD_VEX_W_1_0F98_P_0_LEN_0) },
9e30b8e0
L
10017 },
10018 {
ec6f095a
L
10019 /* VEX_W_0F98_P_2_LEN_0 */
10020 { MOD_TABLE (MOD_VEX_W_0_0F98_P_2_LEN_0) },
10021 { MOD_TABLE (MOD_VEX_W_1_0F98_P_2_LEN_0) },
9e30b8e0
L
10022 },
10023 {
ec6f095a
L
10024 /* VEX_W_0F99_P_0_LEN_0 */
10025 { MOD_TABLE (MOD_VEX_W_0_0F99_P_0_LEN_0) },
10026 { MOD_TABLE (MOD_VEX_W_1_0F99_P_0_LEN_0) },
9e30b8e0
L
10027 },
10028 {
ec6f095a
L
10029 /* VEX_W_0F99_P_2_LEN_0 */
10030 { MOD_TABLE (MOD_VEX_W_0_0F99_P_2_LEN_0) },
10031 { MOD_TABLE (MOD_VEX_W_1_0F99_P_2_LEN_0) },
9e30b8e0
L
10032 },
10033 {
ec6f095a
L
10034 /* VEX_W_0FC4_P_2 */
10035 { "vpinsrw", { XM, Vex128, Edqw, Ib }, 0 },
9e30b8e0
L
10036 },
10037 {
ec6f095a
L
10038 /* VEX_W_0FC5_P_2 */
10039 { "vpextrw", { Gdq, XS, Ib }, 0 },
9e30b8e0
L
10040 },
10041 {
592a252b 10042 /* VEX_W_0F380C_P_2 */
bf890a93 10043 { "vpermilps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10044 },
10045 {
592a252b 10046 /* VEX_W_0F380D_P_2 */
bf890a93 10047 { "vpermilpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10048 },
10049 {
592a252b 10050 /* VEX_W_0F380E_P_2 */
bf890a93 10051 { "vtestps", { XM, EXx }, 0 },
9e30b8e0
L
10052 },
10053 {
592a252b 10054 /* VEX_W_0F380F_P_2 */
bf890a93 10055 { "vtestpd", { XM, EXx }, 0 },
9e30b8e0 10056 },
6c30d220
L
10057 {
10058 /* VEX_W_0F3816_P_2 */
bf890a93 10059 { "vpermps", { XM, Vex, EXx }, 0 },
6c30d220 10060 },
bcf2684f 10061 {
6c30d220 10062 /* VEX_W_0F3818_P_2 */
bf890a93 10063 { "vbroadcastss", { XM, EXxmm_md }, 0 },
bcf2684f 10064 },
9e30b8e0 10065 {
6c30d220 10066 /* VEX_W_0F3819_P_2 */
bf890a93 10067 { "vbroadcastsd", { XM, EXxmm_mq }, 0 },
9e30b8e0
L
10068 },
10069 {
592a252b 10070 /* VEX_W_0F381A_P_2_M_0 */
bf890a93 10071 { "vbroadcastf128", { XM, Mxmm }, 0 },
9e30b8e0 10072 },
53aa04a0 10073 {
592a252b 10074 /* VEX_W_0F382C_P_2_M_0 */
bf890a93 10075 { "vmaskmovps", { XM, Vex, Mx }, 0 },
53aa04a0
L
10076 },
10077 {
592a252b 10078 /* VEX_W_0F382D_P_2_M_0 */
bf890a93 10079 { "vmaskmovpd", { XM, Vex, Mx }, 0 },
53aa04a0
L
10080 },
10081 {
592a252b 10082 /* VEX_W_0F382E_P_2_M_0 */
bf890a93 10083 { "vmaskmovps", { Mx, Vex, XM }, 0 },
53aa04a0
L
10084 },
10085 {
592a252b 10086 /* VEX_W_0F382F_P_2_M_0 */
bf890a93 10087 { "vmaskmovpd", { Mx, Vex, XM }, 0 },
53aa04a0 10088 },
6c30d220
L
10089 {
10090 /* VEX_W_0F3836_P_2 */
bf890a93 10091 { "vpermd", { XM, Vex, EXx }, 0 },
9e30b8e0 10092 },
6c30d220
L
10093 {
10094 /* VEX_W_0F3846_P_2 */
bf890a93 10095 { "vpsravd", { XM, Vex, EXx }, 0 },
6c30d220
L
10096 },
10097 {
10098 /* VEX_W_0F3858_P_2 */
bf890a93 10099 { "vpbroadcastd", { XM, EXxmm_md }, 0 },
6c30d220
L
10100 },
10101 {
10102 /* VEX_W_0F3859_P_2 */
bf890a93 10103 { "vpbroadcastq", { XM, EXxmm_mq }, 0 },
6c30d220
L
10104 },
10105 {
10106 /* VEX_W_0F385A_P_2_M_0 */
bf890a93 10107 { "vbroadcasti128", { XM, Mxmm }, 0 },
6c30d220
L
10108 },
10109 {
10110 /* VEX_W_0F3878_P_2 */
bf890a93 10111 { "vpbroadcastb", { XM, EXxmm_mb }, 0 },
6c30d220
L
10112 },
10113 {
10114 /* VEX_W_0F3879_P_2 */
bf890a93 10115 { "vpbroadcastw", { XM, EXxmm_mw }, 0 },
6c30d220 10116 },
48521003
IT
10117 {
10118 /* VEX_W_0F38CF_P_2 */
10119 { "vgf2p8mulb", { XM, Vex, EXx }, 0 },
10120 },
6c30d220
L
10121 {
10122 /* VEX_W_0F3A00_P_2 */
10123 { Bad_Opcode },
bf890a93 10124 { "vpermq", { XM, EXx, Ib }, 0 },
6c30d220
L
10125 },
10126 {
10127 /* VEX_W_0F3A01_P_2 */
10128 { Bad_Opcode },
bf890a93 10129 { "vpermpd", { XM, EXx, Ib }, 0 },
6c30d220
L
10130 },
10131 {
10132 /* VEX_W_0F3A02_P_2 */
bf890a93 10133 { "vpblendd", { XM, Vex, EXx, Ib }, 0 },
6c30d220 10134 },
9e30b8e0 10135 {
592a252b 10136 /* VEX_W_0F3A04_P_2 */
bf890a93 10137 { "vpermilps", { XM, EXx, Ib }, 0 },
9e30b8e0
L
10138 },
10139 {
592a252b 10140 /* VEX_W_0F3A05_P_2 */
bf890a93 10141 { "vpermilpd", { XM, EXx, Ib }, 0 },
9e30b8e0
L
10142 },
10143 {
592a252b 10144 /* VEX_W_0F3A06_P_2 */
bf890a93 10145 { "vperm2f128", { XM, Vex256, EXx, Ib }, 0 },
9e30b8e0 10146 },
9e30b8e0 10147 {
592a252b 10148 /* VEX_W_0F3A14_P_2 */
bf890a93 10149 { "vpextrb", { Edqb, XM, Ib }, 0 },
9e30b8e0
L
10150 },
10151 {
592a252b 10152 /* VEX_W_0F3A15_P_2 */
bf890a93 10153 { "vpextrw", { Edqw, XM, Ib }, 0 },
9e30b8e0
L
10154 },
10155 {
592a252b 10156 /* VEX_W_0F3A18_P_2 */
bf890a93 10157 { "vinsertf128", { XM, Vex256, EXxmm, Ib }, 0 },
9e30b8e0
L
10158 },
10159 {
592a252b 10160 /* VEX_W_0F3A19_P_2 */
bf890a93 10161 { "vextractf128", { EXxmm, XM, Ib }, 0 },
9e30b8e0
L
10162 },
10163 {
592a252b 10164 /* VEX_W_0F3A20_P_2 */
bf890a93 10165 { "vpinsrb", { XM, Vex128, Edqb, Ib }, 0 },
9e30b8e0 10166 },
43234a1e 10167 {
1ba585e8 10168 /* VEX_W_0F3A30_P_2_LEN_0 */
ab4e4ed5
AF
10169 { MOD_TABLE (MOD_VEX_W_0_0F3A30_P_2_LEN_0) },
10170 { MOD_TABLE (MOD_VEX_W_1_0F3A30_P_2_LEN_0) },
43234a1e
L
10171 },
10172 {
1ba585e8 10173 /* VEX_W_0F3A31_P_2_LEN_0 */
ab4e4ed5
AF
10174 { MOD_TABLE (MOD_VEX_W_0_0F3A31_P_2_LEN_0) },
10175 { MOD_TABLE (MOD_VEX_W_1_0F3A31_P_2_LEN_0) },
1ba585e8
IT
10176 },
10177 {
10178 /* VEX_W_0F3A32_P_2_LEN_0 */
ab4e4ed5
AF
10179 { MOD_TABLE (MOD_VEX_W_0_0F3A32_P_2_LEN_0) },
10180 { MOD_TABLE (MOD_VEX_W_1_0F3A32_P_2_LEN_0) },
43234a1e 10181 },
1ba585e8
IT
10182 {
10183 /* VEX_W_0F3A33_P_2_LEN_0 */
ab4e4ed5
AF
10184 { MOD_TABLE (MOD_VEX_W_0_0F3A33_P_2_LEN_0) },
10185 { MOD_TABLE (MOD_VEX_W_1_0F3A33_P_2_LEN_0) },
1ba585e8 10186 },
6c30d220
L
10187 {
10188 /* VEX_W_0F3A38_P_2 */
bf890a93 10189 { "vinserti128", { XM, Vex256, EXxmm, Ib }, 0 },
6c30d220
L
10190 },
10191 {
10192 /* VEX_W_0F3A39_P_2 */
bf890a93 10193 { "vextracti128", { EXxmm, XM, Ib }, 0 },
6c30d220 10194 },
6c30d220
L
10195 {
10196 /* VEX_W_0F3A46_P_2 */
bf890a93 10197 { "vperm2i128", { XM, Vex256, EXx, Ib }, 0 },
6c30d220 10198 },
a683cc34 10199 {
592a252b 10200 /* VEX_W_0F3A48_P_2 */
bf890a93
IT
10201 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
10202 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
a683cc34
SP
10203 },
10204 {
592a252b 10205 /* VEX_W_0F3A49_P_2 */
bf890a93
IT
10206 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
10207 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
a683cc34 10208 },
9e30b8e0 10209 {
592a252b 10210 /* VEX_W_0F3A4A_P_2 */
bf890a93 10211 { "vblendvps", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0
L
10212 },
10213 {
592a252b 10214 /* VEX_W_0F3A4B_P_2 */
bf890a93 10215 { "vblendvpd", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0
L
10216 },
10217 {
592a252b 10218 /* VEX_W_0F3A4C_P_2 */
bf890a93 10219 { "vpblendvb", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0 10220 },
48521003
IT
10221 {
10222 /* VEX_W_0F3ACE_P_2 */
10223 { Bad_Opcode },
10224 { "vgf2p8affineqb", { XM, Vex, EXx, Ib }, 0 },
10225 },
10226 {
10227 /* VEX_W_0F3ACF_P_2 */
10228 { Bad_Opcode },
10229 { "vgf2p8affineinvqb", { XM, Vex, EXx, Ib }, 0 },
10230 },
43234a1e
L
10231#define NEED_VEX_W_TABLE
10232#include "i386-dis-evex.h"
10233#undef NEED_VEX_W_TABLE
9e30b8e0
L
10234};
10235
10236static const struct dis386 mod_table[][2] = {
10237 {
10238 /* MOD_8D */
bf890a93 10239 { "leaS", { Gv, M }, 0 },
9e30b8e0 10240 },
42164a71
L
10241 {
10242 /* MOD_C6_REG_7 */
10243 { Bad_Opcode },
10244 { RM_TABLE (RM_C6_REG_7) },
10245 },
10246 {
10247 /* MOD_C7_REG_7 */
10248 { Bad_Opcode },
10249 { RM_TABLE (RM_C7_REG_7) },
10250 },
4a357820
MZ
10251 {
10252 /* MOD_FF_REG_3 */
a72d2af2 10253 { "Jcall^", { indirEp }, 0 },
4a357820
MZ
10254 },
10255 {
10256 /* MOD_FF_REG_5 */
a72d2af2 10257 { "Jjmp^", { indirEp }, 0 },
4a357820 10258 },
9e30b8e0
L
10259 {
10260 /* MOD_0F01_REG_0 */
10261 { X86_64_TABLE (X86_64_0F01_REG_0) },
10262 { RM_TABLE (RM_0F01_REG_0) },
10263 },
10264 {
10265 /* MOD_0F01_REG_1 */
10266 { X86_64_TABLE (X86_64_0F01_REG_1) },
10267 { RM_TABLE (RM_0F01_REG_1) },
10268 },
10269 {
10270 /* MOD_0F01_REG_2 */
10271 { X86_64_TABLE (X86_64_0F01_REG_2) },
10272 { RM_TABLE (RM_0F01_REG_2) },
10273 },
10274 {
10275 /* MOD_0F01_REG_3 */
10276 { X86_64_TABLE (X86_64_0F01_REG_3) },
10277 { RM_TABLE (RM_0F01_REG_3) },
10278 },
8eab4136
L
10279 {
10280 /* MOD_0F01_REG_5 */
603555e5 10281 { PREFIX_TABLE (PREFIX_MOD_0_0F01_REG_5) },
8eab4136
L
10282 { RM_TABLE (RM_0F01_REG_5) },
10283 },
9e30b8e0
L
10284 {
10285 /* MOD_0F01_REG_7 */
bf890a93 10286 { "invlpg", { Mb }, 0 },
9e30b8e0
L
10287 { RM_TABLE (RM_0F01_REG_7) },
10288 },
10289 {
10290 /* MOD_0F12_PREFIX_0 */
507bd325
L
10291 { "movlps", { XM, EXq }, PREFIX_OPCODE },
10292 { "movhlps", { XM, EXq }, PREFIX_OPCODE },
9e30b8e0
L
10293 },
10294 {
10295 /* MOD_0F13 */
507bd325 10296 { "movlpX", { EXq, XM }, PREFIX_OPCODE },
9e30b8e0
L
10297 },
10298 {
10299 /* MOD_0F16_PREFIX_0 */
bf890a93
IT
10300 { "movhps", { XM, EXq }, 0 },
10301 { "movlhps", { XM, EXq }, 0 },
9e30b8e0
L
10302 },
10303 {
10304 /* MOD_0F17 */
507bd325 10305 { "movhpX", { EXq, XM }, PREFIX_OPCODE },
9e30b8e0
L
10306 },
10307 {
10308 /* MOD_0F18_REG_0 */
bf890a93 10309 { "prefetchnta", { Mb }, 0 },
9e30b8e0
L
10310 },
10311 {
10312 /* MOD_0F18_REG_1 */
bf890a93 10313 { "prefetcht0", { Mb }, 0 },
9e30b8e0
L
10314 },
10315 {
10316 /* MOD_0F18_REG_2 */
bf890a93 10317 { "prefetcht1", { Mb }, 0 },
9e30b8e0
L
10318 },
10319 {
10320 /* MOD_0F18_REG_3 */
bf890a93 10321 { "prefetcht2", { Mb }, 0 },
9e30b8e0 10322 },
d7189fa5
RM
10323 {
10324 /* MOD_0F18_REG_4 */
bf890a93 10325 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
10326 },
10327 {
10328 /* MOD_0F18_REG_5 */
bf890a93 10329 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
10330 },
10331 {
10332 /* MOD_0F18_REG_6 */
bf890a93 10333 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
10334 },
10335 {
10336 /* MOD_0F18_REG_7 */
bf890a93 10337 { "nop/reserved", { Mb }, 0 },
d7189fa5 10338 },
7e8b059b
L
10339 {
10340 /* MOD_0F1A_PREFIX_0 */
d276ec69 10341 { "bndldx", { Gbnd, Mv_bnd }, 0 },
bf890a93 10342 { "nopQ", { Ev }, 0 },
7e8b059b
L
10343 },
10344 {
10345 /* MOD_0F1B_PREFIX_0 */
d276ec69 10346 { "bndstx", { Mv_bnd, Gbnd }, 0 },
bf890a93 10347 { "nopQ", { Ev }, 0 },
7e8b059b
L
10348 },
10349 {
10350 /* MOD_0F1B_PREFIX_1 */
d276ec69 10351 { "bndmk", { Gbnd, Mv_bnd }, 0 },
bf890a93 10352 { "nopQ", { Ev }, 0 },
7e8b059b 10353 },
c48935d7
IT
10354 {
10355 /* MOD_0F1C_PREFIX_0 */
10356 { REG_TABLE (REG_0F1C_MOD_0) },
10357 { "nopQ", { Ev }, 0 },
10358 },
603555e5
L
10359 {
10360 /* MOD_0F1E_PREFIX_1 */
10361 { "nopQ", { Ev }, 0 },
10362 { REG_TABLE (REG_0F1E_MOD_3) },
10363 },
b844680a 10364 {
92fddf8e 10365 /* MOD_0F24 */
7bb15c6f 10366 { Bad_Opcode },
bf890a93 10367 { "movL", { Rd, Td }, 0 },
b844680a
L
10368 },
10369 {
92fddf8e 10370 /* MOD_0F26 */
592d1631 10371 { Bad_Opcode },
bf890a93 10372 { "movL", { Td, Rd }, 0 },
b844680a 10373 },
75c135a8
L
10374 {
10375 /* MOD_0F2B_PREFIX_0 */
507bd325 10376 {"movntps", { Mx, XM }, PREFIX_OPCODE },
75c135a8
L
10377 },
10378 {
10379 /* MOD_0F2B_PREFIX_1 */
507bd325 10380 {"movntss", { Md, XM }, PREFIX_OPCODE },
75c135a8
L
10381 },
10382 {
10383 /* MOD_0F2B_PREFIX_2 */
507bd325 10384 {"movntpd", { Mx, XM }, PREFIX_OPCODE },
75c135a8
L
10385 },
10386 {
10387 /* MOD_0F2B_PREFIX_3 */
507bd325 10388 {"movntsd", { Mq, XM }, PREFIX_OPCODE },
75c135a8
L
10389 },
10390 {
10391 /* MOD_0F51 */
592d1631 10392 { Bad_Opcode },
507bd325 10393 { "movmskpX", { Gdq, XS }, PREFIX_OPCODE },
75c135a8 10394 },
b844680a 10395 {
1ceb70f8 10396 /* MOD_0F71_REG_2 */
592d1631 10397 { Bad_Opcode },
bf890a93 10398 { "psrlw", { MS, Ib }, 0 },
b844680a
L
10399 },
10400 {
1ceb70f8 10401 /* MOD_0F71_REG_4 */
592d1631 10402 { Bad_Opcode },
bf890a93 10403 { "psraw", { MS, Ib }, 0 },
b844680a
L
10404 },
10405 {
1ceb70f8 10406 /* MOD_0F71_REG_6 */
592d1631 10407 { Bad_Opcode },
bf890a93 10408 { "psllw", { MS, Ib }, 0 },
b844680a
L
10409 },
10410 {
1ceb70f8 10411 /* MOD_0F72_REG_2 */
592d1631 10412 { Bad_Opcode },
bf890a93 10413 { "psrld", { MS, Ib }, 0 },
b844680a
L
10414 },
10415 {
1ceb70f8 10416 /* MOD_0F72_REG_4 */
592d1631 10417 { Bad_Opcode },
bf890a93 10418 { "psrad", { MS, Ib }, 0 },
b844680a
L
10419 },
10420 {
1ceb70f8 10421 /* MOD_0F72_REG_6 */
592d1631 10422 { Bad_Opcode },
bf890a93 10423 { "pslld", { MS, Ib }, 0 },
b844680a
L
10424 },
10425 {
1ceb70f8 10426 /* MOD_0F73_REG_2 */
592d1631 10427 { Bad_Opcode },
bf890a93 10428 { "psrlq", { MS, Ib }, 0 },
b844680a
L
10429 },
10430 {
1ceb70f8 10431 /* MOD_0F73_REG_3 */
592d1631 10432 { Bad_Opcode },
c0f3af97
L
10433 { PREFIX_TABLE (PREFIX_0F73_REG_3) },
10434 },
10435 {
10436 /* MOD_0F73_REG_6 */
592d1631 10437 { Bad_Opcode },
bf890a93 10438 { "psllq", { MS, Ib }, 0 },
c0f3af97
L
10439 },
10440 {
10441 /* MOD_0F73_REG_7 */
592d1631 10442 { Bad_Opcode },
c0f3af97
L
10443 { PREFIX_TABLE (PREFIX_0F73_REG_7) },
10444 },
10445 {
10446 /* MOD_0FAE_REG_0 */
bf890a93 10447 { "fxsave", { FXSAVE }, 0 },
c7b8aa3a 10448 { PREFIX_TABLE (PREFIX_0FAE_REG_0) },
c0f3af97
L
10449 },
10450 {
10451 /* MOD_0FAE_REG_1 */
bf890a93 10452 { "fxrstor", { FXSAVE }, 0 },
c7b8aa3a 10453 { PREFIX_TABLE (PREFIX_0FAE_REG_1) },
c0f3af97
L
10454 },
10455 {
10456 /* MOD_0FAE_REG_2 */
bf890a93 10457 { "ldmxcsr", { Md }, 0 },
c7b8aa3a 10458 { PREFIX_TABLE (PREFIX_0FAE_REG_2) },
c0f3af97
L
10459 },
10460 {
10461 /* MOD_0FAE_REG_3 */
bf890a93 10462 { "stmxcsr", { Md }, 0 },
c7b8aa3a 10463 { PREFIX_TABLE (PREFIX_0FAE_REG_3) },
c0f3af97
L
10464 },
10465 {
10466 /* MOD_0FAE_REG_4 */
6b40c462
L
10467 { PREFIX_TABLE (PREFIX_MOD_0_0FAE_REG_4) },
10468 { PREFIX_TABLE (PREFIX_MOD_3_0FAE_REG_4) },
c0f3af97
L
10469 },
10470 {
10471 /* MOD_0FAE_REG_5 */
603555e5 10472 { PREFIX_TABLE (PREFIX_MOD_0_0FAE_REG_5) },
2234eee6 10473 { PREFIX_TABLE (PREFIX_MOD_3_0FAE_REG_5) },
c0f3af97
L
10474 },
10475 {
10476 /* MOD_0FAE_REG_6 */
de89d0a3
IT
10477 { PREFIX_TABLE (PREFIX_MOD_0_0FAE_REG_6) },
10478 { PREFIX_TABLE (PREFIX_MOD_1_0FAE_REG_6) },
c0f3af97
L
10479 },
10480 {
10481 /* MOD_0FAE_REG_7 */
963f3586 10482 { PREFIX_TABLE (PREFIX_0FAE_REG_7) },
c0f3af97
L
10483 { RM_TABLE (RM_0FAE_REG_7) },
10484 },
10485 {
10486 /* MOD_0FB2 */
bf890a93 10487 { "lssS", { Gv, Mp }, 0 },
c0f3af97
L
10488 },
10489 {
10490 /* MOD_0FB4 */
bf890a93 10491 { "lfsS", { Gv, Mp }, 0 },
c0f3af97
L
10492 },
10493 {
10494 /* MOD_0FB5 */
bf890a93 10495 { "lgsS", { Gv, Mp }, 0 },
c0f3af97 10496 },
a8484f96
L
10497 {
10498 /* MOD_0FC3 */
10499 { PREFIX_TABLE (PREFIX_MOD_0_0FC3) },
10500 },
963f3586
IT
10501 {
10502 /* MOD_0FC7_REG_3 */
a8484f96 10503 { "xrstors", { FXSAVE }, 0 },
963f3586
IT
10504 },
10505 {
10506 /* MOD_0FC7_REG_4 */
bf890a93 10507 { "xsavec", { FXSAVE }, 0 },
963f3586
IT
10508 },
10509 {
10510 /* MOD_0FC7_REG_5 */
bf890a93 10511 { "xsaves", { FXSAVE }, 0 },
963f3586 10512 },
c0f3af97
L
10513 {
10514 /* MOD_0FC7_REG_6 */
f24bcbaa
L
10515 { PREFIX_TABLE (PREFIX_MOD_0_0FC7_REG_6) },
10516 { PREFIX_TABLE (PREFIX_MOD_3_0FC7_REG_6) }
c0f3af97
L
10517 },
10518 {
10519 /* MOD_0FC7_REG_7 */
bf890a93 10520 { "vmptrst", { Mq }, 0 },
f24bcbaa 10521 { PREFIX_TABLE (PREFIX_MOD_3_0FC7_REG_7) }
c0f3af97
L
10522 },
10523 {
10524 /* MOD_0FD7 */
592d1631 10525 { Bad_Opcode },
bf890a93 10526 { "pmovmskb", { Gdq, MS }, 0 },
c0f3af97
L
10527 },
10528 {
10529 /* MOD_0FE7_PREFIX_2 */
bf890a93 10530 { "movntdq", { Mx, XM }, 0 },
c0f3af97
L
10531 },
10532 {
10533 /* MOD_0FF0_PREFIX_3 */
bf890a93 10534 { "lddqu", { XM, M }, 0 },
c0f3af97
L
10535 },
10536 {
10537 /* MOD_0F382A_PREFIX_2 */
bf890a93 10538 { "movntdqa", { XM, Mx }, 0 },
c0f3af97 10539 },
603555e5
L
10540 {
10541 /* MOD_0F38F5_PREFIX_2 */
10542 { "wrussK", { M, Gdq }, PREFIX_OPCODE },
10543 },
10544 {
10545 /* MOD_0F38F6_PREFIX_0 */
10546 { "wrssK", { M, Gdq }, PREFIX_OPCODE },
10547 },
c0a30a9f
L
10548 {
10549 /* MOD_0F38F8_PREFIX_2 */
10550 { "movdir64b", { Gva, M }, PREFIX_OPCODE },
10551 },
10552 {
10553 /* MOD_0F38F9_PREFIX_0 */
10554 { "movdiri", { Em, Gv }, PREFIX_OPCODE },
10555 },
c0f3af97
L
10556 {
10557 /* MOD_62_32BIT */
bf890a93 10558 { "bound{S|}", { Gv, Ma }, 0 },
43234a1e 10559 { EVEX_TABLE (EVEX_0F) },
c0f3af97
L
10560 },
10561 {
10562 /* MOD_C4_32BIT */
bf890a93 10563 { "lesS", { Gv, Mp }, 0 },
c0f3af97
L
10564 { VEX_C4_TABLE (VEX_0F) },
10565 },
10566 {
10567 /* MOD_C5_32BIT */
bf890a93 10568 { "ldsS", { Gv, Mp }, 0 },
c0f3af97
L
10569 { VEX_C5_TABLE (VEX_0F) },
10570 },
10571 {
592a252b
L
10572 /* MOD_VEX_0F12_PREFIX_0 */
10573 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_0) },
10574 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_1) },
c0f3af97
L
10575 },
10576 {
592a252b
L
10577 /* MOD_VEX_0F13 */
10578 { VEX_LEN_TABLE (VEX_LEN_0F13_M_0) },
c0f3af97
L
10579 },
10580 {
592a252b
L
10581 /* MOD_VEX_0F16_PREFIX_0 */
10582 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_0) },
10583 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_1) },
c0f3af97
L
10584 },
10585 {
592a252b
L
10586 /* MOD_VEX_0F17 */
10587 { VEX_LEN_TABLE (VEX_LEN_0F17_M_0) },
c0f3af97
L
10588 },
10589 {
592a252b 10590 /* MOD_VEX_0F2B */
ec6f095a 10591 { "vmovntpX", { Mx, XM }, 0 },
c0f3af97 10592 },
ab4e4ed5
AF
10593 {
10594 /* MOD_VEX_W_0_0F41_P_0_LEN_1 */
10595 { Bad_Opcode },
10596 { "kandw", { MaskG, MaskVex, MaskR }, 0 },
10597 },
10598 {
10599 /* MOD_VEX_W_1_0F41_P_0_LEN_1 */
10600 { Bad_Opcode },
10601 { "kandq", { MaskG, MaskVex, MaskR }, 0 },
10602 },
10603 {
10604 /* MOD_VEX_W_0_0F41_P_2_LEN_1 */
10605 { Bad_Opcode },
10606 { "kandb", { MaskG, MaskVex, MaskR }, 0 },
10607 },
10608 {
10609 /* MOD_VEX_W_1_0F41_P_2_LEN_1 */
10610 { Bad_Opcode },
10611 { "kandd", { MaskG, MaskVex, MaskR }, 0 },
10612 },
10613 {
10614 /* MOD_VEX_W_0_0F42_P_0_LEN_1 */
10615 { Bad_Opcode },
10616 { "kandnw", { MaskG, MaskVex, MaskR }, 0 },
10617 },
10618 {
10619 /* MOD_VEX_W_1_0F42_P_0_LEN_1 */
10620 { Bad_Opcode },
10621 { "kandnq", { MaskG, MaskVex, MaskR }, 0 },
10622 },
10623 {
10624 /* MOD_VEX_W_0_0F42_P_2_LEN_1 */
10625 { Bad_Opcode },
10626 { "kandnb", { MaskG, MaskVex, MaskR }, 0 },
10627 },
10628 {
10629 /* MOD_VEX_W_1_0F42_P_2_LEN_1 */
10630 { Bad_Opcode },
10631 { "kandnd", { MaskG, MaskVex, MaskR }, 0 },
10632 },
10633 {
10634 /* MOD_VEX_W_0_0F44_P_0_LEN_0 */
10635 { Bad_Opcode },
10636 { "knotw", { MaskG, MaskR }, 0 },
10637 },
10638 {
10639 /* MOD_VEX_W_1_0F44_P_0_LEN_0 */
10640 { Bad_Opcode },
10641 { "knotq", { MaskG, MaskR }, 0 },
10642 },
10643 {
10644 /* MOD_VEX_W_0_0F44_P_2_LEN_0 */
10645 { Bad_Opcode },
10646 { "knotb", { MaskG, MaskR }, 0 },
10647 },
10648 {
10649 /* MOD_VEX_W_1_0F44_P_2_LEN_0 */
10650 { Bad_Opcode },
10651 { "knotd", { MaskG, MaskR }, 0 },
10652 },
10653 {
10654 /* MOD_VEX_W_0_0F45_P_0_LEN_1 */
10655 { Bad_Opcode },
10656 { "korw", { MaskG, MaskVex, MaskR }, 0 },
10657 },
10658 {
10659 /* MOD_VEX_W_1_0F45_P_0_LEN_1 */
10660 { Bad_Opcode },
10661 { "korq", { MaskG, MaskVex, MaskR }, 0 },
10662 },
10663 {
10664 /* MOD_VEX_W_0_0F45_P_2_LEN_1 */
10665 { Bad_Opcode },
10666 { "korb", { MaskG, MaskVex, MaskR }, 0 },
10667 },
10668 {
10669 /* MOD_VEX_W_1_0F45_P_2_LEN_1 */
10670 { Bad_Opcode },
10671 { "kord", { MaskG, MaskVex, MaskR }, 0 },
10672 },
10673 {
10674 /* MOD_VEX_W_0_0F46_P_0_LEN_1 */
10675 { Bad_Opcode },
10676 { "kxnorw", { MaskG, MaskVex, MaskR }, 0 },
10677 },
10678 {
10679 /* MOD_VEX_W_1_0F46_P_0_LEN_1 */
10680 { Bad_Opcode },
10681 { "kxnorq", { MaskG, MaskVex, MaskR }, 0 },
10682 },
10683 {
10684 /* MOD_VEX_W_0_0F46_P_2_LEN_1 */
10685 { Bad_Opcode },
10686 { "kxnorb", { MaskG, MaskVex, MaskR }, 0 },
10687 },
10688 {
10689 /* MOD_VEX_W_1_0F46_P_2_LEN_1 */
10690 { Bad_Opcode },
10691 { "kxnord", { MaskG, MaskVex, MaskR }, 0 },
10692 },
10693 {
10694 /* MOD_VEX_W_0_0F47_P_0_LEN_1 */
10695 { Bad_Opcode },
10696 { "kxorw", { MaskG, MaskVex, MaskR }, 0 },
10697 },
10698 {
10699 /* MOD_VEX_W_1_0F47_P_0_LEN_1 */
10700 { Bad_Opcode },
10701 { "kxorq", { MaskG, MaskVex, MaskR }, 0 },
10702 },
10703 {
10704 /* MOD_VEX_W_0_0F47_P_2_LEN_1 */
10705 { Bad_Opcode },
10706 { "kxorb", { MaskG, MaskVex, MaskR }, 0 },
10707 },
10708 {
10709 /* MOD_VEX_W_1_0F47_P_2_LEN_1 */
10710 { Bad_Opcode },
10711 { "kxord", { MaskG, MaskVex, MaskR }, 0 },
10712 },
10713 {
10714 /* MOD_VEX_W_0_0F4A_P_0_LEN_1 */
10715 { Bad_Opcode },
10716 { "kaddw", { MaskG, MaskVex, MaskR }, 0 },
10717 },
10718 {
10719 /* MOD_VEX_W_1_0F4A_P_0_LEN_1 */
10720 { Bad_Opcode },
10721 { "kaddq", { MaskG, MaskVex, MaskR }, 0 },
10722 },
10723 {
10724 /* MOD_VEX_W_0_0F4A_P_2_LEN_1 */
10725 { Bad_Opcode },
10726 { "kaddb", { MaskG, MaskVex, MaskR }, 0 },
10727 },
10728 {
10729 /* MOD_VEX_W_1_0F4A_P_2_LEN_1 */
10730 { Bad_Opcode },
10731 { "kaddd", { MaskG, MaskVex, MaskR }, 0 },
10732 },
10733 {
10734 /* MOD_VEX_W_0_0F4B_P_0_LEN_1 */
10735 { Bad_Opcode },
10736 { "kunpckwd", { MaskG, MaskVex, MaskR }, 0 },
10737 },
10738 {
10739 /* MOD_VEX_W_1_0F4B_P_0_LEN_1 */
10740 { Bad_Opcode },
10741 { "kunpckdq", { MaskG, MaskVex, MaskR }, 0 },
10742 },
10743 {
10744 /* MOD_VEX_W_0_0F4B_P_2_LEN_1 */
10745 { Bad_Opcode },
10746 { "kunpckbw", { MaskG, MaskVex, MaskR }, 0 },
10747 },
c0f3af97 10748 {
592a252b 10749 /* MOD_VEX_0F50 */
592d1631 10750 { Bad_Opcode },
ec6f095a 10751 { "vmovmskpX", { Gdq, XS }, 0 },
c0f3af97
L
10752 },
10753 {
592a252b 10754 /* MOD_VEX_0F71_REG_2 */
592d1631 10755 { Bad_Opcode },
592a252b 10756 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_2) },
b844680a
L
10757 },
10758 {
592a252b 10759 /* MOD_VEX_0F71_REG_4 */
592d1631 10760 { Bad_Opcode },
592a252b 10761 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_4) },
b844680a
L
10762 },
10763 {
592a252b 10764 /* MOD_VEX_0F71_REG_6 */
592d1631 10765 { Bad_Opcode },
592a252b 10766 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_6) },
b844680a
L
10767 },
10768 {
592a252b 10769 /* MOD_VEX_0F72_REG_2 */
592d1631 10770 { Bad_Opcode },
592a252b 10771 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_2) },
b844680a 10772 },
d8faab4e 10773 {
592a252b 10774 /* MOD_VEX_0F72_REG_4 */
592d1631 10775 { Bad_Opcode },
592a252b 10776 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_4) },
d8faab4e
L
10777 },
10778 {
592a252b 10779 /* MOD_VEX_0F72_REG_6 */
592d1631 10780 { Bad_Opcode },
592a252b 10781 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_6) },
d8faab4e 10782 },
876d4bfa 10783 {
592a252b 10784 /* MOD_VEX_0F73_REG_2 */
592d1631 10785 { Bad_Opcode },
592a252b 10786 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_2) },
876d4bfa
L
10787 },
10788 {
592a252b 10789 /* MOD_VEX_0F73_REG_3 */
592d1631 10790 { Bad_Opcode },
592a252b 10791 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_3) },
475a2301
L
10792 },
10793 {
592a252b 10794 /* MOD_VEX_0F73_REG_6 */
592d1631 10795 { Bad_Opcode },
592a252b 10796 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_6) },
876d4bfa
L
10797 },
10798 {
592a252b 10799 /* MOD_VEX_0F73_REG_7 */
592d1631 10800 { Bad_Opcode },
592a252b 10801 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_7) },
876d4bfa 10802 },
ab4e4ed5
AF
10803 {
10804 /* MOD_VEX_W_0_0F91_P_0_LEN_0 */
10805 { "kmovw", { Ew, MaskG }, 0 },
10806 { Bad_Opcode },
10807 },
10808 {
10809 /* MOD_VEX_W_0_0F91_P_0_LEN_0 */
10810 { "kmovq", { Eq, MaskG }, 0 },
10811 { Bad_Opcode },
10812 },
10813 {
10814 /* MOD_VEX_W_0_0F91_P_2_LEN_0 */
10815 { "kmovb", { Eb, MaskG }, 0 },
10816 { Bad_Opcode },
10817 },
10818 {
10819 /* MOD_VEX_W_0_0F91_P_2_LEN_0 */
10820 { "kmovd", { Ed, MaskG }, 0 },
10821 { Bad_Opcode },
10822 },
10823 {
10824 /* MOD_VEX_W_0_0F92_P_0_LEN_0 */
10825 { Bad_Opcode },
10826 { "kmovw", { MaskG, Rdq }, 0 },
10827 },
10828 {
10829 /* MOD_VEX_W_0_0F92_P_2_LEN_0 */
10830 { Bad_Opcode },
10831 { "kmovb", { MaskG, Rdq }, 0 },
10832 },
10833 {
10834 /* MOD_VEX_W_0_0F92_P_3_LEN_0 */
10835 { Bad_Opcode },
10836 { "kmovd", { MaskG, Rdq }, 0 },
10837 },
10838 {
10839 /* MOD_VEX_W_1_0F92_P_3_LEN_0 */
10840 { Bad_Opcode },
10841 { "kmovq", { MaskG, Rdq }, 0 },
10842 },
10843 {
10844 /* MOD_VEX_W_0_0F93_P_0_LEN_0 */
10845 { Bad_Opcode },
10846 { "kmovw", { Gdq, MaskR }, 0 },
10847 },
10848 {
10849 /* MOD_VEX_W_0_0F93_P_2_LEN_0 */
10850 { Bad_Opcode },
10851 { "kmovb", { Gdq, MaskR }, 0 },
10852 },
10853 {
10854 /* MOD_VEX_W_0_0F93_P_3_LEN_0 */
10855 { Bad_Opcode },
10856 { "kmovd", { Gdq, MaskR }, 0 },
10857 },
10858 {
10859 /* MOD_VEX_W_1_0F93_P_3_LEN_0 */
10860 { Bad_Opcode },
10861 { "kmovq", { Gdq, MaskR }, 0 },
10862 },
10863 {
10864 /* MOD_VEX_W_0_0F98_P_0_LEN_0 */
10865 { Bad_Opcode },
10866 { "kortestw", { MaskG, MaskR }, 0 },
10867 },
10868 {
10869 /* MOD_VEX_W_1_0F98_P_0_LEN_0 */
10870 { Bad_Opcode },
10871 { "kortestq", { MaskG, MaskR }, 0 },
10872 },
10873 {
10874 /* MOD_VEX_W_0_0F98_P_2_LEN_0 */
10875 { Bad_Opcode },
10876 { "kortestb", { MaskG, MaskR }, 0 },
10877 },
10878 {
10879 /* MOD_VEX_W_1_0F98_P_2_LEN_0 */
10880 { Bad_Opcode },
10881 { "kortestd", { MaskG, MaskR }, 0 },
10882 },
10883 {
10884 /* MOD_VEX_W_0_0F99_P_0_LEN_0 */
10885 { Bad_Opcode },
10886 { "ktestw", { MaskG, MaskR }, 0 },
10887 },
10888 {
10889 /* MOD_VEX_W_1_0F99_P_0_LEN_0 */
10890 { Bad_Opcode },
10891 { "ktestq", { MaskG, MaskR }, 0 },
10892 },
10893 {
10894 /* MOD_VEX_W_0_0F99_P_2_LEN_0 */
10895 { Bad_Opcode },
10896 { "ktestb", { MaskG, MaskR }, 0 },
10897 },
10898 {
10899 /* MOD_VEX_W_1_0F99_P_2_LEN_0 */
10900 { Bad_Opcode },
10901 { "ktestd", { MaskG, MaskR }, 0 },
10902 },
876d4bfa 10903 {
592a252b
L
10904 /* MOD_VEX_0FAE_REG_2 */
10905 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_2_M_0) },
876d4bfa 10906 },
bbedc832 10907 {
592a252b
L
10908 /* MOD_VEX_0FAE_REG_3 */
10909 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_3_M_0) },
bbedc832 10910 },
144c41d9 10911 {
592a252b 10912 /* MOD_VEX_0FD7_PREFIX_2 */
592d1631 10913 { Bad_Opcode },
ec6f095a 10914 { "vpmovmskb", { Gdq, XS }, 0 },
144c41d9 10915 },
1afd85e3 10916 {
592a252b 10917 /* MOD_VEX_0FE7_PREFIX_2 */
ec6f095a 10918 { "vmovntdq", { Mx, XM }, 0 },
1afd85e3
L
10919 },
10920 {
592a252b 10921 /* MOD_VEX_0FF0_PREFIX_3 */
ec6f095a 10922 { "vlddqu", { XM, M }, 0 },
92fddf8e 10923 },
75c135a8 10924 {
592a252b
L
10925 /* MOD_VEX_0F381A_PREFIX_2 */
10926 { VEX_LEN_TABLE (VEX_LEN_0F381A_P_2_M_0) },
75c135a8 10927 },
1afd85e3 10928 {
592a252b 10929 /* MOD_VEX_0F382A_PREFIX_2 */
ec6f095a 10930 { "vmovntdqa", { XM, Mx }, 0 },
1afd85e3 10931 },
75c135a8 10932 {
592a252b
L
10933 /* MOD_VEX_0F382C_PREFIX_2 */
10934 { VEX_W_TABLE (VEX_W_0F382C_P_2_M_0) },
75c135a8 10935 },
1afd85e3 10936 {
592a252b
L
10937 /* MOD_VEX_0F382D_PREFIX_2 */
10938 { VEX_W_TABLE (VEX_W_0F382D_P_2_M_0) },
1afd85e3
L
10939 },
10940 {
592a252b
L
10941 /* MOD_VEX_0F382E_PREFIX_2 */
10942 { VEX_W_TABLE (VEX_W_0F382E_P_2_M_0) },
1afd85e3
L
10943 },
10944 {
592a252b
L
10945 /* MOD_VEX_0F382F_PREFIX_2 */
10946 { VEX_W_TABLE (VEX_W_0F382F_P_2_M_0) },
1afd85e3 10947 },
6c30d220
L
10948 {
10949 /* MOD_VEX_0F385A_PREFIX_2 */
10950 { VEX_LEN_TABLE (VEX_LEN_0F385A_P_2_M_0) },
10951 },
10952 {
10953 /* MOD_VEX_0F388C_PREFIX_2 */
bf890a93 10954 { "vpmaskmov%LW", { XM, Vex, Mx }, 0 },
6c30d220
L
10955 },
10956 {
10957 /* MOD_VEX_0F388E_PREFIX_2 */
bf890a93 10958 { "vpmaskmov%LW", { Mx, Vex, XM }, 0 },
6c30d220 10959 },
ab4e4ed5
AF
10960 {
10961 /* MOD_VEX_W_0_0F3A30_P_2_LEN_0 */
10962 { Bad_Opcode },
10963 { "kshiftrb", { MaskG, MaskR, Ib }, 0 },
10964 },
10965 {
10966 /* MOD_VEX_W_1_0F3A30_P_2_LEN_0 */
10967 { Bad_Opcode },
10968 { "kshiftrw", { MaskG, MaskR, Ib }, 0 },
10969 },
10970 {
10971 /* MOD_VEX_W_0_0F3A31_P_2_LEN_0 */
10972 { Bad_Opcode },
10973 { "kshiftrd", { MaskG, MaskR, Ib }, 0 },
10974 },
10975 {
10976 /* MOD_VEX_W_1_0F3A31_P_2_LEN_0 */
10977 { Bad_Opcode },
10978 { "kshiftrq", { MaskG, MaskR, Ib }, 0 },
10979 },
10980 {
10981 /* MOD_VEX_W_0_0F3A32_P_2_LEN_0 */
10982 { Bad_Opcode },
10983 { "kshiftlb", { MaskG, MaskR, Ib }, 0 },
10984 },
10985 {
10986 /* MOD_VEX_W_1_0F3A32_P_2_LEN_0 */
10987 { Bad_Opcode },
10988 { "kshiftlw", { MaskG, MaskR, Ib }, 0 },
10989 },
10990 {
10991 /* MOD_VEX_W_0_0F3A33_P_2_LEN_0 */
10992 { Bad_Opcode },
10993 { "kshiftld", { MaskG, MaskR, Ib }, 0 },
10994 },
10995 {
10996 /* MOD_VEX_W_1_0F3A33_P_2_LEN_0 */
10997 { Bad_Opcode },
10998 { "kshiftlq", { MaskG, MaskR, Ib }, 0 },
10999 },
43234a1e
L
11000#define NEED_MOD_TABLE
11001#include "i386-dis-evex.h"
11002#undef NEED_MOD_TABLE
b844680a
L
11003};
11004
1ceb70f8 11005static const struct dis386 rm_table[][8] = {
42164a71
L
11006 {
11007 /* RM_C6_REG_7 */
bf890a93 11008 { "xabort", { Skip_MODRM, Ib }, 0 },
42164a71
L
11009 },
11010 {
11011 /* RM_C7_REG_7 */
bf890a93 11012 { "xbeginT", { Skip_MODRM, Jv }, 0 },
42164a71 11013 },
b844680a 11014 {
1ceb70f8 11015 /* RM_0F01_REG_0 */
592d1631 11016 { Bad_Opcode },
bf890a93
IT
11017 { "vmcall", { Skip_MODRM }, 0 },
11018 { "vmlaunch", { Skip_MODRM }, 0 },
11019 { "vmresume", { Skip_MODRM }, 0 },
11020 { "vmxoff", { Skip_MODRM }, 0 },
be3a8dca 11021 { "pconfig", { Skip_MODRM }, 0 },
b844680a
L
11022 },
11023 {
1ceb70f8 11024 /* RM_0F01_REG_1 */
bf890a93
IT
11025 { "monitor", { { OP_Monitor, 0 } }, 0 },
11026 { "mwait", { { OP_Mwait, 0 } }, 0 },
11027 { "clac", { Skip_MODRM }, 0 },
11028 { "stac", { Skip_MODRM }, 0 },
2cf200a4
IT
11029 { Bad_Opcode },
11030 { Bad_Opcode },
11031 { Bad_Opcode },
bf890a93 11032 { "encls", { Skip_MODRM }, 0 },
b844680a 11033 },
475a2301
L
11034 {
11035 /* RM_0F01_REG_2 */
bf890a93
IT
11036 { "xgetbv", { Skip_MODRM }, 0 },
11037 { "xsetbv", { Skip_MODRM }, 0 },
8729a6f6
L
11038 { Bad_Opcode },
11039 { Bad_Opcode },
bf890a93
IT
11040 { "vmfunc", { Skip_MODRM }, 0 },
11041 { "xend", { Skip_MODRM }, 0 },
11042 { "xtest", { Skip_MODRM }, 0 },
11043 { "enclu", { Skip_MODRM }, 0 },
475a2301 11044 },
b844680a 11045 {
1ceb70f8 11046 /* RM_0F01_REG_3 */
bf890a93
IT
11047 { "vmrun", { Skip_MODRM }, 0 },
11048 { "vmmcall", { Skip_MODRM }, 0 },
11049 { "vmload", { Skip_MODRM }, 0 },
11050 { "vmsave", { Skip_MODRM }, 0 },
11051 { "stgi", { Skip_MODRM }, 0 },
11052 { "clgi", { Skip_MODRM }, 0 },
11053 { "skinit", { Skip_MODRM }, 0 },
11054 { "invlpga", { Skip_MODRM }, 0 },
4e7d34a6 11055 },
8eab4136
L
11056 {
11057 /* RM_0F01_REG_5 */
2234eee6 11058 { PREFIX_TABLE (PREFIX_MOD_3_0F01_REG_5_RM_0) },
8eab4136 11059 { Bad_Opcode },
603555e5 11060 { PREFIX_TABLE (PREFIX_MOD_3_0F01_REG_5_RM_2) },
8eab4136
L
11061 { Bad_Opcode },
11062 { Bad_Opcode },
11063 { Bad_Opcode },
11064 { "rdpkru", { Skip_MODRM }, 0 },
11065 { "wrpkru", { Skip_MODRM }, 0 },
11066 },
4e7d34a6 11067 {
1ceb70f8 11068 /* RM_0F01_REG_7 */
bf890a93
IT
11069 { "swapgs", { Skip_MODRM }, 0 },
11070 { "rdtscp", { Skip_MODRM }, 0 },
9916071f
AP
11071 { "monitorx", { { OP_Monitor, 0 } }, 0 },
11072 { "mwaitx", { { OP_Mwaitx, 0 } }, 0 },
bf890a93 11073 { "clzero", { Skip_MODRM }, 0 },
b844680a 11074 },
603555e5
L
11075 {
11076 /* RM_0F1E_MOD_3_REG_7 */
11077 { "nopQ", { Ev }, 0 },
11078 { "nopQ", { Ev }, 0 },
11079 { "endbr64", { Skip_MODRM }, PREFIX_OPCODE },
11080 { "endbr32", { Skip_MODRM }, PREFIX_OPCODE },
11081 { "nopQ", { Ev }, 0 },
11082 { "nopQ", { Ev }, 0 },
11083 { "nopQ", { Ev }, 0 },
11084 { "nopQ", { Ev }, 0 },
11085 },
b844680a 11086 {
1ceb70f8 11087 /* RM_0FAE_REG_6 */
bf890a93 11088 { "mfence", { Skip_MODRM }, 0 },
b844680a 11089 },
bbedc832 11090 {
1ceb70f8 11091 /* RM_0FAE_REG_7 */
b5cefcca
L
11092 { "sfence", { Skip_MODRM }, 0 },
11093
144c41d9 11094 },
b844680a
L
11095};
11096
c608c12e
AM
11097#define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")
11098
f16cd0d5
L
11099/* We use the high bit to indicate different name for the same
11100 prefix. */
f16cd0d5 11101#define REP_PREFIX (0xf3 | 0x100)
42164a71
L
11102#define XACQUIRE_PREFIX (0xf2 | 0x200)
11103#define XRELEASE_PREFIX (0xf3 | 0x400)
7e8b059b 11104#define BND_PREFIX (0xf2 | 0x400)
04ef582a 11105#define NOTRACK_PREFIX (0x3e | 0x100)
f16cd0d5
L
11106
11107static int
26ca5450 11108ckprefix (void)
252b5132 11109{
f16cd0d5 11110 int newrex, i, length;
52b15da3 11111 rex = 0;
c0f3af97 11112 rex_ignored = 0;
252b5132 11113 prefixes = 0;
7d421014 11114 used_prefixes = 0;
52b15da3 11115 rex_used = 0;
f16cd0d5
L
11116 last_lock_prefix = -1;
11117 last_repz_prefix = -1;
11118 last_repnz_prefix = -1;
11119 last_data_prefix = -1;
11120 last_addr_prefix = -1;
11121 last_rex_prefix = -1;
11122 last_seg_prefix = -1;
d9949a36 11123 fwait_prefix = -1;
285ca992 11124 active_seg_prefix = 0;
f310f33d
L
11125 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
11126 all_prefixes[i] = 0;
11127 i = 0;
f16cd0d5
L
11128 length = 0;
11129 /* The maximum instruction length is 15bytes. */
11130 while (length < MAX_CODE_LENGTH - 1)
252b5132
RH
11131 {
11132 FETCH_DATA (the_info, codep + 1);
52b15da3 11133 newrex = 0;
252b5132
RH
11134 switch (*codep)
11135 {
52b15da3
JH
11136 /* REX prefixes family. */
11137 case 0x40:
11138 case 0x41:
11139 case 0x42:
11140 case 0x43:
11141 case 0x44:
11142 case 0x45:
11143 case 0x46:
11144 case 0x47:
11145 case 0x48:
11146 case 0x49:
11147 case 0x4a:
11148 case 0x4b:
11149 case 0x4c:
11150 case 0x4d:
11151 case 0x4e:
11152 case 0x4f:
f16cd0d5
L
11153 if (address_mode == mode_64bit)
11154 newrex = *codep;
11155 else
11156 return 1;
11157 last_rex_prefix = i;
52b15da3 11158 break;
252b5132
RH
11159 case 0xf3:
11160 prefixes |= PREFIX_REPZ;
f16cd0d5 11161 last_repz_prefix = i;
252b5132
RH
11162 break;
11163 case 0xf2:
11164 prefixes |= PREFIX_REPNZ;
f16cd0d5 11165 last_repnz_prefix = i;
252b5132
RH
11166 break;
11167 case 0xf0:
11168 prefixes |= PREFIX_LOCK;
f16cd0d5 11169 last_lock_prefix = i;
252b5132
RH
11170 break;
11171 case 0x2e:
11172 prefixes |= PREFIX_CS;
f16cd0d5 11173 last_seg_prefix = i;
285ca992 11174 active_seg_prefix = PREFIX_CS;
252b5132
RH
11175 break;
11176 case 0x36:
11177 prefixes |= PREFIX_SS;
f16cd0d5 11178 last_seg_prefix = i;
285ca992 11179 active_seg_prefix = PREFIX_SS;
252b5132
RH
11180 break;
11181 case 0x3e:
11182 prefixes |= PREFIX_DS;
f16cd0d5 11183 last_seg_prefix = i;
285ca992 11184 active_seg_prefix = PREFIX_DS;
252b5132
RH
11185 break;
11186 case 0x26:
11187 prefixes |= PREFIX_ES;
f16cd0d5 11188 last_seg_prefix = i;
285ca992 11189 active_seg_prefix = PREFIX_ES;
252b5132
RH
11190 break;
11191 case 0x64:
11192 prefixes |= PREFIX_FS;
f16cd0d5 11193 last_seg_prefix = i;
285ca992 11194 active_seg_prefix = PREFIX_FS;
252b5132
RH
11195 break;
11196 case 0x65:
11197 prefixes |= PREFIX_GS;
f16cd0d5 11198 last_seg_prefix = i;
285ca992 11199 active_seg_prefix = PREFIX_GS;
252b5132
RH
11200 break;
11201 case 0x66:
11202 prefixes |= PREFIX_DATA;
f16cd0d5 11203 last_data_prefix = i;
252b5132
RH
11204 break;
11205 case 0x67:
11206 prefixes |= PREFIX_ADDR;
f16cd0d5 11207 last_addr_prefix = i;
252b5132 11208 break;
5076851f 11209 case FWAIT_OPCODE:
252b5132
RH
11210 /* fwait is really an instruction. If there are prefixes
11211 before the fwait, they belong to the fwait, *not* to the
11212 following instruction. */
d9949a36 11213 fwait_prefix = i;
3e7d61b2 11214 if (prefixes || rex)
252b5132
RH
11215 {
11216 prefixes |= PREFIX_FWAIT;
11217 codep++;
6c067bbb
RM
11218 /* This ensures that the previous REX prefixes are noticed
11219 as unused prefixes, as in the return case below. */
11220 rex_used = rex;
f16cd0d5 11221 return 1;
252b5132
RH
11222 }
11223 prefixes = PREFIX_FWAIT;
11224 break;
11225 default:
f16cd0d5 11226 return 1;
252b5132 11227 }
52b15da3
JH
11228 /* Rex is ignored when followed by another prefix. */
11229 if (rex)
11230 {
3e7d61b2 11231 rex_used = rex;
f16cd0d5 11232 return 1;
52b15da3 11233 }
f16cd0d5 11234 if (*codep != FWAIT_OPCODE)
4e9ac44a 11235 all_prefixes[i++] = *codep;
52b15da3 11236 rex = newrex;
252b5132 11237 codep++;
f16cd0d5
L
11238 length++;
11239 }
11240 return 0;
11241}
11242
7d421014
ILT
11243/* Return the name of the prefix byte PREF, or NULL if PREF is not a
11244 prefix byte. */
11245
11246static const char *
26ca5450 11247prefix_name (int pref, int sizeflag)
7d421014 11248{
0003779b
L
11249 static const char *rexes [16] =
11250 {
11251 "rex", /* 0x40 */
11252 "rex.B", /* 0x41 */
11253 "rex.X", /* 0x42 */
11254 "rex.XB", /* 0x43 */
11255 "rex.R", /* 0x44 */
11256 "rex.RB", /* 0x45 */
11257 "rex.RX", /* 0x46 */
11258 "rex.RXB", /* 0x47 */
11259 "rex.W", /* 0x48 */
11260 "rex.WB", /* 0x49 */
11261 "rex.WX", /* 0x4a */
11262 "rex.WXB", /* 0x4b */
11263 "rex.WR", /* 0x4c */
11264 "rex.WRB", /* 0x4d */
11265 "rex.WRX", /* 0x4e */
11266 "rex.WRXB", /* 0x4f */
11267 };
11268
7d421014
ILT
11269 switch (pref)
11270 {
52b15da3
JH
11271 /* REX prefixes family. */
11272 case 0x40:
52b15da3 11273 case 0x41:
52b15da3 11274 case 0x42:
52b15da3 11275 case 0x43:
52b15da3 11276 case 0x44:
52b15da3 11277 case 0x45:
52b15da3 11278 case 0x46:
52b15da3 11279 case 0x47:
52b15da3 11280 case 0x48:
52b15da3 11281 case 0x49:
52b15da3 11282 case 0x4a:
52b15da3 11283 case 0x4b:
52b15da3 11284 case 0x4c:
52b15da3 11285 case 0x4d:
52b15da3 11286 case 0x4e:
52b15da3 11287 case 0x4f:
0003779b 11288 return rexes [pref - 0x40];
7d421014
ILT
11289 case 0xf3:
11290 return "repz";
11291 case 0xf2:
11292 return "repnz";
11293 case 0xf0:
11294 return "lock";
11295 case 0x2e:
11296 return "cs";
11297 case 0x36:
11298 return "ss";
11299 case 0x3e:
11300 return "ds";
11301 case 0x26:
11302 return "es";
11303 case 0x64:
11304 return "fs";
11305 case 0x65:
11306 return "gs";
11307 case 0x66:
11308 return (sizeflag & DFLAG) ? "data16" : "data32";
11309 case 0x67:
cb712a9e 11310 if (address_mode == mode_64bit)
db6eb5be 11311 return (sizeflag & AFLAG) ? "addr32" : "addr64";
c1a64871 11312 else
2888cb7a 11313 return (sizeflag & AFLAG) ? "addr16" : "addr32";
7d421014
ILT
11314 case FWAIT_OPCODE:
11315 return "fwait";
f16cd0d5
L
11316 case REP_PREFIX:
11317 return "rep";
42164a71
L
11318 case XACQUIRE_PREFIX:
11319 return "xacquire";
11320 case XRELEASE_PREFIX:
11321 return "xrelease";
7e8b059b
L
11322 case BND_PREFIX:
11323 return "bnd";
04ef582a
L
11324 case NOTRACK_PREFIX:
11325 return "notrack";
7d421014
ILT
11326 default:
11327 return NULL;
11328 }
11329}
11330
ce518a5f
L
11331static char op_out[MAX_OPERANDS][100];
11332static int op_ad, op_index[MAX_OPERANDS];
1d9f512f 11333static int two_source_ops;
ce518a5f
L
11334static bfd_vma op_address[MAX_OPERANDS];
11335static bfd_vma op_riprel[MAX_OPERANDS];
52b15da3 11336static bfd_vma start_pc;
ce518a5f 11337
252b5132
RH
11338/*
11339 * On the 386's of 1988, the maximum length of an instruction is 15 bytes.
11340 * (see topic "Redundant prefixes" in the "Differences from 8086"
11341 * section of the "Virtual 8086 Mode" chapter.)
11342 * 'pc' should be the address of this instruction, it will
11343 * be used to print the target address if this is a relative jump or call
11344 * The function returns the length of this instruction in bytes.
11345 */
11346
252b5132 11347static char intel_syntax;
9d141669 11348static char intel_mnemonic = !SYSV386_COMPAT;
252b5132
RH
11349static char open_char;
11350static char close_char;
11351static char separator_char;
11352static char scale_char;
11353
5db04b09
L
11354enum x86_64_isa
11355{
11356 amd64 = 0,
11357 intel64
11358};
11359
11360static enum x86_64_isa isa64;
11361
e396998b
AM
11362/* Here for backwards compatibility. When gdb stops using
11363 print_insn_i386_att and print_insn_i386_intel these functions can
11364 disappear, and print_insn_i386 be merged into print_insn. */
252b5132 11365int
26ca5450 11366print_insn_i386_att (bfd_vma pc, disassemble_info *info)
252b5132
RH
11367{
11368 intel_syntax = 0;
e396998b
AM
11369
11370 return print_insn (pc, info);
252b5132
RH
11371}
11372
11373int
26ca5450 11374print_insn_i386_intel (bfd_vma pc, disassemble_info *info)
252b5132
RH
11375{
11376 intel_syntax = 1;
e396998b
AM
11377
11378 return print_insn (pc, info);
252b5132
RH
11379}
11380
e396998b 11381int
26ca5450 11382print_insn_i386 (bfd_vma pc, disassemble_info *info)
e396998b
AM
11383{
11384 intel_syntax = -1;
11385
11386 return print_insn (pc, info);
11387}
11388
f59a29b9
L
11389void
11390print_i386_disassembler_options (FILE *stream)
11391{
11392 fprintf (stream, _("\n\
11393The following i386/x86-64 specific disassembler options are supported for use\n\
11394with the -M switch (multiple options should be separated by commas):\n"));
11395
11396 fprintf (stream, _(" x86-64 Disassemble in 64bit mode\n"));
11397 fprintf (stream, _(" i386 Disassemble in 32bit mode\n"));
11398 fprintf (stream, _(" i8086 Disassemble in 16bit mode\n"));
11399 fprintf (stream, _(" att Display instruction in AT&T syntax\n"));
11400 fprintf (stream, _(" intel Display instruction in Intel syntax\n"));
9d141669
L
11401 fprintf (stream, _(" att-mnemonic\n"
11402 " Display instruction in AT&T mnemonic\n"));
11403 fprintf (stream, _(" intel-mnemonic\n"
11404 " Display instruction in Intel mnemonic\n"));
f59a29b9
L
11405 fprintf (stream, _(" addr64 Assume 64bit address size\n"));
11406 fprintf (stream, _(" addr32 Assume 32bit address size\n"));
11407 fprintf (stream, _(" addr16 Assume 16bit address size\n"));
11408 fprintf (stream, _(" data32 Assume 32bit data size\n"));
11409 fprintf (stream, _(" data16 Assume 16bit data size\n"));
11410 fprintf (stream, _(" suffix Always display instruction suffix in AT&T syntax\n"));
5db04b09
L
11411 fprintf (stream, _(" amd64 Display instruction in AMD64 ISA\n"));
11412 fprintf (stream, _(" intel64 Display instruction in Intel64 ISA\n"));
f59a29b9
L
11413}
11414
592d1631 11415/* Bad opcode. */
bf890a93 11416static const struct dis386 bad_opcode = { "(bad)", { XX }, 0 };
592d1631 11417
b844680a
L
11418/* Get a pointer to struct dis386 with a valid name. */
11419
11420static const struct dis386 *
8bb15339 11421get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
b844680a 11422{
91d6fa6a 11423 int vindex, vex_table_index;
b844680a
L
11424
11425 if (dp->name != NULL)
11426 return dp;
11427
11428 switch (dp->op[0].bytemode)
11429 {
1ceb70f8
L
11430 case USE_REG_TABLE:
11431 dp = &reg_table[dp->op[1].bytemode][modrm.reg];
11432 break;
11433
11434 case USE_MOD_TABLE:
91d6fa6a
NC
11435 vindex = modrm.mod == 0x3 ? 1 : 0;
11436 dp = &mod_table[dp->op[1].bytemode][vindex];
1ceb70f8
L
11437 break;
11438
11439 case USE_RM_TABLE:
11440 dp = &rm_table[dp->op[1].bytemode][modrm.rm];
b844680a
L
11441 break;
11442
4e7d34a6 11443 case USE_PREFIX_TABLE:
c0f3af97 11444 if (need_vex)
b844680a 11445 {
c0f3af97
L
11446 /* The prefix in VEX is implicit. */
11447 switch (vex.prefix)
11448 {
11449 case 0:
91d6fa6a 11450 vindex = 0;
c0f3af97
L
11451 break;
11452 case REPE_PREFIX_OPCODE:
91d6fa6a 11453 vindex = 1;
c0f3af97
L
11454 break;
11455 case DATA_PREFIX_OPCODE:
91d6fa6a 11456 vindex = 2;
c0f3af97
L
11457 break;
11458 case REPNE_PREFIX_OPCODE:
91d6fa6a 11459 vindex = 3;
c0f3af97
L
11460 break;
11461 default:
11462 abort ();
11463 break;
11464 }
b844680a 11465 }
7bb15c6f 11466 else
b844680a 11467 {
285ca992
L
11468 int last_prefix = -1;
11469 int prefix = 0;
91d6fa6a 11470 vindex = 0;
285ca992
L
11471 /* We check PREFIX_REPNZ and PREFIX_REPZ before PREFIX_DATA.
11472 When there are multiple PREFIX_REPNZ and PREFIX_REPZ, the
11473 last one wins. */
11474 if ((prefixes & (PREFIX_REPZ | PREFIX_REPNZ)) != 0)
b844680a 11475 {
285ca992 11476 if (last_repz_prefix > last_repnz_prefix)
c0f3af97 11477 {
285ca992
L
11478 vindex = 1;
11479 prefix = PREFIX_REPZ;
11480 last_prefix = last_repz_prefix;
c0f3af97
L
11481 }
11482 else
b844680a 11483 {
285ca992
L
11484 vindex = 3;
11485 prefix = PREFIX_REPNZ;
11486 last_prefix = last_repnz_prefix;
b844680a 11487 }
285ca992 11488
507bd325
L
11489 /* Check if prefix should be ignored. */
11490 if ((((prefix_table[dp->op[1].bytemode][vindex].prefix_requirement
11491 & PREFIX_IGNORED) >> PREFIX_IGNORED_SHIFT)
11492 & prefix) != 0)
285ca992
L
11493 vindex = 0;
11494 }
11495
11496 if (vindex == 0 && (prefixes & PREFIX_DATA) != 0)
11497 {
11498 vindex = 2;
11499 prefix = PREFIX_DATA;
11500 last_prefix = last_data_prefix;
11501 }
11502
11503 if (vindex != 0)
11504 {
11505 used_prefixes |= prefix;
11506 all_prefixes[last_prefix] = 0;
b844680a
L
11507 }
11508 }
91d6fa6a 11509 dp = &prefix_table[dp->op[1].bytemode][vindex];
b844680a
L
11510 break;
11511
4e7d34a6 11512 case USE_X86_64_TABLE:
91d6fa6a
NC
11513 vindex = address_mode == mode_64bit ? 1 : 0;
11514 dp = &x86_64_table[dp->op[1].bytemode][vindex];
b844680a
L
11515 break;
11516
4e7d34a6 11517 case USE_3BYTE_TABLE:
8bb15339 11518 FETCH_DATA (info, codep + 2);
91d6fa6a
NC
11519 vindex = *codep++;
11520 dp = &three_byte_table[dp->op[1].bytemode][vindex];
285ca992 11521 end_codep = codep;
8bb15339
L
11522 modrm.mod = (*codep >> 6) & 3;
11523 modrm.reg = (*codep >> 3) & 7;
11524 modrm.rm = *codep & 7;
11525 break;
11526
c0f3af97
L
11527 case USE_VEX_LEN_TABLE:
11528 if (!need_vex)
11529 abort ();
11530
11531 switch (vex.length)
11532 {
11533 case 128:
91d6fa6a 11534 vindex = 0;
c0f3af97
L
11535 break;
11536 case 256:
91d6fa6a 11537 vindex = 1;
c0f3af97
L
11538 break;
11539 default:
11540 abort ();
11541 break;
11542 }
11543
91d6fa6a 11544 dp = &vex_len_table[dp->op[1].bytemode][vindex];
c0f3af97
L
11545 break;
11546
f88c9eb0
SP
11547 case USE_XOP_8F_TABLE:
11548 FETCH_DATA (info, codep + 3);
11549 /* All bits in the REX prefix are ignored. */
11550 rex_ignored = rex;
11551 rex = ~(*codep >> 5) & 0x7;
11552
11553 /* VEX_TABLE_INDEX is the mmmmm part of the XOP byte 1 "RCB.mmmmm". */
11554 switch ((*codep & 0x1f))
11555 {
11556 default:
f07af43e
L
11557 dp = &bad_opcode;
11558 return dp;
5dd85c99
SP
11559 case 0x8:
11560 vex_table_index = XOP_08;
11561 break;
f88c9eb0
SP
11562 case 0x9:
11563 vex_table_index = XOP_09;
11564 break;
11565 case 0xa:
11566 vex_table_index = XOP_0A;
11567 break;
11568 }
11569 codep++;
11570 vex.w = *codep & 0x80;
11571 if (vex.w && address_mode == mode_64bit)
11572 rex |= REX_W;
11573
11574 vex.register_specifier = (~(*codep >> 3)) & 0xf;
abfcb414 11575 if (address_mode != mode_64bit)
f07af43e 11576 {
abfcb414
AP
11577 /* In 16/32-bit mode REX_B is silently ignored. */
11578 rex &= ~REX_B;
f07af43e 11579 }
f88c9eb0
SP
11580
11581 vex.length = (*codep & 0x4) ? 256 : 128;
11582 switch ((*codep & 0x3))
11583 {
11584 case 0:
f88c9eb0
SP
11585 break;
11586 case 1:
11587 vex.prefix = DATA_PREFIX_OPCODE;
11588 break;
11589 case 2:
11590 vex.prefix = REPE_PREFIX_OPCODE;
11591 break;
11592 case 3:
11593 vex.prefix = REPNE_PREFIX_OPCODE;
11594 break;
11595 }
11596 need_vex = 1;
11597 need_vex_reg = 1;
11598 codep++;
91d6fa6a
NC
11599 vindex = *codep++;
11600 dp = &xop_table[vex_table_index][vindex];
c48244a5 11601
285ca992 11602 end_codep = codep;
c48244a5
SP
11603 FETCH_DATA (info, codep + 1);
11604 modrm.mod = (*codep >> 6) & 3;
11605 modrm.reg = (*codep >> 3) & 7;
11606 modrm.rm = *codep & 7;
f88c9eb0
SP
11607 break;
11608
c0f3af97 11609 case USE_VEX_C4_TABLE:
43234a1e 11610 /* VEX prefix. */
c0f3af97
L
11611 FETCH_DATA (info, codep + 3);
11612 /* All bits in the REX prefix are ignored. */
11613 rex_ignored = rex;
11614 rex = ~(*codep >> 5) & 0x7;
11615 switch ((*codep & 0x1f))
11616 {
11617 default:
f07af43e
L
11618 dp = &bad_opcode;
11619 return dp;
c0f3af97 11620 case 0x1:
f88c9eb0 11621 vex_table_index = VEX_0F;
c0f3af97
L
11622 break;
11623 case 0x2:
f88c9eb0 11624 vex_table_index = VEX_0F38;
c0f3af97
L
11625 break;
11626 case 0x3:
f88c9eb0 11627 vex_table_index = VEX_0F3A;
c0f3af97
L
11628 break;
11629 }
11630 codep++;
11631 vex.w = *codep & 0x80;
9889cbb1 11632 if (address_mode == mode_64bit)
f07af43e 11633 {
9889cbb1
L
11634 if (vex.w)
11635 rex |= REX_W;
9889cbb1
L
11636 }
11637 else
11638 {
11639 /* For the 3-byte VEX prefix in 32-bit mode, the REX_B bit
11640 is ignored, other REX bits are 0 and the highest bit in
5f847646 11641 VEX.vvvv is also ignored (but we mustn't clear it here). */
9889cbb1 11642 rex = 0;
f07af43e 11643 }
5f847646 11644 vex.register_specifier = (~(*codep >> 3)) & 0xf;
c0f3af97
L
11645 vex.length = (*codep & 0x4) ? 256 : 128;
11646 switch ((*codep & 0x3))
11647 {
11648 case 0:
c0f3af97
L
11649 break;
11650 case 1:
11651 vex.prefix = DATA_PREFIX_OPCODE;
11652 break;
11653 case 2:
11654 vex.prefix = REPE_PREFIX_OPCODE;
11655 break;
11656 case 3:
11657 vex.prefix = REPNE_PREFIX_OPCODE;
11658 break;
11659 }
11660 need_vex = 1;
11661 need_vex_reg = 1;
11662 codep++;
91d6fa6a
NC
11663 vindex = *codep++;
11664 dp = &vex_table[vex_table_index][vindex];
285ca992 11665 end_codep = codep;
53c4d625
JB
11666 /* There is no MODRM byte for VEX0F 77. */
11667 if (vex_table_index != VEX_0F || vindex != 0x77)
c0f3af97
L
11668 {
11669 FETCH_DATA (info, codep + 1);
11670 modrm.mod = (*codep >> 6) & 3;
11671 modrm.reg = (*codep >> 3) & 7;
11672 modrm.rm = *codep & 7;
11673 }
11674 break;
11675
11676 case USE_VEX_C5_TABLE:
43234a1e 11677 /* VEX prefix. */
c0f3af97
L
11678 FETCH_DATA (info, codep + 2);
11679 /* All bits in the REX prefix are ignored. */
11680 rex_ignored = rex;
11681 rex = (*codep & 0x80) ? 0 : REX_R;
11682
9889cbb1
L
11683 /* For the 2-byte VEX prefix in 32-bit mode, the highest bit in
11684 VEX.vvvv is 1. */
c0f3af97 11685 vex.register_specifier = (~(*codep >> 3)) & 0xf;
c0f3af97
L
11686 vex.length = (*codep & 0x4) ? 256 : 128;
11687 switch ((*codep & 0x3))
11688 {
11689 case 0:
c0f3af97
L
11690 break;
11691 case 1:
11692 vex.prefix = DATA_PREFIX_OPCODE;
11693 break;
11694 case 2:
11695 vex.prefix = REPE_PREFIX_OPCODE;
11696 break;
11697 case 3:
11698 vex.prefix = REPNE_PREFIX_OPCODE;
11699 break;
11700 }
11701 need_vex = 1;
11702 need_vex_reg = 1;
11703 codep++;
91d6fa6a
NC
11704 vindex = *codep++;
11705 dp = &vex_table[dp->op[1].bytemode][vindex];
285ca992 11706 end_codep = codep;
53c4d625
JB
11707 /* There is no MODRM byte for VEX 77. */
11708 if (vindex != 0x77)
c0f3af97
L
11709 {
11710 FETCH_DATA (info, codep + 1);
11711 modrm.mod = (*codep >> 6) & 3;
11712 modrm.reg = (*codep >> 3) & 7;
11713 modrm.rm = *codep & 7;
11714 }
11715 break;
11716
9e30b8e0
L
11717 case USE_VEX_W_TABLE:
11718 if (!need_vex)
11719 abort ();
11720
11721 dp = &vex_w_table[dp->op[1].bytemode][vex.w ? 1 : 0];
11722 break;
11723
43234a1e
L
11724 case USE_EVEX_TABLE:
11725 two_source_ops = 0;
11726 /* EVEX prefix. */
11727 vex.evex = 1;
11728 FETCH_DATA (info, codep + 4);
11729 /* All bits in the REX prefix are ignored. */
11730 rex_ignored = rex;
11731 /* The first byte after 0x62. */
11732 rex = ~(*codep >> 5) & 0x7;
11733 vex.r = *codep & 0x10;
11734 switch ((*codep & 0xf))
11735 {
11736 default:
11737 return &bad_opcode;
11738 case 0x1:
11739 vex_table_index = EVEX_0F;
11740 break;
11741 case 0x2:
11742 vex_table_index = EVEX_0F38;
11743 break;
11744 case 0x3:
11745 vex_table_index = EVEX_0F3A;
11746 break;
11747 }
11748
11749 /* The second byte after 0x62. */
11750 codep++;
11751 vex.w = *codep & 0x80;
11752 if (vex.w && address_mode == mode_64bit)
11753 rex |= REX_W;
11754
11755 vex.register_specifier = (~(*codep >> 3)) & 0xf;
43234a1e
L
11756
11757 /* The U bit. */
11758 if (!(*codep & 0x4))
11759 return &bad_opcode;
11760
11761 switch ((*codep & 0x3))
11762 {
11763 case 0:
43234a1e
L
11764 break;
11765 case 1:
11766 vex.prefix = DATA_PREFIX_OPCODE;
11767 break;
11768 case 2:
11769 vex.prefix = REPE_PREFIX_OPCODE;
11770 break;
11771 case 3:
11772 vex.prefix = REPNE_PREFIX_OPCODE;
11773 break;
11774 }
11775
11776 /* The third byte after 0x62. */
11777 codep++;
11778
11779 /* Remember the static rounding bits. */
11780 vex.ll = (*codep >> 5) & 3;
11781 vex.b = (*codep & 0x10) != 0;
11782
11783 vex.v = *codep & 0x8;
11784 vex.mask_register_specifier = *codep & 0x7;
11785 vex.zeroing = *codep & 0x80;
11786
5f847646
JB
11787 if (address_mode != mode_64bit)
11788 {
11789 /* In 16/32-bit mode silently ignore following bits. */
11790 rex &= ~REX_B;
11791 vex.r = 1;
11792 vex.v = 1;
11793 }
11794
43234a1e
L
11795 need_vex = 1;
11796 need_vex_reg = 1;
11797 codep++;
11798 vindex = *codep++;
11799 dp = &evex_table[vex_table_index][vindex];
285ca992 11800 end_codep = codep;
43234a1e
L
11801 FETCH_DATA (info, codep + 1);
11802 modrm.mod = (*codep >> 6) & 3;
11803 modrm.reg = (*codep >> 3) & 7;
11804 modrm.rm = *codep & 7;
11805
11806 /* Set vector length. */
11807 if (modrm.mod == 3 && vex.b)
11808 vex.length = 512;
11809 else
11810 {
11811 switch (vex.ll)
11812 {
11813 case 0x0:
11814 vex.length = 128;
11815 break;
11816 case 0x1:
11817 vex.length = 256;
11818 break;
11819 case 0x2:
11820 vex.length = 512;
11821 break;
11822 default:
11823 return &bad_opcode;
11824 }
11825 }
11826 break;
11827
592d1631
L
11828 case 0:
11829 dp = &bad_opcode;
11830 break;
11831
b844680a 11832 default:
d34b5006 11833 abort ();
b844680a
L
11834 }
11835
11836 if (dp->name != NULL)
11837 return dp;
11838 else
8bb15339 11839 return get_valid_dis386 (dp, info);
b844680a
L
11840}
11841
dfc8cf43 11842static void
55cf16e1 11843get_sib (disassemble_info *info, int sizeflag)
dfc8cf43
L
11844{
11845 /* If modrm.mod == 3, operand must be register. */
11846 if (need_modrm
55cf16e1 11847 && ((sizeflag & AFLAG) || address_mode == mode_64bit)
dfc8cf43
L
11848 && modrm.mod != 3
11849 && modrm.rm == 4)
11850 {
11851 FETCH_DATA (info, codep + 2);
11852 sib.index = (codep [1] >> 3) & 7;
11853 sib.scale = (codep [1] >> 6) & 3;
11854 sib.base = codep [1] & 7;
11855 }
11856}
11857
e396998b 11858static int
26ca5450 11859print_insn (bfd_vma pc, disassemble_info *info)
252b5132 11860{
2da11e11 11861 const struct dis386 *dp;
252b5132 11862 int i;
ce518a5f 11863 char *op_txt[MAX_OPERANDS];
252b5132 11864 int needcomma;
df18fdba 11865 int sizeflag, orig_sizeflag;
e396998b 11866 const char *p;
252b5132 11867 struct dis_private priv;
f16cd0d5 11868 int prefix_length;
252b5132 11869
d7921315
L
11870 priv.orig_sizeflag = AFLAG | DFLAG;
11871 if ((info->mach & bfd_mach_i386_i386) != 0)
cb712a9e 11872 address_mode = mode_32bit;
2da11e11 11873 else if (info->mach == bfd_mach_i386_i8086)
d7921315
L
11874 {
11875 address_mode = mode_16bit;
11876 priv.orig_sizeflag = 0;
11877 }
2da11e11 11878 else
d7921315
L
11879 address_mode = mode_64bit;
11880
11881 if (intel_syntax == (char) -1)
11882 intel_syntax = (info->mach & bfd_mach_i386_intel_syntax) != 0;
e396998b
AM
11883
11884 for (p = info->disassembler_options; p != NULL; )
11885 {
5db04b09
L
11886 if (CONST_STRNEQ (p, "amd64"))
11887 isa64 = amd64;
11888 else if (CONST_STRNEQ (p, "intel64"))
11889 isa64 = intel64;
11890 else if (CONST_STRNEQ (p, "x86-64"))
e396998b 11891 {
cb712a9e 11892 address_mode = mode_64bit;
e396998b
AM
11893 priv.orig_sizeflag = AFLAG | DFLAG;
11894 }
0112cd26 11895 else if (CONST_STRNEQ (p, "i386"))
e396998b 11896 {
cb712a9e 11897 address_mode = mode_32bit;
e396998b
AM
11898 priv.orig_sizeflag = AFLAG | DFLAG;
11899 }
0112cd26 11900 else if (CONST_STRNEQ (p, "i8086"))
e396998b 11901 {
cb712a9e 11902 address_mode = mode_16bit;
e396998b
AM
11903 priv.orig_sizeflag = 0;
11904 }
0112cd26 11905 else if (CONST_STRNEQ (p, "intel"))
e396998b
AM
11906 {
11907 intel_syntax = 1;
9d141669
L
11908 if (CONST_STRNEQ (p + 5, "-mnemonic"))
11909 intel_mnemonic = 1;
e396998b 11910 }
0112cd26 11911 else if (CONST_STRNEQ (p, "att"))
e396998b
AM
11912 {
11913 intel_syntax = 0;
9d141669
L
11914 if (CONST_STRNEQ (p + 3, "-mnemonic"))
11915 intel_mnemonic = 0;
e396998b 11916 }
0112cd26 11917 else if (CONST_STRNEQ (p, "addr"))
e396998b 11918 {
f59a29b9
L
11919 if (address_mode == mode_64bit)
11920 {
11921 if (p[4] == '3' && p[5] == '2')
11922 priv.orig_sizeflag &= ~AFLAG;
11923 else if (p[4] == '6' && p[5] == '4')
11924 priv.orig_sizeflag |= AFLAG;
11925 }
11926 else
11927 {
11928 if (p[4] == '1' && p[5] == '6')
11929 priv.orig_sizeflag &= ~AFLAG;
11930 else if (p[4] == '3' && p[5] == '2')
11931 priv.orig_sizeflag |= AFLAG;
11932 }
e396998b 11933 }
0112cd26 11934 else if (CONST_STRNEQ (p, "data"))
e396998b
AM
11935 {
11936 if (p[4] == '1' && p[5] == '6')
11937 priv.orig_sizeflag &= ~DFLAG;
11938 else if (p[4] == '3' && p[5] == '2')
11939 priv.orig_sizeflag |= DFLAG;
11940 }
0112cd26 11941 else if (CONST_STRNEQ (p, "suffix"))
e396998b
AM
11942 priv.orig_sizeflag |= SUFFIX_ALWAYS;
11943
11944 p = strchr (p, ',');
11945 if (p != NULL)
11946 p++;
11947 }
11948
c0f92bf9
L
11949 if (address_mode == mode_64bit && sizeof (bfd_vma) < 8)
11950 {
11951 (*info->fprintf_func) (info->stream,
11952 _("64-bit address is disabled"));
11953 return -1;
11954 }
11955
e396998b
AM
11956 if (intel_syntax)
11957 {
11958 names64 = intel_names64;
11959 names32 = intel_names32;
11960 names16 = intel_names16;
11961 names8 = intel_names8;
11962 names8rex = intel_names8rex;
11963 names_seg = intel_names_seg;
b9733481 11964 names_mm = intel_names_mm;
7e8b059b 11965 names_bnd = intel_names_bnd;
b9733481
L
11966 names_xmm = intel_names_xmm;
11967 names_ymm = intel_names_ymm;
43234a1e 11968 names_zmm = intel_names_zmm;
db51cc60
L
11969 index64 = intel_index64;
11970 index32 = intel_index32;
43234a1e 11971 names_mask = intel_names_mask;
e396998b
AM
11972 index16 = intel_index16;
11973 open_char = '[';
11974 close_char = ']';
11975 separator_char = '+';
11976 scale_char = '*';
11977 }
11978 else
11979 {
11980 names64 = att_names64;
11981 names32 = att_names32;
11982 names16 = att_names16;
11983 names8 = att_names8;
11984 names8rex = att_names8rex;
11985 names_seg = att_names_seg;
b9733481 11986 names_mm = att_names_mm;
7e8b059b 11987 names_bnd = att_names_bnd;
b9733481
L
11988 names_xmm = att_names_xmm;
11989 names_ymm = att_names_ymm;
43234a1e 11990 names_zmm = att_names_zmm;
db51cc60
L
11991 index64 = att_index64;
11992 index32 = att_index32;
43234a1e 11993 names_mask = att_names_mask;
e396998b
AM
11994 index16 = att_index16;
11995 open_char = '(';
11996 close_char = ')';
11997 separator_char = ',';
11998 scale_char = ',';
11999 }
2da11e11 12000
4fe53c98 12001 /* The output looks better if we put 7 bytes on a line, since that
8a9036a4
L
12002 puts most long word instructions on a single line. Use 8 bytes
12003 for Intel L1OM. */
d7921315 12004 if ((info->mach & bfd_mach_l1om) != 0)
8a9036a4
L
12005 info->bytes_per_line = 8;
12006 else
12007 info->bytes_per_line = 7;
252b5132 12008
26ca5450 12009 info->private_data = &priv;
252b5132
RH
12010 priv.max_fetched = priv.the_buffer;
12011 priv.insn_start = pc;
252b5132
RH
12012
12013 obuf[0] = 0;
ce518a5f
L
12014 for (i = 0; i < MAX_OPERANDS; ++i)
12015 {
12016 op_out[i][0] = 0;
12017 op_index[i] = -1;
12018 }
252b5132
RH
12019
12020 the_info = info;
12021 start_pc = pc;
e396998b
AM
12022 start_codep = priv.the_buffer;
12023 codep = priv.the_buffer;
252b5132 12024
8df14d78 12025 if (OPCODES_SIGSETJMP (priv.bailout) != 0)
5076851f 12026 {
7d421014
ILT
12027 const char *name;
12028
5076851f 12029 /* Getting here means we tried for data but didn't get it. That
e396998b
AM
12030 means we have an incomplete instruction of some sort. Just
12031 print the first byte as a prefix or a .byte pseudo-op. */
12032 if (codep > priv.the_buffer)
5076851f 12033 {
e396998b 12034 name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
7d421014
ILT
12035 if (name != NULL)
12036 (*info->fprintf_func) (info->stream, "%s", name);
12037 else
5076851f 12038 {
7d421014
ILT
12039 /* Just print the first byte as a .byte instruction. */
12040 (*info->fprintf_func) (info->stream, ".byte 0x%x",
e396998b 12041 (unsigned int) priv.the_buffer[0]);
5076851f 12042 }
5076851f 12043
7d421014 12044 return 1;
5076851f
ILT
12045 }
12046
12047 return -1;
12048 }
12049
52b15da3 12050 obufp = obuf;
f16cd0d5
L
12051 sizeflag = priv.orig_sizeflag;
12052
12053 if (!ckprefix () || rex_used)
12054 {
12055 /* Too many prefixes or unused REX prefixes. */
12056 for (i = 0;
f6dd4781 12057 i < (int) ARRAY_SIZE (all_prefixes) && all_prefixes[i];
f16cd0d5 12058 i++)
de882298 12059 (*info->fprintf_func) (info->stream, "%s%s",
6c067bbb 12060 i == 0 ? "" : " ",
f16cd0d5 12061 prefix_name (all_prefixes[i], sizeflag));
de882298 12062 return i;
f16cd0d5 12063 }
252b5132
RH
12064
12065 insn_codep = codep;
12066
12067 FETCH_DATA (info, codep + 1);
12068 two_source_ops = (*codep == 0x62) || (*codep == 0xc8);
12069
3e7d61b2 12070 if (((prefixes & PREFIX_FWAIT)
f16cd0d5 12071 && ((*codep < 0xd8) || (*codep > 0xdf))))
252b5132 12072 {
86a80a50 12073 /* Handle prefixes before fwait. */
d9949a36 12074 for (i = 0; i < fwait_prefix && all_prefixes[i];
86a80a50
L
12075 i++)
12076 (*info->fprintf_func) (info->stream, "%s ",
12077 prefix_name (all_prefixes[i], sizeflag));
f16cd0d5 12078 (*info->fprintf_func) (info->stream, "fwait");
86a80a50 12079 return i + 1;
252b5132
RH
12080 }
12081
252b5132
RH
12082 if (*codep == 0x0f)
12083 {
eec0f4ca 12084 unsigned char threebyte;
5f40e14d
JS
12085
12086 codep++;
12087 FETCH_DATA (info, codep + 1);
12088 threebyte = *codep;
eec0f4ca 12089 dp = &dis386_twobyte[threebyte];
252b5132 12090 need_modrm = twobyte_has_modrm[*codep];
eec0f4ca 12091 codep++;
252b5132
RH
12092 }
12093 else
12094 {
6439fc28 12095 dp = &dis386[*codep];
252b5132 12096 need_modrm = onebyte_has_modrm[*codep];
eec0f4ca 12097 codep++;
252b5132 12098 }
246c51aa 12099
df18fdba
L
12100 /* Save sizeflag for printing the extra prefixes later before updating
12101 it for mnemonic and operand processing. The prefix names depend
12102 only on the address mode. */
12103 orig_sizeflag = sizeflag;
c608c12e 12104 if (prefixes & PREFIX_ADDR)
df18fdba 12105 sizeflag ^= AFLAG;
b844680a 12106 if ((prefixes & PREFIX_DATA))
df18fdba 12107 sizeflag ^= DFLAG;
3ffd33cf 12108
285ca992 12109 end_codep = codep;
8bb15339 12110 if (need_modrm)
252b5132
RH
12111 {
12112 FETCH_DATA (info, codep + 1);
7967e09e
L
12113 modrm.mod = (*codep >> 6) & 3;
12114 modrm.reg = (*codep >> 3) & 7;
12115 modrm.rm = *codep & 7;
252b5132
RH
12116 }
12117
42d5f9c6
MS
12118 need_vex = 0;
12119 need_vex_reg = 0;
12120 vex_w_done = 0;
caf0678c 12121 memset (&vex, 0, sizeof (vex));
55b126d4 12122
ce518a5f 12123 if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE)
252b5132 12124 {
55cf16e1 12125 get_sib (info, sizeflag);
252b5132
RH
12126 dofloat (sizeflag);
12127 }
12128 else
12129 {
8bb15339 12130 dp = get_valid_dis386 (dp, info);
b844680a 12131 if (dp != NULL && putop (dp->name, sizeflag) == 0)
6c067bbb 12132 {
55cf16e1 12133 get_sib (info, sizeflag);
ce518a5f
L
12134 for (i = 0; i < MAX_OPERANDS; ++i)
12135 {
246c51aa 12136 obufp = op_out[i];
ce518a5f
L
12137 op_ad = MAX_OPERANDS - 1 - i;
12138 if (dp->op[i].rtn)
12139 (*dp->op[i].rtn) (dp->op[i].bytemode, sizeflag);
43234a1e
L
12140 /* For EVEX instruction after the last operand masking
12141 should be printed. */
12142 if (i == 0 && vex.evex)
12143 {
12144 /* Don't print {%k0}. */
12145 if (vex.mask_register_specifier)
12146 {
12147 oappend ("{");
12148 oappend (names_mask[vex.mask_register_specifier]);
12149 oappend ("}");
12150 }
12151 if (vex.zeroing)
12152 oappend ("{z}");
12153 }
ce518a5f 12154 }
6439fc28 12155 }
252b5132
RH
12156 }
12157
d869730d 12158 /* Check if the REX prefix is used. */
e2e6193d 12159 if (rex_ignored == 0 && (rex ^ rex_used) == 0 && last_rex_prefix >= 0)
f16cd0d5
L
12160 all_prefixes[last_rex_prefix] = 0;
12161
5e6718e4 12162 /* Check if the SEG prefix is used. */
f16cd0d5
L
12163 if ((prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS | PREFIX_ES
12164 | PREFIX_FS | PREFIX_GS)) != 0
285ca992 12165 && (used_prefixes & active_seg_prefix) != 0)
f16cd0d5
L
12166 all_prefixes[last_seg_prefix] = 0;
12167
5e6718e4 12168 /* Check if the ADDR prefix is used. */
f16cd0d5
L
12169 if ((prefixes & PREFIX_ADDR) != 0
12170 && (used_prefixes & PREFIX_ADDR) != 0)
12171 all_prefixes[last_addr_prefix] = 0;
12172
df18fdba
L
12173 /* Check if the DATA prefix is used. */
12174 if ((prefixes & PREFIX_DATA) != 0
12175 && (used_prefixes & PREFIX_DATA) != 0)
12176 all_prefixes[last_data_prefix] = 0;
f16cd0d5 12177
df18fdba 12178 /* Print the extra prefixes. */
f16cd0d5 12179 prefix_length = 0;
f310f33d 12180 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
f16cd0d5
L
12181 if (all_prefixes[i])
12182 {
12183 const char *name;
df18fdba 12184 name = prefix_name (all_prefixes[i], orig_sizeflag);
f16cd0d5
L
12185 if (name == NULL)
12186 abort ();
12187 prefix_length += strlen (name) + 1;
12188 (*info->fprintf_func) (info->stream, "%s ", name);
12189 }
b844680a 12190
285ca992
L
12191 /* If the mandatory PREFIX_REPZ/PREFIX_REPNZ/PREFIX_DATA prefix is
12192 unused, opcode is invalid. Since the PREFIX_DATA prefix may be
12193 used by putop and MMX/SSE operand and may be overriden by the
12194 PREFIX_REPZ/PREFIX_REPNZ fix, we check the PREFIX_DATA prefix
12195 separately. */
3888916d 12196 if (dp->prefix_requirement == PREFIX_OPCODE
285ca992
L
12197 && dp != &bad_opcode
12198 && (((prefixes
12199 & (PREFIX_REPZ | PREFIX_REPNZ)) != 0
12200 && (used_prefixes
12201 & (PREFIX_REPZ | PREFIX_REPNZ)) == 0)
12202 || ((((prefixes
12203 & (PREFIX_REPZ | PREFIX_REPNZ | PREFIX_DATA))
12204 == PREFIX_DATA)
12205 && (used_prefixes & PREFIX_DATA) == 0))))
12206 {
12207 (*info->fprintf_func) (info->stream, "(bad)");
12208 return end_codep - priv.the_buffer;
12209 }
12210
f16cd0d5
L
12211 /* Check maximum code length. */
12212 if ((codep - start_codep) > MAX_CODE_LENGTH)
12213 {
12214 (*info->fprintf_func) (info->stream, "(bad)");
12215 return MAX_CODE_LENGTH;
12216 }
b844680a 12217
ea397f5b 12218 obufp = mnemonicendp;
f16cd0d5 12219 for (i = strlen (obuf) + prefix_length; i < 6; i++)
252b5132
RH
12220 oappend (" ");
12221 oappend (" ");
12222 (*info->fprintf_func) (info->stream, "%s", obuf);
12223
12224 /* The enter and bound instructions are printed with operands in the same
12225 order as the intel book; everything else is printed in reverse order. */
2da11e11 12226 if (intel_syntax || two_source_ops)
252b5132 12227 {
185b1163
L
12228 bfd_vma riprel;
12229
ce518a5f 12230 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 12231 op_txt[i] = op_out[i];
246c51aa 12232
3a8547d2
JB
12233 if (intel_syntax && dp && dp->op[2].rtn == OP_Rounding
12234 && dp->op[3].rtn == OP_E && dp->op[4].rtn == NULL)
12235 {
12236 op_txt[2] = op_out[3];
12237 op_txt[3] = op_out[2];
12238 }
12239
ce518a5f
L
12240 for (i = 0; i < (MAX_OPERANDS >> 1); ++i)
12241 {
6c067bbb
RM
12242 op_ad = op_index[i];
12243 op_index[i] = op_index[MAX_OPERANDS - 1 - i];
12244 op_index[MAX_OPERANDS - 1 - i] = op_ad;
185b1163
L
12245 riprel = op_riprel[i];
12246 op_riprel[i] = op_riprel [MAX_OPERANDS - 1 - i];
12247 op_riprel[MAX_OPERANDS - 1 - i] = riprel;
ce518a5f 12248 }
252b5132
RH
12249 }
12250 else
12251 {
ce518a5f 12252 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 12253 op_txt[MAX_OPERANDS - 1 - i] = op_out[i];
050dfa73
MM
12254 }
12255
ce518a5f
L
12256 needcomma = 0;
12257 for (i = 0; i < MAX_OPERANDS; ++i)
12258 if (*op_txt[i])
12259 {
12260 if (needcomma)
12261 (*info->fprintf_func) (info->stream, ",");
12262 if (op_index[i] != -1 && !op_riprel[i])
12263 (*info->print_address_func) ((bfd_vma) op_address[op_index[i]], info);
12264 else
12265 (*info->fprintf_func) (info->stream, "%s", op_txt[i]);
12266 needcomma = 1;
12267 }
050dfa73 12268
ce518a5f 12269 for (i = 0; i < MAX_OPERANDS; i++)
52b15da3
JH
12270 if (op_index[i] != -1 && op_riprel[i])
12271 {
12272 (*info->fprintf_func) (info->stream, " # ");
4fd7268a 12273 (*info->print_address_func) ((bfd_vma) (start_pc + (codep - start_codep)
52b15da3 12274 + op_address[op_index[i]]), info);
185b1163 12275 break;
52b15da3 12276 }
e396998b 12277 return codep - priv.the_buffer;
252b5132
RH
12278}
12279
6439fc28 12280static const char *float_mem[] = {
252b5132 12281 /* d8 */
7c52e0e8
L
12282 "fadd{s|}",
12283 "fmul{s|}",
12284 "fcom{s|}",
12285 "fcomp{s|}",
12286 "fsub{s|}",
12287 "fsubr{s|}",
12288 "fdiv{s|}",
12289 "fdivr{s|}",
db6eb5be 12290 /* d9 */
7c52e0e8 12291 "fld{s|}",
252b5132 12292 "(bad)",
7c52e0e8
L
12293 "fst{s|}",
12294 "fstp{s|}",
9306ca4a 12295 "fldenvIC",
252b5132 12296 "fldcw",
9306ca4a 12297 "fNstenvIC",
252b5132
RH
12298 "fNstcw",
12299 /* da */
7c52e0e8
L
12300 "fiadd{l|}",
12301 "fimul{l|}",
12302 "ficom{l|}",
12303 "ficomp{l|}",
12304 "fisub{l|}",
12305 "fisubr{l|}",
12306 "fidiv{l|}",
12307 "fidivr{l|}",
252b5132 12308 /* db */
7c52e0e8
L
12309 "fild{l|}",
12310 "fisttp{l|}",
12311 "fist{l|}",
12312 "fistp{l|}",
252b5132 12313 "(bad)",
6439fc28 12314 "fld{t||t|}",
252b5132 12315 "(bad)",
6439fc28 12316 "fstp{t||t|}",
252b5132 12317 /* dc */
7c52e0e8
L
12318 "fadd{l|}",
12319 "fmul{l|}",
12320 "fcom{l|}",
12321 "fcomp{l|}",
12322 "fsub{l|}",
12323 "fsubr{l|}",
12324 "fdiv{l|}",
12325 "fdivr{l|}",
252b5132 12326 /* dd */
7c52e0e8
L
12327 "fld{l|}",
12328 "fisttp{ll|}",
12329 "fst{l||}",
12330 "fstp{l|}",
9306ca4a 12331 "frstorIC",
252b5132 12332 "(bad)",
9306ca4a 12333 "fNsaveIC",
252b5132
RH
12334 "fNstsw",
12335 /* de */
ac465521
JB
12336 "fiadd{s|}",
12337 "fimul{s|}",
12338 "ficom{s|}",
12339 "ficomp{s|}",
12340 "fisub{s|}",
12341 "fisubr{s|}",
12342 "fidiv{s|}",
12343 "fidivr{s|}",
252b5132 12344 /* df */
ac465521
JB
12345 "fild{s|}",
12346 "fisttp{s|}",
12347 "fist{s|}",
12348 "fistp{s|}",
252b5132 12349 "fbld",
7c52e0e8 12350 "fild{ll|}",
252b5132 12351 "fbstp",
7c52e0e8 12352 "fistp{ll|}",
1d9f512f
AM
12353};
12354
12355static const unsigned char float_mem_mode[] = {
12356 /* d8 */
12357 d_mode,
12358 d_mode,
12359 d_mode,
12360 d_mode,
12361 d_mode,
12362 d_mode,
12363 d_mode,
12364 d_mode,
12365 /* d9 */
12366 d_mode,
12367 0,
12368 d_mode,
12369 d_mode,
12370 0,
12371 w_mode,
12372 0,
12373 w_mode,
12374 /* da */
12375 d_mode,
12376 d_mode,
12377 d_mode,
12378 d_mode,
12379 d_mode,
12380 d_mode,
12381 d_mode,
12382 d_mode,
12383 /* db */
12384 d_mode,
12385 d_mode,
12386 d_mode,
12387 d_mode,
12388 0,
9306ca4a 12389 t_mode,
1d9f512f 12390 0,
9306ca4a 12391 t_mode,
1d9f512f
AM
12392 /* dc */
12393 q_mode,
12394 q_mode,
12395 q_mode,
12396 q_mode,
12397 q_mode,
12398 q_mode,
12399 q_mode,
12400 q_mode,
12401 /* dd */
12402 q_mode,
12403 q_mode,
12404 q_mode,
12405 q_mode,
12406 0,
12407 0,
12408 0,
12409 w_mode,
12410 /* de */
12411 w_mode,
12412 w_mode,
12413 w_mode,
12414 w_mode,
12415 w_mode,
12416 w_mode,
12417 w_mode,
12418 w_mode,
12419 /* df */
12420 w_mode,
12421 w_mode,
12422 w_mode,
12423 w_mode,
9306ca4a 12424 t_mode,
1d9f512f 12425 q_mode,
9306ca4a 12426 t_mode,
1d9f512f 12427 q_mode
252b5132
RH
12428};
12429
ce518a5f
L
12430#define ST { OP_ST, 0 }
12431#define STi { OP_STi, 0 }
252b5132 12432
48c97fa1
L
12433#define FGRPd9_2 NULL, { { NULL, 1 } }, 0
12434#define FGRPd9_4 NULL, { { NULL, 2 } }, 0
12435#define FGRPd9_5 NULL, { { NULL, 3 } }, 0
12436#define FGRPd9_6 NULL, { { NULL, 4 } }, 0
12437#define FGRPd9_7 NULL, { { NULL, 5 } }, 0
12438#define FGRPda_5 NULL, { { NULL, 6 } }, 0
12439#define FGRPdb_4 NULL, { { NULL, 7 } }, 0
12440#define FGRPde_3 NULL, { { NULL, 8 } }, 0
12441#define FGRPdf_4 NULL, { { NULL, 9 } }, 0
252b5132 12442
2da11e11 12443static const struct dis386 float_reg[][8] = {
252b5132
RH
12444 /* d8 */
12445 {
bf890a93
IT
12446 { "fadd", { ST, STi }, 0 },
12447 { "fmul", { ST, STi }, 0 },
12448 { "fcom", { STi }, 0 },
12449 { "fcomp", { STi }, 0 },
12450 { "fsub", { ST, STi }, 0 },
12451 { "fsubr", { ST, STi }, 0 },
12452 { "fdiv", { ST, STi }, 0 },
12453 { "fdivr", { ST, STi }, 0 },
252b5132
RH
12454 },
12455 /* d9 */
12456 {
bf890a93
IT
12457 { "fld", { STi }, 0 },
12458 { "fxch", { STi }, 0 },
252b5132 12459 { FGRPd9_2 },
592d1631 12460 { Bad_Opcode },
252b5132
RH
12461 { FGRPd9_4 },
12462 { FGRPd9_5 },
12463 { FGRPd9_6 },
12464 { FGRPd9_7 },
12465 },
12466 /* da */
12467 {
bf890a93
IT
12468 { "fcmovb", { ST, STi }, 0 },
12469 { "fcmove", { ST, STi }, 0 },
12470 { "fcmovbe",{ ST, STi }, 0 },
12471 { "fcmovu", { ST, STi }, 0 },
592d1631 12472 { Bad_Opcode },
252b5132 12473 { FGRPda_5 },
592d1631
L
12474 { Bad_Opcode },
12475 { Bad_Opcode },
252b5132
RH
12476 },
12477 /* db */
12478 {
bf890a93
IT
12479 { "fcmovnb",{ ST, STi }, 0 },
12480 { "fcmovne",{ ST, STi }, 0 },
12481 { "fcmovnbe",{ ST, STi }, 0 },
12482 { "fcmovnu",{ ST, STi }, 0 },
252b5132 12483 { FGRPdb_4 },
bf890a93
IT
12484 { "fucomi", { ST, STi }, 0 },
12485 { "fcomi", { ST, STi }, 0 },
592d1631 12486 { Bad_Opcode },
252b5132
RH
12487 },
12488 /* dc */
12489 {
bf890a93
IT
12490 { "fadd", { STi, ST }, 0 },
12491 { "fmul", { STi, ST }, 0 },
592d1631
L
12492 { Bad_Opcode },
12493 { Bad_Opcode },
d53e6b98
JB
12494 { "fsub{!M|r}", { STi, ST }, 0 },
12495 { "fsub{M|}", { STi, ST }, 0 },
12496 { "fdiv{!M|r}", { STi, ST }, 0 },
12497 { "fdiv{M|}", { STi, ST }, 0 },
252b5132
RH
12498 },
12499 /* dd */
12500 {
bf890a93 12501 { "ffree", { STi }, 0 },
592d1631 12502 { Bad_Opcode },
bf890a93
IT
12503 { "fst", { STi }, 0 },
12504 { "fstp", { STi }, 0 },
12505 { "fucom", { STi }, 0 },
12506 { "fucomp", { STi }, 0 },
592d1631
L
12507 { Bad_Opcode },
12508 { Bad_Opcode },
252b5132
RH
12509 },
12510 /* de */
12511 {
bf890a93
IT
12512 { "faddp", { STi, ST }, 0 },
12513 { "fmulp", { STi, ST }, 0 },
592d1631 12514 { Bad_Opcode },
252b5132 12515 { FGRPde_3 },
d53e6b98
JB
12516 { "fsub{!M|r}p", { STi, ST }, 0 },
12517 { "fsub{M|}p", { STi, ST }, 0 },
12518 { "fdiv{!M|r}p", { STi, ST }, 0 },
12519 { "fdiv{M|}p", { STi, ST }, 0 },
252b5132
RH
12520 },
12521 /* df */
12522 {
bf890a93 12523 { "ffreep", { STi }, 0 },
592d1631
L
12524 { Bad_Opcode },
12525 { Bad_Opcode },
12526 { Bad_Opcode },
252b5132 12527 { FGRPdf_4 },
bf890a93
IT
12528 { "fucomip", { ST, STi }, 0 },
12529 { "fcomip", { ST, STi }, 0 },
592d1631 12530 { Bad_Opcode },
252b5132
RH
12531 },
12532};
12533
252b5132 12534static char *fgrps[][8] = {
48c97fa1
L
12535 /* Bad opcode 0 */
12536 {
12537 "(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12538 },
12539
12540 /* d9_2 1 */
252b5132
RH
12541 {
12542 "fnop","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12543 },
12544
48c97fa1 12545 /* d9_4 2 */
252b5132
RH
12546 {
12547 "fchs","fabs","(bad)","(bad)","ftst","fxam","(bad)","(bad)",
12548 },
12549
48c97fa1 12550 /* d9_5 3 */
252b5132
RH
12551 {
12552 "fld1","fldl2t","fldl2e","fldpi","fldlg2","fldln2","fldz","(bad)",
12553 },
12554
48c97fa1 12555 /* d9_6 4 */
252b5132
RH
12556 {
12557 "f2xm1","fyl2x","fptan","fpatan","fxtract","fprem1","fdecstp","fincstp",
12558 },
12559
48c97fa1 12560 /* d9_7 5 */
252b5132
RH
12561 {
12562 "fprem","fyl2xp1","fsqrt","fsincos","frndint","fscale","fsin","fcos",
12563 },
12564
48c97fa1 12565 /* da_5 6 */
252b5132
RH
12566 {
12567 "(bad)","fucompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12568 },
12569
48c97fa1 12570 /* db_4 7 */
252b5132 12571 {
309d3373
JB
12572 "fNeni(8087 only)","fNdisi(8087 only)","fNclex","fNinit",
12573 "fNsetpm(287 only)","frstpm(287 only)","(bad)","(bad)",
252b5132
RH
12574 },
12575
48c97fa1 12576 /* de_3 8 */
252b5132
RH
12577 {
12578 "(bad)","fcompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12579 },
12580
48c97fa1 12581 /* df_4 9 */
252b5132
RH
12582 {
12583 "fNstsw","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12584 },
12585};
12586
b6169b20
L
12587static void
12588swap_operand (void)
12589{
12590 mnemonicendp[0] = '.';
12591 mnemonicendp[1] = 's';
12592 mnemonicendp += 2;
12593}
12594
b844680a
L
12595static void
12596OP_Skip_MODRM (int bytemode ATTRIBUTE_UNUSED,
12597 int sizeflag ATTRIBUTE_UNUSED)
12598{
12599 /* Skip mod/rm byte. */
12600 MODRM_CHECK;
12601 codep++;
12602}
12603
252b5132 12604static void
26ca5450 12605dofloat (int sizeflag)
252b5132 12606{
2da11e11 12607 const struct dis386 *dp;
252b5132
RH
12608 unsigned char floatop;
12609
12610 floatop = codep[-1];
12611
7967e09e 12612 if (modrm.mod != 3)
252b5132 12613 {
7967e09e 12614 int fp_indx = (floatop - 0xd8) * 8 + modrm.reg;
1d9f512f
AM
12615
12616 putop (float_mem[fp_indx], sizeflag);
ce518a5f 12617 obufp = op_out[0];
6e50d963 12618 op_ad = 2;
1d9f512f 12619 OP_E (float_mem_mode[fp_indx], sizeflag);
252b5132
RH
12620 return;
12621 }
6608db57 12622 /* Skip mod/rm byte. */
4bba6815 12623 MODRM_CHECK;
252b5132
RH
12624 codep++;
12625
7967e09e 12626 dp = &float_reg[floatop - 0xd8][modrm.reg];
252b5132
RH
12627 if (dp->name == NULL)
12628 {
7967e09e 12629 putop (fgrps[dp->op[0].bytemode][modrm.rm], sizeflag);
252b5132 12630
6608db57 12631 /* Instruction fnstsw is only one with strange arg. */
252b5132 12632 if (floatop == 0xdf && codep[-1] == 0xe0)
ce518a5f 12633 strcpy (op_out[0], names16[0]);
252b5132
RH
12634 }
12635 else
12636 {
12637 putop (dp->name, sizeflag);
12638
ce518a5f 12639 obufp = op_out[0];
6e50d963 12640 op_ad = 2;
ce518a5f
L
12641 if (dp->op[0].rtn)
12642 (*dp->op[0].rtn) (dp->op[0].bytemode, sizeflag);
6e50d963 12643
ce518a5f 12644 obufp = op_out[1];
6e50d963 12645 op_ad = 1;
ce518a5f
L
12646 if (dp->op[1].rtn)
12647 (*dp->op[1].rtn) (dp->op[1].bytemode, sizeflag);
252b5132
RH
12648 }
12649}
12650
9ce09ba2
RM
12651/* Like oappend (below), but S is a string starting with '%'.
12652 In Intel syntax, the '%' is elided. */
12653static void
12654oappend_maybe_intel (const char *s)
12655{
12656 oappend (s + intel_syntax);
12657}
12658
252b5132 12659static void
26ca5450 12660OP_ST (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 12661{
9ce09ba2 12662 oappend_maybe_intel ("%st");
252b5132
RH
12663}
12664
252b5132 12665static void
26ca5450 12666OP_STi (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 12667{
7967e09e 12668 sprintf (scratchbuf, "%%st(%d)", modrm.rm);
9ce09ba2 12669 oappend_maybe_intel (scratchbuf);
252b5132
RH
12670}
12671
6608db57 12672/* Capital letters in template are macros. */
6439fc28 12673static int
d3ce72d0 12674putop (const char *in_template, int sizeflag)
252b5132 12675{
2da11e11 12676 const char *p;
9306ca4a 12677 int alt = 0;
9d141669 12678 int cond = 1;
98b528ac
L
12679 unsigned int l = 0, len = 1;
12680 char last[4];
12681
12682#define SAVE_LAST(c) \
12683 if (l < len && l < sizeof (last)) \
12684 last[l++] = c; \
12685 else \
12686 abort ();
252b5132 12687
d3ce72d0 12688 for (p = in_template; *p; p++)
252b5132
RH
12689 {
12690 switch (*p)
12691 {
12692 default:
12693 *obufp++ = *p;
12694 break;
98b528ac
L
12695 case '%':
12696 len++;
12697 break;
9d141669
L
12698 case '!':
12699 cond = 0;
12700 break;
6439fc28 12701 case '{':
6439fc28 12702 if (intel_syntax)
6439fc28
AM
12703 {
12704 while (*++p != '|')
7c52e0e8
L
12705 if (*p == '}' || *p == '\0')
12706 abort ();
6439fc28 12707 }
9306ca4a
JB
12708 /* Fall through. */
12709 case 'I':
12710 alt = 1;
12711 continue;
6439fc28
AM
12712 case '|':
12713 while (*++p != '}')
12714 {
12715 if (*p == '\0')
12716 abort ();
12717 }
12718 break;
12719 case '}':
12720 break;
252b5132 12721 case 'A':
db6eb5be
AM
12722 if (intel_syntax)
12723 break;
7967e09e 12724 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
252b5132
RH
12725 *obufp++ = 'b';
12726 break;
12727 case 'B':
4b06377f
L
12728 if (l == 0 && len == 1)
12729 {
12730case_B:
12731 if (intel_syntax)
12732 break;
12733 if (sizeflag & SUFFIX_ALWAYS)
12734 *obufp++ = 'b';
12735 }
12736 else
12737 {
12738 if (l != 1
12739 || len != 2
12740 || last[0] != 'L')
12741 {
12742 SAVE_LAST (*p);
12743 break;
12744 }
12745
12746 if (address_mode == mode_64bit
12747 && !(prefixes & PREFIX_ADDR))
12748 {
12749 *obufp++ = 'a';
12750 *obufp++ = 'b';
12751 *obufp++ = 's';
12752 }
12753
12754 goto case_B;
12755 }
252b5132 12756 break;
9306ca4a
JB
12757 case 'C':
12758 if (intel_syntax && !alt)
12759 break;
12760 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
12761 {
12762 if (sizeflag & DFLAG)
12763 *obufp++ = intel_syntax ? 'd' : 'l';
12764 else
12765 *obufp++ = intel_syntax ? 'w' : 's';
12766 used_prefixes |= (prefixes & PREFIX_DATA);
12767 }
12768 break;
ed7841b3
JB
12769 case 'D':
12770 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
12771 break;
161a04f6 12772 USED_REX (REX_W);
7967e09e 12773 if (modrm.mod == 3)
ed7841b3 12774 {
161a04f6 12775 if (rex & REX_W)
ed7841b3 12776 *obufp++ = 'q';
ed7841b3 12777 else
f16cd0d5
L
12778 {
12779 if (sizeflag & DFLAG)
12780 *obufp++ = intel_syntax ? 'd' : 'l';
12781 else
12782 *obufp++ = 'w';
12783 used_prefixes |= (prefixes & PREFIX_DATA);
12784 }
ed7841b3
JB
12785 }
12786 else
12787 *obufp++ = 'w';
12788 break;
252b5132 12789 case 'E': /* For jcxz/jecxz */
cb712a9e 12790 if (address_mode == mode_64bit)
c1a64871
JH
12791 {
12792 if (sizeflag & AFLAG)
12793 *obufp++ = 'r';
12794 else
12795 *obufp++ = 'e';
12796 }
12797 else
12798 if (sizeflag & AFLAG)
12799 *obufp++ = 'e';
3ffd33cf
AM
12800 used_prefixes |= (prefixes & PREFIX_ADDR);
12801 break;
12802 case 'F':
db6eb5be
AM
12803 if (intel_syntax)
12804 break;
e396998b 12805 if ((prefixes & PREFIX_ADDR) || (sizeflag & SUFFIX_ALWAYS))
3ffd33cf
AM
12806 {
12807 if (sizeflag & AFLAG)
cb712a9e 12808 *obufp++ = address_mode == mode_64bit ? 'q' : 'l';
3ffd33cf 12809 else
cb712a9e 12810 *obufp++ = address_mode == mode_64bit ? 'l' : 'w';
3ffd33cf
AM
12811 used_prefixes |= (prefixes & PREFIX_ADDR);
12812 }
252b5132 12813 break;
52fd6d94
JB
12814 case 'G':
12815 if (intel_syntax || (obufp[-1] != 's' && !(sizeflag & SUFFIX_ALWAYS)))
12816 break;
161a04f6 12817 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
12818 *obufp++ = 'l';
12819 else
12820 *obufp++ = 'w';
161a04f6 12821 if (!(rex & REX_W))
52fd6d94
JB
12822 used_prefixes |= (prefixes & PREFIX_DATA);
12823 break;
5dd0794d 12824 case 'H':
db6eb5be
AM
12825 if (intel_syntax)
12826 break;
5dd0794d
AM
12827 if ((prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_CS
12828 || (prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_DS)
12829 {
12830 used_prefixes |= prefixes & (PREFIX_CS | PREFIX_DS);
12831 *obufp++ = ',';
12832 *obufp++ = 'p';
12833 if (prefixes & PREFIX_DS)
12834 *obufp++ = 't';
12835 else
12836 *obufp++ = 'n';
12837 }
12838 break;
9306ca4a
JB
12839 case 'J':
12840 if (intel_syntax)
12841 break;
12842 *obufp++ = 'l';
12843 break;
42903f7f
L
12844 case 'K':
12845 USED_REX (REX_W);
12846 if (rex & REX_W)
12847 *obufp++ = 'q';
12848 else
12849 *obufp++ = 'd';
12850 break;
6dd5059a 12851 case 'Z':
04d824a4
JB
12852 if (l != 0 || len != 1)
12853 {
12854 if (l != 1 || len != 2 || last[0] != 'X')
12855 {
12856 SAVE_LAST (*p);
12857 break;
12858 }
12859 if (!need_vex || !vex.evex)
12860 abort ();
12861 if (intel_syntax
12862 || ((modrm.mod == 3 || vex.b) && !(sizeflag & SUFFIX_ALWAYS)))
12863 break;
12864 switch (vex.length)
12865 {
12866 case 128:
12867 *obufp++ = 'x';
12868 break;
12869 case 256:
12870 *obufp++ = 'y';
12871 break;
12872 case 512:
12873 *obufp++ = 'z';
12874 break;
12875 default:
12876 abort ();
12877 }
12878 break;
12879 }
6dd5059a
L
12880 if (intel_syntax)
12881 break;
12882 if (address_mode == mode_64bit && (sizeflag & SUFFIX_ALWAYS))
12883 {
12884 *obufp++ = 'q';
12885 break;
12886 }
12887 /* Fall through. */
98b528ac 12888 goto case_L;
252b5132 12889 case 'L':
98b528ac
L
12890 if (l != 0 || len != 1)
12891 {
12892 SAVE_LAST (*p);
12893 break;
12894 }
12895case_L:
db6eb5be
AM
12896 if (intel_syntax)
12897 break;
252b5132
RH
12898 if (sizeflag & SUFFIX_ALWAYS)
12899 *obufp++ = 'l';
252b5132 12900 break;
9d141669
L
12901 case 'M':
12902 if (intel_mnemonic != cond)
12903 *obufp++ = 'r';
12904 break;
252b5132
RH
12905 case 'N':
12906 if ((prefixes & PREFIX_FWAIT) == 0)
12907 *obufp++ = 'n';
7d421014
ILT
12908 else
12909 used_prefixes |= PREFIX_FWAIT;
252b5132 12910 break;
52b15da3 12911 case 'O':
161a04f6
L
12912 USED_REX (REX_W);
12913 if (rex & REX_W)
6439fc28 12914 *obufp++ = 'o';
a35ca55a
JB
12915 else if (intel_syntax && (sizeflag & DFLAG))
12916 *obufp++ = 'q';
52b15da3
JH
12917 else
12918 *obufp++ = 'd';
161a04f6 12919 if (!(rex & REX_W))
a35ca55a 12920 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 12921 break;
07f5af7d
L
12922 case '&':
12923 if (!intel_syntax
12924 && address_mode == mode_64bit
12925 && isa64 == intel64)
12926 {
12927 *obufp++ = 'q';
12928 break;
12929 }
12930 /* Fall through. */
6439fc28 12931 case 'T':
d9e3625e
L
12932 if (!intel_syntax
12933 && address_mode == mode_64bit
7bb15c6f 12934 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
12935 {
12936 *obufp++ = 'q';
12937 break;
12938 }
6608db57 12939 /* Fall through. */
4b4c407a 12940 goto case_P;
252b5132 12941 case 'P':
4b4c407a 12942 if (l == 0 && len == 1)
d9e3625e 12943 {
4b4c407a
L
12944case_P:
12945 if (intel_syntax)
d9e3625e 12946 {
4b4c407a
L
12947 if ((rex & REX_W) == 0
12948 && (prefixes & PREFIX_DATA))
12949 {
12950 if ((sizeflag & DFLAG) == 0)
12951 *obufp++ = 'w';
12952 used_prefixes |= (prefixes & PREFIX_DATA);
12953 }
12954 break;
12955 }
12956 if ((prefixes & PREFIX_DATA)
12957 || (rex & REX_W)
12958 || (sizeflag & SUFFIX_ALWAYS))
12959 {
12960 USED_REX (REX_W);
12961 if (rex & REX_W)
12962 *obufp++ = 'q';
12963 else
12964 {
12965 if (sizeflag & DFLAG)
12966 *obufp++ = 'l';
12967 else
12968 *obufp++ = 'w';
12969 used_prefixes |= (prefixes & PREFIX_DATA);
12970 }
d9e3625e 12971 }
d9e3625e 12972 }
4b4c407a 12973 else
252b5132 12974 {
4b4c407a
L
12975 if (l != 1 || len != 2 || last[0] != 'L')
12976 {
12977 SAVE_LAST (*p);
12978 break;
12979 }
12980
12981 if ((prefixes & PREFIX_DATA)
12982 || (rex & REX_W)
12983 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 12984 {
4b4c407a
L
12985 USED_REX (REX_W);
12986 if (rex & REX_W)
12987 *obufp++ = 'q';
12988 else
12989 {
12990 if (sizeflag & DFLAG)
12991 *obufp++ = intel_syntax ? 'd' : 'l';
12992 else
12993 *obufp++ = 'w';
12994 used_prefixes |= (prefixes & PREFIX_DATA);
12995 }
52b15da3 12996 }
252b5132
RH
12997 }
12998 break;
6439fc28 12999 case 'U':
db6eb5be
AM
13000 if (intel_syntax)
13001 break;
7bb15c6f 13002 if (address_mode == mode_64bit
6c067bbb 13003 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28 13004 {
7967e09e 13005 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
1a114b12 13006 *obufp++ = 'q';
6439fc28
AM
13007 break;
13008 }
6608db57 13009 /* Fall through. */
98b528ac 13010 goto case_Q;
252b5132 13011 case 'Q':
98b528ac 13012 if (l == 0 && len == 1)
252b5132 13013 {
98b528ac
L
13014case_Q:
13015 if (intel_syntax && !alt)
13016 break;
13017 USED_REX (REX_W);
13018 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 13019 {
98b528ac
L
13020 if (rex & REX_W)
13021 *obufp++ = 'q';
52b15da3 13022 else
98b528ac
L
13023 {
13024 if (sizeflag & DFLAG)
13025 *obufp++ = intel_syntax ? 'd' : 'l';
13026 else
13027 *obufp++ = 'w';
f16cd0d5 13028 used_prefixes |= (prefixes & PREFIX_DATA);
98b528ac 13029 }
52b15da3 13030 }
98b528ac
L
13031 }
13032 else
13033 {
13034 if (l != 1 || len != 2 || last[0] != 'L')
13035 {
13036 SAVE_LAST (*p);
13037 break;
13038 }
13039 if (intel_syntax
13040 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
13041 break;
13042 if ((rex & REX_W))
13043 {
13044 USED_REX (REX_W);
13045 *obufp++ = 'q';
13046 }
13047 else
13048 *obufp++ = 'l';
252b5132
RH
13049 }
13050 break;
13051 case 'R':
161a04f6
L
13052 USED_REX (REX_W);
13053 if (rex & REX_W)
a35ca55a
JB
13054 *obufp++ = 'q';
13055 else if (sizeflag & DFLAG)
c608c12e 13056 {
a35ca55a 13057 if (intel_syntax)
c608c12e 13058 *obufp++ = 'd';
c608c12e 13059 else
a35ca55a 13060 *obufp++ = 'l';
c608c12e 13061 }
252b5132 13062 else
a35ca55a
JB
13063 *obufp++ = 'w';
13064 if (intel_syntax && !p[1]
161a04f6 13065 && ((rex & REX_W) || (sizeflag & DFLAG)))
a35ca55a 13066 *obufp++ = 'e';
161a04f6 13067 if (!(rex & REX_W))
52b15da3 13068 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132 13069 break;
1a114b12 13070 case 'V':
4b06377f 13071 if (l == 0 && len == 1)
1a114b12 13072 {
4b06377f
L
13073 if (intel_syntax)
13074 break;
7bb15c6f 13075 if (address_mode == mode_64bit
6c067bbb 13076 && ((sizeflag & DFLAG) || (rex & REX_W)))
4b06377f
L
13077 {
13078 if (sizeflag & SUFFIX_ALWAYS)
13079 *obufp++ = 'q';
13080 break;
13081 }
13082 }
13083 else
13084 {
13085 if (l != 1
13086 || len != 2
13087 || last[0] != 'L')
13088 {
13089 SAVE_LAST (*p);
13090 break;
13091 }
13092
13093 if (rex & REX_W)
13094 {
13095 *obufp++ = 'a';
13096 *obufp++ = 'b';
13097 *obufp++ = 's';
13098 }
1a114b12
JB
13099 }
13100 /* Fall through. */
4b06377f 13101 goto case_S;
252b5132 13102 case 'S':
4b06377f 13103 if (l == 0 && len == 1)
252b5132 13104 {
4b06377f
L
13105case_S:
13106 if (intel_syntax)
13107 break;
13108 if (sizeflag & SUFFIX_ALWAYS)
52b15da3 13109 {
4b06377f
L
13110 if (rex & REX_W)
13111 *obufp++ = 'q';
52b15da3 13112 else
4b06377f
L
13113 {
13114 if (sizeflag & DFLAG)
13115 *obufp++ = 'l';
13116 else
13117 *obufp++ = 'w';
13118 used_prefixes |= (prefixes & PREFIX_DATA);
13119 }
13120 }
13121 }
13122 else
13123 {
13124 if (l != 1
13125 || len != 2
13126 || last[0] != 'L')
13127 {
13128 SAVE_LAST (*p);
13129 break;
52b15da3 13130 }
4b06377f
L
13131
13132 if (address_mode == mode_64bit
13133 && !(prefixes & PREFIX_ADDR))
13134 {
13135 *obufp++ = 'a';
13136 *obufp++ = 'b';
13137 *obufp++ = 's';
13138 }
13139
13140 goto case_S;
252b5132 13141 }
252b5132 13142 break;
041bd2e0 13143 case 'X':
c0f3af97
L
13144 if (l != 0 || len != 1)
13145 {
13146 SAVE_LAST (*p);
13147 break;
13148 }
13149 if (need_vex && vex.prefix)
13150 {
13151 if (vex.prefix == DATA_PREFIX_OPCODE)
13152 *obufp++ = 'd';
13153 else
13154 *obufp++ = 's';
13155 }
041bd2e0 13156 else
f16cd0d5
L
13157 {
13158 if (prefixes & PREFIX_DATA)
13159 *obufp++ = 'd';
13160 else
13161 *obufp++ = 's';
13162 used_prefixes |= (prefixes & PREFIX_DATA);
13163 }
041bd2e0 13164 break;
76f227a5 13165 case 'Y':
c0f3af97 13166 if (l == 0 && len == 1)
9646c87b 13167 abort ();
c0f3af97
L
13168 else
13169 {
13170 if (l != 1 || len != 2 || last[0] != 'X')
13171 {
13172 SAVE_LAST (*p);
13173 break;
13174 }
13175 if (!need_vex)
13176 abort ();
13177 if (intel_syntax
04d824a4 13178 || ((modrm.mod == 3 || vex.b) && !(sizeflag & SUFFIX_ALWAYS)))
c0f3af97
L
13179 break;
13180 switch (vex.length)
13181 {
13182 case 128:
13183 *obufp++ = 'x';
13184 break;
13185 case 256:
13186 *obufp++ = 'y';
13187 break;
04d824a4
JB
13188 case 512:
13189 if (!vex.evex)
c0f3af97 13190 default:
04d824a4 13191 abort ();
c0f3af97 13192 }
76f227a5
JH
13193 }
13194 break;
252b5132 13195 case 'W':
0bfee649 13196 if (l == 0 && len == 1)
a35ca55a 13197 {
0bfee649
L
13198 /* operand size flag for cwtl, cbtw */
13199 USED_REX (REX_W);
13200 if (rex & REX_W)
13201 {
13202 if (intel_syntax)
13203 *obufp++ = 'd';
13204 else
13205 *obufp++ = 'l';
13206 }
13207 else if (sizeflag & DFLAG)
13208 *obufp++ = 'w';
a35ca55a 13209 else
0bfee649
L
13210 *obufp++ = 'b';
13211 if (!(rex & REX_W))
13212 used_prefixes |= (prefixes & PREFIX_DATA);
a35ca55a 13213 }
252b5132 13214 else
0bfee649 13215 {
6c30d220
L
13216 if (l != 1
13217 || len != 2
13218 || (last[0] != 'X'
13219 && last[0] != 'L'))
0bfee649
L
13220 {
13221 SAVE_LAST (*p);
13222 break;
13223 }
13224 if (!need_vex)
13225 abort ();
6c30d220
L
13226 if (last[0] == 'X')
13227 *obufp++ = vex.w ? 'd': 's';
13228 else
13229 *obufp++ = vex.w ? 'q': 'd';
0bfee649 13230 }
252b5132 13231 break;
a72d2af2
L
13232 case '^':
13233 if (intel_syntax)
13234 break;
13235 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
13236 {
13237 if (sizeflag & DFLAG)
13238 *obufp++ = 'l';
13239 else
13240 *obufp++ = 'w';
13241 used_prefixes |= (prefixes & PREFIX_DATA);
13242 }
13243 break;
5db04b09
L
13244 case '@':
13245 if (intel_syntax)
13246 break;
13247 if (address_mode == mode_64bit
13248 && (isa64 == intel64
13249 || ((sizeflag & DFLAG) || (rex & REX_W))))
13250 *obufp++ = 'q';
13251 else if ((prefixes & PREFIX_DATA))
13252 {
13253 if (!(sizeflag & DFLAG))
13254 *obufp++ = 'w';
13255 used_prefixes |= (prefixes & PREFIX_DATA);
13256 }
13257 break;
252b5132 13258 }
9306ca4a 13259 alt = 0;
252b5132
RH
13260 }
13261 *obufp = 0;
ea397f5b 13262 mnemonicendp = obufp;
6439fc28 13263 return 0;
252b5132
RH
13264}
13265
13266static void
26ca5450 13267oappend (const char *s)
252b5132 13268{
ea397f5b 13269 obufp = stpcpy (obufp, s);
252b5132
RH
13270}
13271
13272static void
26ca5450 13273append_seg (void)
252b5132 13274{
285ca992
L
13275 /* Only print the active segment register. */
13276 if (!active_seg_prefix)
13277 return;
13278
13279 used_prefixes |= active_seg_prefix;
13280 switch (active_seg_prefix)
7d421014 13281 {
285ca992 13282 case PREFIX_CS:
9ce09ba2 13283 oappend_maybe_intel ("%cs:");
285ca992
L
13284 break;
13285 case PREFIX_DS:
9ce09ba2 13286 oappend_maybe_intel ("%ds:");
285ca992
L
13287 break;
13288 case PREFIX_SS:
9ce09ba2 13289 oappend_maybe_intel ("%ss:");
285ca992
L
13290 break;
13291 case PREFIX_ES:
9ce09ba2 13292 oappend_maybe_intel ("%es:");
285ca992
L
13293 break;
13294 case PREFIX_FS:
9ce09ba2 13295 oappend_maybe_intel ("%fs:");
285ca992
L
13296 break;
13297 case PREFIX_GS:
9ce09ba2 13298 oappend_maybe_intel ("%gs:");
285ca992
L
13299 break;
13300 default:
13301 break;
7d421014 13302 }
252b5132
RH
13303}
13304
13305static void
26ca5450 13306OP_indirE (int bytemode, int sizeflag)
252b5132
RH
13307{
13308 if (!intel_syntax)
13309 oappend ("*");
13310 OP_E (bytemode, sizeflag);
13311}
13312
52b15da3 13313static void
26ca5450 13314print_operand_value (char *buf, int hex, bfd_vma disp)
52b15da3 13315{
cb712a9e 13316 if (address_mode == mode_64bit)
52b15da3
JH
13317 {
13318 if (hex)
13319 {
13320 char tmp[30];
13321 int i;
13322 buf[0] = '0';
13323 buf[1] = 'x';
13324 sprintf_vma (tmp, disp);
6608db57 13325 for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++);
52b15da3
JH
13326 strcpy (buf + 2, tmp + i);
13327 }
13328 else
13329 {
13330 bfd_signed_vma v = disp;
13331 char tmp[30];
13332 int i;
13333 if (v < 0)
13334 {
13335 *(buf++) = '-';
13336 v = -disp;
6608db57 13337 /* Check for possible overflow on 0x8000000000000000. */
52b15da3
JH
13338 if (v < 0)
13339 {
13340 strcpy (buf, "9223372036854775808");
13341 return;
13342 }
13343 }
13344 if (!v)
13345 {
13346 strcpy (buf, "0");
13347 return;
13348 }
13349
13350 i = 0;
13351 tmp[29] = 0;
13352 while (v)
13353 {
6608db57 13354 tmp[28 - i] = (v % 10) + '0';
52b15da3
JH
13355 v /= 10;
13356 i++;
13357 }
13358 strcpy (buf, tmp + 29 - i);
13359 }
13360 }
13361 else
13362 {
13363 if (hex)
13364 sprintf (buf, "0x%x", (unsigned int) disp);
13365 else
13366 sprintf (buf, "%d", (int) disp);
13367 }
13368}
13369
5d669648
L
13370/* Put DISP in BUF as signed hex number. */
13371
13372static void
13373print_displacement (char *buf, bfd_vma disp)
13374{
13375 bfd_signed_vma val = disp;
13376 char tmp[30];
13377 int i, j = 0;
13378
13379 if (val < 0)
13380 {
13381 buf[j++] = '-';
13382 val = -disp;
13383
13384 /* Check for possible overflow. */
13385 if (val < 0)
13386 {
13387 switch (address_mode)
13388 {
13389 case mode_64bit:
13390 strcpy (buf + j, "0x8000000000000000");
13391 break;
13392 case mode_32bit:
13393 strcpy (buf + j, "0x80000000");
13394 break;
13395 case mode_16bit:
13396 strcpy (buf + j, "0x8000");
13397 break;
13398 }
13399 return;
13400 }
13401 }
13402
13403 buf[j++] = '0';
13404 buf[j++] = 'x';
13405
0af1713e 13406 sprintf_vma (tmp, (bfd_vma) val);
5d669648
L
13407 for (i = 0; tmp[i] == '0'; i++)
13408 continue;
13409 if (tmp[i] == '\0')
13410 i--;
13411 strcpy (buf + j, tmp + i);
13412}
13413
3f31e633
JB
13414static void
13415intel_operand_size (int bytemode, int sizeflag)
13416{
43234a1e
L
13417 if (vex.evex
13418 && vex.b
13419 && (bytemode == x_mode
13420 || bytemode == evex_half_bcst_xmmq_mode))
13421 {
13422 if (vex.w)
13423 oappend ("QWORD PTR ");
13424 else
13425 oappend ("DWORD PTR ");
13426 return;
13427 }
3f31e633
JB
13428 switch (bytemode)
13429 {
13430 case b_mode:
b6169b20 13431 case b_swap_mode:
42903f7f 13432 case dqb_mode:
1ba585e8 13433 case db_mode:
3f31e633
JB
13434 oappend ("BYTE PTR ");
13435 break;
13436 case w_mode:
1ba585e8 13437 case dw_mode:
3f31e633
JB
13438 case dqw_mode:
13439 oappend ("WORD PTR ");
13440 break;
07f5af7d
L
13441 case indir_v_mode:
13442 if (address_mode == mode_64bit && isa64 == intel64)
13443 {
13444 oappend ("QWORD PTR ");
13445 break;
13446 }
1a0670f3 13447 /* Fall through. */
1a114b12 13448 case stack_v_mode:
7bb15c6f 13449 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
3f31e633
JB
13450 {
13451 oappend ("QWORD PTR ");
3f31e633
JB
13452 break;
13453 }
1a0670f3 13454 /* Fall through. */
3f31e633 13455 case v_mode:
b6169b20 13456 case v_swap_mode:
3f31e633 13457 case dq_mode:
161a04f6
L
13458 USED_REX (REX_W);
13459 if (rex & REX_W)
3f31e633 13460 oappend ("QWORD PTR ");
3f31e633 13461 else
f16cd0d5
L
13462 {
13463 if ((sizeflag & DFLAG) || bytemode == dq_mode)
13464 oappend ("DWORD PTR ");
13465 else
13466 oappend ("WORD PTR ");
13467 used_prefixes |= (prefixes & PREFIX_DATA);
13468 }
3f31e633 13469 break;
52fd6d94 13470 case z_mode:
161a04f6 13471 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
13472 *obufp++ = 'D';
13473 oappend ("WORD PTR ");
161a04f6 13474 if (!(rex & REX_W))
52fd6d94
JB
13475 used_prefixes |= (prefixes & PREFIX_DATA);
13476 break;
34b772a6
JB
13477 case a_mode:
13478 if (sizeflag & DFLAG)
13479 oappend ("QWORD PTR ");
13480 else
13481 oappend ("DWORD PTR ");
13482 used_prefixes |= (prefixes & PREFIX_DATA);
13483 break;
3f31e633 13484 case d_mode:
539f890d
L
13485 case d_scalar_mode:
13486 case d_scalar_swap_mode:
fa99fab2 13487 case d_swap_mode:
42903f7f 13488 case dqd_mode:
3f31e633
JB
13489 oappend ("DWORD PTR ");
13490 break;
13491 case q_mode:
539f890d
L
13492 case q_scalar_mode:
13493 case q_scalar_swap_mode:
b6169b20 13494 case q_swap_mode:
3f31e633
JB
13495 oappend ("QWORD PTR ");
13496 break;
d20dee9e 13497 case dqa_mode:
3f31e633 13498 case m_mode:
cb712a9e 13499 if (address_mode == mode_64bit)
3f31e633
JB
13500 oappend ("QWORD PTR ");
13501 else
13502 oappend ("DWORD PTR ");
13503 break;
13504 case f_mode:
13505 if (sizeflag & DFLAG)
13506 oappend ("FWORD PTR ");
13507 else
13508 oappend ("DWORD PTR ");
13509 used_prefixes |= (prefixes & PREFIX_DATA);
13510 break;
13511 case t_mode:
13512 oappend ("TBYTE PTR ");
13513 break;
13514 case x_mode:
b6169b20 13515 case x_swap_mode:
43234a1e
L
13516 case evex_x_gscat_mode:
13517 case evex_x_nobcst_mode:
53467f57
IT
13518 case b_scalar_mode:
13519 case w_scalar_mode:
c0f3af97
L
13520 if (need_vex)
13521 {
13522 switch (vex.length)
13523 {
13524 case 128:
13525 oappend ("XMMWORD PTR ");
13526 break;
13527 case 256:
13528 oappend ("YMMWORD PTR ");
13529 break;
43234a1e
L
13530 case 512:
13531 oappend ("ZMMWORD PTR ");
13532 break;
c0f3af97
L
13533 default:
13534 abort ();
13535 }
13536 }
13537 else
13538 oappend ("XMMWORD PTR ");
13539 break;
13540 case xmm_mode:
3f31e633
JB
13541 oappend ("XMMWORD PTR ");
13542 break;
43234a1e
L
13543 case ymm_mode:
13544 oappend ("YMMWORD PTR ");
13545 break;
c0f3af97 13546 case xmmq_mode:
43234a1e 13547 case evex_half_bcst_xmmq_mode:
c0f3af97
L
13548 if (!need_vex)
13549 abort ();
13550
13551 switch (vex.length)
13552 {
13553 case 128:
13554 oappend ("QWORD PTR ");
13555 break;
13556 case 256:
13557 oappend ("XMMWORD PTR ");
13558 break;
43234a1e
L
13559 case 512:
13560 oappend ("YMMWORD PTR ");
13561 break;
c0f3af97
L
13562 default:
13563 abort ();
13564 }
13565 break;
6c30d220
L
13566 case xmm_mb_mode:
13567 if (!need_vex)
13568 abort ();
13569
13570 switch (vex.length)
13571 {
13572 case 128:
13573 case 256:
43234a1e 13574 case 512:
6c30d220
L
13575 oappend ("BYTE PTR ");
13576 break;
13577 default:
13578 abort ();
13579 }
13580 break;
13581 case xmm_mw_mode:
13582 if (!need_vex)
13583 abort ();
13584
13585 switch (vex.length)
13586 {
13587 case 128:
13588 case 256:
43234a1e 13589 case 512:
6c30d220
L
13590 oappend ("WORD PTR ");
13591 break;
13592 default:
13593 abort ();
13594 }
13595 break;
13596 case xmm_md_mode:
13597 if (!need_vex)
13598 abort ();
13599
13600 switch (vex.length)
13601 {
13602 case 128:
13603 case 256:
43234a1e 13604 case 512:
6c30d220
L
13605 oappend ("DWORD PTR ");
13606 break;
13607 default:
13608 abort ();
13609 }
13610 break;
13611 case xmm_mq_mode:
13612 if (!need_vex)
13613 abort ();
13614
13615 switch (vex.length)
13616 {
13617 case 128:
13618 case 256:
43234a1e 13619 case 512:
6c30d220
L
13620 oappend ("QWORD PTR ");
13621 break;
13622 default:
13623 abort ();
13624 }
13625 break;
13626 case xmmdw_mode:
13627 if (!need_vex)
13628 abort ();
13629
13630 switch (vex.length)
13631 {
13632 case 128:
13633 oappend ("WORD PTR ");
13634 break;
13635 case 256:
13636 oappend ("DWORD PTR ");
13637 break;
43234a1e
L
13638 case 512:
13639 oappend ("QWORD PTR ");
13640 break;
6c30d220
L
13641 default:
13642 abort ();
13643 }
13644 break;
13645 case xmmqd_mode:
13646 if (!need_vex)
13647 abort ();
13648
13649 switch (vex.length)
13650 {
13651 case 128:
13652 oappend ("DWORD PTR ");
13653 break;
13654 case 256:
13655 oappend ("QWORD PTR ");
13656 break;
43234a1e
L
13657 case 512:
13658 oappend ("XMMWORD PTR ");
13659 break;
6c30d220
L
13660 default:
13661 abort ();
13662 }
13663 break;
c0f3af97
L
13664 case ymmq_mode:
13665 if (!need_vex)
13666 abort ();
13667
13668 switch (vex.length)
13669 {
13670 case 128:
13671 oappend ("QWORD PTR ");
13672 break;
13673 case 256:
13674 oappend ("YMMWORD PTR ");
13675 break;
43234a1e
L
13676 case 512:
13677 oappend ("ZMMWORD PTR ");
13678 break;
c0f3af97
L
13679 default:
13680 abort ();
13681 }
13682 break;
6c30d220
L
13683 case ymmxmm_mode:
13684 if (!need_vex)
13685 abort ();
13686
13687 switch (vex.length)
13688 {
13689 case 128:
13690 case 256:
13691 oappend ("XMMWORD PTR ");
13692 break;
13693 default:
13694 abort ();
13695 }
13696 break;
fb9c77c7
L
13697 case o_mode:
13698 oappend ("OWORD PTR ");
13699 break;
43234a1e 13700 case xmm_mdq_mode:
0bfee649 13701 case vex_w_dq_mode:
1c480963 13702 case vex_scalar_w_dq_mode:
0bfee649
L
13703 if (!need_vex)
13704 abort ();
13705
13706 if (vex.w)
13707 oappend ("QWORD PTR ");
13708 else
13709 oappend ("DWORD PTR ");
13710 break;
43234a1e
L
13711 case vex_vsib_d_w_dq_mode:
13712 case vex_vsib_q_w_dq_mode:
13713 if (!need_vex)
13714 abort ();
13715
13716 if (!vex.evex)
13717 {
13718 if (vex.w)
13719 oappend ("QWORD PTR ");
13720 else
13721 oappend ("DWORD PTR ");
13722 }
13723 else
13724 {
b28d1bda
IT
13725 switch (vex.length)
13726 {
13727 case 128:
13728 oappend ("XMMWORD PTR ");
13729 break;
13730 case 256:
13731 oappend ("YMMWORD PTR ");
13732 break;
13733 case 512:
13734 oappend ("ZMMWORD PTR ");
13735 break;
13736 default:
13737 abort ();
13738 }
43234a1e
L
13739 }
13740 break;
5fc35d96
IT
13741 case vex_vsib_q_w_d_mode:
13742 case vex_vsib_d_w_d_mode:
b28d1bda 13743 if (!need_vex || !vex.evex)
5fc35d96
IT
13744 abort ();
13745
b28d1bda
IT
13746 switch (vex.length)
13747 {
13748 case 128:
13749 oappend ("QWORD PTR ");
13750 break;
13751 case 256:
13752 oappend ("XMMWORD PTR ");
13753 break;
13754 case 512:
13755 oappend ("YMMWORD PTR ");
13756 break;
13757 default:
13758 abort ();
13759 }
5fc35d96
IT
13760
13761 break;
1ba585e8
IT
13762 case mask_bd_mode:
13763 if (!need_vex || vex.length != 128)
13764 abort ();
13765 if (vex.w)
13766 oappend ("DWORD PTR ");
13767 else
13768 oappend ("BYTE PTR ");
13769 break;
43234a1e
L
13770 case mask_mode:
13771 if (!need_vex)
13772 abort ();
1ba585e8
IT
13773 if (vex.w)
13774 oappend ("QWORD PTR ");
13775 else
13776 oappend ("WORD PTR ");
43234a1e 13777 break;
6c75cc62 13778 case v_bnd_mode:
d276ec69 13779 case v_bndmk_mode:
3f31e633
JB
13780 default:
13781 break;
13782 }
13783}
13784
252b5132 13785static void
c0f3af97 13786OP_E_register (int bytemode, int sizeflag)
252b5132 13787{
c0f3af97
L
13788 int reg = modrm.rm;
13789 const char **names;
252b5132 13790
c0f3af97
L
13791 USED_REX (REX_B);
13792 if ((rex & REX_B))
13793 reg += 8;
252b5132 13794
b6169b20 13795 if ((sizeflag & SUFFIX_ALWAYS)
1ba585e8 13796 && (bytemode == b_swap_mode
9f79e886 13797 || bytemode == bnd_swap_mode
60227d64 13798 || bytemode == v_swap_mode))
b6169b20
L
13799 swap_operand ();
13800
c0f3af97 13801 switch (bytemode)
252b5132 13802 {
c0f3af97 13803 case b_mode:
b6169b20 13804 case b_swap_mode:
c0f3af97
L
13805 USED_REX (0);
13806 if (rex)
13807 names = names8rex;
13808 else
13809 names = names8;
13810 break;
13811 case w_mode:
13812 names = names16;
13813 break;
13814 case d_mode:
1ba585e8
IT
13815 case dw_mode:
13816 case db_mode:
c0f3af97
L
13817 names = names32;
13818 break;
13819 case q_mode:
13820 names = names64;
13821 break;
13822 case m_mode:
6c75cc62 13823 case v_bnd_mode:
c0f3af97
L
13824 names = address_mode == mode_64bit ? names64 : names32;
13825 break;
7e8b059b 13826 case bnd_mode:
9f79e886 13827 case bnd_swap_mode:
0d96e4df
L
13828 if (reg > 0x3)
13829 {
13830 oappend ("(bad)");
13831 return;
13832 }
7e8b059b
L
13833 names = names_bnd;
13834 break;
07f5af7d
L
13835 case indir_v_mode:
13836 if (address_mode == mode_64bit && isa64 == intel64)
13837 {
13838 names = names64;
13839 break;
13840 }
1a0670f3 13841 /* Fall through. */
c0f3af97 13842 case stack_v_mode:
7bb15c6f 13843 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
252b5132 13844 {
c0f3af97 13845 names = names64;
252b5132 13846 break;
252b5132 13847 }
c0f3af97 13848 bytemode = v_mode;
1a0670f3 13849 /* Fall through. */
c0f3af97 13850 case v_mode:
b6169b20 13851 case v_swap_mode:
c0f3af97
L
13852 case dq_mode:
13853 case dqb_mode:
13854 case dqd_mode:
13855 case dqw_mode:
d20dee9e 13856 case dqa_mode:
c0f3af97
L
13857 USED_REX (REX_W);
13858 if (rex & REX_W)
13859 names = names64;
c0f3af97 13860 else
f16cd0d5 13861 {
7bb15c6f 13862 if ((sizeflag & DFLAG)
f16cd0d5
L
13863 || (bytemode != v_mode
13864 && bytemode != v_swap_mode))
13865 names = names32;
13866 else
13867 names = names16;
13868 used_prefixes |= (prefixes & PREFIX_DATA);
13869 }
c0f3af97 13870 break;
de89d0a3
IT
13871 case va_mode:
13872 names = (address_mode == mode_64bit
13873 ? names64 : names32);
13874 if (!(prefixes & PREFIX_ADDR))
aa178437
IT
13875 names = (address_mode == mode_16bit
13876 ? names16 : names);
de89d0a3
IT
13877 else
13878 {
13879 /* Remove "addr16/addr32". */
13880 all_prefixes[last_addr_prefix] = 0;
13881 names = (address_mode != mode_32bit
13882 ? names32 : names16);
13883 used_prefixes |= PREFIX_ADDR;
13884 }
13885 break;
1ba585e8 13886 case mask_bd_mode:
43234a1e 13887 case mask_mode:
9889cbb1
L
13888 if (reg > 0x7)
13889 {
13890 oappend ("(bad)");
13891 return;
13892 }
43234a1e
L
13893 names = names_mask;
13894 break;
c0f3af97
L
13895 case 0:
13896 return;
13897 default:
13898 oappend (INTERNAL_DISASSEMBLER_ERROR);
252b5132
RH
13899 return;
13900 }
c0f3af97
L
13901 oappend (names[reg]);
13902}
13903
13904static void
c1e679ec 13905OP_E_memory (int bytemode, int sizeflag)
c0f3af97
L
13906{
13907 bfd_vma disp = 0;
13908 int add = (rex & REX_B) ? 8 : 0;
13909 int riprel = 0;
43234a1e
L
13910 int shift;
13911
13912 if (vex.evex)
13913 {
13914 /* In EVEX, if operand doesn't allow broadcast, vex.b should be 0. */
13915 if (vex.b
13916 && bytemode != x_mode
90a915bf 13917 && bytemode != xmmq_mode
43234a1e
L
13918 && bytemode != evex_half_bcst_xmmq_mode)
13919 {
13920 BadOp ();
13921 return;
13922 }
13923 switch (bytemode)
13924 {
1ba585e8
IT
13925 case dqw_mode:
13926 case dw_mode:
1ba585e8
IT
13927 shift = 1;
13928 break;
13929 case dqb_mode:
13930 case db_mode:
13931 shift = 0;
13932 break;
43234a1e 13933 case vex_vsib_d_w_dq_mode:
5fc35d96 13934 case vex_vsib_d_w_d_mode:
eaa9d1ad 13935 case vex_vsib_q_w_dq_mode:
5fc35d96 13936 case vex_vsib_q_w_d_mode:
43234a1e
L
13937 case evex_x_gscat_mode:
13938 case xmm_mdq_mode:
13939 shift = vex.w ? 3 : 2;
13940 break;
43234a1e
L
13941 case x_mode:
13942 case evex_half_bcst_xmmq_mode:
90a915bf 13943 case xmmq_mode:
43234a1e
L
13944 if (vex.b)
13945 {
13946 shift = vex.w ? 3 : 2;
13947 break;
13948 }
1a0670f3 13949 /* Fall through. */
43234a1e
L
13950 case xmmqd_mode:
13951 case xmmdw_mode:
43234a1e
L
13952 case ymmq_mode:
13953 case evex_x_nobcst_mode:
13954 case x_swap_mode:
13955 switch (vex.length)
13956 {
13957 case 128:
13958 shift = 4;
13959 break;
13960 case 256:
13961 shift = 5;
13962 break;
13963 case 512:
13964 shift = 6;
13965 break;
13966 default:
13967 abort ();
13968 }
13969 break;
13970 case ymm_mode:
13971 shift = 5;
13972 break;
13973 case xmm_mode:
13974 shift = 4;
13975 break;
13976 case xmm_mq_mode:
13977 case q_mode:
13978 case q_scalar_mode:
13979 case q_swap_mode:
13980 case q_scalar_swap_mode:
13981 shift = 3;
13982 break;
13983 case dqd_mode:
13984 case xmm_md_mode:
13985 case d_mode:
13986 case d_scalar_mode:
13987 case d_swap_mode:
13988 case d_scalar_swap_mode:
13989 shift = 2;
13990 break;
5074ad8a 13991 case w_scalar_mode:
43234a1e
L
13992 case xmm_mw_mode:
13993 shift = 1;
13994 break;
5074ad8a 13995 case b_scalar_mode:
43234a1e
L
13996 case xmm_mb_mode:
13997 shift = 0;
13998 break;
d20dee9e
L
13999 case dqa_mode:
14000 shift = address_mode == mode_64bit ? 3 : 2;
14001 break;
43234a1e
L
14002 default:
14003 abort ();
14004 }
14005 /* Make necessary corrections to shift for modes that need it.
14006 For these modes we currently have shift 4, 5 or 6 depending on
14007 vex.length (it corresponds to xmmword, ymmword or zmmword
14008 operand). We might want to make it 3, 4 or 5 (e.g. for
14009 xmmq_mode). In case of broadcast enabled the corrections
14010 aren't needed, as element size is always 32 or 64 bits. */
90a915bf
IT
14011 if (!vex.b
14012 && (bytemode == xmmq_mode
14013 || bytemode == evex_half_bcst_xmmq_mode))
43234a1e
L
14014 shift -= 1;
14015 else if (bytemode == xmmqd_mode)
14016 shift -= 2;
14017 else if (bytemode == xmmdw_mode)
14018 shift -= 3;
b28d1bda
IT
14019 else if (bytemode == ymmq_mode && vex.length == 128)
14020 shift -= 1;
43234a1e
L
14021 }
14022 else
14023 shift = 0;
252b5132 14024
c0f3af97 14025 USED_REX (REX_B);
3f31e633
JB
14026 if (intel_syntax)
14027 intel_operand_size (bytemode, sizeflag);
252b5132
RH
14028 append_seg ();
14029
5d669648 14030 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132 14031 {
5d669648
L
14032 /* 32/64 bit address mode */
14033 int havedisp;
252b5132
RH
14034 int havesib;
14035 int havebase;
0f7da397 14036 int haveindex;
20afcfb7 14037 int needindex;
1bc60e56 14038 int needaddr32;
82c18208 14039 int base, rbase;
91d6fa6a 14040 int vindex = 0;
252b5132 14041 int scale = 0;
7e8b059b
L
14042 int addr32flag = !((sizeflag & AFLAG)
14043 || bytemode == v_bnd_mode
d276ec69 14044 || bytemode == v_bndmk_mode
9f79e886
JB
14045 || bytemode == bnd_mode
14046 || bytemode == bnd_swap_mode);
6c30d220
L
14047 const char **indexes64 = names64;
14048 const char **indexes32 = names32;
252b5132
RH
14049
14050 havesib = 0;
14051 havebase = 1;
0f7da397 14052 haveindex = 0;
7967e09e 14053 base = modrm.rm;
252b5132
RH
14054
14055 if (base == 4)
14056 {
14057 havesib = 1;
dfc8cf43 14058 vindex = sib.index;
161a04f6
L
14059 USED_REX (REX_X);
14060 if (rex & REX_X)
91d6fa6a 14061 vindex += 8;
6c30d220
L
14062 switch (bytemode)
14063 {
14064 case vex_vsib_d_w_dq_mode:
5fc35d96 14065 case vex_vsib_d_w_d_mode:
6c30d220 14066 case vex_vsib_q_w_dq_mode:
5fc35d96 14067 case vex_vsib_q_w_d_mode:
6c30d220
L
14068 if (!need_vex)
14069 abort ();
43234a1e
L
14070 if (vex.evex)
14071 {
14072 if (!vex.v)
14073 vindex += 16;
14074 }
6c30d220
L
14075
14076 haveindex = 1;
14077 switch (vex.length)
14078 {
14079 case 128:
7bb15c6f 14080 indexes64 = indexes32 = names_xmm;
6c30d220
L
14081 break;
14082 case 256:
5fc35d96
IT
14083 if (!vex.w
14084 || bytemode == vex_vsib_q_w_dq_mode
14085 || bytemode == vex_vsib_q_w_d_mode)
7bb15c6f 14086 indexes64 = indexes32 = names_ymm;
6c30d220 14087 else
7bb15c6f 14088 indexes64 = indexes32 = names_xmm;
6c30d220 14089 break;
43234a1e 14090 case 512:
5fc35d96
IT
14091 if (!vex.w
14092 || bytemode == vex_vsib_q_w_dq_mode
14093 || bytemode == vex_vsib_q_w_d_mode)
43234a1e
L
14094 indexes64 = indexes32 = names_zmm;
14095 else
14096 indexes64 = indexes32 = names_ymm;
14097 break;
6c30d220
L
14098 default:
14099 abort ();
14100 }
14101 break;
14102 default:
14103 haveindex = vindex != 4;
14104 break;
14105 }
14106 scale = sib.scale;
14107 base = sib.base;
252b5132
RH
14108 codep++;
14109 }
82c18208 14110 rbase = base + add;
252b5132 14111
7967e09e 14112 switch (modrm.mod)
252b5132
RH
14113 {
14114 case 0:
82c18208 14115 if (base == 5)
252b5132
RH
14116 {
14117 havebase = 0;
cb712a9e 14118 if (address_mode == mode_64bit && !havesib)
52b15da3
JH
14119 riprel = 1;
14120 disp = get32s ();
d276ec69
JB
14121 if (riprel && bytemode == v_bndmk_mode)
14122 {
14123 oappend ("(bad)");
14124 return;
14125 }
252b5132
RH
14126 }
14127 break;
14128 case 1:
14129 FETCH_DATA (the_info, codep + 1);
14130 disp = *codep++;
14131 if ((disp & 0x80) != 0)
14132 disp -= 0x100;
43234a1e
L
14133 if (vex.evex && shift > 0)
14134 disp <<= shift;
252b5132
RH
14135 break;
14136 case 2:
52b15da3 14137 disp = get32s ();
252b5132
RH
14138 break;
14139 }
14140
1bc60e56
L
14141 needindex = 0;
14142 needaddr32 = 0;
14143 if (havesib
14144 && !havebase
14145 && !haveindex
14146 && address_mode != mode_16bit)
14147 {
14148 if (address_mode == mode_64bit)
14149 {
14150 /* Display eiz instead of addr32. */
14151 needindex = addr32flag;
14152 needaddr32 = 1;
14153 }
14154 else
14155 {
14156 /* In 32-bit mode, we need index register to tell [offset]
14157 from [eiz*1 + offset]. */
14158 needindex = 1;
14159 }
14160 }
14161
20afcfb7
L
14162 havedisp = (havebase
14163 || needindex
14164 || (havesib && (haveindex || scale != 0)));
5d669648 14165
252b5132 14166 if (!intel_syntax)
82c18208 14167 if (modrm.mod != 0 || base == 5)
db6eb5be 14168 {
5d669648
L
14169 if (havedisp || riprel)
14170 print_displacement (scratchbuf, disp);
14171 else
14172 print_operand_value (scratchbuf, 1, disp);
db6eb5be 14173 oappend (scratchbuf);
52b15da3
JH
14174 if (riprel)
14175 {
14176 set_op (disp, 1);
28596323 14177 oappend (!addr32flag ? "(%rip)" : "(%eip)");
52b15da3 14178 }
db6eb5be 14179 }
2da11e11 14180
1bc60e56 14181 if ((havebase || haveindex || needaddr32 || riprel)
7e8b059b 14182 && (bytemode != v_bnd_mode)
d276ec69 14183 && (bytemode != v_bndmk_mode)
9f79e886
JB
14184 && (bytemode != bnd_mode)
14185 && (bytemode != bnd_swap_mode))
87767711
JB
14186 used_prefixes |= PREFIX_ADDR;
14187
5d669648 14188 if (havedisp || (intel_syntax && riprel))
252b5132 14189 {
252b5132 14190 *obufp++ = open_char;
52b15da3 14191 if (intel_syntax && riprel)
185b1163
L
14192 {
14193 set_op (disp, 1);
28596323 14194 oappend (!addr32flag ? "rip" : "eip");
185b1163 14195 }
db6eb5be 14196 *obufp = '\0';
252b5132 14197 if (havebase)
7e8b059b 14198 oappend (address_mode == mode_64bit && !addr32flag
82c18208 14199 ? names64[rbase] : names32[rbase]);
252b5132
RH
14200 if (havesib)
14201 {
db51cc60
L
14202 /* ESP/RSP won't allow index. If base isn't ESP/RSP,
14203 print index to tell base + index from base. */
14204 if (scale != 0
20afcfb7 14205 || needindex
db51cc60
L
14206 || haveindex
14207 || (havebase && base != ESP_REG_NUM))
252b5132 14208 {
9306ca4a 14209 if (!intel_syntax || havebase)
db6eb5be 14210 {
9306ca4a
JB
14211 *obufp++ = separator_char;
14212 *obufp = '\0';
db6eb5be 14213 }
db51cc60 14214 if (haveindex)
7e8b059b 14215 oappend (address_mode == mode_64bit && !addr32flag
6c30d220 14216 ? indexes64[vindex] : indexes32[vindex]);
db51cc60 14217 else
7e8b059b 14218 oappend (address_mode == mode_64bit && !addr32flag
db51cc60
L
14219 ? index64 : index32);
14220
db6eb5be
AM
14221 *obufp++ = scale_char;
14222 *obufp = '\0';
14223 sprintf (scratchbuf, "%d", 1 << scale);
14224 oappend (scratchbuf);
14225 }
252b5132 14226 }
185b1163 14227 if (intel_syntax
82c18208 14228 && (disp || modrm.mod != 0 || base == 5))
3d456fa1 14229 {
db51cc60 14230 if (!havedisp || (bfd_signed_vma) disp >= 0)
3d456fa1
JB
14231 {
14232 *obufp++ = '+';
14233 *obufp = '\0';
14234 }
05203043 14235 else if (modrm.mod != 1 && disp != -disp)
3d456fa1
JB
14236 {
14237 *obufp++ = '-';
14238 *obufp = '\0';
14239 disp = - (bfd_signed_vma) disp;
14240 }
14241
db51cc60
L
14242 if (havedisp)
14243 print_displacement (scratchbuf, disp);
14244 else
14245 print_operand_value (scratchbuf, 1, disp);
3d456fa1
JB
14246 oappend (scratchbuf);
14247 }
252b5132
RH
14248
14249 *obufp++ = close_char;
db6eb5be 14250 *obufp = '\0';
252b5132
RH
14251 }
14252 else if (intel_syntax)
db6eb5be 14253 {
82c18208 14254 if (modrm.mod != 0 || base == 5)
db6eb5be 14255 {
285ca992 14256 if (!active_seg_prefix)
252b5132 14257 {
d708bcba 14258 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
14259 oappend (":");
14260 }
52b15da3 14261 print_operand_value (scratchbuf, 1, disp);
db6eb5be
AM
14262 oappend (scratchbuf);
14263 }
14264 }
252b5132
RH
14265 }
14266 else
f16cd0d5
L
14267 {
14268 /* 16 bit address mode */
14269 used_prefixes |= prefixes & PREFIX_ADDR;
7967e09e 14270 switch (modrm.mod)
252b5132
RH
14271 {
14272 case 0:
7967e09e 14273 if (modrm.rm == 6)
252b5132
RH
14274 {
14275 disp = get16 ();
14276 if ((disp & 0x8000) != 0)
14277 disp -= 0x10000;
14278 }
14279 break;
14280 case 1:
14281 FETCH_DATA (the_info, codep + 1);
14282 disp = *codep++;
14283 if ((disp & 0x80) != 0)
14284 disp -= 0x100;
65f3ed04
JB
14285 if (vex.evex && shift > 0)
14286 disp <<= shift;
252b5132
RH
14287 break;
14288 case 2:
14289 disp = get16 ();
14290 if ((disp & 0x8000) != 0)
14291 disp -= 0x10000;
14292 break;
14293 }
14294
14295 if (!intel_syntax)
7967e09e 14296 if (modrm.mod != 0 || modrm.rm == 6)
db6eb5be 14297 {
5d669648 14298 print_displacement (scratchbuf, disp);
db6eb5be
AM
14299 oappend (scratchbuf);
14300 }
252b5132 14301
7967e09e 14302 if (modrm.mod != 0 || modrm.rm != 6)
252b5132
RH
14303 {
14304 *obufp++ = open_char;
db6eb5be 14305 *obufp = '\0';
7967e09e 14306 oappend (index16[modrm.rm]);
5d669648
L
14307 if (intel_syntax
14308 && (disp || modrm.mod != 0 || modrm.rm == 6))
3d456fa1 14309 {
5d669648 14310 if ((bfd_signed_vma) disp >= 0)
3d456fa1
JB
14311 {
14312 *obufp++ = '+';
14313 *obufp = '\0';
14314 }
7967e09e 14315 else if (modrm.mod != 1)
3d456fa1
JB
14316 {
14317 *obufp++ = '-';
14318 *obufp = '\0';
14319 disp = - (bfd_signed_vma) disp;
14320 }
14321
5d669648 14322 print_displacement (scratchbuf, disp);
3d456fa1
JB
14323 oappend (scratchbuf);
14324 }
14325
db6eb5be
AM
14326 *obufp++ = close_char;
14327 *obufp = '\0';
252b5132 14328 }
3d456fa1
JB
14329 else if (intel_syntax)
14330 {
285ca992 14331 if (!active_seg_prefix)
3d456fa1
JB
14332 {
14333 oappend (names_seg[ds_reg - es_reg]);
14334 oappend (":");
14335 }
14336 print_operand_value (scratchbuf, 1, disp & 0xffff);
14337 oappend (scratchbuf);
14338 }
252b5132 14339 }
43234a1e
L
14340 if (vex.evex && vex.b
14341 && (bytemode == x_mode
90a915bf 14342 || bytemode == xmmq_mode
43234a1e
L
14343 || bytemode == evex_half_bcst_xmmq_mode))
14344 {
90a915bf
IT
14345 if (vex.w
14346 || bytemode == xmmq_mode
14347 || bytemode == evex_half_bcst_xmmq_mode)
b28d1bda
IT
14348 {
14349 switch (vex.length)
14350 {
14351 case 128:
14352 oappend ("{1to2}");
14353 break;
14354 case 256:
14355 oappend ("{1to4}");
14356 break;
14357 case 512:
14358 oappend ("{1to8}");
14359 break;
14360 default:
14361 abort ();
14362 }
14363 }
43234a1e 14364 else
b28d1bda
IT
14365 {
14366 switch (vex.length)
14367 {
14368 case 128:
14369 oappend ("{1to4}");
14370 break;
14371 case 256:
14372 oappend ("{1to8}");
14373 break;
14374 case 512:
14375 oappend ("{1to16}");
14376 break;
14377 default:
14378 abort ();
14379 }
14380 }
43234a1e 14381 }
252b5132
RH
14382}
14383
c0f3af97 14384static void
8b3f93e7 14385OP_E (int bytemode, int sizeflag)
c0f3af97
L
14386{
14387 /* Skip mod/rm byte. */
14388 MODRM_CHECK;
14389 codep++;
14390
14391 if (modrm.mod == 3)
14392 OP_E_register (bytemode, sizeflag);
14393 else
c1e679ec 14394 OP_E_memory (bytemode, sizeflag);
c0f3af97
L
14395}
14396
252b5132 14397static void
26ca5450 14398OP_G (int bytemode, int sizeflag)
252b5132 14399{
52b15da3 14400 int add = 0;
c0a30a9f 14401 const char **names;
161a04f6
L
14402 USED_REX (REX_R);
14403 if (rex & REX_R)
52b15da3 14404 add += 8;
252b5132
RH
14405 switch (bytemode)
14406 {
14407 case b_mode:
52b15da3
JH
14408 USED_REX (0);
14409 if (rex)
7967e09e 14410 oappend (names8rex[modrm.reg + add]);
52b15da3 14411 else
7967e09e 14412 oappend (names8[modrm.reg + add]);
252b5132
RH
14413 break;
14414 case w_mode:
7967e09e 14415 oappend (names16[modrm.reg + add]);
252b5132
RH
14416 break;
14417 case d_mode:
1ba585e8
IT
14418 case db_mode:
14419 case dw_mode:
7967e09e 14420 oappend (names32[modrm.reg + add]);
52b15da3
JH
14421 break;
14422 case q_mode:
7967e09e 14423 oappend (names64[modrm.reg + add]);
252b5132 14424 break;
7e8b059b 14425 case bnd_mode:
0d96e4df
L
14426 if (modrm.reg > 0x3)
14427 {
14428 oappend ("(bad)");
14429 return;
14430 }
7e8b059b
L
14431 oappend (names_bnd[modrm.reg]);
14432 break;
252b5132 14433 case v_mode:
9306ca4a 14434 case dq_mode:
42903f7f
L
14435 case dqb_mode:
14436 case dqd_mode:
9306ca4a 14437 case dqw_mode:
161a04f6
L
14438 USED_REX (REX_W);
14439 if (rex & REX_W)
7967e09e 14440 oappend (names64[modrm.reg + add]);
252b5132 14441 else
f16cd0d5
L
14442 {
14443 if ((sizeflag & DFLAG) || bytemode != v_mode)
14444 oappend (names32[modrm.reg + add]);
14445 else
14446 oappend (names16[modrm.reg + add]);
14447 used_prefixes |= (prefixes & PREFIX_DATA);
14448 }
252b5132 14449 break;
c0a30a9f
L
14450 case va_mode:
14451 names = (address_mode == mode_64bit
14452 ? names64 : names32);
14453 if (!(prefixes & PREFIX_ADDR))
14454 {
14455 if (address_mode == mode_16bit)
14456 names = names16;
14457 }
14458 else
14459 {
14460 /* Remove "addr16/addr32". */
14461 all_prefixes[last_addr_prefix] = 0;
14462 names = (address_mode != mode_32bit
14463 ? names32 : names16);
14464 used_prefixes |= PREFIX_ADDR;
14465 }
14466 oappend (names[modrm.reg + add]);
14467 break;
90700ea2 14468 case m_mode:
cb712a9e 14469 if (address_mode == mode_64bit)
7967e09e 14470 oappend (names64[modrm.reg + add]);
90700ea2 14471 else
7967e09e 14472 oappend (names32[modrm.reg + add]);
90700ea2 14473 break;
1ba585e8 14474 case mask_bd_mode:
43234a1e 14475 case mask_mode:
9889cbb1
L
14476 if ((modrm.reg + add) > 0x7)
14477 {
14478 oappend ("(bad)");
14479 return;
14480 }
43234a1e
L
14481 oappend (names_mask[modrm.reg + add]);
14482 break;
252b5132
RH
14483 default:
14484 oappend (INTERNAL_DISASSEMBLER_ERROR);
14485 break;
14486 }
14487}
14488
52b15da3 14489static bfd_vma
26ca5450 14490get64 (void)
52b15da3 14491{
5dd0794d 14492 bfd_vma x;
52b15da3 14493#ifdef BFD64
5dd0794d
AM
14494 unsigned int a;
14495 unsigned int b;
14496
52b15da3
JH
14497 FETCH_DATA (the_info, codep + 8);
14498 a = *codep++ & 0xff;
14499 a |= (*codep++ & 0xff) << 8;
14500 a |= (*codep++ & 0xff) << 16;
070fe95d 14501 a |= (*codep++ & 0xffu) << 24;
5dd0794d 14502 b = *codep++ & 0xff;
52b15da3
JH
14503 b |= (*codep++ & 0xff) << 8;
14504 b |= (*codep++ & 0xff) << 16;
070fe95d 14505 b |= (*codep++ & 0xffu) << 24;
52b15da3
JH
14506 x = a + ((bfd_vma) b << 32);
14507#else
6608db57 14508 abort ();
5dd0794d 14509 x = 0;
52b15da3
JH
14510#endif
14511 return x;
14512}
14513
14514static bfd_signed_vma
26ca5450 14515get32 (void)
252b5132 14516{
52b15da3 14517 bfd_signed_vma x = 0;
252b5132
RH
14518
14519 FETCH_DATA (the_info, codep + 4);
52b15da3
JH
14520 x = *codep++ & (bfd_signed_vma) 0xff;
14521 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
14522 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
14523 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
14524 return x;
14525}
14526
14527static bfd_signed_vma
26ca5450 14528get32s (void)
52b15da3
JH
14529{
14530 bfd_signed_vma x = 0;
14531
14532 FETCH_DATA (the_info, codep + 4);
14533 x = *codep++ & (bfd_signed_vma) 0xff;
14534 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
14535 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
14536 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
14537
14538 x = (x ^ ((bfd_signed_vma) 1 << 31)) - ((bfd_signed_vma) 1 << 31);
14539
252b5132
RH
14540 return x;
14541}
14542
14543static int
26ca5450 14544get16 (void)
252b5132
RH
14545{
14546 int x = 0;
14547
14548 FETCH_DATA (the_info, codep + 2);
14549 x = *codep++ & 0xff;
14550 x |= (*codep++ & 0xff) << 8;
14551 return x;
14552}
14553
14554static void
26ca5450 14555set_op (bfd_vma op, int riprel)
252b5132
RH
14556{
14557 op_index[op_ad] = op_ad;
cb712a9e 14558 if (address_mode == mode_64bit)
7081ff04
AJ
14559 {
14560 op_address[op_ad] = op;
14561 op_riprel[op_ad] = riprel;
14562 }
14563 else
14564 {
14565 /* Mask to get a 32-bit address. */
14566 op_address[op_ad] = op & 0xffffffff;
14567 op_riprel[op_ad] = riprel & 0xffffffff;
14568 }
252b5132
RH
14569}
14570
14571static void
26ca5450 14572OP_REG (int code, int sizeflag)
252b5132 14573{
2da11e11 14574 const char *s;
9b60702d 14575 int add;
de882298
RM
14576
14577 switch (code)
14578 {
14579 case es_reg: case ss_reg: case cs_reg:
14580 case ds_reg: case fs_reg: case gs_reg:
14581 oappend (names_seg[code - es_reg]);
14582 return;
14583 }
14584
161a04f6
L
14585 USED_REX (REX_B);
14586 if (rex & REX_B)
52b15da3 14587 add = 8;
9b60702d
L
14588 else
14589 add = 0;
52b15da3
JH
14590
14591 switch (code)
14592 {
52b15da3
JH
14593 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
14594 case sp_reg: case bp_reg: case si_reg: case di_reg:
14595 s = names16[code - ax_reg + add];
14596 break;
52b15da3
JH
14597 case al_reg: case ah_reg: case cl_reg: case ch_reg:
14598 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
14599 USED_REX (0);
14600 if (rex)
14601 s = names8rex[code - al_reg + add];
14602 else
14603 s = names8[code - al_reg];
14604 break;
6439fc28
AM
14605 case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg:
14606 case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg:
7bb15c6f 14607 if (address_mode == mode_64bit
6c067bbb 14608 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
14609 {
14610 s = names64[code - rAX_reg + add];
14611 break;
14612 }
14613 code += eAX_reg - rAX_reg;
6608db57 14614 /* Fall through. */
52b15da3
JH
14615 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
14616 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
14617 USED_REX (REX_W);
14618 if (rex & REX_W)
52b15da3 14619 s = names64[code - eAX_reg + add];
52b15da3 14620 else
f16cd0d5
L
14621 {
14622 if (sizeflag & DFLAG)
14623 s = names32[code - eAX_reg + add];
14624 else
14625 s = names16[code - eAX_reg + add];
14626 used_prefixes |= (prefixes & PREFIX_DATA);
14627 }
52b15da3 14628 break;
52b15da3
JH
14629 default:
14630 s = INTERNAL_DISASSEMBLER_ERROR;
14631 break;
14632 }
14633 oappend (s);
14634}
14635
14636static void
26ca5450 14637OP_IMREG (int code, int sizeflag)
52b15da3
JH
14638{
14639 const char *s;
252b5132
RH
14640
14641 switch (code)
14642 {
14643 case indir_dx_reg:
d708bcba 14644 if (intel_syntax)
52fd6d94 14645 s = "dx";
d708bcba 14646 else
db6eb5be 14647 s = "(%dx)";
252b5132
RH
14648 break;
14649 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
14650 case sp_reg: case bp_reg: case si_reg: case di_reg:
14651 s = names16[code - ax_reg];
14652 break;
14653 case es_reg: case ss_reg: case cs_reg:
14654 case ds_reg: case fs_reg: case gs_reg:
14655 s = names_seg[code - es_reg];
14656 break;
14657 case al_reg: case ah_reg: case cl_reg: case ch_reg:
14658 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
52b15da3
JH
14659 USED_REX (0);
14660 if (rex)
14661 s = names8rex[code - al_reg];
14662 else
14663 s = names8[code - al_reg];
252b5132
RH
14664 break;
14665 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
14666 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
14667 USED_REX (REX_W);
14668 if (rex & REX_W)
52b15da3 14669 s = names64[code - eAX_reg];
252b5132 14670 else
f16cd0d5
L
14671 {
14672 if (sizeflag & DFLAG)
14673 s = names32[code - eAX_reg];
14674 else
14675 s = names16[code - eAX_reg];
14676 used_prefixes |= (prefixes & PREFIX_DATA);
14677 }
252b5132 14678 break;
52fd6d94 14679 case z_mode_ax_reg:
161a04f6 14680 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
14681 s = *names32;
14682 else
14683 s = *names16;
161a04f6 14684 if (!(rex & REX_W))
52fd6d94
JB
14685 used_prefixes |= (prefixes & PREFIX_DATA);
14686 break;
252b5132
RH
14687 default:
14688 s = INTERNAL_DISASSEMBLER_ERROR;
14689 break;
14690 }
14691 oappend (s);
14692}
14693
14694static void
26ca5450 14695OP_I (int bytemode, int sizeflag)
252b5132 14696{
52b15da3
JH
14697 bfd_signed_vma op;
14698 bfd_signed_vma mask = -1;
252b5132
RH
14699
14700 switch (bytemode)
14701 {
14702 case b_mode:
14703 FETCH_DATA (the_info, codep + 1);
52b15da3
JH
14704 op = *codep++;
14705 mask = 0xff;
14706 break;
14707 case q_mode:
cb712a9e 14708 if (address_mode == mode_64bit)
6439fc28
AM
14709 {
14710 op = get32s ();
14711 break;
14712 }
6608db57 14713 /* Fall through. */
252b5132 14714 case v_mode:
161a04f6
L
14715 USED_REX (REX_W);
14716 if (rex & REX_W)
52b15da3 14717 op = get32s ();
252b5132 14718 else
52b15da3 14719 {
f16cd0d5
L
14720 if (sizeflag & DFLAG)
14721 {
14722 op = get32 ();
14723 mask = 0xffffffff;
14724 }
14725 else
14726 {
14727 op = get16 ();
14728 mask = 0xfffff;
14729 }
14730 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 14731 }
252b5132
RH
14732 break;
14733 case w_mode:
52b15da3 14734 mask = 0xfffff;
252b5132
RH
14735 op = get16 ();
14736 break;
9306ca4a
JB
14737 case const_1_mode:
14738 if (intel_syntax)
6c067bbb 14739 oappend ("1");
9306ca4a 14740 return;
252b5132
RH
14741 default:
14742 oappend (INTERNAL_DISASSEMBLER_ERROR);
14743 return;
14744 }
14745
52b15da3
JH
14746 op &= mask;
14747 scratchbuf[0] = '$';
d708bcba 14748 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 14749 oappend_maybe_intel (scratchbuf);
52b15da3
JH
14750 scratchbuf[0] = '\0';
14751}
14752
14753static void
26ca5450 14754OP_I64 (int bytemode, int sizeflag)
52b15da3
JH
14755{
14756 bfd_signed_vma op;
14757 bfd_signed_vma mask = -1;
14758
cb712a9e 14759 if (address_mode != mode_64bit)
6439fc28
AM
14760 {
14761 OP_I (bytemode, sizeflag);
14762 return;
14763 }
14764
52b15da3
JH
14765 switch (bytemode)
14766 {
14767 case b_mode:
14768 FETCH_DATA (the_info, codep + 1);
14769 op = *codep++;
14770 mask = 0xff;
14771 break;
14772 case v_mode:
161a04f6
L
14773 USED_REX (REX_W);
14774 if (rex & REX_W)
52b15da3 14775 op = get64 ();
52b15da3
JH
14776 else
14777 {
f16cd0d5
L
14778 if (sizeflag & DFLAG)
14779 {
14780 op = get32 ();
14781 mask = 0xffffffff;
14782 }
14783 else
14784 {
14785 op = get16 ();
14786 mask = 0xfffff;
14787 }
14788 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 14789 }
52b15da3
JH
14790 break;
14791 case w_mode:
14792 mask = 0xfffff;
14793 op = get16 ();
14794 break;
14795 default:
14796 oappend (INTERNAL_DISASSEMBLER_ERROR);
14797 return;
14798 }
14799
14800 op &= mask;
14801 scratchbuf[0] = '$';
d708bcba 14802 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 14803 oappend_maybe_intel (scratchbuf);
252b5132
RH
14804 scratchbuf[0] = '\0';
14805}
14806
14807static void
26ca5450 14808OP_sI (int bytemode, int sizeflag)
252b5132 14809{
52b15da3 14810 bfd_signed_vma op;
252b5132
RH
14811
14812 switch (bytemode)
14813 {
14814 case b_mode:
e3949f17 14815 case b_T_mode:
252b5132
RH
14816 FETCH_DATA (the_info, codep + 1);
14817 op = *codep++;
14818 if ((op & 0x80) != 0)
14819 op -= 0x100;
e3949f17
L
14820 if (bytemode == b_T_mode)
14821 {
14822 if (address_mode != mode_64bit
7bb15c6f 14823 || !((sizeflag & DFLAG) || (rex & REX_W)))
e3949f17 14824 {
6c067bbb
RM
14825 /* The operand-size prefix is overridden by a REX prefix. */
14826 if ((sizeflag & DFLAG) || (rex & REX_W))
e3949f17
L
14827 op &= 0xffffffff;
14828 else
14829 op &= 0xffff;
14830 }
14831 }
14832 else
14833 {
14834 if (!(rex & REX_W))
14835 {
14836 if (sizeflag & DFLAG)
14837 op &= 0xffffffff;
14838 else
14839 op &= 0xffff;
14840 }
14841 }
252b5132
RH
14842 break;
14843 case v_mode:
7bb15c6f
RM
14844 /* The operand-size prefix is overridden by a REX prefix. */
14845 if ((sizeflag & DFLAG) || (rex & REX_W))
52b15da3 14846 op = get32s ();
252b5132 14847 else
d9e3625e 14848 op = get16 ();
252b5132
RH
14849 break;
14850 default:
14851 oappend (INTERNAL_DISASSEMBLER_ERROR);
14852 return;
14853 }
52b15da3
JH
14854
14855 scratchbuf[0] = '$';
14856 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 14857 oappend_maybe_intel (scratchbuf);
252b5132
RH
14858}
14859
14860static void
26ca5450 14861OP_J (int bytemode, int sizeflag)
252b5132 14862{
52b15da3 14863 bfd_vma disp;
7081ff04 14864 bfd_vma mask = -1;
65ca155d 14865 bfd_vma segment = 0;
252b5132
RH
14866
14867 switch (bytemode)
14868 {
14869 case b_mode:
14870 FETCH_DATA (the_info, codep + 1);
14871 disp = *codep++;
14872 if ((disp & 0x80) != 0)
14873 disp -= 0x100;
14874 break;
14875 case v_mode:
5db04b09
L
14876 if (isa64 == amd64)
14877 USED_REX (REX_W);
14878 if ((sizeflag & DFLAG)
14879 || (address_mode == mode_64bit
14880 && (isa64 != amd64 || (rex & REX_W))))
52b15da3 14881 disp = get32s ();
252b5132
RH
14882 else
14883 {
14884 disp = get16 ();
206717e8
L
14885 if ((disp & 0x8000) != 0)
14886 disp -= 0x10000;
65ca155d
L
14887 /* In 16bit mode, address is wrapped around at 64k within
14888 the same segment. Otherwise, a data16 prefix on a jump
14889 instruction means that the pc is masked to 16 bits after
14890 the displacement is added! */
14891 mask = 0xffff;
14892 if ((prefixes & PREFIX_DATA) == 0)
4fd7268a 14893 segment = ((start_pc + (codep - start_codep))
65ca155d 14894 & ~((bfd_vma) 0xffff));
252b5132 14895 }
5db04b09
L
14896 if (address_mode != mode_64bit
14897 || (isa64 == amd64 && !(rex & REX_W)))
f16cd0d5 14898 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132
RH
14899 break;
14900 default:
14901 oappend (INTERNAL_DISASSEMBLER_ERROR);
14902 return;
14903 }
42d5f9c6 14904 disp = ((start_pc + (codep - start_codep) + disp) & mask) | segment;
52b15da3
JH
14905 set_op (disp, 0);
14906 print_operand_value (scratchbuf, 1, disp);
252b5132
RH
14907 oappend (scratchbuf);
14908}
14909
252b5132 14910static void
ed7841b3 14911OP_SEG (int bytemode, int sizeflag)
252b5132 14912{
ed7841b3 14913 if (bytemode == w_mode)
7967e09e 14914 oappend (names_seg[modrm.reg]);
ed7841b3 14915 else
7967e09e 14916 OP_E (modrm.mod == 3 ? bytemode : w_mode, sizeflag);
252b5132
RH
14917}
14918
14919static void
26ca5450 14920OP_DIR (int dummy ATTRIBUTE_UNUSED, int sizeflag)
252b5132
RH
14921{
14922 int seg, offset;
14923
c608c12e 14924 if (sizeflag & DFLAG)
252b5132 14925 {
c608c12e
AM
14926 offset = get32 ();
14927 seg = get16 ();
252b5132 14928 }
c608c12e
AM
14929 else
14930 {
14931 offset = get16 ();
14932 seg = get16 ();
14933 }
7d421014 14934 used_prefixes |= (prefixes & PREFIX_DATA);
d708bcba 14935 if (intel_syntax)
3f31e633 14936 sprintf (scratchbuf, "0x%x:0x%x", seg, offset);
d708bcba
AM
14937 else
14938 sprintf (scratchbuf, "$0x%x,$0x%x", seg, offset);
c608c12e 14939 oappend (scratchbuf);
252b5132
RH
14940}
14941
252b5132 14942static void
3f31e633 14943OP_OFF (int bytemode, int sizeflag)
252b5132 14944{
52b15da3 14945 bfd_vma off;
252b5132 14946
3f31e633
JB
14947 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
14948 intel_operand_size (bytemode, sizeflag);
252b5132
RH
14949 append_seg ();
14950
cb712a9e 14951 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132
RH
14952 off = get32 ();
14953 else
14954 off = get16 ();
14955
14956 if (intel_syntax)
14957 {
285ca992 14958 if (!active_seg_prefix)
252b5132 14959 {
d708bcba 14960 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
14961 oappend (":");
14962 }
14963 }
52b15da3
JH
14964 print_operand_value (scratchbuf, 1, off);
14965 oappend (scratchbuf);
14966}
6439fc28 14967
52b15da3 14968static void
3f31e633 14969OP_OFF64 (int bytemode, int sizeflag)
52b15da3
JH
14970{
14971 bfd_vma off;
14972
539e75ad
L
14973 if (address_mode != mode_64bit
14974 || (prefixes & PREFIX_ADDR))
6439fc28
AM
14975 {
14976 OP_OFF (bytemode, sizeflag);
14977 return;
14978 }
14979
3f31e633
JB
14980 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
14981 intel_operand_size (bytemode, sizeflag);
52b15da3
JH
14982 append_seg ();
14983
6608db57 14984 off = get64 ();
52b15da3
JH
14985
14986 if (intel_syntax)
14987 {
285ca992 14988 if (!active_seg_prefix)
52b15da3 14989 {
d708bcba 14990 oappend (names_seg[ds_reg - es_reg]);
52b15da3
JH
14991 oappend (":");
14992 }
14993 }
14994 print_operand_value (scratchbuf, 1, off);
252b5132
RH
14995 oappend (scratchbuf);
14996}
14997
14998static void
26ca5450 14999ptr_reg (int code, int sizeflag)
252b5132 15000{
2da11e11 15001 const char *s;
d708bcba 15002
1d9f512f 15003 *obufp++ = open_char;
20f0a1fc 15004 used_prefixes |= (prefixes & PREFIX_ADDR);
cb712a9e 15005 if (address_mode == mode_64bit)
c1a64871
JH
15006 {
15007 if (!(sizeflag & AFLAG))
db6eb5be 15008 s = names32[code - eAX_reg];
c1a64871 15009 else
db6eb5be 15010 s = names64[code - eAX_reg];
c1a64871 15011 }
52b15da3 15012 else if (sizeflag & AFLAG)
252b5132
RH
15013 s = names32[code - eAX_reg];
15014 else
15015 s = names16[code - eAX_reg];
15016 oappend (s);
1d9f512f
AM
15017 *obufp++ = close_char;
15018 *obufp = 0;
252b5132
RH
15019}
15020
15021static void
26ca5450 15022OP_ESreg (int code, int sizeflag)
252b5132 15023{
9306ca4a 15024 if (intel_syntax)
52fd6d94
JB
15025 {
15026 switch (codep[-1])
15027 {
15028 case 0x6d: /* insw/insl */
15029 intel_operand_size (z_mode, sizeflag);
15030 break;
15031 case 0xa5: /* movsw/movsl/movsq */
15032 case 0xa7: /* cmpsw/cmpsl/cmpsq */
15033 case 0xab: /* stosw/stosl */
15034 case 0xaf: /* scasw/scasl */
15035 intel_operand_size (v_mode, sizeflag);
15036 break;
15037 default:
15038 intel_operand_size (b_mode, sizeflag);
15039 }
15040 }
9ce09ba2 15041 oappend_maybe_intel ("%es:");
252b5132
RH
15042 ptr_reg (code, sizeflag);
15043}
15044
15045static void
26ca5450 15046OP_DSreg (int code, int sizeflag)
252b5132 15047{
9306ca4a 15048 if (intel_syntax)
52fd6d94
JB
15049 {
15050 switch (codep[-1])
15051 {
15052 case 0x6f: /* outsw/outsl */
15053 intel_operand_size (z_mode, sizeflag);
15054 break;
15055 case 0xa5: /* movsw/movsl/movsq */
15056 case 0xa7: /* cmpsw/cmpsl/cmpsq */
15057 case 0xad: /* lodsw/lodsl/lodsq */
15058 intel_operand_size (v_mode, sizeflag);
15059 break;
15060 default:
15061 intel_operand_size (b_mode, sizeflag);
15062 }
15063 }
285ca992
L
15064 /* Set active_seg_prefix to PREFIX_DS if it is unset so that the
15065 default segment register DS is printed. */
15066 if (!active_seg_prefix)
15067 active_seg_prefix = PREFIX_DS;
6608db57 15068 append_seg ();
252b5132
RH
15069 ptr_reg (code, sizeflag);
15070}
15071
252b5132 15072static void
26ca5450 15073OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15074{
9b60702d 15075 int add;
161a04f6 15076 if (rex & REX_R)
c4a530c5 15077 {
161a04f6 15078 USED_REX (REX_R);
c4a530c5
JB
15079 add = 8;
15080 }
cb712a9e 15081 else if (address_mode != mode_64bit && (prefixes & PREFIX_LOCK))
c4a530c5 15082 {
f16cd0d5 15083 all_prefixes[last_lock_prefix] = 0;
c4a530c5
JB
15084 used_prefixes |= PREFIX_LOCK;
15085 add = 8;
15086 }
9b60702d
L
15087 else
15088 add = 0;
7967e09e 15089 sprintf (scratchbuf, "%%cr%d", modrm.reg + add);
9ce09ba2 15090 oappend_maybe_intel (scratchbuf);
252b5132
RH
15091}
15092
252b5132 15093static void
26ca5450 15094OP_D (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15095{
9b60702d 15096 int add;
161a04f6
L
15097 USED_REX (REX_R);
15098 if (rex & REX_R)
52b15da3 15099 add = 8;
9b60702d
L
15100 else
15101 add = 0;
d708bcba 15102 if (intel_syntax)
7967e09e 15103 sprintf (scratchbuf, "db%d", modrm.reg + add);
d708bcba 15104 else
7967e09e 15105 sprintf (scratchbuf, "%%db%d", modrm.reg + add);
252b5132
RH
15106 oappend (scratchbuf);
15107}
15108
252b5132 15109static void
26ca5450 15110OP_T (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15111{
7967e09e 15112 sprintf (scratchbuf, "%%tr%d", modrm.reg);
9ce09ba2 15113 oappend_maybe_intel (scratchbuf);
252b5132
RH
15114}
15115
15116static void
6f74c397 15117OP_R (int bytemode, int sizeflag)
252b5132 15118{
68f34464
L
15119 /* Skip mod/rm byte. */
15120 MODRM_CHECK;
15121 codep++;
15122 OP_E_register (bytemode, sizeflag);
252b5132
RH
15123}
15124
15125static void
26ca5450 15126OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15127{
b9733481
L
15128 int reg = modrm.reg;
15129 const char **names;
15130
041bd2e0
JH
15131 used_prefixes |= (prefixes & PREFIX_DATA);
15132 if (prefixes & PREFIX_DATA)
20f0a1fc 15133 {
b9733481 15134 names = names_xmm;
161a04f6
L
15135 USED_REX (REX_R);
15136 if (rex & REX_R)
b9733481 15137 reg += 8;
20f0a1fc 15138 }
041bd2e0 15139 else
b9733481
L
15140 names = names_mm;
15141 oappend (names[reg]);
252b5132
RH
15142}
15143
c608c12e 15144static void
c0f3af97 15145OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
c608c12e 15146{
b9733481
L
15147 int reg = modrm.reg;
15148 const char **names;
15149
161a04f6
L
15150 USED_REX (REX_R);
15151 if (rex & REX_R)
b9733481 15152 reg += 8;
43234a1e
L
15153 if (vex.evex)
15154 {
15155 if (!vex.r)
15156 reg += 16;
15157 }
15158
539f890d
L
15159 if (need_vex
15160 && bytemode != xmm_mode
43234a1e
L
15161 && bytemode != xmmq_mode
15162 && bytemode != evex_half_bcst_xmmq_mode
15163 && bytemode != ymm_mode
539f890d 15164 && bytemode != scalar_mode)
c0f3af97
L
15165 {
15166 switch (vex.length)
15167 {
15168 case 128:
b9733481 15169 names = names_xmm;
c0f3af97
L
15170 break;
15171 case 256:
5fc35d96
IT
15172 if (vex.w
15173 || (bytemode != vex_vsib_q_w_dq_mode
15174 && bytemode != vex_vsib_q_w_d_mode))
6c30d220
L
15175 names = names_ymm;
15176 else
15177 names = names_xmm;
c0f3af97 15178 break;
43234a1e
L
15179 case 512:
15180 names = names_zmm;
15181 break;
c0f3af97
L
15182 default:
15183 abort ();
15184 }
15185 }
43234a1e
L
15186 else if (bytemode == xmmq_mode
15187 || bytemode == evex_half_bcst_xmmq_mode)
15188 {
15189 switch (vex.length)
15190 {
15191 case 128:
15192 case 256:
15193 names = names_xmm;
15194 break;
15195 case 512:
15196 names = names_ymm;
15197 break;
15198 default:
15199 abort ();
15200 }
15201 }
15202 else if (bytemode == ymm_mode)
15203 names = names_ymm;
c0f3af97 15204 else
b9733481
L
15205 names = names_xmm;
15206 oappend (names[reg]);
c608c12e
AM
15207}
15208
252b5132 15209static void
26ca5450 15210OP_EM (int bytemode, int sizeflag)
252b5132 15211{
b9733481
L
15212 int reg;
15213 const char **names;
15214
7967e09e 15215 if (modrm.mod != 3)
252b5132 15216 {
b6169b20
L
15217 if (intel_syntax
15218 && (bytemode == v_mode || bytemode == v_swap_mode))
9306ca4a
JB
15219 {
15220 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
15221 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 15222 }
252b5132
RH
15223 OP_E (bytemode, sizeflag);
15224 return;
15225 }
15226
b6169b20
L
15227 if ((sizeflag & SUFFIX_ALWAYS) && bytemode == v_swap_mode)
15228 swap_operand ();
15229
6608db57 15230 /* Skip mod/rm byte. */
4bba6815 15231 MODRM_CHECK;
252b5132 15232 codep++;
041bd2e0 15233 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 15234 reg = modrm.rm;
041bd2e0 15235 if (prefixes & PREFIX_DATA)
20f0a1fc 15236 {
b9733481 15237 names = names_xmm;
161a04f6
L
15238 USED_REX (REX_B);
15239 if (rex & REX_B)
b9733481 15240 reg += 8;
20f0a1fc 15241 }
041bd2e0 15242 else
b9733481
L
15243 names = names_mm;
15244 oappend (names[reg]);
252b5132
RH
15245}
15246
246c51aa
L
15247/* cvt* are the only instructions in sse2 which have
15248 both SSE and MMX operands and also have 0x66 prefix
15249 in their opcode. 0x66 was originally used to differentiate
15250 between SSE and MMX instruction(operands). So we have to handle the
4d9567e0
MM
15251 cvt* separately using OP_EMC and OP_MXC */
15252static void
15253OP_EMC (int bytemode, int sizeflag)
15254{
7967e09e 15255 if (modrm.mod != 3)
4d9567e0
MM
15256 {
15257 if (intel_syntax && bytemode == v_mode)
15258 {
15259 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
15260 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 15261 }
4d9567e0
MM
15262 OP_E (bytemode, sizeflag);
15263 return;
15264 }
246c51aa 15265
4d9567e0
MM
15266 /* Skip mod/rm byte. */
15267 MODRM_CHECK;
15268 codep++;
15269 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 15270 oappend (names_mm[modrm.rm]);
4d9567e0
MM
15271}
15272
15273static void
15274OP_MXC (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15275{
15276 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 15277 oappend (names_mm[modrm.reg]);
4d9567e0
MM
15278}
15279
c608c12e 15280static void
26ca5450 15281OP_EX (int bytemode, int sizeflag)
c608c12e 15282{
b9733481
L
15283 int reg;
15284 const char **names;
d6f574e0
L
15285
15286 /* Skip mod/rm byte. */
15287 MODRM_CHECK;
15288 codep++;
15289
7967e09e 15290 if (modrm.mod != 3)
c608c12e 15291 {
c1e679ec 15292 OP_E_memory (bytemode, sizeflag);
c608c12e
AM
15293 return;
15294 }
d6f574e0 15295
b9733481 15296 reg = modrm.rm;
161a04f6
L
15297 USED_REX (REX_B);
15298 if (rex & REX_B)
b9733481 15299 reg += 8;
43234a1e
L
15300 if (vex.evex)
15301 {
15302 USED_REX (REX_X);
15303 if ((rex & REX_X))
15304 reg += 16;
15305 }
c608c12e 15306
b6169b20 15307 if ((sizeflag & SUFFIX_ALWAYS)
fa99fab2
L
15308 && (bytemode == x_swap_mode
15309 || bytemode == d_swap_mode
7bb15c6f 15310 || bytemode == d_scalar_swap_mode
539f890d
L
15311 || bytemode == q_swap_mode
15312 || bytemode == q_scalar_swap_mode))
b6169b20
L
15313 swap_operand ();
15314
c0f3af97
L
15315 if (need_vex
15316 && bytemode != xmm_mode
6c30d220
L
15317 && bytemode != xmmdw_mode
15318 && bytemode != xmmqd_mode
15319 && bytemode != xmm_mb_mode
15320 && bytemode != xmm_mw_mode
15321 && bytemode != xmm_md_mode
15322 && bytemode != xmm_mq_mode
43234a1e 15323 && bytemode != xmm_mdq_mode
539f890d 15324 && bytemode != xmmq_mode
43234a1e
L
15325 && bytemode != evex_half_bcst_xmmq_mode
15326 && bytemode != ymm_mode
539f890d 15327 && bytemode != d_scalar_mode
7bb15c6f 15328 && bytemode != d_scalar_swap_mode
539f890d 15329 && bytemode != q_scalar_mode
1c480963
L
15330 && bytemode != q_scalar_swap_mode
15331 && bytemode != vex_scalar_w_dq_mode)
c0f3af97
L
15332 {
15333 switch (vex.length)
15334 {
15335 case 128:
b9733481 15336 names = names_xmm;
c0f3af97
L
15337 break;
15338 case 256:
b9733481 15339 names = names_ymm;
c0f3af97 15340 break;
43234a1e
L
15341 case 512:
15342 names = names_zmm;
15343 break;
c0f3af97
L
15344 default:
15345 abort ();
15346 }
15347 }
43234a1e
L
15348 else if (bytemode == xmmq_mode
15349 || bytemode == evex_half_bcst_xmmq_mode)
15350 {
15351 switch (vex.length)
15352 {
15353 case 128:
15354 case 256:
15355 names = names_xmm;
15356 break;
15357 case 512:
15358 names = names_ymm;
15359 break;
15360 default:
15361 abort ();
15362 }
15363 }
15364 else if (bytemode == ymm_mode)
15365 names = names_ymm;
c0f3af97 15366 else
b9733481
L
15367 names = names_xmm;
15368 oappend (names[reg]);
c608c12e
AM
15369}
15370
252b5132 15371static void
26ca5450 15372OP_MS (int bytemode, int sizeflag)
252b5132 15373{
7967e09e 15374 if (modrm.mod == 3)
2da11e11
AM
15375 OP_EM (bytemode, sizeflag);
15376 else
6608db57 15377 BadOp ();
252b5132
RH
15378}
15379
992aaec9 15380static void
26ca5450 15381OP_XS (int bytemode, int sizeflag)
992aaec9 15382{
7967e09e 15383 if (modrm.mod == 3)
992aaec9
AM
15384 OP_EX (bytemode, sizeflag);
15385 else
6608db57 15386 BadOp ();
992aaec9
AM
15387}
15388
cc0ec051
AM
15389static void
15390OP_M (int bytemode, int sizeflag)
15391{
7967e09e 15392 if (modrm.mod == 3)
75413a22
L
15393 /* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */
15394 BadOp ();
cc0ec051
AM
15395 else
15396 OP_E (bytemode, sizeflag);
15397}
15398
15399static void
15400OP_0f07 (int bytemode, int sizeflag)
15401{
7967e09e 15402 if (modrm.mod != 3 || modrm.rm != 0)
cc0ec051
AM
15403 BadOp ();
15404 else
15405 OP_E (bytemode, sizeflag);
15406}
15407
46e883c5 15408/* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
246c51aa 15409 32bit mode and "xchg %rax,%rax" in 64bit mode. */
46e883c5 15410
cc0ec051 15411static void
46e883c5 15412NOP_Fixup1 (int bytemode, int sizeflag)
cc0ec051 15413{
8b38ad71
L
15414 if ((prefixes & PREFIX_DATA) != 0
15415 || (rex != 0
15416 && rex != 0x48
15417 && address_mode == mode_64bit))
46e883c5
L
15418 OP_REG (bytemode, sizeflag);
15419 else
15420 strcpy (obuf, "nop");
15421}
15422
15423static void
15424NOP_Fixup2 (int bytemode, int sizeflag)
15425{
8b38ad71
L
15426 if ((prefixes & PREFIX_DATA) != 0
15427 || (rex != 0
15428 && rex != 0x48
15429 && address_mode == mode_64bit))
46e883c5 15430 OP_IMREG (bytemode, sizeflag);
cc0ec051
AM
15431}
15432
84037f8c 15433static const char *const Suffix3DNow[] = {
252b5132
RH
15434/* 00 */ NULL, NULL, NULL, NULL,
15435/* 04 */ NULL, NULL, NULL, NULL,
15436/* 08 */ NULL, NULL, NULL, NULL,
9e525108 15437/* 0C */ "pi2fw", "pi2fd", NULL, NULL,
252b5132
RH
15438/* 10 */ NULL, NULL, NULL, NULL,
15439/* 14 */ NULL, NULL, NULL, NULL,
15440/* 18 */ NULL, NULL, NULL, NULL,
9e525108 15441/* 1C */ "pf2iw", "pf2id", NULL, NULL,
252b5132
RH
15442/* 20 */ NULL, NULL, NULL, NULL,
15443/* 24 */ NULL, NULL, NULL, NULL,
15444/* 28 */ NULL, NULL, NULL, NULL,
15445/* 2C */ NULL, NULL, NULL, NULL,
15446/* 30 */ NULL, NULL, NULL, NULL,
15447/* 34 */ NULL, NULL, NULL, NULL,
15448/* 38 */ NULL, NULL, NULL, NULL,
15449/* 3C */ NULL, NULL, NULL, NULL,
15450/* 40 */ NULL, NULL, NULL, NULL,
15451/* 44 */ NULL, NULL, NULL, NULL,
15452/* 48 */ NULL, NULL, NULL, NULL,
15453/* 4C */ NULL, NULL, NULL, NULL,
15454/* 50 */ NULL, NULL, NULL, NULL,
15455/* 54 */ NULL, NULL, NULL, NULL,
15456/* 58 */ NULL, NULL, NULL, NULL,
15457/* 5C */ NULL, NULL, NULL, NULL,
15458/* 60 */ NULL, NULL, NULL, NULL,
15459/* 64 */ NULL, NULL, NULL, NULL,
15460/* 68 */ NULL, NULL, NULL, NULL,
15461/* 6C */ NULL, NULL, NULL, NULL,
15462/* 70 */ NULL, NULL, NULL, NULL,
15463/* 74 */ NULL, NULL, NULL, NULL,
15464/* 78 */ NULL, NULL, NULL, NULL,
15465/* 7C */ NULL, NULL, NULL, NULL,
15466/* 80 */ NULL, NULL, NULL, NULL,
15467/* 84 */ NULL, NULL, NULL, NULL,
9e525108
AM
15468/* 88 */ NULL, NULL, "pfnacc", NULL,
15469/* 8C */ NULL, NULL, "pfpnacc", NULL,
252b5132
RH
15470/* 90 */ "pfcmpge", NULL, NULL, NULL,
15471/* 94 */ "pfmin", NULL, "pfrcp", "pfrsqrt",
15472/* 98 */ NULL, NULL, "pfsub", NULL,
15473/* 9C */ NULL, NULL, "pfadd", NULL,
15474/* A0 */ "pfcmpgt", NULL, NULL, NULL,
15475/* A4 */ "pfmax", NULL, "pfrcpit1", "pfrsqit1",
15476/* A8 */ NULL, NULL, "pfsubr", NULL,
15477/* AC */ NULL, NULL, "pfacc", NULL,
15478/* B0 */ "pfcmpeq", NULL, NULL, NULL,
9beff690 15479/* B4 */ "pfmul", NULL, "pfrcpit2", "pmulhrw",
9e525108 15480/* B8 */ NULL, NULL, NULL, "pswapd",
252b5132
RH
15481/* BC */ NULL, NULL, NULL, "pavgusb",
15482/* C0 */ NULL, NULL, NULL, NULL,
15483/* C4 */ NULL, NULL, NULL, NULL,
15484/* C8 */ NULL, NULL, NULL, NULL,
15485/* CC */ NULL, NULL, NULL, NULL,
15486/* D0 */ NULL, NULL, NULL, NULL,
15487/* D4 */ NULL, NULL, NULL, NULL,
15488/* D8 */ NULL, NULL, NULL, NULL,
15489/* DC */ NULL, NULL, NULL, NULL,
15490/* E0 */ NULL, NULL, NULL, NULL,
15491/* E4 */ NULL, NULL, NULL, NULL,
15492/* E8 */ NULL, NULL, NULL, NULL,
15493/* EC */ NULL, NULL, NULL, NULL,
15494/* F0 */ NULL, NULL, NULL, NULL,
15495/* F4 */ NULL, NULL, NULL, NULL,
15496/* F8 */ NULL, NULL, NULL, NULL,
15497/* FC */ NULL, NULL, NULL, NULL,
15498};
15499
15500static void
26ca5450 15501OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132
RH
15502{
15503 const char *mnemonic;
15504
15505 FETCH_DATA (the_info, codep + 1);
15506 /* AMD 3DNow! instructions are specified by an opcode suffix in the
15507 place where an 8-bit immediate would normally go. ie. the last
15508 byte of the instruction. */
ea397f5b 15509 obufp = mnemonicendp;
c608c12e 15510 mnemonic = Suffix3DNow[*codep++ & 0xff];
252b5132 15511 if (mnemonic)
2da11e11 15512 oappend (mnemonic);
252b5132
RH
15513 else
15514 {
15515 /* Since a variable sized modrm/sib chunk is between the start
15516 of the opcode (0x0f0f) and the opcode suffix, we need to do
15517 all the modrm processing first, and don't know until now that
15518 we have a bad opcode. This necessitates some cleaning up. */
ce518a5f
L
15519 op_out[0][0] = '\0';
15520 op_out[1][0] = '\0';
6608db57 15521 BadOp ();
252b5132 15522 }
ea397f5b 15523 mnemonicendp = obufp;
252b5132 15524}
c608c12e 15525
ea397f5b
L
15526static struct op simd_cmp_op[] =
15527{
15528 { STRING_COMMA_LEN ("eq") },
15529 { STRING_COMMA_LEN ("lt") },
15530 { STRING_COMMA_LEN ("le") },
15531 { STRING_COMMA_LEN ("unord") },
15532 { STRING_COMMA_LEN ("neq") },
15533 { STRING_COMMA_LEN ("nlt") },
15534 { STRING_COMMA_LEN ("nle") },
15535 { STRING_COMMA_LEN ("ord") }
c608c12e
AM
15536};
15537
15538static void
ad19981d 15539CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
c608c12e
AM
15540{
15541 unsigned int cmp_type;
15542
15543 FETCH_DATA (the_info, codep + 1);
15544 cmp_type = *codep++ & 0xff;
c0f3af97 15545 if (cmp_type < ARRAY_SIZE (simd_cmp_op))
c608c12e 15546 {
ad19981d 15547 char suffix [3];
ea397f5b 15548 char *p = mnemonicendp - 2;
ad19981d
L
15549 suffix[0] = p[0];
15550 suffix[1] = p[1];
15551 suffix[2] = '\0';
ea397f5b
L
15552 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
15553 mnemonicendp += simd_cmp_op[cmp_type].len;
c608c12e
AM
15554 }
15555 else
15556 {
ad19981d
L
15557 /* We have a reserved extension byte. Output it directly. */
15558 scratchbuf[0] = '$';
15559 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 15560 oappend_maybe_intel (scratchbuf);
ad19981d 15561 scratchbuf[0] = '\0';
c608c12e
AM
15562 }
15563}
15564
9916071f
AP
15565static void
15566OP_Mwaitx (int bytemode ATTRIBUTE_UNUSED,
15567 int sizeflag ATTRIBUTE_UNUSED)
15568{
15569 /* mwaitx %eax,%ecx,%ebx */
15570 if (!intel_syntax)
15571 {
15572 const char **names = (address_mode == mode_64bit
15573 ? names64 : names32);
15574 strcpy (op_out[0], names[0]);
15575 strcpy (op_out[1], names[1]);
15576 strcpy (op_out[2], names[3]);
15577 two_source_ops = 1;
15578 }
15579 /* Skip mod/rm byte. */
15580 MODRM_CHECK;
15581 codep++;
15582}
15583
ca164297 15584static void
b844680a
L
15585OP_Mwait (int bytemode ATTRIBUTE_UNUSED,
15586 int sizeflag ATTRIBUTE_UNUSED)
15587{
15588 /* mwait %eax,%ecx */
15589 if (!intel_syntax)
15590 {
15591 const char **names = (address_mode == mode_64bit
15592 ? names64 : names32);
15593 strcpy (op_out[0], names[0]);
15594 strcpy (op_out[1], names[1]);
15595 two_source_ops = 1;
15596 }
15597 /* Skip mod/rm byte. */
15598 MODRM_CHECK;
15599 codep++;
15600}
15601
15602static void
15603OP_Monitor (int bytemode ATTRIBUTE_UNUSED,
15604 int sizeflag ATTRIBUTE_UNUSED)
ca164297 15605{
b844680a
L
15606 /* monitor %eax,%ecx,%edx" */
15607 if (!intel_syntax)
ca164297 15608 {
b844680a 15609 const char **op1_names;
cb712a9e
L
15610 const char **names = (address_mode == mode_64bit
15611 ? names64 : names32);
1d9f512f 15612
b844680a
L
15613 if (!(prefixes & PREFIX_ADDR))
15614 op1_names = (address_mode == mode_16bit
15615 ? names16 : names);
ca164297
L
15616 else
15617 {
b844680a 15618 /* Remove "addr16/addr32". */
f16cd0d5 15619 all_prefixes[last_addr_prefix] = 0;
b844680a
L
15620 op1_names = (address_mode != mode_32bit
15621 ? names32 : names16);
15622 used_prefixes |= PREFIX_ADDR;
ca164297 15623 }
b844680a
L
15624 strcpy (op_out[0], op1_names[0]);
15625 strcpy (op_out[1], names[1]);
15626 strcpy (op_out[2], names[2]);
15627 two_source_ops = 1;
ca164297 15628 }
b844680a
L
15629 /* Skip mod/rm byte. */
15630 MODRM_CHECK;
15631 codep++;
30123838
JB
15632}
15633
6608db57
KH
15634static void
15635BadOp (void)
2da11e11 15636{
6608db57
KH
15637 /* Throw away prefixes and 1st. opcode byte. */
15638 codep = insn_codep + 1;
2da11e11
AM
15639 oappend ("(bad)");
15640}
4cc91dba 15641
35c52694
L
15642static void
15643REP_Fixup (int bytemode, int sizeflag)
15644{
15645 /* The 0xf3 prefix should be displayed as "rep" for ins, outs, movs,
15646 lods and stos. */
35c52694 15647 if (prefixes & PREFIX_REPZ)
f16cd0d5 15648 all_prefixes[last_repz_prefix] = REP_PREFIX;
35c52694
L
15649
15650 switch (bytemode)
15651 {
15652 case al_reg:
15653 case eAX_reg:
15654 case indir_dx_reg:
15655 OP_IMREG (bytemode, sizeflag);
15656 break;
15657 case eDI_reg:
15658 OP_ESreg (bytemode, sizeflag);
15659 break;
15660 case eSI_reg:
15661 OP_DSreg (bytemode, sizeflag);
15662 break;
15663 default:
15664 abort ();
15665 break;
15666 }
15667}
f5804c90 15668
7e8b059b
L
15669/* For BND-prefixed instructions 0xF2 prefix should be displayed as
15670 "bnd". */
15671
15672static void
15673BND_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15674{
15675 if (prefixes & PREFIX_REPNZ)
15676 all_prefixes[last_repnz_prefix] = BND_PREFIX;
15677}
15678
04ef582a
L
15679/* For NOTRACK-prefixed instructions, 0x3E prefix should be displayed as
15680 "notrack". */
15681
15682static void
15683NOTRACK_Fixup (int bytemode ATTRIBUTE_UNUSED,
15684 int sizeflag ATTRIBUTE_UNUSED)
15685{
9fef80d6 15686 if (active_seg_prefix == PREFIX_DS
04ef582a
L
15687 && (address_mode != mode_64bit || last_data_prefix < 0))
15688 {
4e9ac44a 15689 /* NOTRACK prefix is only valid on indirect branch instructions.
9fef80d6 15690 NB: DATA prefix is unsupported for Intel64. */
04ef582a
L
15691 active_seg_prefix = 0;
15692 all_prefixes[last_seg_prefix] = NOTRACK_PREFIX;
15693 }
15694}
15695
42164a71
L
15696/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
15697 "xacquire"/"xrelease" for memory operand if there is a LOCK prefix.
15698 */
15699
15700static void
15701HLE_Fixup1 (int bytemode, int sizeflag)
15702{
15703 if (modrm.mod != 3
15704 && (prefixes & PREFIX_LOCK) != 0)
15705 {
15706 if (prefixes & PREFIX_REPZ)
15707 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15708 if (prefixes & PREFIX_REPNZ)
15709 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
15710 }
15711
15712 OP_E (bytemode, sizeflag);
15713}
15714
15715/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
15716 "xacquire"/"xrelease" for memory operand. No check for LOCK prefix.
15717 */
15718
15719static void
15720HLE_Fixup2 (int bytemode, int sizeflag)
15721{
15722 if (modrm.mod != 3)
15723 {
15724 if (prefixes & PREFIX_REPZ)
15725 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15726 if (prefixes & PREFIX_REPNZ)
15727 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
15728 }
15729
15730 OP_E (bytemode, sizeflag);
15731}
15732
15733/* Similar to OP_E. But the 0xf3 prefixes should be displayed as
15734 "xrelease" for memory operand. No check for LOCK prefix. */
15735
15736static void
15737HLE_Fixup3 (int bytemode, int sizeflag)
15738{
15739 if (modrm.mod != 3
15740 && last_repz_prefix > last_repnz_prefix
15741 && (prefixes & PREFIX_REPZ) != 0)
15742 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15743
15744 OP_E (bytemode, sizeflag);
15745}
15746
f5804c90
L
15747static void
15748CMPXCHG8B_Fixup (int bytemode, int sizeflag)
15749{
161a04f6
L
15750 USED_REX (REX_W);
15751 if (rex & REX_W)
f5804c90
L
15752 {
15753 /* Change cmpxchg8b to cmpxchg16b. */
ea397f5b
L
15754 char *p = mnemonicendp - 2;
15755 mnemonicendp = stpcpy (p, "16b");
fb9c77c7 15756 bytemode = o_mode;
f5804c90 15757 }
42164a71
L
15758 else if ((prefixes & PREFIX_LOCK) != 0)
15759 {
15760 if (prefixes & PREFIX_REPZ)
15761 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15762 if (prefixes & PREFIX_REPNZ)
15763 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
15764 }
15765
f5804c90
L
15766 OP_M (bytemode, sizeflag);
15767}
42903f7f
L
15768
15769static void
15770XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED)
15771{
b9733481
L
15772 const char **names;
15773
c0f3af97
L
15774 if (need_vex)
15775 {
15776 switch (vex.length)
15777 {
15778 case 128:
b9733481 15779 names = names_xmm;
c0f3af97
L
15780 break;
15781 case 256:
b9733481 15782 names = names_ymm;
c0f3af97
L
15783 break;
15784 default:
15785 abort ();
15786 }
15787 }
15788 else
b9733481
L
15789 names = names_xmm;
15790 oappend (names[reg]);
42903f7f 15791}
381d071f
L
15792
15793static void
15794CRC32_Fixup (int bytemode, int sizeflag)
15795{
15796 /* Add proper suffix to "crc32". */
ea397f5b 15797 char *p = mnemonicendp;
381d071f
L
15798
15799 switch (bytemode)
15800 {
15801 case b_mode:
20592a94 15802 if (intel_syntax)
ea397f5b 15803 goto skip;
20592a94 15804
381d071f
L
15805 *p++ = 'b';
15806 break;
15807 case v_mode:
20592a94 15808 if (intel_syntax)
ea397f5b 15809 goto skip;
20592a94 15810
381d071f
L
15811 USED_REX (REX_W);
15812 if (rex & REX_W)
15813 *p++ = 'q';
7bb15c6f 15814 else
f16cd0d5
L
15815 {
15816 if (sizeflag & DFLAG)
15817 *p++ = 'l';
15818 else
15819 *p++ = 'w';
15820 used_prefixes |= (prefixes & PREFIX_DATA);
15821 }
381d071f
L
15822 break;
15823 default:
15824 oappend (INTERNAL_DISASSEMBLER_ERROR);
15825 break;
15826 }
ea397f5b 15827 mnemonicendp = p;
381d071f
L
15828 *p = '\0';
15829
ea397f5b 15830skip:
381d071f
L
15831 if (modrm.mod == 3)
15832 {
15833 int add;
15834
15835 /* Skip mod/rm byte. */
15836 MODRM_CHECK;
15837 codep++;
15838
15839 USED_REX (REX_B);
15840 add = (rex & REX_B) ? 8 : 0;
15841 if (bytemode == b_mode)
15842 {
15843 USED_REX (0);
15844 if (rex)
15845 oappend (names8rex[modrm.rm + add]);
15846 else
15847 oappend (names8[modrm.rm + add]);
15848 }
15849 else
15850 {
15851 USED_REX (REX_W);
15852 if (rex & REX_W)
15853 oappend (names64[modrm.rm + add]);
15854 else if ((prefixes & PREFIX_DATA))
15855 oappend (names16[modrm.rm + add]);
15856 else
15857 oappend (names32[modrm.rm + add]);
15858 }
15859 }
15860 else
9344ff29 15861 OP_E (bytemode, sizeflag);
381d071f 15862}
85f10a01 15863
eacc9c89
L
15864static void
15865FXSAVE_Fixup (int bytemode, int sizeflag)
15866{
15867 /* Add proper suffix to "fxsave" and "fxrstor". */
15868 USED_REX (REX_W);
15869 if (rex & REX_W)
15870 {
15871 char *p = mnemonicendp;
15872 *p++ = '6';
15873 *p++ = '4';
15874 *p = '\0';
15875 mnemonicendp = p;
15876 }
15877 OP_M (bytemode, sizeflag);
15878}
15879
15c7c1d8
JB
15880static void
15881PCMPESTR_Fixup (int bytemode, int sizeflag)
15882{
15883 /* Add proper suffix to "{,v}pcmpestr{i,m}". */
15884 if (!intel_syntax)
15885 {
15886 char *p = mnemonicendp;
15887
15888 USED_REX (REX_W);
15889 if (rex & REX_W)
15890 *p++ = 'q';
15891 else if (sizeflag & SUFFIX_ALWAYS)
15892 *p++ = 'l';
15893
15894 *p = '\0';
15895 mnemonicendp = p;
15896 }
15897
15898 OP_EX (bytemode, sizeflag);
15899}
15900
c0f3af97
L
15901/* Display the destination register operand for instructions with
15902 VEX. */
15903
15904static void
15905OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
15906{
539f890d 15907 int reg;
b9733481
L
15908 const char **names;
15909
c0f3af97
L
15910 if (!need_vex)
15911 abort ();
15912
15913 if (!need_vex_reg)
15914 return;
15915
539f890d 15916 reg = vex.register_specifier;
5f847646
JB
15917 if (address_mode != mode_64bit)
15918 reg &= 7;
15919 else if (vex.evex && !vex.v)
15920 reg += 16;
43234a1e 15921
539f890d
L
15922 if (bytemode == vex_scalar_mode)
15923 {
15924 oappend (names_xmm[reg]);
15925 return;
15926 }
15927
c0f3af97
L
15928 switch (vex.length)
15929 {
15930 case 128:
15931 switch (bytemode)
15932 {
15933 case vex_mode:
15934 case vex128_mode:
6c30d220 15935 case vex_vsib_q_w_dq_mode:
5fc35d96 15936 case vex_vsib_q_w_d_mode:
cb21baef
L
15937 names = names_xmm;
15938 break;
15939 case dq_mode:
390a6789 15940 if (rex & REX_W)
cb21baef
L
15941 names = names64;
15942 else
15943 names = names32;
c0f3af97 15944 break;
1ba585e8 15945 case mask_bd_mode:
43234a1e 15946 case mask_mode:
9889cbb1
L
15947 if (reg > 0x7)
15948 {
15949 oappend ("(bad)");
15950 return;
15951 }
43234a1e
L
15952 names = names_mask;
15953 break;
c0f3af97
L
15954 default:
15955 abort ();
15956 return;
15957 }
c0f3af97
L
15958 break;
15959 case 256:
15960 switch (bytemode)
15961 {
15962 case vex_mode:
15963 case vex256_mode:
6c30d220
L
15964 names = names_ymm;
15965 break;
15966 case vex_vsib_q_w_dq_mode:
5fc35d96 15967 case vex_vsib_q_w_d_mode:
6c30d220 15968 names = vex.w ? names_ymm : names_xmm;
c0f3af97 15969 break;
1ba585e8 15970 case mask_bd_mode:
43234a1e 15971 case mask_mode:
9889cbb1
L
15972 if (reg > 0x7)
15973 {
15974 oappend ("(bad)");
15975 return;
15976 }
43234a1e
L
15977 names = names_mask;
15978 break;
c0f3af97 15979 default:
a37a2806
NC
15980 /* See PR binutils/20893 for a reproducer. */
15981 oappend ("(bad)");
c0f3af97
L
15982 return;
15983 }
c0f3af97 15984 break;
43234a1e
L
15985 case 512:
15986 names = names_zmm;
15987 break;
c0f3af97
L
15988 default:
15989 abort ();
15990 break;
15991 }
539f890d 15992 oappend (names[reg]);
c0f3af97
L
15993}
15994
922d8de8
DR
15995/* Get the VEX immediate byte without moving codep. */
15996
15997static unsigned char
ccc5981b 15998get_vex_imm8 (int sizeflag, int opnum)
922d8de8
DR
15999{
16000 int bytes_before_imm = 0;
16001
922d8de8
DR
16002 if (modrm.mod != 3)
16003 {
16004 /* There are SIB/displacement bytes. */
16005 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
6c067bbb 16006 {
922d8de8 16007 /* 32/64 bit address mode */
6c067bbb 16008 int base = modrm.rm;
922d8de8
DR
16009
16010 /* Check SIB byte. */
6c067bbb
RM
16011 if (base == 4)
16012 {
16013 FETCH_DATA (the_info, codep + 1);
16014 base = *codep & 7;
16015 /* When decoding the third source, don't increase
16016 bytes_before_imm as this has already been incremented
16017 by one in OP_E_memory while decoding the second
16018 source operand. */
16019 if (opnum == 0)
16020 bytes_before_imm++;
16021 }
16022
16023 /* Don't increase bytes_before_imm when decoding the third source,
16024 it has already been incremented by OP_E_memory while decoding
16025 the second source operand. */
16026 if (opnum == 0)
16027 {
16028 switch (modrm.mod)
16029 {
16030 case 0:
16031 /* When modrm.rm == 5 or modrm.rm == 4 and base in
16032 SIB == 5, there is a 4 byte displacement. */
16033 if (base != 5)
16034 /* No displacement. */
16035 break;
1a0670f3 16036 /* Fall through. */
6c067bbb
RM
16037 case 2:
16038 /* 4 byte displacement. */
16039 bytes_before_imm += 4;
16040 break;
16041 case 1:
16042 /* 1 byte displacement. */
16043 bytes_before_imm++;
16044 break;
16045 }
16046 }
16047 }
922d8de8 16048 else
02e647f9
SP
16049 {
16050 /* 16 bit address mode */
6c067bbb
RM
16051 /* Don't increase bytes_before_imm when decoding the third source,
16052 it has already been incremented by OP_E_memory while decoding
16053 the second source operand. */
16054 if (opnum == 0)
16055 {
02e647f9
SP
16056 switch (modrm.mod)
16057 {
16058 case 0:
16059 /* When modrm.rm == 6, there is a 2 byte displacement. */
16060 if (modrm.rm != 6)
16061 /* No displacement. */
16062 break;
1a0670f3 16063 /* Fall through. */
02e647f9
SP
16064 case 2:
16065 /* 2 byte displacement. */
16066 bytes_before_imm += 2;
16067 break;
16068 case 1:
16069 /* 1 byte displacement: when decoding the third source,
16070 don't increase bytes_before_imm as this has already
16071 been incremented by one in OP_E_memory while decoding
16072 the second source operand. */
16073 if (opnum == 0)
16074 bytes_before_imm++;
ccc5981b 16075
02e647f9
SP
16076 break;
16077 }
922d8de8
DR
16078 }
16079 }
16080 }
16081
16082 FETCH_DATA (the_info, codep + bytes_before_imm + 1);
16083 return codep [bytes_before_imm];
16084}
16085
16086static void
16087OP_EX_VexReg (int bytemode, int sizeflag, int reg)
16088{
b9733481
L
16089 const char **names;
16090
922d8de8
DR
16091 if (reg == -1 && modrm.mod != 3)
16092 {
16093 OP_E_memory (bytemode, sizeflag);
16094 return;
16095 }
16096 else
16097 {
16098 if (reg == -1)
16099 {
16100 reg = modrm.rm;
16101 USED_REX (REX_B);
16102 if (rex & REX_B)
16103 reg += 8;
16104 }
5f847646
JB
16105 if (address_mode != mode_64bit)
16106 reg &= 7;
922d8de8
DR
16107 }
16108
16109 switch (vex.length)
16110 {
16111 case 128:
b9733481 16112 names = names_xmm;
922d8de8
DR
16113 break;
16114 case 256:
b9733481 16115 names = names_ymm;
922d8de8
DR
16116 break;
16117 default:
16118 abort ();
16119 }
b9733481 16120 oappend (names[reg]);
922d8de8
DR
16121}
16122
a683cc34
SP
16123static void
16124OP_EX_VexImmW (int bytemode, int sizeflag)
16125{
16126 int reg = -1;
16127 static unsigned char vex_imm8;
16128
16129 if (vex_w_done == 0)
16130 {
16131 vex_w_done = 1;
16132
16133 /* Skip mod/rm byte. */
16134 MODRM_CHECK;
16135 codep++;
16136
16137 vex_imm8 = get_vex_imm8 (sizeflag, 0);
16138
16139 if (vex.w)
16140 reg = vex_imm8 >> 4;
16141
16142 OP_EX_VexReg (bytemode, sizeflag, reg);
16143 }
16144 else if (vex_w_done == 1)
16145 {
16146 vex_w_done = 2;
16147
16148 if (!vex.w)
16149 reg = vex_imm8 >> 4;
16150
16151 OP_EX_VexReg (bytemode, sizeflag, reg);
16152 }
16153 else
16154 {
16155 /* Output the imm8 directly. */
16156 scratchbuf[0] = '$';
16157 print_operand_value (scratchbuf + 1, 1, vex_imm8 & 0xf);
9ce09ba2 16158 oappend_maybe_intel (scratchbuf);
a683cc34
SP
16159 scratchbuf[0] = '\0';
16160 codep++;
16161 }
16162}
16163
5dd85c99
SP
16164static void
16165OP_Vex_2src (int bytemode, int sizeflag)
16166{
16167 if (modrm.mod == 3)
16168 {
b9733481 16169 int reg = modrm.rm;
5dd85c99 16170 USED_REX (REX_B);
b9733481
L
16171 if (rex & REX_B)
16172 reg += 8;
16173 oappend (names_xmm[reg]);
5dd85c99
SP
16174 }
16175 else
16176 {
16177 if (intel_syntax
16178 && (bytemode == v_mode || bytemode == v_swap_mode))
16179 {
16180 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
16181 used_prefixes |= (prefixes & PREFIX_DATA);
16182 }
16183 OP_E (bytemode, sizeflag);
16184 }
16185}
16186
16187static void
16188OP_Vex_2src_1 (int bytemode, int sizeflag)
16189{
16190 if (modrm.mod == 3)
16191 {
16192 /* Skip mod/rm byte. */
16193 MODRM_CHECK;
16194 codep++;
16195 }
16196
16197 if (vex.w)
5f847646
JB
16198 {
16199 unsigned int reg = vex.register_specifier;
16200
16201 if (address_mode != mode_64bit)
16202 reg &= 7;
16203 oappend (names_xmm[reg]);
16204 }
5dd85c99
SP
16205 else
16206 OP_Vex_2src (bytemode, sizeflag);
16207}
16208
16209static void
16210OP_Vex_2src_2 (int bytemode, int sizeflag)
16211{
16212 if (vex.w)
16213 OP_Vex_2src (bytemode, sizeflag);
16214 else
5f847646
JB
16215 {
16216 unsigned int reg = vex.register_specifier;
16217
16218 if (address_mode != mode_64bit)
16219 reg &= 7;
16220 oappend (names_xmm[reg]);
16221 }
5dd85c99
SP
16222}
16223
922d8de8
DR
16224static void
16225OP_EX_VexW (int bytemode, int sizeflag)
16226{
16227 int reg = -1;
16228
16229 if (!vex_w_done)
16230 {
41effecb
SP
16231 /* Skip mod/rm byte. */
16232 MODRM_CHECK;
16233 codep++;
16234
922d8de8 16235 if (vex.w)
ccc5981b 16236 reg = get_vex_imm8 (sizeflag, 0) >> 4;
922d8de8
DR
16237 }
16238 else
16239 {
16240 if (!vex.w)
ccc5981b 16241 reg = get_vex_imm8 (sizeflag, 1) >> 4;
922d8de8
DR
16242 }
16243
16244 OP_EX_VexReg (bytemode, sizeflag, reg);
922d8de8 16245
3a2430e0
JB
16246 if (vex_w_done)
16247 codep++;
16248 vex_w_done = 1;
922d8de8
DR
16249}
16250
c0f3af97
L
16251static void
16252OP_REG_VexI4 (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16253{
16254 int reg;
b9733481
L
16255 const char **names;
16256
c0f3af97
L
16257 FETCH_DATA (the_info, codep + 1);
16258 reg = *codep++;
16259
16260 if (bytemode != x_mode)
16261 abort ();
16262
c0f3af97 16263 reg >>= 4;
5f847646
JB
16264 if (address_mode != mode_64bit)
16265 reg &= 7;
dae39acc 16266
c0f3af97
L
16267 switch (vex.length)
16268 {
16269 case 128:
b9733481 16270 names = names_xmm;
c0f3af97
L
16271 break;
16272 case 256:
b9733481 16273 names = names_ymm;
c0f3af97
L
16274 break;
16275 default:
16276 abort ();
16277 }
b9733481 16278 oappend (names[reg]);
c0f3af97
L
16279}
16280
922d8de8
DR
16281static void
16282OP_XMM_VexW (int bytemode, int sizeflag)
16283{
16284 /* Turn off the REX.W bit since it is used for swapping operands
16285 now. */
16286 rex &= ~REX_W;
16287 OP_XMM (bytemode, sizeflag);
16288}
16289
c0f3af97
L
16290static void
16291OP_EX_Vex (int bytemode, int sizeflag)
16292{
16293 if (modrm.mod != 3)
16294 {
16295 if (vex.register_specifier != 0)
16296 BadOp ();
16297 need_vex_reg = 0;
16298 }
16299 OP_EX (bytemode, sizeflag);
16300}
16301
16302static void
16303OP_XMM_Vex (int bytemode, int sizeflag)
16304{
16305 if (modrm.mod != 3)
16306 {
16307 if (vex.register_specifier != 0)
16308 BadOp ();
16309 need_vex_reg = 0;
16310 }
16311 OP_XMM (bytemode, sizeflag);
16312}
16313
ea397f5b
L
16314static struct op vex_cmp_op[] =
16315{
16316 { STRING_COMMA_LEN ("eq") },
16317 { STRING_COMMA_LEN ("lt") },
16318 { STRING_COMMA_LEN ("le") },
16319 { STRING_COMMA_LEN ("unord") },
16320 { STRING_COMMA_LEN ("neq") },
16321 { STRING_COMMA_LEN ("nlt") },
16322 { STRING_COMMA_LEN ("nle") },
16323 { STRING_COMMA_LEN ("ord") },
16324 { STRING_COMMA_LEN ("eq_uq") },
16325 { STRING_COMMA_LEN ("nge") },
16326 { STRING_COMMA_LEN ("ngt") },
16327 { STRING_COMMA_LEN ("false") },
16328 { STRING_COMMA_LEN ("neq_oq") },
16329 { STRING_COMMA_LEN ("ge") },
16330 { STRING_COMMA_LEN ("gt") },
16331 { STRING_COMMA_LEN ("true") },
16332 { STRING_COMMA_LEN ("eq_os") },
16333 { STRING_COMMA_LEN ("lt_oq") },
16334 { STRING_COMMA_LEN ("le_oq") },
16335 { STRING_COMMA_LEN ("unord_s") },
16336 { STRING_COMMA_LEN ("neq_us") },
16337 { STRING_COMMA_LEN ("nlt_uq") },
16338 { STRING_COMMA_LEN ("nle_uq") },
16339 { STRING_COMMA_LEN ("ord_s") },
16340 { STRING_COMMA_LEN ("eq_us") },
16341 { STRING_COMMA_LEN ("nge_uq") },
16342 { STRING_COMMA_LEN ("ngt_uq") },
16343 { STRING_COMMA_LEN ("false_os") },
16344 { STRING_COMMA_LEN ("neq_os") },
16345 { STRING_COMMA_LEN ("ge_oq") },
16346 { STRING_COMMA_LEN ("gt_oq") },
16347 { STRING_COMMA_LEN ("true_us") },
c0f3af97
L
16348};
16349
16350static void
16351VCMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16352{
16353 unsigned int cmp_type;
16354
16355 FETCH_DATA (the_info, codep + 1);
16356 cmp_type = *codep++ & 0xff;
16357 if (cmp_type < ARRAY_SIZE (vex_cmp_op))
16358 {
16359 char suffix [3];
ea397f5b 16360 char *p = mnemonicendp - 2;
c0f3af97
L
16361 suffix[0] = p[0];
16362 suffix[1] = p[1];
16363 suffix[2] = '\0';
ea397f5b
L
16364 sprintf (p, "%s%s", vex_cmp_op[cmp_type].name, suffix);
16365 mnemonicendp += vex_cmp_op[cmp_type].len;
c0f3af97
L
16366 }
16367 else
16368 {
16369 /* We have a reserved extension byte. Output it directly. */
16370 scratchbuf[0] = '$';
16371 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 16372 oappend_maybe_intel (scratchbuf);
c0f3af97
L
16373 scratchbuf[0] = '\0';
16374 }
16375}
16376
43234a1e
L
16377static void
16378VPCMP_Fixup (int bytemode ATTRIBUTE_UNUSED,
16379 int sizeflag ATTRIBUTE_UNUSED)
16380{
16381 unsigned int cmp_type;
16382
16383 if (!vex.evex)
16384 abort ();
16385
16386 FETCH_DATA (the_info, codep + 1);
16387 cmp_type = *codep++ & 0xff;
16388 /* There are aliases for immediates 0, 1, 2, 4, 5, 6.
16389 If it's the case, print suffix, otherwise - print the immediate. */
16390 if (cmp_type < ARRAY_SIZE (simd_cmp_op)
16391 && cmp_type != 3
16392 && cmp_type != 7)
16393 {
16394 char suffix [3];
16395 char *p = mnemonicendp - 2;
16396
16397 /* vpcmp* can have both one- and two-lettered suffix. */
16398 if (p[0] == 'p')
16399 {
16400 p++;
16401 suffix[0] = p[0];
16402 suffix[1] = '\0';
16403 }
16404 else
16405 {
16406 suffix[0] = p[0];
16407 suffix[1] = p[1];
16408 suffix[2] = '\0';
16409 }
16410
16411 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
16412 mnemonicendp += simd_cmp_op[cmp_type].len;
16413 }
be92cb14
JB
16414 else
16415 {
16416 /* We have a reserved extension byte. Output it directly. */
16417 scratchbuf[0] = '$';
16418 print_operand_value (scratchbuf + 1, 1, cmp_type);
16419 oappend_maybe_intel (scratchbuf);
16420 scratchbuf[0] = '\0';
16421 }
16422}
16423
16424static const struct op xop_cmp_op[] =
16425{
16426 { STRING_COMMA_LEN ("lt") },
16427 { STRING_COMMA_LEN ("le") },
16428 { STRING_COMMA_LEN ("gt") },
16429 { STRING_COMMA_LEN ("ge") },
16430 { STRING_COMMA_LEN ("eq") },
16431 { STRING_COMMA_LEN ("neq") },
16432 { STRING_COMMA_LEN ("false") },
16433 { STRING_COMMA_LEN ("true") }
16434};
16435
16436static void
16437VPCOM_Fixup (int bytemode ATTRIBUTE_UNUSED,
16438 int sizeflag ATTRIBUTE_UNUSED)
16439{
16440 unsigned int cmp_type;
16441
16442 FETCH_DATA (the_info, codep + 1);
16443 cmp_type = *codep++ & 0xff;
16444 if (cmp_type < ARRAY_SIZE (xop_cmp_op))
16445 {
16446 char suffix[3];
16447 char *p = mnemonicendp - 2;
16448
16449 /* vpcom* can have both one- and two-lettered suffix. */
16450 if (p[0] == 'm')
16451 {
16452 p++;
16453 suffix[0] = p[0];
16454 suffix[1] = '\0';
16455 }
16456 else
16457 {
16458 suffix[0] = p[0];
16459 suffix[1] = p[1];
16460 suffix[2] = '\0';
16461 }
16462
16463 sprintf (p, "%s%s", xop_cmp_op[cmp_type].name, suffix);
16464 mnemonicendp += xop_cmp_op[cmp_type].len;
16465 }
43234a1e
L
16466 else
16467 {
16468 /* We have a reserved extension byte. Output it directly. */
16469 scratchbuf[0] = '$';
16470 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 16471 oappend_maybe_intel (scratchbuf);
43234a1e
L
16472 scratchbuf[0] = '\0';
16473 }
16474}
16475
ea397f5b
L
16476static const struct op pclmul_op[] =
16477{
16478 { STRING_COMMA_LEN ("lql") },
16479 { STRING_COMMA_LEN ("hql") },
16480 { STRING_COMMA_LEN ("lqh") },
16481 { STRING_COMMA_LEN ("hqh") }
c0f3af97
L
16482};
16483
16484static void
16485PCLMUL_Fixup (int bytemode ATTRIBUTE_UNUSED,
16486 int sizeflag ATTRIBUTE_UNUSED)
16487{
16488 unsigned int pclmul_type;
16489
16490 FETCH_DATA (the_info, codep + 1);
16491 pclmul_type = *codep++ & 0xff;
16492 switch (pclmul_type)
16493 {
16494 case 0x10:
16495 pclmul_type = 2;
16496 break;
16497 case 0x11:
16498 pclmul_type = 3;
16499 break;
16500 default:
16501 break;
7bb15c6f 16502 }
c0f3af97
L
16503 if (pclmul_type < ARRAY_SIZE (pclmul_op))
16504 {
16505 char suffix [4];
ea397f5b 16506 char *p = mnemonicendp - 3;
c0f3af97
L
16507 suffix[0] = p[0];
16508 suffix[1] = p[1];
16509 suffix[2] = p[2];
16510 suffix[3] = '\0';
ea397f5b
L
16511 sprintf (p, "%s%s", pclmul_op[pclmul_type].name, suffix);
16512 mnemonicendp += pclmul_op[pclmul_type].len;
c0f3af97
L
16513 }
16514 else
16515 {
16516 /* We have a reserved extension byte. Output it directly. */
16517 scratchbuf[0] = '$';
16518 print_operand_value (scratchbuf + 1, 1, pclmul_type);
9ce09ba2 16519 oappend_maybe_intel (scratchbuf);
c0f3af97
L
16520 scratchbuf[0] = '\0';
16521 }
16522}
16523
f1f8f695
L
16524static void
16525MOVBE_Fixup (int bytemode, int sizeflag)
16526{
16527 /* Add proper suffix to "movbe". */
ea397f5b 16528 char *p = mnemonicendp;
f1f8f695
L
16529
16530 switch (bytemode)
16531 {
16532 case v_mode:
16533 if (intel_syntax)
ea397f5b 16534 goto skip;
f1f8f695
L
16535
16536 USED_REX (REX_W);
16537 if (sizeflag & SUFFIX_ALWAYS)
16538 {
16539 if (rex & REX_W)
16540 *p++ = 'q';
f1f8f695 16541 else
f16cd0d5
L
16542 {
16543 if (sizeflag & DFLAG)
16544 *p++ = 'l';
16545 else
16546 *p++ = 'w';
16547 used_prefixes |= (prefixes & PREFIX_DATA);
16548 }
f1f8f695 16549 }
f1f8f695
L
16550 break;
16551 default:
16552 oappend (INTERNAL_DISASSEMBLER_ERROR);
16553 break;
16554 }
ea397f5b 16555 mnemonicendp = p;
f1f8f695
L
16556 *p = '\0';
16557
ea397f5b 16558skip:
f1f8f695
L
16559 OP_M (bytemode, sizeflag);
16560}
f88c9eb0
SP
16561
16562static void
16563OP_LWPCB_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16564{
16565 int reg;
16566 const char **names;
16567
16568 /* Skip mod/rm byte. */
16569 MODRM_CHECK;
16570 codep++;
16571
390a6789 16572 if (rex & REX_W)
f88c9eb0 16573 names = names64;
f88c9eb0 16574 else
ce7d077e 16575 names = names32;
f88c9eb0
SP
16576
16577 reg = modrm.rm;
16578 USED_REX (REX_B);
16579 if (rex & REX_B)
16580 reg += 8;
16581
16582 oappend (names[reg]);
16583}
16584
16585static void
16586OP_LWP_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16587{
16588 const char **names;
5f847646 16589 unsigned int reg = vex.register_specifier;
f88c9eb0 16590
390a6789 16591 if (rex & REX_W)
f88c9eb0 16592 names = names64;
f88c9eb0 16593 else
ce7d077e 16594 names = names32;
f88c9eb0 16595
5f847646
JB
16596 if (address_mode != mode_64bit)
16597 reg &= 7;
16598 oappend (names[reg]);
f88c9eb0 16599}
43234a1e
L
16600
16601static void
16602OP_Mask (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16603{
16604 if (!vex.evex
1ba585e8 16605 || (bytemode != mask_mode && bytemode != mask_bd_mode))
43234a1e
L
16606 abort ();
16607
16608 USED_REX (REX_R);
16609 if ((rex & REX_R) != 0 || !vex.r)
16610 {
16611 BadOp ();
16612 return;
16613 }
16614
16615 oappend (names_mask [modrm.reg]);
16616}
16617
16618static void
16619OP_Rounding (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16620{
16621 if (!vex.evex
16622 || (bytemode != evex_rounding_mode
70df6fc9 16623 && bytemode != evex_rounding_64_mode
43234a1e
L
16624 && bytemode != evex_sae_mode))
16625 abort ();
16626 if (modrm.mod == 3 && vex.b)
16627 switch (bytemode)
16628 {
70df6fc9
L
16629 case evex_rounding_64_mode:
16630 if (address_mode != mode_64bit)
16631 {
16632 oappend ("(bad)");
16633 break;
16634 }
16635 /* Fall through. */
43234a1e
L
16636 case evex_rounding_mode:
16637 oappend (names_rounding[vex.ll]);
16638 break;
16639 case evex_sae_mode:
16640 oappend ("{sae}");
16641 break;
16642 default:
16643 break;
16644 }
16645}
This page took 2.30291 seconds and 4 git commands to generate.