i386: Check vector length for EVEX broadcast instructions
[deliverable/binutils-gdb.git] / opcodes / i386-dis.c
CommitLineData
252b5132 1/* Print i386 instructions for GDB, the GNU debugger.
82704155 2 Copyright (C) 1988-2019 Free Software Foundation, Inc.
252b5132 3
9b201bb5 4 This file is part of the GNU opcodes library.
20f0a1fc 5
9b201bb5 6 This library is free software; you can redistribute it and/or modify
20f0a1fc 7 it under the terms of the GNU General Public License as published by
9b201bb5
NC
8 the Free Software Foundation; either version 3, or (at your option)
9 any later version.
20f0a1fc 10
9b201bb5
NC
11 It is distributed in the hope that it will be useful, but WITHOUT
12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
14 License for more details.
20f0a1fc
NC
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
9b201bb5
NC
18 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
19 MA 02110-1301, USA. */
20
20f0a1fc
NC
21
22/* 80386 instruction printer by Pace Willisson (pace@prep.ai.mit.edu)
23 July 1988
24 modified by John Hassey (hassey@dg-rtp.dg.com)
25 x86-64 support added by Jan Hubicka (jh@suse.cz)
26 VIA PadLock support by Michal Ludvig (mludvig@suse.cz). */
27
28/* The main tables describing the instructions is essentially a copy
29 of the "Opcode Map" chapter (Appendix A) of the Intel 80386
30 Programmers Manual. Usually, there is a capital letter, followed
31 by a small letter. The capital letter tell the addressing mode,
32 and the small letter tells about the operand size. Refer to
33 the Intel manual for details. */
252b5132 34
252b5132 35#include "sysdep.h"
88c1242d 36#include "disassemble.h"
252b5132 37#include "opintl.h"
0b1cf022 38#include "opcode/i386.h"
85f10a01 39#include "libiberty.h"
252b5132
RH
40
41#include <setjmp.h>
42
26ca5450
AJ
43static int print_insn (bfd_vma, disassemble_info *);
44static void dofloat (int);
45static void OP_ST (int, int);
46static void OP_STi (int, int);
47static int putop (const char *, int);
48static void oappend (const char *);
49static void append_seg (void);
50static void OP_indirE (int, int);
51static void print_operand_value (char *, int, bfd_vma);
c0f3af97 52static void OP_E_register (int, int);
c1e679ec 53static void OP_E_memory (int, int);
5d669648 54static void print_displacement (char *, bfd_vma);
26ca5450
AJ
55static void OP_E (int, int);
56static void OP_G (int, int);
57static bfd_vma get64 (void);
58static bfd_signed_vma get32 (void);
59static bfd_signed_vma get32s (void);
60static int get16 (void);
61static void set_op (bfd_vma, int);
b844680a 62static void OP_Skip_MODRM (int, int);
26ca5450
AJ
63static void OP_REG (int, int);
64static void OP_IMREG (int, int);
65static void OP_I (int, int);
66static void OP_I64 (int, int);
67static void OP_sI (int, int);
68static void OP_J (int, int);
69static void OP_SEG (int, int);
70static void OP_DIR (int, int);
71static void OP_OFF (int, int);
72static void OP_OFF64 (int, int);
73static void ptr_reg (int, int);
74static void OP_ESreg (int, int);
75static void OP_DSreg (int, int);
76static void OP_C (int, int);
77static void OP_D (int, int);
78static void OP_T (int, int);
6f74c397 79static void OP_R (int, int);
26ca5450
AJ
80static void OP_MMX (int, int);
81static void OP_XMM (int, int);
82static void OP_EM (int, int);
83static void OP_EX (int, int);
4d9567e0
MM
84static void OP_EMC (int,int);
85static void OP_MXC (int,int);
26ca5450
AJ
86static void OP_MS (int, int);
87static void OP_XS (int, int);
cc0ec051 88static void OP_M (int, int);
c0f3af97
L
89static void OP_VEX (int, int);
90static void OP_EX_Vex (int, int);
922d8de8 91static void OP_EX_VexW (int, int);
a683cc34 92static void OP_EX_VexImmW (int, int);
c0f3af97 93static void OP_XMM_Vex (int, int);
922d8de8 94static void OP_XMM_VexW (int, int);
43234a1e 95static void OP_Rounding (int, int);
c0f3af97
L
96static void OP_REG_VexI4 (int, int);
97static void PCLMUL_Fixup (int, int);
c0f3af97 98static void VCMP_Fixup (int, int);
43234a1e 99static void VPCMP_Fixup (int, int);
be92cb14 100static void VPCOM_Fixup (int, int);
cc0ec051 101static void OP_0f07 (int, int);
b844680a
L
102static void OP_Monitor (int, int);
103static void OP_Mwait (int, int);
9916071f 104static void OP_Mwaitx (int, int);
46e883c5
L
105static void NOP_Fixup1 (int, int);
106static void NOP_Fixup2 (int, int);
26ca5450 107static void OP_3DNowSuffix (int, int);
ad19981d 108static void CMP_Fixup (int, int);
26ca5450 109static void BadOp (void);
35c52694 110static void REP_Fixup (int, int);
7e8b059b 111static void BND_Fixup (int, int);
04ef582a 112static void NOTRACK_Fixup (int, int);
42164a71
L
113static void HLE_Fixup1 (int, int);
114static void HLE_Fixup2 (int, int);
115static void HLE_Fixup3 (int, int);
f5804c90 116static void CMPXCHG8B_Fixup (int, int);
42903f7f 117static void XMM_Fixup (int, int);
381d071f 118static void CRC32_Fixup (int, int);
eacc9c89 119static void FXSAVE_Fixup (int, int);
15c7c1d8 120static void PCMPESTR_Fixup (int, int);
f88c9eb0
SP
121static void OP_LWPCB_E (int, int);
122static void OP_LWP_E (int, int);
5dd85c99
SP
123static void OP_Vex_2src_1 (int, int);
124static void OP_Vex_2src_2 (int, int);
c1e679ec 125
f1f8f695 126static void MOVBE_Fixup (int, int);
252b5132 127
43234a1e
L
128static void OP_Mask (int, int);
129
6608db57 130struct dis_private {
252b5132
RH
131 /* Points to first byte not fetched. */
132 bfd_byte *max_fetched;
0b1cf022 133 bfd_byte the_buffer[MAX_MNEM_SIZE];
252b5132 134 bfd_vma insn_start;
e396998b 135 int orig_sizeflag;
8df14d78 136 OPCODES_SIGJMP_BUF bailout;
252b5132
RH
137};
138
cb712a9e
L
139enum address_mode
140{
141 mode_16bit,
142 mode_32bit,
143 mode_64bit
144};
145
146enum address_mode address_mode;
52b15da3 147
5076851f
ILT
148/* Flags for the prefixes for the current instruction. See below. */
149static int prefixes;
150
52b15da3
JH
151/* REX prefix the current instruction. See below. */
152static int rex;
153/* Bits of REX we've already used. */
154static int rex_used;
d869730d 155/* REX bits in original REX prefix ignored. */
c0f3af97 156static int rex_ignored;
52b15da3
JH
157/* Mark parts used in the REX prefix. When we are testing for
158 empty prefix (for 8bit register REX extension), just mask it
159 out. Otherwise test for REX bit is excuse for existence of REX
160 only in case value is nonzero. */
161#define USED_REX(value) \
162 { \
163 if (value) \
161a04f6
L
164 { \
165 if ((rex & value)) \
166 rex_used |= (value) | REX_OPCODE; \
167 } \
52b15da3 168 else \
161a04f6 169 rex_used |= REX_OPCODE; \
52b15da3
JH
170 }
171
7d421014
ILT
172/* Flags for prefixes which we somehow handled when printing the
173 current instruction. */
174static int used_prefixes;
175
5076851f
ILT
176/* Flags stored in PREFIXES. */
177#define PREFIX_REPZ 1
178#define PREFIX_REPNZ 2
179#define PREFIX_LOCK 4
180#define PREFIX_CS 8
181#define PREFIX_SS 0x10
182#define PREFIX_DS 0x20
183#define PREFIX_ES 0x40
184#define PREFIX_FS 0x80
185#define PREFIX_GS 0x100
186#define PREFIX_DATA 0x200
187#define PREFIX_ADDR 0x400
188#define PREFIX_FWAIT 0x800
189
252b5132
RH
190/* Make sure that bytes from INFO->PRIVATE_DATA->BUFFER (inclusive)
191 to ADDR (exclusive) are valid. Returns 1 for success, longjmps
192 on error. */
193#define FETCH_DATA(info, addr) \
6608db57 194 ((addr) <= ((struct dis_private *) (info->private_data))->max_fetched \
252b5132
RH
195 ? 1 : fetch_data ((info), (addr)))
196
197static int
26ca5450 198fetch_data (struct disassemble_info *info, bfd_byte *addr)
252b5132
RH
199{
200 int status;
6608db57 201 struct dis_private *priv = (struct dis_private *) info->private_data;
252b5132
RH
202 bfd_vma start = priv->insn_start + (priv->max_fetched - priv->the_buffer);
203
0b1cf022 204 if (addr <= priv->the_buffer + MAX_MNEM_SIZE)
272c9217
JB
205 status = (*info->read_memory_func) (start,
206 priv->max_fetched,
207 addr - priv->max_fetched,
208 info);
209 else
210 status = -1;
252b5132
RH
211 if (status != 0)
212 {
7d421014 213 /* If we did manage to read at least one byte, then
db6eb5be
AM
214 print_insn_i386 will do something sensible. Otherwise, print
215 an error. We do that here because this is where we know
216 STATUS. */
7d421014 217 if (priv->max_fetched == priv->the_buffer)
5076851f 218 (*info->memory_error_func) (status, start, info);
8df14d78 219 OPCODES_SIGLONGJMP (priv->bailout, 1);
252b5132
RH
220 }
221 else
222 priv->max_fetched = addr;
223 return 1;
224}
225
bf890a93 226/* Possible values for prefix requirement. */
507bd325
L
227#define PREFIX_IGNORED_SHIFT 16
228#define PREFIX_IGNORED_REPZ (PREFIX_REPZ << PREFIX_IGNORED_SHIFT)
229#define PREFIX_IGNORED_REPNZ (PREFIX_REPNZ << PREFIX_IGNORED_SHIFT)
230#define PREFIX_IGNORED_DATA (PREFIX_DATA << PREFIX_IGNORED_SHIFT)
231#define PREFIX_IGNORED_ADDR (PREFIX_ADDR << PREFIX_IGNORED_SHIFT)
232#define PREFIX_IGNORED_LOCK (PREFIX_LOCK << PREFIX_IGNORED_SHIFT)
233
234/* Opcode prefixes. */
235#define PREFIX_OPCODE (PREFIX_REPZ \
236 | PREFIX_REPNZ \
237 | PREFIX_DATA)
238
239/* Prefixes ignored. */
240#define PREFIX_IGNORED (PREFIX_IGNORED_REPZ \
241 | PREFIX_IGNORED_REPNZ \
242 | PREFIX_IGNORED_DATA)
bf890a93 243
ce518a5f 244#define XX { NULL, 0 }
507bd325 245#define Bad_Opcode NULL, { { NULL, 0 } }, 0
ce518a5f
L
246
247#define Eb { OP_E, b_mode }
7e8b059b 248#define Ebnd { OP_E, bnd_mode }
b6169b20 249#define EbS { OP_E, b_swap_mode }
9f79e886 250#define EbndS { OP_E, bnd_swap_mode }
ce518a5f 251#define Ev { OP_E, v_mode }
de89d0a3 252#define Eva { OP_E, va_mode }
7e8b059b 253#define Ev_bnd { OP_E, v_bnd_mode }
b6169b20 254#define EvS { OP_E, v_swap_mode }
ce518a5f
L
255#define Ed { OP_E, d_mode }
256#define Edq { OP_E, dq_mode }
257#define Edqw { OP_E, dqw_mode }
42903f7f 258#define Edqb { OP_E, dqb_mode }
1ba585e8
IT
259#define Edb { OP_E, db_mode }
260#define Edw { OP_E, dw_mode }
42903f7f 261#define Edqd { OP_E, dqd_mode }
d20dee9e 262#define Edqa { OP_E, dqa_mode }
09335d05 263#define Eq { OP_E, q_mode }
07f5af7d 264#define indirEv { OP_indirE, indir_v_mode }
ce518a5f
L
265#define indirEp { OP_indirE, f_mode }
266#define stackEv { OP_E, stack_v_mode }
267#define Em { OP_E, m_mode }
268#define Ew { OP_E, w_mode }
269#define M { OP_M, 0 } /* lea, lgdt, etc. */
34b772a6 270#define Ma { OP_M, a_mode }
b844680a 271#define Mb { OP_M, b_mode }
d9a5e5e5 272#define Md { OP_M, d_mode }
f1f8f695 273#define Mo { OP_M, o_mode }
ce518a5f
L
274#define Mp { OP_M, f_mode } /* 32 or 48 bit memory operand for LDS, LES etc */
275#define Mq { OP_M, q_mode }
d276ec69 276#define Mv_bnd { OP_M, v_bndmk_mode }
4ee52178 277#define Mx { OP_M, x_mode }
c0f3af97 278#define Mxmm { OP_M, xmm_mode }
ce518a5f 279#define Gb { OP_G, b_mode }
7e8b059b 280#define Gbnd { OP_G, bnd_mode }
ce518a5f
L
281#define Gv { OP_G, v_mode }
282#define Gd { OP_G, d_mode }
283#define Gdq { OP_G, dq_mode }
284#define Gm { OP_G, m_mode }
c0a30a9f 285#define Gva { OP_G, va_mode }
ce518a5f 286#define Gw { OP_G, w_mode }
6f74c397 287#define Rd { OP_R, d_mode }
43234a1e 288#define Rdq { OP_R, dq_mode }
6f74c397 289#define Rm { OP_R, m_mode }
ce518a5f
L
290#define Ib { OP_I, b_mode }
291#define sIb { OP_sI, b_mode } /* sign extened byte */
e3949f17 292#define sIbT { OP_sI, b_T_mode } /* sign extened byte like 'T' */
ce518a5f 293#define Iv { OP_I, v_mode }
7bb15c6f 294#define sIv { OP_sI, v_mode }
ce518a5f
L
295#define Iq { OP_I, q_mode }
296#define Iv64 { OP_I64, v_mode }
297#define Iw { OP_I, w_mode }
298#define I1 { OP_I, const_1_mode }
299#define Jb { OP_J, b_mode }
300#define Jv { OP_J, v_mode }
301#define Cm { OP_C, m_mode }
302#define Dm { OP_D, m_mode }
303#define Td { OP_T, d_mode }
b844680a 304#define Skip_MODRM { OP_Skip_MODRM, 0 }
ce518a5f
L
305
306#define RMeAX { OP_REG, eAX_reg }
307#define RMeBX { OP_REG, eBX_reg }
308#define RMeCX { OP_REG, eCX_reg }
309#define RMeDX { OP_REG, eDX_reg }
310#define RMeSP { OP_REG, eSP_reg }
311#define RMeBP { OP_REG, eBP_reg }
312#define RMeSI { OP_REG, eSI_reg }
313#define RMeDI { OP_REG, eDI_reg }
314#define RMrAX { OP_REG, rAX_reg }
315#define RMrBX { OP_REG, rBX_reg }
316#define RMrCX { OP_REG, rCX_reg }
317#define RMrDX { OP_REG, rDX_reg }
318#define RMrSP { OP_REG, rSP_reg }
319#define RMrBP { OP_REG, rBP_reg }
320#define RMrSI { OP_REG, rSI_reg }
321#define RMrDI { OP_REG, rDI_reg }
322#define RMAL { OP_REG, al_reg }
ce518a5f
L
323#define RMCL { OP_REG, cl_reg }
324#define RMDL { OP_REG, dl_reg }
325#define RMBL { OP_REG, bl_reg }
326#define RMAH { OP_REG, ah_reg }
327#define RMCH { OP_REG, ch_reg }
328#define RMDH { OP_REG, dh_reg }
329#define RMBH { OP_REG, bh_reg }
330#define RMAX { OP_REG, ax_reg }
331#define RMDX { OP_REG, dx_reg }
332
333#define eAX { OP_IMREG, eAX_reg }
334#define eBX { OP_IMREG, eBX_reg }
335#define eCX { OP_IMREG, eCX_reg }
336#define eDX { OP_IMREG, eDX_reg }
337#define eSP { OP_IMREG, eSP_reg }
338#define eBP { OP_IMREG, eBP_reg }
339#define eSI { OP_IMREG, eSI_reg }
340#define eDI { OP_IMREG, eDI_reg }
341#define AL { OP_IMREG, al_reg }
342#define CL { OP_IMREG, cl_reg }
343#define DL { OP_IMREG, dl_reg }
344#define BL { OP_IMREG, bl_reg }
345#define AH { OP_IMREG, ah_reg }
346#define CH { OP_IMREG, ch_reg }
347#define DH { OP_IMREG, dh_reg }
348#define BH { OP_IMREG, bh_reg }
349#define AX { OP_IMREG, ax_reg }
350#define DX { OP_IMREG, dx_reg }
351#define zAX { OP_IMREG, z_mode_ax_reg }
352#define indirDX { OP_IMREG, indir_dx_reg }
353
354#define Sw { OP_SEG, w_mode }
355#define Sv { OP_SEG, v_mode }
356#define Ap { OP_DIR, 0 }
357#define Ob { OP_OFF64, b_mode }
358#define Ov { OP_OFF64, v_mode }
359#define Xb { OP_DSreg, eSI_reg }
360#define Xv { OP_DSreg, eSI_reg }
361#define Xz { OP_DSreg, eSI_reg }
362#define Yb { OP_ESreg, eDI_reg }
363#define Yv { OP_ESreg, eDI_reg }
364#define DSBX { OP_DSreg, eBX_reg }
365
366#define es { OP_REG, es_reg }
367#define ss { OP_REG, ss_reg }
368#define cs { OP_REG, cs_reg }
369#define ds { OP_REG, ds_reg }
370#define fs { OP_REG, fs_reg }
371#define gs { OP_REG, gs_reg }
372
373#define MX { OP_MMX, 0 }
374#define XM { OP_XMM, 0 }
539f890d 375#define XMScalar { OP_XMM, scalar_mode }
6c30d220 376#define XMGatherQ { OP_XMM, vex_vsib_q_w_dq_mode }
c0f3af97 377#define XMM { OP_XMM, xmm_mode }
43234a1e 378#define XMxmmq { OP_XMM, xmmq_mode }
ce518a5f 379#define EM { OP_EM, v_mode }
b6169b20 380#define EMS { OP_EM, v_swap_mode }
09a2c6cf 381#define EMd { OP_EM, d_mode }
14051056 382#define EMx { OP_EM, x_mode }
53467f57 383#define EXbScalar { OP_EX, b_scalar_mode }
8976381e 384#define EXw { OP_EX, w_mode }
53467f57 385#define EXwScalar { OP_EX, w_scalar_mode }
09a2c6cf 386#define EXd { OP_EX, d_mode }
539f890d 387#define EXdScalar { OP_EX, d_scalar_mode }
fa99fab2 388#define EXdS { OP_EX, d_swap_mode }
43234a1e 389#define EXdScalarS { OP_EX, d_scalar_swap_mode }
09a2c6cf 390#define EXq { OP_EX, q_mode }
539f890d
L
391#define EXqScalar { OP_EX, q_scalar_mode }
392#define EXqScalarS { OP_EX, q_scalar_swap_mode }
b6169b20 393#define EXqS { OP_EX, q_swap_mode }
09a2c6cf 394#define EXx { OP_EX, x_mode }
b6169b20 395#define EXxS { OP_EX, x_swap_mode }
c0f3af97 396#define EXxmm { OP_EX, xmm_mode }
43234a1e 397#define EXymm { OP_EX, ymm_mode }
c0f3af97 398#define EXxmmq { OP_EX, xmmq_mode }
43234a1e 399#define EXEvexHalfBcstXmmq { OP_EX, evex_half_bcst_xmmq_mode }
6c30d220
L
400#define EXxmm_mb { OP_EX, xmm_mb_mode }
401#define EXxmm_mw { OP_EX, xmm_mw_mode }
402#define EXxmm_md { OP_EX, xmm_md_mode }
403#define EXxmm_mq { OP_EX, xmm_mq_mode }
43234a1e 404#define EXxmm_mdq { OP_EX, xmm_mdq_mode }
6c30d220
L
405#define EXxmmdw { OP_EX, xmmdw_mode }
406#define EXxmmqd { OP_EX, xmmqd_mode }
c0f3af97 407#define EXymmq { OP_EX, ymmq_mode }
0bfee649 408#define EXVexWdq { OP_EX, vex_w_dq_mode }
1c480963 409#define EXVexWdqScalar { OP_EX, vex_scalar_w_dq_mode }
43234a1e
L
410#define EXEvexXGscat { OP_EX, evex_x_gscat_mode }
411#define EXEvexXNoBcst { OP_EX, evex_x_nobcst_mode }
ce518a5f
L
412#define MS { OP_MS, v_mode }
413#define XS { OP_XS, v_mode }
09335d05 414#define EMCq { OP_EMC, q_mode }
ce518a5f 415#define MXC { OP_MXC, 0 }
ce518a5f 416#define OPSUF { OP_3DNowSuffix, 0 }
ad19981d 417#define CMP { CMP_Fixup, 0 }
42903f7f 418#define XMM0 { XMM_Fixup, 0 }
eacc9c89 419#define FXSAVE { FXSAVE_Fixup, 0 }
5dd85c99
SP
420#define Vex_2src_1 { OP_Vex_2src_1, 0 }
421#define Vex_2src_2 { OP_Vex_2src_2, 0 }
252b5132 422
c0f3af97 423#define Vex { OP_VEX, vex_mode }
539f890d 424#define VexScalar { OP_VEX, vex_scalar_mode }
6c30d220 425#define VexGatherQ { OP_VEX, vex_vsib_q_w_dq_mode }
c0f3af97
L
426#define Vex128 { OP_VEX, vex128_mode }
427#define Vex256 { OP_VEX, vex256_mode }
cb21baef 428#define VexGdq { OP_VEX, dq_mode }
c0f3af97 429#define EXdVex { OP_EX_Vex, d_mode }
fa99fab2 430#define EXdVexS { OP_EX_Vex, d_swap_mode }
539f890d 431#define EXdVexScalarS { OP_EX_Vex, d_scalar_swap_mode }
c0f3af97 432#define EXqVex { OP_EX_Vex, q_mode }
fa99fab2 433#define EXqVexS { OP_EX_Vex, q_swap_mode }
539f890d 434#define EXqVexScalarS { OP_EX_Vex, q_scalar_swap_mode }
922d8de8
DR
435#define EXVexW { OP_EX_VexW, x_mode }
436#define EXdVexW { OP_EX_VexW, d_mode }
437#define EXqVexW { OP_EX_VexW, q_mode }
a683cc34 438#define EXVexImmW { OP_EX_VexImmW, x_mode }
c0f3af97 439#define XMVex { OP_XMM_Vex, 0 }
539f890d 440#define XMVexScalar { OP_XMM_Vex, scalar_mode }
922d8de8 441#define XMVexW { OP_XMM_VexW, 0 }
c0f3af97
L
442#define XMVexI4 { OP_REG_VexI4, x_mode }
443#define PCLMUL { PCLMUL_Fixup, 0 }
c0f3af97 444#define VCMP { VCMP_Fixup, 0 }
43234a1e 445#define VPCMP { VPCMP_Fixup, 0 }
be92cb14 446#define VPCOM { VPCOM_Fixup, 0 }
43234a1e
L
447
448#define EXxEVexR { OP_Rounding, evex_rounding_mode }
70df6fc9 449#define EXxEVexR64 { OP_Rounding, evex_rounding_64_mode }
43234a1e
L
450#define EXxEVexS { OP_Rounding, evex_sae_mode }
451
452#define XMask { OP_Mask, mask_mode }
453#define MaskG { OP_G, mask_mode }
454#define MaskE { OP_E, mask_mode }
1ba585e8 455#define MaskBDE { OP_E, mask_bd_mode }
43234a1e
L
456#define MaskR { OP_R, mask_mode }
457#define MaskVex { OP_VEX, mask_mode }
c0f3af97 458
6c30d220 459#define MVexVSIBDWpX { OP_M, vex_vsib_d_w_dq_mode }
5fc35d96 460#define MVexVSIBDQWpX { OP_M, vex_vsib_d_w_d_mode }
6c30d220 461#define MVexVSIBQWpX { OP_M, vex_vsib_q_w_dq_mode }
5fc35d96 462#define MVexVSIBQDWpX { OP_M, vex_vsib_q_w_d_mode }
6c30d220 463
35c52694 464/* Used handle "rep" prefix for string instructions. */
ce518a5f
L
465#define Xbr { REP_Fixup, eSI_reg }
466#define Xvr { REP_Fixup, eSI_reg }
467#define Ybr { REP_Fixup, eDI_reg }
468#define Yvr { REP_Fixup, eDI_reg }
469#define Yzr { REP_Fixup, eDI_reg }
470#define indirDXr { REP_Fixup, indir_dx_reg }
471#define ALr { REP_Fixup, al_reg }
472#define eAXr { REP_Fixup, eAX_reg }
473
42164a71
L
474/* Used handle HLE prefix for lockable instructions. */
475#define Ebh1 { HLE_Fixup1, b_mode }
476#define Evh1 { HLE_Fixup1, v_mode }
477#define Ebh2 { HLE_Fixup2, b_mode }
478#define Evh2 { HLE_Fixup2, v_mode }
479#define Ebh3 { HLE_Fixup3, b_mode }
480#define Evh3 { HLE_Fixup3, v_mode }
481
7e8b059b 482#define BND { BND_Fixup, 0 }
04ef582a 483#define NOTRACK { NOTRACK_Fixup, 0 }
7e8b059b 484
ce518a5f
L
485#define cond_jump_flag { NULL, cond_jump_mode }
486#define loop_jcxz_flag { NULL, loop_jcxz_mode }
3ffd33cf 487
252b5132 488/* bits in sizeflag */
252b5132 489#define SUFFIX_ALWAYS 4
252b5132
RH
490#define AFLAG 2
491#define DFLAG 1
492
51e7da1b
L
493enum
494{
495 /* byte operand */
496 b_mode = 1,
497 /* byte operand with operand swapped */
3873ba12 498 b_swap_mode,
e3949f17
L
499 /* byte operand, sign extend like 'T' suffix */
500 b_T_mode,
51e7da1b 501 /* operand size depends on prefixes */
3873ba12 502 v_mode,
51e7da1b 503 /* operand size depends on prefixes with operand swapped */
3873ba12 504 v_swap_mode,
de89d0a3
IT
505 /* operand size depends on address prefix */
506 va_mode,
51e7da1b 507 /* word operand */
3873ba12 508 w_mode,
51e7da1b 509 /* double word operand */
3873ba12 510 d_mode,
51e7da1b 511 /* double word operand with operand swapped */
3873ba12 512 d_swap_mode,
51e7da1b 513 /* quad word operand */
3873ba12 514 q_mode,
51e7da1b 515 /* quad word operand with operand swapped */
3873ba12 516 q_swap_mode,
51e7da1b 517 /* ten-byte operand */
3873ba12 518 t_mode,
43234a1e
L
519 /* 16-byte XMM, 32-byte YMM or 64-byte ZMM operand. In EVEX with
520 broadcast enabled. */
3873ba12 521 x_mode,
43234a1e
L
522 /* Similar to x_mode, but with different EVEX mem shifts. */
523 evex_x_gscat_mode,
524 /* Similar to x_mode, but with disabled broadcast. */
525 evex_x_nobcst_mode,
526 /* Similar to x_mode, but with operands swapped and disabled broadcast
527 in EVEX. */
3873ba12 528 x_swap_mode,
51e7da1b 529 /* 16-byte XMM operand */
3873ba12 530 xmm_mode,
43234a1e
L
531 /* XMM, XMM or YMM register operand, or quad word, xmmword or ymmword
532 memory operand (depending on vector length). Broadcast isn't
533 allowed. */
3873ba12 534 xmmq_mode,
43234a1e
L
535 /* Same as xmmq_mode, but broadcast is allowed. */
536 evex_half_bcst_xmmq_mode,
6c30d220
L
537 /* XMM register or byte memory operand */
538 xmm_mb_mode,
539 /* XMM register or word memory operand */
540 xmm_mw_mode,
541 /* XMM register or double word memory operand */
542 xmm_md_mode,
543 /* XMM register or quad word memory operand */
544 xmm_mq_mode,
43234a1e
L
545 /* XMM register or double/quad word memory operand, depending on
546 VEX.W. */
547 xmm_mdq_mode,
548 /* 16-byte XMM, word, double word or quad word operand. */
6c30d220 549 xmmdw_mode,
43234a1e 550 /* 16-byte XMM, double word, quad word operand or xmm word operand. */
6c30d220 551 xmmqd_mode,
43234a1e
L
552 /* 32-byte YMM operand */
553 ymm_mode,
554 /* quad word, ymmword or zmmword memory operand. */
3873ba12 555 ymmq_mode,
6c30d220
L
556 /* 32-byte YMM or 16-byte word operand */
557 ymmxmm_mode,
51e7da1b 558 /* d_mode in 32bit, q_mode in 64bit mode. */
3873ba12 559 m_mode,
51e7da1b 560 /* pair of v_mode operands */
3873ba12
L
561 a_mode,
562 cond_jump_mode,
563 loop_jcxz_mode,
7e8b059b 564 v_bnd_mode,
d276ec69
JB
565 /* like v_bnd_mode in 32bit, no RIP-rel in 64bit mode. */
566 v_bndmk_mode,
51e7da1b 567 /* operand size depends on REX prefixes. */
3873ba12 568 dq_mode,
51e7da1b 569 /* registers like dq_mode, memory like w_mode. */
3873ba12 570 dqw_mode,
9f79e886 571 /* bounds operand */
7e8b059b 572 bnd_mode,
9f79e886
JB
573 /* bounds operand with operand swapped */
574 bnd_swap_mode,
51e7da1b 575 /* 4- or 6-byte pointer operand */
3873ba12
L
576 f_mode,
577 const_1_mode,
07f5af7d
L
578 /* v_mode for indirect branch opcodes. */
579 indir_v_mode,
51e7da1b 580 /* v_mode for stack-related opcodes. */
3873ba12 581 stack_v_mode,
51e7da1b 582 /* non-quad operand size depends on prefixes */
3873ba12 583 z_mode,
51e7da1b 584 /* 16-byte operand */
3873ba12 585 o_mode,
51e7da1b 586 /* registers like dq_mode, memory like b_mode. */
3873ba12 587 dqb_mode,
1ba585e8
IT
588 /* registers like d_mode, memory like b_mode. */
589 db_mode,
590 /* registers like d_mode, memory like w_mode. */
591 dw_mode,
51e7da1b 592 /* registers like dq_mode, memory like d_mode. */
3873ba12 593 dqd_mode,
d20dee9e
L
594 /* operand size depends on the W bit as well as address mode. */
595 dqa_mode,
51e7da1b 596 /* normal vex mode */
3873ba12 597 vex_mode,
51e7da1b 598 /* 128bit vex mode */
3873ba12 599 vex128_mode,
51e7da1b 600 /* 256bit vex mode */
3873ba12 601 vex256_mode,
51e7da1b 602 /* operand size depends on the VEX.W bit. */
3873ba12 603 vex_w_dq_mode,
d55ee72f 604
6c30d220
L
605 /* Similar to vex_w_dq_mode, with VSIB dword indices. */
606 vex_vsib_d_w_dq_mode,
5fc35d96
IT
607 /* Similar to vex_vsib_d_w_dq_mode, with smaller memory. */
608 vex_vsib_d_w_d_mode,
6c30d220
L
609 /* Similar to vex_w_dq_mode, with VSIB qword indices. */
610 vex_vsib_q_w_dq_mode,
5fc35d96
IT
611 /* Similar to vex_vsib_q_w_dq_mode, with smaller memory. */
612 vex_vsib_q_w_d_mode,
6c30d220 613
539f890d
L
614 /* scalar, ignore vector length. */
615 scalar_mode,
53467f57
IT
616 /* like b_mode, ignore vector length. */
617 b_scalar_mode,
618 /* like w_mode, ignore vector length. */
619 w_scalar_mode,
539f890d
L
620 /* like d_mode, ignore vector length. */
621 d_scalar_mode,
622 /* like d_swap_mode, ignore vector length. */
623 d_scalar_swap_mode,
624 /* like q_mode, ignore vector length. */
625 q_scalar_mode,
626 /* like q_swap_mode, ignore vector length. */
627 q_scalar_swap_mode,
628 /* like vex_mode, ignore vector length. */
629 vex_scalar_mode,
1c480963
L
630 /* like vex_w_dq_mode, ignore vector length. */
631 vex_scalar_w_dq_mode,
539f890d 632
43234a1e
L
633 /* Static rounding. */
634 evex_rounding_mode,
70df6fc9
L
635 /* Static rounding, 64-bit mode only. */
636 evex_rounding_64_mode,
43234a1e
L
637 /* Supress all exceptions. */
638 evex_sae_mode,
639
640 /* Mask register operand. */
641 mask_mode,
1ba585e8
IT
642 /* Mask register operand. */
643 mask_bd_mode,
43234a1e 644
3873ba12
L
645 es_reg,
646 cs_reg,
647 ss_reg,
648 ds_reg,
649 fs_reg,
650 gs_reg,
d55ee72f 651
3873ba12
L
652 eAX_reg,
653 eCX_reg,
654 eDX_reg,
655 eBX_reg,
656 eSP_reg,
657 eBP_reg,
658 eSI_reg,
659 eDI_reg,
d55ee72f 660
3873ba12
L
661 al_reg,
662 cl_reg,
663 dl_reg,
664 bl_reg,
665 ah_reg,
666 ch_reg,
667 dh_reg,
668 bh_reg,
d55ee72f 669
3873ba12
L
670 ax_reg,
671 cx_reg,
672 dx_reg,
673 bx_reg,
674 sp_reg,
675 bp_reg,
676 si_reg,
677 di_reg,
d55ee72f 678
3873ba12
L
679 rAX_reg,
680 rCX_reg,
681 rDX_reg,
682 rBX_reg,
683 rSP_reg,
684 rBP_reg,
685 rSI_reg,
686 rDI_reg,
d55ee72f 687
3873ba12
L
688 z_mode_ax_reg,
689 indir_dx_reg
51e7da1b 690};
252b5132 691
51e7da1b
L
692enum
693{
694 FLOATCODE = 1,
3873ba12
L
695 USE_REG_TABLE,
696 USE_MOD_TABLE,
697 USE_RM_TABLE,
698 USE_PREFIX_TABLE,
699 USE_X86_64_TABLE,
700 USE_3BYTE_TABLE,
f88c9eb0 701 USE_XOP_8F_TABLE,
3873ba12
L
702 USE_VEX_C4_TABLE,
703 USE_VEX_C5_TABLE,
9e30b8e0 704 USE_VEX_LEN_TABLE,
43234a1e 705 USE_VEX_W_TABLE,
04e2a182
L
706 USE_EVEX_TABLE,
707 USE_EVEX_LEN_TABLE
51e7da1b 708};
6439fc28 709
bf890a93 710#define FLOAT NULL, { { NULL, FLOATCODE } }, 0
4efba78c 711
bf890a93
IT
712#define DIS386(T, I) NULL, { { NULL, (T)}, { NULL, (I) } }, 0
713#define DIS386_PREFIX(T, I, P) NULL, { { NULL, (T)}, { NULL, (I) } }, P
1ceb70f8
L
714#define REG_TABLE(I) DIS386 (USE_REG_TABLE, (I))
715#define MOD_TABLE(I) DIS386 (USE_MOD_TABLE, (I))
716#define RM_TABLE(I) DIS386 (USE_RM_TABLE, (I))
717#define PREFIX_TABLE(I) DIS386 (USE_PREFIX_TABLE, (I))
4e7d34a6
L
718#define X86_64_TABLE(I) DIS386 (USE_X86_64_TABLE, (I))
719#define THREE_BYTE_TABLE(I) DIS386 (USE_3BYTE_TABLE, (I))
bf890a93 720#define THREE_BYTE_TABLE_PREFIX(I, P) DIS386_PREFIX (USE_3BYTE_TABLE, (I), P)
f88c9eb0 721#define XOP_8F_TABLE(I) DIS386 (USE_XOP_8F_TABLE, (I))
c0f3af97
L
722#define VEX_C4_TABLE(I) DIS386 (USE_VEX_C4_TABLE, (I))
723#define VEX_C5_TABLE(I) DIS386 (USE_VEX_C5_TABLE, (I))
724#define VEX_LEN_TABLE(I) DIS386 (USE_VEX_LEN_TABLE, (I))
9e30b8e0 725#define VEX_W_TABLE(I) DIS386 (USE_VEX_W_TABLE, (I))
43234a1e 726#define EVEX_TABLE(I) DIS386 (USE_EVEX_TABLE, (I))
04e2a182 727#define EVEX_LEN_TABLE(I) DIS386 (USE_EVEX_LEN_TABLE, (I))
1ceb70f8 728
51e7da1b
L
729enum
730{
731 REG_80 = 0,
3873ba12 732 REG_81,
7148c369 733 REG_83,
3873ba12
L
734 REG_8F,
735 REG_C0,
736 REG_C1,
737 REG_C6,
738 REG_C7,
739 REG_D0,
740 REG_D1,
741 REG_D2,
742 REG_D3,
743 REG_F6,
744 REG_F7,
745 REG_FE,
746 REG_FF,
747 REG_0F00,
748 REG_0F01,
749 REG_0F0D,
750 REG_0F18,
c48935d7 751 REG_0F1C_MOD_0,
603555e5 752 REG_0F1E_MOD_3,
3873ba12
L
753 REG_0F71,
754 REG_0F72,
755 REG_0F73,
756 REG_0FA6,
757 REG_0FA7,
758 REG_0FAE,
759 REG_0FBA,
760 REG_0FC7,
592a252b
L
761 REG_VEX_0F71,
762 REG_VEX_0F72,
763 REG_VEX_0F73,
764 REG_VEX_0FAE,
f12dc422 765 REG_VEX_0F38F3,
f88c9eb0 766 REG_XOP_LWPCB,
2a2a0f38
QN
767 REG_XOP_LWP,
768 REG_XOP_TBM_01,
43234a1e
L
769 REG_XOP_TBM_02,
770
1ba585e8 771 REG_EVEX_0F71,
43234a1e
L
772 REG_EVEX_0F72,
773 REG_EVEX_0F73,
774 REG_EVEX_0F38C6,
775 REG_EVEX_0F38C7
51e7da1b 776};
1ceb70f8 777
51e7da1b
L
778enum
779{
780 MOD_8D = 0,
42164a71
L
781 MOD_C6_REG_7,
782 MOD_C7_REG_7,
4a357820
MZ
783 MOD_FF_REG_3,
784 MOD_FF_REG_5,
3873ba12
L
785 MOD_0F01_REG_0,
786 MOD_0F01_REG_1,
787 MOD_0F01_REG_2,
788 MOD_0F01_REG_3,
8eab4136 789 MOD_0F01_REG_5,
3873ba12
L
790 MOD_0F01_REG_7,
791 MOD_0F12_PREFIX_0,
792 MOD_0F13,
793 MOD_0F16_PREFIX_0,
794 MOD_0F17,
795 MOD_0F18_REG_0,
796 MOD_0F18_REG_1,
797 MOD_0F18_REG_2,
798 MOD_0F18_REG_3,
d7189fa5
RM
799 MOD_0F18_REG_4,
800 MOD_0F18_REG_5,
801 MOD_0F18_REG_6,
802 MOD_0F18_REG_7,
7e8b059b
L
803 MOD_0F1A_PREFIX_0,
804 MOD_0F1B_PREFIX_0,
805 MOD_0F1B_PREFIX_1,
c48935d7 806 MOD_0F1C_PREFIX_0,
603555e5 807 MOD_0F1E_PREFIX_1,
3873ba12
L
808 MOD_0F24,
809 MOD_0F26,
810 MOD_0F2B_PREFIX_0,
811 MOD_0F2B_PREFIX_1,
812 MOD_0F2B_PREFIX_2,
813 MOD_0F2B_PREFIX_3,
814 MOD_0F51,
815 MOD_0F71_REG_2,
816 MOD_0F71_REG_4,
817 MOD_0F71_REG_6,
818 MOD_0F72_REG_2,
819 MOD_0F72_REG_4,
820 MOD_0F72_REG_6,
821 MOD_0F73_REG_2,
822 MOD_0F73_REG_3,
823 MOD_0F73_REG_6,
824 MOD_0F73_REG_7,
825 MOD_0FAE_REG_0,
826 MOD_0FAE_REG_1,
827 MOD_0FAE_REG_2,
828 MOD_0FAE_REG_3,
829 MOD_0FAE_REG_4,
830 MOD_0FAE_REG_5,
831 MOD_0FAE_REG_6,
832 MOD_0FAE_REG_7,
833 MOD_0FB2,
834 MOD_0FB4,
835 MOD_0FB5,
a8484f96 836 MOD_0FC3,
963f3586
IT
837 MOD_0FC7_REG_3,
838 MOD_0FC7_REG_4,
839 MOD_0FC7_REG_5,
3873ba12
L
840 MOD_0FC7_REG_6,
841 MOD_0FC7_REG_7,
842 MOD_0FD7,
843 MOD_0FE7_PREFIX_2,
844 MOD_0FF0_PREFIX_3,
845 MOD_0F382A_PREFIX_2,
603555e5
L
846 MOD_0F38F5_PREFIX_2,
847 MOD_0F38F6_PREFIX_0,
5d79adc4 848 MOD_0F38F8_PREFIX_1,
c0a30a9f 849 MOD_0F38F8_PREFIX_2,
5d79adc4 850 MOD_0F38F8_PREFIX_3,
c0a30a9f 851 MOD_0F38F9_PREFIX_0,
3873ba12
L
852 MOD_62_32BIT,
853 MOD_C4_32BIT,
854 MOD_C5_32BIT,
592a252b
L
855 MOD_VEX_0F12_PREFIX_0,
856 MOD_VEX_0F13,
857 MOD_VEX_0F16_PREFIX_0,
858 MOD_VEX_0F17,
859 MOD_VEX_0F2B,
ab4e4ed5
AF
860 MOD_VEX_W_0_0F41_P_0_LEN_1,
861 MOD_VEX_W_1_0F41_P_0_LEN_1,
862 MOD_VEX_W_0_0F41_P_2_LEN_1,
863 MOD_VEX_W_1_0F41_P_2_LEN_1,
864 MOD_VEX_W_0_0F42_P_0_LEN_1,
865 MOD_VEX_W_1_0F42_P_0_LEN_1,
866 MOD_VEX_W_0_0F42_P_2_LEN_1,
867 MOD_VEX_W_1_0F42_P_2_LEN_1,
868 MOD_VEX_W_0_0F44_P_0_LEN_1,
869 MOD_VEX_W_1_0F44_P_0_LEN_1,
870 MOD_VEX_W_0_0F44_P_2_LEN_1,
871 MOD_VEX_W_1_0F44_P_2_LEN_1,
872 MOD_VEX_W_0_0F45_P_0_LEN_1,
873 MOD_VEX_W_1_0F45_P_0_LEN_1,
874 MOD_VEX_W_0_0F45_P_2_LEN_1,
875 MOD_VEX_W_1_0F45_P_2_LEN_1,
876 MOD_VEX_W_0_0F46_P_0_LEN_1,
877 MOD_VEX_W_1_0F46_P_0_LEN_1,
878 MOD_VEX_W_0_0F46_P_2_LEN_1,
879 MOD_VEX_W_1_0F46_P_2_LEN_1,
880 MOD_VEX_W_0_0F47_P_0_LEN_1,
881 MOD_VEX_W_1_0F47_P_0_LEN_1,
882 MOD_VEX_W_0_0F47_P_2_LEN_1,
883 MOD_VEX_W_1_0F47_P_2_LEN_1,
884 MOD_VEX_W_0_0F4A_P_0_LEN_1,
885 MOD_VEX_W_1_0F4A_P_0_LEN_1,
886 MOD_VEX_W_0_0F4A_P_2_LEN_1,
887 MOD_VEX_W_1_0F4A_P_2_LEN_1,
888 MOD_VEX_W_0_0F4B_P_0_LEN_1,
889 MOD_VEX_W_1_0F4B_P_0_LEN_1,
890 MOD_VEX_W_0_0F4B_P_2_LEN_1,
592a252b
L
891 MOD_VEX_0F50,
892 MOD_VEX_0F71_REG_2,
893 MOD_VEX_0F71_REG_4,
894 MOD_VEX_0F71_REG_6,
895 MOD_VEX_0F72_REG_2,
896 MOD_VEX_0F72_REG_4,
897 MOD_VEX_0F72_REG_6,
898 MOD_VEX_0F73_REG_2,
899 MOD_VEX_0F73_REG_3,
900 MOD_VEX_0F73_REG_6,
901 MOD_VEX_0F73_REG_7,
ab4e4ed5
AF
902 MOD_VEX_W_0_0F91_P_0_LEN_0,
903 MOD_VEX_W_1_0F91_P_0_LEN_0,
904 MOD_VEX_W_0_0F91_P_2_LEN_0,
905 MOD_VEX_W_1_0F91_P_2_LEN_0,
906 MOD_VEX_W_0_0F92_P_0_LEN_0,
907 MOD_VEX_W_0_0F92_P_2_LEN_0,
58a211d2 908 MOD_VEX_0F92_P_3_LEN_0,
ab4e4ed5
AF
909 MOD_VEX_W_0_0F93_P_0_LEN_0,
910 MOD_VEX_W_0_0F93_P_2_LEN_0,
58a211d2 911 MOD_VEX_0F93_P_3_LEN_0,
ab4e4ed5
AF
912 MOD_VEX_W_0_0F98_P_0_LEN_0,
913 MOD_VEX_W_1_0F98_P_0_LEN_0,
914 MOD_VEX_W_0_0F98_P_2_LEN_0,
915 MOD_VEX_W_1_0F98_P_2_LEN_0,
916 MOD_VEX_W_0_0F99_P_0_LEN_0,
917 MOD_VEX_W_1_0F99_P_0_LEN_0,
918 MOD_VEX_W_0_0F99_P_2_LEN_0,
919 MOD_VEX_W_1_0F99_P_2_LEN_0,
592a252b
L
920 MOD_VEX_0FAE_REG_2,
921 MOD_VEX_0FAE_REG_3,
922 MOD_VEX_0FD7_PREFIX_2,
923 MOD_VEX_0FE7_PREFIX_2,
924 MOD_VEX_0FF0_PREFIX_3,
592a252b
L
925 MOD_VEX_0F381A_PREFIX_2,
926 MOD_VEX_0F382A_PREFIX_2,
927 MOD_VEX_0F382C_PREFIX_2,
928 MOD_VEX_0F382D_PREFIX_2,
929 MOD_VEX_0F382E_PREFIX_2,
6c30d220
L
930 MOD_VEX_0F382F_PREFIX_2,
931 MOD_VEX_0F385A_PREFIX_2,
932 MOD_VEX_0F388C_PREFIX_2,
933 MOD_VEX_0F388E_PREFIX_2,
ab4e4ed5
AF
934 MOD_VEX_W_0_0F3A30_P_2_LEN_0,
935 MOD_VEX_W_1_0F3A30_P_2_LEN_0,
936 MOD_VEX_W_0_0F3A31_P_2_LEN_0,
937 MOD_VEX_W_1_0F3A31_P_2_LEN_0,
938 MOD_VEX_W_0_0F3A32_P_2_LEN_0,
939 MOD_VEX_W_1_0F3A32_P_2_LEN_0,
940 MOD_VEX_W_0_0F3A33_P_2_LEN_0,
941 MOD_VEX_W_1_0F3A33_P_2_LEN_0,
43234a1e
L
942
943 MOD_EVEX_0F10_PREFIX_1,
944 MOD_EVEX_0F10_PREFIX_3,
945 MOD_EVEX_0F11_PREFIX_1,
946 MOD_EVEX_0F11_PREFIX_3,
947 MOD_EVEX_0F12_PREFIX_0,
948 MOD_EVEX_0F16_PREFIX_0,
949 MOD_EVEX_0F38C6_REG_1,
950 MOD_EVEX_0F38C6_REG_2,
951 MOD_EVEX_0F38C6_REG_5,
952 MOD_EVEX_0F38C6_REG_6,
953 MOD_EVEX_0F38C7_REG_1,
954 MOD_EVEX_0F38C7_REG_2,
955 MOD_EVEX_0F38C7_REG_5,
956 MOD_EVEX_0F38C7_REG_6
51e7da1b 957};
1ceb70f8 958
51e7da1b
L
959enum
960{
42164a71
L
961 RM_C6_REG_7 = 0,
962 RM_C7_REG_7,
963 RM_0F01_REG_0,
3873ba12
L
964 RM_0F01_REG_1,
965 RM_0F01_REG_2,
966 RM_0F01_REG_3,
8eab4136 967 RM_0F01_REG_5,
3873ba12 968 RM_0F01_REG_7,
603555e5 969 RM_0F1E_MOD_3_REG_7,
3873ba12
L
970 RM_0FAE_REG_6,
971 RM_0FAE_REG_7
51e7da1b 972};
1ceb70f8 973
51e7da1b
L
974enum
975{
976 PREFIX_90 = 0,
603555e5 977 PREFIX_MOD_0_0F01_REG_5,
2234eee6 978 PREFIX_MOD_3_0F01_REG_5_RM_0,
603555e5 979 PREFIX_MOD_3_0F01_REG_5_RM_2,
3233d7d0 980 PREFIX_0F09,
3873ba12
L
981 PREFIX_0F10,
982 PREFIX_0F11,
983 PREFIX_0F12,
984 PREFIX_0F16,
7e8b059b
L
985 PREFIX_0F1A,
986 PREFIX_0F1B,
c48935d7 987 PREFIX_0F1C,
603555e5 988 PREFIX_0F1E,
3873ba12
L
989 PREFIX_0F2A,
990 PREFIX_0F2B,
991 PREFIX_0F2C,
992 PREFIX_0F2D,
993 PREFIX_0F2E,
994 PREFIX_0F2F,
995 PREFIX_0F51,
996 PREFIX_0F52,
997 PREFIX_0F53,
998 PREFIX_0F58,
999 PREFIX_0F59,
1000 PREFIX_0F5A,
1001 PREFIX_0F5B,
1002 PREFIX_0F5C,
1003 PREFIX_0F5D,
1004 PREFIX_0F5E,
1005 PREFIX_0F5F,
1006 PREFIX_0F60,
1007 PREFIX_0F61,
1008 PREFIX_0F62,
1009 PREFIX_0F6C,
1010 PREFIX_0F6D,
1011 PREFIX_0F6F,
1012 PREFIX_0F70,
1013 PREFIX_0F73_REG_3,
1014 PREFIX_0F73_REG_7,
1015 PREFIX_0F78,
1016 PREFIX_0F79,
1017 PREFIX_0F7C,
1018 PREFIX_0F7D,
1019 PREFIX_0F7E,
1020 PREFIX_0F7F,
c7b8aa3a
L
1021 PREFIX_0FAE_REG_0,
1022 PREFIX_0FAE_REG_1,
1023 PREFIX_0FAE_REG_2,
1024 PREFIX_0FAE_REG_3,
6b40c462
L
1025 PREFIX_MOD_0_0FAE_REG_4,
1026 PREFIX_MOD_3_0FAE_REG_4,
603555e5 1027 PREFIX_MOD_0_0FAE_REG_5,
2234eee6 1028 PREFIX_MOD_3_0FAE_REG_5,
de89d0a3
IT
1029 PREFIX_MOD_0_0FAE_REG_6,
1030 PREFIX_MOD_1_0FAE_REG_6,
963f3586 1031 PREFIX_0FAE_REG_7,
3873ba12 1032 PREFIX_0FB8,
f12dc422 1033 PREFIX_0FBC,
3873ba12
L
1034 PREFIX_0FBD,
1035 PREFIX_0FC2,
a8484f96 1036 PREFIX_MOD_0_0FC3,
f24bcbaa
L
1037 PREFIX_MOD_0_0FC7_REG_6,
1038 PREFIX_MOD_3_0FC7_REG_6,
1039 PREFIX_MOD_3_0FC7_REG_7,
3873ba12
L
1040 PREFIX_0FD0,
1041 PREFIX_0FD6,
1042 PREFIX_0FE6,
1043 PREFIX_0FE7,
1044 PREFIX_0FF0,
1045 PREFIX_0FF7,
1046 PREFIX_0F3810,
1047 PREFIX_0F3814,
1048 PREFIX_0F3815,
1049 PREFIX_0F3817,
1050 PREFIX_0F3820,
1051 PREFIX_0F3821,
1052 PREFIX_0F3822,
1053 PREFIX_0F3823,
1054 PREFIX_0F3824,
1055 PREFIX_0F3825,
1056 PREFIX_0F3828,
1057 PREFIX_0F3829,
1058 PREFIX_0F382A,
1059 PREFIX_0F382B,
1060 PREFIX_0F3830,
1061 PREFIX_0F3831,
1062 PREFIX_0F3832,
1063 PREFIX_0F3833,
1064 PREFIX_0F3834,
1065 PREFIX_0F3835,
1066 PREFIX_0F3837,
1067 PREFIX_0F3838,
1068 PREFIX_0F3839,
1069 PREFIX_0F383A,
1070 PREFIX_0F383B,
1071 PREFIX_0F383C,
1072 PREFIX_0F383D,
1073 PREFIX_0F383E,
1074 PREFIX_0F383F,
1075 PREFIX_0F3840,
1076 PREFIX_0F3841,
1077 PREFIX_0F3880,
1078 PREFIX_0F3881,
6c30d220 1079 PREFIX_0F3882,
a0046408
L
1080 PREFIX_0F38C8,
1081 PREFIX_0F38C9,
1082 PREFIX_0F38CA,
1083 PREFIX_0F38CB,
1084 PREFIX_0F38CC,
1085 PREFIX_0F38CD,
48521003 1086 PREFIX_0F38CF,
3873ba12
L
1087 PREFIX_0F38DB,
1088 PREFIX_0F38DC,
1089 PREFIX_0F38DD,
1090 PREFIX_0F38DE,
1091 PREFIX_0F38DF,
1092 PREFIX_0F38F0,
1093 PREFIX_0F38F1,
603555e5 1094 PREFIX_0F38F5,
e2e1fcde 1095 PREFIX_0F38F6,
c0a30a9f
L
1096 PREFIX_0F38F8,
1097 PREFIX_0F38F9,
3873ba12
L
1098 PREFIX_0F3A08,
1099 PREFIX_0F3A09,
1100 PREFIX_0F3A0A,
1101 PREFIX_0F3A0B,
1102 PREFIX_0F3A0C,
1103 PREFIX_0F3A0D,
1104 PREFIX_0F3A0E,
1105 PREFIX_0F3A14,
1106 PREFIX_0F3A15,
1107 PREFIX_0F3A16,
1108 PREFIX_0F3A17,
1109 PREFIX_0F3A20,
1110 PREFIX_0F3A21,
1111 PREFIX_0F3A22,
1112 PREFIX_0F3A40,
1113 PREFIX_0F3A41,
1114 PREFIX_0F3A42,
1115 PREFIX_0F3A44,
1116 PREFIX_0F3A60,
1117 PREFIX_0F3A61,
1118 PREFIX_0F3A62,
1119 PREFIX_0F3A63,
a0046408 1120 PREFIX_0F3ACC,
48521003
IT
1121 PREFIX_0F3ACE,
1122 PREFIX_0F3ACF,
3873ba12 1123 PREFIX_0F3ADF,
592a252b
L
1124 PREFIX_VEX_0F10,
1125 PREFIX_VEX_0F11,
1126 PREFIX_VEX_0F12,
1127 PREFIX_VEX_0F16,
1128 PREFIX_VEX_0F2A,
1129 PREFIX_VEX_0F2C,
1130 PREFIX_VEX_0F2D,
1131 PREFIX_VEX_0F2E,
1132 PREFIX_VEX_0F2F,
43234a1e
L
1133 PREFIX_VEX_0F41,
1134 PREFIX_VEX_0F42,
1135 PREFIX_VEX_0F44,
1136 PREFIX_VEX_0F45,
1137 PREFIX_VEX_0F46,
1138 PREFIX_VEX_0F47,
1ba585e8 1139 PREFIX_VEX_0F4A,
43234a1e 1140 PREFIX_VEX_0F4B,
592a252b
L
1141 PREFIX_VEX_0F51,
1142 PREFIX_VEX_0F52,
1143 PREFIX_VEX_0F53,
1144 PREFIX_VEX_0F58,
1145 PREFIX_VEX_0F59,
1146 PREFIX_VEX_0F5A,
1147 PREFIX_VEX_0F5B,
1148 PREFIX_VEX_0F5C,
1149 PREFIX_VEX_0F5D,
1150 PREFIX_VEX_0F5E,
1151 PREFIX_VEX_0F5F,
1152 PREFIX_VEX_0F60,
1153 PREFIX_VEX_0F61,
1154 PREFIX_VEX_0F62,
1155 PREFIX_VEX_0F63,
1156 PREFIX_VEX_0F64,
1157 PREFIX_VEX_0F65,
1158 PREFIX_VEX_0F66,
1159 PREFIX_VEX_0F67,
1160 PREFIX_VEX_0F68,
1161 PREFIX_VEX_0F69,
1162 PREFIX_VEX_0F6A,
1163 PREFIX_VEX_0F6B,
1164 PREFIX_VEX_0F6C,
1165 PREFIX_VEX_0F6D,
1166 PREFIX_VEX_0F6E,
1167 PREFIX_VEX_0F6F,
1168 PREFIX_VEX_0F70,
1169 PREFIX_VEX_0F71_REG_2,
1170 PREFIX_VEX_0F71_REG_4,
1171 PREFIX_VEX_0F71_REG_6,
1172 PREFIX_VEX_0F72_REG_2,
1173 PREFIX_VEX_0F72_REG_4,
1174 PREFIX_VEX_0F72_REG_6,
1175 PREFIX_VEX_0F73_REG_2,
1176 PREFIX_VEX_0F73_REG_3,
1177 PREFIX_VEX_0F73_REG_6,
1178 PREFIX_VEX_0F73_REG_7,
1179 PREFIX_VEX_0F74,
1180 PREFIX_VEX_0F75,
1181 PREFIX_VEX_0F76,
1182 PREFIX_VEX_0F77,
1183 PREFIX_VEX_0F7C,
1184 PREFIX_VEX_0F7D,
1185 PREFIX_VEX_0F7E,
1186 PREFIX_VEX_0F7F,
43234a1e
L
1187 PREFIX_VEX_0F90,
1188 PREFIX_VEX_0F91,
1189 PREFIX_VEX_0F92,
1190 PREFIX_VEX_0F93,
1191 PREFIX_VEX_0F98,
1ba585e8 1192 PREFIX_VEX_0F99,
592a252b
L
1193 PREFIX_VEX_0FC2,
1194 PREFIX_VEX_0FC4,
1195 PREFIX_VEX_0FC5,
1196 PREFIX_VEX_0FD0,
1197 PREFIX_VEX_0FD1,
1198 PREFIX_VEX_0FD2,
1199 PREFIX_VEX_0FD3,
1200 PREFIX_VEX_0FD4,
1201 PREFIX_VEX_0FD5,
1202 PREFIX_VEX_0FD6,
1203 PREFIX_VEX_0FD7,
1204 PREFIX_VEX_0FD8,
1205 PREFIX_VEX_0FD9,
1206 PREFIX_VEX_0FDA,
1207 PREFIX_VEX_0FDB,
1208 PREFIX_VEX_0FDC,
1209 PREFIX_VEX_0FDD,
1210 PREFIX_VEX_0FDE,
1211 PREFIX_VEX_0FDF,
1212 PREFIX_VEX_0FE0,
1213 PREFIX_VEX_0FE1,
1214 PREFIX_VEX_0FE2,
1215 PREFIX_VEX_0FE3,
1216 PREFIX_VEX_0FE4,
1217 PREFIX_VEX_0FE5,
1218 PREFIX_VEX_0FE6,
1219 PREFIX_VEX_0FE7,
1220 PREFIX_VEX_0FE8,
1221 PREFIX_VEX_0FE9,
1222 PREFIX_VEX_0FEA,
1223 PREFIX_VEX_0FEB,
1224 PREFIX_VEX_0FEC,
1225 PREFIX_VEX_0FED,
1226 PREFIX_VEX_0FEE,
1227 PREFIX_VEX_0FEF,
1228 PREFIX_VEX_0FF0,
1229 PREFIX_VEX_0FF1,
1230 PREFIX_VEX_0FF2,
1231 PREFIX_VEX_0FF3,
1232 PREFIX_VEX_0FF4,
1233 PREFIX_VEX_0FF5,
1234 PREFIX_VEX_0FF6,
1235 PREFIX_VEX_0FF7,
1236 PREFIX_VEX_0FF8,
1237 PREFIX_VEX_0FF9,
1238 PREFIX_VEX_0FFA,
1239 PREFIX_VEX_0FFB,
1240 PREFIX_VEX_0FFC,
1241 PREFIX_VEX_0FFD,
1242 PREFIX_VEX_0FFE,
1243 PREFIX_VEX_0F3800,
1244 PREFIX_VEX_0F3801,
1245 PREFIX_VEX_0F3802,
1246 PREFIX_VEX_0F3803,
1247 PREFIX_VEX_0F3804,
1248 PREFIX_VEX_0F3805,
1249 PREFIX_VEX_0F3806,
1250 PREFIX_VEX_0F3807,
1251 PREFIX_VEX_0F3808,
1252 PREFIX_VEX_0F3809,
1253 PREFIX_VEX_0F380A,
1254 PREFIX_VEX_0F380B,
1255 PREFIX_VEX_0F380C,
1256 PREFIX_VEX_0F380D,
1257 PREFIX_VEX_0F380E,
1258 PREFIX_VEX_0F380F,
1259 PREFIX_VEX_0F3813,
6c30d220 1260 PREFIX_VEX_0F3816,
592a252b
L
1261 PREFIX_VEX_0F3817,
1262 PREFIX_VEX_0F3818,
1263 PREFIX_VEX_0F3819,
1264 PREFIX_VEX_0F381A,
1265 PREFIX_VEX_0F381C,
1266 PREFIX_VEX_0F381D,
1267 PREFIX_VEX_0F381E,
1268 PREFIX_VEX_0F3820,
1269 PREFIX_VEX_0F3821,
1270 PREFIX_VEX_0F3822,
1271 PREFIX_VEX_0F3823,
1272 PREFIX_VEX_0F3824,
1273 PREFIX_VEX_0F3825,
1274 PREFIX_VEX_0F3828,
1275 PREFIX_VEX_0F3829,
1276 PREFIX_VEX_0F382A,
1277 PREFIX_VEX_0F382B,
1278 PREFIX_VEX_0F382C,
1279 PREFIX_VEX_0F382D,
1280 PREFIX_VEX_0F382E,
1281 PREFIX_VEX_0F382F,
1282 PREFIX_VEX_0F3830,
1283 PREFIX_VEX_0F3831,
1284 PREFIX_VEX_0F3832,
1285 PREFIX_VEX_0F3833,
1286 PREFIX_VEX_0F3834,
1287 PREFIX_VEX_0F3835,
6c30d220 1288 PREFIX_VEX_0F3836,
592a252b
L
1289 PREFIX_VEX_0F3837,
1290 PREFIX_VEX_0F3838,
1291 PREFIX_VEX_0F3839,
1292 PREFIX_VEX_0F383A,
1293 PREFIX_VEX_0F383B,
1294 PREFIX_VEX_0F383C,
1295 PREFIX_VEX_0F383D,
1296 PREFIX_VEX_0F383E,
1297 PREFIX_VEX_0F383F,
1298 PREFIX_VEX_0F3840,
1299 PREFIX_VEX_0F3841,
6c30d220
L
1300 PREFIX_VEX_0F3845,
1301 PREFIX_VEX_0F3846,
1302 PREFIX_VEX_0F3847,
1303 PREFIX_VEX_0F3858,
1304 PREFIX_VEX_0F3859,
1305 PREFIX_VEX_0F385A,
1306 PREFIX_VEX_0F3878,
1307 PREFIX_VEX_0F3879,
1308 PREFIX_VEX_0F388C,
1309 PREFIX_VEX_0F388E,
1310 PREFIX_VEX_0F3890,
1311 PREFIX_VEX_0F3891,
1312 PREFIX_VEX_0F3892,
1313 PREFIX_VEX_0F3893,
592a252b
L
1314 PREFIX_VEX_0F3896,
1315 PREFIX_VEX_0F3897,
1316 PREFIX_VEX_0F3898,
1317 PREFIX_VEX_0F3899,
1318 PREFIX_VEX_0F389A,
1319 PREFIX_VEX_0F389B,
1320 PREFIX_VEX_0F389C,
1321 PREFIX_VEX_0F389D,
1322 PREFIX_VEX_0F389E,
1323 PREFIX_VEX_0F389F,
1324 PREFIX_VEX_0F38A6,
1325 PREFIX_VEX_0F38A7,
1326 PREFIX_VEX_0F38A8,
1327 PREFIX_VEX_0F38A9,
1328 PREFIX_VEX_0F38AA,
1329 PREFIX_VEX_0F38AB,
1330 PREFIX_VEX_0F38AC,
1331 PREFIX_VEX_0F38AD,
1332 PREFIX_VEX_0F38AE,
1333 PREFIX_VEX_0F38AF,
1334 PREFIX_VEX_0F38B6,
1335 PREFIX_VEX_0F38B7,
1336 PREFIX_VEX_0F38B8,
1337 PREFIX_VEX_0F38B9,
1338 PREFIX_VEX_0F38BA,
1339 PREFIX_VEX_0F38BB,
1340 PREFIX_VEX_0F38BC,
1341 PREFIX_VEX_0F38BD,
1342 PREFIX_VEX_0F38BE,
1343 PREFIX_VEX_0F38BF,
48521003 1344 PREFIX_VEX_0F38CF,
592a252b
L
1345 PREFIX_VEX_0F38DB,
1346 PREFIX_VEX_0F38DC,
1347 PREFIX_VEX_0F38DD,
1348 PREFIX_VEX_0F38DE,
1349 PREFIX_VEX_0F38DF,
f12dc422
L
1350 PREFIX_VEX_0F38F2,
1351 PREFIX_VEX_0F38F3_REG_1,
1352 PREFIX_VEX_0F38F3_REG_2,
1353 PREFIX_VEX_0F38F3_REG_3,
6c30d220
L
1354 PREFIX_VEX_0F38F5,
1355 PREFIX_VEX_0F38F6,
f12dc422 1356 PREFIX_VEX_0F38F7,
6c30d220
L
1357 PREFIX_VEX_0F3A00,
1358 PREFIX_VEX_0F3A01,
1359 PREFIX_VEX_0F3A02,
592a252b
L
1360 PREFIX_VEX_0F3A04,
1361 PREFIX_VEX_0F3A05,
1362 PREFIX_VEX_0F3A06,
1363 PREFIX_VEX_0F3A08,
1364 PREFIX_VEX_0F3A09,
1365 PREFIX_VEX_0F3A0A,
1366 PREFIX_VEX_0F3A0B,
1367 PREFIX_VEX_0F3A0C,
1368 PREFIX_VEX_0F3A0D,
1369 PREFIX_VEX_0F3A0E,
1370 PREFIX_VEX_0F3A0F,
1371 PREFIX_VEX_0F3A14,
1372 PREFIX_VEX_0F3A15,
1373 PREFIX_VEX_0F3A16,
1374 PREFIX_VEX_0F3A17,
1375 PREFIX_VEX_0F3A18,
1376 PREFIX_VEX_0F3A19,
1377 PREFIX_VEX_0F3A1D,
1378 PREFIX_VEX_0F3A20,
1379 PREFIX_VEX_0F3A21,
1380 PREFIX_VEX_0F3A22,
43234a1e 1381 PREFIX_VEX_0F3A30,
1ba585e8 1382 PREFIX_VEX_0F3A31,
43234a1e 1383 PREFIX_VEX_0F3A32,
1ba585e8 1384 PREFIX_VEX_0F3A33,
6c30d220
L
1385 PREFIX_VEX_0F3A38,
1386 PREFIX_VEX_0F3A39,
592a252b
L
1387 PREFIX_VEX_0F3A40,
1388 PREFIX_VEX_0F3A41,
1389 PREFIX_VEX_0F3A42,
1390 PREFIX_VEX_0F3A44,
6c30d220 1391 PREFIX_VEX_0F3A46,
592a252b
L
1392 PREFIX_VEX_0F3A48,
1393 PREFIX_VEX_0F3A49,
1394 PREFIX_VEX_0F3A4A,
1395 PREFIX_VEX_0F3A4B,
1396 PREFIX_VEX_0F3A4C,
1397 PREFIX_VEX_0F3A5C,
1398 PREFIX_VEX_0F3A5D,
1399 PREFIX_VEX_0F3A5E,
1400 PREFIX_VEX_0F3A5F,
1401 PREFIX_VEX_0F3A60,
1402 PREFIX_VEX_0F3A61,
1403 PREFIX_VEX_0F3A62,
1404 PREFIX_VEX_0F3A63,
1405 PREFIX_VEX_0F3A68,
1406 PREFIX_VEX_0F3A69,
1407 PREFIX_VEX_0F3A6A,
1408 PREFIX_VEX_0F3A6B,
1409 PREFIX_VEX_0F3A6C,
1410 PREFIX_VEX_0F3A6D,
1411 PREFIX_VEX_0F3A6E,
1412 PREFIX_VEX_0F3A6F,
1413 PREFIX_VEX_0F3A78,
1414 PREFIX_VEX_0F3A79,
1415 PREFIX_VEX_0F3A7A,
1416 PREFIX_VEX_0F3A7B,
1417 PREFIX_VEX_0F3A7C,
1418 PREFIX_VEX_0F3A7D,
1419 PREFIX_VEX_0F3A7E,
1420 PREFIX_VEX_0F3A7F,
48521003
IT
1421 PREFIX_VEX_0F3ACE,
1422 PREFIX_VEX_0F3ACF,
6c30d220 1423 PREFIX_VEX_0F3ADF,
43234a1e
L
1424 PREFIX_VEX_0F3AF0,
1425
1426 PREFIX_EVEX_0F10,
1427 PREFIX_EVEX_0F11,
1428 PREFIX_EVEX_0F12,
1429 PREFIX_EVEX_0F13,
1430 PREFIX_EVEX_0F14,
1431 PREFIX_EVEX_0F15,
1432 PREFIX_EVEX_0F16,
1433 PREFIX_EVEX_0F17,
1434 PREFIX_EVEX_0F28,
1435 PREFIX_EVEX_0F29,
1436 PREFIX_EVEX_0F2A,
1437 PREFIX_EVEX_0F2B,
1438 PREFIX_EVEX_0F2C,
1439 PREFIX_EVEX_0F2D,
1440 PREFIX_EVEX_0F2E,
1441 PREFIX_EVEX_0F2F,
1442 PREFIX_EVEX_0F51,
90a915bf
IT
1443 PREFIX_EVEX_0F54,
1444 PREFIX_EVEX_0F55,
1445 PREFIX_EVEX_0F56,
1446 PREFIX_EVEX_0F57,
43234a1e
L
1447 PREFIX_EVEX_0F58,
1448 PREFIX_EVEX_0F59,
1449 PREFIX_EVEX_0F5A,
1450 PREFIX_EVEX_0F5B,
1451 PREFIX_EVEX_0F5C,
1452 PREFIX_EVEX_0F5D,
1453 PREFIX_EVEX_0F5E,
1454 PREFIX_EVEX_0F5F,
1ba585e8
IT
1455 PREFIX_EVEX_0F60,
1456 PREFIX_EVEX_0F61,
43234a1e 1457 PREFIX_EVEX_0F62,
1ba585e8
IT
1458 PREFIX_EVEX_0F63,
1459 PREFIX_EVEX_0F64,
1460 PREFIX_EVEX_0F65,
43234a1e 1461 PREFIX_EVEX_0F66,
1ba585e8
IT
1462 PREFIX_EVEX_0F67,
1463 PREFIX_EVEX_0F68,
1464 PREFIX_EVEX_0F69,
43234a1e 1465 PREFIX_EVEX_0F6A,
1ba585e8 1466 PREFIX_EVEX_0F6B,
43234a1e
L
1467 PREFIX_EVEX_0F6C,
1468 PREFIX_EVEX_0F6D,
1469 PREFIX_EVEX_0F6E,
1470 PREFIX_EVEX_0F6F,
1471 PREFIX_EVEX_0F70,
1ba585e8
IT
1472 PREFIX_EVEX_0F71_REG_2,
1473 PREFIX_EVEX_0F71_REG_4,
1474 PREFIX_EVEX_0F71_REG_6,
43234a1e
L
1475 PREFIX_EVEX_0F72_REG_0,
1476 PREFIX_EVEX_0F72_REG_1,
1477 PREFIX_EVEX_0F72_REG_2,
1478 PREFIX_EVEX_0F72_REG_4,
1479 PREFIX_EVEX_0F72_REG_6,
1480 PREFIX_EVEX_0F73_REG_2,
1ba585e8 1481 PREFIX_EVEX_0F73_REG_3,
43234a1e 1482 PREFIX_EVEX_0F73_REG_6,
1ba585e8
IT
1483 PREFIX_EVEX_0F73_REG_7,
1484 PREFIX_EVEX_0F74,
1485 PREFIX_EVEX_0F75,
43234a1e
L
1486 PREFIX_EVEX_0F76,
1487 PREFIX_EVEX_0F78,
1488 PREFIX_EVEX_0F79,
1489 PREFIX_EVEX_0F7A,
1490 PREFIX_EVEX_0F7B,
1491 PREFIX_EVEX_0F7E,
1492 PREFIX_EVEX_0F7F,
1493 PREFIX_EVEX_0FC2,
1ba585e8
IT
1494 PREFIX_EVEX_0FC4,
1495 PREFIX_EVEX_0FC5,
43234a1e 1496 PREFIX_EVEX_0FC6,
1ba585e8 1497 PREFIX_EVEX_0FD1,
43234a1e
L
1498 PREFIX_EVEX_0FD2,
1499 PREFIX_EVEX_0FD3,
1500 PREFIX_EVEX_0FD4,
1ba585e8 1501 PREFIX_EVEX_0FD5,
43234a1e 1502 PREFIX_EVEX_0FD6,
1ba585e8
IT
1503 PREFIX_EVEX_0FD8,
1504 PREFIX_EVEX_0FD9,
1505 PREFIX_EVEX_0FDA,
43234a1e 1506 PREFIX_EVEX_0FDB,
1ba585e8
IT
1507 PREFIX_EVEX_0FDC,
1508 PREFIX_EVEX_0FDD,
1509 PREFIX_EVEX_0FDE,
43234a1e 1510 PREFIX_EVEX_0FDF,
1ba585e8
IT
1511 PREFIX_EVEX_0FE0,
1512 PREFIX_EVEX_0FE1,
43234a1e 1513 PREFIX_EVEX_0FE2,
1ba585e8
IT
1514 PREFIX_EVEX_0FE3,
1515 PREFIX_EVEX_0FE4,
1516 PREFIX_EVEX_0FE5,
43234a1e
L
1517 PREFIX_EVEX_0FE6,
1518 PREFIX_EVEX_0FE7,
1ba585e8
IT
1519 PREFIX_EVEX_0FE8,
1520 PREFIX_EVEX_0FE9,
1521 PREFIX_EVEX_0FEA,
43234a1e 1522 PREFIX_EVEX_0FEB,
1ba585e8
IT
1523 PREFIX_EVEX_0FEC,
1524 PREFIX_EVEX_0FED,
1525 PREFIX_EVEX_0FEE,
43234a1e 1526 PREFIX_EVEX_0FEF,
1ba585e8 1527 PREFIX_EVEX_0FF1,
43234a1e
L
1528 PREFIX_EVEX_0FF2,
1529 PREFIX_EVEX_0FF3,
1530 PREFIX_EVEX_0FF4,
1ba585e8
IT
1531 PREFIX_EVEX_0FF5,
1532 PREFIX_EVEX_0FF6,
1533 PREFIX_EVEX_0FF8,
1534 PREFIX_EVEX_0FF9,
43234a1e
L
1535 PREFIX_EVEX_0FFA,
1536 PREFIX_EVEX_0FFB,
1ba585e8
IT
1537 PREFIX_EVEX_0FFC,
1538 PREFIX_EVEX_0FFD,
43234a1e 1539 PREFIX_EVEX_0FFE,
1ba585e8
IT
1540 PREFIX_EVEX_0F3800,
1541 PREFIX_EVEX_0F3804,
1542 PREFIX_EVEX_0F380B,
43234a1e
L
1543 PREFIX_EVEX_0F380C,
1544 PREFIX_EVEX_0F380D,
1ba585e8 1545 PREFIX_EVEX_0F3810,
43234a1e
L
1546 PREFIX_EVEX_0F3811,
1547 PREFIX_EVEX_0F3812,
1548 PREFIX_EVEX_0F3813,
1549 PREFIX_EVEX_0F3814,
1550 PREFIX_EVEX_0F3815,
1551 PREFIX_EVEX_0F3816,
1552 PREFIX_EVEX_0F3818,
1553 PREFIX_EVEX_0F3819,
1554 PREFIX_EVEX_0F381A,
1555 PREFIX_EVEX_0F381B,
1ba585e8
IT
1556 PREFIX_EVEX_0F381C,
1557 PREFIX_EVEX_0F381D,
43234a1e
L
1558 PREFIX_EVEX_0F381E,
1559 PREFIX_EVEX_0F381F,
1ba585e8 1560 PREFIX_EVEX_0F3820,
43234a1e
L
1561 PREFIX_EVEX_0F3821,
1562 PREFIX_EVEX_0F3822,
1563 PREFIX_EVEX_0F3823,
1564 PREFIX_EVEX_0F3824,
1565 PREFIX_EVEX_0F3825,
1ba585e8 1566 PREFIX_EVEX_0F3826,
43234a1e
L
1567 PREFIX_EVEX_0F3827,
1568 PREFIX_EVEX_0F3828,
1569 PREFIX_EVEX_0F3829,
1570 PREFIX_EVEX_0F382A,
1ba585e8 1571 PREFIX_EVEX_0F382B,
43234a1e
L
1572 PREFIX_EVEX_0F382C,
1573 PREFIX_EVEX_0F382D,
1ba585e8 1574 PREFIX_EVEX_0F3830,
43234a1e
L
1575 PREFIX_EVEX_0F3831,
1576 PREFIX_EVEX_0F3832,
1577 PREFIX_EVEX_0F3833,
1578 PREFIX_EVEX_0F3834,
1579 PREFIX_EVEX_0F3835,
1580 PREFIX_EVEX_0F3836,
1581 PREFIX_EVEX_0F3837,
1ba585e8 1582 PREFIX_EVEX_0F3838,
43234a1e
L
1583 PREFIX_EVEX_0F3839,
1584 PREFIX_EVEX_0F383A,
1585 PREFIX_EVEX_0F383B,
1ba585e8 1586 PREFIX_EVEX_0F383C,
43234a1e 1587 PREFIX_EVEX_0F383D,
1ba585e8 1588 PREFIX_EVEX_0F383E,
43234a1e
L
1589 PREFIX_EVEX_0F383F,
1590 PREFIX_EVEX_0F3840,
1591 PREFIX_EVEX_0F3842,
1592 PREFIX_EVEX_0F3843,
1593 PREFIX_EVEX_0F3844,
1594 PREFIX_EVEX_0F3845,
1595 PREFIX_EVEX_0F3846,
1596 PREFIX_EVEX_0F3847,
1597 PREFIX_EVEX_0F384C,
1598 PREFIX_EVEX_0F384D,
1599 PREFIX_EVEX_0F384E,
1600 PREFIX_EVEX_0F384F,
8cfcb765
IT
1601 PREFIX_EVEX_0F3850,
1602 PREFIX_EVEX_0F3851,
47acf0bd
IT
1603 PREFIX_EVEX_0F3852,
1604 PREFIX_EVEX_0F3853,
ee6872be 1605 PREFIX_EVEX_0F3854,
620214f7 1606 PREFIX_EVEX_0F3855,
43234a1e
L
1607 PREFIX_EVEX_0F3858,
1608 PREFIX_EVEX_0F3859,
1609 PREFIX_EVEX_0F385A,
1610 PREFIX_EVEX_0F385B,
53467f57
IT
1611 PREFIX_EVEX_0F3862,
1612 PREFIX_EVEX_0F3863,
43234a1e
L
1613 PREFIX_EVEX_0F3864,
1614 PREFIX_EVEX_0F3865,
1ba585e8 1615 PREFIX_EVEX_0F3866,
9186c494 1616 PREFIX_EVEX_0F3868,
53467f57
IT
1617 PREFIX_EVEX_0F3870,
1618 PREFIX_EVEX_0F3871,
1619 PREFIX_EVEX_0F3872,
1620 PREFIX_EVEX_0F3873,
1ba585e8 1621 PREFIX_EVEX_0F3875,
43234a1e
L
1622 PREFIX_EVEX_0F3876,
1623 PREFIX_EVEX_0F3877,
1ba585e8
IT
1624 PREFIX_EVEX_0F3878,
1625 PREFIX_EVEX_0F3879,
1626 PREFIX_EVEX_0F387A,
1627 PREFIX_EVEX_0F387B,
43234a1e 1628 PREFIX_EVEX_0F387C,
1ba585e8 1629 PREFIX_EVEX_0F387D,
43234a1e
L
1630 PREFIX_EVEX_0F387E,
1631 PREFIX_EVEX_0F387F,
14f195c9 1632 PREFIX_EVEX_0F3883,
43234a1e
L
1633 PREFIX_EVEX_0F3888,
1634 PREFIX_EVEX_0F3889,
1635 PREFIX_EVEX_0F388A,
1636 PREFIX_EVEX_0F388B,
1ba585e8 1637 PREFIX_EVEX_0F388D,
ee6872be 1638 PREFIX_EVEX_0F388F,
43234a1e
L
1639 PREFIX_EVEX_0F3890,
1640 PREFIX_EVEX_0F3891,
1641 PREFIX_EVEX_0F3892,
1642 PREFIX_EVEX_0F3893,
1643 PREFIX_EVEX_0F3896,
1644 PREFIX_EVEX_0F3897,
1645 PREFIX_EVEX_0F3898,
1646 PREFIX_EVEX_0F3899,
1647 PREFIX_EVEX_0F389A,
1648 PREFIX_EVEX_0F389B,
1649 PREFIX_EVEX_0F389C,
1650 PREFIX_EVEX_0F389D,
1651 PREFIX_EVEX_0F389E,
1652 PREFIX_EVEX_0F389F,
1653 PREFIX_EVEX_0F38A0,
1654 PREFIX_EVEX_0F38A1,
1655 PREFIX_EVEX_0F38A2,
1656 PREFIX_EVEX_0F38A3,
1657 PREFIX_EVEX_0F38A6,
1658 PREFIX_EVEX_0F38A7,
1659 PREFIX_EVEX_0F38A8,
1660 PREFIX_EVEX_0F38A9,
1661 PREFIX_EVEX_0F38AA,
1662 PREFIX_EVEX_0F38AB,
1663 PREFIX_EVEX_0F38AC,
1664 PREFIX_EVEX_0F38AD,
1665 PREFIX_EVEX_0F38AE,
1666 PREFIX_EVEX_0F38AF,
2cc1b5aa
IT
1667 PREFIX_EVEX_0F38B4,
1668 PREFIX_EVEX_0F38B5,
43234a1e
L
1669 PREFIX_EVEX_0F38B6,
1670 PREFIX_EVEX_0F38B7,
1671 PREFIX_EVEX_0F38B8,
1672 PREFIX_EVEX_0F38B9,
1673 PREFIX_EVEX_0F38BA,
1674 PREFIX_EVEX_0F38BB,
1675 PREFIX_EVEX_0F38BC,
1676 PREFIX_EVEX_0F38BD,
1677 PREFIX_EVEX_0F38BE,
1678 PREFIX_EVEX_0F38BF,
1679 PREFIX_EVEX_0F38C4,
1680 PREFIX_EVEX_0F38C6_REG_1,
1681 PREFIX_EVEX_0F38C6_REG_2,
1682 PREFIX_EVEX_0F38C6_REG_5,
1683 PREFIX_EVEX_0F38C6_REG_6,
1684 PREFIX_EVEX_0F38C7_REG_1,
1685 PREFIX_EVEX_0F38C7_REG_2,
1686 PREFIX_EVEX_0F38C7_REG_5,
1687 PREFIX_EVEX_0F38C7_REG_6,
1688 PREFIX_EVEX_0F38C8,
1689 PREFIX_EVEX_0F38CA,
1690 PREFIX_EVEX_0F38CB,
1691 PREFIX_EVEX_0F38CC,
1692 PREFIX_EVEX_0F38CD,
48521003 1693 PREFIX_EVEX_0F38CF,
8dcf1fad
IT
1694 PREFIX_EVEX_0F38DC,
1695 PREFIX_EVEX_0F38DD,
1696 PREFIX_EVEX_0F38DE,
1697 PREFIX_EVEX_0F38DF,
43234a1e
L
1698
1699 PREFIX_EVEX_0F3A00,
1700 PREFIX_EVEX_0F3A01,
1701 PREFIX_EVEX_0F3A03,
1702 PREFIX_EVEX_0F3A04,
1703 PREFIX_EVEX_0F3A05,
1704 PREFIX_EVEX_0F3A08,
1705 PREFIX_EVEX_0F3A09,
1706 PREFIX_EVEX_0F3A0A,
1707 PREFIX_EVEX_0F3A0B,
1ba585e8
IT
1708 PREFIX_EVEX_0F3A0F,
1709 PREFIX_EVEX_0F3A14,
1710 PREFIX_EVEX_0F3A15,
90a915bf 1711 PREFIX_EVEX_0F3A16,
43234a1e
L
1712 PREFIX_EVEX_0F3A17,
1713 PREFIX_EVEX_0F3A18,
1714 PREFIX_EVEX_0F3A19,
1715 PREFIX_EVEX_0F3A1A,
1716 PREFIX_EVEX_0F3A1B,
1717 PREFIX_EVEX_0F3A1D,
1718 PREFIX_EVEX_0F3A1E,
1719 PREFIX_EVEX_0F3A1F,
1ba585e8 1720 PREFIX_EVEX_0F3A20,
43234a1e 1721 PREFIX_EVEX_0F3A21,
90a915bf 1722 PREFIX_EVEX_0F3A22,
43234a1e
L
1723 PREFIX_EVEX_0F3A23,
1724 PREFIX_EVEX_0F3A25,
1725 PREFIX_EVEX_0F3A26,
1726 PREFIX_EVEX_0F3A27,
1727 PREFIX_EVEX_0F3A38,
1728 PREFIX_EVEX_0F3A39,
1729 PREFIX_EVEX_0F3A3A,
1730 PREFIX_EVEX_0F3A3B,
1ba585e8
IT
1731 PREFIX_EVEX_0F3A3E,
1732 PREFIX_EVEX_0F3A3F,
1733 PREFIX_EVEX_0F3A42,
43234a1e 1734 PREFIX_EVEX_0F3A43,
ff1982d5 1735 PREFIX_EVEX_0F3A44,
90a915bf
IT
1736 PREFIX_EVEX_0F3A50,
1737 PREFIX_EVEX_0F3A51,
43234a1e 1738 PREFIX_EVEX_0F3A54,
90a915bf
IT
1739 PREFIX_EVEX_0F3A55,
1740 PREFIX_EVEX_0F3A56,
1741 PREFIX_EVEX_0F3A57,
1742 PREFIX_EVEX_0F3A66,
53467f57
IT
1743 PREFIX_EVEX_0F3A67,
1744 PREFIX_EVEX_0F3A70,
1745 PREFIX_EVEX_0F3A71,
1746 PREFIX_EVEX_0F3A72,
48521003
IT
1747 PREFIX_EVEX_0F3A73,
1748 PREFIX_EVEX_0F3ACE,
1749 PREFIX_EVEX_0F3ACF
51e7da1b 1750};
4e7d34a6 1751
51e7da1b
L
1752enum
1753{
1754 X86_64_06 = 0,
3873ba12
L
1755 X86_64_07,
1756 X86_64_0D,
1757 X86_64_16,
1758 X86_64_17,
1759 X86_64_1E,
1760 X86_64_1F,
1761 X86_64_27,
1762 X86_64_2F,
1763 X86_64_37,
1764 X86_64_3F,
1765 X86_64_60,
1766 X86_64_61,
1767 X86_64_62,
1768 X86_64_63,
1769 X86_64_6D,
1770 X86_64_6F,
d039fef3 1771 X86_64_82,
3873ba12
L
1772 X86_64_9A,
1773 X86_64_C4,
1774 X86_64_C5,
1775 X86_64_CE,
1776 X86_64_D4,
1777 X86_64_D5,
a72d2af2
L
1778 X86_64_E8,
1779 X86_64_E9,
3873ba12
L
1780 X86_64_EA,
1781 X86_64_0F01_REG_0,
1782 X86_64_0F01_REG_1,
1783 X86_64_0F01_REG_2,
1784 X86_64_0F01_REG_3
51e7da1b 1785};
4e7d34a6 1786
51e7da1b
L
1787enum
1788{
1789 THREE_BYTE_0F38 = 0,
1f334aeb 1790 THREE_BYTE_0F3A
51e7da1b 1791};
4e7d34a6 1792
f88c9eb0
SP
1793enum
1794{
5dd85c99
SP
1795 XOP_08 = 0,
1796 XOP_09,
f88c9eb0
SP
1797 XOP_0A
1798};
1799
51e7da1b
L
1800enum
1801{
1802 VEX_0F = 0,
3873ba12
L
1803 VEX_0F38,
1804 VEX_0F3A
51e7da1b 1805};
c0f3af97 1806
43234a1e
L
1807enum
1808{
1809 EVEX_0F = 0,
1810 EVEX_0F38,
1811 EVEX_0F3A
1812};
1813
51e7da1b
L
1814enum
1815{
ec6f095a 1816 VEX_LEN_0F12_P_0_M_0 = 0,
592a252b
L
1817 VEX_LEN_0F12_P_0_M_1,
1818 VEX_LEN_0F12_P_2,
1819 VEX_LEN_0F13_M_0,
1820 VEX_LEN_0F16_P_0_M_0,
1821 VEX_LEN_0F16_P_0_M_1,
1822 VEX_LEN_0F16_P_2,
1823 VEX_LEN_0F17_M_0,
1824 VEX_LEN_0F2A_P_1,
1825 VEX_LEN_0F2A_P_3,
1826 VEX_LEN_0F2C_P_1,
1827 VEX_LEN_0F2C_P_3,
1828 VEX_LEN_0F2D_P_1,
1829 VEX_LEN_0F2D_P_3,
43234a1e 1830 VEX_LEN_0F41_P_0,
1ba585e8 1831 VEX_LEN_0F41_P_2,
43234a1e 1832 VEX_LEN_0F42_P_0,
1ba585e8 1833 VEX_LEN_0F42_P_2,
43234a1e 1834 VEX_LEN_0F44_P_0,
1ba585e8 1835 VEX_LEN_0F44_P_2,
43234a1e 1836 VEX_LEN_0F45_P_0,
1ba585e8 1837 VEX_LEN_0F45_P_2,
43234a1e 1838 VEX_LEN_0F46_P_0,
1ba585e8 1839 VEX_LEN_0F46_P_2,
43234a1e 1840 VEX_LEN_0F47_P_0,
1ba585e8
IT
1841 VEX_LEN_0F47_P_2,
1842 VEX_LEN_0F4A_P_0,
1843 VEX_LEN_0F4A_P_2,
1844 VEX_LEN_0F4B_P_0,
43234a1e 1845 VEX_LEN_0F4B_P_2,
592a252b 1846 VEX_LEN_0F6E_P_2,
ec6f095a 1847 VEX_LEN_0F77_P_0,
592a252b
L
1848 VEX_LEN_0F7E_P_1,
1849 VEX_LEN_0F7E_P_2,
43234a1e 1850 VEX_LEN_0F90_P_0,
1ba585e8 1851 VEX_LEN_0F90_P_2,
43234a1e 1852 VEX_LEN_0F91_P_0,
1ba585e8 1853 VEX_LEN_0F91_P_2,
43234a1e 1854 VEX_LEN_0F92_P_0,
90a915bf 1855 VEX_LEN_0F92_P_2,
1ba585e8 1856 VEX_LEN_0F92_P_3,
43234a1e 1857 VEX_LEN_0F93_P_0,
90a915bf 1858 VEX_LEN_0F93_P_2,
1ba585e8 1859 VEX_LEN_0F93_P_3,
43234a1e 1860 VEX_LEN_0F98_P_0,
1ba585e8
IT
1861 VEX_LEN_0F98_P_2,
1862 VEX_LEN_0F99_P_0,
1863 VEX_LEN_0F99_P_2,
592a252b
L
1864 VEX_LEN_0FAE_R_2_M_0,
1865 VEX_LEN_0FAE_R_3_M_0,
592a252b
L
1866 VEX_LEN_0FC4_P_2,
1867 VEX_LEN_0FC5_P_2,
592a252b 1868 VEX_LEN_0FD6_P_2,
592a252b 1869 VEX_LEN_0FF7_P_2,
6c30d220
L
1870 VEX_LEN_0F3816_P_2,
1871 VEX_LEN_0F3819_P_2,
592a252b 1872 VEX_LEN_0F381A_P_2_M_0,
6c30d220 1873 VEX_LEN_0F3836_P_2,
592a252b 1874 VEX_LEN_0F3841_P_2,
6c30d220 1875 VEX_LEN_0F385A_P_2_M_0,
592a252b 1876 VEX_LEN_0F38DB_P_2,
f12dc422
L
1877 VEX_LEN_0F38F2_P_0,
1878 VEX_LEN_0F38F3_R_1_P_0,
1879 VEX_LEN_0F38F3_R_2_P_0,
1880 VEX_LEN_0F38F3_R_3_P_0,
6c30d220
L
1881 VEX_LEN_0F38F5_P_0,
1882 VEX_LEN_0F38F5_P_1,
1883 VEX_LEN_0F38F5_P_3,
1884 VEX_LEN_0F38F6_P_3,
f12dc422 1885 VEX_LEN_0F38F7_P_0,
6c30d220
L
1886 VEX_LEN_0F38F7_P_1,
1887 VEX_LEN_0F38F7_P_2,
1888 VEX_LEN_0F38F7_P_3,
1889 VEX_LEN_0F3A00_P_2,
1890 VEX_LEN_0F3A01_P_2,
592a252b 1891 VEX_LEN_0F3A06_P_2,
592a252b
L
1892 VEX_LEN_0F3A14_P_2,
1893 VEX_LEN_0F3A15_P_2,
1894 VEX_LEN_0F3A16_P_2,
1895 VEX_LEN_0F3A17_P_2,
1896 VEX_LEN_0F3A18_P_2,
1897 VEX_LEN_0F3A19_P_2,
1898 VEX_LEN_0F3A20_P_2,
1899 VEX_LEN_0F3A21_P_2,
1900 VEX_LEN_0F3A22_P_2,
43234a1e 1901 VEX_LEN_0F3A30_P_2,
1ba585e8 1902 VEX_LEN_0F3A31_P_2,
43234a1e 1903 VEX_LEN_0F3A32_P_2,
1ba585e8 1904 VEX_LEN_0F3A33_P_2,
6c30d220
L
1905 VEX_LEN_0F3A38_P_2,
1906 VEX_LEN_0F3A39_P_2,
592a252b 1907 VEX_LEN_0F3A41_P_2,
6c30d220 1908 VEX_LEN_0F3A46_P_2,
592a252b
L
1909 VEX_LEN_0F3A60_P_2,
1910 VEX_LEN_0F3A61_P_2,
1911 VEX_LEN_0F3A62_P_2,
1912 VEX_LEN_0F3A63_P_2,
1913 VEX_LEN_0F3A6A_P_2,
1914 VEX_LEN_0F3A6B_P_2,
1915 VEX_LEN_0F3A6E_P_2,
1916 VEX_LEN_0F3A6F_P_2,
1917 VEX_LEN_0F3A7A_P_2,
1918 VEX_LEN_0F3A7B_P_2,
1919 VEX_LEN_0F3A7E_P_2,
1920 VEX_LEN_0F3A7F_P_2,
1921 VEX_LEN_0F3ADF_P_2,
6c30d220 1922 VEX_LEN_0F3AF0_P_3,
ff688e1f
L
1923 VEX_LEN_0FXOP_08_CC,
1924 VEX_LEN_0FXOP_08_CD,
1925 VEX_LEN_0FXOP_08_CE,
1926 VEX_LEN_0FXOP_08_CF,
1927 VEX_LEN_0FXOP_08_EC,
1928 VEX_LEN_0FXOP_08_ED,
1929 VEX_LEN_0FXOP_08_EE,
1930 VEX_LEN_0FXOP_08_EF,
592a252b
L
1931 VEX_LEN_0FXOP_09_80,
1932 VEX_LEN_0FXOP_09_81
51e7da1b 1933};
c0f3af97 1934
04e2a182
L
1935enum
1936{
1937 EVEX_LEN_0F6E_P_2 = 0,
1938 EVEX_LEN_0F7E_P_1,
1939 EVEX_LEN_0F7E_P_2,
12efd68d 1940 EVEX_LEN_0FD6_P_2,
f0a6222e
L
1941 EVEX_LEN_0F3819_P_2_W_0,
1942 EVEX_LEN_0F3819_P_2_W_1,
1943 EVEX_LEN_0F381A_P_2_W_0,
1944 EVEX_LEN_0F381A_P_2_W_1,
1945 EVEX_LEN_0F381B_P_2_W_0,
1946 EVEX_LEN_0F381B_P_2_W_1,
1947 EVEX_LEN_0F385A_P_2_W_0,
1948 EVEX_LEN_0F385A_P_2_W_1,
1949 EVEX_LEN_0F385B_P_2_W_0,
1950 EVEX_LEN_0F385B_P_2_W_1,
12efd68d
L
1951 EVEX_LEN_0F3A18_P_2_W_0,
1952 EVEX_LEN_0F3A18_P_2_W_1,
1953 EVEX_LEN_0F3A19_P_2_W_0,
1954 EVEX_LEN_0F3A19_P_2_W_1,
1955 EVEX_LEN_0F3A1A_P_2_W_0,
1956 EVEX_LEN_0F3A1A_P_2_W_1,
1957 EVEX_LEN_0F3A1B_P_2_W_0,
6e1c90b7
L
1958 EVEX_LEN_0F3A1B_P_2_W_1,
1959 EVEX_LEN_0F3A23_P_2_W_0,
1960 EVEX_LEN_0F3A23_P_2_W_1,
1961 EVEX_LEN_0F3A38_P_2_W_0,
1962 EVEX_LEN_0F3A38_P_2_W_1,
1963 EVEX_LEN_0F3A39_P_2_W_0,
1964 EVEX_LEN_0F3A39_P_2_W_1,
1965 EVEX_LEN_0F3A3A_P_2_W_0,
1966 EVEX_LEN_0F3A3A_P_2_W_1,
1967 EVEX_LEN_0F3A3B_P_2_W_0,
1968 EVEX_LEN_0F3A3B_P_2_W_1,
1969 EVEX_LEN_0F3A43_P_2_W_0,
1970 EVEX_LEN_0F3A43_P_2_W_1
04e2a182
L
1971};
1972
9e30b8e0
L
1973enum
1974{
ec6f095a 1975 VEX_W_0F41_P_0_LEN_1 = 0,
1ba585e8 1976 VEX_W_0F41_P_2_LEN_1,
43234a1e 1977 VEX_W_0F42_P_0_LEN_1,
1ba585e8 1978 VEX_W_0F42_P_2_LEN_1,
43234a1e 1979 VEX_W_0F44_P_0_LEN_0,
1ba585e8 1980 VEX_W_0F44_P_2_LEN_0,
43234a1e 1981 VEX_W_0F45_P_0_LEN_1,
1ba585e8 1982 VEX_W_0F45_P_2_LEN_1,
43234a1e 1983 VEX_W_0F46_P_0_LEN_1,
1ba585e8 1984 VEX_W_0F46_P_2_LEN_1,
43234a1e 1985 VEX_W_0F47_P_0_LEN_1,
1ba585e8
IT
1986 VEX_W_0F47_P_2_LEN_1,
1987 VEX_W_0F4A_P_0_LEN_1,
1988 VEX_W_0F4A_P_2_LEN_1,
1989 VEX_W_0F4B_P_0_LEN_1,
43234a1e 1990 VEX_W_0F4B_P_2_LEN_1,
43234a1e 1991 VEX_W_0F90_P_0_LEN_0,
1ba585e8 1992 VEX_W_0F90_P_2_LEN_0,
43234a1e 1993 VEX_W_0F91_P_0_LEN_0,
1ba585e8 1994 VEX_W_0F91_P_2_LEN_0,
43234a1e 1995 VEX_W_0F92_P_0_LEN_0,
90a915bf 1996 VEX_W_0F92_P_2_LEN_0,
43234a1e 1997 VEX_W_0F93_P_0_LEN_0,
90a915bf 1998 VEX_W_0F93_P_2_LEN_0,
43234a1e 1999 VEX_W_0F98_P_0_LEN_0,
1ba585e8
IT
2000 VEX_W_0F98_P_2_LEN_0,
2001 VEX_W_0F99_P_0_LEN_0,
2002 VEX_W_0F99_P_2_LEN_0,
592a252b
L
2003 VEX_W_0F380C_P_2,
2004 VEX_W_0F380D_P_2,
2005 VEX_W_0F380E_P_2,
2006 VEX_W_0F380F_P_2,
6c30d220 2007 VEX_W_0F3816_P_2,
6c30d220
L
2008 VEX_W_0F3818_P_2,
2009 VEX_W_0F3819_P_2,
592a252b 2010 VEX_W_0F381A_P_2_M_0,
592a252b
L
2011 VEX_W_0F382C_P_2_M_0,
2012 VEX_W_0F382D_P_2_M_0,
2013 VEX_W_0F382E_P_2_M_0,
2014 VEX_W_0F382F_P_2_M_0,
6c30d220 2015 VEX_W_0F3836_P_2,
6c30d220
L
2016 VEX_W_0F3846_P_2,
2017 VEX_W_0F3858_P_2,
2018 VEX_W_0F3859_P_2,
2019 VEX_W_0F385A_P_2_M_0,
2020 VEX_W_0F3878_P_2,
2021 VEX_W_0F3879_P_2,
48521003 2022 VEX_W_0F38CF_P_2,
6c30d220
L
2023 VEX_W_0F3A00_P_2,
2024 VEX_W_0F3A01_P_2,
2025 VEX_W_0F3A02_P_2,
592a252b
L
2026 VEX_W_0F3A04_P_2,
2027 VEX_W_0F3A05_P_2,
2028 VEX_W_0F3A06_P_2,
592a252b
L
2029 VEX_W_0F3A18_P_2,
2030 VEX_W_0F3A19_P_2,
43234a1e 2031 VEX_W_0F3A30_P_2_LEN_0,
1ba585e8 2032 VEX_W_0F3A31_P_2_LEN_0,
43234a1e 2033 VEX_W_0F3A32_P_2_LEN_0,
1ba585e8 2034 VEX_W_0F3A33_P_2_LEN_0,
6c30d220
L
2035 VEX_W_0F3A38_P_2,
2036 VEX_W_0F3A39_P_2,
6c30d220 2037 VEX_W_0F3A46_P_2,
592a252b
L
2038 VEX_W_0F3A48_P_2,
2039 VEX_W_0F3A49_P_2,
2040 VEX_W_0F3A4A_P_2,
2041 VEX_W_0F3A4B_P_2,
2042 VEX_W_0F3A4C_P_2,
48521003
IT
2043 VEX_W_0F3ACE_P_2,
2044 VEX_W_0F3ACF_P_2,
43234a1e
L
2045
2046 EVEX_W_0F10_P_0,
2047 EVEX_W_0F10_P_1_M_0,
2048 EVEX_W_0F10_P_1_M_1,
2049 EVEX_W_0F10_P_2,
2050 EVEX_W_0F10_P_3_M_0,
2051 EVEX_W_0F10_P_3_M_1,
2052 EVEX_W_0F11_P_0,
2053 EVEX_W_0F11_P_1_M_0,
2054 EVEX_W_0F11_P_1_M_1,
2055 EVEX_W_0F11_P_2,
2056 EVEX_W_0F11_P_3_M_0,
2057 EVEX_W_0F11_P_3_M_1,
2058 EVEX_W_0F12_P_0_M_0,
2059 EVEX_W_0F12_P_0_M_1,
2060 EVEX_W_0F12_P_1,
2061 EVEX_W_0F12_P_2,
2062 EVEX_W_0F12_P_3,
2063 EVEX_W_0F13_P_0,
2064 EVEX_W_0F13_P_2,
2065 EVEX_W_0F14_P_0,
2066 EVEX_W_0F14_P_2,
2067 EVEX_W_0F15_P_0,
2068 EVEX_W_0F15_P_2,
2069 EVEX_W_0F16_P_0_M_0,
2070 EVEX_W_0F16_P_0_M_1,
2071 EVEX_W_0F16_P_1,
2072 EVEX_W_0F16_P_2,
2073 EVEX_W_0F17_P_0,
2074 EVEX_W_0F17_P_2,
2075 EVEX_W_0F28_P_0,
2076 EVEX_W_0F28_P_2,
2077 EVEX_W_0F29_P_0,
2078 EVEX_W_0F29_P_2,
2079 EVEX_W_0F2A_P_1,
2080 EVEX_W_0F2A_P_3,
2081 EVEX_W_0F2B_P_0,
2082 EVEX_W_0F2B_P_2,
2083 EVEX_W_0F2E_P_0,
2084 EVEX_W_0F2E_P_2,
2085 EVEX_W_0F2F_P_0,
2086 EVEX_W_0F2F_P_2,
2087 EVEX_W_0F51_P_0,
2088 EVEX_W_0F51_P_1,
2089 EVEX_W_0F51_P_2,
2090 EVEX_W_0F51_P_3,
90a915bf
IT
2091 EVEX_W_0F54_P_0,
2092 EVEX_W_0F54_P_2,
2093 EVEX_W_0F55_P_0,
2094 EVEX_W_0F55_P_2,
2095 EVEX_W_0F56_P_0,
2096 EVEX_W_0F56_P_2,
2097 EVEX_W_0F57_P_0,
2098 EVEX_W_0F57_P_2,
43234a1e
L
2099 EVEX_W_0F58_P_0,
2100 EVEX_W_0F58_P_1,
2101 EVEX_W_0F58_P_2,
2102 EVEX_W_0F58_P_3,
2103 EVEX_W_0F59_P_0,
2104 EVEX_W_0F59_P_1,
2105 EVEX_W_0F59_P_2,
2106 EVEX_W_0F59_P_3,
2107 EVEX_W_0F5A_P_0,
2108 EVEX_W_0F5A_P_1,
2109 EVEX_W_0F5A_P_2,
2110 EVEX_W_0F5A_P_3,
2111 EVEX_W_0F5B_P_0,
2112 EVEX_W_0F5B_P_1,
2113 EVEX_W_0F5B_P_2,
2114 EVEX_W_0F5C_P_0,
2115 EVEX_W_0F5C_P_1,
2116 EVEX_W_0F5C_P_2,
2117 EVEX_W_0F5C_P_3,
2118 EVEX_W_0F5D_P_0,
2119 EVEX_W_0F5D_P_1,
2120 EVEX_W_0F5D_P_2,
2121 EVEX_W_0F5D_P_3,
2122 EVEX_W_0F5E_P_0,
2123 EVEX_W_0F5E_P_1,
2124 EVEX_W_0F5E_P_2,
2125 EVEX_W_0F5E_P_3,
2126 EVEX_W_0F5F_P_0,
2127 EVEX_W_0F5F_P_1,
2128 EVEX_W_0F5F_P_2,
2129 EVEX_W_0F5F_P_3,
2130 EVEX_W_0F62_P_2,
2131 EVEX_W_0F66_P_2,
2132 EVEX_W_0F6A_P_2,
1ba585e8 2133 EVEX_W_0F6B_P_2,
43234a1e
L
2134 EVEX_W_0F6C_P_2,
2135 EVEX_W_0F6D_P_2,
43234a1e
L
2136 EVEX_W_0F6F_P_1,
2137 EVEX_W_0F6F_P_2,
1ba585e8 2138 EVEX_W_0F6F_P_3,
43234a1e
L
2139 EVEX_W_0F70_P_2,
2140 EVEX_W_0F72_R_2_P_2,
2141 EVEX_W_0F72_R_6_P_2,
2142 EVEX_W_0F73_R_2_P_2,
2143 EVEX_W_0F73_R_6_P_2,
2144 EVEX_W_0F76_P_2,
2145 EVEX_W_0F78_P_0,
90a915bf 2146 EVEX_W_0F78_P_2,
43234a1e 2147 EVEX_W_0F79_P_0,
90a915bf 2148 EVEX_W_0F79_P_2,
43234a1e 2149 EVEX_W_0F7A_P_1,
90a915bf 2150 EVEX_W_0F7A_P_2,
43234a1e
L
2151 EVEX_W_0F7A_P_3,
2152 EVEX_W_0F7B_P_1,
90a915bf 2153 EVEX_W_0F7B_P_2,
43234a1e
L
2154 EVEX_W_0F7B_P_3,
2155 EVEX_W_0F7E_P_1,
43234a1e
L
2156 EVEX_W_0F7F_P_1,
2157 EVEX_W_0F7F_P_2,
1ba585e8 2158 EVEX_W_0F7F_P_3,
43234a1e
L
2159 EVEX_W_0FC2_P_0,
2160 EVEX_W_0FC2_P_1,
2161 EVEX_W_0FC2_P_2,
2162 EVEX_W_0FC2_P_3,
2163 EVEX_W_0FC6_P_0,
2164 EVEX_W_0FC6_P_2,
2165 EVEX_W_0FD2_P_2,
2166 EVEX_W_0FD3_P_2,
2167 EVEX_W_0FD4_P_2,
2168 EVEX_W_0FD6_P_2,
2169 EVEX_W_0FE6_P_1,
2170 EVEX_W_0FE6_P_2,
2171 EVEX_W_0FE6_P_3,
2172 EVEX_W_0FE7_P_2,
2173 EVEX_W_0FF2_P_2,
2174 EVEX_W_0FF3_P_2,
2175 EVEX_W_0FF4_P_2,
2176 EVEX_W_0FFA_P_2,
2177 EVEX_W_0FFB_P_2,
2178 EVEX_W_0FFE_P_2,
2179 EVEX_W_0F380C_P_2,
2180 EVEX_W_0F380D_P_2,
1ba585e8
IT
2181 EVEX_W_0F3810_P_1,
2182 EVEX_W_0F3810_P_2,
43234a1e 2183 EVEX_W_0F3811_P_1,
1ba585e8 2184 EVEX_W_0F3811_P_2,
43234a1e 2185 EVEX_W_0F3812_P_1,
1ba585e8 2186 EVEX_W_0F3812_P_2,
43234a1e
L
2187 EVEX_W_0F3813_P_1,
2188 EVEX_W_0F3813_P_2,
2189 EVEX_W_0F3814_P_1,
2190 EVEX_W_0F3815_P_1,
2191 EVEX_W_0F3818_P_2,
2192 EVEX_W_0F3819_P_2,
2193 EVEX_W_0F381A_P_2,
2194 EVEX_W_0F381B_P_2,
2195 EVEX_W_0F381E_P_2,
2196 EVEX_W_0F381F_P_2,
1ba585e8 2197 EVEX_W_0F3820_P_1,
43234a1e
L
2198 EVEX_W_0F3821_P_1,
2199 EVEX_W_0F3822_P_1,
2200 EVEX_W_0F3823_P_1,
2201 EVEX_W_0F3824_P_1,
2202 EVEX_W_0F3825_P_1,
2203 EVEX_W_0F3825_P_2,
1ba585e8
IT
2204 EVEX_W_0F3826_P_1,
2205 EVEX_W_0F3826_P_2,
2206 EVEX_W_0F3828_P_1,
43234a1e 2207 EVEX_W_0F3828_P_2,
1ba585e8 2208 EVEX_W_0F3829_P_1,
43234a1e
L
2209 EVEX_W_0F3829_P_2,
2210 EVEX_W_0F382A_P_1,
2211 EVEX_W_0F382A_P_2,
1ba585e8
IT
2212 EVEX_W_0F382B_P_2,
2213 EVEX_W_0F3830_P_1,
43234a1e
L
2214 EVEX_W_0F3831_P_1,
2215 EVEX_W_0F3832_P_1,
2216 EVEX_W_0F3833_P_1,
2217 EVEX_W_0F3834_P_1,
2218 EVEX_W_0F3835_P_1,
2219 EVEX_W_0F3835_P_2,
2220 EVEX_W_0F3837_P_2,
90a915bf
IT
2221 EVEX_W_0F3838_P_1,
2222 EVEX_W_0F3839_P_1,
43234a1e
L
2223 EVEX_W_0F383A_P_1,
2224 EVEX_W_0F3840_P_2,
d6aab7a1 2225 EVEX_W_0F3852_P_1,
ee6872be 2226 EVEX_W_0F3854_P_2,
620214f7 2227 EVEX_W_0F3855_P_2,
43234a1e
L
2228 EVEX_W_0F3858_P_2,
2229 EVEX_W_0F3859_P_2,
2230 EVEX_W_0F385A_P_2,
2231 EVEX_W_0F385B_P_2,
53467f57
IT
2232 EVEX_W_0F3862_P_2,
2233 EVEX_W_0F3863_P_2,
1ba585e8 2234 EVEX_W_0F3866_P_2,
9186c494 2235 EVEX_W_0F3868_P_3,
53467f57
IT
2236 EVEX_W_0F3870_P_2,
2237 EVEX_W_0F3871_P_2,
d6aab7a1 2238 EVEX_W_0F3872_P_1,
53467f57 2239 EVEX_W_0F3872_P_2,
d6aab7a1 2240 EVEX_W_0F3872_P_3,
53467f57 2241 EVEX_W_0F3873_P_2,
1ba585e8
IT
2242 EVEX_W_0F3875_P_2,
2243 EVEX_W_0F3878_P_2,
2244 EVEX_W_0F3879_P_2,
2245 EVEX_W_0F387A_P_2,
2246 EVEX_W_0F387B_P_2,
2247 EVEX_W_0F387D_P_2,
14f195c9 2248 EVEX_W_0F3883_P_2,
1ba585e8 2249 EVEX_W_0F388D_P_2,
43234a1e
L
2250 EVEX_W_0F3891_P_2,
2251 EVEX_W_0F3893_P_2,
2252 EVEX_W_0F38A1_P_2,
2253 EVEX_W_0F38A3_P_2,
2254 EVEX_W_0F38C7_R_1_P_2,
2255 EVEX_W_0F38C7_R_2_P_2,
2256 EVEX_W_0F38C7_R_5_P_2,
2257 EVEX_W_0F38C7_R_6_P_2,
2258
2259 EVEX_W_0F3A00_P_2,
2260 EVEX_W_0F3A01_P_2,
2261 EVEX_W_0F3A04_P_2,
2262 EVEX_W_0F3A05_P_2,
2263 EVEX_W_0F3A08_P_2,
2264 EVEX_W_0F3A09_P_2,
2265 EVEX_W_0F3A0A_P_2,
2266 EVEX_W_0F3A0B_P_2,
2267 EVEX_W_0F3A18_P_2,
2268 EVEX_W_0F3A19_P_2,
2269 EVEX_W_0F3A1A_P_2,
2270 EVEX_W_0F3A1B_P_2,
2271 EVEX_W_0F3A1D_P_2,
2272 EVEX_W_0F3A21_P_2,
2273 EVEX_W_0F3A23_P_2,
2274 EVEX_W_0F3A38_P_2,
2275 EVEX_W_0F3A39_P_2,
2276 EVEX_W_0F3A3A_P_2,
2277 EVEX_W_0F3A3B_P_2,
1ba585e8
IT
2278 EVEX_W_0F3A3E_P_2,
2279 EVEX_W_0F3A3F_P_2,
2280 EVEX_W_0F3A42_P_2,
90a915bf
IT
2281 EVEX_W_0F3A43_P_2,
2282 EVEX_W_0F3A50_P_2,
2283 EVEX_W_0F3A51_P_2,
2284 EVEX_W_0F3A56_P_2,
2285 EVEX_W_0F3A57_P_2,
2286 EVEX_W_0F3A66_P_2,
53467f57
IT
2287 EVEX_W_0F3A67_P_2,
2288 EVEX_W_0F3A70_P_2,
2289 EVEX_W_0F3A71_P_2,
2290 EVEX_W_0F3A72_P_2,
48521003
IT
2291 EVEX_W_0F3A73_P_2,
2292 EVEX_W_0F3ACE_P_2,
2293 EVEX_W_0F3ACF_P_2
9e30b8e0
L
2294};
2295
26ca5450 2296typedef void (*op_rtn) (int bytemode, int sizeflag);
252b5132
RH
2297
2298struct dis386 {
2da11e11 2299 const char *name;
ce518a5f
L
2300 struct
2301 {
2302 op_rtn rtn;
2303 int bytemode;
2304 } op[MAX_OPERANDS];
bf890a93 2305 unsigned int prefix_requirement;
252b5132
RH
2306};
2307
2308/* Upper case letters in the instruction names here are macros.
2309 'A' => print 'b' if no register operands or suffix_always is true
2310 'B' => print 'b' if suffix_always is true
9306ca4a 2311 'C' => print 's' or 'l' ('w' or 'd' in Intel mode) depending on operand
98b528ac 2312 size prefix
ed7841b3 2313 'D' => print 'w' if no register operands or 'w', 'l' or 'q', if
98b528ac 2314 suffix_always is true
252b5132 2315 'E' => print 'e' if 32-bit form of jcxz
3ffd33cf 2316 'F' => print 'w' or 'l' depending on address size prefix (loop insns)
52fd6d94 2317 'G' => print 'w' or 'l' depending on operand size prefix (i/o insns)
5dd0794d 2318 'H' => print ",pt" or ",pn" branch hint
9306ca4a 2319 'I' => honor following macro letter even in Intel mode (implemented only
98b528ac 2320 for some of the macro letters)
9306ca4a 2321 'J' => print 'l'
42903f7f 2322 'K' => print 'd' or 'q' if rex prefix is present.
252b5132 2323 'L' => print 'l' if suffix_always is true
9d141669 2324 'M' => print 'r' if intel_mnemonic is false.
252b5132 2325 'N' => print 'n' if instruction has no wait "prefix"
a35ca55a 2326 'O' => print 'd' or 'o' (or 'q' in Intel mode)
52b15da3 2327 'P' => print 'w', 'l' or 'q' if instruction has an operand size prefix,
98b528ac
L
2328 or suffix_always is true. print 'q' if rex prefix is present.
2329 'Q' => print 'w', 'l' or 'q' for memory operand or suffix_always
2330 is true
a35ca55a 2331 'R' => print 'w', 'l' or 'q' ('d' for 'l' and 'e' in Intel mode)
52b15da3 2332 'S' => print 'w', 'l' or 'q' if suffix_always is true
a72d2af2
L
2333 'T' => print 'q' in 64bit mode if instruction has no operand size
2334 prefix and behave as 'P' otherwise
2335 'U' => print 'q' in 64bit mode if instruction has no operand size
2336 prefix and behave as 'Q' otherwise
2337 'V' => print 'q' in 64bit mode if instruction has no operand size
2338 prefix and behave as 'S' otherwise
a35ca55a 2339 'W' => print 'b', 'w' or 'l' ('d' in Intel mode)
9306ca4a 2340 'X' => print 's', 'd' depending on data16 prefix (for XMM)
9646c87b 2341 'Y' unused.
6dd5059a 2342 'Z' => print 'q' in 64bit mode and behave as 'L' otherwise
9d141669 2343 '!' => change condition from true to false or from false to true.
98b528ac 2344 '%' => add 1 upper case letter to the macro.
a72d2af2
L
2345 '^' => print 'w' or 'l' depending on operand size prefix or
2346 suffix_always is true (lcall/ljmp).
5db04b09
L
2347 '@' => print 'q' for Intel64 ISA, 'w' or 'q' for AMD64 ISA depending
2348 on operand size prefix.
07f5af7d
L
2349 '&' => print 'q' in 64bit mode for Intel64 ISA or if instruction
2350 has no operand size prefix for AMD64 ISA, behave as 'P'
2351 otherwise
98b528ac
L
2352
2353 2 upper case letter macros:
04d824a4
JB
2354 "XY" => print 'x' or 'y' if suffix_always is true or no register
2355 operands and no broadcast.
2356 "XZ" => print 'x', 'y', or 'z' if suffix_always is true or no
2357 register operands and no broadcast.
4b06377f
L
2358 "XW" => print 's', 'd' depending on the VEX.W bit (for FMA)
2359 "LQ" => print 'l' ('d' in Intel mode) or 'q' for memory operand
98b528ac 2360 or suffix_always is true
4b06377f
L
2361 "LB" => print "abs" in 64bit mode and behave as 'B' otherwise
2362 "LS" => print "abs" in 64bit mode and behave as 'S' otherwise
2363 "LV" => print "abs" for 64bit operand and behave as 'S' otherwise
6c30d220 2364 "LW" => print 'd', 'q' depending on the VEX.W bit
4b4c407a
L
2365 "LP" => print 'w' or 'l' ('d' in Intel mode) if instruction has
2366 an operand size prefix, or suffix_always is true. print
2367 'q' if rex prefix is present.
52b15da3 2368
6439fc28
AM
2369 Many of the above letters print nothing in Intel mode. See "putop"
2370 for the details.
52b15da3 2371
6439fc28 2372 Braces '{' and '}', and vertical bars '|', indicate alternative
7c52e0e8 2373 mnemonic strings for AT&T and Intel. */
252b5132 2374
6439fc28 2375static const struct dis386 dis386[] = {
252b5132 2376 /* 00 */
bf890a93
IT
2377 { "addB", { Ebh1, Gb }, 0 },
2378 { "addS", { Evh1, Gv }, 0 },
2379 { "addB", { Gb, EbS }, 0 },
2380 { "addS", { Gv, EvS }, 0 },
2381 { "addB", { AL, Ib }, 0 },
2382 { "addS", { eAX, Iv }, 0 },
4e7d34a6
L
2383 { X86_64_TABLE (X86_64_06) },
2384 { X86_64_TABLE (X86_64_07) },
252b5132 2385 /* 08 */
bf890a93
IT
2386 { "orB", { Ebh1, Gb }, 0 },
2387 { "orS", { Evh1, Gv }, 0 },
2388 { "orB", { Gb, EbS }, 0 },
2389 { "orS", { Gv, EvS }, 0 },
2390 { "orB", { AL, Ib }, 0 },
2391 { "orS", { eAX, Iv }, 0 },
4e7d34a6 2392 { X86_64_TABLE (X86_64_0D) },
592d1631 2393 { Bad_Opcode }, /* 0x0f extended opcode escape */
252b5132 2394 /* 10 */
bf890a93
IT
2395 { "adcB", { Ebh1, Gb }, 0 },
2396 { "adcS", { Evh1, Gv }, 0 },
2397 { "adcB", { Gb, EbS }, 0 },
2398 { "adcS", { Gv, EvS }, 0 },
2399 { "adcB", { AL, Ib }, 0 },
2400 { "adcS", { eAX, Iv }, 0 },
4e7d34a6
L
2401 { X86_64_TABLE (X86_64_16) },
2402 { X86_64_TABLE (X86_64_17) },
252b5132 2403 /* 18 */
bf890a93
IT
2404 { "sbbB", { Ebh1, Gb }, 0 },
2405 { "sbbS", { Evh1, Gv }, 0 },
2406 { "sbbB", { Gb, EbS }, 0 },
2407 { "sbbS", { Gv, EvS }, 0 },
2408 { "sbbB", { AL, Ib }, 0 },
2409 { "sbbS", { eAX, Iv }, 0 },
4e7d34a6
L
2410 { X86_64_TABLE (X86_64_1E) },
2411 { X86_64_TABLE (X86_64_1F) },
252b5132 2412 /* 20 */
bf890a93
IT
2413 { "andB", { Ebh1, Gb }, 0 },
2414 { "andS", { Evh1, Gv }, 0 },
2415 { "andB", { Gb, EbS }, 0 },
2416 { "andS", { Gv, EvS }, 0 },
2417 { "andB", { AL, Ib }, 0 },
2418 { "andS", { eAX, Iv }, 0 },
592d1631 2419 { Bad_Opcode }, /* SEG ES prefix */
4e7d34a6 2420 { X86_64_TABLE (X86_64_27) },
252b5132 2421 /* 28 */
bf890a93
IT
2422 { "subB", { Ebh1, Gb }, 0 },
2423 { "subS", { Evh1, Gv }, 0 },
2424 { "subB", { Gb, EbS }, 0 },
2425 { "subS", { Gv, EvS }, 0 },
2426 { "subB", { AL, Ib }, 0 },
2427 { "subS", { eAX, Iv }, 0 },
592d1631 2428 { Bad_Opcode }, /* SEG CS prefix */
4e7d34a6 2429 { X86_64_TABLE (X86_64_2F) },
252b5132 2430 /* 30 */
bf890a93
IT
2431 { "xorB", { Ebh1, Gb }, 0 },
2432 { "xorS", { Evh1, Gv }, 0 },
2433 { "xorB", { Gb, EbS }, 0 },
2434 { "xorS", { Gv, EvS }, 0 },
2435 { "xorB", { AL, Ib }, 0 },
2436 { "xorS", { eAX, Iv }, 0 },
592d1631 2437 { Bad_Opcode }, /* SEG SS prefix */
4e7d34a6 2438 { X86_64_TABLE (X86_64_37) },
252b5132 2439 /* 38 */
bf890a93
IT
2440 { "cmpB", { Eb, Gb }, 0 },
2441 { "cmpS", { Ev, Gv }, 0 },
2442 { "cmpB", { Gb, EbS }, 0 },
2443 { "cmpS", { Gv, EvS }, 0 },
2444 { "cmpB", { AL, Ib }, 0 },
2445 { "cmpS", { eAX, Iv }, 0 },
592d1631 2446 { Bad_Opcode }, /* SEG DS prefix */
4e7d34a6 2447 { X86_64_TABLE (X86_64_3F) },
252b5132 2448 /* 40 */
bf890a93
IT
2449 { "inc{S|}", { RMeAX }, 0 },
2450 { "inc{S|}", { RMeCX }, 0 },
2451 { "inc{S|}", { RMeDX }, 0 },
2452 { "inc{S|}", { RMeBX }, 0 },
2453 { "inc{S|}", { RMeSP }, 0 },
2454 { "inc{S|}", { RMeBP }, 0 },
2455 { "inc{S|}", { RMeSI }, 0 },
2456 { "inc{S|}", { RMeDI }, 0 },
252b5132 2457 /* 48 */
bf890a93
IT
2458 { "dec{S|}", { RMeAX }, 0 },
2459 { "dec{S|}", { RMeCX }, 0 },
2460 { "dec{S|}", { RMeDX }, 0 },
2461 { "dec{S|}", { RMeBX }, 0 },
2462 { "dec{S|}", { RMeSP }, 0 },
2463 { "dec{S|}", { RMeBP }, 0 },
2464 { "dec{S|}", { RMeSI }, 0 },
2465 { "dec{S|}", { RMeDI }, 0 },
252b5132 2466 /* 50 */
bf890a93
IT
2467 { "pushV", { RMrAX }, 0 },
2468 { "pushV", { RMrCX }, 0 },
2469 { "pushV", { RMrDX }, 0 },
2470 { "pushV", { RMrBX }, 0 },
2471 { "pushV", { RMrSP }, 0 },
2472 { "pushV", { RMrBP }, 0 },
2473 { "pushV", { RMrSI }, 0 },
2474 { "pushV", { RMrDI }, 0 },
252b5132 2475 /* 58 */
bf890a93
IT
2476 { "popV", { RMrAX }, 0 },
2477 { "popV", { RMrCX }, 0 },
2478 { "popV", { RMrDX }, 0 },
2479 { "popV", { RMrBX }, 0 },
2480 { "popV", { RMrSP }, 0 },
2481 { "popV", { RMrBP }, 0 },
2482 { "popV", { RMrSI }, 0 },
2483 { "popV", { RMrDI }, 0 },
252b5132 2484 /* 60 */
4e7d34a6
L
2485 { X86_64_TABLE (X86_64_60) },
2486 { X86_64_TABLE (X86_64_61) },
2487 { X86_64_TABLE (X86_64_62) },
2488 { X86_64_TABLE (X86_64_63) },
592d1631
L
2489 { Bad_Opcode }, /* seg fs */
2490 { Bad_Opcode }, /* seg gs */
2491 { Bad_Opcode }, /* op size prefix */
2492 { Bad_Opcode }, /* adr size prefix */
252b5132 2493 /* 68 */
bf890a93
IT
2494 { "pushT", { sIv }, 0 },
2495 { "imulS", { Gv, Ev, Iv }, 0 },
2496 { "pushT", { sIbT }, 0 },
2497 { "imulS", { Gv, Ev, sIb }, 0 },
2498 { "ins{b|}", { Ybr, indirDX }, 0 },
4e7d34a6 2499 { X86_64_TABLE (X86_64_6D) },
bf890a93 2500 { "outs{b|}", { indirDXr, Xb }, 0 },
4e7d34a6 2501 { X86_64_TABLE (X86_64_6F) },
252b5132 2502 /* 70 */
bf890a93
IT
2503 { "joH", { Jb, BND, cond_jump_flag }, 0 },
2504 { "jnoH", { Jb, BND, cond_jump_flag }, 0 },
2505 { "jbH", { Jb, BND, cond_jump_flag }, 0 },
2506 { "jaeH", { Jb, BND, cond_jump_flag }, 0 },
2507 { "jeH", { Jb, BND, cond_jump_flag }, 0 },
2508 { "jneH", { Jb, BND, cond_jump_flag }, 0 },
2509 { "jbeH", { Jb, BND, cond_jump_flag }, 0 },
2510 { "jaH", { Jb, BND, cond_jump_flag }, 0 },
252b5132 2511 /* 78 */
bf890a93
IT
2512 { "jsH", { Jb, BND, cond_jump_flag }, 0 },
2513 { "jnsH", { Jb, BND, cond_jump_flag }, 0 },
2514 { "jpH", { Jb, BND, cond_jump_flag }, 0 },
2515 { "jnpH", { Jb, BND, cond_jump_flag }, 0 },
2516 { "jlH", { Jb, BND, cond_jump_flag }, 0 },
2517 { "jgeH", { Jb, BND, cond_jump_flag }, 0 },
2518 { "jleH", { Jb, BND, cond_jump_flag }, 0 },
2519 { "jgH", { Jb, BND, cond_jump_flag }, 0 },
252b5132 2520 /* 80 */
1ceb70f8
L
2521 { REG_TABLE (REG_80) },
2522 { REG_TABLE (REG_81) },
d039fef3 2523 { X86_64_TABLE (X86_64_82) },
7148c369 2524 { REG_TABLE (REG_83) },
bf890a93
IT
2525 { "testB", { Eb, Gb }, 0 },
2526 { "testS", { Ev, Gv }, 0 },
2527 { "xchgB", { Ebh2, Gb }, 0 },
2528 { "xchgS", { Evh2, Gv }, 0 },
252b5132 2529 /* 88 */
bf890a93
IT
2530 { "movB", { Ebh3, Gb }, 0 },
2531 { "movS", { Evh3, Gv }, 0 },
2532 { "movB", { Gb, EbS }, 0 },
2533 { "movS", { Gv, EvS }, 0 },
2534 { "movD", { Sv, Sw }, 0 },
1ceb70f8 2535 { MOD_TABLE (MOD_8D) },
bf890a93 2536 { "movD", { Sw, Sv }, 0 },
1ceb70f8 2537 { REG_TABLE (REG_8F) },
252b5132 2538 /* 90 */
1ceb70f8 2539 { PREFIX_TABLE (PREFIX_90) },
bf890a93
IT
2540 { "xchgS", { RMeCX, eAX }, 0 },
2541 { "xchgS", { RMeDX, eAX }, 0 },
2542 { "xchgS", { RMeBX, eAX }, 0 },
2543 { "xchgS", { RMeSP, eAX }, 0 },
2544 { "xchgS", { RMeBP, eAX }, 0 },
2545 { "xchgS", { RMeSI, eAX }, 0 },
2546 { "xchgS", { RMeDI, eAX }, 0 },
252b5132 2547 /* 98 */
bf890a93
IT
2548 { "cW{t|}R", { XX }, 0 },
2549 { "cR{t|}O", { XX }, 0 },
4e7d34a6 2550 { X86_64_TABLE (X86_64_9A) },
592d1631 2551 { Bad_Opcode }, /* fwait */
bf890a93
IT
2552 { "pushfT", { XX }, 0 },
2553 { "popfT", { XX }, 0 },
2554 { "sahf", { XX }, 0 },
2555 { "lahf", { XX }, 0 },
252b5132 2556 /* a0 */
bf890a93
IT
2557 { "mov%LB", { AL, Ob }, 0 },
2558 { "mov%LS", { eAX, Ov }, 0 },
2559 { "mov%LB", { Ob, AL }, 0 },
2560 { "mov%LS", { Ov, eAX }, 0 },
2561 { "movs{b|}", { Ybr, Xb }, 0 },
2562 { "movs{R|}", { Yvr, Xv }, 0 },
2563 { "cmps{b|}", { Xb, Yb }, 0 },
2564 { "cmps{R|}", { Xv, Yv }, 0 },
252b5132 2565 /* a8 */
bf890a93
IT
2566 { "testB", { AL, Ib }, 0 },
2567 { "testS", { eAX, Iv }, 0 },
2568 { "stosB", { Ybr, AL }, 0 },
2569 { "stosS", { Yvr, eAX }, 0 },
2570 { "lodsB", { ALr, Xb }, 0 },
2571 { "lodsS", { eAXr, Xv }, 0 },
2572 { "scasB", { AL, Yb }, 0 },
2573 { "scasS", { eAX, Yv }, 0 },
252b5132 2574 /* b0 */
bf890a93
IT
2575 { "movB", { RMAL, Ib }, 0 },
2576 { "movB", { RMCL, Ib }, 0 },
2577 { "movB", { RMDL, Ib }, 0 },
2578 { "movB", { RMBL, Ib }, 0 },
2579 { "movB", { RMAH, Ib }, 0 },
2580 { "movB", { RMCH, Ib }, 0 },
2581 { "movB", { RMDH, Ib }, 0 },
2582 { "movB", { RMBH, Ib }, 0 },
252b5132 2583 /* b8 */
bf890a93
IT
2584 { "mov%LV", { RMeAX, Iv64 }, 0 },
2585 { "mov%LV", { RMeCX, Iv64 }, 0 },
2586 { "mov%LV", { RMeDX, Iv64 }, 0 },
2587 { "mov%LV", { RMeBX, Iv64 }, 0 },
2588 { "mov%LV", { RMeSP, Iv64 }, 0 },
2589 { "mov%LV", { RMeBP, Iv64 }, 0 },
2590 { "mov%LV", { RMeSI, Iv64 }, 0 },
2591 { "mov%LV", { RMeDI, Iv64 }, 0 },
252b5132 2592 /* c0 */
1ceb70f8
L
2593 { REG_TABLE (REG_C0) },
2594 { REG_TABLE (REG_C1) },
bf890a93
IT
2595 { "retT", { Iw, BND }, 0 },
2596 { "retT", { BND }, 0 },
4e7d34a6
L
2597 { X86_64_TABLE (X86_64_C4) },
2598 { X86_64_TABLE (X86_64_C5) },
1ceb70f8
L
2599 { REG_TABLE (REG_C6) },
2600 { REG_TABLE (REG_C7) },
252b5132 2601 /* c8 */
bf890a93
IT
2602 { "enterT", { Iw, Ib }, 0 },
2603 { "leaveT", { XX }, 0 },
2604 { "Jret{|f}P", { Iw }, 0 },
2605 { "Jret{|f}P", { XX }, 0 },
2606 { "int3", { XX }, 0 },
2607 { "int", { Ib }, 0 },
4e7d34a6 2608 { X86_64_TABLE (X86_64_CE) },
bf890a93 2609 { "iret%LP", { XX }, 0 },
252b5132 2610 /* d0 */
1ceb70f8
L
2611 { REG_TABLE (REG_D0) },
2612 { REG_TABLE (REG_D1) },
2613 { REG_TABLE (REG_D2) },
2614 { REG_TABLE (REG_D3) },
4e7d34a6
L
2615 { X86_64_TABLE (X86_64_D4) },
2616 { X86_64_TABLE (X86_64_D5) },
592d1631 2617 { Bad_Opcode },
bf890a93 2618 { "xlat", { DSBX }, 0 },
252b5132
RH
2619 /* d8 */
2620 { FLOAT },
2621 { FLOAT },
2622 { FLOAT },
2623 { FLOAT },
2624 { FLOAT },
2625 { FLOAT },
2626 { FLOAT },
2627 { FLOAT },
2628 /* e0 */
bf890a93
IT
2629 { "loopneFH", { Jb, XX, loop_jcxz_flag }, 0 },
2630 { "loopeFH", { Jb, XX, loop_jcxz_flag }, 0 },
2631 { "loopFH", { Jb, XX, loop_jcxz_flag }, 0 },
2632 { "jEcxzH", { Jb, XX, loop_jcxz_flag }, 0 },
2633 { "inB", { AL, Ib }, 0 },
2634 { "inG", { zAX, Ib }, 0 },
2635 { "outB", { Ib, AL }, 0 },
2636 { "outG", { Ib, zAX }, 0 },
252b5132 2637 /* e8 */
a72d2af2
L
2638 { X86_64_TABLE (X86_64_E8) },
2639 { X86_64_TABLE (X86_64_E9) },
4e7d34a6 2640 { X86_64_TABLE (X86_64_EA) },
bf890a93
IT
2641 { "jmp", { Jb, BND }, 0 },
2642 { "inB", { AL, indirDX }, 0 },
2643 { "inG", { zAX, indirDX }, 0 },
2644 { "outB", { indirDX, AL }, 0 },
2645 { "outG", { indirDX, zAX }, 0 },
252b5132 2646 /* f0 */
592d1631 2647 { Bad_Opcode }, /* lock prefix */
bf890a93 2648 { "icebp", { XX }, 0 },
592d1631
L
2649 { Bad_Opcode }, /* repne */
2650 { Bad_Opcode }, /* repz */
bf890a93
IT
2651 { "hlt", { XX }, 0 },
2652 { "cmc", { XX }, 0 },
1ceb70f8
L
2653 { REG_TABLE (REG_F6) },
2654 { REG_TABLE (REG_F7) },
252b5132 2655 /* f8 */
bf890a93
IT
2656 { "clc", { XX }, 0 },
2657 { "stc", { XX }, 0 },
2658 { "cli", { XX }, 0 },
2659 { "sti", { XX }, 0 },
2660 { "cld", { XX }, 0 },
2661 { "std", { XX }, 0 },
1ceb70f8
L
2662 { REG_TABLE (REG_FE) },
2663 { REG_TABLE (REG_FF) },
252b5132
RH
2664};
2665
6439fc28 2666static const struct dis386 dis386_twobyte[] = {
252b5132 2667 /* 00 */
1ceb70f8
L
2668 { REG_TABLE (REG_0F00 ) },
2669 { REG_TABLE (REG_0F01 ) },
bf890a93
IT
2670 { "larS", { Gv, Ew }, 0 },
2671 { "lslS", { Gv, Ew }, 0 },
592d1631 2672 { Bad_Opcode },
bf890a93
IT
2673 { "syscall", { XX }, 0 },
2674 { "clts", { XX }, 0 },
2675 { "sysret%LP", { XX }, 0 },
252b5132 2676 /* 08 */
bf890a93 2677 { "invd", { XX }, 0 },
3233d7d0 2678 { PREFIX_TABLE (PREFIX_0F09) },
592d1631 2679 { Bad_Opcode },
bf890a93 2680 { "ud2", { XX }, 0 },
592d1631 2681 { Bad_Opcode },
b5b1fc4f 2682 { REG_TABLE (REG_0F0D) },
bf890a93
IT
2683 { "femms", { XX }, 0 },
2684 { "", { MX, EM, OPSUF }, 0 }, /* See OP_3DNowSuffix. */
252b5132 2685 /* 10 */
1ceb70f8
L
2686 { PREFIX_TABLE (PREFIX_0F10) },
2687 { PREFIX_TABLE (PREFIX_0F11) },
2688 { PREFIX_TABLE (PREFIX_0F12) },
2689 { MOD_TABLE (MOD_0F13) },
507bd325
L
2690 { "unpcklpX", { XM, EXx }, PREFIX_OPCODE },
2691 { "unpckhpX", { XM, EXx }, PREFIX_OPCODE },
1ceb70f8
L
2692 { PREFIX_TABLE (PREFIX_0F16) },
2693 { MOD_TABLE (MOD_0F17) },
252b5132 2694 /* 18 */
1ceb70f8 2695 { REG_TABLE (REG_0F18) },
bf890a93 2696 { "nopQ", { Ev }, 0 },
7e8b059b
L
2697 { PREFIX_TABLE (PREFIX_0F1A) },
2698 { PREFIX_TABLE (PREFIX_0F1B) },
c48935d7 2699 { PREFIX_TABLE (PREFIX_0F1C) },
bf890a93 2700 { "nopQ", { Ev }, 0 },
603555e5 2701 { PREFIX_TABLE (PREFIX_0F1E) },
bf890a93 2702 { "nopQ", { Ev }, 0 },
252b5132 2703 /* 20 */
bf890a93
IT
2704 { "movZ", { Rm, Cm }, 0 },
2705 { "movZ", { Rm, Dm }, 0 },
2706 { "movZ", { Cm, Rm }, 0 },
2707 { "movZ", { Dm, Rm }, 0 },
1ceb70f8 2708 { MOD_TABLE (MOD_0F24) },
592d1631 2709 { Bad_Opcode },
1ceb70f8 2710 { MOD_TABLE (MOD_0F26) },
592d1631 2711 { Bad_Opcode },
252b5132 2712 /* 28 */
507bd325
L
2713 { "movapX", { XM, EXx }, PREFIX_OPCODE },
2714 { "movapX", { EXxS, XM }, PREFIX_OPCODE },
1ceb70f8
L
2715 { PREFIX_TABLE (PREFIX_0F2A) },
2716 { PREFIX_TABLE (PREFIX_0F2B) },
2717 { PREFIX_TABLE (PREFIX_0F2C) },
2718 { PREFIX_TABLE (PREFIX_0F2D) },
2719 { PREFIX_TABLE (PREFIX_0F2E) },
2720 { PREFIX_TABLE (PREFIX_0F2F) },
252b5132 2721 /* 30 */
bf890a93
IT
2722 { "wrmsr", { XX }, 0 },
2723 { "rdtsc", { XX }, 0 },
2724 { "rdmsr", { XX }, 0 },
2725 { "rdpmc", { XX }, 0 },
2726 { "sysenter", { XX }, 0 },
2727 { "sysexit", { XX }, 0 },
592d1631 2728 { Bad_Opcode },
bf890a93 2729 { "getsec", { XX }, 0 },
252b5132 2730 /* 38 */
507bd325 2731 { THREE_BYTE_TABLE_PREFIX (THREE_BYTE_0F38, PREFIX_OPCODE) },
592d1631 2732 { Bad_Opcode },
507bd325 2733 { THREE_BYTE_TABLE_PREFIX (THREE_BYTE_0F3A, PREFIX_OPCODE) },
592d1631
L
2734 { Bad_Opcode },
2735 { Bad_Opcode },
2736 { Bad_Opcode },
2737 { Bad_Opcode },
2738 { Bad_Opcode },
252b5132 2739 /* 40 */
bf890a93
IT
2740 { "cmovoS", { Gv, Ev }, 0 },
2741 { "cmovnoS", { Gv, Ev }, 0 },
2742 { "cmovbS", { Gv, Ev }, 0 },
2743 { "cmovaeS", { Gv, Ev }, 0 },
2744 { "cmoveS", { Gv, Ev }, 0 },
2745 { "cmovneS", { Gv, Ev }, 0 },
2746 { "cmovbeS", { Gv, Ev }, 0 },
2747 { "cmovaS", { Gv, Ev }, 0 },
252b5132 2748 /* 48 */
bf890a93
IT
2749 { "cmovsS", { Gv, Ev }, 0 },
2750 { "cmovnsS", { Gv, Ev }, 0 },
2751 { "cmovpS", { Gv, Ev }, 0 },
2752 { "cmovnpS", { Gv, Ev }, 0 },
2753 { "cmovlS", { Gv, Ev }, 0 },
2754 { "cmovgeS", { Gv, Ev }, 0 },
2755 { "cmovleS", { Gv, Ev }, 0 },
2756 { "cmovgS", { Gv, Ev }, 0 },
252b5132 2757 /* 50 */
75c135a8 2758 { MOD_TABLE (MOD_0F51) },
1ceb70f8
L
2759 { PREFIX_TABLE (PREFIX_0F51) },
2760 { PREFIX_TABLE (PREFIX_0F52) },
2761 { PREFIX_TABLE (PREFIX_0F53) },
507bd325
L
2762 { "andpX", { XM, EXx }, PREFIX_OPCODE },
2763 { "andnpX", { XM, EXx }, PREFIX_OPCODE },
2764 { "orpX", { XM, EXx }, PREFIX_OPCODE },
2765 { "xorpX", { XM, EXx }, PREFIX_OPCODE },
252b5132 2766 /* 58 */
1ceb70f8
L
2767 { PREFIX_TABLE (PREFIX_0F58) },
2768 { PREFIX_TABLE (PREFIX_0F59) },
2769 { PREFIX_TABLE (PREFIX_0F5A) },
2770 { PREFIX_TABLE (PREFIX_0F5B) },
2771 { PREFIX_TABLE (PREFIX_0F5C) },
2772 { PREFIX_TABLE (PREFIX_0F5D) },
2773 { PREFIX_TABLE (PREFIX_0F5E) },
2774 { PREFIX_TABLE (PREFIX_0F5F) },
252b5132 2775 /* 60 */
1ceb70f8
L
2776 { PREFIX_TABLE (PREFIX_0F60) },
2777 { PREFIX_TABLE (PREFIX_0F61) },
2778 { PREFIX_TABLE (PREFIX_0F62) },
507bd325
L
2779 { "packsswb", { MX, EM }, PREFIX_OPCODE },
2780 { "pcmpgtb", { MX, EM }, PREFIX_OPCODE },
2781 { "pcmpgtw", { MX, EM }, PREFIX_OPCODE },
2782 { "pcmpgtd", { MX, EM }, PREFIX_OPCODE },
2783 { "packuswb", { MX, EM }, PREFIX_OPCODE },
252b5132 2784 /* 68 */
507bd325
L
2785 { "punpckhbw", { MX, EM }, PREFIX_OPCODE },
2786 { "punpckhwd", { MX, EM }, PREFIX_OPCODE },
2787 { "punpckhdq", { MX, EM }, PREFIX_OPCODE },
2788 { "packssdw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8
L
2789 { PREFIX_TABLE (PREFIX_0F6C) },
2790 { PREFIX_TABLE (PREFIX_0F6D) },
507bd325 2791 { "movK", { MX, Edq }, PREFIX_OPCODE },
1ceb70f8 2792 { PREFIX_TABLE (PREFIX_0F6F) },
252b5132 2793 /* 70 */
1ceb70f8
L
2794 { PREFIX_TABLE (PREFIX_0F70) },
2795 { REG_TABLE (REG_0F71) },
2796 { REG_TABLE (REG_0F72) },
2797 { REG_TABLE (REG_0F73) },
507bd325
L
2798 { "pcmpeqb", { MX, EM }, PREFIX_OPCODE },
2799 { "pcmpeqw", { MX, EM }, PREFIX_OPCODE },
2800 { "pcmpeqd", { MX, EM }, PREFIX_OPCODE },
2801 { "emms", { XX }, PREFIX_OPCODE },
252b5132 2802 /* 78 */
1ceb70f8
L
2803 { PREFIX_TABLE (PREFIX_0F78) },
2804 { PREFIX_TABLE (PREFIX_0F79) },
1f334aeb 2805 { Bad_Opcode },
592d1631 2806 { Bad_Opcode },
1ceb70f8
L
2807 { PREFIX_TABLE (PREFIX_0F7C) },
2808 { PREFIX_TABLE (PREFIX_0F7D) },
2809 { PREFIX_TABLE (PREFIX_0F7E) },
2810 { PREFIX_TABLE (PREFIX_0F7F) },
252b5132 2811 /* 80 */
bf890a93
IT
2812 { "joH", { Jv, BND, cond_jump_flag }, 0 },
2813 { "jnoH", { Jv, BND, cond_jump_flag }, 0 },
2814 { "jbH", { Jv, BND, cond_jump_flag }, 0 },
2815 { "jaeH", { Jv, BND, cond_jump_flag }, 0 },
2816 { "jeH", { Jv, BND, cond_jump_flag }, 0 },
2817 { "jneH", { Jv, BND, cond_jump_flag }, 0 },
2818 { "jbeH", { Jv, BND, cond_jump_flag }, 0 },
2819 { "jaH", { Jv, BND, cond_jump_flag }, 0 },
252b5132 2820 /* 88 */
bf890a93
IT
2821 { "jsH", { Jv, BND, cond_jump_flag }, 0 },
2822 { "jnsH", { Jv, BND, cond_jump_flag }, 0 },
2823 { "jpH", { Jv, BND, cond_jump_flag }, 0 },
2824 { "jnpH", { Jv, BND, cond_jump_flag }, 0 },
2825 { "jlH", { Jv, BND, cond_jump_flag }, 0 },
2826 { "jgeH", { Jv, BND, cond_jump_flag }, 0 },
2827 { "jleH", { Jv, BND, cond_jump_flag }, 0 },
2828 { "jgH", { Jv, BND, cond_jump_flag }, 0 },
252b5132 2829 /* 90 */
bf890a93
IT
2830 { "seto", { Eb }, 0 },
2831 { "setno", { Eb }, 0 },
2832 { "setb", { Eb }, 0 },
2833 { "setae", { Eb }, 0 },
2834 { "sete", { Eb }, 0 },
2835 { "setne", { Eb }, 0 },
2836 { "setbe", { Eb }, 0 },
2837 { "seta", { Eb }, 0 },
252b5132 2838 /* 98 */
bf890a93
IT
2839 { "sets", { Eb }, 0 },
2840 { "setns", { Eb }, 0 },
2841 { "setp", { Eb }, 0 },
2842 { "setnp", { Eb }, 0 },
2843 { "setl", { Eb }, 0 },
2844 { "setge", { Eb }, 0 },
2845 { "setle", { Eb }, 0 },
2846 { "setg", { Eb }, 0 },
252b5132 2847 /* a0 */
bf890a93
IT
2848 { "pushT", { fs }, 0 },
2849 { "popT", { fs }, 0 },
2850 { "cpuid", { XX }, 0 },
2851 { "btS", { Ev, Gv }, 0 },
2852 { "shldS", { Ev, Gv, Ib }, 0 },
2853 { "shldS", { Ev, Gv, CL }, 0 },
1ceb70f8
L
2854 { REG_TABLE (REG_0FA6) },
2855 { REG_TABLE (REG_0FA7) },
252b5132 2856 /* a8 */
bf890a93
IT
2857 { "pushT", { gs }, 0 },
2858 { "popT", { gs }, 0 },
2859 { "rsm", { XX }, 0 },
2860 { "btsS", { Evh1, Gv }, 0 },
2861 { "shrdS", { Ev, Gv, Ib }, 0 },
2862 { "shrdS", { Ev, Gv, CL }, 0 },
1ceb70f8 2863 { REG_TABLE (REG_0FAE) },
bf890a93 2864 { "imulS", { Gv, Ev }, 0 },
252b5132 2865 /* b0 */
bf890a93
IT
2866 { "cmpxchgB", { Ebh1, Gb }, 0 },
2867 { "cmpxchgS", { Evh1, Gv }, 0 },
1ceb70f8 2868 { MOD_TABLE (MOD_0FB2) },
bf890a93 2869 { "btrS", { Evh1, Gv }, 0 },
1ceb70f8
L
2870 { MOD_TABLE (MOD_0FB4) },
2871 { MOD_TABLE (MOD_0FB5) },
bf890a93
IT
2872 { "movz{bR|x}", { Gv, Eb }, 0 },
2873 { "movz{wR|x}", { Gv, Ew }, 0 }, /* yes, there really is movzww ! */
252b5132 2874 /* b8 */
1ceb70f8 2875 { PREFIX_TABLE (PREFIX_0FB8) },
66f1eba0 2876 { "ud1S", { Gv, Ev }, 0 },
1ceb70f8 2877 { REG_TABLE (REG_0FBA) },
bf890a93 2878 { "btcS", { Evh1, Gv }, 0 },
f12dc422 2879 { PREFIX_TABLE (PREFIX_0FBC) },
1ceb70f8 2880 { PREFIX_TABLE (PREFIX_0FBD) },
bf890a93
IT
2881 { "movs{bR|x}", { Gv, Eb }, 0 },
2882 { "movs{wR|x}", { Gv, Ew }, 0 }, /* yes, there really is movsww ! */
252b5132 2883 /* c0 */
bf890a93
IT
2884 { "xaddB", { Ebh1, Gb }, 0 },
2885 { "xaddS", { Evh1, Gv }, 0 },
1ceb70f8 2886 { PREFIX_TABLE (PREFIX_0FC2) },
a8484f96 2887 { MOD_TABLE (MOD_0FC3) },
507bd325
L
2888 { "pinsrw", { MX, Edqw, Ib }, PREFIX_OPCODE },
2889 { "pextrw", { Gdq, MS, Ib }, PREFIX_OPCODE },
2890 { "shufpX", { XM, EXx, Ib }, PREFIX_OPCODE },
1ceb70f8 2891 { REG_TABLE (REG_0FC7) },
252b5132 2892 /* c8 */
bf890a93
IT
2893 { "bswap", { RMeAX }, 0 },
2894 { "bswap", { RMeCX }, 0 },
2895 { "bswap", { RMeDX }, 0 },
2896 { "bswap", { RMeBX }, 0 },
2897 { "bswap", { RMeSP }, 0 },
2898 { "bswap", { RMeBP }, 0 },
2899 { "bswap", { RMeSI }, 0 },
2900 { "bswap", { RMeDI }, 0 },
252b5132 2901 /* d0 */
1ceb70f8 2902 { PREFIX_TABLE (PREFIX_0FD0) },
507bd325
L
2903 { "psrlw", { MX, EM }, PREFIX_OPCODE },
2904 { "psrld", { MX, EM }, PREFIX_OPCODE },
2905 { "psrlq", { MX, EM }, PREFIX_OPCODE },
2906 { "paddq", { MX, EM }, PREFIX_OPCODE },
2907 { "pmullw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8 2908 { PREFIX_TABLE (PREFIX_0FD6) },
75c135a8 2909 { MOD_TABLE (MOD_0FD7) },
252b5132 2910 /* d8 */
507bd325
L
2911 { "psubusb", { MX, EM }, PREFIX_OPCODE },
2912 { "psubusw", { MX, EM }, PREFIX_OPCODE },
2913 { "pminub", { MX, EM }, PREFIX_OPCODE },
2914 { "pand", { MX, EM }, PREFIX_OPCODE },
2915 { "paddusb", { MX, EM }, PREFIX_OPCODE },
2916 { "paddusw", { MX, EM }, PREFIX_OPCODE },
2917 { "pmaxub", { MX, EM }, PREFIX_OPCODE },
2918 { "pandn", { MX, EM }, PREFIX_OPCODE },
252b5132 2919 /* e0 */
507bd325
L
2920 { "pavgb", { MX, EM }, PREFIX_OPCODE },
2921 { "psraw", { MX, EM }, PREFIX_OPCODE },
2922 { "psrad", { MX, EM }, PREFIX_OPCODE },
2923 { "pavgw", { MX, EM }, PREFIX_OPCODE },
2924 { "pmulhuw", { MX, EM }, PREFIX_OPCODE },
2925 { "pmulhw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8
L
2926 { PREFIX_TABLE (PREFIX_0FE6) },
2927 { PREFIX_TABLE (PREFIX_0FE7) },
252b5132 2928 /* e8 */
507bd325
L
2929 { "psubsb", { MX, EM }, PREFIX_OPCODE },
2930 { "psubsw", { MX, EM }, PREFIX_OPCODE },
2931 { "pminsw", { MX, EM }, PREFIX_OPCODE },
2932 { "por", { MX, EM }, PREFIX_OPCODE },
2933 { "paddsb", { MX, EM }, PREFIX_OPCODE },
2934 { "paddsw", { MX, EM }, PREFIX_OPCODE },
2935 { "pmaxsw", { MX, EM }, PREFIX_OPCODE },
2936 { "pxor", { MX, EM }, PREFIX_OPCODE },
252b5132 2937 /* f0 */
1ceb70f8 2938 { PREFIX_TABLE (PREFIX_0FF0) },
507bd325
L
2939 { "psllw", { MX, EM }, PREFIX_OPCODE },
2940 { "pslld", { MX, EM }, PREFIX_OPCODE },
2941 { "psllq", { MX, EM }, PREFIX_OPCODE },
2942 { "pmuludq", { MX, EM }, PREFIX_OPCODE },
2943 { "pmaddwd", { MX, EM }, PREFIX_OPCODE },
2944 { "psadbw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8 2945 { PREFIX_TABLE (PREFIX_0FF7) },
252b5132 2946 /* f8 */
507bd325
L
2947 { "psubb", { MX, EM }, PREFIX_OPCODE },
2948 { "psubw", { MX, EM }, PREFIX_OPCODE },
2949 { "psubd", { MX, EM }, PREFIX_OPCODE },
2950 { "psubq", { MX, EM }, PREFIX_OPCODE },
2951 { "paddb", { MX, EM }, PREFIX_OPCODE },
2952 { "paddw", { MX, EM }, PREFIX_OPCODE },
2953 { "paddd", { MX, EM }, PREFIX_OPCODE },
66f1eba0 2954 { "ud0S", { Gv, Ev }, 0 },
252b5132
RH
2955};
2956
2957static const unsigned char onebyte_has_modrm[256] = {
c608c12e
AM
2958 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2959 /* ------------------------------- */
2960 /* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 00 */
2961 /* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 10 */
2962 /* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 20 */
2963 /* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 30 */
2964 /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40 */
2965 /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50 */
2966 /* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, /* 60 */
2967 /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70 */
2968 /* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 80 */
2969 /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 90 */
2970 /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* a0 */
2971 /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* b0 */
2972 /* c0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* c0 */
2973 /* d0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* d0 */
2974 /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* e0 */
2975 /* f0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1 /* f0 */
2976 /* ------------------------------- */
2977 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
252b5132
RH
2978};
2979
2980static const unsigned char twobyte_has_modrm[256] = {
c608c12e
AM
2981 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2982 /* ------------------------------- */
252b5132 2983 /* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */
b5b1fc4f 2984 /* 10 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1f */
85f10a01 2985 /* 20 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 2f */
331d2d0d 2986 /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
252b5132 2987 /* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */
4bba6815
AM
2988 /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */
2989 /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */
85f10a01 2990 /* 70 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 7f */
252b5132
RH
2991 /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
2992 /* 90 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9f */
30d1c836 2993 /* a0 */ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1, /* af */
66f1eba0 2994 /* b0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* bf */
252b5132 2995 /* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */
ca164297 2996 /* d0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
4bba6815 2997 /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
66f1eba0 2998 /* f0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 /* ff */
c608c12e
AM
2999 /* ------------------------------- */
3000 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
3001};
3002
252b5132
RH
3003static char obuf[100];
3004static char *obufp;
ea397f5b 3005static char *mnemonicendp;
252b5132
RH
3006static char scratchbuf[100];
3007static unsigned char *start_codep;
3008static unsigned char *insn_codep;
3009static unsigned char *codep;
285ca992 3010static unsigned char *end_codep;
f16cd0d5
L
3011static int last_lock_prefix;
3012static int last_repz_prefix;
3013static int last_repnz_prefix;
3014static int last_data_prefix;
3015static int last_addr_prefix;
3016static int last_rex_prefix;
3017static int last_seg_prefix;
d9949a36 3018static int fwait_prefix;
285ca992
L
3019/* The active segment register prefix. */
3020static int active_seg_prefix;
f16cd0d5
L
3021#define MAX_CODE_LENGTH 15
3022/* We can up to 14 prefixes since the maximum instruction length is
3023 15bytes. */
3024static int all_prefixes[MAX_CODE_LENGTH - 1];
252b5132 3025static disassemble_info *the_info;
7967e09e
L
3026static struct
3027 {
3028 int mod;
7967e09e 3029 int reg;
484c222e 3030 int rm;
7967e09e
L
3031 }
3032modrm;
4bba6815 3033static unsigned char need_modrm;
dfc8cf43
L
3034static struct
3035 {
3036 int scale;
3037 int index;
3038 int base;
3039 }
3040sib;
c0f3af97
L
3041static struct
3042 {
3043 int register_specifier;
3044 int length;
3045 int prefix;
3046 int w;
43234a1e
L
3047 int evex;
3048 int r;
3049 int v;
3050 int mask_register_specifier;
3051 int zeroing;
3052 int ll;
3053 int b;
c0f3af97
L
3054 }
3055vex;
3056static unsigned char need_vex;
3057static unsigned char need_vex_reg;
dae39acc 3058static unsigned char vex_w_done;
252b5132 3059
ea397f5b
L
3060struct op
3061 {
3062 const char *name;
3063 unsigned int len;
3064 };
3065
4bba6815
AM
3066/* If we are accessing mod/rm/reg without need_modrm set, then the
3067 values are stale. Hitting this abort likely indicates that you
3068 need to update onebyte_has_modrm or twobyte_has_modrm. */
3069#define MODRM_CHECK if (!need_modrm) abort ()
3070
d708bcba
AM
3071static const char **names64;
3072static const char **names32;
3073static const char **names16;
3074static const char **names8;
3075static const char **names8rex;
3076static const char **names_seg;
db51cc60
L
3077static const char *index64;
3078static const char *index32;
d708bcba 3079static const char **index16;
7e8b059b 3080static const char **names_bnd;
d708bcba
AM
3081
3082static const char *intel_names64[] = {
3083 "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
3084 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
3085};
3086static const char *intel_names32[] = {
3087 "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
3088 "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"
3089};
3090static const char *intel_names16[] = {
3091 "ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
3092 "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
3093};
3094static const char *intel_names8[] = {
3095 "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh",
3096};
3097static const char *intel_names8rex[] = {
3098 "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
3099 "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"
3100};
3101static const char *intel_names_seg[] = {
3102 "es", "cs", "ss", "ds", "fs", "gs", "?", "?",
3103};
db51cc60
L
3104static const char *intel_index64 = "riz";
3105static const char *intel_index32 = "eiz";
d708bcba
AM
3106static const char *intel_index16[] = {
3107 "bx+si", "bx+di", "bp+si", "bp+di", "si", "di", "bp", "bx"
3108};
3109
3110static const char *att_names64[] = {
3111 "%rax", "%rcx", "%rdx", "%rbx", "%rsp", "%rbp", "%rsi", "%rdi",
52b15da3
JH
3112 "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
3113};
d708bcba
AM
3114static const char *att_names32[] = {
3115 "%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi",
52b15da3 3116 "%r8d", "%r9d", "%r10d", "%r11d", "%r12d", "%r13d", "%r14d", "%r15d"
252b5132 3117};
d708bcba
AM
3118static const char *att_names16[] = {
3119 "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di",
52b15da3 3120 "%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w"
252b5132 3121};
d708bcba
AM
3122static const char *att_names8[] = {
3123 "%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh",
252b5132 3124};
d708bcba
AM
3125static const char *att_names8rex[] = {
3126 "%al", "%cl", "%dl", "%bl", "%spl", "%bpl", "%sil", "%dil",
52b15da3
JH
3127 "%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b"
3128};
d708bcba
AM
3129static const char *att_names_seg[] = {
3130 "%es", "%cs", "%ss", "%ds", "%fs", "%gs", "%?", "%?",
252b5132 3131};
db51cc60
L
3132static const char *att_index64 = "%riz";
3133static const char *att_index32 = "%eiz";
d708bcba
AM
3134static const char *att_index16[] = {
3135 "%bx,%si", "%bx,%di", "%bp,%si", "%bp,%di", "%si", "%di", "%bp", "%bx"
252b5132
RH
3136};
3137
b9733481
L
3138static const char **names_mm;
3139static const char *intel_names_mm[] = {
3140 "mm0", "mm1", "mm2", "mm3",
3141 "mm4", "mm5", "mm6", "mm7"
3142};
3143static const char *att_names_mm[] = {
3144 "%mm0", "%mm1", "%mm2", "%mm3",
3145 "%mm4", "%mm5", "%mm6", "%mm7"
3146};
3147
7e8b059b
L
3148static const char *intel_names_bnd[] = {
3149 "bnd0", "bnd1", "bnd2", "bnd3"
3150};
3151
3152static const char *att_names_bnd[] = {
3153 "%bnd0", "%bnd1", "%bnd2", "%bnd3"
3154};
3155
b9733481
L
3156static const char **names_xmm;
3157static const char *intel_names_xmm[] = {
3158 "xmm0", "xmm1", "xmm2", "xmm3",
3159 "xmm4", "xmm5", "xmm6", "xmm7",
3160 "xmm8", "xmm9", "xmm10", "xmm11",
43234a1e
L
3161 "xmm12", "xmm13", "xmm14", "xmm15",
3162 "xmm16", "xmm17", "xmm18", "xmm19",
3163 "xmm20", "xmm21", "xmm22", "xmm23",
3164 "xmm24", "xmm25", "xmm26", "xmm27",
3165 "xmm28", "xmm29", "xmm30", "xmm31"
b9733481
L
3166};
3167static const char *att_names_xmm[] = {
3168 "%xmm0", "%xmm1", "%xmm2", "%xmm3",
3169 "%xmm4", "%xmm5", "%xmm6", "%xmm7",
3170 "%xmm8", "%xmm9", "%xmm10", "%xmm11",
43234a1e
L
3171 "%xmm12", "%xmm13", "%xmm14", "%xmm15",
3172 "%xmm16", "%xmm17", "%xmm18", "%xmm19",
3173 "%xmm20", "%xmm21", "%xmm22", "%xmm23",
3174 "%xmm24", "%xmm25", "%xmm26", "%xmm27",
3175 "%xmm28", "%xmm29", "%xmm30", "%xmm31"
b9733481
L
3176};
3177
3178static const char **names_ymm;
3179static const char *intel_names_ymm[] = {
3180 "ymm0", "ymm1", "ymm2", "ymm3",
3181 "ymm4", "ymm5", "ymm6", "ymm7",
3182 "ymm8", "ymm9", "ymm10", "ymm11",
43234a1e
L
3183 "ymm12", "ymm13", "ymm14", "ymm15",
3184 "ymm16", "ymm17", "ymm18", "ymm19",
3185 "ymm20", "ymm21", "ymm22", "ymm23",
3186 "ymm24", "ymm25", "ymm26", "ymm27",
3187 "ymm28", "ymm29", "ymm30", "ymm31"
b9733481
L
3188};
3189static const char *att_names_ymm[] = {
3190 "%ymm0", "%ymm1", "%ymm2", "%ymm3",
3191 "%ymm4", "%ymm5", "%ymm6", "%ymm7",
3192 "%ymm8", "%ymm9", "%ymm10", "%ymm11",
43234a1e
L
3193 "%ymm12", "%ymm13", "%ymm14", "%ymm15",
3194 "%ymm16", "%ymm17", "%ymm18", "%ymm19",
3195 "%ymm20", "%ymm21", "%ymm22", "%ymm23",
3196 "%ymm24", "%ymm25", "%ymm26", "%ymm27",
3197 "%ymm28", "%ymm29", "%ymm30", "%ymm31"
3198};
3199
3200static const char **names_zmm;
3201static const char *intel_names_zmm[] = {
3202 "zmm0", "zmm1", "zmm2", "zmm3",
3203 "zmm4", "zmm5", "zmm6", "zmm7",
3204 "zmm8", "zmm9", "zmm10", "zmm11",
3205 "zmm12", "zmm13", "zmm14", "zmm15",
3206 "zmm16", "zmm17", "zmm18", "zmm19",
3207 "zmm20", "zmm21", "zmm22", "zmm23",
3208 "zmm24", "zmm25", "zmm26", "zmm27",
3209 "zmm28", "zmm29", "zmm30", "zmm31"
3210};
3211static const char *att_names_zmm[] = {
3212 "%zmm0", "%zmm1", "%zmm2", "%zmm3",
3213 "%zmm4", "%zmm5", "%zmm6", "%zmm7",
3214 "%zmm8", "%zmm9", "%zmm10", "%zmm11",
3215 "%zmm12", "%zmm13", "%zmm14", "%zmm15",
3216 "%zmm16", "%zmm17", "%zmm18", "%zmm19",
3217 "%zmm20", "%zmm21", "%zmm22", "%zmm23",
3218 "%zmm24", "%zmm25", "%zmm26", "%zmm27",
3219 "%zmm28", "%zmm29", "%zmm30", "%zmm31"
3220};
3221
3222static const char **names_mask;
3223static const char *intel_names_mask[] = {
3224 "k0", "k1", "k2", "k3", "k4", "k5", "k6", "k7"
3225};
3226static const char *att_names_mask[] = {
3227 "%k0", "%k1", "%k2", "%k3", "%k4", "%k5", "%k6", "%k7"
3228};
3229
3230static const char *names_rounding[] =
3231{
3232 "{rn-sae}",
3233 "{rd-sae}",
3234 "{ru-sae}",
3235 "{rz-sae}"
b9733481
L
3236};
3237
1ceb70f8
L
3238static const struct dis386 reg_table[][8] = {
3239 /* REG_80 */
252b5132 3240 {
bf890a93
IT
3241 { "addA", { Ebh1, Ib }, 0 },
3242 { "orA", { Ebh1, Ib }, 0 },
3243 { "adcA", { Ebh1, Ib }, 0 },
3244 { "sbbA", { Ebh1, Ib }, 0 },
3245 { "andA", { Ebh1, Ib }, 0 },
3246 { "subA", { Ebh1, Ib }, 0 },
3247 { "xorA", { Ebh1, Ib }, 0 },
3248 { "cmpA", { Eb, Ib }, 0 },
252b5132 3249 },
1ceb70f8 3250 /* REG_81 */
252b5132 3251 {
bf890a93
IT
3252 { "addQ", { Evh1, Iv }, 0 },
3253 { "orQ", { Evh1, Iv }, 0 },
3254 { "adcQ", { Evh1, Iv }, 0 },
3255 { "sbbQ", { Evh1, Iv }, 0 },
3256 { "andQ", { Evh1, Iv }, 0 },
3257 { "subQ", { Evh1, Iv }, 0 },
3258 { "xorQ", { Evh1, Iv }, 0 },
3259 { "cmpQ", { Ev, Iv }, 0 },
252b5132 3260 },
7148c369 3261 /* REG_83 */
252b5132 3262 {
bf890a93
IT
3263 { "addQ", { Evh1, sIb }, 0 },
3264 { "orQ", { Evh1, sIb }, 0 },
3265 { "adcQ", { Evh1, sIb }, 0 },
3266 { "sbbQ", { Evh1, sIb }, 0 },
3267 { "andQ", { Evh1, sIb }, 0 },
3268 { "subQ", { Evh1, sIb }, 0 },
3269 { "xorQ", { Evh1, sIb }, 0 },
3270 { "cmpQ", { Ev, sIb }, 0 },
252b5132 3271 },
1ceb70f8 3272 /* REG_8F */
4e7d34a6 3273 {
bf890a93 3274 { "popU", { stackEv }, 0 },
c48244a5 3275 { XOP_8F_TABLE (XOP_09) },
592d1631
L
3276 { Bad_Opcode },
3277 { Bad_Opcode },
3278 { Bad_Opcode },
f88c9eb0 3279 { XOP_8F_TABLE (XOP_09) },
4e7d34a6 3280 },
1ceb70f8 3281 /* REG_C0 */
252b5132 3282 {
bf890a93
IT
3283 { "rolA", { Eb, Ib }, 0 },
3284 { "rorA", { Eb, Ib }, 0 },
3285 { "rclA", { Eb, Ib }, 0 },
3286 { "rcrA", { Eb, Ib }, 0 },
3287 { "shlA", { Eb, Ib }, 0 },
3288 { "shrA", { Eb, Ib }, 0 },
e4bdd679 3289 { "shlA", { Eb, Ib }, 0 },
bf890a93 3290 { "sarA", { Eb, Ib }, 0 },
252b5132 3291 },
1ceb70f8 3292 /* REG_C1 */
252b5132 3293 {
bf890a93
IT
3294 { "rolQ", { Ev, Ib }, 0 },
3295 { "rorQ", { Ev, Ib }, 0 },
3296 { "rclQ", { Ev, Ib }, 0 },
3297 { "rcrQ", { Ev, Ib }, 0 },
3298 { "shlQ", { Ev, Ib }, 0 },
3299 { "shrQ", { Ev, Ib }, 0 },
e4bdd679 3300 { "shlQ", { Ev, Ib }, 0 },
bf890a93 3301 { "sarQ", { Ev, Ib }, 0 },
252b5132 3302 },
1ceb70f8 3303 /* REG_C6 */
4e7d34a6 3304 {
bf890a93 3305 { "movA", { Ebh3, Ib }, 0 },
42164a71
L
3306 { Bad_Opcode },
3307 { Bad_Opcode },
3308 { Bad_Opcode },
3309 { Bad_Opcode },
3310 { Bad_Opcode },
3311 { Bad_Opcode },
3312 { MOD_TABLE (MOD_C6_REG_7) },
4e7d34a6 3313 },
1ceb70f8 3314 /* REG_C7 */
4e7d34a6 3315 {
bf890a93 3316 { "movQ", { Evh3, Iv }, 0 },
42164a71
L
3317 { Bad_Opcode },
3318 { Bad_Opcode },
3319 { Bad_Opcode },
3320 { Bad_Opcode },
3321 { Bad_Opcode },
3322 { Bad_Opcode },
3323 { MOD_TABLE (MOD_C7_REG_7) },
4e7d34a6 3324 },
1ceb70f8 3325 /* REG_D0 */
252b5132 3326 {
bf890a93
IT
3327 { "rolA", { Eb, I1 }, 0 },
3328 { "rorA", { Eb, I1 }, 0 },
3329 { "rclA", { Eb, I1 }, 0 },
3330 { "rcrA", { Eb, I1 }, 0 },
3331 { "shlA", { Eb, I1 }, 0 },
3332 { "shrA", { Eb, I1 }, 0 },
e4bdd679 3333 { "shlA", { Eb, I1 }, 0 },
bf890a93 3334 { "sarA", { Eb, I1 }, 0 },
252b5132 3335 },
1ceb70f8 3336 /* REG_D1 */
252b5132 3337 {
bf890a93
IT
3338 { "rolQ", { Ev, I1 }, 0 },
3339 { "rorQ", { Ev, I1 }, 0 },
3340 { "rclQ", { Ev, I1 }, 0 },
3341 { "rcrQ", { Ev, I1 }, 0 },
3342 { "shlQ", { Ev, I1 }, 0 },
3343 { "shrQ", { Ev, I1 }, 0 },
e4bdd679 3344 { "shlQ", { Ev, I1 }, 0 },
bf890a93 3345 { "sarQ", { Ev, I1 }, 0 },
252b5132 3346 },
1ceb70f8 3347 /* REG_D2 */
252b5132 3348 {
bf890a93
IT
3349 { "rolA", { Eb, CL }, 0 },
3350 { "rorA", { Eb, CL }, 0 },
3351 { "rclA", { Eb, CL }, 0 },
3352 { "rcrA", { Eb, CL }, 0 },
3353 { "shlA", { Eb, CL }, 0 },
3354 { "shrA", { Eb, CL }, 0 },
e4bdd679 3355 { "shlA", { Eb, CL }, 0 },
bf890a93 3356 { "sarA", { Eb, CL }, 0 },
252b5132 3357 },
1ceb70f8 3358 /* REG_D3 */
252b5132 3359 {
bf890a93
IT
3360 { "rolQ", { Ev, CL }, 0 },
3361 { "rorQ", { Ev, CL }, 0 },
3362 { "rclQ", { Ev, CL }, 0 },
3363 { "rcrQ", { Ev, CL }, 0 },
3364 { "shlQ", { Ev, CL }, 0 },
3365 { "shrQ", { Ev, CL }, 0 },
e4bdd679 3366 { "shlQ", { Ev, CL }, 0 },
bf890a93 3367 { "sarQ", { Ev, CL }, 0 },
252b5132 3368 },
1ceb70f8 3369 /* REG_F6 */
252b5132 3370 {
bf890a93 3371 { "testA", { Eb, Ib }, 0 },
7db2c588 3372 { "testA", { Eb, Ib }, 0 },
bf890a93
IT
3373 { "notA", { Ebh1 }, 0 },
3374 { "negA", { Ebh1 }, 0 },
3375 { "mulA", { Eb }, 0 }, /* Don't print the implicit %al register, */
3376 { "imulA", { Eb }, 0 }, /* to distinguish these opcodes from other */
3377 { "divA", { Eb }, 0 }, /* mul/imul opcodes. Do the same for div */
3378 { "idivA", { Eb }, 0 }, /* and idiv for consistency. */
252b5132 3379 },
1ceb70f8 3380 /* REG_F7 */
252b5132 3381 {
bf890a93 3382 { "testQ", { Ev, Iv }, 0 },
7db2c588 3383 { "testQ", { Ev, Iv }, 0 },
bf890a93
IT
3384 { "notQ", { Evh1 }, 0 },
3385 { "negQ", { Evh1 }, 0 },
3386 { "mulQ", { Ev }, 0 }, /* Don't print the implicit register. */
3387 { "imulQ", { Ev }, 0 },
3388 { "divQ", { Ev }, 0 },
3389 { "idivQ", { Ev }, 0 },
252b5132 3390 },
1ceb70f8 3391 /* REG_FE */
252b5132 3392 {
bf890a93
IT
3393 { "incA", { Ebh1 }, 0 },
3394 { "decA", { Ebh1 }, 0 },
252b5132 3395 },
1ceb70f8 3396 /* REG_FF */
252b5132 3397 {
bf890a93
IT
3398 { "incQ", { Evh1 }, 0 },
3399 { "decQ", { Evh1 }, 0 },
9fef80d6 3400 { "call{&|}", { NOTRACK, indirEv, BND }, 0 },
4a357820 3401 { MOD_TABLE (MOD_FF_REG_3) },
9fef80d6 3402 { "jmp{&|}", { NOTRACK, indirEv, BND }, 0 },
4a357820 3403 { MOD_TABLE (MOD_FF_REG_5) },
bf890a93 3404 { "pushU", { stackEv }, 0 },
592d1631 3405 { Bad_Opcode },
252b5132 3406 },
1ceb70f8 3407 /* REG_0F00 */
252b5132 3408 {
bf890a93
IT
3409 { "sldtD", { Sv }, 0 },
3410 { "strD", { Sv }, 0 },
3411 { "lldt", { Ew }, 0 },
3412 { "ltr", { Ew }, 0 },
3413 { "verr", { Ew }, 0 },
3414 { "verw", { Ew }, 0 },
592d1631
L
3415 { Bad_Opcode },
3416 { Bad_Opcode },
252b5132 3417 },
1ceb70f8 3418 /* REG_0F01 */
252b5132 3419 {
1ceb70f8
L
3420 { MOD_TABLE (MOD_0F01_REG_0) },
3421 { MOD_TABLE (MOD_0F01_REG_1) },
3422 { MOD_TABLE (MOD_0F01_REG_2) },
3423 { MOD_TABLE (MOD_0F01_REG_3) },
bf890a93 3424 { "smswD", { Sv }, 0 },
8eab4136 3425 { MOD_TABLE (MOD_0F01_REG_5) },
bf890a93 3426 { "lmsw", { Ew }, 0 },
1ceb70f8 3427 { MOD_TABLE (MOD_0F01_REG_7) },
252b5132 3428 },
b5b1fc4f 3429 /* REG_0F0D */
252b5132 3430 {
bf890a93
IT
3431 { "prefetch", { Mb }, 0 },
3432 { "prefetchw", { Mb }, 0 },
3433 { "prefetchwt1", { Mb }, 0 },
3434 { "prefetch", { Mb }, 0 },
3435 { "prefetch", { Mb }, 0 },
3436 { "prefetch", { Mb }, 0 },
3437 { "prefetch", { Mb }, 0 },
3438 { "prefetch", { Mb }, 0 },
252b5132 3439 },
1ceb70f8 3440 /* REG_0F18 */
252b5132 3441 {
1ceb70f8
L
3442 { MOD_TABLE (MOD_0F18_REG_0) },
3443 { MOD_TABLE (MOD_0F18_REG_1) },
3444 { MOD_TABLE (MOD_0F18_REG_2) },
3445 { MOD_TABLE (MOD_0F18_REG_3) },
d7189fa5
RM
3446 { MOD_TABLE (MOD_0F18_REG_4) },
3447 { MOD_TABLE (MOD_0F18_REG_5) },
3448 { MOD_TABLE (MOD_0F18_REG_6) },
3449 { MOD_TABLE (MOD_0F18_REG_7) },
252b5132 3450 },
c48935d7
IT
3451 /* REG_0F1C_MOD_0 */
3452 {
3453 { "cldemote", { Mb }, 0 },
3454 { "nopQ", { Ev }, 0 },
3455 { "nopQ", { Ev }, 0 },
3456 { "nopQ", { Ev }, 0 },
3457 { "nopQ", { Ev }, 0 },
3458 { "nopQ", { Ev }, 0 },
3459 { "nopQ", { Ev }, 0 },
3460 { "nopQ", { Ev }, 0 },
3461 },
603555e5
L
3462 /* REG_0F1E_MOD_3 */
3463 {
3464 { "nopQ", { Ev }, 0 },
3465 { "rdsspK", { Rdq }, PREFIX_OPCODE },
3466 { "nopQ", { Ev }, 0 },
3467 { "nopQ", { Ev }, 0 },
3468 { "nopQ", { Ev }, 0 },
3469 { "nopQ", { Ev }, 0 },
3470 { "nopQ", { Ev }, 0 },
3471 { RM_TABLE (RM_0F1E_MOD_3_REG_7) },
3472 },
1ceb70f8 3473 /* REG_0F71 */
a6bd098c 3474 {
592d1631
L
3475 { Bad_Opcode },
3476 { Bad_Opcode },
1ceb70f8 3477 { MOD_TABLE (MOD_0F71_REG_2) },
592d1631 3478 { Bad_Opcode },
1ceb70f8 3479 { MOD_TABLE (MOD_0F71_REG_4) },
592d1631 3480 { Bad_Opcode },
1ceb70f8 3481 { MOD_TABLE (MOD_0F71_REG_6) },
a6bd098c 3482 },
1ceb70f8 3483 /* REG_0F72 */
a6bd098c 3484 {
592d1631
L
3485 { Bad_Opcode },
3486 { Bad_Opcode },
1ceb70f8 3487 { MOD_TABLE (MOD_0F72_REG_2) },
592d1631 3488 { Bad_Opcode },
1ceb70f8 3489 { MOD_TABLE (MOD_0F72_REG_4) },
592d1631 3490 { Bad_Opcode },
1ceb70f8 3491 { MOD_TABLE (MOD_0F72_REG_6) },
a6bd098c 3492 },
1ceb70f8 3493 /* REG_0F73 */
252b5132 3494 {
592d1631
L
3495 { Bad_Opcode },
3496 { Bad_Opcode },
1ceb70f8
L
3497 { MOD_TABLE (MOD_0F73_REG_2) },
3498 { MOD_TABLE (MOD_0F73_REG_3) },
592d1631
L
3499 { Bad_Opcode },
3500 { Bad_Opcode },
1ceb70f8
L
3501 { MOD_TABLE (MOD_0F73_REG_6) },
3502 { MOD_TABLE (MOD_0F73_REG_7) },
252b5132 3503 },
1ceb70f8 3504 /* REG_0FA6 */
252b5132 3505 {
bf890a93
IT
3506 { "montmul", { { OP_0f07, 0 } }, 0 },
3507 { "xsha1", { { OP_0f07, 0 } }, 0 },
3508 { "xsha256", { { OP_0f07, 0 } }, 0 },
4e7d34a6 3509 },
1ceb70f8 3510 /* REG_0FA7 */
4e7d34a6 3511 {
bf890a93
IT
3512 { "xstore-rng", { { OP_0f07, 0 } }, 0 },
3513 { "xcrypt-ecb", { { OP_0f07, 0 } }, 0 },
3514 { "xcrypt-cbc", { { OP_0f07, 0 } }, 0 },
3515 { "xcrypt-ctr", { { OP_0f07, 0 } }, 0 },
3516 { "xcrypt-cfb", { { OP_0f07, 0 } }, 0 },
3517 { "xcrypt-ofb", { { OP_0f07, 0 } }, 0 },
4e7d34a6 3518 },
1ceb70f8 3519 /* REG_0FAE */
4e7d34a6 3520 {
1ceb70f8
L
3521 { MOD_TABLE (MOD_0FAE_REG_0) },
3522 { MOD_TABLE (MOD_0FAE_REG_1) },
3523 { MOD_TABLE (MOD_0FAE_REG_2) },
3524 { MOD_TABLE (MOD_0FAE_REG_3) },
475a2301 3525 { MOD_TABLE (MOD_0FAE_REG_4) },
1ceb70f8
L
3526 { MOD_TABLE (MOD_0FAE_REG_5) },
3527 { MOD_TABLE (MOD_0FAE_REG_6) },
3528 { MOD_TABLE (MOD_0FAE_REG_7) },
252b5132 3529 },
1ceb70f8 3530 /* REG_0FBA */
252b5132 3531 {
592d1631
L
3532 { Bad_Opcode },
3533 { Bad_Opcode },
3534 { Bad_Opcode },
3535 { Bad_Opcode },
bf890a93
IT
3536 { "btQ", { Ev, Ib }, 0 },
3537 { "btsQ", { Evh1, Ib }, 0 },
3538 { "btrQ", { Evh1, Ib }, 0 },
3539 { "btcQ", { Evh1, Ib }, 0 },
c608c12e 3540 },
1ceb70f8 3541 /* REG_0FC7 */
c608c12e 3542 {
592d1631 3543 { Bad_Opcode },
bf890a93 3544 { "cmpxchg8b", { { CMPXCHG8B_Fixup, q_mode } }, 0 },
592d1631 3545 { Bad_Opcode },
963f3586
IT
3546 { MOD_TABLE (MOD_0FC7_REG_3) },
3547 { MOD_TABLE (MOD_0FC7_REG_4) },
3548 { MOD_TABLE (MOD_0FC7_REG_5) },
1ceb70f8
L
3549 { MOD_TABLE (MOD_0FC7_REG_6) },
3550 { MOD_TABLE (MOD_0FC7_REG_7) },
252b5132 3551 },
592a252b 3552 /* REG_VEX_0F71 */
c0f3af97 3553 {
592d1631
L
3554 { Bad_Opcode },
3555 { Bad_Opcode },
592a252b 3556 { MOD_TABLE (MOD_VEX_0F71_REG_2) },
592d1631 3557 { Bad_Opcode },
592a252b 3558 { MOD_TABLE (MOD_VEX_0F71_REG_4) },
592d1631 3559 { Bad_Opcode },
592a252b 3560 { MOD_TABLE (MOD_VEX_0F71_REG_6) },
c0f3af97 3561 },
592a252b 3562 /* REG_VEX_0F72 */
c0f3af97 3563 {
592d1631
L
3564 { Bad_Opcode },
3565 { Bad_Opcode },
592a252b 3566 { MOD_TABLE (MOD_VEX_0F72_REG_2) },
592d1631 3567 { Bad_Opcode },
592a252b 3568 { MOD_TABLE (MOD_VEX_0F72_REG_4) },
592d1631 3569 { Bad_Opcode },
592a252b 3570 { MOD_TABLE (MOD_VEX_0F72_REG_6) },
c0f3af97 3571 },
592a252b 3572 /* REG_VEX_0F73 */
c0f3af97 3573 {
592d1631
L
3574 { Bad_Opcode },
3575 { Bad_Opcode },
592a252b
L
3576 { MOD_TABLE (MOD_VEX_0F73_REG_2) },
3577 { MOD_TABLE (MOD_VEX_0F73_REG_3) },
592d1631
L
3578 { Bad_Opcode },
3579 { Bad_Opcode },
592a252b
L
3580 { MOD_TABLE (MOD_VEX_0F73_REG_6) },
3581 { MOD_TABLE (MOD_VEX_0F73_REG_7) },
c0f3af97 3582 },
592a252b 3583 /* REG_VEX_0FAE */
c0f3af97 3584 {
592d1631
L
3585 { Bad_Opcode },
3586 { Bad_Opcode },
592a252b
L
3587 { MOD_TABLE (MOD_VEX_0FAE_REG_2) },
3588 { MOD_TABLE (MOD_VEX_0FAE_REG_3) },
c0f3af97 3589 },
f12dc422
L
3590 /* REG_VEX_0F38F3 */
3591 {
3592 { Bad_Opcode },
3593 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_1) },
3594 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_2) },
3595 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_3) },
3596 },
f88c9eb0
SP
3597 /* REG_XOP_LWPCB */
3598 {
bf890a93
IT
3599 { "llwpcb", { { OP_LWPCB_E, 0 } }, 0 },
3600 { "slwpcb", { { OP_LWPCB_E, 0 } }, 0 },
f88c9eb0
SP
3601 },
3602 /* REG_XOP_LWP */
3603 {
bf890a93
IT
3604 { "lwpins", { { OP_LWP_E, 0 }, Ed, Iq }, 0 },
3605 { "lwpval", { { OP_LWP_E, 0 }, Ed, Iq }, 0 },
f88c9eb0 3606 },
2a2a0f38
QN
3607 /* REG_XOP_TBM_01 */
3608 {
3609 { Bad_Opcode },
bf890a93
IT
3610 { "blcfill", { { OP_LWP_E, 0 }, Ev }, 0 },
3611 { "blsfill", { { OP_LWP_E, 0 }, Ev }, 0 },
3612 { "blcs", { { OP_LWP_E, 0 }, Ev }, 0 },
3613 { "tzmsk", { { OP_LWP_E, 0 }, Ev }, 0 },
3614 { "blcic", { { OP_LWP_E, 0 }, Ev }, 0 },
3615 { "blsic", { { OP_LWP_E, 0 }, Ev }, 0 },
3616 { "t1mskc", { { OP_LWP_E, 0 }, Ev }, 0 },
2a2a0f38
QN
3617 },
3618 /* REG_XOP_TBM_02 */
3619 {
3620 { Bad_Opcode },
bf890a93 3621 { "blcmsk", { { OP_LWP_E, 0 }, Ev }, 0 },
2a2a0f38
QN
3622 { Bad_Opcode },
3623 { Bad_Opcode },
3624 { Bad_Opcode },
3625 { Bad_Opcode },
bf890a93 3626 { "blci", { { OP_LWP_E, 0 }, Ev }, 0 },
2a2a0f38 3627 },
43234a1e
L
3628#define NEED_REG_TABLE
3629#include "i386-dis-evex.h"
3630#undef NEED_REG_TABLE
4e7d34a6
L
3631};
3632
1ceb70f8
L
3633static const struct dis386 prefix_table[][4] = {
3634 /* PREFIX_90 */
252b5132 3635 {
bf890a93
IT
3636 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } }, 0 },
3637 { "pause", { XX }, 0 },
3638 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } }, 0 },
507bd325 3639 { NULL, { { NULL, 0 } }, PREFIX_IGNORED }
0f10071e 3640 },
4e7d34a6 3641
603555e5
L
3642 /* PREFIX_MOD_0_0F01_REG_5 */
3643 {
3644 { Bad_Opcode },
3645 { "rstorssp", { Mq }, PREFIX_OPCODE },
3646 },
3647
2234eee6 3648 /* PREFIX_MOD_3_0F01_REG_5_RM_0 */
603555e5
L
3649 {
3650 { Bad_Opcode },
2234eee6 3651 { "setssbsy", { Skip_MODRM }, PREFIX_OPCODE },
603555e5
L
3652 },
3653
3654 /* PREFIX_MOD_3_0F01_REG_5_RM_2 */
3655 {
3656 { Bad_Opcode },
c2f76402 3657 { "saveprevssp", { Skip_MODRM }, PREFIX_OPCODE },
603555e5
L
3658 },
3659
3233d7d0
IT
3660 /* PREFIX_0F09 */
3661 {
3662 { "wbinvd", { XX }, 0 },
3663 { "wbnoinvd", { XX }, 0 },
3664 },
3665
1ceb70f8 3666 /* PREFIX_0F10 */
cc0ec051 3667 {
507bd325
L
3668 { "movups", { XM, EXx }, PREFIX_OPCODE },
3669 { "movss", { XM, EXd }, PREFIX_OPCODE },
3670 { "movupd", { XM, EXx }, PREFIX_OPCODE },
3671 { "movsd", { XM, EXq }, PREFIX_OPCODE },
30d1c836 3672 },
4e7d34a6 3673
1ceb70f8 3674 /* PREFIX_0F11 */
30d1c836 3675 {
507bd325
L
3676 { "movups", { EXxS, XM }, PREFIX_OPCODE },
3677 { "movss", { EXdS, XM }, PREFIX_OPCODE },
3678 { "movupd", { EXxS, XM }, PREFIX_OPCODE },
3679 { "movsd", { EXqS, XM }, PREFIX_OPCODE },
4e7d34a6 3680 },
252b5132 3681
1ceb70f8 3682 /* PREFIX_0F12 */
c608c12e 3683 {
1ceb70f8 3684 { MOD_TABLE (MOD_0F12_PREFIX_0) },
507bd325
L
3685 { "movsldup", { XM, EXx }, PREFIX_OPCODE },
3686 { "movlpd", { XM, EXq }, PREFIX_OPCODE },
3687 { "movddup", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3688 },
4e7d34a6 3689
1ceb70f8 3690 /* PREFIX_0F16 */
c608c12e 3691 {
1ceb70f8 3692 { MOD_TABLE (MOD_0F16_PREFIX_0) },
507bd325
L
3693 { "movshdup", { XM, EXx }, PREFIX_OPCODE },
3694 { "movhpd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3695 },
4e7d34a6 3696
7e8b059b
L
3697 /* PREFIX_0F1A */
3698 {
3699 { MOD_TABLE (MOD_0F1A_PREFIX_0) },
bf890a93
IT
3700 { "bndcl", { Gbnd, Ev_bnd }, 0 },
3701 { "bndmov", { Gbnd, Ebnd }, 0 },
3702 { "bndcu", { Gbnd, Ev_bnd }, 0 },
7e8b059b
L
3703 },
3704
3705 /* PREFIX_0F1B */
3706 {
3707 { MOD_TABLE (MOD_0F1B_PREFIX_0) },
3708 { MOD_TABLE (MOD_0F1B_PREFIX_1) },
9f79e886 3709 { "bndmov", { EbndS, Gbnd }, 0 },
bf890a93 3710 { "bndcn", { Gbnd, Ev_bnd }, 0 },
7e8b059b
L
3711 },
3712
c48935d7
IT
3713 /* PREFIX_0F1C */
3714 {
3715 { MOD_TABLE (MOD_0F1C_PREFIX_0) },
3716 { "nopQ", { Ev }, PREFIX_OPCODE },
3717 { "nopQ", { Ev }, PREFIX_OPCODE },
3718 { "nopQ", { Ev }, PREFIX_OPCODE },
3719 },
3720
603555e5
L
3721 /* PREFIX_0F1E */
3722 {
3723 { "nopQ", { Ev }, PREFIX_OPCODE },
3724 { MOD_TABLE (MOD_0F1E_PREFIX_1) },
3725 { "nopQ", { Ev }, PREFIX_OPCODE },
3726 { "nopQ", { Ev }, PREFIX_OPCODE },
3727 },
3728
1ceb70f8 3729 /* PREFIX_0F2A */
c608c12e 3730 {
507bd325
L
3731 { "cvtpi2ps", { XM, EMCq }, PREFIX_OPCODE },
3732 { "cvtsi2ss%LQ", { XM, Ev }, PREFIX_OPCODE },
3733 { "cvtpi2pd", { XM, EMCq }, PREFIX_OPCODE },
bf890a93 3734 { "cvtsi2sd%LQ", { XM, Ev }, 0 },
c608c12e 3735 },
4e7d34a6 3736
1ceb70f8 3737 /* PREFIX_0F2B */
c608c12e 3738 {
75c135a8
L
3739 { MOD_TABLE (MOD_0F2B_PREFIX_0) },
3740 { MOD_TABLE (MOD_0F2B_PREFIX_1) },
3741 { MOD_TABLE (MOD_0F2B_PREFIX_2) },
3742 { MOD_TABLE (MOD_0F2B_PREFIX_3) },
c608c12e 3743 },
4e7d34a6 3744
1ceb70f8 3745 /* PREFIX_0F2C */
c608c12e 3746 {
507bd325 3747 { "cvttps2pi", { MXC, EXq }, PREFIX_OPCODE },
9646c87b 3748 { "cvttss2si", { Gv, EXd }, PREFIX_OPCODE },
507bd325 3749 { "cvttpd2pi", { MXC, EXx }, PREFIX_OPCODE },
9646c87b 3750 { "cvttsd2si", { Gv, EXq }, PREFIX_OPCODE },
c608c12e 3751 },
4e7d34a6 3752
1ceb70f8 3753 /* PREFIX_0F2D */
c608c12e 3754 {
507bd325 3755 { "cvtps2pi", { MXC, EXq }, PREFIX_OPCODE },
9646c87b 3756 { "cvtss2si", { Gv, EXd }, PREFIX_OPCODE },
507bd325 3757 { "cvtpd2pi", { MXC, EXx }, PREFIX_OPCODE },
9646c87b 3758 { "cvtsd2si", { Gv, EXq }, PREFIX_OPCODE },
c608c12e 3759 },
4e7d34a6 3760
1ceb70f8 3761 /* PREFIX_0F2E */
c608c12e 3762 {
bf890a93 3763 { "ucomiss",{ XM, EXd }, 0 },
592d1631 3764 { Bad_Opcode },
bf890a93 3765 { "ucomisd",{ XM, EXq }, 0 },
c608c12e 3766 },
4e7d34a6 3767
1ceb70f8 3768 /* PREFIX_0F2F */
c608c12e 3769 {
bf890a93 3770 { "comiss", { XM, EXd }, 0 },
592d1631 3771 { Bad_Opcode },
bf890a93 3772 { "comisd", { XM, EXq }, 0 },
c608c12e 3773 },
4e7d34a6 3774
1ceb70f8 3775 /* PREFIX_0F51 */
c608c12e 3776 {
507bd325
L
3777 { "sqrtps", { XM, EXx }, PREFIX_OPCODE },
3778 { "sqrtss", { XM, EXd }, PREFIX_OPCODE },
3779 { "sqrtpd", { XM, EXx }, PREFIX_OPCODE },
3780 { "sqrtsd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3781 },
4e7d34a6 3782
1ceb70f8 3783 /* PREFIX_0F52 */
c608c12e 3784 {
507bd325
L
3785 { "rsqrtps",{ XM, EXx }, PREFIX_OPCODE },
3786 { "rsqrtss",{ XM, EXd }, PREFIX_OPCODE },
c608c12e 3787 },
4e7d34a6 3788
1ceb70f8 3789 /* PREFIX_0F53 */
c608c12e 3790 {
507bd325
L
3791 { "rcpps", { XM, EXx }, PREFIX_OPCODE },
3792 { "rcpss", { XM, EXd }, PREFIX_OPCODE },
c608c12e 3793 },
4e7d34a6 3794
1ceb70f8 3795 /* PREFIX_0F58 */
c608c12e 3796 {
507bd325
L
3797 { "addps", { XM, EXx }, PREFIX_OPCODE },
3798 { "addss", { XM, EXd }, PREFIX_OPCODE },
3799 { "addpd", { XM, EXx }, PREFIX_OPCODE },
3800 { "addsd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3801 },
4e7d34a6 3802
1ceb70f8 3803 /* PREFIX_0F59 */
c608c12e 3804 {
507bd325
L
3805 { "mulps", { XM, EXx }, PREFIX_OPCODE },
3806 { "mulss", { XM, EXd }, PREFIX_OPCODE },
3807 { "mulpd", { XM, EXx }, PREFIX_OPCODE },
3808 { "mulsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3809 },
4e7d34a6 3810
1ceb70f8 3811 /* PREFIX_0F5A */
041bd2e0 3812 {
507bd325
L
3813 { "cvtps2pd", { XM, EXq }, PREFIX_OPCODE },
3814 { "cvtss2sd", { XM, EXd }, PREFIX_OPCODE },
3815 { "cvtpd2ps", { XM, EXx }, PREFIX_OPCODE },
3816 { "cvtsd2ss", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3817 },
4e7d34a6 3818
1ceb70f8 3819 /* PREFIX_0F5B */
041bd2e0 3820 {
507bd325
L
3821 { "cvtdq2ps", { XM, EXx }, PREFIX_OPCODE },
3822 { "cvttps2dq", { XM, EXx }, PREFIX_OPCODE },
3823 { "cvtps2dq", { XM, EXx }, PREFIX_OPCODE },
041bd2e0 3824 },
4e7d34a6 3825
1ceb70f8 3826 /* PREFIX_0F5C */
041bd2e0 3827 {
507bd325
L
3828 { "subps", { XM, EXx }, PREFIX_OPCODE },
3829 { "subss", { XM, EXd }, PREFIX_OPCODE },
3830 { "subpd", { XM, EXx }, PREFIX_OPCODE },
3831 { "subsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3832 },
4e7d34a6 3833
1ceb70f8 3834 /* PREFIX_0F5D */
041bd2e0 3835 {
507bd325
L
3836 { "minps", { XM, EXx }, PREFIX_OPCODE },
3837 { "minss", { XM, EXd }, PREFIX_OPCODE },
3838 { "minpd", { XM, EXx }, PREFIX_OPCODE },
3839 { "minsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3840 },
4e7d34a6 3841
1ceb70f8 3842 /* PREFIX_0F5E */
041bd2e0 3843 {
507bd325
L
3844 { "divps", { XM, EXx }, PREFIX_OPCODE },
3845 { "divss", { XM, EXd }, PREFIX_OPCODE },
3846 { "divpd", { XM, EXx }, PREFIX_OPCODE },
3847 { "divsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3848 },
4e7d34a6 3849
1ceb70f8 3850 /* PREFIX_0F5F */
041bd2e0 3851 {
507bd325
L
3852 { "maxps", { XM, EXx }, PREFIX_OPCODE },
3853 { "maxss", { XM, EXd }, PREFIX_OPCODE },
3854 { "maxpd", { XM, EXx }, PREFIX_OPCODE },
3855 { "maxsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3856 },
4e7d34a6 3857
1ceb70f8 3858 /* PREFIX_0F60 */
041bd2e0 3859 {
507bd325 3860 { "punpcklbw",{ MX, EMd }, PREFIX_OPCODE },
592d1631 3861 { Bad_Opcode },
507bd325 3862 { "punpcklbw",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 3863 },
4e7d34a6 3864
1ceb70f8 3865 /* PREFIX_0F61 */
041bd2e0 3866 {
507bd325 3867 { "punpcklwd",{ MX, EMd }, PREFIX_OPCODE },
592d1631 3868 { Bad_Opcode },
507bd325 3869 { "punpcklwd",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 3870 },
4e7d34a6 3871
1ceb70f8 3872 /* PREFIX_0F62 */
041bd2e0 3873 {
507bd325 3874 { "punpckldq",{ MX, EMd }, PREFIX_OPCODE },
592d1631 3875 { Bad_Opcode },
507bd325 3876 { "punpckldq",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 3877 },
4e7d34a6 3878
1ceb70f8 3879 /* PREFIX_0F6C */
041bd2e0 3880 {
592d1631
L
3881 { Bad_Opcode },
3882 { Bad_Opcode },
507bd325 3883 { "punpcklqdq", { XM, EXx }, PREFIX_OPCODE },
0f17484f 3884 },
4e7d34a6 3885
1ceb70f8 3886 /* PREFIX_0F6D */
0f17484f 3887 {
592d1631
L
3888 { Bad_Opcode },
3889 { Bad_Opcode },
507bd325 3890 { "punpckhqdq", { XM, EXx }, PREFIX_OPCODE },
041bd2e0 3891 },
4e7d34a6 3892
1ceb70f8 3893 /* PREFIX_0F6F */
ca164297 3894 {
507bd325
L
3895 { "movq", { MX, EM }, PREFIX_OPCODE },
3896 { "movdqu", { XM, EXx }, PREFIX_OPCODE },
3897 { "movdqa", { XM, EXx }, PREFIX_OPCODE },
ca164297 3898 },
4e7d34a6 3899
1ceb70f8 3900 /* PREFIX_0F70 */
4e7d34a6 3901 {
507bd325
L
3902 { "pshufw", { MX, EM, Ib }, PREFIX_OPCODE },
3903 { "pshufhw",{ XM, EXx, Ib }, PREFIX_OPCODE },
3904 { "pshufd", { XM, EXx, Ib }, PREFIX_OPCODE },
3905 { "pshuflw",{ XM, EXx, Ib }, PREFIX_OPCODE },
4e7d34a6
L
3906 },
3907
92fddf8e
L
3908 /* PREFIX_0F73_REG_3 */
3909 {
592d1631
L
3910 { Bad_Opcode },
3911 { Bad_Opcode },
bf890a93 3912 { "psrldq", { XS, Ib }, 0 },
92fddf8e
L
3913 },
3914
3915 /* PREFIX_0F73_REG_7 */
3916 {
592d1631
L
3917 { Bad_Opcode },
3918 { Bad_Opcode },
bf890a93 3919 { "pslldq", { XS, Ib }, 0 },
92fddf8e
L
3920 },
3921
1ceb70f8 3922 /* PREFIX_0F78 */
4e7d34a6 3923 {
bf890a93 3924 {"vmread", { Em, Gm }, 0 },
592d1631 3925 { Bad_Opcode },
bf890a93
IT
3926 {"extrq", { XS, Ib, Ib }, 0 },
3927 {"insertq", { XM, XS, Ib, Ib }, 0 },
4e7d34a6
L
3928 },
3929
1ceb70f8 3930 /* PREFIX_0F79 */
4e7d34a6 3931 {
bf890a93 3932 {"vmwrite", { Gm, Em }, 0 },
592d1631 3933 { Bad_Opcode },
bf890a93
IT
3934 {"extrq", { XM, XS }, 0 },
3935 {"insertq", { XM, XS }, 0 },
4e7d34a6
L
3936 },
3937
1ceb70f8 3938 /* PREFIX_0F7C */
ca164297 3939 {
592d1631
L
3940 { Bad_Opcode },
3941 { Bad_Opcode },
507bd325
L
3942 { "haddpd", { XM, EXx }, PREFIX_OPCODE },
3943 { "haddps", { XM, EXx }, PREFIX_OPCODE },
ca164297 3944 },
4e7d34a6 3945
1ceb70f8 3946 /* PREFIX_0F7D */
ca164297 3947 {
592d1631
L
3948 { Bad_Opcode },
3949 { Bad_Opcode },
507bd325
L
3950 { "hsubpd", { XM, EXx }, PREFIX_OPCODE },
3951 { "hsubps", { XM, EXx }, PREFIX_OPCODE },
ca164297 3952 },
4e7d34a6 3953
1ceb70f8 3954 /* PREFIX_0F7E */
ca164297 3955 {
507bd325
L
3956 { "movK", { Edq, MX }, PREFIX_OPCODE },
3957 { "movq", { XM, EXq }, PREFIX_OPCODE },
3958 { "movK", { Edq, XM }, PREFIX_OPCODE },
ca164297 3959 },
4e7d34a6 3960
1ceb70f8 3961 /* PREFIX_0F7F */
ca164297 3962 {
507bd325
L
3963 { "movq", { EMS, MX }, PREFIX_OPCODE },
3964 { "movdqu", { EXxS, XM }, PREFIX_OPCODE },
3965 { "movdqa", { EXxS, XM }, PREFIX_OPCODE },
ca164297 3966 },
4e7d34a6 3967
c7b8aa3a
L
3968 /* PREFIX_0FAE_REG_0 */
3969 {
3970 { Bad_Opcode },
bf890a93 3971 { "rdfsbase", { Ev }, 0 },
c7b8aa3a
L
3972 },
3973
3974 /* PREFIX_0FAE_REG_1 */
3975 {
3976 { Bad_Opcode },
bf890a93 3977 { "rdgsbase", { Ev }, 0 },
c7b8aa3a
L
3978 },
3979
3980 /* PREFIX_0FAE_REG_2 */
3981 {
3982 { Bad_Opcode },
bf890a93 3983 { "wrfsbase", { Ev }, 0 },
c7b8aa3a
L
3984 },
3985
3986 /* PREFIX_0FAE_REG_3 */
3987 {
3988 { Bad_Opcode },
bf890a93 3989 { "wrgsbase", { Ev }, 0 },
c7b8aa3a
L
3990 },
3991
6b40c462
L
3992 /* PREFIX_MOD_0_0FAE_REG_4 */
3993 {
3994 { "xsave", { FXSAVE }, 0 },
3995 { "ptwrite%LQ", { Edq }, 0 },
3996 },
3997
3998 /* PREFIX_MOD_3_0FAE_REG_4 */
3999 {
4000 { Bad_Opcode },
4001 { "ptwrite%LQ", { Edq }, 0 },
4002 },
4003
603555e5
L
4004 /* PREFIX_MOD_0_0FAE_REG_5 */
4005 {
4006 { "xrstor", { FXSAVE }, PREFIX_OPCODE },
2234eee6
L
4007 },
4008
4009 /* PREFIX_MOD_3_0FAE_REG_5 */
4010 {
4011 { "lfence", { Skip_MODRM }, 0 },
4012 { "incsspK", { Rdq }, PREFIX_OPCODE },
603555e5
L
4013 },
4014
de89d0a3 4015 /* PREFIX_MOD_0_0FAE_REG_6 */
c5e7287a 4016 {
603555e5
L
4017 { "xsaveopt", { FXSAVE }, PREFIX_OPCODE },
4018 { "clrssbsy", { Mq }, PREFIX_OPCODE },
4019 { "clwb", { Mb }, PREFIX_OPCODE },
c5e7287a
IT
4020 },
4021
de89d0a3
IT
4022 /* PREFIX_MOD_1_0FAE_REG_6 */
4023 {
4024 { RM_TABLE (RM_0FAE_REG_6) },
4025 { "umonitor", { Eva }, PREFIX_OPCODE },
ae1d3843
L
4026 { "tpause", { Edq }, PREFIX_OPCODE },
4027 { "umwait", { Edq }, PREFIX_OPCODE },
de89d0a3
IT
4028 },
4029
963f3586
IT
4030 /* PREFIX_0FAE_REG_7 */
4031 {
bf890a93 4032 { "clflush", { Mb }, 0 },
963f3586 4033 { Bad_Opcode },
bf890a93 4034 { "clflushopt", { Mb }, 0 },
963f3586
IT
4035 },
4036
1ceb70f8 4037 /* PREFIX_0FB8 */
ca164297 4038 {
592d1631 4039 { Bad_Opcode },
bf890a93 4040 { "popcntS", { Gv, Ev }, 0 },
ca164297 4041 },
4e7d34a6 4042
f12dc422
L
4043 /* PREFIX_0FBC */
4044 {
bf890a93
IT
4045 { "bsfS", { Gv, Ev }, 0 },
4046 { "tzcntS", { Gv, Ev }, 0 },
4047 { "bsfS", { Gv, Ev }, 0 },
f12dc422
L
4048 },
4049
1ceb70f8 4050 /* PREFIX_0FBD */
050dfa73 4051 {
bf890a93
IT
4052 { "bsrS", { Gv, Ev }, 0 },
4053 { "lzcntS", { Gv, Ev }, 0 },
4054 { "bsrS", { Gv, Ev }, 0 },
050dfa73
MM
4055 },
4056
1ceb70f8 4057 /* PREFIX_0FC2 */
050dfa73 4058 {
507bd325
L
4059 { "cmpps", { XM, EXx, CMP }, PREFIX_OPCODE },
4060 { "cmpss", { XM, EXd, CMP }, PREFIX_OPCODE },
4061 { "cmppd", { XM, EXx, CMP }, PREFIX_OPCODE },
4062 { "cmpsd", { XM, EXq, CMP }, PREFIX_OPCODE },
050dfa73 4063 },
246c51aa 4064
a8484f96 4065 /* PREFIX_MOD_0_0FC3 */
4ee52178 4066 {
a8484f96 4067 { "movntiS", { Ev, Gv }, PREFIX_OPCODE },
4ee52178
L
4068 },
4069
f24bcbaa 4070 /* PREFIX_MOD_0_0FC7_REG_6 */
92fddf8e 4071 {
bf890a93
IT
4072 { "vmptrld",{ Mq }, 0 },
4073 { "vmxon", { Mq }, 0 },
4074 { "vmclear",{ Mq }, 0 },
92fddf8e
L
4075 },
4076
f24bcbaa
L
4077 /* PREFIX_MOD_3_0FC7_REG_6 */
4078 {
4079 { "rdrand", { Ev }, 0 },
4080 { Bad_Opcode },
4081 { "rdrand", { Ev }, 0 }
4082 },
4083
4084 /* PREFIX_MOD_3_0FC7_REG_7 */
4085 {
4086 { "rdseed", { Ev }, 0 },
8bc52696 4087 { "rdpid", { Em }, 0 },
f24bcbaa
L
4088 { "rdseed", { Ev }, 0 },
4089 },
4090
1ceb70f8 4091 /* PREFIX_0FD0 */
050dfa73 4092 {
592d1631
L
4093 { Bad_Opcode },
4094 { Bad_Opcode },
bf890a93
IT
4095 { "addsubpd", { XM, EXx }, 0 },
4096 { "addsubps", { XM, EXx }, 0 },
246c51aa 4097 },
050dfa73 4098
1ceb70f8 4099 /* PREFIX_0FD6 */
050dfa73 4100 {
592d1631 4101 { Bad_Opcode },
bf890a93
IT
4102 { "movq2dq",{ XM, MS }, 0 },
4103 { "movq", { EXqS, XM }, 0 },
4104 { "movdq2q",{ MX, XS }, 0 },
050dfa73
MM
4105 },
4106
1ceb70f8 4107 /* PREFIX_0FE6 */
7918206c 4108 {
592d1631 4109 { Bad_Opcode },
507bd325
L
4110 { "cvtdq2pd", { XM, EXq }, PREFIX_OPCODE },
4111 { "cvttpd2dq", { XM, EXx }, PREFIX_OPCODE },
4112 { "cvtpd2dq", { XM, EXx }, PREFIX_OPCODE },
7918206c 4113 },
8b38ad71 4114
1ceb70f8 4115 /* PREFIX_0FE7 */
8b38ad71 4116 {
507bd325 4117 { "movntq", { Mq, MX }, PREFIX_OPCODE },
592d1631 4118 { Bad_Opcode },
75c135a8 4119 { MOD_TABLE (MOD_0FE7_PREFIX_2) },
4e7d34a6
L
4120 },
4121
1ceb70f8 4122 /* PREFIX_0FF0 */
4e7d34a6 4123 {
592d1631
L
4124 { Bad_Opcode },
4125 { Bad_Opcode },
4126 { Bad_Opcode },
1ceb70f8 4127 { MOD_TABLE (MOD_0FF0_PREFIX_3) },
4e7d34a6
L
4128 },
4129
1ceb70f8 4130 /* PREFIX_0FF7 */
4e7d34a6 4131 {
507bd325 4132 { "maskmovq", { MX, MS }, PREFIX_OPCODE },
592d1631 4133 { Bad_Opcode },
507bd325 4134 { "maskmovdqu", { XM, XS }, PREFIX_OPCODE },
8b38ad71 4135 },
42903f7f 4136
1ceb70f8 4137 /* PREFIX_0F3810 */
42903f7f 4138 {
592d1631
L
4139 { Bad_Opcode },
4140 { Bad_Opcode },
507bd325 4141 { "pblendvb", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4142 },
4143
1ceb70f8 4144 /* PREFIX_0F3814 */
42903f7f 4145 {
592d1631
L
4146 { Bad_Opcode },
4147 { Bad_Opcode },
507bd325 4148 { "blendvps", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4149 },
4150
1ceb70f8 4151 /* PREFIX_0F3815 */
42903f7f 4152 {
592d1631
L
4153 { Bad_Opcode },
4154 { Bad_Opcode },
507bd325 4155 { "blendvpd", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4156 },
4157
1ceb70f8 4158 /* PREFIX_0F3817 */
42903f7f 4159 {
592d1631
L
4160 { Bad_Opcode },
4161 { Bad_Opcode },
507bd325 4162 { "ptest", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4163 },
4164
1ceb70f8 4165 /* PREFIX_0F3820 */
42903f7f 4166 {
592d1631
L
4167 { Bad_Opcode },
4168 { Bad_Opcode },
507bd325 4169 { "pmovsxbw", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4170 },
4171
1ceb70f8 4172 /* PREFIX_0F3821 */
42903f7f 4173 {
592d1631
L
4174 { Bad_Opcode },
4175 { Bad_Opcode },
507bd325 4176 { "pmovsxbd", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4177 },
4178
1ceb70f8 4179 /* PREFIX_0F3822 */
42903f7f 4180 {
592d1631
L
4181 { Bad_Opcode },
4182 { Bad_Opcode },
507bd325 4183 { "pmovsxbq", { XM, EXw }, PREFIX_OPCODE },
42903f7f
L
4184 },
4185
1ceb70f8 4186 /* PREFIX_0F3823 */
42903f7f 4187 {
592d1631
L
4188 { Bad_Opcode },
4189 { Bad_Opcode },
507bd325 4190 { "pmovsxwd", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4191 },
4192
1ceb70f8 4193 /* PREFIX_0F3824 */
42903f7f 4194 {
592d1631
L
4195 { Bad_Opcode },
4196 { Bad_Opcode },
507bd325 4197 { "pmovsxwq", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4198 },
4199
1ceb70f8 4200 /* PREFIX_0F3825 */
42903f7f 4201 {
592d1631
L
4202 { Bad_Opcode },
4203 { Bad_Opcode },
507bd325 4204 { "pmovsxdq", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4205 },
4206
1ceb70f8 4207 /* PREFIX_0F3828 */
42903f7f 4208 {
592d1631
L
4209 { Bad_Opcode },
4210 { Bad_Opcode },
507bd325 4211 { "pmuldq", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4212 },
4213
1ceb70f8 4214 /* PREFIX_0F3829 */
42903f7f 4215 {
592d1631
L
4216 { Bad_Opcode },
4217 { Bad_Opcode },
507bd325 4218 { "pcmpeqq", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4219 },
4220
1ceb70f8 4221 /* PREFIX_0F382A */
42903f7f 4222 {
592d1631
L
4223 { Bad_Opcode },
4224 { Bad_Opcode },
75c135a8 4225 { MOD_TABLE (MOD_0F382A_PREFIX_2) },
42903f7f
L
4226 },
4227
1ceb70f8 4228 /* PREFIX_0F382B */
42903f7f 4229 {
592d1631
L
4230 { Bad_Opcode },
4231 { Bad_Opcode },
507bd325 4232 { "packusdw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4233 },
4234
1ceb70f8 4235 /* PREFIX_0F3830 */
42903f7f 4236 {
592d1631
L
4237 { Bad_Opcode },
4238 { Bad_Opcode },
507bd325 4239 { "pmovzxbw", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4240 },
4241
1ceb70f8 4242 /* PREFIX_0F3831 */
42903f7f 4243 {
592d1631
L
4244 { Bad_Opcode },
4245 { Bad_Opcode },
507bd325 4246 { "pmovzxbd", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4247 },
4248
1ceb70f8 4249 /* PREFIX_0F3832 */
42903f7f 4250 {
592d1631
L
4251 { Bad_Opcode },
4252 { Bad_Opcode },
507bd325 4253 { "pmovzxbq", { XM, EXw }, PREFIX_OPCODE },
42903f7f
L
4254 },
4255
1ceb70f8 4256 /* PREFIX_0F3833 */
42903f7f 4257 {
592d1631
L
4258 { Bad_Opcode },
4259 { Bad_Opcode },
507bd325 4260 { "pmovzxwd", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4261 },
4262
1ceb70f8 4263 /* PREFIX_0F3834 */
42903f7f 4264 {
592d1631
L
4265 { Bad_Opcode },
4266 { Bad_Opcode },
507bd325 4267 { "pmovzxwq", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4268 },
4269
1ceb70f8 4270 /* PREFIX_0F3835 */
42903f7f 4271 {
592d1631
L
4272 { Bad_Opcode },
4273 { Bad_Opcode },
507bd325 4274 { "pmovzxdq", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4275 },
4276
1ceb70f8 4277 /* PREFIX_0F3837 */
4e7d34a6 4278 {
592d1631
L
4279 { Bad_Opcode },
4280 { Bad_Opcode },
507bd325 4281 { "pcmpgtq", { XM, EXx }, PREFIX_OPCODE },
4e7d34a6
L
4282 },
4283
1ceb70f8 4284 /* PREFIX_0F3838 */
42903f7f 4285 {
592d1631
L
4286 { Bad_Opcode },
4287 { Bad_Opcode },
507bd325 4288 { "pminsb", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4289 },
4290
1ceb70f8 4291 /* PREFIX_0F3839 */
42903f7f 4292 {
592d1631
L
4293 { Bad_Opcode },
4294 { Bad_Opcode },
507bd325 4295 { "pminsd", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4296 },
4297
1ceb70f8 4298 /* PREFIX_0F383A */
42903f7f 4299 {
592d1631
L
4300 { Bad_Opcode },
4301 { Bad_Opcode },
507bd325 4302 { "pminuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4303 },
4304
1ceb70f8 4305 /* PREFIX_0F383B */
42903f7f 4306 {
592d1631
L
4307 { Bad_Opcode },
4308 { Bad_Opcode },
507bd325 4309 { "pminud", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4310 },
4311
1ceb70f8 4312 /* PREFIX_0F383C */
42903f7f 4313 {
592d1631
L
4314 { Bad_Opcode },
4315 { Bad_Opcode },
507bd325 4316 { "pmaxsb", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4317 },
4318
1ceb70f8 4319 /* PREFIX_0F383D */
42903f7f 4320 {
592d1631
L
4321 { Bad_Opcode },
4322 { Bad_Opcode },
507bd325 4323 { "pmaxsd", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4324 },
4325
1ceb70f8 4326 /* PREFIX_0F383E */
42903f7f 4327 {
592d1631
L
4328 { Bad_Opcode },
4329 { Bad_Opcode },
507bd325 4330 { "pmaxuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4331 },
4332
1ceb70f8 4333 /* PREFIX_0F383F */
42903f7f 4334 {
592d1631
L
4335 { Bad_Opcode },
4336 { Bad_Opcode },
507bd325 4337 { "pmaxud", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4338 },
4339
1ceb70f8 4340 /* PREFIX_0F3840 */
42903f7f 4341 {
592d1631
L
4342 { Bad_Opcode },
4343 { Bad_Opcode },
507bd325 4344 { "pmulld", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4345 },
4346
1ceb70f8 4347 /* PREFIX_0F3841 */
42903f7f 4348 {
592d1631
L
4349 { Bad_Opcode },
4350 { Bad_Opcode },
507bd325 4351 { "phminposuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4352 },
4353
f1f8f695
L
4354 /* PREFIX_0F3880 */
4355 {
592d1631
L
4356 { Bad_Opcode },
4357 { Bad_Opcode },
507bd325 4358 { "invept", { Gm, Mo }, PREFIX_OPCODE },
f1f8f695
L
4359 },
4360
4361 /* PREFIX_0F3881 */
4362 {
592d1631
L
4363 { Bad_Opcode },
4364 { Bad_Opcode },
507bd325 4365 { "invvpid", { Gm, Mo }, PREFIX_OPCODE },
f1f8f695
L
4366 },
4367
6c30d220
L
4368 /* PREFIX_0F3882 */
4369 {
4370 { Bad_Opcode },
4371 { Bad_Opcode },
507bd325 4372 { "invpcid", { Gm, M }, PREFIX_OPCODE },
6c30d220
L
4373 },
4374
a0046408
L
4375 /* PREFIX_0F38C8 */
4376 {
507bd325 4377 { "sha1nexte", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4378 },
4379
4380 /* PREFIX_0F38C9 */
4381 {
507bd325 4382 { "sha1msg1", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4383 },
4384
4385 /* PREFIX_0F38CA */
4386 {
507bd325 4387 { "sha1msg2", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4388 },
4389
4390 /* PREFIX_0F38CB */
4391 {
507bd325 4392 { "sha256rnds2", { XM, EXxmm, XMM0 }, PREFIX_OPCODE },
a0046408
L
4393 },
4394
4395 /* PREFIX_0F38CC */
4396 {
507bd325 4397 { "sha256msg1", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4398 },
4399
4400 /* PREFIX_0F38CD */
4401 {
507bd325 4402 { "sha256msg2", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4403 },
4404
48521003
IT
4405 /* PREFIX_0F38CF */
4406 {
4407 { Bad_Opcode },
4408 { Bad_Opcode },
4409 { "gf2p8mulb", { XM, EXxmm }, PREFIX_OPCODE },
4410 },
4411
c0f3af97
L
4412 /* PREFIX_0F38DB */
4413 {
592d1631
L
4414 { Bad_Opcode },
4415 { Bad_Opcode },
507bd325 4416 { "aesimc", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4417 },
4418
4419 /* PREFIX_0F38DC */
4420 {
592d1631
L
4421 { Bad_Opcode },
4422 { Bad_Opcode },
507bd325 4423 { "aesenc", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4424 },
4425
4426 /* PREFIX_0F38DD */
4427 {
592d1631
L
4428 { Bad_Opcode },
4429 { Bad_Opcode },
507bd325 4430 { "aesenclast", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4431 },
4432
4433 /* PREFIX_0F38DE */
4434 {
592d1631
L
4435 { Bad_Opcode },
4436 { Bad_Opcode },
507bd325 4437 { "aesdec", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4438 },
4439
4440 /* PREFIX_0F38DF */
4441 {
592d1631
L
4442 { Bad_Opcode },
4443 { Bad_Opcode },
507bd325 4444 { "aesdeclast", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4445 },
4446
1ceb70f8 4447 /* PREFIX_0F38F0 */
4e7d34a6 4448 {
507bd325 4449 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } }, PREFIX_OPCODE },
592d1631 4450 { Bad_Opcode },
507bd325
L
4451 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } }, PREFIX_OPCODE },
4452 { "crc32", { Gdq, { CRC32_Fixup, b_mode } }, PREFIX_OPCODE },
4e7d34a6
L
4453 },
4454
1ceb70f8 4455 /* PREFIX_0F38F1 */
4e7d34a6 4456 {
507bd325 4457 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv }, PREFIX_OPCODE },
592d1631 4458 { Bad_Opcode },
507bd325
L
4459 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv }, PREFIX_OPCODE },
4460 { "crc32", { Gdq, { CRC32_Fixup, v_mode } }, PREFIX_OPCODE },
4e7d34a6
L
4461 },
4462
603555e5 4463 /* PREFIX_0F38F5 */
e2e1fcde
L
4464 {
4465 { Bad_Opcode },
603555e5
L
4466 { Bad_Opcode },
4467 { MOD_TABLE (MOD_0F38F5_PREFIX_2) },
4468 },
4469
4470 /* PREFIX_0F38F6 */
4471 {
4472 { MOD_TABLE (MOD_0F38F6_PREFIX_0) },
507bd325
L
4473 { "adoxS", { Gdq, Edq}, PREFIX_OPCODE },
4474 { "adcxS", { Gdq, Edq}, PREFIX_OPCODE },
e2e1fcde
L
4475 { Bad_Opcode },
4476 },
4477
c0a30a9f
L
4478 /* PREFIX_0F38F8 */
4479 {
4480 { Bad_Opcode },
5d79adc4 4481 { MOD_TABLE (MOD_0F38F8_PREFIX_1) },
c0a30a9f 4482 { MOD_TABLE (MOD_0F38F8_PREFIX_2) },
5d79adc4 4483 { MOD_TABLE (MOD_0F38F8_PREFIX_3) },
c0a30a9f
L
4484 },
4485
4486 /* PREFIX_0F38F9 */
4487 {
4488 { MOD_TABLE (MOD_0F38F9_PREFIX_0) },
4489 },
4490
1ceb70f8 4491 /* PREFIX_0F3A08 */
42903f7f 4492 {
592d1631
L
4493 { Bad_Opcode },
4494 { Bad_Opcode },
507bd325 4495 { "roundps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4496 },
4497
1ceb70f8 4498 /* PREFIX_0F3A09 */
42903f7f 4499 {
592d1631
L
4500 { Bad_Opcode },
4501 { Bad_Opcode },
507bd325 4502 { "roundpd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4503 },
4504
1ceb70f8 4505 /* PREFIX_0F3A0A */
42903f7f 4506 {
592d1631
L
4507 { Bad_Opcode },
4508 { Bad_Opcode },
507bd325 4509 { "roundss", { XM, EXd, Ib }, PREFIX_OPCODE },
42903f7f
L
4510 },
4511
1ceb70f8 4512 /* PREFIX_0F3A0B */
42903f7f 4513 {
592d1631
L
4514 { Bad_Opcode },
4515 { Bad_Opcode },
507bd325 4516 { "roundsd", { XM, EXq, Ib }, PREFIX_OPCODE },
42903f7f
L
4517 },
4518
1ceb70f8 4519 /* PREFIX_0F3A0C */
42903f7f 4520 {
592d1631
L
4521 { Bad_Opcode },
4522 { Bad_Opcode },
507bd325 4523 { "blendps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4524 },
4525
1ceb70f8 4526 /* PREFIX_0F3A0D */
42903f7f 4527 {
592d1631
L
4528 { Bad_Opcode },
4529 { Bad_Opcode },
507bd325 4530 { "blendpd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4531 },
4532
1ceb70f8 4533 /* PREFIX_0F3A0E */
42903f7f 4534 {
592d1631
L
4535 { Bad_Opcode },
4536 { Bad_Opcode },
507bd325 4537 { "pblendw", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4538 },
4539
1ceb70f8 4540 /* PREFIX_0F3A14 */
42903f7f 4541 {
592d1631
L
4542 { Bad_Opcode },
4543 { Bad_Opcode },
507bd325 4544 { "pextrb", { Edqb, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4545 },
4546
1ceb70f8 4547 /* PREFIX_0F3A15 */
42903f7f 4548 {
592d1631
L
4549 { Bad_Opcode },
4550 { Bad_Opcode },
507bd325 4551 { "pextrw", { Edqw, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4552 },
4553
1ceb70f8 4554 /* PREFIX_0F3A16 */
42903f7f 4555 {
592d1631
L
4556 { Bad_Opcode },
4557 { Bad_Opcode },
507bd325 4558 { "pextrK", { Edq, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4559 },
4560
1ceb70f8 4561 /* PREFIX_0F3A17 */
42903f7f 4562 {
592d1631
L
4563 { Bad_Opcode },
4564 { Bad_Opcode },
507bd325 4565 { "extractps", { Edqd, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4566 },
4567
1ceb70f8 4568 /* PREFIX_0F3A20 */
42903f7f 4569 {
592d1631
L
4570 { Bad_Opcode },
4571 { Bad_Opcode },
507bd325 4572 { "pinsrb", { XM, Edqb, Ib }, PREFIX_OPCODE },
42903f7f
L
4573 },
4574
1ceb70f8 4575 /* PREFIX_0F3A21 */
42903f7f 4576 {
592d1631
L
4577 { Bad_Opcode },
4578 { Bad_Opcode },
507bd325 4579 { "insertps", { XM, EXd, Ib }, PREFIX_OPCODE },
42903f7f
L
4580 },
4581
1ceb70f8 4582 /* PREFIX_0F3A22 */
42903f7f 4583 {
592d1631
L
4584 { Bad_Opcode },
4585 { Bad_Opcode },
507bd325 4586 { "pinsrK", { XM, Edq, Ib }, PREFIX_OPCODE },
42903f7f
L
4587 },
4588
1ceb70f8 4589 /* PREFIX_0F3A40 */
42903f7f 4590 {
592d1631
L
4591 { Bad_Opcode },
4592 { Bad_Opcode },
507bd325 4593 { "dpps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4594 },
4595
1ceb70f8 4596 /* PREFIX_0F3A41 */
42903f7f 4597 {
592d1631
L
4598 { Bad_Opcode },
4599 { Bad_Opcode },
507bd325 4600 { "dppd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4601 },
4602
1ceb70f8 4603 /* PREFIX_0F3A42 */
42903f7f 4604 {
592d1631
L
4605 { Bad_Opcode },
4606 { Bad_Opcode },
507bd325 4607 { "mpsadbw", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f 4608 },
381d071f 4609
c0f3af97
L
4610 /* PREFIX_0F3A44 */
4611 {
592d1631
L
4612 { Bad_Opcode },
4613 { Bad_Opcode },
507bd325 4614 { "pclmulqdq", { XM, EXx, PCLMUL }, PREFIX_OPCODE },
c0f3af97
L
4615 },
4616
1ceb70f8 4617 /* PREFIX_0F3A60 */
381d071f 4618 {
592d1631
L
4619 { Bad_Opcode },
4620 { Bad_Opcode },
15c7c1d8 4621 { "pcmpestrm", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, PREFIX_OPCODE },
381d071f
L
4622 },
4623
1ceb70f8 4624 /* PREFIX_0F3A61 */
381d071f 4625 {
592d1631
L
4626 { Bad_Opcode },
4627 { Bad_Opcode },
15c7c1d8 4628 { "pcmpestri", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, PREFIX_OPCODE },
381d071f
L
4629 },
4630
1ceb70f8 4631 /* PREFIX_0F3A62 */
381d071f 4632 {
592d1631
L
4633 { Bad_Opcode },
4634 { Bad_Opcode },
507bd325 4635 { "pcmpistrm", { XM, EXx, Ib }, PREFIX_OPCODE },
381d071f
L
4636 },
4637
1ceb70f8 4638 /* PREFIX_0F3A63 */
381d071f 4639 {
592d1631
L
4640 { Bad_Opcode },
4641 { Bad_Opcode },
507bd325 4642 { "pcmpistri", { XM, EXx, Ib }, PREFIX_OPCODE },
381d071f 4643 },
09a2c6cf 4644
a0046408
L
4645 /* PREFIX_0F3ACC */
4646 {
507bd325 4647 { "sha1rnds4", { XM, EXxmm, Ib }, PREFIX_OPCODE },
a0046408
L
4648 },
4649
48521003
IT
4650 /* PREFIX_0F3ACE */
4651 {
4652 { Bad_Opcode },
4653 { Bad_Opcode },
4654 { "gf2p8affineqb", { XM, EXxmm, Ib }, PREFIX_OPCODE },
4655 },
4656
4657 /* PREFIX_0F3ACF */
4658 {
4659 { Bad_Opcode },
4660 { Bad_Opcode },
4661 { "gf2p8affineinvqb", { XM, EXxmm, Ib }, PREFIX_OPCODE },
4662 },
4663
c0f3af97 4664 /* PREFIX_0F3ADF */
09a2c6cf 4665 {
592d1631
L
4666 { Bad_Opcode },
4667 { Bad_Opcode },
507bd325 4668 { "aeskeygenassist", { XM, EXx, Ib }, PREFIX_OPCODE },
09a2c6cf
L
4669 },
4670
592a252b 4671 /* PREFIX_VEX_0F10 */
09a2c6cf 4672 {
ec6f095a
L
4673 { "vmovups", { XM, EXx }, 0 },
4674 { "vmovss", { XMVexScalar, VexScalar, EXdScalar }, 0 },
4675 { "vmovupd", { XM, EXx }, 0 },
4676 { "vmovsd", { XMVexScalar, VexScalar, EXqScalar }, 0 },
09a2c6cf
L
4677 },
4678
592a252b 4679 /* PREFIX_VEX_0F11 */
09a2c6cf 4680 {
ec6f095a
L
4681 { "vmovups", { EXxS, XM }, 0 },
4682 { "vmovss", { EXdVexScalarS, VexScalar, XMScalar }, 0 },
4683 { "vmovupd", { EXxS, XM }, 0 },
4684 { "vmovsd", { EXqVexScalarS, VexScalar, XMScalar }, 0 },
09a2c6cf
L
4685 },
4686
592a252b 4687 /* PREFIX_VEX_0F12 */
09a2c6cf 4688 {
592a252b 4689 { MOD_TABLE (MOD_VEX_0F12_PREFIX_0) },
ec6f095a 4690 { "vmovsldup", { XM, EXx }, 0 },
592a252b 4691 { VEX_LEN_TABLE (VEX_LEN_0F12_P_2) },
ec6f095a 4692 { "vmovddup", { XM, EXymmq }, 0 },
09a2c6cf
L
4693 },
4694
592a252b 4695 /* PREFIX_VEX_0F16 */
09a2c6cf 4696 {
592a252b 4697 { MOD_TABLE (MOD_VEX_0F16_PREFIX_0) },
ec6f095a 4698 { "vmovshdup", { XM, EXx }, 0 },
592a252b 4699 { VEX_LEN_TABLE (VEX_LEN_0F16_P_2) },
5f754f58 4700 },
7c52e0e8 4701
592a252b 4702 /* PREFIX_VEX_0F2A */
5f754f58 4703 {
592d1631 4704 { Bad_Opcode },
592a252b 4705 { VEX_LEN_TABLE (VEX_LEN_0F2A_P_1) },
592d1631 4706 { Bad_Opcode },
592a252b 4707 { VEX_LEN_TABLE (VEX_LEN_0F2A_P_3) },
5f754f58 4708 },
7c52e0e8 4709
592a252b 4710 /* PREFIX_VEX_0F2C */
5f754f58 4711 {
592d1631 4712 { Bad_Opcode },
592a252b 4713 { VEX_LEN_TABLE (VEX_LEN_0F2C_P_1) },
592d1631 4714 { Bad_Opcode },
592a252b 4715 { VEX_LEN_TABLE (VEX_LEN_0F2C_P_3) },
5f754f58 4716 },
7c52e0e8 4717
592a252b 4718 /* PREFIX_VEX_0F2D */
7c52e0e8 4719 {
592d1631 4720 { Bad_Opcode },
592a252b 4721 { VEX_LEN_TABLE (VEX_LEN_0F2D_P_1) },
592d1631 4722 { Bad_Opcode },
592a252b 4723 { VEX_LEN_TABLE (VEX_LEN_0F2D_P_3) },
7c52e0e8
L
4724 },
4725
592a252b 4726 /* PREFIX_VEX_0F2E */
7c52e0e8 4727 {
ec6f095a 4728 { "vucomiss", { XMScalar, EXdScalar }, 0 },
592d1631 4729 { Bad_Opcode },
ec6f095a 4730 { "vucomisd", { XMScalar, EXqScalar }, 0 },
7c52e0e8
L
4731 },
4732
592a252b 4733 /* PREFIX_VEX_0F2F */
7c52e0e8 4734 {
ec6f095a 4735 { "vcomiss", { XMScalar, EXdScalar }, 0 },
592d1631 4736 { Bad_Opcode },
ec6f095a 4737 { "vcomisd", { XMScalar, EXqScalar }, 0 },
7c52e0e8
L
4738 },
4739
43234a1e
L
4740 /* PREFIX_VEX_0F41 */
4741 {
4742 { VEX_LEN_TABLE (VEX_LEN_0F41_P_0) },
1ba585e8
IT
4743 { Bad_Opcode },
4744 { VEX_LEN_TABLE (VEX_LEN_0F41_P_2) },
43234a1e
L
4745 },
4746
4747 /* PREFIX_VEX_0F42 */
4748 {
4749 { VEX_LEN_TABLE (VEX_LEN_0F42_P_0) },
1ba585e8
IT
4750 { Bad_Opcode },
4751 { VEX_LEN_TABLE (VEX_LEN_0F42_P_2) },
43234a1e
L
4752 },
4753
4754 /* PREFIX_VEX_0F44 */
4755 {
4756 { VEX_LEN_TABLE (VEX_LEN_0F44_P_0) },
1ba585e8
IT
4757 { Bad_Opcode },
4758 { VEX_LEN_TABLE (VEX_LEN_0F44_P_2) },
43234a1e
L
4759 },
4760
4761 /* PREFIX_VEX_0F45 */
4762 {
4763 { VEX_LEN_TABLE (VEX_LEN_0F45_P_0) },
1ba585e8
IT
4764 { Bad_Opcode },
4765 { VEX_LEN_TABLE (VEX_LEN_0F45_P_2) },
43234a1e
L
4766 },
4767
4768 /* PREFIX_VEX_0F46 */
4769 {
4770 { VEX_LEN_TABLE (VEX_LEN_0F46_P_0) },
1ba585e8
IT
4771 { Bad_Opcode },
4772 { VEX_LEN_TABLE (VEX_LEN_0F46_P_2) },
43234a1e
L
4773 },
4774
4775 /* PREFIX_VEX_0F47 */
4776 {
4777 { VEX_LEN_TABLE (VEX_LEN_0F47_P_0) },
1ba585e8
IT
4778 { Bad_Opcode },
4779 { VEX_LEN_TABLE (VEX_LEN_0F47_P_2) },
43234a1e
L
4780 },
4781
1ba585e8 4782 /* PREFIX_VEX_0F4A */
43234a1e 4783 {
1ba585e8 4784 { VEX_LEN_TABLE (VEX_LEN_0F4A_P_0) },
43234a1e 4785 { Bad_Opcode },
1ba585e8
IT
4786 { VEX_LEN_TABLE (VEX_LEN_0F4A_P_2) },
4787 },
4788
4789 /* PREFIX_VEX_0F4B */
4790 {
4791 { VEX_LEN_TABLE (VEX_LEN_0F4B_P_0) },
43234a1e
L
4792 { Bad_Opcode },
4793 { VEX_LEN_TABLE (VEX_LEN_0F4B_P_2) },
4794 },
4795
592a252b 4796 /* PREFIX_VEX_0F51 */
7c52e0e8 4797 {
ec6f095a
L
4798 { "vsqrtps", { XM, EXx }, 0 },
4799 { "vsqrtss", { XMScalar, VexScalar, EXdScalar }, 0 },
4800 { "vsqrtpd", { XM, EXx }, 0 },
4801 { "vsqrtsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4802 },
4803
592a252b 4804 /* PREFIX_VEX_0F52 */
7c52e0e8 4805 {
ec6f095a
L
4806 { "vrsqrtps", { XM, EXx }, 0 },
4807 { "vrsqrtss", { XMScalar, VexScalar, EXdScalar }, 0 },
7c52e0e8
L
4808 },
4809
592a252b 4810 /* PREFIX_VEX_0F53 */
7c52e0e8 4811 {
ec6f095a
L
4812 { "vrcpps", { XM, EXx }, 0 },
4813 { "vrcpss", { XMScalar, VexScalar, EXdScalar }, 0 },
7c52e0e8
L
4814 },
4815
592a252b 4816 /* PREFIX_VEX_0F58 */
7c52e0e8 4817 {
ec6f095a
L
4818 { "vaddps", { XM, Vex, EXx }, 0 },
4819 { "vaddss", { XMScalar, VexScalar, EXdScalar }, 0 },
4820 { "vaddpd", { XM, Vex, EXx }, 0 },
4821 { "vaddsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4822 },
4823
592a252b 4824 /* PREFIX_VEX_0F59 */
7c52e0e8 4825 {
ec6f095a
L
4826 { "vmulps", { XM, Vex, EXx }, 0 },
4827 { "vmulss", { XMScalar, VexScalar, EXdScalar }, 0 },
4828 { "vmulpd", { XM, Vex, EXx }, 0 },
4829 { "vmulsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4830 },
4831
592a252b 4832 /* PREFIX_VEX_0F5A */
7c52e0e8 4833 {
ec6f095a
L
4834 { "vcvtps2pd", { XM, EXxmmq }, 0 },
4835 { "vcvtss2sd", { XMScalar, VexScalar, EXdScalar }, 0 },
4836 { "vcvtpd2ps%XY",{ XMM, EXx }, 0 },
4837 { "vcvtsd2ss", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4838 },
4839
592a252b 4840 /* PREFIX_VEX_0F5B */
7c52e0e8 4841 {
ec6f095a
L
4842 { "vcvtdq2ps", { XM, EXx }, 0 },
4843 { "vcvttps2dq", { XM, EXx }, 0 },
4844 { "vcvtps2dq", { XM, EXx }, 0 },
7c52e0e8
L
4845 },
4846
592a252b 4847 /* PREFIX_VEX_0F5C */
7c52e0e8 4848 {
ec6f095a
L
4849 { "vsubps", { XM, Vex, EXx }, 0 },
4850 { "vsubss", { XMScalar, VexScalar, EXdScalar }, 0 },
4851 { "vsubpd", { XM, Vex, EXx }, 0 },
4852 { "vsubsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4853 },
4854
592a252b 4855 /* PREFIX_VEX_0F5D */
7c52e0e8 4856 {
ec6f095a
L
4857 { "vminps", { XM, Vex, EXx }, 0 },
4858 { "vminss", { XMScalar, VexScalar, EXdScalar }, 0 },
4859 { "vminpd", { XM, Vex, EXx }, 0 },
4860 { "vminsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4861 },
4862
592a252b 4863 /* PREFIX_VEX_0F5E */
7c52e0e8 4864 {
ec6f095a
L
4865 { "vdivps", { XM, Vex, EXx }, 0 },
4866 { "vdivss", { XMScalar, VexScalar, EXdScalar }, 0 },
4867 { "vdivpd", { XM, Vex, EXx }, 0 },
4868 { "vdivsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4869 },
4870
592a252b 4871 /* PREFIX_VEX_0F5F */
7c52e0e8 4872 {
ec6f095a
L
4873 { "vmaxps", { XM, Vex, EXx }, 0 },
4874 { "vmaxss", { XMScalar, VexScalar, EXdScalar }, 0 },
4875 { "vmaxpd", { XM, Vex, EXx }, 0 },
4876 { "vmaxsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4877 },
4878
592a252b 4879 /* PREFIX_VEX_0F60 */
7c52e0e8 4880 {
592d1631
L
4881 { Bad_Opcode },
4882 { Bad_Opcode },
ec6f095a 4883 { "vpunpcklbw", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4884 },
4885
592a252b 4886 /* PREFIX_VEX_0F61 */
7c52e0e8 4887 {
592d1631
L
4888 { Bad_Opcode },
4889 { Bad_Opcode },
ec6f095a 4890 { "vpunpcklwd", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4891 },
4892
592a252b 4893 /* PREFIX_VEX_0F62 */
7c52e0e8 4894 {
592d1631
L
4895 { Bad_Opcode },
4896 { Bad_Opcode },
ec6f095a 4897 { "vpunpckldq", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4898 },
4899
592a252b 4900 /* PREFIX_VEX_0F63 */
7c52e0e8 4901 {
592d1631
L
4902 { Bad_Opcode },
4903 { Bad_Opcode },
ec6f095a 4904 { "vpacksswb", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4905 },
4906
592a252b 4907 /* PREFIX_VEX_0F64 */
7c52e0e8 4908 {
592d1631
L
4909 { Bad_Opcode },
4910 { Bad_Opcode },
ec6f095a 4911 { "vpcmpgtb", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4912 },
4913
592a252b 4914 /* PREFIX_VEX_0F65 */
7c52e0e8 4915 {
592d1631
L
4916 { Bad_Opcode },
4917 { Bad_Opcode },
ec6f095a 4918 { "vpcmpgtw", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4919 },
4920
592a252b 4921 /* PREFIX_VEX_0F66 */
7c52e0e8 4922 {
592d1631
L
4923 { Bad_Opcode },
4924 { Bad_Opcode },
ec6f095a 4925 { "vpcmpgtd", { XM, Vex, EXx }, 0 },
7c52e0e8 4926 },
6439fc28 4927
592a252b 4928 /* PREFIX_VEX_0F67 */
331d2d0d 4929 {
592d1631
L
4930 { Bad_Opcode },
4931 { Bad_Opcode },
ec6f095a 4932 { "vpackuswb", { XM, Vex, EXx }, 0 },
c0f3af97
L
4933 },
4934
592a252b 4935 /* PREFIX_VEX_0F68 */
c0f3af97 4936 {
592d1631
L
4937 { Bad_Opcode },
4938 { Bad_Opcode },
ec6f095a 4939 { "vpunpckhbw", { XM, Vex, EXx }, 0 },
c0f3af97
L
4940 },
4941
592a252b 4942 /* PREFIX_VEX_0F69 */
c0f3af97 4943 {
592d1631
L
4944 { Bad_Opcode },
4945 { Bad_Opcode },
ec6f095a 4946 { "vpunpckhwd", { XM, Vex, EXx }, 0 },
c0f3af97
L
4947 },
4948
592a252b 4949 /* PREFIX_VEX_0F6A */
c0f3af97 4950 {
592d1631
L
4951 { Bad_Opcode },
4952 { Bad_Opcode },
ec6f095a 4953 { "vpunpckhdq", { XM, Vex, EXx }, 0 },
c0f3af97
L
4954 },
4955
592a252b 4956 /* PREFIX_VEX_0F6B */
c0f3af97 4957 {
592d1631
L
4958 { Bad_Opcode },
4959 { Bad_Opcode },
ec6f095a 4960 { "vpackssdw", { XM, Vex, EXx }, 0 },
c0f3af97
L
4961 },
4962
592a252b 4963 /* PREFIX_VEX_0F6C */
c0f3af97 4964 {
592d1631
L
4965 { Bad_Opcode },
4966 { Bad_Opcode },
ec6f095a 4967 { "vpunpcklqdq", { XM, Vex, EXx }, 0 },
c0f3af97
L
4968 },
4969
592a252b 4970 /* PREFIX_VEX_0F6D */
c0f3af97 4971 {
592d1631
L
4972 { Bad_Opcode },
4973 { Bad_Opcode },
ec6f095a 4974 { "vpunpckhqdq", { XM, Vex, EXx }, 0 },
c0f3af97
L
4975 },
4976
592a252b 4977 /* PREFIX_VEX_0F6E */
c0f3af97 4978 {
592d1631
L
4979 { Bad_Opcode },
4980 { Bad_Opcode },
592a252b 4981 { VEX_LEN_TABLE (VEX_LEN_0F6E_P_2) },
c0f3af97
L
4982 },
4983
592a252b 4984 /* PREFIX_VEX_0F6F */
c0f3af97 4985 {
592d1631 4986 { Bad_Opcode },
ec6f095a
L
4987 { "vmovdqu", { XM, EXx }, 0 },
4988 { "vmovdqa", { XM, EXx }, 0 },
c0f3af97
L
4989 },
4990
592a252b 4991 /* PREFIX_VEX_0F70 */
c0f3af97 4992 {
592d1631 4993 { Bad_Opcode },
ec6f095a
L
4994 { "vpshufhw", { XM, EXx, Ib }, 0 },
4995 { "vpshufd", { XM, EXx, Ib }, 0 },
4996 { "vpshuflw", { XM, EXx, Ib }, 0 },
c0f3af97
L
4997 },
4998
592a252b 4999 /* PREFIX_VEX_0F71_REG_2 */
c0f3af97 5000 {
592d1631
L
5001 { Bad_Opcode },
5002 { Bad_Opcode },
ec6f095a 5003 { "vpsrlw", { Vex, XS, Ib }, 0 },
c0f3af97
L
5004 },
5005
592a252b 5006 /* PREFIX_VEX_0F71_REG_4 */
c0f3af97 5007 {
592d1631
L
5008 { Bad_Opcode },
5009 { Bad_Opcode },
ec6f095a 5010 { "vpsraw", { Vex, XS, Ib }, 0 },
c0f3af97
L
5011 },
5012
592a252b 5013 /* PREFIX_VEX_0F71_REG_6 */
c0f3af97 5014 {
592d1631
L
5015 { Bad_Opcode },
5016 { Bad_Opcode },
ec6f095a 5017 { "vpsllw", { Vex, XS, Ib }, 0 },
c0f3af97
L
5018 },
5019
592a252b 5020 /* PREFIX_VEX_0F72_REG_2 */
c0f3af97 5021 {
592d1631
L
5022 { Bad_Opcode },
5023 { Bad_Opcode },
ec6f095a 5024 { "vpsrld", { Vex, XS, Ib }, 0 },
c0f3af97
L
5025 },
5026
592a252b 5027 /* PREFIX_VEX_0F72_REG_4 */
c0f3af97 5028 {
592d1631
L
5029 { Bad_Opcode },
5030 { Bad_Opcode },
ec6f095a 5031 { "vpsrad", { Vex, XS, Ib }, 0 },
c0f3af97
L
5032 },
5033
592a252b 5034 /* PREFIX_VEX_0F72_REG_6 */
c0f3af97 5035 {
592d1631
L
5036 { Bad_Opcode },
5037 { Bad_Opcode },
ec6f095a 5038 { "vpslld", { Vex, XS, Ib }, 0 },
c0f3af97
L
5039 },
5040
592a252b 5041 /* PREFIX_VEX_0F73_REG_2 */
c0f3af97 5042 {
592d1631
L
5043 { Bad_Opcode },
5044 { Bad_Opcode },
ec6f095a 5045 { "vpsrlq", { Vex, XS, Ib }, 0 },
c0f3af97
L
5046 },
5047
592a252b 5048 /* PREFIX_VEX_0F73_REG_3 */
c0f3af97 5049 {
592d1631
L
5050 { Bad_Opcode },
5051 { Bad_Opcode },
ec6f095a 5052 { "vpsrldq", { Vex, XS, Ib }, 0 },
c0f3af97
L
5053 },
5054
592a252b 5055 /* PREFIX_VEX_0F73_REG_6 */
c0f3af97 5056 {
592d1631
L
5057 { Bad_Opcode },
5058 { Bad_Opcode },
ec6f095a 5059 { "vpsllq", { Vex, XS, Ib }, 0 },
c0f3af97
L
5060 },
5061
592a252b 5062 /* PREFIX_VEX_0F73_REG_7 */
c0f3af97 5063 {
592d1631
L
5064 { Bad_Opcode },
5065 { Bad_Opcode },
ec6f095a 5066 { "vpslldq", { Vex, XS, Ib }, 0 },
c0f3af97
L
5067 },
5068
592a252b 5069 /* PREFIX_VEX_0F74 */
c0f3af97 5070 {
592d1631
L
5071 { Bad_Opcode },
5072 { Bad_Opcode },
ec6f095a 5073 { "vpcmpeqb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5074 },
5075
592a252b 5076 /* PREFIX_VEX_0F75 */
c0f3af97 5077 {
592d1631
L
5078 { Bad_Opcode },
5079 { Bad_Opcode },
ec6f095a 5080 { "vpcmpeqw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5081 },
5082
592a252b 5083 /* PREFIX_VEX_0F76 */
c0f3af97 5084 {
592d1631
L
5085 { Bad_Opcode },
5086 { Bad_Opcode },
ec6f095a 5087 { "vpcmpeqd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5088 },
5089
592a252b 5090 /* PREFIX_VEX_0F77 */
c0f3af97 5091 {
ec6f095a 5092 { VEX_LEN_TABLE (VEX_LEN_0F77_P_0) },
c0f3af97
L
5093 },
5094
592a252b 5095 /* PREFIX_VEX_0F7C */
c0f3af97 5096 {
592d1631
L
5097 { Bad_Opcode },
5098 { Bad_Opcode },
ec6f095a
L
5099 { "vhaddpd", { XM, Vex, EXx }, 0 },
5100 { "vhaddps", { XM, Vex, EXx }, 0 },
c0f3af97
L
5101 },
5102
592a252b 5103 /* PREFIX_VEX_0F7D */
c0f3af97 5104 {
592d1631
L
5105 { Bad_Opcode },
5106 { Bad_Opcode },
ec6f095a
L
5107 { "vhsubpd", { XM, Vex, EXx }, 0 },
5108 { "vhsubps", { XM, Vex, EXx }, 0 },
c0f3af97
L
5109 },
5110
592a252b 5111 /* PREFIX_VEX_0F7E */
c0f3af97 5112 {
592d1631 5113 { Bad_Opcode },
592a252b
L
5114 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_1) },
5115 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_2) },
c0f3af97
L
5116 },
5117
592a252b 5118 /* PREFIX_VEX_0F7F */
c0f3af97 5119 {
592d1631 5120 { Bad_Opcode },
ec6f095a
L
5121 { "vmovdqu", { EXxS, XM }, 0 },
5122 { "vmovdqa", { EXxS, XM }, 0 },
c0f3af97
L
5123 },
5124
43234a1e
L
5125 /* PREFIX_VEX_0F90 */
5126 {
5127 { VEX_LEN_TABLE (VEX_LEN_0F90_P_0) },
1ba585e8
IT
5128 { Bad_Opcode },
5129 { VEX_LEN_TABLE (VEX_LEN_0F90_P_2) },
43234a1e
L
5130 },
5131
5132 /* PREFIX_VEX_0F91 */
5133 {
5134 { VEX_LEN_TABLE (VEX_LEN_0F91_P_0) },
1ba585e8
IT
5135 { Bad_Opcode },
5136 { VEX_LEN_TABLE (VEX_LEN_0F91_P_2) },
43234a1e
L
5137 },
5138
5139 /* PREFIX_VEX_0F92 */
5140 {
5141 { VEX_LEN_TABLE (VEX_LEN_0F92_P_0) },
1ba585e8 5142 { Bad_Opcode },
90a915bf 5143 { VEX_LEN_TABLE (VEX_LEN_0F92_P_2) },
1ba585e8 5144 { VEX_LEN_TABLE (VEX_LEN_0F92_P_3) },
43234a1e
L
5145 },
5146
5147 /* PREFIX_VEX_0F93 */
5148 {
5149 { VEX_LEN_TABLE (VEX_LEN_0F93_P_0) },
1ba585e8 5150 { Bad_Opcode },
90a915bf 5151 { VEX_LEN_TABLE (VEX_LEN_0F93_P_2) },
1ba585e8 5152 { VEX_LEN_TABLE (VEX_LEN_0F93_P_3) },
43234a1e
L
5153 },
5154
5155 /* PREFIX_VEX_0F98 */
5156 {
5157 { VEX_LEN_TABLE (VEX_LEN_0F98_P_0) },
1ba585e8
IT
5158 { Bad_Opcode },
5159 { VEX_LEN_TABLE (VEX_LEN_0F98_P_2) },
5160 },
5161
5162 /* PREFIX_VEX_0F99 */
5163 {
5164 { VEX_LEN_TABLE (VEX_LEN_0F99_P_0) },
5165 { Bad_Opcode },
5166 { VEX_LEN_TABLE (VEX_LEN_0F99_P_2) },
43234a1e
L
5167 },
5168
592a252b 5169 /* PREFIX_VEX_0FC2 */
c0f3af97 5170 {
ec6f095a
L
5171 { "vcmpps", { XM, Vex, EXx, VCMP }, 0 },
5172 { "vcmpss", { XMScalar, VexScalar, EXdScalar, VCMP }, 0 },
5173 { "vcmppd", { XM, Vex, EXx, VCMP }, 0 },
5174 { "vcmpsd", { XMScalar, VexScalar, EXqScalar, VCMP }, 0 },
c0f3af97
L
5175 },
5176
592a252b 5177 /* PREFIX_VEX_0FC4 */
c0f3af97 5178 {
592d1631
L
5179 { Bad_Opcode },
5180 { Bad_Opcode },
592a252b 5181 { VEX_LEN_TABLE (VEX_LEN_0FC4_P_2) },
c0f3af97
L
5182 },
5183
592a252b 5184 /* PREFIX_VEX_0FC5 */
c0f3af97 5185 {
592d1631
L
5186 { Bad_Opcode },
5187 { Bad_Opcode },
592a252b 5188 { VEX_LEN_TABLE (VEX_LEN_0FC5_P_2) },
c0f3af97
L
5189 },
5190
592a252b 5191 /* PREFIX_VEX_0FD0 */
c0f3af97 5192 {
592d1631
L
5193 { Bad_Opcode },
5194 { Bad_Opcode },
ec6f095a
L
5195 { "vaddsubpd", { XM, Vex, EXx }, 0 },
5196 { "vaddsubps", { XM, Vex, EXx }, 0 },
c0f3af97
L
5197 },
5198
592a252b 5199 /* PREFIX_VEX_0FD1 */
c0f3af97 5200 {
592d1631
L
5201 { Bad_Opcode },
5202 { Bad_Opcode },
ec6f095a 5203 { "vpsrlw", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5204 },
5205
592a252b 5206 /* PREFIX_VEX_0FD2 */
c0f3af97 5207 {
592d1631
L
5208 { Bad_Opcode },
5209 { Bad_Opcode },
ec6f095a 5210 { "vpsrld", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5211 },
5212
592a252b 5213 /* PREFIX_VEX_0FD3 */
c0f3af97 5214 {
592d1631
L
5215 { Bad_Opcode },
5216 { Bad_Opcode },
ec6f095a 5217 { "vpsrlq", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5218 },
5219
592a252b 5220 /* PREFIX_VEX_0FD4 */
c0f3af97 5221 {
592d1631
L
5222 { Bad_Opcode },
5223 { Bad_Opcode },
ec6f095a 5224 { "vpaddq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5225 },
5226
592a252b 5227 /* PREFIX_VEX_0FD5 */
c0f3af97 5228 {
592d1631
L
5229 { Bad_Opcode },
5230 { Bad_Opcode },
ec6f095a 5231 { "vpmullw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5232 },
5233
592a252b 5234 /* PREFIX_VEX_0FD6 */
c0f3af97 5235 {
592d1631
L
5236 { Bad_Opcode },
5237 { Bad_Opcode },
592a252b 5238 { VEX_LEN_TABLE (VEX_LEN_0FD6_P_2) },
c0f3af97
L
5239 },
5240
592a252b 5241 /* PREFIX_VEX_0FD7 */
c0f3af97 5242 {
592d1631
L
5243 { Bad_Opcode },
5244 { Bad_Opcode },
592a252b 5245 { MOD_TABLE (MOD_VEX_0FD7_PREFIX_2) },
c0f3af97
L
5246 },
5247
592a252b 5248 /* PREFIX_VEX_0FD8 */
c0f3af97 5249 {
592d1631
L
5250 { Bad_Opcode },
5251 { Bad_Opcode },
ec6f095a 5252 { "vpsubusb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5253 },
5254
592a252b 5255 /* PREFIX_VEX_0FD9 */
c0f3af97 5256 {
592d1631
L
5257 { Bad_Opcode },
5258 { Bad_Opcode },
ec6f095a 5259 { "vpsubusw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5260 },
5261
592a252b 5262 /* PREFIX_VEX_0FDA */
c0f3af97 5263 {
592d1631
L
5264 { Bad_Opcode },
5265 { Bad_Opcode },
ec6f095a 5266 { "vpminub", { XM, Vex, EXx }, 0 },
c0f3af97
L
5267 },
5268
592a252b 5269 /* PREFIX_VEX_0FDB */
c0f3af97 5270 {
592d1631
L
5271 { Bad_Opcode },
5272 { Bad_Opcode },
ec6f095a 5273 { "vpand", { XM, Vex, EXx }, 0 },
c0f3af97
L
5274 },
5275
592a252b 5276 /* PREFIX_VEX_0FDC */
c0f3af97 5277 {
592d1631
L
5278 { Bad_Opcode },
5279 { Bad_Opcode },
ec6f095a 5280 { "vpaddusb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5281 },
5282
592a252b 5283 /* PREFIX_VEX_0FDD */
c0f3af97 5284 {
592d1631
L
5285 { Bad_Opcode },
5286 { Bad_Opcode },
ec6f095a 5287 { "vpaddusw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5288 },
5289
592a252b 5290 /* PREFIX_VEX_0FDE */
c0f3af97 5291 {
592d1631
L
5292 { Bad_Opcode },
5293 { Bad_Opcode },
ec6f095a 5294 { "vpmaxub", { XM, Vex, EXx }, 0 },
c0f3af97
L
5295 },
5296
592a252b 5297 /* PREFIX_VEX_0FDF */
c0f3af97 5298 {
592d1631
L
5299 { Bad_Opcode },
5300 { Bad_Opcode },
ec6f095a 5301 { "vpandn", { XM, Vex, EXx }, 0 },
c0f3af97
L
5302 },
5303
592a252b 5304 /* PREFIX_VEX_0FE0 */
c0f3af97 5305 {
592d1631
L
5306 { Bad_Opcode },
5307 { Bad_Opcode },
ec6f095a 5308 { "vpavgb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5309 },
5310
592a252b 5311 /* PREFIX_VEX_0FE1 */
c0f3af97 5312 {
592d1631
L
5313 { Bad_Opcode },
5314 { Bad_Opcode },
ec6f095a 5315 { "vpsraw", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5316 },
5317
592a252b 5318 /* PREFIX_VEX_0FE2 */
c0f3af97 5319 {
592d1631
L
5320 { Bad_Opcode },
5321 { Bad_Opcode },
ec6f095a 5322 { "vpsrad", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5323 },
5324
592a252b 5325 /* PREFIX_VEX_0FE3 */
c0f3af97 5326 {
592d1631
L
5327 { Bad_Opcode },
5328 { Bad_Opcode },
ec6f095a 5329 { "vpavgw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5330 },
5331
592a252b 5332 /* PREFIX_VEX_0FE4 */
c0f3af97 5333 {
592d1631
L
5334 { Bad_Opcode },
5335 { Bad_Opcode },
ec6f095a 5336 { "vpmulhuw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5337 },
5338
592a252b 5339 /* PREFIX_VEX_0FE5 */
c0f3af97 5340 {
592d1631
L
5341 { Bad_Opcode },
5342 { Bad_Opcode },
ec6f095a 5343 { "vpmulhw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5344 },
5345
592a252b 5346 /* PREFIX_VEX_0FE6 */
c0f3af97 5347 {
592d1631 5348 { Bad_Opcode },
ec6f095a
L
5349 { "vcvtdq2pd", { XM, EXxmmq }, 0 },
5350 { "vcvttpd2dq%XY", { XMM, EXx }, 0 },
5351 { "vcvtpd2dq%XY", { XMM, EXx }, 0 },
c0f3af97
L
5352 },
5353
592a252b 5354 /* PREFIX_VEX_0FE7 */
c0f3af97 5355 {
592d1631
L
5356 { Bad_Opcode },
5357 { Bad_Opcode },
592a252b 5358 { MOD_TABLE (MOD_VEX_0FE7_PREFIX_2) },
c0f3af97
L
5359 },
5360
592a252b 5361 /* PREFIX_VEX_0FE8 */
c0f3af97 5362 {
592d1631
L
5363 { Bad_Opcode },
5364 { Bad_Opcode },
ec6f095a 5365 { "vpsubsb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5366 },
5367
592a252b 5368 /* PREFIX_VEX_0FE9 */
c0f3af97 5369 {
592d1631
L
5370 { Bad_Opcode },
5371 { Bad_Opcode },
ec6f095a 5372 { "vpsubsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5373 },
5374
592a252b 5375 /* PREFIX_VEX_0FEA */
c0f3af97 5376 {
592d1631
L
5377 { Bad_Opcode },
5378 { Bad_Opcode },
ec6f095a 5379 { "vpminsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5380 },
5381
592a252b 5382 /* PREFIX_VEX_0FEB */
c0f3af97 5383 {
592d1631
L
5384 { Bad_Opcode },
5385 { Bad_Opcode },
ec6f095a 5386 { "vpor", { XM, Vex, EXx }, 0 },
c0f3af97
L
5387 },
5388
592a252b 5389 /* PREFIX_VEX_0FEC */
c0f3af97 5390 {
592d1631
L
5391 { Bad_Opcode },
5392 { Bad_Opcode },
ec6f095a 5393 { "vpaddsb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5394 },
5395
592a252b 5396 /* PREFIX_VEX_0FED */
c0f3af97 5397 {
592d1631
L
5398 { Bad_Opcode },
5399 { Bad_Opcode },
ec6f095a 5400 { "vpaddsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5401 },
5402
592a252b 5403 /* PREFIX_VEX_0FEE */
c0f3af97 5404 {
592d1631
L
5405 { Bad_Opcode },
5406 { Bad_Opcode },
ec6f095a 5407 { "vpmaxsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5408 },
5409
592a252b 5410 /* PREFIX_VEX_0FEF */
c0f3af97 5411 {
592d1631
L
5412 { Bad_Opcode },
5413 { Bad_Opcode },
ec6f095a 5414 { "vpxor", { XM, Vex, EXx }, 0 },
c0f3af97
L
5415 },
5416
592a252b 5417 /* PREFIX_VEX_0FF0 */
c0f3af97 5418 {
592d1631
L
5419 { Bad_Opcode },
5420 { Bad_Opcode },
5421 { Bad_Opcode },
592a252b 5422 { MOD_TABLE (MOD_VEX_0FF0_PREFIX_3) },
c0f3af97
L
5423 },
5424
592a252b 5425 /* PREFIX_VEX_0FF1 */
c0f3af97 5426 {
592d1631
L
5427 { Bad_Opcode },
5428 { Bad_Opcode },
ec6f095a 5429 { "vpsllw", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5430 },
5431
592a252b 5432 /* PREFIX_VEX_0FF2 */
c0f3af97 5433 {
592d1631
L
5434 { Bad_Opcode },
5435 { Bad_Opcode },
ec6f095a 5436 { "vpslld", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5437 },
5438
592a252b 5439 /* PREFIX_VEX_0FF3 */
c0f3af97 5440 {
592d1631
L
5441 { Bad_Opcode },
5442 { Bad_Opcode },
ec6f095a 5443 { "vpsllq", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5444 },
5445
592a252b 5446 /* PREFIX_VEX_0FF4 */
c0f3af97 5447 {
592d1631
L
5448 { Bad_Opcode },
5449 { Bad_Opcode },
ec6f095a 5450 { "vpmuludq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5451 },
5452
592a252b 5453 /* PREFIX_VEX_0FF5 */
c0f3af97 5454 {
592d1631
L
5455 { Bad_Opcode },
5456 { Bad_Opcode },
ec6f095a 5457 { "vpmaddwd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5458 },
5459
592a252b 5460 /* PREFIX_VEX_0FF6 */
c0f3af97 5461 {
592d1631
L
5462 { Bad_Opcode },
5463 { Bad_Opcode },
ec6f095a 5464 { "vpsadbw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5465 },
5466
592a252b 5467 /* PREFIX_VEX_0FF7 */
c0f3af97 5468 {
592d1631
L
5469 { Bad_Opcode },
5470 { Bad_Opcode },
592a252b 5471 { VEX_LEN_TABLE (VEX_LEN_0FF7_P_2) },
c0f3af97
L
5472 },
5473
592a252b 5474 /* PREFIX_VEX_0FF8 */
c0f3af97 5475 {
592d1631
L
5476 { Bad_Opcode },
5477 { Bad_Opcode },
ec6f095a 5478 { "vpsubb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5479 },
5480
592a252b 5481 /* PREFIX_VEX_0FF9 */
c0f3af97 5482 {
592d1631
L
5483 { Bad_Opcode },
5484 { Bad_Opcode },
ec6f095a 5485 { "vpsubw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5486 },
5487
592a252b 5488 /* PREFIX_VEX_0FFA */
c0f3af97 5489 {
592d1631
L
5490 { Bad_Opcode },
5491 { Bad_Opcode },
ec6f095a 5492 { "vpsubd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5493 },
5494
592a252b 5495 /* PREFIX_VEX_0FFB */
c0f3af97 5496 {
592d1631
L
5497 { Bad_Opcode },
5498 { Bad_Opcode },
ec6f095a 5499 { "vpsubq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5500 },
5501
592a252b 5502 /* PREFIX_VEX_0FFC */
c0f3af97 5503 {
592d1631
L
5504 { Bad_Opcode },
5505 { Bad_Opcode },
ec6f095a 5506 { "vpaddb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5507 },
5508
592a252b 5509 /* PREFIX_VEX_0FFD */
c0f3af97 5510 {
592d1631
L
5511 { Bad_Opcode },
5512 { Bad_Opcode },
ec6f095a 5513 { "vpaddw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5514 },
5515
592a252b 5516 /* PREFIX_VEX_0FFE */
c0f3af97 5517 {
592d1631
L
5518 { Bad_Opcode },
5519 { Bad_Opcode },
ec6f095a 5520 { "vpaddd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5521 },
5522
592a252b 5523 /* PREFIX_VEX_0F3800 */
c0f3af97 5524 {
592d1631
L
5525 { Bad_Opcode },
5526 { Bad_Opcode },
ec6f095a 5527 { "vpshufb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5528 },
5529
592a252b 5530 /* PREFIX_VEX_0F3801 */
c0f3af97 5531 {
592d1631
L
5532 { Bad_Opcode },
5533 { Bad_Opcode },
ec6f095a 5534 { "vphaddw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5535 },
5536
592a252b 5537 /* PREFIX_VEX_0F3802 */
c0f3af97 5538 {
592d1631
L
5539 { Bad_Opcode },
5540 { Bad_Opcode },
ec6f095a 5541 { "vphaddd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5542 },
5543
592a252b 5544 /* PREFIX_VEX_0F3803 */
c0f3af97 5545 {
592d1631
L
5546 { Bad_Opcode },
5547 { Bad_Opcode },
ec6f095a 5548 { "vphaddsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5549 },
5550
592a252b 5551 /* PREFIX_VEX_0F3804 */
c0f3af97 5552 {
592d1631
L
5553 { Bad_Opcode },
5554 { Bad_Opcode },
ec6f095a 5555 { "vpmaddubsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5556 },
5557
592a252b 5558 /* PREFIX_VEX_0F3805 */
c0f3af97 5559 {
592d1631
L
5560 { Bad_Opcode },
5561 { Bad_Opcode },
ec6f095a 5562 { "vphsubw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5563 },
5564
592a252b 5565 /* PREFIX_VEX_0F3806 */
c0f3af97 5566 {
592d1631
L
5567 { Bad_Opcode },
5568 { Bad_Opcode },
ec6f095a 5569 { "vphsubd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5570 },
5571
592a252b 5572 /* PREFIX_VEX_0F3807 */
c0f3af97 5573 {
592d1631
L
5574 { Bad_Opcode },
5575 { Bad_Opcode },
ec6f095a 5576 { "vphsubsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5577 },
5578
592a252b 5579 /* PREFIX_VEX_0F3808 */
c0f3af97 5580 {
592d1631
L
5581 { Bad_Opcode },
5582 { Bad_Opcode },
ec6f095a 5583 { "vpsignb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5584 },
5585
592a252b 5586 /* PREFIX_VEX_0F3809 */
c0f3af97 5587 {
592d1631
L
5588 { Bad_Opcode },
5589 { Bad_Opcode },
ec6f095a 5590 { "vpsignw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5591 },
5592
592a252b 5593 /* PREFIX_VEX_0F380A */
c0f3af97 5594 {
592d1631
L
5595 { Bad_Opcode },
5596 { Bad_Opcode },
ec6f095a 5597 { "vpsignd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5598 },
5599
592a252b 5600 /* PREFIX_VEX_0F380B */
c0f3af97 5601 {
592d1631
L
5602 { Bad_Opcode },
5603 { Bad_Opcode },
ec6f095a 5604 { "vpmulhrsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5605 },
5606
592a252b 5607 /* PREFIX_VEX_0F380C */
c0f3af97 5608 {
592d1631
L
5609 { Bad_Opcode },
5610 { Bad_Opcode },
592a252b 5611 { VEX_W_TABLE (VEX_W_0F380C_P_2) },
c0f3af97
L
5612 },
5613
592a252b 5614 /* PREFIX_VEX_0F380D */
c0f3af97 5615 {
592d1631
L
5616 { Bad_Opcode },
5617 { Bad_Opcode },
592a252b 5618 { VEX_W_TABLE (VEX_W_0F380D_P_2) },
c0f3af97
L
5619 },
5620
592a252b 5621 /* PREFIX_VEX_0F380E */
c0f3af97 5622 {
592d1631
L
5623 { Bad_Opcode },
5624 { Bad_Opcode },
592a252b 5625 { VEX_W_TABLE (VEX_W_0F380E_P_2) },
c0f3af97
L
5626 },
5627
592a252b 5628 /* PREFIX_VEX_0F380F */
c0f3af97 5629 {
592d1631
L
5630 { Bad_Opcode },
5631 { Bad_Opcode },
592a252b 5632 { VEX_W_TABLE (VEX_W_0F380F_P_2) },
c0f3af97
L
5633 },
5634
592a252b 5635 /* PREFIX_VEX_0F3813 */
c7b8aa3a
L
5636 {
5637 { Bad_Opcode },
5638 { Bad_Opcode },
bf890a93 5639 { "vcvtph2ps", { XM, EXxmmq }, 0 },
c7b8aa3a
L
5640 },
5641
6c30d220
L
5642 /* PREFIX_VEX_0F3816 */
5643 {
5644 { Bad_Opcode },
5645 { Bad_Opcode },
5646 { VEX_LEN_TABLE (VEX_LEN_0F3816_P_2) },
5647 },
5648
592a252b 5649 /* PREFIX_VEX_0F3817 */
c0f3af97 5650 {
592d1631
L
5651 { Bad_Opcode },
5652 { Bad_Opcode },
ec6f095a 5653 { "vptest", { XM, EXx }, 0 },
c0f3af97
L
5654 },
5655
592a252b 5656 /* PREFIX_VEX_0F3818 */
c0f3af97 5657 {
592d1631
L
5658 { Bad_Opcode },
5659 { Bad_Opcode },
6c30d220 5660 { VEX_W_TABLE (VEX_W_0F3818_P_2) },
c0f3af97
L
5661 },
5662
592a252b 5663 /* PREFIX_VEX_0F3819 */
c0f3af97 5664 {
592d1631
L
5665 { Bad_Opcode },
5666 { Bad_Opcode },
6c30d220 5667 { VEX_LEN_TABLE (VEX_LEN_0F3819_P_2) },
c0f3af97
L
5668 },
5669
592a252b 5670 /* PREFIX_VEX_0F381A */
c0f3af97 5671 {
592d1631
L
5672 { Bad_Opcode },
5673 { Bad_Opcode },
592a252b 5674 { MOD_TABLE (MOD_VEX_0F381A_PREFIX_2) },
c0f3af97
L
5675 },
5676
592a252b 5677 /* PREFIX_VEX_0F381C */
c0f3af97 5678 {
592d1631
L
5679 { Bad_Opcode },
5680 { Bad_Opcode },
ec6f095a 5681 { "vpabsb", { XM, EXx }, 0 },
c0f3af97
L
5682 },
5683
592a252b 5684 /* PREFIX_VEX_0F381D */
c0f3af97 5685 {
592d1631
L
5686 { Bad_Opcode },
5687 { Bad_Opcode },
ec6f095a 5688 { "vpabsw", { XM, EXx }, 0 },
c0f3af97
L
5689 },
5690
592a252b 5691 /* PREFIX_VEX_0F381E */
c0f3af97 5692 {
592d1631
L
5693 { Bad_Opcode },
5694 { Bad_Opcode },
ec6f095a 5695 { "vpabsd", { XM, EXx }, 0 },
c0f3af97
L
5696 },
5697
592a252b 5698 /* PREFIX_VEX_0F3820 */
c0f3af97 5699 {
592d1631
L
5700 { Bad_Opcode },
5701 { Bad_Opcode },
ec6f095a 5702 { "vpmovsxbw", { XM, EXxmmq }, 0 },
c0f3af97
L
5703 },
5704
592a252b 5705 /* PREFIX_VEX_0F3821 */
c0f3af97 5706 {
592d1631
L
5707 { Bad_Opcode },
5708 { Bad_Opcode },
ec6f095a 5709 { "vpmovsxbd", { XM, EXxmmqd }, 0 },
c0f3af97
L
5710 },
5711
592a252b 5712 /* PREFIX_VEX_0F3822 */
c0f3af97 5713 {
592d1631
L
5714 { Bad_Opcode },
5715 { Bad_Opcode },
ec6f095a 5716 { "vpmovsxbq", { XM, EXxmmdw }, 0 },
c0f3af97
L
5717 },
5718
592a252b 5719 /* PREFIX_VEX_0F3823 */
c0f3af97 5720 {
592d1631
L
5721 { Bad_Opcode },
5722 { Bad_Opcode },
ec6f095a 5723 { "vpmovsxwd", { XM, EXxmmq }, 0 },
c0f3af97
L
5724 },
5725
592a252b 5726 /* PREFIX_VEX_0F3824 */
c0f3af97 5727 {
592d1631
L
5728 { Bad_Opcode },
5729 { Bad_Opcode },
ec6f095a 5730 { "vpmovsxwq", { XM, EXxmmqd }, 0 },
c0f3af97
L
5731 },
5732
592a252b 5733 /* PREFIX_VEX_0F3825 */
c0f3af97 5734 {
592d1631
L
5735 { Bad_Opcode },
5736 { Bad_Opcode },
ec6f095a 5737 { "vpmovsxdq", { XM, EXxmmq }, 0 },
c0f3af97
L
5738 },
5739
592a252b 5740 /* PREFIX_VEX_0F3828 */
c0f3af97 5741 {
592d1631
L
5742 { Bad_Opcode },
5743 { Bad_Opcode },
ec6f095a 5744 { "vpmuldq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5745 },
5746
592a252b 5747 /* PREFIX_VEX_0F3829 */
c0f3af97 5748 {
592d1631
L
5749 { Bad_Opcode },
5750 { Bad_Opcode },
ec6f095a 5751 { "vpcmpeqq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5752 },
5753
592a252b 5754 /* PREFIX_VEX_0F382A */
c0f3af97 5755 {
592d1631
L
5756 { Bad_Opcode },
5757 { Bad_Opcode },
592a252b 5758 { MOD_TABLE (MOD_VEX_0F382A_PREFIX_2) },
c0f3af97
L
5759 },
5760
592a252b 5761 /* PREFIX_VEX_0F382B */
c0f3af97 5762 {
592d1631
L
5763 { Bad_Opcode },
5764 { Bad_Opcode },
ec6f095a 5765 { "vpackusdw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5766 },
5767
592a252b 5768 /* PREFIX_VEX_0F382C */
c0f3af97 5769 {
592d1631
L
5770 { Bad_Opcode },
5771 { Bad_Opcode },
592a252b 5772 { MOD_TABLE (MOD_VEX_0F382C_PREFIX_2) },
c0f3af97
L
5773 },
5774
592a252b 5775 /* PREFIX_VEX_0F382D */
c0f3af97 5776 {
592d1631
L
5777 { Bad_Opcode },
5778 { Bad_Opcode },
592a252b 5779 { MOD_TABLE (MOD_VEX_0F382D_PREFIX_2) },
c0f3af97
L
5780 },
5781
592a252b 5782 /* PREFIX_VEX_0F382E */
c0f3af97 5783 {
592d1631
L
5784 { Bad_Opcode },
5785 { Bad_Opcode },
592a252b 5786 { MOD_TABLE (MOD_VEX_0F382E_PREFIX_2) },
c0f3af97
L
5787 },
5788
592a252b 5789 /* PREFIX_VEX_0F382F */
c0f3af97 5790 {
592d1631
L
5791 { Bad_Opcode },
5792 { Bad_Opcode },
592a252b 5793 { MOD_TABLE (MOD_VEX_0F382F_PREFIX_2) },
c0f3af97
L
5794 },
5795
592a252b 5796 /* PREFIX_VEX_0F3830 */
c0f3af97 5797 {
592d1631
L
5798 { Bad_Opcode },
5799 { Bad_Opcode },
ec6f095a 5800 { "vpmovzxbw", { XM, EXxmmq }, 0 },
c0f3af97
L
5801 },
5802
592a252b 5803 /* PREFIX_VEX_0F3831 */
c0f3af97 5804 {
592d1631
L
5805 { Bad_Opcode },
5806 { Bad_Opcode },
ec6f095a 5807 { "vpmovzxbd", { XM, EXxmmqd }, 0 },
c0f3af97
L
5808 },
5809
592a252b 5810 /* PREFIX_VEX_0F3832 */
c0f3af97 5811 {
592d1631
L
5812 { Bad_Opcode },
5813 { Bad_Opcode },
ec6f095a 5814 { "vpmovzxbq", { XM, EXxmmdw }, 0 },
c0f3af97
L
5815 },
5816
592a252b 5817 /* PREFIX_VEX_0F3833 */
c0f3af97 5818 {
592d1631
L
5819 { Bad_Opcode },
5820 { Bad_Opcode },
ec6f095a 5821 { "vpmovzxwd", { XM, EXxmmq }, 0 },
c0f3af97
L
5822 },
5823
592a252b 5824 /* PREFIX_VEX_0F3834 */
c0f3af97 5825 {
592d1631
L
5826 { Bad_Opcode },
5827 { Bad_Opcode },
ec6f095a 5828 { "vpmovzxwq", { XM, EXxmmqd }, 0 },
c0f3af97
L
5829 },
5830
592a252b 5831 /* PREFIX_VEX_0F3835 */
c0f3af97 5832 {
592d1631
L
5833 { Bad_Opcode },
5834 { Bad_Opcode },
ec6f095a 5835 { "vpmovzxdq", { XM, EXxmmq }, 0 },
6c30d220
L
5836 },
5837
5838 /* PREFIX_VEX_0F3836 */
5839 {
5840 { Bad_Opcode },
5841 { Bad_Opcode },
5842 { VEX_LEN_TABLE (VEX_LEN_0F3836_P_2) },
c0f3af97
L
5843 },
5844
592a252b 5845 /* PREFIX_VEX_0F3837 */
c0f3af97 5846 {
592d1631
L
5847 { Bad_Opcode },
5848 { Bad_Opcode },
ec6f095a 5849 { "vpcmpgtq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5850 },
5851
592a252b 5852 /* PREFIX_VEX_0F3838 */
c0f3af97 5853 {
592d1631
L
5854 { Bad_Opcode },
5855 { Bad_Opcode },
ec6f095a 5856 { "vpminsb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5857 },
5858
592a252b 5859 /* PREFIX_VEX_0F3839 */
c0f3af97 5860 {
592d1631
L
5861 { Bad_Opcode },
5862 { Bad_Opcode },
ec6f095a 5863 { "vpminsd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5864 },
5865
592a252b 5866 /* PREFIX_VEX_0F383A */
c0f3af97 5867 {
592d1631
L
5868 { Bad_Opcode },
5869 { Bad_Opcode },
ec6f095a 5870 { "vpminuw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5871 },
5872
592a252b 5873 /* PREFIX_VEX_0F383B */
c0f3af97 5874 {
592d1631
L
5875 { Bad_Opcode },
5876 { Bad_Opcode },
ec6f095a 5877 { "vpminud", { XM, Vex, EXx }, 0 },
c0f3af97
L
5878 },
5879
592a252b 5880 /* PREFIX_VEX_0F383C */
c0f3af97 5881 {
592d1631
L
5882 { Bad_Opcode },
5883 { Bad_Opcode },
ec6f095a 5884 { "vpmaxsb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5885 },
5886
592a252b 5887 /* PREFIX_VEX_0F383D */
c0f3af97 5888 {
592d1631
L
5889 { Bad_Opcode },
5890 { Bad_Opcode },
ec6f095a 5891 { "vpmaxsd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5892 },
5893
592a252b 5894 /* PREFIX_VEX_0F383E */
c0f3af97 5895 {
592d1631
L
5896 { Bad_Opcode },
5897 { Bad_Opcode },
ec6f095a 5898 { "vpmaxuw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5899 },
5900
592a252b 5901 /* PREFIX_VEX_0F383F */
c0f3af97 5902 {
592d1631
L
5903 { Bad_Opcode },
5904 { Bad_Opcode },
ec6f095a 5905 { "vpmaxud", { XM, Vex, EXx }, 0 },
c0f3af97
L
5906 },
5907
592a252b 5908 /* PREFIX_VEX_0F3840 */
c0f3af97 5909 {
592d1631
L
5910 { Bad_Opcode },
5911 { Bad_Opcode },
ec6f095a 5912 { "vpmulld", { XM, Vex, EXx }, 0 },
c0f3af97
L
5913 },
5914
592a252b 5915 /* PREFIX_VEX_0F3841 */
c0f3af97 5916 {
592d1631
L
5917 { Bad_Opcode },
5918 { Bad_Opcode },
592a252b 5919 { VEX_LEN_TABLE (VEX_LEN_0F3841_P_2) },
c0f3af97
L
5920 },
5921
6c30d220
L
5922 /* PREFIX_VEX_0F3845 */
5923 {
5924 { Bad_Opcode },
5925 { Bad_Opcode },
bf890a93 5926 { "vpsrlv%LW", { XM, Vex, EXx }, 0 },
6c30d220
L
5927 },
5928
5929 /* PREFIX_VEX_0F3846 */
5930 {
5931 { Bad_Opcode },
5932 { Bad_Opcode },
5933 { VEX_W_TABLE (VEX_W_0F3846_P_2) },
5934 },
5935
5936 /* PREFIX_VEX_0F3847 */
5937 {
5938 { Bad_Opcode },
5939 { Bad_Opcode },
bf890a93 5940 { "vpsllv%LW", { XM, Vex, EXx }, 0 },
6c30d220
L
5941 },
5942
5943 /* PREFIX_VEX_0F3858 */
5944 {
5945 { Bad_Opcode },
5946 { Bad_Opcode },
5947 { VEX_W_TABLE (VEX_W_0F3858_P_2) },
5948 },
5949
5950 /* PREFIX_VEX_0F3859 */
5951 {
5952 { Bad_Opcode },
5953 { Bad_Opcode },
5954 { VEX_W_TABLE (VEX_W_0F3859_P_2) },
5955 },
5956
5957 /* PREFIX_VEX_0F385A */
5958 {
5959 { Bad_Opcode },
5960 { Bad_Opcode },
5961 { MOD_TABLE (MOD_VEX_0F385A_PREFIX_2) },
5962 },
5963
5964 /* PREFIX_VEX_0F3878 */
5965 {
5966 { Bad_Opcode },
5967 { Bad_Opcode },
5968 { VEX_W_TABLE (VEX_W_0F3878_P_2) },
5969 },
5970
5971 /* PREFIX_VEX_0F3879 */
5972 {
5973 { Bad_Opcode },
5974 { Bad_Opcode },
5975 { VEX_W_TABLE (VEX_W_0F3879_P_2) },
5976 },
5977
5978 /* PREFIX_VEX_0F388C */
5979 {
5980 { Bad_Opcode },
5981 { Bad_Opcode },
f7002f42 5982 { MOD_TABLE (MOD_VEX_0F388C_PREFIX_2) },
6c30d220
L
5983 },
5984
5985 /* PREFIX_VEX_0F388E */
5986 {
5987 { Bad_Opcode },
5988 { Bad_Opcode },
f7002f42 5989 { MOD_TABLE (MOD_VEX_0F388E_PREFIX_2) },
6c30d220
L
5990 },
5991
5992 /* PREFIX_VEX_0F3890 */
5993 {
5994 { Bad_Opcode },
5995 { Bad_Opcode },
bf890a93 5996 { "vpgatherd%LW", { XM, MVexVSIBDWpX, Vex }, 0 },
6c30d220
L
5997 },
5998
5999 /* PREFIX_VEX_0F3891 */
6000 {
6001 { Bad_Opcode },
6002 { Bad_Opcode },
bf890a93 6003 { "vpgatherq%LW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ }, 0 },
6c30d220
L
6004 },
6005
6006 /* PREFIX_VEX_0F3892 */
6007 {
6008 { Bad_Opcode },
6009 { Bad_Opcode },
bf890a93 6010 { "vgatherdp%XW", { XM, MVexVSIBDWpX, Vex }, 0 },
6c30d220
L
6011 },
6012
6013 /* PREFIX_VEX_0F3893 */
6014 {
6015 { Bad_Opcode },
6016 { Bad_Opcode },
bf890a93 6017 { "vgatherqp%XW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ }, 0 },
6c30d220
L
6018 },
6019
592a252b 6020 /* PREFIX_VEX_0F3896 */
a5ff0eb2 6021 {
592d1631
L
6022 { Bad_Opcode },
6023 { Bad_Opcode },
bf890a93 6024 { "vfmaddsub132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6025 },
6026
592a252b 6027 /* PREFIX_VEX_0F3897 */
a5ff0eb2 6028 {
592d1631
L
6029 { Bad_Opcode },
6030 { Bad_Opcode },
bf890a93 6031 { "vfmsubadd132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6032 },
6033
592a252b 6034 /* PREFIX_VEX_0F3898 */
a5ff0eb2 6035 {
592d1631
L
6036 { Bad_Opcode },
6037 { Bad_Opcode },
bf890a93 6038 { "vfmadd132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6039 },
6040
592a252b 6041 /* PREFIX_VEX_0F3899 */
a5ff0eb2 6042 {
592d1631
L
6043 { Bad_Opcode },
6044 { Bad_Opcode },
bf890a93 6045 { "vfmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
a5ff0eb2
L
6046 },
6047
592a252b 6048 /* PREFIX_VEX_0F389A */
a5ff0eb2 6049 {
592d1631
L
6050 { Bad_Opcode },
6051 { Bad_Opcode },
bf890a93 6052 { "vfmsub132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6053 },
6054
592a252b 6055 /* PREFIX_VEX_0F389B */
c0f3af97 6056 {
592d1631
L
6057 { Bad_Opcode },
6058 { Bad_Opcode },
bf890a93 6059 { "vfmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6060 },
6061
592a252b 6062 /* PREFIX_VEX_0F389C */
c0f3af97 6063 {
592d1631
L
6064 { Bad_Opcode },
6065 { Bad_Opcode },
bf890a93 6066 { "vfnmadd132p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6067 },
6068
592a252b 6069 /* PREFIX_VEX_0F389D */
c0f3af97 6070 {
592d1631
L
6071 { Bad_Opcode },
6072 { Bad_Opcode },
bf890a93 6073 { "vfnmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6074 },
6075
592a252b 6076 /* PREFIX_VEX_0F389E */
c0f3af97 6077 {
592d1631
L
6078 { Bad_Opcode },
6079 { Bad_Opcode },
bf890a93 6080 { "vfnmsub132p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6081 },
6082
592a252b 6083 /* PREFIX_VEX_0F389F */
c0f3af97 6084 {
592d1631
L
6085 { Bad_Opcode },
6086 { Bad_Opcode },
bf890a93 6087 { "vfnmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6088 },
6089
592a252b 6090 /* PREFIX_VEX_0F38A6 */
c0f3af97 6091 {
592d1631
L
6092 { Bad_Opcode },
6093 { Bad_Opcode },
bf890a93 6094 { "vfmaddsub213p%XW", { XM, Vex, EXx }, 0 },
592d1631 6095 { Bad_Opcode },
c0f3af97
L
6096 },
6097
592a252b 6098 /* PREFIX_VEX_0F38A7 */
c0f3af97 6099 {
592d1631
L
6100 { Bad_Opcode },
6101 { Bad_Opcode },
bf890a93 6102 { "vfmsubadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6103 },
6104
592a252b 6105 /* PREFIX_VEX_0F38A8 */
c0f3af97 6106 {
592d1631
L
6107 { Bad_Opcode },
6108 { Bad_Opcode },
bf890a93 6109 { "vfmadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6110 },
6111
592a252b 6112 /* PREFIX_VEX_0F38A9 */
c0f3af97 6113 {
592d1631
L
6114 { Bad_Opcode },
6115 { Bad_Opcode },
bf890a93 6116 { "vfmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6117 },
6118
592a252b 6119 /* PREFIX_VEX_0F38AA */
c0f3af97 6120 {
592d1631
L
6121 { Bad_Opcode },
6122 { Bad_Opcode },
bf890a93 6123 { "vfmsub213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6124 },
6125
592a252b 6126 /* PREFIX_VEX_0F38AB */
c0f3af97 6127 {
592d1631
L
6128 { Bad_Opcode },
6129 { Bad_Opcode },
bf890a93 6130 { "vfmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6131 },
6132
592a252b 6133 /* PREFIX_VEX_0F38AC */
c0f3af97 6134 {
592d1631
L
6135 { Bad_Opcode },
6136 { Bad_Opcode },
bf890a93 6137 { "vfnmadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6138 },
6139
592a252b 6140 /* PREFIX_VEX_0F38AD */
c0f3af97 6141 {
592d1631
L
6142 { Bad_Opcode },
6143 { Bad_Opcode },
bf890a93 6144 { "vfnmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6145 },
6146
592a252b 6147 /* PREFIX_VEX_0F38AE */
c0f3af97 6148 {
592d1631
L
6149 { Bad_Opcode },
6150 { Bad_Opcode },
bf890a93 6151 { "vfnmsub213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6152 },
6153
592a252b 6154 /* PREFIX_VEX_0F38AF */
c0f3af97 6155 {
592d1631
L
6156 { Bad_Opcode },
6157 { Bad_Opcode },
bf890a93 6158 { "vfnmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6159 },
6160
592a252b 6161 /* PREFIX_VEX_0F38B6 */
c0f3af97 6162 {
592d1631
L
6163 { Bad_Opcode },
6164 { Bad_Opcode },
bf890a93 6165 { "vfmaddsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6166 },
6167
592a252b 6168 /* PREFIX_VEX_0F38B7 */
c0f3af97 6169 {
592d1631
L
6170 { Bad_Opcode },
6171 { Bad_Opcode },
bf890a93 6172 { "vfmsubadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6173 },
6174
592a252b 6175 /* PREFIX_VEX_0F38B8 */
c0f3af97 6176 {
592d1631
L
6177 { Bad_Opcode },
6178 { Bad_Opcode },
bf890a93 6179 { "vfmadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6180 },
6181
592a252b 6182 /* PREFIX_VEX_0F38B9 */
c0f3af97 6183 {
592d1631
L
6184 { Bad_Opcode },
6185 { Bad_Opcode },
bf890a93 6186 { "vfmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6187 },
6188
592a252b 6189 /* PREFIX_VEX_0F38BA */
c0f3af97 6190 {
592d1631
L
6191 { Bad_Opcode },
6192 { Bad_Opcode },
bf890a93 6193 { "vfmsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6194 },
6195
592a252b 6196 /* PREFIX_VEX_0F38BB */
c0f3af97 6197 {
592d1631
L
6198 { Bad_Opcode },
6199 { Bad_Opcode },
bf890a93 6200 { "vfmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6201 },
6202
592a252b 6203 /* PREFIX_VEX_0F38BC */
c0f3af97 6204 {
592d1631
L
6205 { Bad_Opcode },
6206 { Bad_Opcode },
bf890a93 6207 { "vfnmadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6208 },
6209
592a252b 6210 /* PREFIX_VEX_0F38BD */
c0f3af97 6211 {
592d1631
L
6212 { Bad_Opcode },
6213 { Bad_Opcode },
bf890a93 6214 { "vfnmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6215 },
6216
592a252b 6217 /* PREFIX_VEX_0F38BE */
c0f3af97 6218 {
592d1631
L
6219 { Bad_Opcode },
6220 { Bad_Opcode },
bf890a93 6221 { "vfnmsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6222 },
6223
592a252b 6224 /* PREFIX_VEX_0F38BF */
c0f3af97 6225 {
592d1631
L
6226 { Bad_Opcode },
6227 { Bad_Opcode },
bf890a93 6228 { "vfnmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6229 },
6230
48521003
IT
6231 /* PREFIX_VEX_0F38CF */
6232 {
6233 { Bad_Opcode },
6234 { Bad_Opcode },
6235 { VEX_W_TABLE (VEX_W_0F38CF_P_2) },
6236 },
6237
592a252b 6238 /* PREFIX_VEX_0F38DB */
c0f3af97 6239 {
592d1631
L
6240 { Bad_Opcode },
6241 { Bad_Opcode },
592a252b 6242 { VEX_LEN_TABLE (VEX_LEN_0F38DB_P_2) },
c0f3af97
L
6243 },
6244
592a252b 6245 /* PREFIX_VEX_0F38DC */
c0f3af97 6246 {
592d1631
L
6247 { Bad_Opcode },
6248 { Bad_Opcode },
8dcf1fad 6249 { "vaesenc", { XM, Vex, EXx }, 0 },
c0f3af97
L
6250 },
6251
592a252b 6252 /* PREFIX_VEX_0F38DD */
c0f3af97 6253 {
592d1631
L
6254 { Bad_Opcode },
6255 { Bad_Opcode },
8dcf1fad 6256 { "vaesenclast", { XM, Vex, EXx }, 0 },
c0f3af97
L
6257 },
6258
592a252b 6259 /* PREFIX_VEX_0F38DE */
c0f3af97 6260 {
592d1631
L
6261 { Bad_Opcode },
6262 { Bad_Opcode },
8dcf1fad 6263 { "vaesdec", { XM, Vex, EXx }, 0 },
c0f3af97
L
6264 },
6265
592a252b 6266 /* PREFIX_VEX_0F38DF */
c0f3af97 6267 {
592d1631
L
6268 { Bad_Opcode },
6269 { Bad_Opcode },
8dcf1fad 6270 { "vaesdeclast", { XM, Vex, EXx }, 0 },
c0f3af97
L
6271 },
6272
f12dc422
L
6273 /* PREFIX_VEX_0F38F2 */
6274 {
6275 { VEX_LEN_TABLE (VEX_LEN_0F38F2_P_0) },
6276 },
6277
6278 /* PREFIX_VEX_0F38F3_REG_1 */
6279 {
6280 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_1_P_0) },
6281 },
6282
6283 /* PREFIX_VEX_0F38F3_REG_2 */
6284 {
6285 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_2_P_0) },
6286 },
6287
6288 /* PREFIX_VEX_0F38F3_REG_3 */
6289 {
6290 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_3_P_0) },
6291 },
6292
6c30d220
L
6293 /* PREFIX_VEX_0F38F5 */
6294 {
6295 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_0) },
6296 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_1) },
6297 { Bad_Opcode },
6298 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_3) },
6299 },
6300
6301 /* PREFIX_VEX_0F38F6 */
6302 {
6303 { Bad_Opcode },
6304 { Bad_Opcode },
6305 { Bad_Opcode },
6306 { VEX_LEN_TABLE (VEX_LEN_0F38F6_P_3) },
6307 },
6308
f12dc422
L
6309 /* PREFIX_VEX_0F38F7 */
6310 {
6311 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_0) },
6c30d220
L
6312 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_1) },
6313 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_2) },
6314 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_3) },
6315 },
6316
6317 /* PREFIX_VEX_0F3A00 */
6318 {
6319 { Bad_Opcode },
6320 { Bad_Opcode },
6321 { VEX_LEN_TABLE (VEX_LEN_0F3A00_P_2) },
6322 },
6323
6324 /* PREFIX_VEX_0F3A01 */
6325 {
6326 { Bad_Opcode },
6327 { Bad_Opcode },
6328 { VEX_LEN_TABLE (VEX_LEN_0F3A01_P_2) },
6329 },
6330
6331 /* PREFIX_VEX_0F3A02 */
6332 {
6333 { Bad_Opcode },
6334 { Bad_Opcode },
6335 { VEX_W_TABLE (VEX_W_0F3A02_P_2) },
f12dc422
L
6336 },
6337
592a252b 6338 /* PREFIX_VEX_0F3A04 */
c0f3af97 6339 {
592d1631
L
6340 { Bad_Opcode },
6341 { Bad_Opcode },
592a252b 6342 { VEX_W_TABLE (VEX_W_0F3A04_P_2) },
c0f3af97
L
6343 },
6344
592a252b 6345 /* PREFIX_VEX_0F3A05 */
c0f3af97 6346 {
592d1631
L
6347 { Bad_Opcode },
6348 { Bad_Opcode },
592a252b 6349 { VEX_W_TABLE (VEX_W_0F3A05_P_2) },
c0f3af97
L
6350 },
6351
592a252b 6352 /* PREFIX_VEX_0F3A06 */
c0f3af97 6353 {
592d1631
L
6354 { Bad_Opcode },
6355 { Bad_Opcode },
592a252b 6356 { VEX_LEN_TABLE (VEX_LEN_0F3A06_P_2) },
c0f3af97
L
6357 },
6358
592a252b 6359 /* PREFIX_VEX_0F3A08 */
c0f3af97 6360 {
592d1631
L
6361 { Bad_Opcode },
6362 { Bad_Opcode },
ec6f095a 6363 { "vroundps", { XM, EXx, Ib }, 0 },
c0f3af97
L
6364 },
6365
592a252b 6366 /* PREFIX_VEX_0F3A09 */
c0f3af97 6367 {
592d1631
L
6368 { Bad_Opcode },
6369 { Bad_Opcode },
ec6f095a 6370 { "vroundpd", { XM, EXx, Ib }, 0 },
c0f3af97
L
6371 },
6372
592a252b 6373 /* PREFIX_VEX_0F3A0A */
c0f3af97 6374 {
592d1631
L
6375 { Bad_Opcode },
6376 { Bad_Opcode },
ec6f095a 6377 { "vroundss", { XMScalar, VexScalar, EXdScalar, Ib }, 0 },
0bfee649
L
6378 },
6379
592a252b 6380 /* PREFIX_VEX_0F3A0B */
0bfee649 6381 {
592d1631
L
6382 { Bad_Opcode },
6383 { Bad_Opcode },
ec6f095a 6384 { "vroundsd", { XMScalar, VexScalar, EXqScalar, Ib }, 0 },
0bfee649
L
6385 },
6386
592a252b 6387 /* PREFIX_VEX_0F3A0C */
0bfee649 6388 {
592d1631
L
6389 { Bad_Opcode },
6390 { Bad_Opcode },
ec6f095a 6391 { "vblendps", { XM, Vex, EXx, Ib }, 0 },
0bfee649
L
6392 },
6393
592a252b 6394 /* PREFIX_VEX_0F3A0D */
0bfee649 6395 {
592d1631
L
6396 { Bad_Opcode },
6397 { Bad_Opcode },
ec6f095a 6398 { "vblendpd", { XM, Vex, EXx, Ib }, 0 },
c0f3af97
L
6399 },
6400
592a252b 6401 /* PREFIX_VEX_0F3A0E */
0bfee649 6402 {
592d1631
L
6403 { Bad_Opcode },
6404 { Bad_Opcode },
ec6f095a 6405 { "vpblendw", { XM, Vex, EXx, Ib }, 0 },
0bfee649
L
6406 },
6407
592a252b 6408 /* PREFIX_VEX_0F3A0F */
0bfee649 6409 {
592d1631
L
6410 { Bad_Opcode },
6411 { Bad_Opcode },
ec6f095a 6412 { "vpalignr", { XM, Vex, EXx, Ib }, 0 },
0bfee649
L
6413 },
6414
592a252b 6415 /* PREFIX_VEX_0F3A14 */
0bfee649 6416 {
592d1631
L
6417 { Bad_Opcode },
6418 { Bad_Opcode },
592a252b 6419 { VEX_LEN_TABLE (VEX_LEN_0F3A14_P_2) },
0bfee649
L
6420 },
6421
592a252b 6422 /* PREFIX_VEX_0F3A15 */
0bfee649 6423 {
592d1631
L
6424 { Bad_Opcode },
6425 { Bad_Opcode },
592a252b 6426 { VEX_LEN_TABLE (VEX_LEN_0F3A15_P_2) },
0bfee649
L
6427 },
6428
592a252b 6429 /* PREFIX_VEX_0F3A16 */
c0f3af97 6430 {
592d1631
L
6431 { Bad_Opcode },
6432 { Bad_Opcode },
592a252b 6433 { VEX_LEN_TABLE (VEX_LEN_0F3A16_P_2) },
c0f3af97
L
6434 },
6435
592a252b 6436 /* PREFIX_VEX_0F3A17 */
c0f3af97 6437 {
592d1631
L
6438 { Bad_Opcode },
6439 { Bad_Opcode },
592a252b 6440 { VEX_LEN_TABLE (VEX_LEN_0F3A17_P_2) },
c0f3af97
L
6441 },
6442
592a252b 6443 /* PREFIX_VEX_0F3A18 */
c0f3af97 6444 {
592d1631
L
6445 { Bad_Opcode },
6446 { Bad_Opcode },
592a252b 6447 { VEX_LEN_TABLE (VEX_LEN_0F3A18_P_2) },
c0f3af97
L
6448 },
6449
592a252b 6450 /* PREFIX_VEX_0F3A19 */
c0f3af97 6451 {
592d1631
L
6452 { Bad_Opcode },
6453 { Bad_Opcode },
592a252b 6454 { VEX_LEN_TABLE (VEX_LEN_0F3A19_P_2) },
c0f3af97
L
6455 },
6456
592a252b 6457 /* PREFIX_VEX_0F3A1D */
c7b8aa3a
L
6458 {
6459 { Bad_Opcode },
6460 { Bad_Opcode },
bf890a93 6461 { "vcvtps2ph", { EXxmmq, XM, Ib }, 0 },
c7b8aa3a
L
6462 },
6463
592a252b 6464 /* PREFIX_VEX_0F3A20 */
c0f3af97 6465 {
592d1631
L
6466 { Bad_Opcode },
6467 { Bad_Opcode },
592a252b 6468 { VEX_LEN_TABLE (VEX_LEN_0F3A20_P_2) },
c0f3af97
L
6469 },
6470
592a252b 6471 /* PREFIX_VEX_0F3A21 */
c0f3af97 6472 {
592d1631
L
6473 { Bad_Opcode },
6474 { Bad_Opcode },
592a252b 6475 { VEX_LEN_TABLE (VEX_LEN_0F3A21_P_2) },
c0f3af97
L
6476 },
6477
592a252b 6478 /* PREFIX_VEX_0F3A22 */
0bfee649 6479 {
592d1631
L
6480 { Bad_Opcode },
6481 { Bad_Opcode },
592a252b 6482 { VEX_LEN_TABLE (VEX_LEN_0F3A22_P_2) },
0bfee649
L
6483 },
6484
43234a1e
L
6485 /* PREFIX_VEX_0F3A30 */
6486 {
6487 { Bad_Opcode },
6488 { Bad_Opcode },
6489 { VEX_LEN_TABLE (VEX_LEN_0F3A30_P_2) },
6490 },
6491
1ba585e8
IT
6492 /* PREFIX_VEX_0F3A31 */
6493 {
6494 { Bad_Opcode },
6495 { Bad_Opcode },
6496 { VEX_LEN_TABLE (VEX_LEN_0F3A31_P_2) },
6497 },
6498
43234a1e
L
6499 /* PREFIX_VEX_0F3A32 */
6500 {
6501 { Bad_Opcode },
6502 { Bad_Opcode },
6503 { VEX_LEN_TABLE (VEX_LEN_0F3A32_P_2) },
6504 },
6505
1ba585e8
IT
6506 /* PREFIX_VEX_0F3A33 */
6507 {
6508 { Bad_Opcode },
6509 { Bad_Opcode },
6510 { VEX_LEN_TABLE (VEX_LEN_0F3A33_P_2) },
6511 },
6512
6c30d220
L
6513 /* PREFIX_VEX_0F3A38 */
6514 {
6515 { Bad_Opcode },
6516 { Bad_Opcode },
6517 { VEX_LEN_TABLE (VEX_LEN_0F3A38_P_2) },
6518 },
6519
6520 /* PREFIX_VEX_0F3A39 */
6521 {
6522 { Bad_Opcode },
6523 { Bad_Opcode },
6524 { VEX_LEN_TABLE (VEX_LEN_0F3A39_P_2) },
6525 },
6526
592a252b 6527 /* PREFIX_VEX_0F3A40 */
c0f3af97 6528 {
592d1631
L
6529 { Bad_Opcode },
6530 { Bad_Opcode },
ec6f095a 6531 { "vdpps", { XM, Vex, EXx, Ib }, 0 },
c0f3af97
L
6532 },
6533
592a252b 6534 /* PREFIX_VEX_0F3A41 */
c0f3af97 6535 {
592d1631
L
6536 { Bad_Opcode },
6537 { Bad_Opcode },
592a252b 6538 { VEX_LEN_TABLE (VEX_LEN_0F3A41_P_2) },
c0f3af97
L
6539 },
6540
592a252b 6541 /* PREFIX_VEX_0F3A42 */
c0f3af97 6542 {
592d1631
L
6543 { Bad_Opcode },
6544 { Bad_Opcode },
ec6f095a 6545 { "vmpsadbw", { XM, Vex, EXx, Ib }, 0 },
c0f3af97
L
6546 },
6547
592a252b 6548 /* PREFIX_VEX_0F3A44 */
ce2f5b3c 6549 {
592d1631
L
6550 { Bad_Opcode },
6551 { Bad_Opcode },
ff1982d5 6552 { "vpclmulqdq", { XM, Vex, EXx, PCLMUL }, 0 },
ce2f5b3c
L
6553 },
6554
6c30d220
L
6555 /* PREFIX_VEX_0F3A46 */
6556 {
6557 { Bad_Opcode },
6558 { Bad_Opcode },
6559 { VEX_LEN_TABLE (VEX_LEN_0F3A46_P_2) },
6560 },
6561
592a252b 6562 /* PREFIX_VEX_0F3A48 */
a683cc34
SP
6563 {
6564 { Bad_Opcode },
6565 { Bad_Opcode },
592a252b 6566 { VEX_W_TABLE (VEX_W_0F3A48_P_2) },
a683cc34
SP
6567 },
6568
592a252b 6569 /* PREFIX_VEX_0F3A49 */
a683cc34
SP
6570 {
6571 { Bad_Opcode },
6572 { Bad_Opcode },
592a252b 6573 { VEX_W_TABLE (VEX_W_0F3A49_P_2) },
a683cc34
SP
6574 },
6575
592a252b 6576 /* PREFIX_VEX_0F3A4A */
c0f3af97 6577 {
592d1631
L
6578 { Bad_Opcode },
6579 { Bad_Opcode },
592a252b 6580 { VEX_W_TABLE (VEX_W_0F3A4A_P_2) },
c0f3af97
L
6581 },
6582
592a252b 6583 /* PREFIX_VEX_0F3A4B */
c0f3af97 6584 {
592d1631
L
6585 { Bad_Opcode },
6586 { Bad_Opcode },
592a252b 6587 { VEX_W_TABLE (VEX_W_0F3A4B_P_2) },
c0f3af97
L
6588 },
6589
592a252b 6590 /* PREFIX_VEX_0F3A4C */
c0f3af97 6591 {
592d1631
L
6592 { Bad_Opcode },
6593 { Bad_Opcode },
6c30d220 6594 { VEX_W_TABLE (VEX_W_0F3A4C_P_2) },
c0f3af97
L
6595 },
6596
592a252b 6597 /* PREFIX_VEX_0F3A5C */
922d8de8 6598 {
592d1631
L
6599 { Bad_Opcode },
6600 { Bad_Opcode },
3a2430e0 6601 { "vfmaddsubps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6602 },
6603
592a252b 6604 /* PREFIX_VEX_0F3A5D */
922d8de8 6605 {
592d1631
L
6606 { Bad_Opcode },
6607 { Bad_Opcode },
3a2430e0 6608 { "vfmaddsubpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6609 },
6610
592a252b 6611 /* PREFIX_VEX_0F3A5E */
922d8de8 6612 {
592d1631
L
6613 { Bad_Opcode },
6614 { Bad_Opcode },
3a2430e0 6615 { "vfmsubaddps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6616 },
6617
592a252b 6618 /* PREFIX_VEX_0F3A5F */
922d8de8 6619 {
592d1631
L
6620 { Bad_Opcode },
6621 { Bad_Opcode },
3a2430e0 6622 { "vfmsubaddpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6623 },
6624
592a252b 6625 /* PREFIX_VEX_0F3A60 */
c0f3af97 6626 {
592d1631
L
6627 { Bad_Opcode },
6628 { Bad_Opcode },
592a252b 6629 { VEX_LEN_TABLE (VEX_LEN_0F3A60_P_2) },
592d1631 6630 { Bad_Opcode },
c0f3af97
L
6631 },
6632
592a252b 6633 /* PREFIX_VEX_0F3A61 */
c0f3af97 6634 {
592d1631
L
6635 { Bad_Opcode },
6636 { Bad_Opcode },
592a252b 6637 { VEX_LEN_TABLE (VEX_LEN_0F3A61_P_2) },
c0f3af97
L
6638 },
6639
592a252b 6640 /* PREFIX_VEX_0F3A62 */
c0f3af97 6641 {
592d1631
L
6642 { Bad_Opcode },
6643 { Bad_Opcode },
592a252b 6644 { VEX_LEN_TABLE (VEX_LEN_0F3A62_P_2) },
c0f3af97
L
6645 },
6646
592a252b 6647 /* PREFIX_VEX_0F3A63 */
c0f3af97 6648 {
592d1631
L
6649 { Bad_Opcode },
6650 { Bad_Opcode },
592a252b 6651 { VEX_LEN_TABLE (VEX_LEN_0F3A63_P_2) },
c0f3af97 6652 },
a5ff0eb2 6653
592a252b 6654 /* PREFIX_VEX_0F3A68 */
922d8de8 6655 {
592d1631
L
6656 { Bad_Opcode },
6657 { Bad_Opcode },
3a2430e0 6658 { "vfmaddps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6659 },
6660
592a252b 6661 /* PREFIX_VEX_0F3A69 */
922d8de8 6662 {
592d1631
L
6663 { Bad_Opcode },
6664 { Bad_Opcode },
3a2430e0 6665 { "vfmaddpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6666 },
6667
592a252b 6668 /* PREFIX_VEX_0F3A6A */
922d8de8 6669 {
592d1631
L
6670 { Bad_Opcode },
6671 { Bad_Opcode },
592a252b 6672 { VEX_LEN_TABLE (VEX_LEN_0F3A6A_P_2) },
922d8de8
DR
6673 },
6674
592a252b 6675 /* PREFIX_VEX_0F3A6B */
922d8de8 6676 {
592d1631
L
6677 { Bad_Opcode },
6678 { Bad_Opcode },
592a252b 6679 { VEX_LEN_TABLE (VEX_LEN_0F3A6B_P_2) },
922d8de8
DR
6680 },
6681
592a252b 6682 /* PREFIX_VEX_0F3A6C */
922d8de8 6683 {
592d1631
L
6684 { Bad_Opcode },
6685 { Bad_Opcode },
3a2430e0 6686 { "vfmsubps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6687 },
6688
592a252b 6689 /* PREFIX_VEX_0F3A6D */
922d8de8 6690 {
592d1631
L
6691 { Bad_Opcode },
6692 { Bad_Opcode },
3a2430e0 6693 { "vfmsubpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6694 },
6695
592a252b 6696 /* PREFIX_VEX_0F3A6E */
922d8de8 6697 {
592d1631
L
6698 { Bad_Opcode },
6699 { Bad_Opcode },
592a252b 6700 { VEX_LEN_TABLE (VEX_LEN_0F3A6E_P_2) },
922d8de8
DR
6701 },
6702
592a252b 6703 /* PREFIX_VEX_0F3A6F */
922d8de8 6704 {
592d1631
L
6705 { Bad_Opcode },
6706 { Bad_Opcode },
592a252b 6707 { VEX_LEN_TABLE (VEX_LEN_0F3A6F_P_2) },
922d8de8
DR
6708 },
6709
592a252b 6710 /* PREFIX_VEX_0F3A78 */
922d8de8 6711 {
592d1631
L
6712 { Bad_Opcode },
6713 { Bad_Opcode },
3a2430e0 6714 { "vfnmaddps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6715 },
6716
592a252b 6717 /* PREFIX_VEX_0F3A79 */
922d8de8 6718 {
592d1631
L
6719 { Bad_Opcode },
6720 { Bad_Opcode },
3a2430e0 6721 { "vfnmaddpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6722 },
6723
592a252b 6724 /* PREFIX_VEX_0F3A7A */
922d8de8 6725 {
592d1631
L
6726 { Bad_Opcode },
6727 { Bad_Opcode },
592a252b 6728 { VEX_LEN_TABLE (VEX_LEN_0F3A7A_P_2) },
922d8de8
DR
6729 },
6730
592a252b 6731 /* PREFIX_VEX_0F3A7B */
922d8de8 6732 {
592d1631
L
6733 { Bad_Opcode },
6734 { Bad_Opcode },
592a252b 6735 { VEX_LEN_TABLE (VEX_LEN_0F3A7B_P_2) },
922d8de8
DR
6736 },
6737
592a252b 6738 /* PREFIX_VEX_0F3A7C */
922d8de8 6739 {
592d1631
L
6740 { Bad_Opcode },
6741 { Bad_Opcode },
3a2430e0 6742 { "vfnmsubps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
592d1631 6743 { Bad_Opcode },
922d8de8
DR
6744 },
6745
592a252b 6746 /* PREFIX_VEX_0F3A7D */
922d8de8 6747 {
592d1631
L
6748 { Bad_Opcode },
6749 { Bad_Opcode },
3a2430e0 6750 { "vfnmsubpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6751 },
6752
592a252b 6753 /* PREFIX_VEX_0F3A7E */
922d8de8 6754 {
592d1631
L
6755 { Bad_Opcode },
6756 { Bad_Opcode },
592a252b 6757 { VEX_LEN_TABLE (VEX_LEN_0F3A7E_P_2) },
922d8de8
DR
6758 },
6759
592a252b 6760 /* PREFIX_VEX_0F3A7F */
922d8de8 6761 {
592d1631
L
6762 { Bad_Opcode },
6763 { Bad_Opcode },
592a252b 6764 { VEX_LEN_TABLE (VEX_LEN_0F3A7F_P_2) },
922d8de8
DR
6765 },
6766
48521003
IT
6767 /* PREFIX_VEX_0F3ACE */
6768 {
6769 { Bad_Opcode },
6770 { Bad_Opcode },
6771 { VEX_W_TABLE (VEX_W_0F3ACE_P_2) },
6772 },
6773
6774 /* PREFIX_VEX_0F3ACF */
6775 {
6776 { Bad_Opcode },
6777 { Bad_Opcode },
6778 { VEX_W_TABLE (VEX_W_0F3ACF_P_2) },
6779 },
6780
592a252b 6781 /* PREFIX_VEX_0F3ADF */
a5ff0eb2 6782 {
592d1631
L
6783 { Bad_Opcode },
6784 { Bad_Opcode },
592a252b 6785 { VEX_LEN_TABLE (VEX_LEN_0F3ADF_P_2) },
a5ff0eb2 6786 },
6c30d220
L
6787
6788 /* PREFIX_VEX_0F3AF0 */
6789 {
6790 { Bad_Opcode },
6791 { Bad_Opcode },
6792 { Bad_Opcode },
6793 { VEX_LEN_TABLE (VEX_LEN_0F3AF0_P_3) },
6794 },
43234a1e
L
6795
6796#define NEED_PREFIX_TABLE
6797#include "i386-dis-evex.h"
6798#undef NEED_PREFIX_TABLE
c0f3af97
L
6799};
6800
6801static const struct dis386 x86_64_table[][2] = {
6802 /* X86_64_06 */
6803 {
bf890a93 6804 { "pushP", { es }, 0 },
c0f3af97
L
6805 },
6806
6807 /* X86_64_07 */
6808 {
bf890a93 6809 { "popP", { es }, 0 },
c0f3af97
L
6810 },
6811
6812 /* X86_64_0D */
6813 {
bf890a93 6814 { "pushP", { cs }, 0 },
c0f3af97
L
6815 },
6816
6817 /* X86_64_16 */
6818 {
bf890a93 6819 { "pushP", { ss }, 0 },
c0f3af97
L
6820 },
6821
6822 /* X86_64_17 */
6823 {
bf890a93 6824 { "popP", { ss }, 0 },
c0f3af97
L
6825 },
6826
6827 /* X86_64_1E */
6828 {
bf890a93 6829 { "pushP", { ds }, 0 },
c0f3af97
L
6830 },
6831
6832 /* X86_64_1F */
6833 {
bf890a93 6834 { "popP", { ds }, 0 },
c0f3af97
L
6835 },
6836
6837 /* X86_64_27 */
6838 {
bf890a93 6839 { "daa", { XX }, 0 },
c0f3af97
L
6840 },
6841
6842 /* X86_64_2F */
6843 {
bf890a93 6844 { "das", { XX }, 0 },
c0f3af97
L
6845 },
6846
6847 /* X86_64_37 */
6848 {
bf890a93 6849 { "aaa", { XX }, 0 },
c0f3af97
L
6850 },
6851
6852 /* X86_64_3F */
6853 {
bf890a93 6854 { "aas", { XX }, 0 },
c0f3af97
L
6855 },
6856
6857 /* X86_64_60 */
6858 {
bf890a93 6859 { "pushaP", { XX }, 0 },
c0f3af97
L
6860 },
6861
6862 /* X86_64_61 */
6863 {
bf890a93 6864 { "popaP", { XX }, 0 },
c0f3af97
L
6865 },
6866
6867 /* X86_64_62 */
6868 {
6869 { MOD_TABLE (MOD_62_32BIT) },
43234a1e 6870 { EVEX_TABLE (EVEX_0F) },
c0f3af97
L
6871 },
6872
6873 /* X86_64_63 */
6874 {
bf890a93
IT
6875 { "arpl", { Ew, Gw }, 0 },
6876 { "movs{lq|xd}", { Gv, Ed }, 0 },
c0f3af97
L
6877 },
6878
6879 /* X86_64_6D */
6880 {
bf890a93
IT
6881 { "ins{R|}", { Yzr, indirDX }, 0 },
6882 { "ins{G|}", { Yzr, indirDX }, 0 },
c0f3af97
L
6883 },
6884
6885 /* X86_64_6F */
6886 {
bf890a93
IT
6887 { "outs{R|}", { indirDXr, Xz }, 0 },
6888 { "outs{G|}", { indirDXr, Xz }, 0 },
c0f3af97
L
6889 },
6890
d039fef3 6891 /* X86_64_82 */
8b89fe14 6892 {
de194d85 6893 /* Opcode 0x82 is an alias of opcode 0x80 in 32-bit mode. */
d039fef3 6894 { REG_TABLE (REG_80) },
8b89fe14
L
6895 },
6896
c0f3af97
L
6897 /* X86_64_9A */
6898 {
bf890a93 6899 { "Jcall{T|}", { Ap }, 0 },
c0f3af97
L
6900 },
6901
6902 /* X86_64_C4 */
6903 {
6904 { MOD_TABLE (MOD_C4_32BIT) },
6905 { VEX_C4_TABLE (VEX_0F) },
6906 },
6907
6908 /* X86_64_C5 */
6909 {
6910 { MOD_TABLE (MOD_C5_32BIT) },
6911 { VEX_C5_TABLE (VEX_0F) },
6912 },
6913
6914 /* X86_64_CE */
6915 {
bf890a93 6916 { "into", { XX }, 0 },
c0f3af97
L
6917 },
6918
6919 /* X86_64_D4 */
6920 {
bf890a93 6921 { "aam", { Ib }, 0 },
c0f3af97
L
6922 },
6923
6924 /* X86_64_D5 */
6925 {
bf890a93 6926 { "aad", { Ib }, 0 },
c0f3af97
L
6927 },
6928
a72d2af2
L
6929 /* X86_64_E8 */
6930 {
6931 { "callP", { Jv, BND }, 0 },
5db04b09 6932 { "call@", { Jv, BND }, 0 }
a72d2af2
L
6933 },
6934
6935 /* X86_64_E9 */
6936 {
6937 { "jmpP", { Jv, BND }, 0 },
5db04b09 6938 { "jmp@", { Jv, BND }, 0 }
a72d2af2
L
6939 },
6940
c0f3af97
L
6941 /* X86_64_EA */
6942 {
bf890a93 6943 { "Jjmp{T|}", { Ap }, 0 },
c0f3af97
L
6944 },
6945
6946 /* X86_64_0F01_REG_0 */
6947 {
bf890a93
IT
6948 { "sgdt{Q|IQ}", { M }, 0 },
6949 { "sgdt", { M }, 0 },
c0f3af97
L
6950 },
6951
6952 /* X86_64_0F01_REG_1 */
6953 {
bf890a93
IT
6954 { "sidt{Q|IQ}", { M }, 0 },
6955 { "sidt", { M }, 0 },
c0f3af97
L
6956 },
6957
6958 /* X86_64_0F01_REG_2 */
6959 {
bf890a93
IT
6960 { "lgdt{Q|Q}", { M }, 0 },
6961 { "lgdt", { M }, 0 },
c0f3af97
L
6962 },
6963
6964 /* X86_64_0F01_REG_3 */
6965 {
bf890a93
IT
6966 { "lidt{Q|Q}", { M }, 0 },
6967 { "lidt", { M }, 0 },
c0f3af97
L
6968 },
6969};
6970
6971static const struct dis386 three_byte_table[][256] = {
c1e679ec
DR
6972
6973 /* THREE_BYTE_0F38 */
c0f3af97
L
6974 {
6975 /* 00 */
507bd325
L
6976 { "pshufb", { MX, EM }, PREFIX_OPCODE },
6977 { "phaddw", { MX, EM }, PREFIX_OPCODE },
6978 { "phaddd", { MX, EM }, PREFIX_OPCODE },
6979 { "phaddsw", { MX, EM }, PREFIX_OPCODE },
6980 { "pmaddubsw", { MX, EM }, PREFIX_OPCODE },
6981 { "phsubw", { MX, EM }, PREFIX_OPCODE },
6982 { "phsubd", { MX, EM }, PREFIX_OPCODE },
6983 { "phsubsw", { MX, EM }, PREFIX_OPCODE },
c0f3af97 6984 /* 08 */
507bd325
L
6985 { "psignb", { MX, EM }, PREFIX_OPCODE },
6986 { "psignw", { MX, EM }, PREFIX_OPCODE },
6987 { "psignd", { MX, EM }, PREFIX_OPCODE },
6988 { "pmulhrsw", { MX, EM }, PREFIX_OPCODE },
592d1631
L
6989 { Bad_Opcode },
6990 { Bad_Opcode },
6991 { Bad_Opcode },
6992 { Bad_Opcode },
f88c9eb0
SP
6993 /* 10 */
6994 { PREFIX_TABLE (PREFIX_0F3810) },
592d1631
L
6995 { Bad_Opcode },
6996 { Bad_Opcode },
6997 { Bad_Opcode },
f88c9eb0
SP
6998 { PREFIX_TABLE (PREFIX_0F3814) },
6999 { PREFIX_TABLE (PREFIX_0F3815) },
592d1631 7000 { Bad_Opcode },
f88c9eb0
SP
7001 { PREFIX_TABLE (PREFIX_0F3817) },
7002 /* 18 */
592d1631
L
7003 { Bad_Opcode },
7004 { Bad_Opcode },
7005 { Bad_Opcode },
7006 { Bad_Opcode },
507bd325
L
7007 { "pabsb", { MX, EM }, PREFIX_OPCODE },
7008 { "pabsw", { MX, EM }, PREFIX_OPCODE },
7009 { "pabsd", { MX, EM }, PREFIX_OPCODE },
592d1631 7010 { Bad_Opcode },
f88c9eb0
SP
7011 /* 20 */
7012 { PREFIX_TABLE (PREFIX_0F3820) },
7013 { PREFIX_TABLE (PREFIX_0F3821) },
7014 { PREFIX_TABLE (PREFIX_0F3822) },
7015 { PREFIX_TABLE (PREFIX_0F3823) },
7016 { PREFIX_TABLE (PREFIX_0F3824) },
7017 { PREFIX_TABLE (PREFIX_0F3825) },
592d1631
L
7018 { Bad_Opcode },
7019 { Bad_Opcode },
f88c9eb0
SP
7020 /* 28 */
7021 { PREFIX_TABLE (PREFIX_0F3828) },
7022 { PREFIX_TABLE (PREFIX_0F3829) },
7023 { PREFIX_TABLE (PREFIX_0F382A) },
7024 { PREFIX_TABLE (PREFIX_0F382B) },
592d1631
L
7025 { Bad_Opcode },
7026 { Bad_Opcode },
7027 { Bad_Opcode },
7028 { Bad_Opcode },
f88c9eb0
SP
7029 /* 30 */
7030 { PREFIX_TABLE (PREFIX_0F3830) },
7031 { PREFIX_TABLE (PREFIX_0F3831) },
7032 { PREFIX_TABLE (PREFIX_0F3832) },
7033 { PREFIX_TABLE (PREFIX_0F3833) },
7034 { PREFIX_TABLE (PREFIX_0F3834) },
7035 { PREFIX_TABLE (PREFIX_0F3835) },
592d1631 7036 { Bad_Opcode },
f88c9eb0
SP
7037 { PREFIX_TABLE (PREFIX_0F3837) },
7038 /* 38 */
7039 { PREFIX_TABLE (PREFIX_0F3838) },
7040 { PREFIX_TABLE (PREFIX_0F3839) },
7041 { PREFIX_TABLE (PREFIX_0F383A) },
7042 { PREFIX_TABLE (PREFIX_0F383B) },
7043 { PREFIX_TABLE (PREFIX_0F383C) },
7044 { PREFIX_TABLE (PREFIX_0F383D) },
7045 { PREFIX_TABLE (PREFIX_0F383E) },
7046 { PREFIX_TABLE (PREFIX_0F383F) },
7047 /* 40 */
7048 { PREFIX_TABLE (PREFIX_0F3840) },
7049 { PREFIX_TABLE (PREFIX_0F3841) },
592d1631
L
7050 { Bad_Opcode },
7051 { Bad_Opcode },
7052 { Bad_Opcode },
7053 { Bad_Opcode },
7054 { Bad_Opcode },
7055 { Bad_Opcode },
f88c9eb0 7056 /* 48 */
592d1631
L
7057 { Bad_Opcode },
7058 { Bad_Opcode },
7059 { Bad_Opcode },
7060 { Bad_Opcode },
7061 { Bad_Opcode },
7062 { Bad_Opcode },
7063 { Bad_Opcode },
7064 { Bad_Opcode },
f88c9eb0 7065 /* 50 */
592d1631
L
7066 { Bad_Opcode },
7067 { Bad_Opcode },
7068 { Bad_Opcode },
7069 { Bad_Opcode },
7070 { Bad_Opcode },
7071 { Bad_Opcode },
7072 { Bad_Opcode },
7073 { Bad_Opcode },
f88c9eb0 7074 /* 58 */
592d1631
L
7075 { Bad_Opcode },
7076 { Bad_Opcode },
7077 { Bad_Opcode },
7078 { Bad_Opcode },
7079 { Bad_Opcode },
7080 { Bad_Opcode },
7081 { Bad_Opcode },
7082 { Bad_Opcode },
f88c9eb0 7083 /* 60 */
592d1631
L
7084 { Bad_Opcode },
7085 { Bad_Opcode },
7086 { Bad_Opcode },
7087 { Bad_Opcode },
7088 { Bad_Opcode },
7089 { Bad_Opcode },
7090 { Bad_Opcode },
7091 { Bad_Opcode },
f88c9eb0 7092 /* 68 */
592d1631
L
7093 { Bad_Opcode },
7094 { Bad_Opcode },
7095 { Bad_Opcode },
7096 { Bad_Opcode },
7097 { Bad_Opcode },
7098 { Bad_Opcode },
7099 { Bad_Opcode },
7100 { Bad_Opcode },
f88c9eb0 7101 /* 70 */
592d1631
L
7102 { Bad_Opcode },
7103 { Bad_Opcode },
7104 { Bad_Opcode },
7105 { Bad_Opcode },
7106 { Bad_Opcode },
7107 { Bad_Opcode },
7108 { Bad_Opcode },
7109 { Bad_Opcode },
f88c9eb0 7110 /* 78 */
592d1631
L
7111 { Bad_Opcode },
7112 { Bad_Opcode },
7113 { Bad_Opcode },
7114 { Bad_Opcode },
7115 { Bad_Opcode },
7116 { Bad_Opcode },
7117 { Bad_Opcode },
7118 { Bad_Opcode },
f88c9eb0
SP
7119 /* 80 */
7120 { PREFIX_TABLE (PREFIX_0F3880) },
7121 { PREFIX_TABLE (PREFIX_0F3881) },
6c30d220 7122 { PREFIX_TABLE (PREFIX_0F3882) },
592d1631
L
7123 { Bad_Opcode },
7124 { Bad_Opcode },
7125 { Bad_Opcode },
7126 { Bad_Opcode },
7127 { Bad_Opcode },
f88c9eb0 7128 /* 88 */
592d1631
L
7129 { Bad_Opcode },
7130 { Bad_Opcode },
7131 { Bad_Opcode },
7132 { Bad_Opcode },
7133 { Bad_Opcode },
7134 { Bad_Opcode },
7135 { Bad_Opcode },
7136 { Bad_Opcode },
f88c9eb0 7137 /* 90 */
592d1631
L
7138 { Bad_Opcode },
7139 { Bad_Opcode },
7140 { Bad_Opcode },
7141 { Bad_Opcode },
7142 { Bad_Opcode },
7143 { Bad_Opcode },
7144 { Bad_Opcode },
7145 { Bad_Opcode },
f88c9eb0 7146 /* 98 */
592d1631
L
7147 { Bad_Opcode },
7148 { Bad_Opcode },
7149 { Bad_Opcode },
7150 { Bad_Opcode },
7151 { Bad_Opcode },
7152 { Bad_Opcode },
7153 { Bad_Opcode },
7154 { Bad_Opcode },
f88c9eb0 7155 /* a0 */
592d1631
L
7156 { Bad_Opcode },
7157 { Bad_Opcode },
7158 { Bad_Opcode },
7159 { Bad_Opcode },
7160 { Bad_Opcode },
7161 { Bad_Opcode },
7162 { Bad_Opcode },
7163 { Bad_Opcode },
f88c9eb0 7164 /* a8 */
592d1631
L
7165 { Bad_Opcode },
7166 { Bad_Opcode },
7167 { Bad_Opcode },
7168 { Bad_Opcode },
7169 { Bad_Opcode },
7170 { Bad_Opcode },
7171 { Bad_Opcode },
7172 { Bad_Opcode },
f88c9eb0 7173 /* b0 */
592d1631
L
7174 { Bad_Opcode },
7175 { Bad_Opcode },
7176 { Bad_Opcode },
7177 { Bad_Opcode },
7178 { Bad_Opcode },
7179 { Bad_Opcode },
7180 { Bad_Opcode },
7181 { Bad_Opcode },
f88c9eb0 7182 /* b8 */
592d1631
L
7183 { Bad_Opcode },
7184 { Bad_Opcode },
7185 { Bad_Opcode },
7186 { Bad_Opcode },
7187 { Bad_Opcode },
7188 { Bad_Opcode },
7189 { Bad_Opcode },
7190 { Bad_Opcode },
f88c9eb0 7191 /* c0 */
592d1631
L
7192 { Bad_Opcode },
7193 { Bad_Opcode },
7194 { Bad_Opcode },
7195 { Bad_Opcode },
7196 { Bad_Opcode },
7197 { Bad_Opcode },
7198 { Bad_Opcode },
7199 { Bad_Opcode },
f88c9eb0 7200 /* c8 */
a0046408
L
7201 { PREFIX_TABLE (PREFIX_0F38C8) },
7202 { PREFIX_TABLE (PREFIX_0F38C9) },
7203 { PREFIX_TABLE (PREFIX_0F38CA) },
7204 { PREFIX_TABLE (PREFIX_0F38CB) },
7205 { PREFIX_TABLE (PREFIX_0F38CC) },
7206 { PREFIX_TABLE (PREFIX_0F38CD) },
592d1631 7207 { Bad_Opcode },
48521003 7208 { PREFIX_TABLE (PREFIX_0F38CF) },
f88c9eb0 7209 /* d0 */
592d1631
L
7210 { Bad_Opcode },
7211 { Bad_Opcode },
7212 { Bad_Opcode },
7213 { Bad_Opcode },
7214 { Bad_Opcode },
7215 { Bad_Opcode },
7216 { Bad_Opcode },
7217 { Bad_Opcode },
f88c9eb0 7218 /* d8 */
592d1631
L
7219 { Bad_Opcode },
7220 { Bad_Opcode },
7221 { Bad_Opcode },
f88c9eb0
SP
7222 { PREFIX_TABLE (PREFIX_0F38DB) },
7223 { PREFIX_TABLE (PREFIX_0F38DC) },
7224 { PREFIX_TABLE (PREFIX_0F38DD) },
7225 { PREFIX_TABLE (PREFIX_0F38DE) },
7226 { PREFIX_TABLE (PREFIX_0F38DF) },
7227 /* e0 */
592d1631
L
7228 { Bad_Opcode },
7229 { Bad_Opcode },
7230 { Bad_Opcode },
7231 { Bad_Opcode },
7232 { Bad_Opcode },
7233 { Bad_Opcode },
7234 { Bad_Opcode },
7235 { Bad_Opcode },
f88c9eb0 7236 /* e8 */
592d1631
L
7237 { Bad_Opcode },
7238 { Bad_Opcode },
7239 { Bad_Opcode },
7240 { Bad_Opcode },
7241 { Bad_Opcode },
7242 { Bad_Opcode },
7243 { Bad_Opcode },
7244 { Bad_Opcode },
f88c9eb0
SP
7245 /* f0 */
7246 { PREFIX_TABLE (PREFIX_0F38F0) },
7247 { PREFIX_TABLE (PREFIX_0F38F1) },
592d1631
L
7248 { Bad_Opcode },
7249 { Bad_Opcode },
7250 { Bad_Opcode },
603555e5 7251 { PREFIX_TABLE (PREFIX_0F38F5) },
e2e1fcde 7252 { PREFIX_TABLE (PREFIX_0F38F6) },
592d1631 7253 { Bad_Opcode },
f88c9eb0 7254 /* f8 */
c0a30a9f
L
7255 { PREFIX_TABLE (PREFIX_0F38F8) },
7256 { PREFIX_TABLE (PREFIX_0F38F9) },
592d1631
L
7257 { Bad_Opcode },
7258 { Bad_Opcode },
7259 { Bad_Opcode },
7260 { Bad_Opcode },
7261 { Bad_Opcode },
7262 { Bad_Opcode },
f88c9eb0
SP
7263 },
7264 /* THREE_BYTE_0F3A */
7265 {
7266 /* 00 */
592d1631
L
7267 { Bad_Opcode },
7268 { Bad_Opcode },
7269 { Bad_Opcode },
7270 { Bad_Opcode },
7271 { Bad_Opcode },
7272 { Bad_Opcode },
7273 { Bad_Opcode },
7274 { Bad_Opcode },
f88c9eb0
SP
7275 /* 08 */
7276 { PREFIX_TABLE (PREFIX_0F3A08) },
7277 { PREFIX_TABLE (PREFIX_0F3A09) },
7278 { PREFIX_TABLE (PREFIX_0F3A0A) },
7279 { PREFIX_TABLE (PREFIX_0F3A0B) },
7280 { PREFIX_TABLE (PREFIX_0F3A0C) },
7281 { PREFIX_TABLE (PREFIX_0F3A0D) },
7282 { PREFIX_TABLE (PREFIX_0F3A0E) },
507bd325 7283 { "palignr", { MX, EM, Ib }, PREFIX_OPCODE },
f88c9eb0 7284 /* 10 */
592d1631
L
7285 { Bad_Opcode },
7286 { Bad_Opcode },
7287 { Bad_Opcode },
7288 { Bad_Opcode },
f88c9eb0
SP
7289 { PREFIX_TABLE (PREFIX_0F3A14) },
7290 { PREFIX_TABLE (PREFIX_0F3A15) },
7291 { PREFIX_TABLE (PREFIX_0F3A16) },
7292 { PREFIX_TABLE (PREFIX_0F3A17) },
7293 /* 18 */
592d1631
L
7294 { Bad_Opcode },
7295 { Bad_Opcode },
7296 { Bad_Opcode },
7297 { Bad_Opcode },
7298 { Bad_Opcode },
7299 { Bad_Opcode },
7300 { Bad_Opcode },
7301 { Bad_Opcode },
f88c9eb0
SP
7302 /* 20 */
7303 { PREFIX_TABLE (PREFIX_0F3A20) },
7304 { PREFIX_TABLE (PREFIX_0F3A21) },
7305 { PREFIX_TABLE (PREFIX_0F3A22) },
592d1631
L
7306 { Bad_Opcode },
7307 { Bad_Opcode },
7308 { Bad_Opcode },
7309 { Bad_Opcode },
7310 { Bad_Opcode },
f88c9eb0 7311 /* 28 */
592d1631
L
7312 { Bad_Opcode },
7313 { Bad_Opcode },
7314 { Bad_Opcode },
7315 { Bad_Opcode },
7316 { Bad_Opcode },
7317 { Bad_Opcode },
7318 { Bad_Opcode },
7319 { Bad_Opcode },
f88c9eb0 7320 /* 30 */
592d1631
L
7321 { Bad_Opcode },
7322 { Bad_Opcode },
7323 { Bad_Opcode },
7324 { Bad_Opcode },
7325 { Bad_Opcode },
7326 { Bad_Opcode },
7327 { Bad_Opcode },
7328 { Bad_Opcode },
f88c9eb0 7329 /* 38 */
592d1631
L
7330 { Bad_Opcode },
7331 { Bad_Opcode },
7332 { Bad_Opcode },
7333 { Bad_Opcode },
7334 { Bad_Opcode },
7335 { Bad_Opcode },
7336 { Bad_Opcode },
7337 { Bad_Opcode },
f88c9eb0
SP
7338 /* 40 */
7339 { PREFIX_TABLE (PREFIX_0F3A40) },
7340 { PREFIX_TABLE (PREFIX_0F3A41) },
7341 { PREFIX_TABLE (PREFIX_0F3A42) },
592d1631 7342 { Bad_Opcode },
f88c9eb0 7343 { PREFIX_TABLE (PREFIX_0F3A44) },
592d1631
L
7344 { Bad_Opcode },
7345 { Bad_Opcode },
7346 { Bad_Opcode },
f88c9eb0 7347 /* 48 */
592d1631
L
7348 { Bad_Opcode },
7349 { Bad_Opcode },
7350 { Bad_Opcode },
7351 { Bad_Opcode },
7352 { Bad_Opcode },
7353 { Bad_Opcode },
7354 { Bad_Opcode },
7355 { Bad_Opcode },
f88c9eb0 7356 /* 50 */
592d1631
L
7357 { Bad_Opcode },
7358 { Bad_Opcode },
7359 { Bad_Opcode },
7360 { Bad_Opcode },
7361 { Bad_Opcode },
7362 { Bad_Opcode },
7363 { Bad_Opcode },
7364 { Bad_Opcode },
f88c9eb0 7365 /* 58 */
592d1631
L
7366 { Bad_Opcode },
7367 { Bad_Opcode },
7368 { Bad_Opcode },
7369 { Bad_Opcode },
7370 { Bad_Opcode },
7371 { Bad_Opcode },
7372 { Bad_Opcode },
7373 { Bad_Opcode },
f88c9eb0
SP
7374 /* 60 */
7375 { PREFIX_TABLE (PREFIX_0F3A60) },
7376 { PREFIX_TABLE (PREFIX_0F3A61) },
7377 { PREFIX_TABLE (PREFIX_0F3A62) },
7378 { PREFIX_TABLE (PREFIX_0F3A63) },
592d1631
L
7379 { Bad_Opcode },
7380 { Bad_Opcode },
7381 { Bad_Opcode },
7382 { Bad_Opcode },
f88c9eb0 7383 /* 68 */
592d1631
L
7384 { Bad_Opcode },
7385 { Bad_Opcode },
7386 { Bad_Opcode },
7387 { Bad_Opcode },
7388 { Bad_Opcode },
7389 { Bad_Opcode },
7390 { Bad_Opcode },
7391 { Bad_Opcode },
f88c9eb0 7392 /* 70 */
592d1631
L
7393 { Bad_Opcode },
7394 { Bad_Opcode },
7395 { Bad_Opcode },
7396 { Bad_Opcode },
7397 { Bad_Opcode },
7398 { Bad_Opcode },
7399 { Bad_Opcode },
7400 { Bad_Opcode },
f88c9eb0 7401 /* 78 */
592d1631
L
7402 { Bad_Opcode },
7403 { Bad_Opcode },
7404 { Bad_Opcode },
7405 { Bad_Opcode },
7406 { Bad_Opcode },
7407 { Bad_Opcode },
7408 { Bad_Opcode },
7409 { Bad_Opcode },
f88c9eb0 7410 /* 80 */
592d1631
L
7411 { Bad_Opcode },
7412 { Bad_Opcode },
7413 { Bad_Opcode },
7414 { Bad_Opcode },
7415 { Bad_Opcode },
7416 { Bad_Opcode },
7417 { Bad_Opcode },
7418 { Bad_Opcode },
f88c9eb0 7419 /* 88 */
592d1631
L
7420 { Bad_Opcode },
7421 { Bad_Opcode },
7422 { Bad_Opcode },
7423 { Bad_Opcode },
7424 { Bad_Opcode },
7425 { Bad_Opcode },
7426 { Bad_Opcode },
7427 { Bad_Opcode },
f88c9eb0 7428 /* 90 */
592d1631
L
7429 { Bad_Opcode },
7430 { Bad_Opcode },
7431 { Bad_Opcode },
7432 { Bad_Opcode },
7433 { Bad_Opcode },
7434 { Bad_Opcode },
7435 { Bad_Opcode },
7436 { Bad_Opcode },
f88c9eb0 7437 /* 98 */
592d1631
L
7438 { Bad_Opcode },
7439 { Bad_Opcode },
7440 { Bad_Opcode },
7441 { Bad_Opcode },
7442 { Bad_Opcode },
7443 { Bad_Opcode },
7444 { Bad_Opcode },
7445 { Bad_Opcode },
f88c9eb0 7446 /* a0 */
592d1631
L
7447 { Bad_Opcode },
7448 { Bad_Opcode },
7449 { Bad_Opcode },
7450 { Bad_Opcode },
7451 { Bad_Opcode },
7452 { Bad_Opcode },
7453 { Bad_Opcode },
7454 { Bad_Opcode },
f88c9eb0 7455 /* a8 */
592d1631
L
7456 { Bad_Opcode },
7457 { Bad_Opcode },
7458 { Bad_Opcode },
7459 { Bad_Opcode },
7460 { Bad_Opcode },
7461 { Bad_Opcode },
7462 { Bad_Opcode },
7463 { Bad_Opcode },
f88c9eb0 7464 /* b0 */
592d1631
L
7465 { Bad_Opcode },
7466 { Bad_Opcode },
7467 { Bad_Opcode },
7468 { Bad_Opcode },
7469 { Bad_Opcode },
7470 { Bad_Opcode },
7471 { Bad_Opcode },
7472 { Bad_Opcode },
f88c9eb0 7473 /* b8 */
592d1631
L
7474 { Bad_Opcode },
7475 { Bad_Opcode },
7476 { Bad_Opcode },
7477 { Bad_Opcode },
7478 { Bad_Opcode },
7479 { Bad_Opcode },
7480 { Bad_Opcode },
7481 { Bad_Opcode },
f88c9eb0 7482 /* c0 */
592d1631
L
7483 { Bad_Opcode },
7484 { Bad_Opcode },
7485 { Bad_Opcode },
7486 { Bad_Opcode },
7487 { Bad_Opcode },
7488 { Bad_Opcode },
7489 { Bad_Opcode },
7490 { Bad_Opcode },
f88c9eb0 7491 /* c8 */
592d1631
L
7492 { Bad_Opcode },
7493 { Bad_Opcode },
7494 { Bad_Opcode },
7495 { Bad_Opcode },
a0046408 7496 { PREFIX_TABLE (PREFIX_0F3ACC) },
592d1631 7497 { Bad_Opcode },
48521003
IT
7498 { PREFIX_TABLE (PREFIX_0F3ACE) },
7499 { PREFIX_TABLE (PREFIX_0F3ACF) },
f88c9eb0 7500 /* d0 */
592d1631
L
7501 { Bad_Opcode },
7502 { Bad_Opcode },
7503 { Bad_Opcode },
7504 { Bad_Opcode },
7505 { Bad_Opcode },
7506 { Bad_Opcode },
7507 { Bad_Opcode },
7508 { Bad_Opcode },
f88c9eb0 7509 /* d8 */
592d1631
L
7510 { Bad_Opcode },
7511 { Bad_Opcode },
7512 { Bad_Opcode },
7513 { Bad_Opcode },
7514 { Bad_Opcode },
7515 { Bad_Opcode },
7516 { Bad_Opcode },
f88c9eb0
SP
7517 { PREFIX_TABLE (PREFIX_0F3ADF) },
7518 /* e0 */
592d1631
L
7519 { Bad_Opcode },
7520 { Bad_Opcode },
7521 { Bad_Opcode },
7522 { Bad_Opcode },
7523 { Bad_Opcode },
592d1631
L
7524 { Bad_Opcode },
7525 { Bad_Opcode },
7526 { Bad_Opcode },
85f10a01 7527 /* e8 */
592d1631
L
7528 { Bad_Opcode },
7529 { Bad_Opcode },
7530 { Bad_Opcode },
7531 { Bad_Opcode },
7532 { Bad_Opcode },
7533 { Bad_Opcode },
7534 { Bad_Opcode },
7535 { Bad_Opcode },
85f10a01 7536 /* f0 */
592d1631
L
7537 { Bad_Opcode },
7538 { Bad_Opcode },
7539 { Bad_Opcode },
7540 { Bad_Opcode },
7541 { Bad_Opcode },
7542 { Bad_Opcode },
7543 { Bad_Opcode },
7544 { Bad_Opcode },
85f10a01 7545 /* f8 */
592d1631
L
7546 { Bad_Opcode },
7547 { Bad_Opcode },
7548 { Bad_Opcode },
7549 { Bad_Opcode },
7550 { Bad_Opcode },
7551 { Bad_Opcode },
7552 { Bad_Opcode },
7553 { Bad_Opcode },
85f10a01 7554 },
f88c9eb0
SP
7555};
7556
7557static const struct dis386 xop_table[][256] = {
5dd85c99 7558 /* XOP_08 */
85f10a01
MM
7559 {
7560 /* 00 */
592d1631
L
7561 { Bad_Opcode },
7562 { Bad_Opcode },
7563 { Bad_Opcode },
7564 { Bad_Opcode },
7565 { Bad_Opcode },
7566 { Bad_Opcode },
7567 { Bad_Opcode },
7568 { Bad_Opcode },
85f10a01 7569 /* 08 */
592d1631
L
7570 { Bad_Opcode },
7571 { Bad_Opcode },
7572 { Bad_Opcode },
7573 { Bad_Opcode },
7574 { Bad_Opcode },
7575 { Bad_Opcode },
7576 { Bad_Opcode },
7577 { Bad_Opcode },
85f10a01 7578 /* 10 */
3929df09 7579 { Bad_Opcode },
592d1631
L
7580 { Bad_Opcode },
7581 { Bad_Opcode },
7582 { Bad_Opcode },
7583 { Bad_Opcode },
7584 { Bad_Opcode },
7585 { Bad_Opcode },
7586 { Bad_Opcode },
85f10a01 7587 /* 18 */
592d1631
L
7588 { Bad_Opcode },
7589 { Bad_Opcode },
7590 { Bad_Opcode },
7591 { Bad_Opcode },
7592 { Bad_Opcode },
7593 { Bad_Opcode },
7594 { Bad_Opcode },
7595 { Bad_Opcode },
85f10a01 7596 /* 20 */
592d1631
L
7597 { Bad_Opcode },
7598 { Bad_Opcode },
7599 { Bad_Opcode },
7600 { Bad_Opcode },
7601 { Bad_Opcode },
7602 { Bad_Opcode },
7603 { Bad_Opcode },
7604 { Bad_Opcode },
85f10a01 7605 /* 28 */
592d1631
L
7606 { Bad_Opcode },
7607 { Bad_Opcode },
7608 { Bad_Opcode },
7609 { Bad_Opcode },
7610 { Bad_Opcode },
7611 { Bad_Opcode },
7612 { Bad_Opcode },
7613 { Bad_Opcode },
c0f3af97 7614 /* 30 */
592d1631
L
7615 { Bad_Opcode },
7616 { Bad_Opcode },
7617 { Bad_Opcode },
7618 { Bad_Opcode },
7619 { Bad_Opcode },
7620 { Bad_Opcode },
7621 { Bad_Opcode },
7622 { Bad_Opcode },
c0f3af97 7623 /* 38 */
592d1631
L
7624 { Bad_Opcode },
7625 { Bad_Opcode },
7626 { Bad_Opcode },
7627 { Bad_Opcode },
7628 { Bad_Opcode },
7629 { Bad_Opcode },
7630 { Bad_Opcode },
7631 { Bad_Opcode },
c0f3af97 7632 /* 40 */
592d1631
L
7633 { Bad_Opcode },
7634 { Bad_Opcode },
7635 { Bad_Opcode },
7636 { Bad_Opcode },
7637 { Bad_Opcode },
7638 { Bad_Opcode },
7639 { Bad_Opcode },
7640 { Bad_Opcode },
85f10a01 7641 /* 48 */
592d1631
L
7642 { Bad_Opcode },
7643 { Bad_Opcode },
7644 { Bad_Opcode },
7645 { Bad_Opcode },
7646 { Bad_Opcode },
7647 { Bad_Opcode },
7648 { Bad_Opcode },
7649 { Bad_Opcode },
c0f3af97 7650 /* 50 */
592d1631
L
7651 { Bad_Opcode },
7652 { Bad_Opcode },
7653 { Bad_Opcode },
7654 { Bad_Opcode },
7655 { Bad_Opcode },
7656 { Bad_Opcode },
7657 { Bad_Opcode },
7658 { Bad_Opcode },
85f10a01 7659 /* 58 */
592d1631
L
7660 { Bad_Opcode },
7661 { Bad_Opcode },
7662 { Bad_Opcode },
7663 { Bad_Opcode },
7664 { Bad_Opcode },
7665 { Bad_Opcode },
7666 { Bad_Opcode },
7667 { Bad_Opcode },
c1e679ec 7668 /* 60 */
592d1631
L
7669 { Bad_Opcode },
7670 { Bad_Opcode },
7671 { Bad_Opcode },
7672 { Bad_Opcode },
7673 { Bad_Opcode },
7674 { Bad_Opcode },
7675 { Bad_Opcode },
7676 { Bad_Opcode },
c0f3af97 7677 /* 68 */
592d1631
L
7678 { Bad_Opcode },
7679 { Bad_Opcode },
7680 { Bad_Opcode },
7681 { Bad_Opcode },
7682 { Bad_Opcode },
7683 { Bad_Opcode },
7684 { Bad_Opcode },
7685 { Bad_Opcode },
85f10a01 7686 /* 70 */
592d1631
L
7687 { Bad_Opcode },
7688 { Bad_Opcode },
7689 { Bad_Opcode },
7690 { Bad_Opcode },
7691 { Bad_Opcode },
7692 { Bad_Opcode },
7693 { Bad_Opcode },
7694 { Bad_Opcode },
85f10a01 7695 /* 78 */
592d1631
L
7696 { Bad_Opcode },
7697 { Bad_Opcode },
7698 { Bad_Opcode },
7699 { Bad_Opcode },
7700 { Bad_Opcode },
7701 { Bad_Opcode },
7702 { Bad_Opcode },
7703 { Bad_Opcode },
85f10a01 7704 /* 80 */
592d1631
L
7705 { Bad_Opcode },
7706 { Bad_Opcode },
7707 { Bad_Opcode },
7708 { Bad_Opcode },
7709 { Bad_Opcode },
3a2430e0
JB
7710 { "vpmacssww", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7711 { "vpmacsswd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7712 { "vpmacssdql", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
5dd85c99 7713 /* 88 */
592d1631
L
7714 { Bad_Opcode },
7715 { Bad_Opcode },
7716 { Bad_Opcode },
7717 { Bad_Opcode },
7718 { Bad_Opcode },
7719 { Bad_Opcode },
3a2430e0
JB
7720 { "vpmacssdd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7721 { "vpmacssdqh", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
5dd85c99 7722 /* 90 */
592d1631
L
7723 { Bad_Opcode },
7724 { Bad_Opcode },
7725 { Bad_Opcode },
7726 { Bad_Opcode },
7727 { Bad_Opcode },
3a2430e0
JB
7728 { "vpmacsww", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7729 { "vpmacswd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7730 { "vpmacsdql", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
5dd85c99 7731 /* 98 */
592d1631
L
7732 { Bad_Opcode },
7733 { Bad_Opcode },
7734 { Bad_Opcode },
7735 { Bad_Opcode },
7736 { Bad_Opcode },
7737 { Bad_Opcode },
3a2430e0
JB
7738 { "vpmacsdd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7739 { "vpmacsdqh", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
5dd85c99 7740 /* a0 */
592d1631
L
7741 { Bad_Opcode },
7742 { Bad_Opcode },
3a2430e0
JB
7743 { "vpcmov", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7744 { "vpperm", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
592d1631
L
7745 { Bad_Opcode },
7746 { Bad_Opcode },
3a2430e0 7747 { "vpmadcsswd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
592d1631 7748 { Bad_Opcode },
5dd85c99 7749 /* a8 */
592d1631
L
7750 { Bad_Opcode },
7751 { Bad_Opcode },
7752 { Bad_Opcode },
7753 { Bad_Opcode },
7754 { Bad_Opcode },
7755 { Bad_Opcode },
7756 { Bad_Opcode },
7757 { Bad_Opcode },
5dd85c99 7758 /* b0 */
592d1631
L
7759 { Bad_Opcode },
7760 { Bad_Opcode },
7761 { Bad_Opcode },
7762 { Bad_Opcode },
7763 { Bad_Opcode },
7764 { Bad_Opcode },
3a2430e0 7765 { "vpmadcswd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
592d1631 7766 { Bad_Opcode },
5dd85c99 7767 /* b8 */
592d1631
L
7768 { Bad_Opcode },
7769 { Bad_Opcode },
7770 { Bad_Opcode },
7771 { Bad_Opcode },
7772 { Bad_Opcode },
7773 { Bad_Opcode },
7774 { Bad_Opcode },
7775 { Bad_Opcode },
5dd85c99 7776 /* c0 */
bf890a93
IT
7777 { "vprotb", { XM, Vex_2src_1, Ib }, 0 },
7778 { "vprotw", { XM, Vex_2src_1, Ib }, 0 },
7779 { "vprotd", { XM, Vex_2src_1, Ib }, 0 },
7780 { "vprotq", { XM, Vex_2src_1, Ib }, 0 },
592d1631
L
7781 { Bad_Opcode },
7782 { Bad_Opcode },
7783 { Bad_Opcode },
7784 { Bad_Opcode },
5dd85c99 7785 /* c8 */
592d1631
L
7786 { Bad_Opcode },
7787 { Bad_Opcode },
7788 { Bad_Opcode },
7789 { Bad_Opcode },
ff688e1f
L
7790 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CC) },
7791 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CD) },
7792 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CE) },
7793 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CF) },
5dd85c99 7794 /* d0 */
592d1631
L
7795 { Bad_Opcode },
7796 { Bad_Opcode },
7797 { Bad_Opcode },
7798 { Bad_Opcode },
7799 { Bad_Opcode },
7800 { Bad_Opcode },
7801 { Bad_Opcode },
7802 { Bad_Opcode },
5dd85c99 7803 /* d8 */
592d1631
L
7804 { Bad_Opcode },
7805 { Bad_Opcode },
7806 { Bad_Opcode },
7807 { Bad_Opcode },
7808 { Bad_Opcode },
7809 { Bad_Opcode },
7810 { Bad_Opcode },
7811 { Bad_Opcode },
5dd85c99 7812 /* e0 */
592d1631
L
7813 { Bad_Opcode },
7814 { Bad_Opcode },
7815 { Bad_Opcode },
7816 { Bad_Opcode },
7817 { Bad_Opcode },
7818 { Bad_Opcode },
7819 { Bad_Opcode },
7820 { Bad_Opcode },
5dd85c99 7821 /* e8 */
592d1631
L
7822 { Bad_Opcode },
7823 { Bad_Opcode },
7824 { Bad_Opcode },
7825 { Bad_Opcode },
ff688e1f
L
7826 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EC) },
7827 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_ED) },
7828 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EE) },
7829 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EF) },
5dd85c99 7830 /* f0 */
592d1631
L
7831 { Bad_Opcode },
7832 { Bad_Opcode },
7833 { Bad_Opcode },
7834 { Bad_Opcode },
7835 { Bad_Opcode },
7836 { Bad_Opcode },
7837 { Bad_Opcode },
7838 { Bad_Opcode },
5dd85c99 7839 /* f8 */
592d1631
L
7840 { Bad_Opcode },
7841 { Bad_Opcode },
7842 { Bad_Opcode },
7843 { Bad_Opcode },
7844 { Bad_Opcode },
7845 { Bad_Opcode },
7846 { Bad_Opcode },
7847 { Bad_Opcode },
5dd85c99
SP
7848 },
7849 /* XOP_09 */
7850 {
7851 /* 00 */
592d1631 7852 { Bad_Opcode },
2a2a0f38
QN
7853 { REG_TABLE (REG_XOP_TBM_01) },
7854 { REG_TABLE (REG_XOP_TBM_02) },
592d1631
L
7855 { Bad_Opcode },
7856 { Bad_Opcode },
7857 { Bad_Opcode },
7858 { Bad_Opcode },
7859 { Bad_Opcode },
5dd85c99 7860 /* 08 */
592d1631
L
7861 { Bad_Opcode },
7862 { Bad_Opcode },
7863 { Bad_Opcode },
7864 { Bad_Opcode },
7865 { Bad_Opcode },
7866 { Bad_Opcode },
7867 { Bad_Opcode },
7868 { Bad_Opcode },
5dd85c99 7869 /* 10 */
592d1631
L
7870 { Bad_Opcode },
7871 { Bad_Opcode },
5dd85c99 7872 { REG_TABLE (REG_XOP_LWPCB) },
592d1631
L
7873 { Bad_Opcode },
7874 { Bad_Opcode },
7875 { Bad_Opcode },
7876 { Bad_Opcode },
7877 { Bad_Opcode },
5dd85c99 7878 /* 18 */
592d1631
L
7879 { Bad_Opcode },
7880 { Bad_Opcode },
7881 { Bad_Opcode },
7882 { Bad_Opcode },
7883 { Bad_Opcode },
7884 { Bad_Opcode },
7885 { Bad_Opcode },
7886 { Bad_Opcode },
5dd85c99 7887 /* 20 */
592d1631
L
7888 { Bad_Opcode },
7889 { Bad_Opcode },
7890 { Bad_Opcode },
7891 { Bad_Opcode },
7892 { Bad_Opcode },
7893 { Bad_Opcode },
7894 { Bad_Opcode },
7895 { Bad_Opcode },
5dd85c99 7896 /* 28 */
592d1631
L
7897 { Bad_Opcode },
7898 { Bad_Opcode },
7899 { Bad_Opcode },
7900 { Bad_Opcode },
7901 { Bad_Opcode },
7902 { Bad_Opcode },
7903 { Bad_Opcode },
7904 { Bad_Opcode },
5dd85c99 7905 /* 30 */
592d1631
L
7906 { Bad_Opcode },
7907 { Bad_Opcode },
7908 { Bad_Opcode },
7909 { Bad_Opcode },
7910 { Bad_Opcode },
7911 { Bad_Opcode },
7912 { Bad_Opcode },
7913 { Bad_Opcode },
5dd85c99 7914 /* 38 */
592d1631
L
7915 { Bad_Opcode },
7916 { Bad_Opcode },
7917 { Bad_Opcode },
7918 { Bad_Opcode },
7919 { Bad_Opcode },
7920 { Bad_Opcode },
7921 { Bad_Opcode },
7922 { Bad_Opcode },
5dd85c99 7923 /* 40 */
592d1631
L
7924 { Bad_Opcode },
7925 { Bad_Opcode },
7926 { Bad_Opcode },
7927 { Bad_Opcode },
7928 { Bad_Opcode },
7929 { Bad_Opcode },
7930 { Bad_Opcode },
7931 { Bad_Opcode },
5dd85c99 7932 /* 48 */
592d1631
L
7933 { Bad_Opcode },
7934 { Bad_Opcode },
7935 { Bad_Opcode },
7936 { Bad_Opcode },
7937 { Bad_Opcode },
7938 { Bad_Opcode },
7939 { Bad_Opcode },
7940 { Bad_Opcode },
5dd85c99 7941 /* 50 */
592d1631
L
7942 { Bad_Opcode },
7943 { Bad_Opcode },
7944 { Bad_Opcode },
7945 { Bad_Opcode },
7946 { Bad_Opcode },
7947 { Bad_Opcode },
7948 { Bad_Opcode },
7949 { Bad_Opcode },
5dd85c99 7950 /* 58 */
592d1631
L
7951 { Bad_Opcode },
7952 { Bad_Opcode },
7953 { Bad_Opcode },
7954 { Bad_Opcode },
7955 { Bad_Opcode },
7956 { Bad_Opcode },
7957 { Bad_Opcode },
7958 { Bad_Opcode },
5dd85c99 7959 /* 60 */
592d1631
L
7960 { Bad_Opcode },
7961 { Bad_Opcode },
7962 { Bad_Opcode },
7963 { Bad_Opcode },
7964 { Bad_Opcode },
7965 { Bad_Opcode },
7966 { Bad_Opcode },
7967 { Bad_Opcode },
5dd85c99 7968 /* 68 */
592d1631
L
7969 { Bad_Opcode },
7970 { Bad_Opcode },
7971 { Bad_Opcode },
7972 { Bad_Opcode },
7973 { Bad_Opcode },
7974 { Bad_Opcode },
7975 { Bad_Opcode },
7976 { Bad_Opcode },
5dd85c99 7977 /* 70 */
592d1631
L
7978 { Bad_Opcode },
7979 { Bad_Opcode },
7980 { Bad_Opcode },
7981 { Bad_Opcode },
7982 { Bad_Opcode },
7983 { Bad_Opcode },
7984 { Bad_Opcode },
7985 { Bad_Opcode },
5dd85c99 7986 /* 78 */
592d1631
L
7987 { Bad_Opcode },
7988 { Bad_Opcode },
7989 { Bad_Opcode },
7990 { Bad_Opcode },
7991 { Bad_Opcode },
7992 { Bad_Opcode },
7993 { Bad_Opcode },
7994 { Bad_Opcode },
5dd85c99 7995 /* 80 */
592a252b
L
7996 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_80) },
7997 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_81) },
bf890a93
IT
7998 { "vfrczss", { XM, EXd }, 0 },
7999 { "vfrczsd", { XM, EXq }, 0 },
592d1631
L
8000 { Bad_Opcode },
8001 { Bad_Opcode },
8002 { Bad_Opcode },
8003 { Bad_Opcode },
5dd85c99 8004 /* 88 */
592d1631
L
8005 { Bad_Opcode },
8006 { Bad_Opcode },
8007 { Bad_Opcode },
8008 { Bad_Opcode },
8009 { Bad_Opcode },
8010 { Bad_Opcode },
8011 { Bad_Opcode },
8012 { Bad_Opcode },
5dd85c99 8013 /* 90 */
bf890a93
IT
8014 { "vprotb", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8015 { "vprotw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8016 { "vprotd", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8017 { "vprotq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8018 { "vpshlb", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8019 { "vpshlw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8020 { "vpshld", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8021 { "vpshlq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
5dd85c99 8022 /* 98 */
bf890a93
IT
8023 { "vpshab", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8024 { "vpshaw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8025 { "vpshad", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8026 { "vpshaq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
592d1631
L
8027 { Bad_Opcode },
8028 { Bad_Opcode },
8029 { Bad_Opcode },
8030 { Bad_Opcode },
5dd85c99 8031 /* a0 */
592d1631
L
8032 { Bad_Opcode },
8033 { Bad_Opcode },
8034 { Bad_Opcode },
8035 { Bad_Opcode },
8036 { Bad_Opcode },
8037 { Bad_Opcode },
8038 { Bad_Opcode },
8039 { Bad_Opcode },
5dd85c99 8040 /* a8 */
592d1631
L
8041 { Bad_Opcode },
8042 { Bad_Opcode },
8043 { Bad_Opcode },
8044 { Bad_Opcode },
8045 { Bad_Opcode },
8046 { Bad_Opcode },
8047 { Bad_Opcode },
8048 { Bad_Opcode },
5dd85c99 8049 /* b0 */
592d1631
L
8050 { Bad_Opcode },
8051 { Bad_Opcode },
8052 { Bad_Opcode },
8053 { Bad_Opcode },
8054 { Bad_Opcode },
8055 { Bad_Opcode },
8056 { Bad_Opcode },
8057 { Bad_Opcode },
5dd85c99 8058 /* b8 */
592d1631
L
8059 { Bad_Opcode },
8060 { Bad_Opcode },
8061 { Bad_Opcode },
8062 { Bad_Opcode },
8063 { Bad_Opcode },
8064 { Bad_Opcode },
8065 { Bad_Opcode },
8066 { Bad_Opcode },
5dd85c99 8067 /* c0 */
592d1631 8068 { Bad_Opcode },
bf890a93
IT
8069 { "vphaddbw", { XM, EXxmm }, 0 },
8070 { "vphaddbd", { XM, EXxmm }, 0 },
8071 { "vphaddbq", { XM, EXxmm }, 0 },
592d1631
L
8072 { Bad_Opcode },
8073 { Bad_Opcode },
bf890a93
IT
8074 { "vphaddwd", { XM, EXxmm }, 0 },
8075 { "vphaddwq", { XM, EXxmm }, 0 },
5dd85c99 8076 /* c8 */
592d1631
L
8077 { Bad_Opcode },
8078 { Bad_Opcode },
8079 { Bad_Opcode },
bf890a93 8080 { "vphadddq", { XM, EXxmm }, 0 },
592d1631
L
8081 { Bad_Opcode },
8082 { Bad_Opcode },
8083 { Bad_Opcode },
8084 { Bad_Opcode },
5dd85c99 8085 /* d0 */
592d1631 8086 { Bad_Opcode },
bf890a93
IT
8087 { "vphaddubw", { XM, EXxmm }, 0 },
8088 { "vphaddubd", { XM, EXxmm }, 0 },
8089 { "vphaddubq", { XM, EXxmm }, 0 },
592d1631
L
8090 { Bad_Opcode },
8091 { Bad_Opcode },
bf890a93
IT
8092 { "vphadduwd", { XM, EXxmm }, 0 },
8093 { "vphadduwq", { XM, EXxmm }, 0 },
5dd85c99 8094 /* d8 */
592d1631
L
8095 { Bad_Opcode },
8096 { Bad_Opcode },
8097 { Bad_Opcode },
bf890a93 8098 { "vphaddudq", { XM, EXxmm }, 0 },
592d1631
L
8099 { Bad_Opcode },
8100 { Bad_Opcode },
8101 { Bad_Opcode },
8102 { Bad_Opcode },
5dd85c99 8103 /* e0 */
592d1631 8104 { Bad_Opcode },
bf890a93
IT
8105 { "vphsubbw", { XM, EXxmm }, 0 },
8106 { "vphsubwd", { XM, EXxmm }, 0 },
8107 { "vphsubdq", { XM, EXxmm }, 0 },
592d1631
L
8108 { Bad_Opcode },
8109 { Bad_Opcode },
8110 { Bad_Opcode },
8111 { Bad_Opcode },
4e7d34a6 8112 /* e8 */
592d1631
L
8113 { Bad_Opcode },
8114 { Bad_Opcode },
8115 { Bad_Opcode },
8116 { Bad_Opcode },
8117 { Bad_Opcode },
8118 { Bad_Opcode },
8119 { Bad_Opcode },
8120 { Bad_Opcode },
4e7d34a6 8121 /* f0 */
592d1631
L
8122 { Bad_Opcode },
8123 { Bad_Opcode },
8124 { Bad_Opcode },
8125 { Bad_Opcode },
8126 { Bad_Opcode },
8127 { Bad_Opcode },
8128 { Bad_Opcode },
8129 { Bad_Opcode },
4e7d34a6 8130 /* f8 */
592d1631
L
8131 { Bad_Opcode },
8132 { Bad_Opcode },
8133 { Bad_Opcode },
8134 { Bad_Opcode },
8135 { Bad_Opcode },
8136 { Bad_Opcode },
8137 { Bad_Opcode },
8138 { Bad_Opcode },
4e7d34a6 8139 },
f88c9eb0 8140 /* XOP_0A */
4e7d34a6
L
8141 {
8142 /* 00 */
592d1631
L
8143 { Bad_Opcode },
8144 { Bad_Opcode },
8145 { Bad_Opcode },
8146 { Bad_Opcode },
8147 { Bad_Opcode },
8148 { Bad_Opcode },
8149 { Bad_Opcode },
8150 { Bad_Opcode },
4e7d34a6 8151 /* 08 */
592d1631
L
8152 { Bad_Opcode },
8153 { Bad_Opcode },
8154 { Bad_Opcode },
8155 { Bad_Opcode },
8156 { Bad_Opcode },
8157 { Bad_Opcode },
8158 { Bad_Opcode },
8159 { Bad_Opcode },
4e7d34a6 8160 /* 10 */
bf890a93 8161 { "bextr", { Gv, Ev, Iq }, 0 },
592d1631 8162 { Bad_Opcode },
f88c9eb0 8163 { REG_TABLE (REG_XOP_LWP) },
592d1631
L
8164 { Bad_Opcode },
8165 { Bad_Opcode },
8166 { Bad_Opcode },
8167 { Bad_Opcode },
8168 { Bad_Opcode },
4e7d34a6 8169 /* 18 */
592d1631
L
8170 { Bad_Opcode },
8171 { Bad_Opcode },
8172 { Bad_Opcode },
8173 { Bad_Opcode },
8174 { Bad_Opcode },
8175 { Bad_Opcode },
8176 { Bad_Opcode },
8177 { Bad_Opcode },
4e7d34a6 8178 /* 20 */
592d1631
L
8179 { Bad_Opcode },
8180 { Bad_Opcode },
8181 { Bad_Opcode },
8182 { Bad_Opcode },
8183 { Bad_Opcode },
8184 { Bad_Opcode },
8185 { Bad_Opcode },
8186 { Bad_Opcode },
4e7d34a6 8187 /* 28 */
592d1631
L
8188 { Bad_Opcode },
8189 { Bad_Opcode },
8190 { Bad_Opcode },
8191 { Bad_Opcode },
8192 { Bad_Opcode },
8193 { Bad_Opcode },
8194 { Bad_Opcode },
8195 { Bad_Opcode },
4e7d34a6 8196 /* 30 */
592d1631
L
8197 { Bad_Opcode },
8198 { Bad_Opcode },
8199 { Bad_Opcode },
8200 { Bad_Opcode },
8201 { Bad_Opcode },
8202 { Bad_Opcode },
8203 { Bad_Opcode },
8204 { Bad_Opcode },
c0f3af97 8205 /* 38 */
592d1631
L
8206 { Bad_Opcode },
8207 { Bad_Opcode },
8208 { Bad_Opcode },
8209 { Bad_Opcode },
8210 { Bad_Opcode },
8211 { Bad_Opcode },
8212 { Bad_Opcode },
8213 { Bad_Opcode },
c0f3af97 8214 /* 40 */
592d1631
L
8215 { Bad_Opcode },
8216 { Bad_Opcode },
8217 { Bad_Opcode },
8218 { Bad_Opcode },
8219 { Bad_Opcode },
8220 { Bad_Opcode },
8221 { Bad_Opcode },
8222 { Bad_Opcode },
c1e679ec 8223 /* 48 */
592d1631
L
8224 { Bad_Opcode },
8225 { Bad_Opcode },
8226 { Bad_Opcode },
8227 { Bad_Opcode },
8228 { Bad_Opcode },
8229 { Bad_Opcode },
8230 { Bad_Opcode },
8231 { Bad_Opcode },
c1e679ec 8232 /* 50 */
592d1631
L
8233 { Bad_Opcode },
8234 { Bad_Opcode },
8235 { Bad_Opcode },
8236 { Bad_Opcode },
8237 { Bad_Opcode },
8238 { Bad_Opcode },
8239 { Bad_Opcode },
8240 { Bad_Opcode },
4e7d34a6 8241 /* 58 */
592d1631
L
8242 { Bad_Opcode },
8243 { Bad_Opcode },
8244 { Bad_Opcode },
8245 { Bad_Opcode },
8246 { Bad_Opcode },
8247 { Bad_Opcode },
8248 { Bad_Opcode },
8249 { Bad_Opcode },
4e7d34a6 8250 /* 60 */
592d1631
L
8251 { Bad_Opcode },
8252 { Bad_Opcode },
8253 { Bad_Opcode },
8254 { Bad_Opcode },
8255 { Bad_Opcode },
8256 { Bad_Opcode },
8257 { Bad_Opcode },
8258 { Bad_Opcode },
4e7d34a6 8259 /* 68 */
592d1631
L
8260 { Bad_Opcode },
8261 { Bad_Opcode },
8262 { Bad_Opcode },
8263 { Bad_Opcode },
8264 { Bad_Opcode },
8265 { Bad_Opcode },
8266 { Bad_Opcode },
8267 { Bad_Opcode },
4e7d34a6 8268 /* 70 */
592d1631
L
8269 { Bad_Opcode },
8270 { Bad_Opcode },
8271 { Bad_Opcode },
8272 { Bad_Opcode },
8273 { Bad_Opcode },
8274 { Bad_Opcode },
8275 { Bad_Opcode },
8276 { Bad_Opcode },
4e7d34a6 8277 /* 78 */
592d1631
L
8278 { Bad_Opcode },
8279 { Bad_Opcode },
8280 { Bad_Opcode },
8281 { Bad_Opcode },
8282 { Bad_Opcode },
8283 { Bad_Opcode },
8284 { Bad_Opcode },
8285 { Bad_Opcode },
4e7d34a6 8286 /* 80 */
592d1631
L
8287 { Bad_Opcode },
8288 { Bad_Opcode },
8289 { Bad_Opcode },
8290 { Bad_Opcode },
8291 { Bad_Opcode },
8292 { Bad_Opcode },
8293 { Bad_Opcode },
8294 { Bad_Opcode },
4e7d34a6 8295 /* 88 */
592d1631
L
8296 { Bad_Opcode },
8297 { Bad_Opcode },
8298 { Bad_Opcode },
8299 { Bad_Opcode },
8300 { Bad_Opcode },
8301 { Bad_Opcode },
8302 { Bad_Opcode },
8303 { Bad_Opcode },
4e7d34a6 8304 /* 90 */
592d1631
L
8305 { Bad_Opcode },
8306 { Bad_Opcode },
8307 { Bad_Opcode },
8308 { Bad_Opcode },
8309 { Bad_Opcode },
8310 { Bad_Opcode },
8311 { Bad_Opcode },
8312 { Bad_Opcode },
4e7d34a6 8313 /* 98 */
592d1631
L
8314 { Bad_Opcode },
8315 { Bad_Opcode },
8316 { Bad_Opcode },
8317 { Bad_Opcode },
8318 { Bad_Opcode },
8319 { Bad_Opcode },
8320 { Bad_Opcode },
8321 { Bad_Opcode },
4e7d34a6 8322 /* a0 */
592d1631
L
8323 { Bad_Opcode },
8324 { Bad_Opcode },
8325 { Bad_Opcode },
8326 { Bad_Opcode },
8327 { Bad_Opcode },
8328 { Bad_Opcode },
8329 { Bad_Opcode },
8330 { Bad_Opcode },
4e7d34a6 8331 /* a8 */
592d1631
L
8332 { Bad_Opcode },
8333 { Bad_Opcode },
8334 { Bad_Opcode },
8335 { Bad_Opcode },
8336 { Bad_Opcode },
8337 { Bad_Opcode },
8338 { Bad_Opcode },
8339 { Bad_Opcode },
d5d7db8e 8340 /* b0 */
592d1631
L
8341 { Bad_Opcode },
8342 { Bad_Opcode },
8343 { Bad_Opcode },
8344 { Bad_Opcode },
8345 { Bad_Opcode },
8346 { Bad_Opcode },
8347 { Bad_Opcode },
8348 { Bad_Opcode },
85f10a01 8349 /* b8 */
592d1631
L
8350 { Bad_Opcode },
8351 { Bad_Opcode },
8352 { Bad_Opcode },
8353 { Bad_Opcode },
8354 { Bad_Opcode },
8355 { Bad_Opcode },
8356 { Bad_Opcode },
8357 { Bad_Opcode },
85f10a01 8358 /* c0 */
592d1631
L
8359 { Bad_Opcode },
8360 { Bad_Opcode },
8361 { Bad_Opcode },
8362 { Bad_Opcode },
8363 { Bad_Opcode },
8364 { Bad_Opcode },
8365 { Bad_Opcode },
8366 { Bad_Opcode },
85f10a01 8367 /* c8 */
592d1631
L
8368 { Bad_Opcode },
8369 { Bad_Opcode },
8370 { Bad_Opcode },
8371 { Bad_Opcode },
8372 { Bad_Opcode },
8373 { Bad_Opcode },
8374 { Bad_Opcode },
8375 { Bad_Opcode },
85f10a01 8376 /* d0 */
592d1631
L
8377 { Bad_Opcode },
8378 { Bad_Opcode },
8379 { Bad_Opcode },
8380 { Bad_Opcode },
8381 { Bad_Opcode },
8382 { Bad_Opcode },
8383 { Bad_Opcode },
8384 { Bad_Opcode },
85f10a01 8385 /* d8 */
592d1631
L
8386 { Bad_Opcode },
8387 { Bad_Opcode },
8388 { Bad_Opcode },
8389 { Bad_Opcode },
8390 { Bad_Opcode },
8391 { Bad_Opcode },
8392 { Bad_Opcode },
8393 { Bad_Opcode },
85f10a01 8394 /* e0 */
592d1631
L
8395 { Bad_Opcode },
8396 { Bad_Opcode },
8397 { Bad_Opcode },
8398 { Bad_Opcode },
8399 { Bad_Opcode },
8400 { Bad_Opcode },
8401 { Bad_Opcode },
8402 { Bad_Opcode },
85f10a01 8403 /* e8 */
592d1631
L
8404 { Bad_Opcode },
8405 { Bad_Opcode },
8406 { Bad_Opcode },
8407 { Bad_Opcode },
8408 { Bad_Opcode },
8409 { Bad_Opcode },
8410 { Bad_Opcode },
8411 { Bad_Opcode },
85f10a01 8412 /* f0 */
592d1631
L
8413 { Bad_Opcode },
8414 { Bad_Opcode },
8415 { Bad_Opcode },
8416 { Bad_Opcode },
8417 { Bad_Opcode },
8418 { Bad_Opcode },
8419 { Bad_Opcode },
8420 { Bad_Opcode },
85f10a01 8421 /* f8 */
592d1631
L
8422 { Bad_Opcode },
8423 { Bad_Opcode },
8424 { Bad_Opcode },
8425 { Bad_Opcode },
8426 { Bad_Opcode },
8427 { Bad_Opcode },
8428 { Bad_Opcode },
8429 { Bad_Opcode },
85f10a01 8430 },
c0f3af97
L
8431};
8432
8433static const struct dis386 vex_table[][256] = {
8434 /* VEX_0F */
85f10a01
MM
8435 {
8436 /* 00 */
592d1631
L
8437 { Bad_Opcode },
8438 { Bad_Opcode },
8439 { Bad_Opcode },
8440 { Bad_Opcode },
8441 { Bad_Opcode },
8442 { Bad_Opcode },
8443 { Bad_Opcode },
8444 { Bad_Opcode },
85f10a01 8445 /* 08 */
592d1631
L
8446 { Bad_Opcode },
8447 { Bad_Opcode },
8448 { Bad_Opcode },
8449 { Bad_Opcode },
8450 { Bad_Opcode },
8451 { Bad_Opcode },
8452 { Bad_Opcode },
8453 { Bad_Opcode },
c0f3af97 8454 /* 10 */
592a252b
L
8455 { PREFIX_TABLE (PREFIX_VEX_0F10) },
8456 { PREFIX_TABLE (PREFIX_VEX_0F11) },
8457 { PREFIX_TABLE (PREFIX_VEX_0F12) },
8458 { MOD_TABLE (MOD_VEX_0F13) },
ec6f095a
L
8459 { "vunpcklpX", { XM, Vex, EXx }, 0 },
8460 { "vunpckhpX", { XM, Vex, EXx }, 0 },
592a252b
L
8461 { PREFIX_TABLE (PREFIX_VEX_0F16) },
8462 { MOD_TABLE (MOD_VEX_0F17) },
c0f3af97 8463 /* 18 */
592d1631
L
8464 { Bad_Opcode },
8465 { Bad_Opcode },
8466 { Bad_Opcode },
8467 { Bad_Opcode },
8468 { Bad_Opcode },
8469 { Bad_Opcode },
8470 { Bad_Opcode },
8471 { Bad_Opcode },
c0f3af97 8472 /* 20 */
592d1631
L
8473 { Bad_Opcode },
8474 { Bad_Opcode },
8475 { Bad_Opcode },
8476 { Bad_Opcode },
8477 { Bad_Opcode },
8478 { Bad_Opcode },
8479 { Bad_Opcode },
8480 { Bad_Opcode },
c0f3af97 8481 /* 28 */
ec6f095a
L
8482 { "vmovapX", { XM, EXx }, 0 },
8483 { "vmovapX", { EXxS, XM }, 0 },
592a252b
L
8484 { PREFIX_TABLE (PREFIX_VEX_0F2A) },
8485 { MOD_TABLE (MOD_VEX_0F2B) },
8486 { PREFIX_TABLE (PREFIX_VEX_0F2C) },
8487 { PREFIX_TABLE (PREFIX_VEX_0F2D) },
8488 { PREFIX_TABLE (PREFIX_VEX_0F2E) },
8489 { PREFIX_TABLE (PREFIX_VEX_0F2F) },
85f10a01 8490 /* 30 */
592d1631
L
8491 { Bad_Opcode },
8492 { Bad_Opcode },
8493 { Bad_Opcode },
8494 { Bad_Opcode },
8495 { Bad_Opcode },
8496 { Bad_Opcode },
8497 { Bad_Opcode },
8498 { Bad_Opcode },
4e7d34a6 8499 /* 38 */
592d1631
L
8500 { Bad_Opcode },
8501 { Bad_Opcode },
8502 { Bad_Opcode },
8503 { Bad_Opcode },
8504 { Bad_Opcode },
8505 { Bad_Opcode },
8506 { Bad_Opcode },
8507 { Bad_Opcode },
d5d7db8e 8508 /* 40 */
592d1631 8509 { Bad_Opcode },
43234a1e
L
8510 { PREFIX_TABLE (PREFIX_VEX_0F41) },
8511 { PREFIX_TABLE (PREFIX_VEX_0F42) },
592d1631 8512 { Bad_Opcode },
43234a1e
L
8513 { PREFIX_TABLE (PREFIX_VEX_0F44) },
8514 { PREFIX_TABLE (PREFIX_VEX_0F45) },
8515 { PREFIX_TABLE (PREFIX_VEX_0F46) },
8516 { PREFIX_TABLE (PREFIX_VEX_0F47) },
85f10a01 8517 /* 48 */
592d1631
L
8518 { Bad_Opcode },
8519 { Bad_Opcode },
1ba585e8 8520 { PREFIX_TABLE (PREFIX_VEX_0F4A) },
43234a1e 8521 { PREFIX_TABLE (PREFIX_VEX_0F4B) },
592d1631
L
8522 { Bad_Opcode },
8523 { Bad_Opcode },
8524 { Bad_Opcode },
8525 { Bad_Opcode },
d5d7db8e 8526 /* 50 */
592a252b
L
8527 { MOD_TABLE (MOD_VEX_0F50) },
8528 { PREFIX_TABLE (PREFIX_VEX_0F51) },
8529 { PREFIX_TABLE (PREFIX_VEX_0F52) },
8530 { PREFIX_TABLE (PREFIX_VEX_0F53) },
bf890a93
IT
8531 { "vandpX", { XM, Vex, EXx }, 0 },
8532 { "vandnpX", { XM, Vex, EXx }, 0 },
8533 { "vorpX", { XM, Vex, EXx }, 0 },
8534 { "vxorpX", { XM, Vex, EXx }, 0 },
c0f3af97 8535 /* 58 */
592a252b
L
8536 { PREFIX_TABLE (PREFIX_VEX_0F58) },
8537 { PREFIX_TABLE (PREFIX_VEX_0F59) },
8538 { PREFIX_TABLE (PREFIX_VEX_0F5A) },
8539 { PREFIX_TABLE (PREFIX_VEX_0F5B) },
8540 { PREFIX_TABLE (PREFIX_VEX_0F5C) },
8541 { PREFIX_TABLE (PREFIX_VEX_0F5D) },
8542 { PREFIX_TABLE (PREFIX_VEX_0F5E) },
8543 { PREFIX_TABLE (PREFIX_VEX_0F5F) },
c0f3af97 8544 /* 60 */
592a252b
L
8545 { PREFIX_TABLE (PREFIX_VEX_0F60) },
8546 { PREFIX_TABLE (PREFIX_VEX_0F61) },
8547 { PREFIX_TABLE (PREFIX_VEX_0F62) },
8548 { PREFIX_TABLE (PREFIX_VEX_0F63) },
8549 { PREFIX_TABLE (PREFIX_VEX_0F64) },
8550 { PREFIX_TABLE (PREFIX_VEX_0F65) },
8551 { PREFIX_TABLE (PREFIX_VEX_0F66) },
8552 { PREFIX_TABLE (PREFIX_VEX_0F67) },
c0f3af97 8553 /* 68 */
592a252b
L
8554 { PREFIX_TABLE (PREFIX_VEX_0F68) },
8555 { PREFIX_TABLE (PREFIX_VEX_0F69) },
8556 { PREFIX_TABLE (PREFIX_VEX_0F6A) },
8557 { PREFIX_TABLE (PREFIX_VEX_0F6B) },
8558 { PREFIX_TABLE (PREFIX_VEX_0F6C) },
8559 { PREFIX_TABLE (PREFIX_VEX_0F6D) },
8560 { PREFIX_TABLE (PREFIX_VEX_0F6E) },
8561 { PREFIX_TABLE (PREFIX_VEX_0F6F) },
c0f3af97 8562 /* 70 */
592a252b
L
8563 { PREFIX_TABLE (PREFIX_VEX_0F70) },
8564 { REG_TABLE (REG_VEX_0F71) },
8565 { REG_TABLE (REG_VEX_0F72) },
8566 { REG_TABLE (REG_VEX_0F73) },
8567 { PREFIX_TABLE (PREFIX_VEX_0F74) },
8568 { PREFIX_TABLE (PREFIX_VEX_0F75) },
8569 { PREFIX_TABLE (PREFIX_VEX_0F76) },
8570 { PREFIX_TABLE (PREFIX_VEX_0F77) },
c0f3af97 8571 /* 78 */
592d1631
L
8572 { Bad_Opcode },
8573 { Bad_Opcode },
8574 { Bad_Opcode },
8575 { Bad_Opcode },
592a252b
L
8576 { PREFIX_TABLE (PREFIX_VEX_0F7C) },
8577 { PREFIX_TABLE (PREFIX_VEX_0F7D) },
8578 { PREFIX_TABLE (PREFIX_VEX_0F7E) },
8579 { PREFIX_TABLE (PREFIX_VEX_0F7F) },
c0f3af97 8580 /* 80 */
592d1631
L
8581 { Bad_Opcode },
8582 { Bad_Opcode },
8583 { Bad_Opcode },
8584 { Bad_Opcode },
8585 { Bad_Opcode },
8586 { Bad_Opcode },
8587 { Bad_Opcode },
8588 { Bad_Opcode },
c0f3af97 8589 /* 88 */
592d1631
L
8590 { Bad_Opcode },
8591 { Bad_Opcode },
8592 { Bad_Opcode },
8593 { Bad_Opcode },
8594 { Bad_Opcode },
8595 { Bad_Opcode },
8596 { Bad_Opcode },
8597 { Bad_Opcode },
c0f3af97 8598 /* 90 */
43234a1e
L
8599 { PREFIX_TABLE (PREFIX_VEX_0F90) },
8600 { PREFIX_TABLE (PREFIX_VEX_0F91) },
8601 { PREFIX_TABLE (PREFIX_VEX_0F92) },
8602 { PREFIX_TABLE (PREFIX_VEX_0F93) },
592d1631
L
8603 { Bad_Opcode },
8604 { Bad_Opcode },
8605 { Bad_Opcode },
8606 { Bad_Opcode },
c0f3af97 8607 /* 98 */
43234a1e 8608 { PREFIX_TABLE (PREFIX_VEX_0F98) },
1ba585e8 8609 { PREFIX_TABLE (PREFIX_VEX_0F99) },
592d1631
L
8610 { Bad_Opcode },
8611 { Bad_Opcode },
8612 { Bad_Opcode },
8613 { Bad_Opcode },
8614 { Bad_Opcode },
8615 { Bad_Opcode },
c0f3af97 8616 /* a0 */
592d1631
L
8617 { Bad_Opcode },
8618 { Bad_Opcode },
8619 { Bad_Opcode },
8620 { Bad_Opcode },
8621 { Bad_Opcode },
8622 { Bad_Opcode },
8623 { Bad_Opcode },
8624 { Bad_Opcode },
c0f3af97 8625 /* a8 */
592d1631
L
8626 { Bad_Opcode },
8627 { Bad_Opcode },
8628 { Bad_Opcode },
8629 { Bad_Opcode },
8630 { Bad_Opcode },
8631 { Bad_Opcode },
592a252b 8632 { REG_TABLE (REG_VEX_0FAE) },
592d1631 8633 { Bad_Opcode },
c0f3af97 8634 /* b0 */
592d1631
L
8635 { Bad_Opcode },
8636 { Bad_Opcode },
8637 { Bad_Opcode },
8638 { Bad_Opcode },
8639 { Bad_Opcode },
8640 { Bad_Opcode },
8641 { Bad_Opcode },
8642 { Bad_Opcode },
c0f3af97 8643 /* b8 */
592d1631
L
8644 { Bad_Opcode },
8645 { Bad_Opcode },
8646 { Bad_Opcode },
8647 { Bad_Opcode },
8648 { Bad_Opcode },
8649 { Bad_Opcode },
8650 { Bad_Opcode },
8651 { Bad_Opcode },
c0f3af97 8652 /* c0 */
592d1631
L
8653 { Bad_Opcode },
8654 { Bad_Opcode },
592a252b 8655 { PREFIX_TABLE (PREFIX_VEX_0FC2) },
592d1631 8656 { Bad_Opcode },
592a252b
L
8657 { PREFIX_TABLE (PREFIX_VEX_0FC4) },
8658 { PREFIX_TABLE (PREFIX_VEX_0FC5) },
bf890a93 8659 { "vshufpX", { XM, Vex, EXx, Ib }, 0 },
592d1631 8660 { Bad_Opcode },
c0f3af97 8661 /* c8 */
592d1631
L
8662 { Bad_Opcode },
8663 { Bad_Opcode },
8664 { Bad_Opcode },
8665 { Bad_Opcode },
8666 { Bad_Opcode },
8667 { Bad_Opcode },
8668 { Bad_Opcode },
8669 { Bad_Opcode },
c0f3af97 8670 /* d0 */
592a252b
L
8671 { PREFIX_TABLE (PREFIX_VEX_0FD0) },
8672 { PREFIX_TABLE (PREFIX_VEX_0FD1) },
8673 { PREFIX_TABLE (PREFIX_VEX_0FD2) },
8674 { PREFIX_TABLE (PREFIX_VEX_0FD3) },
8675 { PREFIX_TABLE (PREFIX_VEX_0FD4) },
8676 { PREFIX_TABLE (PREFIX_VEX_0FD5) },
8677 { PREFIX_TABLE (PREFIX_VEX_0FD6) },
8678 { PREFIX_TABLE (PREFIX_VEX_0FD7) },
c0f3af97 8679 /* d8 */
592a252b
L
8680 { PREFIX_TABLE (PREFIX_VEX_0FD8) },
8681 { PREFIX_TABLE (PREFIX_VEX_0FD9) },
8682 { PREFIX_TABLE (PREFIX_VEX_0FDA) },
8683 { PREFIX_TABLE (PREFIX_VEX_0FDB) },
8684 { PREFIX_TABLE (PREFIX_VEX_0FDC) },
8685 { PREFIX_TABLE (PREFIX_VEX_0FDD) },
8686 { PREFIX_TABLE (PREFIX_VEX_0FDE) },
8687 { PREFIX_TABLE (PREFIX_VEX_0FDF) },
c0f3af97 8688 /* e0 */
592a252b
L
8689 { PREFIX_TABLE (PREFIX_VEX_0FE0) },
8690 { PREFIX_TABLE (PREFIX_VEX_0FE1) },
8691 { PREFIX_TABLE (PREFIX_VEX_0FE2) },
8692 { PREFIX_TABLE (PREFIX_VEX_0FE3) },
8693 { PREFIX_TABLE (PREFIX_VEX_0FE4) },
8694 { PREFIX_TABLE (PREFIX_VEX_0FE5) },
8695 { PREFIX_TABLE (PREFIX_VEX_0FE6) },
8696 { PREFIX_TABLE (PREFIX_VEX_0FE7) },
c0f3af97 8697 /* e8 */
592a252b
L
8698 { PREFIX_TABLE (PREFIX_VEX_0FE8) },
8699 { PREFIX_TABLE (PREFIX_VEX_0FE9) },
8700 { PREFIX_TABLE (PREFIX_VEX_0FEA) },
8701 { PREFIX_TABLE (PREFIX_VEX_0FEB) },
8702 { PREFIX_TABLE (PREFIX_VEX_0FEC) },
8703 { PREFIX_TABLE (PREFIX_VEX_0FED) },
8704 { PREFIX_TABLE (PREFIX_VEX_0FEE) },
8705 { PREFIX_TABLE (PREFIX_VEX_0FEF) },
c0f3af97 8706 /* f0 */
592a252b
L
8707 { PREFIX_TABLE (PREFIX_VEX_0FF0) },
8708 { PREFIX_TABLE (PREFIX_VEX_0FF1) },
8709 { PREFIX_TABLE (PREFIX_VEX_0FF2) },
8710 { PREFIX_TABLE (PREFIX_VEX_0FF3) },
8711 { PREFIX_TABLE (PREFIX_VEX_0FF4) },
8712 { PREFIX_TABLE (PREFIX_VEX_0FF5) },
8713 { PREFIX_TABLE (PREFIX_VEX_0FF6) },
8714 { PREFIX_TABLE (PREFIX_VEX_0FF7) },
c0f3af97 8715 /* f8 */
592a252b
L
8716 { PREFIX_TABLE (PREFIX_VEX_0FF8) },
8717 { PREFIX_TABLE (PREFIX_VEX_0FF9) },
8718 { PREFIX_TABLE (PREFIX_VEX_0FFA) },
8719 { PREFIX_TABLE (PREFIX_VEX_0FFB) },
8720 { PREFIX_TABLE (PREFIX_VEX_0FFC) },
8721 { PREFIX_TABLE (PREFIX_VEX_0FFD) },
8722 { PREFIX_TABLE (PREFIX_VEX_0FFE) },
592d1631 8723 { Bad_Opcode },
c0f3af97
L
8724 },
8725 /* VEX_0F38 */
8726 {
8727 /* 00 */
592a252b
L
8728 { PREFIX_TABLE (PREFIX_VEX_0F3800) },
8729 { PREFIX_TABLE (PREFIX_VEX_0F3801) },
8730 { PREFIX_TABLE (PREFIX_VEX_0F3802) },
8731 { PREFIX_TABLE (PREFIX_VEX_0F3803) },
8732 { PREFIX_TABLE (PREFIX_VEX_0F3804) },
8733 { PREFIX_TABLE (PREFIX_VEX_0F3805) },
8734 { PREFIX_TABLE (PREFIX_VEX_0F3806) },
8735 { PREFIX_TABLE (PREFIX_VEX_0F3807) },
c0f3af97 8736 /* 08 */
592a252b
L
8737 { PREFIX_TABLE (PREFIX_VEX_0F3808) },
8738 { PREFIX_TABLE (PREFIX_VEX_0F3809) },
8739 { PREFIX_TABLE (PREFIX_VEX_0F380A) },
8740 { PREFIX_TABLE (PREFIX_VEX_0F380B) },
8741 { PREFIX_TABLE (PREFIX_VEX_0F380C) },
8742 { PREFIX_TABLE (PREFIX_VEX_0F380D) },
8743 { PREFIX_TABLE (PREFIX_VEX_0F380E) },
8744 { PREFIX_TABLE (PREFIX_VEX_0F380F) },
c0f3af97 8745 /* 10 */
592d1631
L
8746 { Bad_Opcode },
8747 { Bad_Opcode },
8748 { Bad_Opcode },
592a252b 8749 { PREFIX_TABLE (PREFIX_VEX_0F3813) },
592d1631
L
8750 { Bad_Opcode },
8751 { Bad_Opcode },
6c30d220 8752 { PREFIX_TABLE (PREFIX_VEX_0F3816) },
592a252b 8753 { PREFIX_TABLE (PREFIX_VEX_0F3817) },
c0f3af97 8754 /* 18 */
592a252b
L
8755 { PREFIX_TABLE (PREFIX_VEX_0F3818) },
8756 { PREFIX_TABLE (PREFIX_VEX_0F3819) },
8757 { PREFIX_TABLE (PREFIX_VEX_0F381A) },
592d1631 8758 { Bad_Opcode },
592a252b
L
8759 { PREFIX_TABLE (PREFIX_VEX_0F381C) },
8760 { PREFIX_TABLE (PREFIX_VEX_0F381D) },
8761 { PREFIX_TABLE (PREFIX_VEX_0F381E) },
592d1631 8762 { Bad_Opcode },
c0f3af97 8763 /* 20 */
592a252b
L
8764 { PREFIX_TABLE (PREFIX_VEX_0F3820) },
8765 { PREFIX_TABLE (PREFIX_VEX_0F3821) },
8766 { PREFIX_TABLE (PREFIX_VEX_0F3822) },
8767 { PREFIX_TABLE (PREFIX_VEX_0F3823) },
8768 { PREFIX_TABLE (PREFIX_VEX_0F3824) },
8769 { PREFIX_TABLE (PREFIX_VEX_0F3825) },
592d1631
L
8770 { Bad_Opcode },
8771 { Bad_Opcode },
c0f3af97 8772 /* 28 */
592a252b
L
8773 { PREFIX_TABLE (PREFIX_VEX_0F3828) },
8774 { PREFIX_TABLE (PREFIX_VEX_0F3829) },
8775 { PREFIX_TABLE (PREFIX_VEX_0F382A) },
8776 { PREFIX_TABLE (PREFIX_VEX_0F382B) },
8777 { PREFIX_TABLE (PREFIX_VEX_0F382C) },
8778 { PREFIX_TABLE (PREFIX_VEX_0F382D) },
8779 { PREFIX_TABLE (PREFIX_VEX_0F382E) },
8780 { PREFIX_TABLE (PREFIX_VEX_0F382F) },
c0f3af97 8781 /* 30 */
592a252b
L
8782 { PREFIX_TABLE (PREFIX_VEX_0F3830) },
8783 { PREFIX_TABLE (PREFIX_VEX_0F3831) },
8784 { PREFIX_TABLE (PREFIX_VEX_0F3832) },
8785 { PREFIX_TABLE (PREFIX_VEX_0F3833) },
8786 { PREFIX_TABLE (PREFIX_VEX_0F3834) },
8787 { PREFIX_TABLE (PREFIX_VEX_0F3835) },
6c30d220 8788 { PREFIX_TABLE (PREFIX_VEX_0F3836) },
592a252b 8789 { PREFIX_TABLE (PREFIX_VEX_0F3837) },
c0f3af97 8790 /* 38 */
592a252b
L
8791 { PREFIX_TABLE (PREFIX_VEX_0F3838) },
8792 { PREFIX_TABLE (PREFIX_VEX_0F3839) },
8793 { PREFIX_TABLE (PREFIX_VEX_0F383A) },
8794 { PREFIX_TABLE (PREFIX_VEX_0F383B) },
8795 { PREFIX_TABLE (PREFIX_VEX_0F383C) },
8796 { PREFIX_TABLE (PREFIX_VEX_0F383D) },
8797 { PREFIX_TABLE (PREFIX_VEX_0F383E) },
8798 { PREFIX_TABLE (PREFIX_VEX_0F383F) },
c0f3af97 8799 /* 40 */
592a252b
L
8800 { PREFIX_TABLE (PREFIX_VEX_0F3840) },
8801 { PREFIX_TABLE (PREFIX_VEX_0F3841) },
592d1631
L
8802 { Bad_Opcode },
8803 { Bad_Opcode },
8804 { Bad_Opcode },
6c30d220
L
8805 { PREFIX_TABLE (PREFIX_VEX_0F3845) },
8806 { PREFIX_TABLE (PREFIX_VEX_0F3846) },
8807 { PREFIX_TABLE (PREFIX_VEX_0F3847) },
c0f3af97 8808 /* 48 */
592d1631
L
8809 { Bad_Opcode },
8810 { Bad_Opcode },
8811 { Bad_Opcode },
8812 { Bad_Opcode },
8813 { Bad_Opcode },
8814 { Bad_Opcode },
8815 { Bad_Opcode },
8816 { Bad_Opcode },
c0f3af97 8817 /* 50 */
592d1631
L
8818 { Bad_Opcode },
8819 { Bad_Opcode },
8820 { Bad_Opcode },
8821 { Bad_Opcode },
8822 { Bad_Opcode },
8823 { Bad_Opcode },
8824 { Bad_Opcode },
8825 { Bad_Opcode },
c0f3af97 8826 /* 58 */
6c30d220
L
8827 { PREFIX_TABLE (PREFIX_VEX_0F3858) },
8828 { PREFIX_TABLE (PREFIX_VEX_0F3859) },
8829 { PREFIX_TABLE (PREFIX_VEX_0F385A) },
592d1631
L
8830 { Bad_Opcode },
8831 { Bad_Opcode },
8832 { Bad_Opcode },
8833 { Bad_Opcode },
8834 { Bad_Opcode },
c0f3af97 8835 /* 60 */
592d1631
L
8836 { Bad_Opcode },
8837 { Bad_Opcode },
8838 { Bad_Opcode },
8839 { Bad_Opcode },
8840 { Bad_Opcode },
8841 { Bad_Opcode },
8842 { Bad_Opcode },
8843 { Bad_Opcode },
c0f3af97 8844 /* 68 */
592d1631
L
8845 { Bad_Opcode },
8846 { Bad_Opcode },
8847 { Bad_Opcode },
8848 { Bad_Opcode },
8849 { Bad_Opcode },
8850 { Bad_Opcode },
8851 { Bad_Opcode },
8852 { Bad_Opcode },
c0f3af97 8853 /* 70 */
592d1631
L
8854 { Bad_Opcode },
8855 { Bad_Opcode },
8856 { Bad_Opcode },
8857 { Bad_Opcode },
8858 { Bad_Opcode },
8859 { Bad_Opcode },
8860 { Bad_Opcode },
8861 { Bad_Opcode },
c0f3af97 8862 /* 78 */
6c30d220
L
8863 { PREFIX_TABLE (PREFIX_VEX_0F3878) },
8864 { PREFIX_TABLE (PREFIX_VEX_0F3879) },
592d1631
L
8865 { Bad_Opcode },
8866 { Bad_Opcode },
8867 { Bad_Opcode },
8868 { Bad_Opcode },
8869 { Bad_Opcode },
8870 { Bad_Opcode },
c0f3af97 8871 /* 80 */
592d1631
L
8872 { Bad_Opcode },
8873 { Bad_Opcode },
8874 { Bad_Opcode },
8875 { Bad_Opcode },
8876 { Bad_Opcode },
8877 { Bad_Opcode },
8878 { Bad_Opcode },
8879 { Bad_Opcode },
c0f3af97 8880 /* 88 */
592d1631
L
8881 { Bad_Opcode },
8882 { Bad_Opcode },
8883 { Bad_Opcode },
8884 { Bad_Opcode },
6c30d220 8885 { PREFIX_TABLE (PREFIX_VEX_0F388C) },
592d1631 8886 { Bad_Opcode },
6c30d220 8887 { PREFIX_TABLE (PREFIX_VEX_0F388E) },
592d1631 8888 { Bad_Opcode },
c0f3af97 8889 /* 90 */
6c30d220
L
8890 { PREFIX_TABLE (PREFIX_VEX_0F3890) },
8891 { PREFIX_TABLE (PREFIX_VEX_0F3891) },
8892 { PREFIX_TABLE (PREFIX_VEX_0F3892) },
8893 { PREFIX_TABLE (PREFIX_VEX_0F3893) },
592d1631
L
8894 { Bad_Opcode },
8895 { Bad_Opcode },
592a252b
L
8896 { PREFIX_TABLE (PREFIX_VEX_0F3896) },
8897 { PREFIX_TABLE (PREFIX_VEX_0F3897) },
c0f3af97 8898 /* 98 */
592a252b
L
8899 { PREFIX_TABLE (PREFIX_VEX_0F3898) },
8900 { PREFIX_TABLE (PREFIX_VEX_0F3899) },
8901 { PREFIX_TABLE (PREFIX_VEX_0F389A) },
8902 { PREFIX_TABLE (PREFIX_VEX_0F389B) },
8903 { PREFIX_TABLE (PREFIX_VEX_0F389C) },
8904 { PREFIX_TABLE (PREFIX_VEX_0F389D) },
8905 { PREFIX_TABLE (PREFIX_VEX_0F389E) },
8906 { PREFIX_TABLE (PREFIX_VEX_0F389F) },
c0f3af97 8907 /* a0 */
592d1631
L
8908 { Bad_Opcode },
8909 { Bad_Opcode },
8910 { Bad_Opcode },
8911 { Bad_Opcode },
8912 { Bad_Opcode },
8913 { Bad_Opcode },
592a252b
L
8914 { PREFIX_TABLE (PREFIX_VEX_0F38A6) },
8915 { PREFIX_TABLE (PREFIX_VEX_0F38A7) },
c0f3af97 8916 /* a8 */
592a252b
L
8917 { PREFIX_TABLE (PREFIX_VEX_0F38A8) },
8918 { PREFIX_TABLE (PREFIX_VEX_0F38A9) },
8919 { PREFIX_TABLE (PREFIX_VEX_0F38AA) },
8920 { PREFIX_TABLE (PREFIX_VEX_0F38AB) },
8921 { PREFIX_TABLE (PREFIX_VEX_0F38AC) },
8922 { PREFIX_TABLE (PREFIX_VEX_0F38AD) },
8923 { PREFIX_TABLE (PREFIX_VEX_0F38AE) },
8924 { PREFIX_TABLE (PREFIX_VEX_0F38AF) },
c0f3af97 8925 /* b0 */
592d1631
L
8926 { Bad_Opcode },
8927 { Bad_Opcode },
8928 { Bad_Opcode },
8929 { Bad_Opcode },
8930 { Bad_Opcode },
8931 { Bad_Opcode },
592a252b
L
8932 { PREFIX_TABLE (PREFIX_VEX_0F38B6) },
8933 { PREFIX_TABLE (PREFIX_VEX_0F38B7) },
c0f3af97 8934 /* b8 */
592a252b
L
8935 { PREFIX_TABLE (PREFIX_VEX_0F38B8) },
8936 { PREFIX_TABLE (PREFIX_VEX_0F38B9) },
8937 { PREFIX_TABLE (PREFIX_VEX_0F38BA) },
8938 { PREFIX_TABLE (PREFIX_VEX_0F38BB) },
8939 { PREFIX_TABLE (PREFIX_VEX_0F38BC) },
8940 { PREFIX_TABLE (PREFIX_VEX_0F38BD) },
8941 { PREFIX_TABLE (PREFIX_VEX_0F38BE) },
8942 { PREFIX_TABLE (PREFIX_VEX_0F38BF) },
c0f3af97 8943 /* c0 */
592d1631
L
8944 { Bad_Opcode },
8945 { Bad_Opcode },
8946 { Bad_Opcode },
8947 { Bad_Opcode },
8948 { Bad_Opcode },
8949 { Bad_Opcode },
8950 { Bad_Opcode },
8951 { Bad_Opcode },
c0f3af97 8952 /* c8 */
592d1631
L
8953 { Bad_Opcode },
8954 { Bad_Opcode },
8955 { Bad_Opcode },
8956 { Bad_Opcode },
8957 { Bad_Opcode },
8958 { Bad_Opcode },
8959 { Bad_Opcode },
48521003 8960 { PREFIX_TABLE (PREFIX_VEX_0F38CF) },
c0f3af97 8961 /* d0 */
592d1631
L
8962 { Bad_Opcode },
8963 { Bad_Opcode },
8964 { Bad_Opcode },
8965 { Bad_Opcode },
8966 { Bad_Opcode },
8967 { Bad_Opcode },
8968 { Bad_Opcode },
8969 { Bad_Opcode },
c0f3af97 8970 /* d8 */
592d1631
L
8971 { Bad_Opcode },
8972 { Bad_Opcode },
8973 { Bad_Opcode },
592a252b
L
8974 { PREFIX_TABLE (PREFIX_VEX_0F38DB) },
8975 { PREFIX_TABLE (PREFIX_VEX_0F38DC) },
8976 { PREFIX_TABLE (PREFIX_VEX_0F38DD) },
8977 { PREFIX_TABLE (PREFIX_VEX_0F38DE) },
8978 { PREFIX_TABLE (PREFIX_VEX_0F38DF) },
c0f3af97 8979 /* e0 */
592d1631
L
8980 { Bad_Opcode },
8981 { Bad_Opcode },
8982 { Bad_Opcode },
8983 { Bad_Opcode },
8984 { Bad_Opcode },
8985 { Bad_Opcode },
8986 { Bad_Opcode },
8987 { Bad_Opcode },
c0f3af97 8988 /* e8 */
592d1631
L
8989 { Bad_Opcode },
8990 { Bad_Opcode },
8991 { Bad_Opcode },
8992 { Bad_Opcode },
8993 { Bad_Opcode },
8994 { Bad_Opcode },
8995 { Bad_Opcode },
8996 { Bad_Opcode },
c0f3af97 8997 /* f0 */
592d1631
L
8998 { Bad_Opcode },
8999 { Bad_Opcode },
f12dc422
L
9000 { PREFIX_TABLE (PREFIX_VEX_0F38F2) },
9001 { REG_TABLE (REG_VEX_0F38F3) },
592d1631 9002 { Bad_Opcode },
6c30d220
L
9003 { PREFIX_TABLE (PREFIX_VEX_0F38F5) },
9004 { PREFIX_TABLE (PREFIX_VEX_0F38F6) },
f12dc422 9005 { PREFIX_TABLE (PREFIX_VEX_0F38F7) },
c0f3af97 9006 /* f8 */
592d1631
L
9007 { Bad_Opcode },
9008 { Bad_Opcode },
9009 { Bad_Opcode },
9010 { Bad_Opcode },
9011 { Bad_Opcode },
9012 { Bad_Opcode },
9013 { Bad_Opcode },
9014 { Bad_Opcode },
c0f3af97
L
9015 },
9016 /* VEX_0F3A */
9017 {
9018 /* 00 */
6c30d220
L
9019 { PREFIX_TABLE (PREFIX_VEX_0F3A00) },
9020 { PREFIX_TABLE (PREFIX_VEX_0F3A01) },
9021 { PREFIX_TABLE (PREFIX_VEX_0F3A02) },
592d1631 9022 { Bad_Opcode },
592a252b
L
9023 { PREFIX_TABLE (PREFIX_VEX_0F3A04) },
9024 { PREFIX_TABLE (PREFIX_VEX_0F3A05) },
9025 { PREFIX_TABLE (PREFIX_VEX_0F3A06) },
592d1631 9026 { Bad_Opcode },
c0f3af97 9027 /* 08 */
592a252b
L
9028 { PREFIX_TABLE (PREFIX_VEX_0F3A08) },
9029 { PREFIX_TABLE (PREFIX_VEX_0F3A09) },
9030 { PREFIX_TABLE (PREFIX_VEX_0F3A0A) },
9031 { PREFIX_TABLE (PREFIX_VEX_0F3A0B) },
9032 { PREFIX_TABLE (PREFIX_VEX_0F3A0C) },
9033 { PREFIX_TABLE (PREFIX_VEX_0F3A0D) },
9034 { PREFIX_TABLE (PREFIX_VEX_0F3A0E) },
9035 { PREFIX_TABLE (PREFIX_VEX_0F3A0F) },
c0f3af97 9036 /* 10 */
592d1631
L
9037 { Bad_Opcode },
9038 { Bad_Opcode },
9039 { Bad_Opcode },
9040 { Bad_Opcode },
592a252b
L
9041 { PREFIX_TABLE (PREFIX_VEX_0F3A14) },
9042 { PREFIX_TABLE (PREFIX_VEX_0F3A15) },
9043 { PREFIX_TABLE (PREFIX_VEX_0F3A16) },
9044 { PREFIX_TABLE (PREFIX_VEX_0F3A17) },
c0f3af97 9045 /* 18 */
592a252b
L
9046 { PREFIX_TABLE (PREFIX_VEX_0F3A18) },
9047 { PREFIX_TABLE (PREFIX_VEX_0F3A19) },
592d1631
L
9048 { Bad_Opcode },
9049 { Bad_Opcode },
9050 { Bad_Opcode },
592a252b 9051 { PREFIX_TABLE (PREFIX_VEX_0F3A1D) },
592d1631
L
9052 { Bad_Opcode },
9053 { Bad_Opcode },
c0f3af97 9054 /* 20 */
592a252b
L
9055 { PREFIX_TABLE (PREFIX_VEX_0F3A20) },
9056 { PREFIX_TABLE (PREFIX_VEX_0F3A21) },
9057 { PREFIX_TABLE (PREFIX_VEX_0F3A22) },
592d1631
L
9058 { Bad_Opcode },
9059 { Bad_Opcode },
9060 { Bad_Opcode },
9061 { Bad_Opcode },
9062 { Bad_Opcode },
c0f3af97 9063 /* 28 */
592d1631
L
9064 { Bad_Opcode },
9065 { Bad_Opcode },
9066 { Bad_Opcode },
9067 { Bad_Opcode },
9068 { Bad_Opcode },
9069 { Bad_Opcode },
9070 { Bad_Opcode },
9071 { Bad_Opcode },
c0f3af97 9072 /* 30 */
43234a1e 9073 { PREFIX_TABLE (PREFIX_VEX_0F3A30) },
1ba585e8 9074 { PREFIX_TABLE (PREFIX_VEX_0F3A31) },
43234a1e 9075 { PREFIX_TABLE (PREFIX_VEX_0F3A32) },
1ba585e8 9076 { PREFIX_TABLE (PREFIX_VEX_0F3A33) },
592d1631
L
9077 { Bad_Opcode },
9078 { Bad_Opcode },
9079 { Bad_Opcode },
9080 { Bad_Opcode },
c0f3af97 9081 /* 38 */
6c30d220
L
9082 { PREFIX_TABLE (PREFIX_VEX_0F3A38) },
9083 { PREFIX_TABLE (PREFIX_VEX_0F3A39) },
592d1631
L
9084 { Bad_Opcode },
9085 { Bad_Opcode },
9086 { Bad_Opcode },
9087 { Bad_Opcode },
9088 { Bad_Opcode },
9089 { Bad_Opcode },
c0f3af97 9090 /* 40 */
592a252b
L
9091 { PREFIX_TABLE (PREFIX_VEX_0F3A40) },
9092 { PREFIX_TABLE (PREFIX_VEX_0F3A41) },
9093 { PREFIX_TABLE (PREFIX_VEX_0F3A42) },
592d1631 9094 { Bad_Opcode },
592a252b 9095 { PREFIX_TABLE (PREFIX_VEX_0F3A44) },
592d1631 9096 { Bad_Opcode },
6c30d220 9097 { PREFIX_TABLE (PREFIX_VEX_0F3A46) },
592d1631 9098 { Bad_Opcode },
c0f3af97 9099 /* 48 */
592a252b
L
9100 { PREFIX_TABLE (PREFIX_VEX_0F3A48) },
9101 { PREFIX_TABLE (PREFIX_VEX_0F3A49) },
9102 { PREFIX_TABLE (PREFIX_VEX_0F3A4A) },
9103 { PREFIX_TABLE (PREFIX_VEX_0F3A4B) },
9104 { PREFIX_TABLE (PREFIX_VEX_0F3A4C) },
592d1631
L
9105 { Bad_Opcode },
9106 { Bad_Opcode },
9107 { Bad_Opcode },
c0f3af97 9108 /* 50 */
592d1631
L
9109 { Bad_Opcode },
9110 { Bad_Opcode },
9111 { Bad_Opcode },
9112 { Bad_Opcode },
9113 { Bad_Opcode },
9114 { Bad_Opcode },
9115 { Bad_Opcode },
9116 { Bad_Opcode },
c0f3af97 9117 /* 58 */
592d1631
L
9118 { Bad_Opcode },
9119 { Bad_Opcode },
9120 { Bad_Opcode },
9121 { Bad_Opcode },
592a252b
L
9122 { PREFIX_TABLE (PREFIX_VEX_0F3A5C) },
9123 { PREFIX_TABLE (PREFIX_VEX_0F3A5D) },
9124 { PREFIX_TABLE (PREFIX_VEX_0F3A5E) },
9125 { PREFIX_TABLE (PREFIX_VEX_0F3A5F) },
c0f3af97 9126 /* 60 */
592a252b
L
9127 { PREFIX_TABLE (PREFIX_VEX_0F3A60) },
9128 { PREFIX_TABLE (PREFIX_VEX_0F3A61) },
9129 { PREFIX_TABLE (PREFIX_VEX_0F3A62) },
9130 { PREFIX_TABLE (PREFIX_VEX_0F3A63) },
592d1631
L
9131 { Bad_Opcode },
9132 { Bad_Opcode },
9133 { Bad_Opcode },
9134 { Bad_Opcode },
c0f3af97 9135 /* 68 */
592a252b
L
9136 { PREFIX_TABLE (PREFIX_VEX_0F3A68) },
9137 { PREFIX_TABLE (PREFIX_VEX_0F3A69) },
9138 { PREFIX_TABLE (PREFIX_VEX_0F3A6A) },
9139 { PREFIX_TABLE (PREFIX_VEX_0F3A6B) },
9140 { PREFIX_TABLE (PREFIX_VEX_0F3A6C) },
9141 { PREFIX_TABLE (PREFIX_VEX_0F3A6D) },
9142 { PREFIX_TABLE (PREFIX_VEX_0F3A6E) },
9143 { PREFIX_TABLE (PREFIX_VEX_0F3A6F) },
c0f3af97 9144 /* 70 */
592d1631
L
9145 { Bad_Opcode },
9146 { Bad_Opcode },
9147 { Bad_Opcode },
9148 { Bad_Opcode },
9149 { Bad_Opcode },
9150 { Bad_Opcode },
9151 { Bad_Opcode },
9152 { Bad_Opcode },
c0f3af97 9153 /* 78 */
592a252b
L
9154 { PREFIX_TABLE (PREFIX_VEX_0F3A78) },
9155 { PREFIX_TABLE (PREFIX_VEX_0F3A79) },
9156 { PREFIX_TABLE (PREFIX_VEX_0F3A7A) },
9157 { PREFIX_TABLE (PREFIX_VEX_0F3A7B) },
9158 { PREFIX_TABLE (PREFIX_VEX_0F3A7C) },
9159 { PREFIX_TABLE (PREFIX_VEX_0F3A7D) },
9160 { PREFIX_TABLE (PREFIX_VEX_0F3A7E) },
9161 { PREFIX_TABLE (PREFIX_VEX_0F3A7F) },
c0f3af97 9162 /* 80 */
592d1631
L
9163 { Bad_Opcode },
9164 { Bad_Opcode },
9165 { Bad_Opcode },
9166 { Bad_Opcode },
9167 { Bad_Opcode },
9168 { Bad_Opcode },
9169 { Bad_Opcode },
9170 { Bad_Opcode },
c0f3af97 9171 /* 88 */
592d1631
L
9172 { Bad_Opcode },
9173 { Bad_Opcode },
9174 { Bad_Opcode },
9175 { Bad_Opcode },
9176 { Bad_Opcode },
9177 { Bad_Opcode },
9178 { Bad_Opcode },
9179 { Bad_Opcode },
c0f3af97 9180 /* 90 */
592d1631
L
9181 { Bad_Opcode },
9182 { Bad_Opcode },
9183 { Bad_Opcode },
9184 { Bad_Opcode },
9185 { Bad_Opcode },
9186 { Bad_Opcode },
9187 { Bad_Opcode },
9188 { Bad_Opcode },
c0f3af97 9189 /* 98 */
592d1631
L
9190 { Bad_Opcode },
9191 { Bad_Opcode },
9192 { Bad_Opcode },
9193 { Bad_Opcode },
9194 { Bad_Opcode },
9195 { Bad_Opcode },
9196 { Bad_Opcode },
9197 { Bad_Opcode },
c0f3af97 9198 /* a0 */
592d1631
L
9199 { Bad_Opcode },
9200 { Bad_Opcode },
9201 { Bad_Opcode },
9202 { Bad_Opcode },
9203 { Bad_Opcode },
9204 { Bad_Opcode },
9205 { Bad_Opcode },
9206 { Bad_Opcode },
c0f3af97 9207 /* a8 */
592d1631
L
9208 { Bad_Opcode },
9209 { Bad_Opcode },
9210 { Bad_Opcode },
9211 { Bad_Opcode },
9212 { Bad_Opcode },
9213 { Bad_Opcode },
9214 { Bad_Opcode },
9215 { Bad_Opcode },
c0f3af97 9216 /* b0 */
592d1631
L
9217 { Bad_Opcode },
9218 { Bad_Opcode },
9219 { Bad_Opcode },
9220 { Bad_Opcode },
9221 { Bad_Opcode },
9222 { Bad_Opcode },
9223 { Bad_Opcode },
9224 { Bad_Opcode },
c0f3af97 9225 /* b8 */
592d1631
L
9226 { Bad_Opcode },
9227 { Bad_Opcode },
9228 { Bad_Opcode },
9229 { Bad_Opcode },
9230 { Bad_Opcode },
9231 { Bad_Opcode },
9232 { Bad_Opcode },
9233 { Bad_Opcode },
c0f3af97 9234 /* c0 */
592d1631
L
9235 { Bad_Opcode },
9236 { Bad_Opcode },
9237 { Bad_Opcode },
9238 { Bad_Opcode },
9239 { Bad_Opcode },
9240 { Bad_Opcode },
9241 { Bad_Opcode },
9242 { Bad_Opcode },
c0f3af97 9243 /* c8 */
592d1631
L
9244 { Bad_Opcode },
9245 { Bad_Opcode },
9246 { Bad_Opcode },
9247 { Bad_Opcode },
9248 { Bad_Opcode },
9249 { Bad_Opcode },
48521003
IT
9250 { PREFIX_TABLE(PREFIX_VEX_0F3ACE) },
9251 { PREFIX_TABLE(PREFIX_VEX_0F3ACF) },
c0f3af97 9252 /* d0 */
592d1631
L
9253 { Bad_Opcode },
9254 { Bad_Opcode },
9255 { Bad_Opcode },
9256 { Bad_Opcode },
9257 { Bad_Opcode },
9258 { Bad_Opcode },
9259 { Bad_Opcode },
9260 { Bad_Opcode },
c0f3af97 9261 /* d8 */
592d1631
L
9262 { Bad_Opcode },
9263 { Bad_Opcode },
9264 { Bad_Opcode },
9265 { Bad_Opcode },
9266 { Bad_Opcode },
9267 { Bad_Opcode },
9268 { Bad_Opcode },
592a252b 9269 { PREFIX_TABLE (PREFIX_VEX_0F3ADF) },
c0f3af97 9270 /* e0 */
592d1631
L
9271 { Bad_Opcode },
9272 { Bad_Opcode },
9273 { Bad_Opcode },
9274 { Bad_Opcode },
9275 { Bad_Opcode },
9276 { Bad_Opcode },
9277 { Bad_Opcode },
9278 { Bad_Opcode },
c0f3af97 9279 /* e8 */
592d1631
L
9280 { Bad_Opcode },
9281 { Bad_Opcode },
9282 { Bad_Opcode },
9283 { Bad_Opcode },
9284 { Bad_Opcode },
9285 { Bad_Opcode },
9286 { Bad_Opcode },
9287 { Bad_Opcode },
c0f3af97 9288 /* f0 */
6c30d220 9289 { PREFIX_TABLE (PREFIX_VEX_0F3AF0) },
592d1631
L
9290 { Bad_Opcode },
9291 { Bad_Opcode },
9292 { Bad_Opcode },
9293 { Bad_Opcode },
9294 { Bad_Opcode },
9295 { Bad_Opcode },
9296 { Bad_Opcode },
c0f3af97 9297 /* f8 */
592d1631
L
9298 { Bad_Opcode },
9299 { Bad_Opcode },
9300 { Bad_Opcode },
9301 { Bad_Opcode },
9302 { Bad_Opcode },
9303 { Bad_Opcode },
9304 { Bad_Opcode },
9305 { Bad_Opcode },
c0f3af97
L
9306 },
9307};
9308
43234a1e
L
9309#define NEED_OPCODE_TABLE
9310#include "i386-dis-evex.h"
9311#undef NEED_OPCODE_TABLE
c0f3af97 9312static const struct dis386 vex_len_table[][2] = {
592a252b 9313 /* VEX_LEN_0F12_P_0_M_0 */
c0f3af97 9314 {
ec6f095a 9315 { "vmovlps", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9316 },
9317
592a252b 9318 /* VEX_LEN_0F12_P_0_M_1 */
c0f3af97 9319 {
ec6f095a 9320 { "vmovhlps", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9321 },
9322
592a252b 9323 /* VEX_LEN_0F12_P_2 */
c0f3af97 9324 {
ec6f095a 9325 { "vmovlpd", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9326 },
9327
592a252b 9328 /* VEX_LEN_0F13_M_0 */
c0f3af97 9329 {
ec6f095a 9330 { "vmovlpX", { EXq, XM }, 0 },
c0f3af97
L
9331 },
9332
592a252b 9333 /* VEX_LEN_0F16_P_0_M_0 */
c0f3af97 9334 {
ec6f095a 9335 { "vmovhps", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9336 },
9337
592a252b 9338 /* VEX_LEN_0F16_P_0_M_1 */
c0f3af97 9339 {
ec6f095a 9340 { "vmovlhps", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9341 },
9342
592a252b 9343 /* VEX_LEN_0F16_P_2 */
c0f3af97 9344 {
ec6f095a 9345 { "vmovhpd", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9346 },
9347
592a252b 9348 /* VEX_LEN_0F17_M_0 */
c0f3af97 9349 {
ec6f095a 9350 { "vmovhpX", { EXq, XM }, 0 },
c0f3af97
L
9351 },
9352
592a252b 9353 /* VEX_LEN_0F2A_P_1 */
c0f3af97 9354 {
bf890a93
IT
9355 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev }, 0 },
9356 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev }, 0 },
c0f3af97
L
9357 },
9358
592a252b 9359 /* VEX_LEN_0F2A_P_3 */
c0f3af97 9360 {
bf890a93
IT
9361 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev }, 0 },
9362 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev }, 0 },
c0f3af97
L
9363 },
9364
592a252b 9365 /* VEX_LEN_0F2C_P_1 */
c0f3af97 9366 {
9646c87b
JB
9367 { "vcvttss2si", { Gv, EXdScalar }, 0 },
9368 { "vcvttss2si", { Gv, EXdScalar }, 0 },
c0f3af97
L
9369 },
9370
592a252b 9371 /* VEX_LEN_0F2C_P_3 */
c0f3af97 9372 {
9646c87b
JB
9373 { "vcvttsd2si", { Gv, EXqScalar }, 0 },
9374 { "vcvttsd2si", { Gv, EXqScalar }, 0 },
c0f3af97
L
9375 },
9376
592a252b 9377 /* VEX_LEN_0F2D_P_1 */
c0f3af97 9378 {
9646c87b
JB
9379 { "vcvtss2si", { Gv, EXdScalar }, 0 },
9380 { "vcvtss2si", { Gv, EXdScalar }, 0 },
c0f3af97
L
9381 },
9382
592a252b 9383 /* VEX_LEN_0F2D_P_3 */
c0f3af97 9384 {
9646c87b
JB
9385 { "vcvtsd2si", { Gv, EXqScalar }, 0 },
9386 { "vcvtsd2si", { Gv, EXqScalar }, 0 },
c0f3af97
L
9387 },
9388
43234a1e
L
9389 /* VEX_LEN_0F41_P_0 */
9390 {
9391 { Bad_Opcode },
9392 { VEX_W_TABLE (VEX_W_0F41_P_0_LEN_1) },
9393 },
1ba585e8
IT
9394 /* VEX_LEN_0F41_P_2 */
9395 {
9396 { Bad_Opcode },
9397 { VEX_W_TABLE (VEX_W_0F41_P_2_LEN_1) },
9398 },
43234a1e
L
9399 /* VEX_LEN_0F42_P_0 */
9400 {
9401 { Bad_Opcode },
9402 { VEX_W_TABLE (VEX_W_0F42_P_0_LEN_1) },
9403 },
1ba585e8
IT
9404 /* VEX_LEN_0F42_P_2 */
9405 {
9406 { Bad_Opcode },
9407 { VEX_W_TABLE (VEX_W_0F42_P_2_LEN_1) },
9408 },
43234a1e
L
9409 /* VEX_LEN_0F44_P_0 */
9410 {
9411 { VEX_W_TABLE (VEX_W_0F44_P_0_LEN_0) },
9412 },
1ba585e8
IT
9413 /* VEX_LEN_0F44_P_2 */
9414 {
9415 { VEX_W_TABLE (VEX_W_0F44_P_2_LEN_0) },
9416 },
43234a1e
L
9417 /* VEX_LEN_0F45_P_0 */
9418 {
9419 { Bad_Opcode },
9420 { VEX_W_TABLE (VEX_W_0F45_P_0_LEN_1) },
9421 },
1ba585e8
IT
9422 /* VEX_LEN_0F45_P_2 */
9423 {
9424 { Bad_Opcode },
9425 { VEX_W_TABLE (VEX_W_0F45_P_2_LEN_1) },
9426 },
43234a1e
L
9427 /* VEX_LEN_0F46_P_0 */
9428 {
9429 { Bad_Opcode },
9430 { VEX_W_TABLE (VEX_W_0F46_P_0_LEN_1) },
9431 },
1ba585e8
IT
9432 /* VEX_LEN_0F46_P_2 */
9433 {
9434 { Bad_Opcode },
9435 { VEX_W_TABLE (VEX_W_0F46_P_2_LEN_1) },
9436 },
43234a1e
L
9437 /* VEX_LEN_0F47_P_0 */
9438 {
9439 { Bad_Opcode },
9440 { VEX_W_TABLE (VEX_W_0F47_P_0_LEN_1) },
9441 },
1ba585e8
IT
9442 /* VEX_LEN_0F47_P_2 */
9443 {
9444 { Bad_Opcode },
9445 { VEX_W_TABLE (VEX_W_0F47_P_2_LEN_1) },
9446 },
9447 /* VEX_LEN_0F4A_P_0 */
9448 {
9449 { Bad_Opcode },
9450 { VEX_W_TABLE (VEX_W_0F4A_P_0_LEN_1) },
9451 },
9452 /* VEX_LEN_0F4A_P_2 */
9453 {
9454 { Bad_Opcode },
9455 { VEX_W_TABLE (VEX_W_0F4A_P_2_LEN_1) },
9456 },
9457 /* VEX_LEN_0F4B_P_0 */
9458 {
9459 { Bad_Opcode },
9460 { VEX_W_TABLE (VEX_W_0F4B_P_0_LEN_1) },
9461 },
43234a1e
L
9462 /* VEX_LEN_0F4B_P_2 */
9463 {
9464 { Bad_Opcode },
9465 { VEX_W_TABLE (VEX_W_0F4B_P_2_LEN_1) },
9466 },
9467
ec6f095a 9468 /* VEX_LEN_0F6E_P_2 */
c0f3af97 9469 {
ec6f095a 9470 { "vmovK", { XMScalar, Edq }, 0 },
c0f3af97
L
9471 },
9472
ec6f095a 9473 /* VEX_LEN_0F77_P_1 */
c0f3af97 9474 {
ec6f095a
L
9475 { "vzeroupper", { XX }, 0 },
9476 { "vzeroall", { XX }, 0 },
c0f3af97
L
9477 },
9478
ec6f095a 9479 /* VEX_LEN_0F7E_P_1 */
c0f3af97 9480 {
ec6f095a 9481 { "vmovq", { XMScalar, EXqScalar }, 0 },
c0f3af97
L
9482 },
9483
ec6f095a 9484 /* VEX_LEN_0F7E_P_2 */
c0f3af97 9485 {
ec6f095a 9486 { "vmovK", { Edq, XMScalar }, 0 },
c0f3af97
L
9487 },
9488
ec6f095a 9489 /* VEX_LEN_0F90_P_0 */
c0f3af97 9490 {
ec6f095a 9491 { VEX_W_TABLE (VEX_W_0F90_P_0_LEN_0) },
c0f3af97
L
9492 },
9493
ec6f095a 9494 /* VEX_LEN_0F90_P_2 */
c0f3af97 9495 {
ec6f095a 9496 { VEX_W_TABLE (VEX_W_0F90_P_2_LEN_0) },
c0f3af97
L
9497 },
9498
ec6f095a 9499 /* VEX_LEN_0F91_P_0 */
c0f3af97 9500 {
ec6f095a 9501 { VEX_W_TABLE (VEX_W_0F91_P_0_LEN_0) },
c0f3af97
L
9502 },
9503
ec6f095a 9504 /* VEX_LEN_0F91_P_2 */
c0f3af97 9505 {
ec6f095a 9506 { VEX_W_TABLE (VEX_W_0F91_P_2_LEN_0) },
c0f3af97
L
9507 },
9508
ec6f095a 9509 /* VEX_LEN_0F92_P_0 */
c0f3af97 9510 {
ec6f095a 9511 { VEX_W_TABLE (VEX_W_0F92_P_0_LEN_0) },
c0f3af97
L
9512 },
9513
ec6f095a 9514 /* VEX_LEN_0F92_P_2 */
c0f3af97 9515 {
ec6f095a 9516 { VEX_W_TABLE (VEX_W_0F92_P_2_LEN_0) },
c0f3af97
L
9517 },
9518
ec6f095a 9519 /* VEX_LEN_0F92_P_3 */
c0f3af97 9520 {
58a211d2 9521 { MOD_TABLE (MOD_VEX_0F92_P_3_LEN_0) },
c0f3af97
L
9522 },
9523
ec6f095a 9524 /* VEX_LEN_0F93_P_0 */
c0f3af97 9525 {
ec6f095a 9526 { VEX_W_TABLE (VEX_W_0F93_P_0_LEN_0) },
c0f3af97
L
9527 },
9528
ec6f095a 9529 /* VEX_LEN_0F93_P_2 */
c0f3af97 9530 {
ec6f095a 9531 { VEX_W_TABLE (VEX_W_0F93_P_2_LEN_0) },
c0f3af97
L
9532 },
9533
ec6f095a 9534 /* VEX_LEN_0F93_P_3 */
c0f3af97 9535 {
58a211d2 9536 { MOD_TABLE (MOD_VEX_0F93_P_3_LEN_0) },
c0f3af97
L
9537 },
9538
ec6f095a 9539 /* VEX_LEN_0F98_P_0 */
43234a1e
L
9540 {
9541 { VEX_W_TABLE (VEX_W_0F98_P_0_LEN_0) },
9542 },
9543
1ba585e8
IT
9544 /* VEX_LEN_0F98_P_2 */
9545 {
9546 { VEX_W_TABLE (VEX_W_0F98_P_2_LEN_0) },
9547 },
9548
9549 /* VEX_LEN_0F99_P_0 */
9550 {
9551 { VEX_W_TABLE (VEX_W_0F99_P_0_LEN_0) },
9552 },
9553
9554 /* VEX_LEN_0F99_P_2 */
9555 {
9556 { VEX_W_TABLE (VEX_W_0F99_P_2_LEN_0) },
9557 },
9558
6c30d220 9559 /* VEX_LEN_0FAE_R_2_M_0 */
c0f3af97 9560 {
ec6f095a 9561 { "vldmxcsr", { Md }, 0 },
c0f3af97
L
9562 },
9563
6c30d220 9564 /* VEX_LEN_0FAE_R_3_M_0 */
c0f3af97 9565 {
ec6f095a 9566 { "vstmxcsr", { Md }, 0 },
c0f3af97
L
9567 },
9568
6c30d220 9569 /* VEX_LEN_0FC4_P_2 */
c0f3af97 9570 {
b50c9f31 9571 { "vpinsrw", { XM, Vex128, Edqw, Ib }, 0 },
c0f3af97
L
9572 },
9573
6c30d220 9574 /* VEX_LEN_0FC5_P_2 */
c0f3af97 9575 {
b50c9f31 9576 { "vpextrw", { Gdq, XS, Ib }, 0 },
c0f3af97
L
9577 },
9578
6c30d220 9579 /* VEX_LEN_0FD6_P_2 */
c0f3af97 9580 {
ec6f095a 9581 { "vmovq", { EXqScalarS, XMScalar }, 0 },
c0f3af97
L
9582 },
9583
6c30d220 9584 /* VEX_LEN_0FF7_P_2 */
c0f3af97 9585 {
ec6f095a 9586 { "vmaskmovdqu", { XM, XS }, 0 },
c0f3af97
L
9587 },
9588
6c30d220 9589 /* VEX_LEN_0F3816_P_2 */
c0f3af97 9590 {
6c30d220
L
9591 { Bad_Opcode },
9592 { VEX_W_TABLE (VEX_W_0F3816_P_2) },
c0f3af97
L
9593 },
9594
6c30d220 9595 /* VEX_LEN_0F3819_P_2 */
c0f3af97 9596 {
6c30d220
L
9597 { Bad_Opcode },
9598 { VEX_W_TABLE (VEX_W_0F3819_P_2) },
c0f3af97
L
9599 },
9600
6c30d220 9601 /* VEX_LEN_0F381A_P_2_M_0 */
c0f3af97 9602 {
6c30d220
L
9603 { Bad_Opcode },
9604 { VEX_W_TABLE (VEX_W_0F381A_P_2_M_0) },
c0f3af97
L
9605 },
9606
6c30d220 9607 /* VEX_LEN_0F3836_P_2 */
c0f3af97 9608 {
6c30d220
L
9609 { Bad_Opcode },
9610 { VEX_W_TABLE (VEX_W_0F3836_P_2) },
c0f3af97
L
9611 },
9612
592a252b 9613 /* VEX_LEN_0F3841_P_2 */
c0f3af97 9614 {
ec6f095a 9615 { "vphminposuw", { XM, EXx }, 0 },
c0f3af97
L
9616 },
9617
6c30d220
L
9618 /* VEX_LEN_0F385A_P_2_M_0 */
9619 {
9620 { Bad_Opcode },
9621 { VEX_W_TABLE (VEX_W_0F385A_P_2_M_0) },
9622 },
9623
592a252b 9624 /* VEX_LEN_0F38DB_P_2 */
a5ff0eb2 9625 {
ec6f095a 9626 { "vaesimc", { XM, EXx }, 0 },
a5ff0eb2
L
9627 },
9628
f12dc422
L
9629 /* VEX_LEN_0F38F2_P_0 */
9630 {
bf890a93 9631 { "andnS", { Gdq, VexGdq, Edq }, 0 },
f12dc422
L
9632 },
9633
9634 /* VEX_LEN_0F38F3_R_1_P_0 */
9635 {
bf890a93 9636 { "blsrS", { VexGdq, Edq }, 0 },
f12dc422
L
9637 },
9638
9639 /* VEX_LEN_0F38F3_R_2_P_0 */
9640 {
bf890a93 9641 { "blsmskS", { VexGdq, Edq }, 0 },
f12dc422
L
9642 },
9643
9644 /* VEX_LEN_0F38F3_R_3_P_0 */
9645 {
bf890a93 9646 { "blsiS", { VexGdq, Edq }, 0 },
f12dc422
L
9647 },
9648
6c30d220
L
9649 /* VEX_LEN_0F38F5_P_0 */
9650 {
bf890a93 9651 { "bzhiS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
9652 },
9653
9654 /* VEX_LEN_0F38F5_P_1 */
9655 {
bf890a93 9656 { "pextS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
9657 },
9658
9659 /* VEX_LEN_0F38F5_P_3 */
9660 {
bf890a93 9661 { "pdepS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
9662 },
9663
9664 /* VEX_LEN_0F38F6_P_3 */
9665 {
bf890a93 9666 { "mulxS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
9667 },
9668
f12dc422
L
9669 /* VEX_LEN_0F38F7_P_0 */
9670 {
bf890a93 9671 { "bextrS", { Gdq, Edq, VexGdq }, 0 },
f12dc422
L
9672 },
9673
6c30d220
L
9674 /* VEX_LEN_0F38F7_P_1 */
9675 {
bf890a93 9676 { "sarxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
9677 },
9678
9679 /* VEX_LEN_0F38F7_P_2 */
9680 {
bf890a93 9681 { "shlxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
9682 },
9683
9684 /* VEX_LEN_0F38F7_P_3 */
9685 {
bf890a93 9686 { "shrxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
9687 },
9688
9689 /* VEX_LEN_0F3A00_P_2 */
9690 {
9691 { Bad_Opcode },
9692 { VEX_W_TABLE (VEX_W_0F3A00_P_2) },
9693 },
9694
9695 /* VEX_LEN_0F3A01_P_2 */
9696 {
9697 { Bad_Opcode },
9698 { VEX_W_TABLE (VEX_W_0F3A01_P_2) },
9699 },
9700
592a252b 9701 /* VEX_LEN_0F3A06_P_2 */
c0f3af97 9702 {
592d1631 9703 { Bad_Opcode },
592a252b 9704 { VEX_W_TABLE (VEX_W_0F3A06_P_2) },
c0f3af97
L
9705 },
9706
592a252b 9707 /* VEX_LEN_0F3A14_P_2 */
c0f3af97 9708 {
b50c9f31 9709 { "vpextrb", { Edqb, XM, Ib }, 0 },
c0f3af97
L
9710 },
9711
592a252b 9712 /* VEX_LEN_0F3A15_P_2 */
c0f3af97 9713 {
b50c9f31 9714 { "vpextrw", { Edqw, XM, Ib }, 0 },
c0f3af97
L
9715 },
9716
592a252b 9717 /* VEX_LEN_0F3A16_P_2 */
c0f3af97 9718 {
bf890a93 9719 { "vpextrK", { Edq, XM, Ib }, 0 },
c0f3af97
L
9720 },
9721
592a252b 9722 /* VEX_LEN_0F3A17_P_2 */
c0f3af97 9723 {
bf890a93 9724 { "vextractps", { Edqd, XM, Ib }, 0 },
c0f3af97
L
9725 },
9726
592a252b 9727 /* VEX_LEN_0F3A18_P_2 */
c0f3af97 9728 {
592d1631 9729 { Bad_Opcode },
592a252b 9730 { VEX_W_TABLE (VEX_W_0F3A18_P_2) },
c0f3af97
L
9731 },
9732
592a252b 9733 /* VEX_LEN_0F3A19_P_2 */
c0f3af97 9734 {
592d1631 9735 { Bad_Opcode },
592a252b 9736 { VEX_W_TABLE (VEX_W_0F3A19_P_2) },
c0f3af97
L
9737 },
9738
592a252b 9739 /* VEX_LEN_0F3A20_P_2 */
c0f3af97 9740 {
b50c9f31 9741 { "vpinsrb", { XM, Vex128, Edqb, Ib }, 0 },
c0f3af97
L
9742 },
9743
592a252b 9744 /* VEX_LEN_0F3A21_P_2 */
c0f3af97 9745 {
ec6f095a 9746 { "vinsertps", { XM, Vex128, EXd, Ib }, 0 },
c0f3af97
L
9747 },
9748
592a252b 9749 /* VEX_LEN_0F3A22_P_2 */
c0f3af97 9750 {
bf890a93 9751 { "vpinsrK", { XM, Vex128, Edq, Ib }, 0 },
c0f3af97
L
9752 },
9753
43234a1e
L
9754 /* VEX_LEN_0F3A30_P_2 */
9755 {
9756 { VEX_W_TABLE (VEX_W_0F3A30_P_2_LEN_0) },
9757 },
9758
1ba585e8
IT
9759 /* VEX_LEN_0F3A31_P_2 */
9760 {
9761 { VEX_W_TABLE (VEX_W_0F3A31_P_2_LEN_0) },
9762 },
9763
43234a1e
L
9764 /* VEX_LEN_0F3A32_P_2 */
9765 {
9766 { VEX_W_TABLE (VEX_W_0F3A32_P_2_LEN_0) },
9767 },
9768
1ba585e8
IT
9769 /* VEX_LEN_0F3A33_P_2 */
9770 {
9771 { VEX_W_TABLE (VEX_W_0F3A33_P_2_LEN_0) },
9772 },
9773
6c30d220 9774 /* VEX_LEN_0F3A38_P_2 */
c0f3af97 9775 {
6c30d220
L
9776 { Bad_Opcode },
9777 { VEX_W_TABLE (VEX_W_0F3A38_P_2) },
c0f3af97
L
9778 },
9779
6c30d220 9780 /* VEX_LEN_0F3A39_P_2 */
c0f3af97 9781 {
6c30d220
L
9782 { Bad_Opcode },
9783 { VEX_W_TABLE (VEX_W_0F3A39_P_2) },
9784 },
9785
9786 /* VEX_LEN_0F3A41_P_2 */
9787 {
ec6f095a 9788 { "vdppd", { XM, Vex128, EXx, Ib }, 0 },
c0f3af97
L
9789 },
9790
6c30d220 9791 /* VEX_LEN_0F3A46_P_2 */
c0f3af97 9792 {
6c30d220
L
9793 { Bad_Opcode },
9794 { VEX_W_TABLE (VEX_W_0F3A46_P_2) },
c0f3af97
L
9795 },
9796
592a252b 9797 /* VEX_LEN_0F3A60_P_2 */
c0f3af97 9798 {
15c7c1d8 9799 { "vpcmpestrm", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, 0 },
c0f3af97
L
9800 },
9801
592a252b 9802 /* VEX_LEN_0F3A61_P_2 */
c0f3af97 9803 {
15c7c1d8 9804 { "vpcmpestri", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, 0 },
c0f3af97
L
9805 },
9806
592a252b 9807 /* VEX_LEN_0F3A62_P_2 */
c0f3af97 9808 {
ec6f095a 9809 { "vpcmpistrm", { XM, EXx, Ib }, 0 },
c0f3af97
L
9810 },
9811
592a252b 9812 /* VEX_LEN_0F3A63_P_2 */
c0f3af97 9813 {
ec6f095a 9814 { "vpcmpistri", { XM, EXx, Ib }, 0 },
c0f3af97
L
9815 },
9816
592a252b 9817 /* VEX_LEN_0F3A6A_P_2 */
922d8de8 9818 {
3a2430e0 9819 { "vfmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 },
922d8de8
DR
9820 },
9821
592a252b 9822 /* VEX_LEN_0F3A6B_P_2 */
922d8de8 9823 {
3a2430e0 9824 { "vfmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 },
922d8de8
DR
9825 },
9826
592a252b 9827 /* VEX_LEN_0F3A6E_P_2 */
922d8de8 9828 {
3a2430e0 9829 { "vfmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 },
922d8de8
DR
9830 },
9831
592a252b 9832 /* VEX_LEN_0F3A6F_P_2 */
922d8de8 9833 {
3a2430e0 9834 { "vfmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 },
922d8de8
DR
9835 },
9836
592a252b 9837 /* VEX_LEN_0F3A7A_P_2 */
922d8de8 9838 {
3a2430e0 9839 { "vfnmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 },
922d8de8
DR
9840 },
9841
592a252b 9842 /* VEX_LEN_0F3A7B_P_2 */
922d8de8 9843 {
3a2430e0 9844 { "vfnmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 },
922d8de8
DR
9845 },
9846
592a252b 9847 /* VEX_LEN_0F3A7E_P_2 */
922d8de8 9848 {
3a2430e0 9849 { "vfnmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 },
922d8de8
DR
9850 },
9851
592a252b 9852 /* VEX_LEN_0F3A7F_P_2 */
922d8de8 9853 {
3a2430e0 9854 { "vfnmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 },
922d8de8
DR
9855 },
9856
592a252b 9857 /* VEX_LEN_0F3ADF_P_2 */
a5ff0eb2 9858 {
ec6f095a 9859 { "vaeskeygenassist", { XM, EXx, Ib }, 0 },
a5ff0eb2 9860 },
4c807e72 9861
6c30d220
L
9862 /* VEX_LEN_0F3AF0_P_3 */
9863 {
bf890a93 9864 { "rorxS", { Gdq, Edq, Ib }, 0 },
6c30d220
L
9865 },
9866
ff688e1f
L
9867 /* VEX_LEN_0FXOP_08_CC */
9868 {
be92cb14 9869 { "vpcomb", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9870 },
9871
9872 /* VEX_LEN_0FXOP_08_CD */
9873 {
be92cb14 9874 { "vpcomw", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9875 },
9876
9877 /* VEX_LEN_0FXOP_08_CE */
9878 {
be92cb14 9879 { "vpcomd", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9880 },
9881
9882 /* VEX_LEN_0FXOP_08_CF */
9883 {
be92cb14 9884 { "vpcomq", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9885 },
9886
9887 /* VEX_LEN_0FXOP_08_EC */
9888 {
be92cb14 9889 { "vpcomub", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9890 },
9891
9892 /* VEX_LEN_0FXOP_08_ED */
9893 {
be92cb14 9894 { "vpcomuw", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9895 },
9896
9897 /* VEX_LEN_0FXOP_08_EE */
9898 {
be92cb14 9899 { "vpcomud", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9900 },
9901
9902 /* VEX_LEN_0FXOP_08_EF */
9903 {
be92cb14 9904 { "vpcomuq", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9905 },
9906
592a252b 9907 /* VEX_LEN_0FXOP_09_80 */
5dd85c99 9908 {
bf890a93
IT
9909 { "vfrczps", { XM, EXxmm }, 0 },
9910 { "vfrczps", { XM, EXymmq }, 0 },
5dd85c99 9911 },
4c807e72 9912
592a252b 9913 /* VEX_LEN_0FXOP_09_81 */
5dd85c99 9914 {
bf890a93
IT
9915 { "vfrczpd", { XM, EXxmm }, 0 },
9916 { "vfrczpd", { XM, EXymmq }, 0 },
5dd85c99 9917 },
331d2d0d
L
9918};
9919
04e2a182
L
9920static const struct dis386 evex_len_table[][3] = {
9921#define NEED_EVEX_LEN_TABLE
9922#include "i386-dis-evex.h"
9923#undef NEED_EVEX_LEN_TABLE
9924};
9925
9e30b8e0 9926static const struct dis386 vex_w_table[][2] = {
43234a1e
L
9927 {
9928 /* VEX_W_0F41_P_0_LEN_1 */
ab4e4ed5
AF
9929 { MOD_TABLE (MOD_VEX_W_0_0F41_P_0_LEN_1) },
9930 { MOD_TABLE (MOD_VEX_W_1_0F41_P_0_LEN_1) },
1ba585e8
IT
9931 },
9932 {
9933 /* VEX_W_0F41_P_2_LEN_1 */
ab4e4ed5
AF
9934 { MOD_TABLE (MOD_VEX_W_0_0F41_P_2_LEN_1) },
9935 { MOD_TABLE (MOD_VEX_W_1_0F41_P_2_LEN_1) }
43234a1e
L
9936 },
9937 {
9938 /* VEX_W_0F42_P_0_LEN_1 */
ab4e4ed5
AF
9939 { MOD_TABLE (MOD_VEX_W_0_0F42_P_0_LEN_1) },
9940 { MOD_TABLE (MOD_VEX_W_1_0F42_P_0_LEN_1) },
1ba585e8
IT
9941 },
9942 {
9943 /* VEX_W_0F42_P_2_LEN_1 */
ab4e4ed5
AF
9944 { MOD_TABLE (MOD_VEX_W_0_0F42_P_2_LEN_1) },
9945 { MOD_TABLE (MOD_VEX_W_1_0F42_P_2_LEN_1) },
43234a1e
L
9946 },
9947 {
9948 /* VEX_W_0F44_P_0_LEN_0 */
ab4e4ed5
AF
9949 { MOD_TABLE (MOD_VEX_W_0_0F44_P_0_LEN_1) },
9950 { MOD_TABLE (MOD_VEX_W_1_0F44_P_0_LEN_1) },
1ba585e8
IT
9951 },
9952 {
9953 /* VEX_W_0F44_P_2_LEN_0 */
ab4e4ed5
AF
9954 { MOD_TABLE (MOD_VEX_W_0_0F44_P_2_LEN_1) },
9955 { MOD_TABLE (MOD_VEX_W_1_0F44_P_2_LEN_1) },
43234a1e
L
9956 },
9957 {
ec6f095a
L
9958 /* VEX_W_0F45_P_0_LEN_1 */
9959 { MOD_TABLE (MOD_VEX_W_0_0F45_P_0_LEN_1) },
9960 { MOD_TABLE (MOD_VEX_W_1_0F45_P_0_LEN_1) },
9e30b8e0
L
9961 },
9962 {
ec6f095a
L
9963 /* VEX_W_0F45_P_2_LEN_1 */
9964 { MOD_TABLE (MOD_VEX_W_0_0F45_P_2_LEN_1) },
9965 { MOD_TABLE (MOD_VEX_W_1_0F45_P_2_LEN_1) },
9e30b8e0
L
9966 },
9967 {
ec6f095a
L
9968 /* VEX_W_0F46_P_0_LEN_1 */
9969 { MOD_TABLE (MOD_VEX_W_0_0F46_P_0_LEN_1) },
9970 { MOD_TABLE (MOD_VEX_W_1_0F46_P_0_LEN_1) },
9e30b8e0
L
9971 },
9972 {
ec6f095a
L
9973 /* VEX_W_0F46_P_2_LEN_1 */
9974 { MOD_TABLE (MOD_VEX_W_0_0F46_P_2_LEN_1) },
9975 { MOD_TABLE (MOD_VEX_W_1_0F46_P_2_LEN_1) },
9e30b8e0
L
9976 },
9977 {
ec6f095a
L
9978 /* VEX_W_0F47_P_0_LEN_1 */
9979 { MOD_TABLE (MOD_VEX_W_0_0F47_P_0_LEN_1) },
9980 { MOD_TABLE (MOD_VEX_W_1_0F47_P_0_LEN_1) },
9e30b8e0
L
9981 },
9982 {
ec6f095a
L
9983 /* VEX_W_0F47_P_2_LEN_1 */
9984 { MOD_TABLE (MOD_VEX_W_0_0F47_P_2_LEN_1) },
9985 { MOD_TABLE (MOD_VEX_W_1_0F47_P_2_LEN_1) },
9e30b8e0
L
9986 },
9987 {
ec6f095a
L
9988 /* VEX_W_0F4A_P_0_LEN_1 */
9989 { MOD_TABLE (MOD_VEX_W_0_0F4A_P_0_LEN_1) },
9990 { MOD_TABLE (MOD_VEX_W_1_0F4A_P_0_LEN_1) },
9e30b8e0
L
9991 },
9992 {
ec6f095a
L
9993 /* VEX_W_0F4A_P_2_LEN_1 */
9994 { MOD_TABLE (MOD_VEX_W_0_0F4A_P_2_LEN_1) },
9995 { MOD_TABLE (MOD_VEX_W_1_0F4A_P_2_LEN_1) },
9e30b8e0
L
9996 },
9997 {
ec6f095a
L
9998 /* VEX_W_0F4B_P_0_LEN_1 */
9999 { MOD_TABLE (MOD_VEX_W_0_0F4B_P_0_LEN_1) },
10000 { MOD_TABLE (MOD_VEX_W_1_0F4B_P_0_LEN_1) },
9e30b8e0
L
10001 },
10002 {
ec6f095a
L
10003 /* VEX_W_0F4B_P_2_LEN_1 */
10004 { MOD_TABLE (MOD_VEX_W_0_0F4B_P_2_LEN_1) },
9e30b8e0
L
10005 },
10006 {
ec6f095a
L
10007 /* VEX_W_0F90_P_0_LEN_0 */
10008 { "kmovw", { MaskG, MaskE }, 0 },
10009 { "kmovq", { MaskG, MaskE }, 0 },
9e30b8e0
L
10010 },
10011 {
ec6f095a
L
10012 /* VEX_W_0F90_P_2_LEN_0 */
10013 { "kmovb", { MaskG, MaskBDE }, 0 },
10014 { "kmovd", { MaskG, MaskBDE }, 0 },
9e30b8e0
L
10015 },
10016 {
ec6f095a
L
10017 /* VEX_W_0F91_P_0_LEN_0 */
10018 { MOD_TABLE (MOD_VEX_W_0_0F91_P_0_LEN_0) },
10019 { MOD_TABLE (MOD_VEX_W_1_0F91_P_0_LEN_0) },
9e30b8e0
L
10020 },
10021 {
ec6f095a
L
10022 /* VEX_W_0F91_P_2_LEN_0 */
10023 { MOD_TABLE (MOD_VEX_W_0_0F91_P_2_LEN_0) },
10024 { MOD_TABLE (MOD_VEX_W_1_0F91_P_2_LEN_0) },
9e30b8e0
L
10025 },
10026 {
ec6f095a
L
10027 /* VEX_W_0F92_P_0_LEN_0 */
10028 { MOD_TABLE (MOD_VEX_W_0_0F92_P_0_LEN_0) },
9e30b8e0
L
10029 },
10030 {
ec6f095a
L
10031 /* VEX_W_0F92_P_2_LEN_0 */
10032 { MOD_TABLE (MOD_VEX_W_0_0F92_P_2_LEN_0) },
9e30b8e0 10033 },
9e30b8e0 10034 {
ec6f095a
L
10035 /* VEX_W_0F93_P_0_LEN_0 */
10036 { MOD_TABLE (MOD_VEX_W_0_0F93_P_0_LEN_0) },
9e30b8e0
L
10037 },
10038 {
ec6f095a
L
10039 /* VEX_W_0F93_P_2_LEN_0 */
10040 { MOD_TABLE (MOD_VEX_W_0_0F93_P_2_LEN_0) },
9e30b8e0 10041 },
9e30b8e0 10042 {
ec6f095a
L
10043 /* VEX_W_0F98_P_0_LEN_0 */
10044 { MOD_TABLE (MOD_VEX_W_0_0F98_P_0_LEN_0) },
10045 { MOD_TABLE (MOD_VEX_W_1_0F98_P_0_LEN_0) },
9e30b8e0
L
10046 },
10047 {
ec6f095a
L
10048 /* VEX_W_0F98_P_2_LEN_0 */
10049 { MOD_TABLE (MOD_VEX_W_0_0F98_P_2_LEN_0) },
10050 { MOD_TABLE (MOD_VEX_W_1_0F98_P_2_LEN_0) },
9e30b8e0
L
10051 },
10052 {
ec6f095a
L
10053 /* VEX_W_0F99_P_0_LEN_0 */
10054 { MOD_TABLE (MOD_VEX_W_0_0F99_P_0_LEN_0) },
10055 { MOD_TABLE (MOD_VEX_W_1_0F99_P_0_LEN_0) },
9e30b8e0
L
10056 },
10057 {
ec6f095a
L
10058 /* VEX_W_0F99_P_2_LEN_0 */
10059 { MOD_TABLE (MOD_VEX_W_0_0F99_P_2_LEN_0) },
10060 { MOD_TABLE (MOD_VEX_W_1_0F99_P_2_LEN_0) },
9e30b8e0 10061 },
9e30b8e0 10062 {
592a252b 10063 /* VEX_W_0F380C_P_2 */
bf890a93 10064 { "vpermilps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10065 },
10066 {
592a252b 10067 /* VEX_W_0F380D_P_2 */
bf890a93 10068 { "vpermilpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10069 },
10070 {
592a252b 10071 /* VEX_W_0F380E_P_2 */
bf890a93 10072 { "vtestps", { XM, EXx }, 0 },
9e30b8e0
L
10073 },
10074 {
592a252b 10075 /* VEX_W_0F380F_P_2 */
bf890a93 10076 { "vtestpd", { XM, EXx }, 0 },
9e30b8e0 10077 },
6c30d220
L
10078 {
10079 /* VEX_W_0F3816_P_2 */
bf890a93 10080 { "vpermps", { XM, Vex, EXx }, 0 },
6c30d220 10081 },
bcf2684f 10082 {
6c30d220 10083 /* VEX_W_0F3818_P_2 */
bf890a93 10084 { "vbroadcastss", { XM, EXxmm_md }, 0 },
bcf2684f 10085 },
9e30b8e0 10086 {
6c30d220 10087 /* VEX_W_0F3819_P_2 */
bf890a93 10088 { "vbroadcastsd", { XM, EXxmm_mq }, 0 },
9e30b8e0
L
10089 },
10090 {
592a252b 10091 /* VEX_W_0F381A_P_2_M_0 */
bf890a93 10092 { "vbroadcastf128", { XM, Mxmm }, 0 },
9e30b8e0 10093 },
53aa04a0 10094 {
592a252b 10095 /* VEX_W_0F382C_P_2_M_0 */
bf890a93 10096 { "vmaskmovps", { XM, Vex, Mx }, 0 },
53aa04a0
L
10097 },
10098 {
592a252b 10099 /* VEX_W_0F382D_P_2_M_0 */
bf890a93 10100 { "vmaskmovpd", { XM, Vex, Mx }, 0 },
53aa04a0
L
10101 },
10102 {
592a252b 10103 /* VEX_W_0F382E_P_2_M_0 */
bf890a93 10104 { "vmaskmovps", { Mx, Vex, XM }, 0 },
53aa04a0
L
10105 },
10106 {
592a252b 10107 /* VEX_W_0F382F_P_2_M_0 */
bf890a93 10108 { "vmaskmovpd", { Mx, Vex, XM }, 0 },
53aa04a0 10109 },
6c30d220
L
10110 {
10111 /* VEX_W_0F3836_P_2 */
bf890a93 10112 { "vpermd", { XM, Vex, EXx }, 0 },
9e30b8e0 10113 },
6c30d220
L
10114 {
10115 /* VEX_W_0F3846_P_2 */
bf890a93 10116 { "vpsravd", { XM, Vex, EXx }, 0 },
6c30d220
L
10117 },
10118 {
10119 /* VEX_W_0F3858_P_2 */
bf890a93 10120 { "vpbroadcastd", { XM, EXxmm_md }, 0 },
6c30d220
L
10121 },
10122 {
10123 /* VEX_W_0F3859_P_2 */
bf890a93 10124 { "vpbroadcastq", { XM, EXxmm_mq }, 0 },
6c30d220
L
10125 },
10126 {
10127 /* VEX_W_0F385A_P_2_M_0 */
bf890a93 10128 { "vbroadcasti128", { XM, Mxmm }, 0 },
6c30d220
L
10129 },
10130 {
10131 /* VEX_W_0F3878_P_2 */
bf890a93 10132 { "vpbroadcastb", { XM, EXxmm_mb }, 0 },
6c30d220
L
10133 },
10134 {
10135 /* VEX_W_0F3879_P_2 */
bf890a93 10136 { "vpbroadcastw", { XM, EXxmm_mw }, 0 },
6c30d220 10137 },
48521003
IT
10138 {
10139 /* VEX_W_0F38CF_P_2 */
10140 { "vgf2p8mulb", { XM, Vex, EXx }, 0 },
10141 },
6c30d220
L
10142 {
10143 /* VEX_W_0F3A00_P_2 */
10144 { Bad_Opcode },
bf890a93 10145 { "vpermq", { XM, EXx, Ib }, 0 },
6c30d220
L
10146 },
10147 {
10148 /* VEX_W_0F3A01_P_2 */
10149 { Bad_Opcode },
bf890a93 10150 { "vpermpd", { XM, EXx, Ib }, 0 },
6c30d220
L
10151 },
10152 {
10153 /* VEX_W_0F3A02_P_2 */
bf890a93 10154 { "vpblendd", { XM, Vex, EXx, Ib }, 0 },
6c30d220 10155 },
9e30b8e0 10156 {
592a252b 10157 /* VEX_W_0F3A04_P_2 */
bf890a93 10158 { "vpermilps", { XM, EXx, Ib }, 0 },
9e30b8e0
L
10159 },
10160 {
592a252b 10161 /* VEX_W_0F3A05_P_2 */
bf890a93 10162 { "vpermilpd", { XM, EXx, Ib }, 0 },
9e30b8e0
L
10163 },
10164 {
592a252b 10165 /* VEX_W_0F3A06_P_2 */
bf890a93 10166 { "vperm2f128", { XM, Vex256, EXx, Ib }, 0 },
9e30b8e0 10167 },
9e30b8e0 10168 {
592a252b 10169 /* VEX_W_0F3A18_P_2 */
bf890a93 10170 { "vinsertf128", { XM, Vex256, EXxmm, Ib }, 0 },
9e30b8e0
L
10171 },
10172 {
592a252b 10173 /* VEX_W_0F3A19_P_2 */
bf890a93 10174 { "vextractf128", { EXxmm, XM, Ib }, 0 },
9e30b8e0 10175 },
43234a1e 10176 {
1ba585e8 10177 /* VEX_W_0F3A30_P_2_LEN_0 */
ab4e4ed5
AF
10178 { MOD_TABLE (MOD_VEX_W_0_0F3A30_P_2_LEN_0) },
10179 { MOD_TABLE (MOD_VEX_W_1_0F3A30_P_2_LEN_0) },
43234a1e
L
10180 },
10181 {
1ba585e8 10182 /* VEX_W_0F3A31_P_2_LEN_0 */
ab4e4ed5
AF
10183 { MOD_TABLE (MOD_VEX_W_0_0F3A31_P_2_LEN_0) },
10184 { MOD_TABLE (MOD_VEX_W_1_0F3A31_P_2_LEN_0) },
1ba585e8
IT
10185 },
10186 {
10187 /* VEX_W_0F3A32_P_2_LEN_0 */
ab4e4ed5
AF
10188 { MOD_TABLE (MOD_VEX_W_0_0F3A32_P_2_LEN_0) },
10189 { MOD_TABLE (MOD_VEX_W_1_0F3A32_P_2_LEN_0) },
43234a1e 10190 },
1ba585e8
IT
10191 {
10192 /* VEX_W_0F3A33_P_2_LEN_0 */
ab4e4ed5
AF
10193 { MOD_TABLE (MOD_VEX_W_0_0F3A33_P_2_LEN_0) },
10194 { MOD_TABLE (MOD_VEX_W_1_0F3A33_P_2_LEN_0) },
1ba585e8 10195 },
6c30d220
L
10196 {
10197 /* VEX_W_0F3A38_P_2 */
bf890a93 10198 { "vinserti128", { XM, Vex256, EXxmm, Ib }, 0 },
6c30d220
L
10199 },
10200 {
10201 /* VEX_W_0F3A39_P_2 */
bf890a93 10202 { "vextracti128", { EXxmm, XM, Ib }, 0 },
6c30d220 10203 },
6c30d220
L
10204 {
10205 /* VEX_W_0F3A46_P_2 */
bf890a93 10206 { "vperm2i128", { XM, Vex256, EXx, Ib }, 0 },
6c30d220 10207 },
a683cc34 10208 {
592a252b 10209 /* VEX_W_0F3A48_P_2 */
bf890a93
IT
10210 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
10211 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
a683cc34
SP
10212 },
10213 {
592a252b 10214 /* VEX_W_0F3A49_P_2 */
bf890a93
IT
10215 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
10216 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
a683cc34 10217 },
9e30b8e0 10218 {
592a252b 10219 /* VEX_W_0F3A4A_P_2 */
bf890a93 10220 { "vblendvps", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0
L
10221 },
10222 {
592a252b 10223 /* VEX_W_0F3A4B_P_2 */
bf890a93 10224 { "vblendvpd", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0
L
10225 },
10226 {
592a252b 10227 /* VEX_W_0F3A4C_P_2 */
bf890a93 10228 { "vpblendvb", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0 10229 },
48521003
IT
10230 {
10231 /* VEX_W_0F3ACE_P_2 */
10232 { Bad_Opcode },
10233 { "vgf2p8affineqb", { XM, Vex, EXx, Ib }, 0 },
10234 },
10235 {
10236 /* VEX_W_0F3ACF_P_2 */
10237 { Bad_Opcode },
10238 { "vgf2p8affineinvqb", { XM, Vex, EXx, Ib }, 0 },
10239 },
43234a1e
L
10240#define NEED_VEX_W_TABLE
10241#include "i386-dis-evex.h"
10242#undef NEED_VEX_W_TABLE
9e30b8e0
L
10243};
10244
10245static const struct dis386 mod_table[][2] = {
10246 {
10247 /* MOD_8D */
bf890a93 10248 { "leaS", { Gv, M }, 0 },
9e30b8e0 10249 },
42164a71
L
10250 {
10251 /* MOD_C6_REG_7 */
10252 { Bad_Opcode },
10253 { RM_TABLE (RM_C6_REG_7) },
10254 },
10255 {
10256 /* MOD_C7_REG_7 */
10257 { Bad_Opcode },
10258 { RM_TABLE (RM_C7_REG_7) },
10259 },
4a357820
MZ
10260 {
10261 /* MOD_FF_REG_3 */
a72d2af2 10262 { "Jcall^", { indirEp }, 0 },
4a357820
MZ
10263 },
10264 {
10265 /* MOD_FF_REG_5 */
a72d2af2 10266 { "Jjmp^", { indirEp }, 0 },
4a357820 10267 },
9e30b8e0
L
10268 {
10269 /* MOD_0F01_REG_0 */
10270 { X86_64_TABLE (X86_64_0F01_REG_0) },
10271 { RM_TABLE (RM_0F01_REG_0) },
10272 },
10273 {
10274 /* MOD_0F01_REG_1 */
10275 { X86_64_TABLE (X86_64_0F01_REG_1) },
10276 { RM_TABLE (RM_0F01_REG_1) },
10277 },
10278 {
10279 /* MOD_0F01_REG_2 */
10280 { X86_64_TABLE (X86_64_0F01_REG_2) },
10281 { RM_TABLE (RM_0F01_REG_2) },
10282 },
10283 {
10284 /* MOD_0F01_REG_3 */
10285 { X86_64_TABLE (X86_64_0F01_REG_3) },
10286 { RM_TABLE (RM_0F01_REG_3) },
10287 },
8eab4136
L
10288 {
10289 /* MOD_0F01_REG_5 */
603555e5 10290 { PREFIX_TABLE (PREFIX_MOD_0_0F01_REG_5) },
8eab4136
L
10291 { RM_TABLE (RM_0F01_REG_5) },
10292 },
9e30b8e0
L
10293 {
10294 /* MOD_0F01_REG_7 */
bf890a93 10295 { "invlpg", { Mb }, 0 },
9e30b8e0
L
10296 { RM_TABLE (RM_0F01_REG_7) },
10297 },
10298 {
10299 /* MOD_0F12_PREFIX_0 */
507bd325
L
10300 { "movlps", { XM, EXq }, PREFIX_OPCODE },
10301 { "movhlps", { XM, EXq }, PREFIX_OPCODE },
9e30b8e0
L
10302 },
10303 {
10304 /* MOD_0F13 */
507bd325 10305 { "movlpX", { EXq, XM }, PREFIX_OPCODE },
9e30b8e0
L
10306 },
10307 {
10308 /* MOD_0F16_PREFIX_0 */
bf890a93
IT
10309 { "movhps", { XM, EXq }, 0 },
10310 { "movlhps", { XM, EXq }, 0 },
9e30b8e0
L
10311 },
10312 {
10313 /* MOD_0F17 */
507bd325 10314 { "movhpX", { EXq, XM }, PREFIX_OPCODE },
9e30b8e0
L
10315 },
10316 {
10317 /* MOD_0F18_REG_0 */
bf890a93 10318 { "prefetchnta", { Mb }, 0 },
9e30b8e0
L
10319 },
10320 {
10321 /* MOD_0F18_REG_1 */
bf890a93 10322 { "prefetcht0", { Mb }, 0 },
9e30b8e0
L
10323 },
10324 {
10325 /* MOD_0F18_REG_2 */
bf890a93 10326 { "prefetcht1", { Mb }, 0 },
9e30b8e0
L
10327 },
10328 {
10329 /* MOD_0F18_REG_3 */
bf890a93 10330 { "prefetcht2", { Mb }, 0 },
9e30b8e0 10331 },
d7189fa5
RM
10332 {
10333 /* MOD_0F18_REG_4 */
bf890a93 10334 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
10335 },
10336 {
10337 /* MOD_0F18_REG_5 */
bf890a93 10338 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
10339 },
10340 {
10341 /* MOD_0F18_REG_6 */
bf890a93 10342 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
10343 },
10344 {
10345 /* MOD_0F18_REG_7 */
bf890a93 10346 { "nop/reserved", { Mb }, 0 },
d7189fa5 10347 },
7e8b059b
L
10348 {
10349 /* MOD_0F1A_PREFIX_0 */
d276ec69 10350 { "bndldx", { Gbnd, Mv_bnd }, 0 },
bf890a93 10351 { "nopQ", { Ev }, 0 },
7e8b059b
L
10352 },
10353 {
10354 /* MOD_0F1B_PREFIX_0 */
d276ec69 10355 { "bndstx", { Mv_bnd, Gbnd }, 0 },
bf890a93 10356 { "nopQ", { Ev }, 0 },
7e8b059b
L
10357 },
10358 {
10359 /* MOD_0F1B_PREFIX_1 */
d276ec69 10360 { "bndmk", { Gbnd, Mv_bnd }, 0 },
bf890a93 10361 { "nopQ", { Ev }, 0 },
7e8b059b 10362 },
c48935d7
IT
10363 {
10364 /* MOD_0F1C_PREFIX_0 */
10365 { REG_TABLE (REG_0F1C_MOD_0) },
10366 { "nopQ", { Ev }, 0 },
10367 },
603555e5
L
10368 {
10369 /* MOD_0F1E_PREFIX_1 */
10370 { "nopQ", { Ev }, 0 },
10371 { REG_TABLE (REG_0F1E_MOD_3) },
10372 },
b844680a 10373 {
92fddf8e 10374 /* MOD_0F24 */
7bb15c6f 10375 { Bad_Opcode },
bf890a93 10376 { "movL", { Rd, Td }, 0 },
b844680a
L
10377 },
10378 {
92fddf8e 10379 /* MOD_0F26 */
592d1631 10380 { Bad_Opcode },
bf890a93 10381 { "movL", { Td, Rd }, 0 },
b844680a 10382 },
75c135a8
L
10383 {
10384 /* MOD_0F2B_PREFIX_0 */
507bd325 10385 {"movntps", { Mx, XM }, PREFIX_OPCODE },
75c135a8
L
10386 },
10387 {
10388 /* MOD_0F2B_PREFIX_1 */
507bd325 10389 {"movntss", { Md, XM }, PREFIX_OPCODE },
75c135a8
L
10390 },
10391 {
10392 /* MOD_0F2B_PREFIX_2 */
507bd325 10393 {"movntpd", { Mx, XM }, PREFIX_OPCODE },
75c135a8
L
10394 },
10395 {
10396 /* MOD_0F2B_PREFIX_3 */
507bd325 10397 {"movntsd", { Mq, XM }, PREFIX_OPCODE },
75c135a8
L
10398 },
10399 {
10400 /* MOD_0F51 */
592d1631 10401 { Bad_Opcode },
507bd325 10402 { "movmskpX", { Gdq, XS }, PREFIX_OPCODE },
75c135a8 10403 },
b844680a 10404 {
1ceb70f8 10405 /* MOD_0F71_REG_2 */
592d1631 10406 { Bad_Opcode },
bf890a93 10407 { "psrlw", { MS, Ib }, 0 },
b844680a
L
10408 },
10409 {
1ceb70f8 10410 /* MOD_0F71_REG_4 */
592d1631 10411 { Bad_Opcode },
bf890a93 10412 { "psraw", { MS, Ib }, 0 },
b844680a
L
10413 },
10414 {
1ceb70f8 10415 /* MOD_0F71_REG_6 */
592d1631 10416 { Bad_Opcode },
bf890a93 10417 { "psllw", { MS, Ib }, 0 },
b844680a
L
10418 },
10419 {
1ceb70f8 10420 /* MOD_0F72_REG_2 */
592d1631 10421 { Bad_Opcode },
bf890a93 10422 { "psrld", { MS, Ib }, 0 },
b844680a
L
10423 },
10424 {
1ceb70f8 10425 /* MOD_0F72_REG_4 */
592d1631 10426 { Bad_Opcode },
bf890a93 10427 { "psrad", { MS, Ib }, 0 },
b844680a
L
10428 },
10429 {
1ceb70f8 10430 /* MOD_0F72_REG_6 */
592d1631 10431 { Bad_Opcode },
bf890a93 10432 { "pslld", { MS, Ib }, 0 },
b844680a
L
10433 },
10434 {
1ceb70f8 10435 /* MOD_0F73_REG_2 */
592d1631 10436 { Bad_Opcode },
bf890a93 10437 { "psrlq", { MS, Ib }, 0 },
b844680a
L
10438 },
10439 {
1ceb70f8 10440 /* MOD_0F73_REG_3 */
592d1631 10441 { Bad_Opcode },
c0f3af97
L
10442 { PREFIX_TABLE (PREFIX_0F73_REG_3) },
10443 },
10444 {
10445 /* MOD_0F73_REG_6 */
592d1631 10446 { Bad_Opcode },
bf890a93 10447 { "psllq", { MS, Ib }, 0 },
c0f3af97
L
10448 },
10449 {
10450 /* MOD_0F73_REG_7 */
592d1631 10451 { Bad_Opcode },
c0f3af97
L
10452 { PREFIX_TABLE (PREFIX_0F73_REG_7) },
10453 },
10454 {
10455 /* MOD_0FAE_REG_0 */
bf890a93 10456 { "fxsave", { FXSAVE }, 0 },
c7b8aa3a 10457 { PREFIX_TABLE (PREFIX_0FAE_REG_0) },
c0f3af97
L
10458 },
10459 {
10460 /* MOD_0FAE_REG_1 */
bf890a93 10461 { "fxrstor", { FXSAVE }, 0 },
c7b8aa3a 10462 { PREFIX_TABLE (PREFIX_0FAE_REG_1) },
c0f3af97
L
10463 },
10464 {
10465 /* MOD_0FAE_REG_2 */
bf890a93 10466 { "ldmxcsr", { Md }, 0 },
c7b8aa3a 10467 { PREFIX_TABLE (PREFIX_0FAE_REG_2) },
c0f3af97
L
10468 },
10469 {
10470 /* MOD_0FAE_REG_3 */
bf890a93 10471 { "stmxcsr", { Md }, 0 },
c7b8aa3a 10472 { PREFIX_TABLE (PREFIX_0FAE_REG_3) },
c0f3af97
L
10473 },
10474 {
10475 /* MOD_0FAE_REG_4 */
6b40c462
L
10476 { PREFIX_TABLE (PREFIX_MOD_0_0FAE_REG_4) },
10477 { PREFIX_TABLE (PREFIX_MOD_3_0FAE_REG_4) },
c0f3af97
L
10478 },
10479 {
10480 /* MOD_0FAE_REG_5 */
603555e5 10481 { PREFIX_TABLE (PREFIX_MOD_0_0FAE_REG_5) },
2234eee6 10482 { PREFIX_TABLE (PREFIX_MOD_3_0FAE_REG_5) },
c0f3af97
L
10483 },
10484 {
10485 /* MOD_0FAE_REG_6 */
de89d0a3
IT
10486 { PREFIX_TABLE (PREFIX_MOD_0_0FAE_REG_6) },
10487 { PREFIX_TABLE (PREFIX_MOD_1_0FAE_REG_6) },
c0f3af97
L
10488 },
10489 {
10490 /* MOD_0FAE_REG_7 */
963f3586 10491 { PREFIX_TABLE (PREFIX_0FAE_REG_7) },
c0f3af97
L
10492 { RM_TABLE (RM_0FAE_REG_7) },
10493 },
10494 {
10495 /* MOD_0FB2 */
bf890a93 10496 { "lssS", { Gv, Mp }, 0 },
c0f3af97
L
10497 },
10498 {
10499 /* MOD_0FB4 */
bf890a93 10500 { "lfsS", { Gv, Mp }, 0 },
c0f3af97
L
10501 },
10502 {
10503 /* MOD_0FB5 */
bf890a93 10504 { "lgsS", { Gv, Mp }, 0 },
c0f3af97 10505 },
a8484f96
L
10506 {
10507 /* MOD_0FC3 */
10508 { PREFIX_TABLE (PREFIX_MOD_0_0FC3) },
10509 },
963f3586
IT
10510 {
10511 /* MOD_0FC7_REG_3 */
a8484f96 10512 { "xrstors", { FXSAVE }, 0 },
963f3586
IT
10513 },
10514 {
10515 /* MOD_0FC7_REG_4 */
bf890a93 10516 { "xsavec", { FXSAVE }, 0 },
963f3586
IT
10517 },
10518 {
10519 /* MOD_0FC7_REG_5 */
bf890a93 10520 { "xsaves", { FXSAVE }, 0 },
963f3586 10521 },
c0f3af97
L
10522 {
10523 /* MOD_0FC7_REG_6 */
f24bcbaa
L
10524 { PREFIX_TABLE (PREFIX_MOD_0_0FC7_REG_6) },
10525 { PREFIX_TABLE (PREFIX_MOD_3_0FC7_REG_6) }
c0f3af97
L
10526 },
10527 {
10528 /* MOD_0FC7_REG_7 */
bf890a93 10529 { "vmptrst", { Mq }, 0 },
f24bcbaa 10530 { PREFIX_TABLE (PREFIX_MOD_3_0FC7_REG_7) }
c0f3af97
L
10531 },
10532 {
10533 /* MOD_0FD7 */
592d1631 10534 { Bad_Opcode },
bf890a93 10535 { "pmovmskb", { Gdq, MS }, 0 },
c0f3af97
L
10536 },
10537 {
10538 /* MOD_0FE7_PREFIX_2 */
bf890a93 10539 { "movntdq", { Mx, XM }, 0 },
c0f3af97
L
10540 },
10541 {
10542 /* MOD_0FF0_PREFIX_3 */
bf890a93 10543 { "lddqu", { XM, M }, 0 },
c0f3af97
L
10544 },
10545 {
10546 /* MOD_0F382A_PREFIX_2 */
bf890a93 10547 { "movntdqa", { XM, Mx }, 0 },
c0f3af97 10548 },
603555e5
L
10549 {
10550 /* MOD_0F38F5_PREFIX_2 */
10551 { "wrussK", { M, Gdq }, PREFIX_OPCODE },
10552 },
10553 {
10554 /* MOD_0F38F6_PREFIX_0 */
10555 { "wrssK", { M, Gdq }, PREFIX_OPCODE },
10556 },
5d79adc4
L
10557 {
10558 /* MOD_0F38F8_PREFIX_1 */
10559 { "enqcmds", { Gva, M }, PREFIX_OPCODE },
10560 },
c0a30a9f
L
10561 {
10562 /* MOD_0F38F8_PREFIX_2 */
10563 { "movdir64b", { Gva, M }, PREFIX_OPCODE },
10564 },
5d79adc4
L
10565 {
10566 /* MOD_0F38F8_PREFIX_3 */
10567 { "enqcmd", { Gva, M }, PREFIX_OPCODE },
10568 },
c0a30a9f
L
10569 {
10570 /* MOD_0F38F9_PREFIX_0 */
10571 { "movdiri", { Em, Gv }, PREFIX_OPCODE },
10572 },
c0f3af97
L
10573 {
10574 /* MOD_62_32BIT */
bf890a93 10575 { "bound{S|}", { Gv, Ma }, 0 },
43234a1e 10576 { EVEX_TABLE (EVEX_0F) },
c0f3af97
L
10577 },
10578 {
10579 /* MOD_C4_32BIT */
bf890a93 10580 { "lesS", { Gv, Mp }, 0 },
c0f3af97
L
10581 { VEX_C4_TABLE (VEX_0F) },
10582 },
10583 {
10584 /* MOD_C5_32BIT */
bf890a93 10585 { "ldsS", { Gv, Mp }, 0 },
c0f3af97
L
10586 { VEX_C5_TABLE (VEX_0F) },
10587 },
10588 {
592a252b
L
10589 /* MOD_VEX_0F12_PREFIX_0 */
10590 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_0) },
10591 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_1) },
c0f3af97
L
10592 },
10593 {
592a252b
L
10594 /* MOD_VEX_0F13 */
10595 { VEX_LEN_TABLE (VEX_LEN_0F13_M_0) },
c0f3af97
L
10596 },
10597 {
592a252b
L
10598 /* MOD_VEX_0F16_PREFIX_0 */
10599 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_0) },
10600 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_1) },
c0f3af97
L
10601 },
10602 {
592a252b
L
10603 /* MOD_VEX_0F17 */
10604 { VEX_LEN_TABLE (VEX_LEN_0F17_M_0) },
c0f3af97
L
10605 },
10606 {
592a252b 10607 /* MOD_VEX_0F2B */
ec6f095a 10608 { "vmovntpX", { Mx, XM }, 0 },
c0f3af97 10609 },
ab4e4ed5
AF
10610 {
10611 /* MOD_VEX_W_0_0F41_P_0_LEN_1 */
10612 { Bad_Opcode },
10613 { "kandw", { MaskG, MaskVex, MaskR }, 0 },
10614 },
10615 {
10616 /* MOD_VEX_W_1_0F41_P_0_LEN_1 */
10617 { Bad_Opcode },
10618 { "kandq", { MaskG, MaskVex, MaskR }, 0 },
10619 },
10620 {
10621 /* MOD_VEX_W_0_0F41_P_2_LEN_1 */
10622 { Bad_Opcode },
10623 { "kandb", { MaskG, MaskVex, MaskR }, 0 },
10624 },
10625 {
10626 /* MOD_VEX_W_1_0F41_P_2_LEN_1 */
10627 { Bad_Opcode },
10628 { "kandd", { MaskG, MaskVex, MaskR }, 0 },
10629 },
10630 {
10631 /* MOD_VEX_W_0_0F42_P_0_LEN_1 */
10632 { Bad_Opcode },
10633 { "kandnw", { MaskG, MaskVex, MaskR }, 0 },
10634 },
10635 {
10636 /* MOD_VEX_W_1_0F42_P_0_LEN_1 */
10637 { Bad_Opcode },
10638 { "kandnq", { MaskG, MaskVex, MaskR }, 0 },
10639 },
10640 {
10641 /* MOD_VEX_W_0_0F42_P_2_LEN_1 */
10642 { Bad_Opcode },
10643 { "kandnb", { MaskG, MaskVex, MaskR }, 0 },
10644 },
10645 {
10646 /* MOD_VEX_W_1_0F42_P_2_LEN_1 */
10647 { Bad_Opcode },
10648 { "kandnd", { MaskG, MaskVex, MaskR }, 0 },
10649 },
10650 {
10651 /* MOD_VEX_W_0_0F44_P_0_LEN_0 */
10652 { Bad_Opcode },
10653 { "knotw", { MaskG, MaskR }, 0 },
10654 },
10655 {
10656 /* MOD_VEX_W_1_0F44_P_0_LEN_0 */
10657 { Bad_Opcode },
10658 { "knotq", { MaskG, MaskR }, 0 },
10659 },
10660 {
10661 /* MOD_VEX_W_0_0F44_P_2_LEN_0 */
10662 { Bad_Opcode },
10663 { "knotb", { MaskG, MaskR }, 0 },
10664 },
10665 {
10666 /* MOD_VEX_W_1_0F44_P_2_LEN_0 */
10667 { Bad_Opcode },
10668 { "knotd", { MaskG, MaskR }, 0 },
10669 },
10670 {
10671 /* MOD_VEX_W_0_0F45_P_0_LEN_1 */
10672 { Bad_Opcode },
10673 { "korw", { MaskG, MaskVex, MaskR }, 0 },
10674 },
10675 {
10676 /* MOD_VEX_W_1_0F45_P_0_LEN_1 */
10677 { Bad_Opcode },
10678 { "korq", { MaskG, MaskVex, MaskR }, 0 },
10679 },
10680 {
10681 /* MOD_VEX_W_0_0F45_P_2_LEN_1 */
10682 { Bad_Opcode },
10683 { "korb", { MaskG, MaskVex, MaskR }, 0 },
10684 },
10685 {
10686 /* MOD_VEX_W_1_0F45_P_2_LEN_1 */
10687 { Bad_Opcode },
10688 { "kord", { MaskG, MaskVex, MaskR }, 0 },
10689 },
10690 {
10691 /* MOD_VEX_W_0_0F46_P_0_LEN_1 */
10692 { Bad_Opcode },
10693 { "kxnorw", { MaskG, MaskVex, MaskR }, 0 },
10694 },
10695 {
10696 /* MOD_VEX_W_1_0F46_P_0_LEN_1 */
10697 { Bad_Opcode },
10698 { "kxnorq", { MaskG, MaskVex, MaskR }, 0 },
10699 },
10700 {
10701 /* MOD_VEX_W_0_0F46_P_2_LEN_1 */
10702 { Bad_Opcode },
10703 { "kxnorb", { MaskG, MaskVex, MaskR }, 0 },
10704 },
10705 {
10706 /* MOD_VEX_W_1_0F46_P_2_LEN_1 */
10707 { Bad_Opcode },
10708 { "kxnord", { MaskG, MaskVex, MaskR }, 0 },
10709 },
10710 {
10711 /* MOD_VEX_W_0_0F47_P_0_LEN_1 */
10712 { Bad_Opcode },
10713 { "kxorw", { MaskG, MaskVex, MaskR }, 0 },
10714 },
10715 {
10716 /* MOD_VEX_W_1_0F47_P_0_LEN_1 */
10717 { Bad_Opcode },
10718 { "kxorq", { MaskG, MaskVex, MaskR }, 0 },
10719 },
10720 {
10721 /* MOD_VEX_W_0_0F47_P_2_LEN_1 */
10722 { Bad_Opcode },
10723 { "kxorb", { MaskG, MaskVex, MaskR }, 0 },
10724 },
10725 {
10726 /* MOD_VEX_W_1_0F47_P_2_LEN_1 */
10727 { Bad_Opcode },
10728 { "kxord", { MaskG, MaskVex, MaskR }, 0 },
10729 },
10730 {
10731 /* MOD_VEX_W_0_0F4A_P_0_LEN_1 */
10732 { Bad_Opcode },
10733 { "kaddw", { MaskG, MaskVex, MaskR }, 0 },
10734 },
10735 {
10736 /* MOD_VEX_W_1_0F4A_P_0_LEN_1 */
10737 { Bad_Opcode },
10738 { "kaddq", { MaskG, MaskVex, MaskR }, 0 },
10739 },
10740 {
10741 /* MOD_VEX_W_0_0F4A_P_2_LEN_1 */
10742 { Bad_Opcode },
10743 { "kaddb", { MaskG, MaskVex, MaskR }, 0 },
10744 },
10745 {
10746 /* MOD_VEX_W_1_0F4A_P_2_LEN_1 */
10747 { Bad_Opcode },
10748 { "kaddd", { MaskG, MaskVex, MaskR }, 0 },
10749 },
10750 {
10751 /* MOD_VEX_W_0_0F4B_P_0_LEN_1 */
10752 { Bad_Opcode },
10753 { "kunpckwd", { MaskG, MaskVex, MaskR }, 0 },
10754 },
10755 {
10756 /* MOD_VEX_W_1_0F4B_P_0_LEN_1 */
10757 { Bad_Opcode },
10758 { "kunpckdq", { MaskG, MaskVex, MaskR }, 0 },
10759 },
10760 {
10761 /* MOD_VEX_W_0_0F4B_P_2_LEN_1 */
10762 { Bad_Opcode },
10763 { "kunpckbw", { MaskG, MaskVex, MaskR }, 0 },
10764 },
c0f3af97 10765 {
592a252b 10766 /* MOD_VEX_0F50 */
592d1631 10767 { Bad_Opcode },
ec6f095a 10768 { "vmovmskpX", { Gdq, XS }, 0 },
c0f3af97
L
10769 },
10770 {
592a252b 10771 /* MOD_VEX_0F71_REG_2 */
592d1631 10772 { Bad_Opcode },
592a252b 10773 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_2) },
b844680a
L
10774 },
10775 {
592a252b 10776 /* MOD_VEX_0F71_REG_4 */
592d1631 10777 { Bad_Opcode },
592a252b 10778 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_4) },
b844680a
L
10779 },
10780 {
592a252b 10781 /* MOD_VEX_0F71_REG_6 */
592d1631 10782 { Bad_Opcode },
592a252b 10783 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_6) },
b844680a
L
10784 },
10785 {
592a252b 10786 /* MOD_VEX_0F72_REG_2 */
592d1631 10787 { Bad_Opcode },
592a252b 10788 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_2) },
b844680a 10789 },
d8faab4e 10790 {
592a252b 10791 /* MOD_VEX_0F72_REG_4 */
592d1631 10792 { Bad_Opcode },
592a252b 10793 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_4) },
d8faab4e
L
10794 },
10795 {
592a252b 10796 /* MOD_VEX_0F72_REG_6 */
592d1631 10797 { Bad_Opcode },
592a252b 10798 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_6) },
d8faab4e 10799 },
876d4bfa 10800 {
592a252b 10801 /* MOD_VEX_0F73_REG_2 */
592d1631 10802 { Bad_Opcode },
592a252b 10803 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_2) },
876d4bfa
L
10804 },
10805 {
592a252b 10806 /* MOD_VEX_0F73_REG_3 */
592d1631 10807 { Bad_Opcode },
592a252b 10808 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_3) },
475a2301
L
10809 },
10810 {
592a252b 10811 /* MOD_VEX_0F73_REG_6 */
592d1631 10812 { Bad_Opcode },
592a252b 10813 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_6) },
876d4bfa
L
10814 },
10815 {
592a252b 10816 /* MOD_VEX_0F73_REG_7 */
592d1631 10817 { Bad_Opcode },
592a252b 10818 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_7) },
876d4bfa 10819 },
ab4e4ed5
AF
10820 {
10821 /* MOD_VEX_W_0_0F91_P_0_LEN_0 */
10822 { "kmovw", { Ew, MaskG }, 0 },
10823 { Bad_Opcode },
10824 },
10825 {
10826 /* MOD_VEX_W_0_0F91_P_0_LEN_0 */
10827 { "kmovq", { Eq, MaskG }, 0 },
10828 { Bad_Opcode },
10829 },
10830 {
10831 /* MOD_VEX_W_0_0F91_P_2_LEN_0 */
10832 { "kmovb", { Eb, MaskG }, 0 },
10833 { Bad_Opcode },
10834 },
10835 {
10836 /* MOD_VEX_W_0_0F91_P_2_LEN_0 */
10837 { "kmovd", { Ed, MaskG }, 0 },
10838 { Bad_Opcode },
10839 },
10840 {
10841 /* MOD_VEX_W_0_0F92_P_0_LEN_0 */
10842 { Bad_Opcode },
10843 { "kmovw", { MaskG, Rdq }, 0 },
10844 },
10845 {
10846 /* MOD_VEX_W_0_0F92_P_2_LEN_0 */
10847 { Bad_Opcode },
10848 { "kmovb", { MaskG, Rdq }, 0 },
10849 },
10850 {
58a211d2 10851 /* MOD_VEX_0F92_P_3_LEN_0 */
ab4e4ed5 10852 { Bad_Opcode },
58a211d2 10853 { "kmovK", { MaskG, Rdq }, 0 },
ab4e4ed5
AF
10854 },
10855 {
10856 /* MOD_VEX_W_0_0F93_P_0_LEN_0 */
10857 { Bad_Opcode },
10858 { "kmovw", { Gdq, MaskR }, 0 },
10859 },
10860 {
10861 /* MOD_VEX_W_0_0F93_P_2_LEN_0 */
10862 { Bad_Opcode },
10863 { "kmovb", { Gdq, MaskR }, 0 },
10864 },
10865 {
58a211d2 10866 /* MOD_VEX_0F93_P_3_LEN_0 */
ab4e4ed5 10867 { Bad_Opcode },
58a211d2 10868 { "kmovK", { Gdq, MaskR }, 0 },
ab4e4ed5
AF
10869 },
10870 {
10871 /* MOD_VEX_W_0_0F98_P_0_LEN_0 */
10872 { Bad_Opcode },
10873 { "kortestw", { MaskG, MaskR }, 0 },
10874 },
10875 {
10876 /* MOD_VEX_W_1_0F98_P_0_LEN_0 */
10877 { Bad_Opcode },
10878 { "kortestq", { MaskG, MaskR }, 0 },
10879 },
10880 {
10881 /* MOD_VEX_W_0_0F98_P_2_LEN_0 */
10882 { Bad_Opcode },
10883 { "kortestb", { MaskG, MaskR }, 0 },
10884 },
10885 {
10886 /* MOD_VEX_W_1_0F98_P_2_LEN_0 */
10887 { Bad_Opcode },
10888 { "kortestd", { MaskG, MaskR }, 0 },
10889 },
10890 {
10891 /* MOD_VEX_W_0_0F99_P_0_LEN_0 */
10892 { Bad_Opcode },
10893 { "ktestw", { MaskG, MaskR }, 0 },
10894 },
10895 {
10896 /* MOD_VEX_W_1_0F99_P_0_LEN_0 */
10897 { Bad_Opcode },
10898 { "ktestq", { MaskG, MaskR }, 0 },
10899 },
10900 {
10901 /* MOD_VEX_W_0_0F99_P_2_LEN_0 */
10902 { Bad_Opcode },
10903 { "ktestb", { MaskG, MaskR }, 0 },
10904 },
10905 {
10906 /* MOD_VEX_W_1_0F99_P_2_LEN_0 */
10907 { Bad_Opcode },
10908 { "ktestd", { MaskG, MaskR }, 0 },
10909 },
876d4bfa 10910 {
592a252b
L
10911 /* MOD_VEX_0FAE_REG_2 */
10912 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_2_M_0) },
876d4bfa 10913 },
bbedc832 10914 {
592a252b
L
10915 /* MOD_VEX_0FAE_REG_3 */
10916 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_3_M_0) },
bbedc832 10917 },
144c41d9 10918 {
592a252b 10919 /* MOD_VEX_0FD7_PREFIX_2 */
592d1631 10920 { Bad_Opcode },
ec6f095a 10921 { "vpmovmskb", { Gdq, XS }, 0 },
144c41d9 10922 },
1afd85e3 10923 {
592a252b 10924 /* MOD_VEX_0FE7_PREFIX_2 */
ec6f095a 10925 { "vmovntdq", { Mx, XM }, 0 },
1afd85e3
L
10926 },
10927 {
592a252b 10928 /* MOD_VEX_0FF0_PREFIX_3 */
ec6f095a 10929 { "vlddqu", { XM, M }, 0 },
92fddf8e 10930 },
75c135a8 10931 {
592a252b
L
10932 /* MOD_VEX_0F381A_PREFIX_2 */
10933 { VEX_LEN_TABLE (VEX_LEN_0F381A_P_2_M_0) },
75c135a8 10934 },
1afd85e3 10935 {
592a252b 10936 /* MOD_VEX_0F382A_PREFIX_2 */
ec6f095a 10937 { "vmovntdqa", { XM, Mx }, 0 },
1afd85e3 10938 },
75c135a8 10939 {
592a252b
L
10940 /* MOD_VEX_0F382C_PREFIX_2 */
10941 { VEX_W_TABLE (VEX_W_0F382C_P_2_M_0) },
75c135a8 10942 },
1afd85e3 10943 {
592a252b
L
10944 /* MOD_VEX_0F382D_PREFIX_2 */
10945 { VEX_W_TABLE (VEX_W_0F382D_P_2_M_0) },
1afd85e3
L
10946 },
10947 {
592a252b
L
10948 /* MOD_VEX_0F382E_PREFIX_2 */
10949 { VEX_W_TABLE (VEX_W_0F382E_P_2_M_0) },
1afd85e3
L
10950 },
10951 {
592a252b
L
10952 /* MOD_VEX_0F382F_PREFIX_2 */
10953 { VEX_W_TABLE (VEX_W_0F382F_P_2_M_0) },
1afd85e3 10954 },
6c30d220
L
10955 {
10956 /* MOD_VEX_0F385A_PREFIX_2 */
10957 { VEX_LEN_TABLE (VEX_LEN_0F385A_P_2_M_0) },
10958 },
10959 {
10960 /* MOD_VEX_0F388C_PREFIX_2 */
bf890a93 10961 { "vpmaskmov%LW", { XM, Vex, Mx }, 0 },
6c30d220
L
10962 },
10963 {
10964 /* MOD_VEX_0F388E_PREFIX_2 */
bf890a93 10965 { "vpmaskmov%LW", { Mx, Vex, XM }, 0 },
6c30d220 10966 },
ab4e4ed5
AF
10967 {
10968 /* MOD_VEX_W_0_0F3A30_P_2_LEN_0 */
10969 { Bad_Opcode },
10970 { "kshiftrb", { MaskG, MaskR, Ib }, 0 },
10971 },
10972 {
10973 /* MOD_VEX_W_1_0F3A30_P_2_LEN_0 */
10974 { Bad_Opcode },
10975 { "kshiftrw", { MaskG, MaskR, Ib }, 0 },
10976 },
10977 {
10978 /* MOD_VEX_W_0_0F3A31_P_2_LEN_0 */
10979 { Bad_Opcode },
10980 { "kshiftrd", { MaskG, MaskR, Ib }, 0 },
10981 },
10982 {
10983 /* MOD_VEX_W_1_0F3A31_P_2_LEN_0 */
10984 { Bad_Opcode },
10985 { "kshiftrq", { MaskG, MaskR, Ib }, 0 },
10986 },
10987 {
10988 /* MOD_VEX_W_0_0F3A32_P_2_LEN_0 */
10989 { Bad_Opcode },
10990 { "kshiftlb", { MaskG, MaskR, Ib }, 0 },
10991 },
10992 {
10993 /* MOD_VEX_W_1_0F3A32_P_2_LEN_0 */
10994 { Bad_Opcode },
10995 { "kshiftlw", { MaskG, MaskR, Ib }, 0 },
10996 },
10997 {
10998 /* MOD_VEX_W_0_0F3A33_P_2_LEN_0 */
10999 { Bad_Opcode },
11000 { "kshiftld", { MaskG, MaskR, Ib }, 0 },
11001 },
11002 {
11003 /* MOD_VEX_W_1_0F3A33_P_2_LEN_0 */
11004 { Bad_Opcode },
11005 { "kshiftlq", { MaskG, MaskR, Ib }, 0 },
11006 },
43234a1e
L
11007#define NEED_MOD_TABLE
11008#include "i386-dis-evex.h"
11009#undef NEED_MOD_TABLE
b844680a
L
11010};
11011
1ceb70f8 11012static const struct dis386 rm_table[][8] = {
42164a71
L
11013 {
11014 /* RM_C6_REG_7 */
bf890a93 11015 { "xabort", { Skip_MODRM, Ib }, 0 },
42164a71
L
11016 },
11017 {
11018 /* RM_C7_REG_7 */
bf890a93 11019 { "xbeginT", { Skip_MODRM, Jv }, 0 },
42164a71 11020 },
b844680a 11021 {
1ceb70f8 11022 /* RM_0F01_REG_0 */
a4e78aa5 11023 { "enclv", { Skip_MODRM }, 0 },
bf890a93
IT
11024 { "vmcall", { Skip_MODRM }, 0 },
11025 { "vmlaunch", { Skip_MODRM }, 0 },
11026 { "vmresume", { Skip_MODRM }, 0 },
11027 { "vmxoff", { Skip_MODRM }, 0 },
be3a8dca 11028 { "pconfig", { Skip_MODRM }, 0 },
b844680a
L
11029 },
11030 {
1ceb70f8 11031 /* RM_0F01_REG_1 */
bf890a93
IT
11032 { "monitor", { { OP_Monitor, 0 } }, 0 },
11033 { "mwait", { { OP_Mwait, 0 } }, 0 },
11034 { "clac", { Skip_MODRM }, 0 },
11035 { "stac", { Skip_MODRM }, 0 },
2cf200a4
IT
11036 { Bad_Opcode },
11037 { Bad_Opcode },
11038 { Bad_Opcode },
bf890a93 11039 { "encls", { Skip_MODRM }, 0 },
b844680a 11040 },
475a2301
L
11041 {
11042 /* RM_0F01_REG_2 */
bf890a93
IT
11043 { "xgetbv", { Skip_MODRM }, 0 },
11044 { "xsetbv", { Skip_MODRM }, 0 },
8729a6f6
L
11045 { Bad_Opcode },
11046 { Bad_Opcode },
bf890a93
IT
11047 { "vmfunc", { Skip_MODRM }, 0 },
11048 { "xend", { Skip_MODRM }, 0 },
11049 { "xtest", { Skip_MODRM }, 0 },
11050 { "enclu", { Skip_MODRM }, 0 },
475a2301 11051 },
b844680a 11052 {
1ceb70f8 11053 /* RM_0F01_REG_3 */
bf890a93
IT
11054 { "vmrun", { Skip_MODRM }, 0 },
11055 { "vmmcall", { Skip_MODRM }, 0 },
11056 { "vmload", { Skip_MODRM }, 0 },
11057 { "vmsave", { Skip_MODRM }, 0 },
11058 { "stgi", { Skip_MODRM }, 0 },
11059 { "clgi", { Skip_MODRM }, 0 },
11060 { "skinit", { Skip_MODRM }, 0 },
11061 { "invlpga", { Skip_MODRM }, 0 },
4e7d34a6 11062 },
8eab4136
L
11063 {
11064 /* RM_0F01_REG_5 */
2234eee6 11065 { PREFIX_TABLE (PREFIX_MOD_3_0F01_REG_5_RM_0) },
8eab4136 11066 { Bad_Opcode },
603555e5 11067 { PREFIX_TABLE (PREFIX_MOD_3_0F01_REG_5_RM_2) },
8eab4136
L
11068 { Bad_Opcode },
11069 { Bad_Opcode },
11070 { Bad_Opcode },
11071 { "rdpkru", { Skip_MODRM }, 0 },
11072 { "wrpkru", { Skip_MODRM }, 0 },
11073 },
4e7d34a6 11074 {
1ceb70f8 11075 /* RM_0F01_REG_7 */
bf890a93
IT
11076 { "swapgs", { Skip_MODRM }, 0 },
11077 { "rdtscp", { Skip_MODRM }, 0 },
9916071f
AP
11078 { "monitorx", { { OP_Monitor, 0 } }, 0 },
11079 { "mwaitx", { { OP_Mwaitx, 0 } }, 0 },
bf890a93 11080 { "clzero", { Skip_MODRM }, 0 },
b844680a 11081 },
603555e5
L
11082 {
11083 /* RM_0F1E_MOD_3_REG_7 */
11084 { "nopQ", { Ev }, 0 },
11085 { "nopQ", { Ev }, 0 },
11086 { "endbr64", { Skip_MODRM }, PREFIX_OPCODE },
11087 { "endbr32", { Skip_MODRM }, PREFIX_OPCODE },
11088 { "nopQ", { Ev }, 0 },
11089 { "nopQ", { Ev }, 0 },
11090 { "nopQ", { Ev }, 0 },
11091 { "nopQ", { Ev }, 0 },
11092 },
b844680a 11093 {
1ceb70f8 11094 /* RM_0FAE_REG_6 */
bf890a93 11095 { "mfence", { Skip_MODRM }, 0 },
b844680a 11096 },
bbedc832 11097 {
1ceb70f8 11098 /* RM_0FAE_REG_7 */
b5cefcca
L
11099 { "sfence", { Skip_MODRM }, 0 },
11100
144c41d9 11101 },
b844680a
L
11102};
11103
c608c12e
AM
11104#define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")
11105
f16cd0d5
L
11106/* We use the high bit to indicate different name for the same
11107 prefix. */
f16cd0d5 11108#define REP_PREFIX (0xf3 | 0x100)
42164a71
L
11109#define XACQUIRE_PREFIX (0xf2 | 0x200)
11110#define XRELEASE_PREFIX (0xf3 | 0x400)
7e8b059b 11111#define BND_PREFIX (0xf2 | 0x400)
04ef582a 11112#define NOTRACK_PREFIX (0x3e | 0x100)
f16cd0d5
L
11113
11114static int
26ca5450 11115ckprefix (void)
252b5132 11116{
f16cd0d5 11117 int newrex, i, length;
52b15da3 11118 rex = 0;
c0f3af97 11119 rex_ignored = 0;
252b5132 11120 prefixes = 0;
7d421014 11121 used_prefixes = 0;
52b15da3 11122 rex_used = 0;
f16cd0d5
L
11123 last_lock_prefix = -1;
11124 last_repz_prefix = -1;
11125 last_repnz_prefix = -1;
11126 last_data_prefix = -1;
11127 last_addr_prefix = -1;
11128 last_rex_prefix = -1;
11129 last_seg_prefix = -1;
d9949a36 11130 fwait_prefix = -1;
285ca992 11131 active_seg_prefix = 0;
f310f33d
L
11132 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
11133 all_prefixes[i] = 0;
11134 i = 0;
f16cd0d5
L
11135 length = 0;
11136 /* The maximum instruction length is 15bytes. */
11137 while (length < MAX_CODE_LENGTH - 1)
252b5132
RH
11138 {
11139 FETCH_DATA (the_info, codep + 1);
52b15da3 11140 newrex = 0;
252b5132
RH
11141 switch (*codep)
11142 {
52b15da3
JH
11143 /* REX prefixes family. */
11144 case 0x40:
11145 case 0x41:
11146 case 0x42:
11147 case 0x43:
11148 case 0x44:
11149 case 0x45:
11150 case 0x46:
11151 case 0x47:
11152 case 0x48:
11153 case 0x49:
11154 case 0x4a:
11155 case 0x4b:
11156 case 0x4c:
11157 case 0x4d:
11158 case 0x4e:
11159 case 0x4f:
f16cd0d5
L
11160 if (address_mode == mode_64bit)
11161 newrex = *codep;
11162 else
11163 return 1;
11164 last_rex_prefix = i;
52b15da3 11165 break;
252b5132
RH
11166 case 0xf3:
11167 prefixes |= PREFIX_REPZ;
f16cd0d5 11168 last_repz_prefix = i;
252b5132
RH
11169 break;
11170 case 0xf2:
11171 prefixes |= PREFIX_REPNZ;
f16cd0d5 11172 last_repnz_prefix = i;
252b5132
RH
11173 break;
11174 case 0xf0:
11175 prefixes |= PREFIX_LOCK;
f16cd0d5 11176 last_lock_prefix = i;
252b5132
RH
11177 break;
11178 case 0x2e:
11179 prefixes |= PREFIX_CS;
f16cd0d5 11180 last_seg_prefix = i;
285ca992 11181 active_seg_prefix = PREFIX_CS;
252b5132
RH
11182 break;
11183 case 0x36:
11184 prefixes |= PREFIX_SS;
f16cd0d5 11185 last_seg_prefix = i;
285ca992 11186 active_seg_prefix = PREFIX_SS;
252b5132
RH
11187 break;
11188 case 0x3e:
11189 prefixes |= PREFIX_DS;
f16cd0d5 11190 last_seg_prefix = i;
285ca992 11191 active_seg_prefix = PREFIX_DS;
252b5132
RH
11192 break;
11193 case 0x26:
11194 prefixes |= PREFIX_ES;
f16cd0d5 11195 last_seg_prefix = i;
285ca992 11196 active_seg_prefix = PREFIX_ES;
252b5132
RH
11197 break;
11198 case 0x64:
11199 prefixes |= PREFIX_FS;
f16cd0d5 11200 last_seg_prefix = i;
285ca992 11201 active_seg_prefix = PREFIX_FS;
252b5132
RH
11202 break;
11203 case 0x65:
11204 prefixes |= PREFIX_GS;
f16cd0d5 11205 last_seg_prefix = i;
285ca992 11206 active_seg_prefix = PREFIX_GS;
252b5132
RH
11207 break;
11208 case 0x66:
11209 prefixes |= PREFIX_DATA;
f16cd0d5 11210 last_data_prefix = i;
252b5132
RH
11211 break;
11212 case 0x67:
11213 prefixes |= PREFIX_ADDR;
f16cd0d5 11214 last_addr_prefix = i;
252b5132 11215 break;
5076851f 11216 case FWAIT_OPCODE:
252b5132
RH
11217 /* fwait is really an instruction. If there are prefixes
11218 before the fwait, they belong to the fwait, *not* to the
11219 following instruction. */
d9949a36 11220 fwait_prefix = i;
3e7d61b2 11221 if (prefixes || rex)
252b5132
RH
11222 {
11223 prefixes |= PREFIX_FWAIT;
11224 codep++;
6c067bbb
RM
11225 /* This ensures that the previous REX prefixes are noticed
11226 as unused prefixes, as in the return case below. */
11227 rex_used = rex;
f16cd0d5 11228 return 1;
252b5132
RH
11229 }
11230 prefixes = PREFIX_FWAIT;
11231 break;
11232 default:
f16cd0d5 11233 return 1;
252b5132 11234 }
52b15da3
JH
11235 /* Rex is ignored when followed by another prefix. */
11236 if (rex)
11237 {
3e7d61b2 11238 rex_used = rex;
f16cd0d5 11239 return 1;
52b15da3 11240 }
f16cd0d5 11241 if (*codep != FWAIT_OPCODE)
4e9ac44a 11242 all_prefixes[i++] = *codep;
52b15da3 11243 rex = newrex;
252b5132 11244 codep++;
f16cd0d5
L
11245 length++;
11246 }
11247 return 0;
11248}
11249
7d421014
ILT
11250/* Return the name of the prefix byte PREF, or NULL if PREF is not a
11251 prefix byte. */
11252
11253static const char *
26ca5450 11254prefix_name (int pref, int sizeflag)
7d421014 11255{
0003779b
L
11256 static const char *rexes [16] =
11257 {
11258 "rex", /* 0x40 */
11259 "rex.B", /* 0x41 */
11260 "rex.X", /* 0x42 */
11261 "rex.XB", /* 0x43 */
11262 "rex.R", /* 0x44 */
11263 "rex.RB", /* 0x45 */
11264 "rex.RX", /* 0x46 */
11265 "rex.RXB", /* 0x47 */
11266 "rex.W", /* 0x48 */
11267 "rex.WB", /* 0x49 */
11268 "rex.WX", /* 0x4a */
11269 "rex.WXB", /* 0x4b */
11270 "rex.WR", /* 0x4c */
11271 "rex.WRB", /* 0x4d */
11272 "rex.WRX", /* 0x4e */
11273 "rex.WRXB", /* 0x4f */
11274 };
11275
7d421014
ILT
11276 switch (pref)
11277 {
52b15da3
JH
11278 /* REX prefixes family. */
11279 case 0x40:
52b15da3 11280 case 0x41:
52b15da3 11281 case 0x42:
52b15da3 11282 case 0x43:
52b15da3 11283 case 0x44:
52b15da3 11284 case 0x45:
52b15da3 11285 case 0x46:
52b15da3 11286 case 0x47:
52b15da3 11287 case 0x48:
52b15da3 11288 case 0x49:
52b15da3 11289 case 0x4a:
52b15da3 11290 case 0x4b:
52b15da3 11291 case 0x4c:
52b15da3 11292 case 0x4d:
52b15da3 11293 case 0x4e:
52b15da3 11294 case 0x4f:
0003779b 11295 return rexes [pref - 0x40];
7d421014
ILT
11296 case 0xf3:
11297 return "repz";
11298 case 0xf2:
11299 return "repnz";
11300 case 0xf0:
11301 return "lock";
11302 case 0x2e:
11303 return "cs";
11304 case 0x36:
11305 return "ss";
11306 case 0x3e:
11307 return "ds";
11308 case 0x26:
11309 return "es";
11310 case 0x64:
11311 return "fs";
11312 case 0x65:
11313 return "gs";
11314 case 0x66:
11315 return (sizeflag & DFLAG) ? "data16" : "data32";
11316 case 0x67:
cb712a9e 11317 if (address_mode == mode_64bit)
db6eb5be 11318 return (sizeflag & AFLAG) ? "addr32" : "addr64";
c1a64871 11319 else
2888cb7a 11320 return (sizeflag & AFLAG) ? "addr16" : "addr32";
7d421014
ILT
11321 case FWAIT_OPCODE:
11322 return "fwait";
f16cd0d5
L
11323 case REP_PREFIX:
11324 return "rep";
42164a71
L
11325 case XACQUIRE_PREFIX:
11326 return "xacquire";
11327 case XRELEASE_PREFIX:
11328 return "xrelease";
7e8b059b
L
11329 case BND_PREFIX:
11330 return "bnd";
04ef582a
L
11331 case NOTRACK_PREFIX:
11332 return "notrack";
7d421014
ILT
11333 default:
11334 return NULL;
11335 }
11336}
11337
ce518a5f
L
11338static char op_out[MAX_OPERANDS][100];
11339static int op_ad, op_index[MAX_OPERANDS];
1d9f512f 11340static int two_source_ops;
ce518a5f
L
11341static bfd_vma op_address[MAX_OPERANDS];
11342static bfd_vma op_riprel[MAX_OPERANDS];
52b15da3 11343static bfd_vma start_pc;
ce518a5f 11344
252b5132
RH
11345/*
11346 * On the 386's of 1988, the maximum length of an instruction is 15 bytes.
11347 * (see topic "Redundant prefixes" in the "Differences from 8086"
11348 * section of the "Virtual 8086 Mode" chapter.)
11349 * 'pc' should be the address of this instruction, it will
11350 * be used to print the target address if this is a relative jump or call
11351 * The function returns the length of this instruction in bytes.
11352 */
11353
252b5132 11354static char intel_syntax;
9d141669 11355static char intel_mnemonic = !SYSV386_COMPAT;
252b5132
RH
11356static char open_char;
11357static char close_char;
11358static char separator_char;
11359static char scale_char;
11360
5db04b09
L
11361enum x86_64_isa
11362{
11363 amd64 = 0,
11364 intel64
11365};
11366
11367static enum x86_64_isa isa64;
11368
e396998b
AM
11369/* Here for backwards compatibility. When gdb stops using
11370 print_insn_i386_att and print_insn_i386_intel these functions can
11371 disappear, and print_insn_i386 be merged into print_insn. */
252b5132 11372int
26ca5450 11373print_insn_i386_att (bfd_vma pc, disassemble_info *info)
252b5132
RH
11374{
11375 intel_syntax = 0;
e396998b
AM
11376
11377 return print_insn (pc, info);
252b5132
RH
11378}
11379
11380int
26ca5450 11381print_insn_i386_intel (bfd_vma pc, disassemble_info *info)
252b5132
RH
11382{
11383 intel_syntax = 1;
e396998b
AM
11384
11385 return print_insn (pc, info);
252b5132
RH
11386}
11387
e396998b 11388int
26ca5450 11389print_insn_i386 (bfd_vma pc, disassemble_info *info)
e396998b
AM
11390{
11391 intel_syntax = -1;
11392
11393 return print_insn (pc, info);
11394}
11395
f59a29b9
L
11396void
11397print_i386_disassembler_options (FILE *stream)
11398{
11399 fprintf (stream, _("\n\
11400The following i386/x86-64 specific disassembler options are supported for use\n\
11401with the -M switch (multiple options should be separated by commas):\n"));
11402
11403 fprintf (stream, _(" x86-64 Disassemble in 64bit mode\n"));
11404 fprintf (stream, _(" i386 Disassemble in 32bit mode\n"));
11405 fprintf (stream, _(" i8086 Disassemble in 16bit mode\n"));
11406 fprintf (stream, _(" att Display instruction in AT&T syntax\n"));
11407 fprintf (stream, _(" intel Display instruction in Intel syntax\n"));
9d141669
L
11408 fprintf (stream, _(" att-mnemonic\n"
11409 " Display instruction in AT&T mnemonic\n"));
11410 fprintf (stream, _(" intel-mnemonic\n"
11411 " Display instruction in Intel mnemonic\n"));
f59a29b9
L
11412 fprintf (stream, _(" addr64 Assume 64bit address size\n"));
11413 fprintf (stream, _(" addr32 Assume 32bit address size\n"));
11414 fprintf (stream, _(" addr16 Assume 16bit address size\n"));
11415 fprintf (stream, _(" data32 Assume 32bit data size\n"));
11416 fprintf (stream, _(" data16 Assume 16bit data size\n"));
11417 fprintf (stream, _(" suffix Always display instruction suffix in AT&T syntax\n"));
5db04b09
L
11418 fprintf (stream, _(" amd64 Display instruction in AMD64 ISA\n"));
11419 fprintf (stream, _(" intel64 Display instruction in Intel64 ISA\n"));
f59a29b9
L
11420}
11421
592d1631 11422/* Bad opcode. */
bf890a93 11423static const struct dis386 bad_opcode = { "(bad)", { XX }, 0 };
592d1631 11424
b844680a
L
11425/* Get a pointer to struct dis386 with a valid name. */
11426
11427static const struct dis386 *
8bb15339 11428get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
b844680a 11429{
91d6fa6a 11430 int vindex, vex_table_index;
b844680a
L
11431
11432 if (dp->name != NULL)
11433 return dp;
11434
11435 switch (dp->op[0].bytemode)
11436 {
1ceb70f8
L
11437 case USE_REG_TABLE:
11438 dp = &reg_table[dp->op[1].bytemode][modrm.reg];
11439 break;
11440
11441 case USE_MOD_TABLE:
91d6fa6a
NC
11442 vindex = modrm.mod == 0x3 ? 1 : 0;
11443 dp = &mod_table[dp->op[1].bytemode][vindex];
1ceb70f8
L
11444 break;
11445
11446 case USE_RM_TABLE:
11447 dp = &rm_table[dp->op[1].bytemode][modrm.rm];
b844680a
L
11448 break;
11449
4e7d34a6 11450 case USE_PREFIX_TABLE:
c0f3af97 11451 if (need_vex)
b844680a 11452 {
c0f3af97
L
11453 /* The prefix in VEX is implicit. */
11454 switch (vex.prefix)
11455 {
11456 case 0:
91d6fa6a 11457 vindex = 0;
c0f3af97
L
11458 break;
11459 case REPE_PREFIX_OPCODE:
91d6fa6a 11460 vindex = 1;
c0f3af97
L
11461 break;
11462 case DATA_PREFIX_OPCODE:
91d6fa6a 11463 vindex = 2;
c0f3af97
L
11464 break;
11465 case REPNE_PREFIX_OPCODE:
91d6fa6a 11466 vindex = 3;
c0f3af97
L
11467 break;
11468 default:
11469 abort ();
11470 break;
11471 }
b844680a 11472 }
7bb15c6f 11473 else
b844680a 11474 {
285ca992
L
11475 int last_prefix = -1;
11476 int prefix = 0;
91d6fa6a 11477 vindex = 0;
285ca992
L
11478 /* We check PREFIX_REPNZ and PREFIX_REPZ before PREFIX_DATA.
11479 When there are multiple PREFIX_REPNZ and PREFIX_REPZ, the
11480 last one wins. */
11481 if ((prefixes & (PREFIX_REPZ | PREFIX_REPNZ)) != 0)
b844680a 11482 {
285ca992 11483 if (last_repz_prefix > last_repnz_prefix)
c0f3af97 11484 {
285ca992
L
11485 vindex = 1;
11486 prefix = PREFIX_REPZ;
11487 last_prefix = last_repz_prefix;
c0f3af97
L
11488 }
11489 else
b844680a 11490 {
285ca992
L
11491 vindex = 3;
11492 prefix = PREFIX_REPNZ;
11493 last_prefix = last_repnz_prefix;
b844680a 11494 }
285ca992 11495
507bd325
L
11496 /* Check if prefix should be ignored. */
11497 if ((((prefix_table[dp->op[1].bytemode][vindex].prefix_requirement
11498 & PREFIX_IGNORED) >> PREFIX_IGNORED_SHIFT)
11499 & prefix) != 0)
285ca992
L
11500 vindex = 0;
11501 }
11502
11503 if (vindex == 0 && (prefixes & PREFIX_DATA) != 0)
11504 {
11505 vindex = 2;
11506 prefix = PREFIX_DATA;
11507 last_prefix = last_data_prefix;
11508 }
11509
11510 if (vindex != 0)
11511 {
11512 used_prefixes |= prefix;
11513 all_prefixes[last_prefix] = 0;
b844680a
L
11514 }
11515 }
91d6fa6a 11516 dp = &prefix_table[dp->op[1].bytemode][vindex];
b844680a
L
11517 break;
11518
4e7d34a6 11519 case USE_X86_64_TABLE:
91d6fa6a
NC
11520 vindex = address_mode == mode_64bit ? 1 : 0;
11521 dp = &x86_64_table[dp->op[1].bytemode][vindex];
b844680a
L
11522 break;
11523
4e7d34a6 11524 case USE_3BYTE_TABLE:
8bb15339 11525 FETCH_DATA (info, codep + 2);
91d6fa6a
NC
11526 vindex = *codep++;
11527 dp = &three_byte_table[dp->op[1].bytemode][vindex];
285ca992 11528 end_codep = codep;
8bb15339
L
11529 modrm.mod = (*codep >> 6) & 3;
11530 modrm.reg = (*codep >> 3) & 7;
11531 modrm.rm = *codep & 7;
11532 break;
11533
c0f3af97
L
11534 case USE_VEX_LEN_TABLE:
11535 if (!need_vex)
11536 abort ();
11537
11538 switch (vex.length)
11539 {
11540 case 128:
91d6fa6a 11541 vindex = 0;
c0f3af97
L
11542 break;
11543 case 256:
91d6fa6a 11544 vindex = 1;
c0f3af97
L
11545 break;
11546 default:
11547 abort ();
11548 break;
11549 }
11550
91d6fa6a 11551 dp = &vex_len_table[dp->op[1].bytemode][vindex];
c0f3af97
L
11552 break;
11553
04e2a182
L
11554 case USE_EVEX_LEN_TABLE:
11555 if (!vex.evex)
11556 abort ();
11557
11558 switch (vex.length)
11559 {
11560 case 128:
11561 vindex = 0;
11562 break;
11563 case 256:
11564 vindex = 1;
11565 break;
11566 case 512:
11567 vindex = 2;
11568 break;
11569 default:
11570 abort ();
11571 break;
11572 }
11573
11574 dp = &evex_len_table[dp->op[1].bytemode][vindex];
11575 break;
11576
f88c9eb0
SP
11577 case USE_XOP_8F_TABLE:
11578 FETCH_DATA (info, codep + 3);
11579 /* All bits in the REX prefix are ignored. */
11580 rex_ignored = rex;
11581 rex = ~(*codep >> 5) & 0x7;
11582
11583 /* VEX_TABLE_INDEX is the mmmmm part of the XOP byte 1 "RCB.mmmmm". */
11584 switch ((*codep & 0x1f))
11585 {
11586 default:
f07af43e
L
11587 dp = &bad_opcode;
11588 return dp;
5dd85c99
SP
11589 case 0x8:
11590 vex_table_index = XOP_08;
11591 break;
f88c9eb0
SP
11592 case 0x9:
11593 vex_table_index = XOP_09;
11594 break;
11595 case 0xa:
11596 vex_table_index = XOP_0A;
11597 break;
11598 }
11599 codep++;
11600 vex.w = *codep & 0x80;
11601 if (vex.w && address_mode == mode_64bit)
11602 rex |= REX_W;
11603
11604 vex.register_specifier = (~(*codep >> 3)) & 0xf;
abfcb414 11605 if (address_mode != mode_64bit)
f07af43e 11606 {
abfcb414
AP
11607 /* In 16/32-bit mode REX_B is silently ignored. */
11608 rex &= ~REX_B;
f07af43e 11609 }
f88c9eb0
SP
11610
11611 vex.length = (*codep & 0x4) ? 256 : 128;
11612 switch ((*codep & 0x3))
11613 {
11614 case 0:
f88c9eb0
SP
11615 break;
11616 case 1:
11617 vex.prefix = DATA_PREFIX_OPCODE;
11618 break;
11619 case 2:
11620 vex.prefix = REPE_PREFIX_OPCODE;
11621 break;
11622 case 3:
11623 vex.prefix = REPNE_PREFIX_OPCODE;
11624 break;
11625 }
11626 need_vex = 1;
11627 need_vex_reg = 1;
11628 codep++;
91d6fa6a
NC
11629 vindex = *codep++;
11630 dp = &xop_table[vex_table_index][vindex];
c48244a5 11631
285ca992 11632 end_codep = codep;
c48244a5
SP
11633 FETCH_DATA (info, codep + 1);
11634 modrm.mod = (*codep >> 6) & 3;
11635 modrm.reg = (*codep >> 3) & 7;
11636 modrm.rm = *codep & 7;
f88c9eb0
SP
11637 break;
11638
c0f3af97 11639 case USE_VEX_C4_TABLE:
43234a1e 11640 /* VEX prefix. */
c0f3af97
L
11641 FETCH_DATA (info, codep + 3);
11642 /* All bits in the REX prefix are ignored. */
11643 rex_ignored = rex;
11644 rex = ~(*codep >> 5) & 0x7;
11645 switch ((*codep & 0x1f))
11646 {
11647 default:
f07af43e
L
11648 dp = &bad_opcode;
11649 return dp;
c0f3af97 11650 case 0x1:
f88c9eb0 11651 vex_table_index = VEX_0F;
c0f3af97
L
11652 break;
11653 case 0x2:
f88c9eb0 11654 vex_table_index = VEX_0F38;
c0f3af97
L
11655 break;
11656 case 0x3:
f88c9eb0 11657 vex_table_index = VEX_0F3A;
c0f3af97
L
11658 break;
11659 }
11660 codep++;
11661 vex.w = *codep & 0x80;
9889cbb1 11662 if (address_mode == mode_64bit)
f07af43e 11663 {
9889cbb1
L
11664 if (vex.w)
11665 rex |= REX_W;
9889cbb1
L
11666 }
11667 else
11668 {
11669 /* For the 3-byte VEX prefix in 32-bit mode, the REX_B bit
11670 is ignored, other REX bits are 0 and the highest bit in
5f847646 11671 VEX.vvvv is also ignored (but we mustn't clear it here). */
9889cbb1 11672 rex = 0;
f07af43e 11673 }
5f847646 11674 vex.register_specifier = (~(*codep >> 3)) & 0xf;
c0f3af97
L
11675 vex.length = (*codep & 0x4) ? 256 : 128;
11676 switch ((*codep & 0x3))
11677 {
11678 case 0:
c0f3af97
L
11679 break;
11680 case 1:
11681 vex.prefix = DATA_PREFIX_OPCODE;
11682 break;
11683 case 2:
11684 vex.prefix = REPE_PREFIX_OPCODE;
11685 break;
11686 case 3:
11687 vex.prefix = REPNE_PREFIX_OPCODE;
11688 break;
11689 }
11690 need_vex = 1;
11691 need_vex_reg = 1;
11692 codep++;
91d6fa6a
NC
11693 vindex = *codep++;
11694 dp = &vex_table[vex_table_index][vindex];
285ca992 11695 end_codep = codep;
53c4d625
JB
11696 /* There is no MODRM byte for VEX0F 77. */
11697 if (vex_table_index != VEX_0F || vindex != 0x77)
c0f3af97
L
11698 {
11699 FETCH_DATA (info, codep + 1);
11700 modrm.mod = (*codep >> 6) & 3;
11701 modrm.reg = (*codep >> 3) & 7;
11702 modrm.rm = *codep & 7;
11703 }
11704 break;
11705
11706 case USE_VEX_C5_TABLE:
43234a1e 11707 /* VEX prefix. */
c0f3af97
L
11708 FETCH_DATA (info, codep + 2);
11709 /* All bits in the REX prefix are ignored. */
11710 rex_ignored = rex;
11711 rex = (*codep & 0x80) ? 0 : REX_R;
11712
9889cbb1
L
11713 /* For the 2-byte VEX prefix in 32-bit mode, the highest bit in
11714 VEX.vvvv is 1. */
c0f3af97 11715 vex.register_specifier = (~(*codep >> 3)) & 0xf;
c0f3af97
L
11716 vex.length = (*codep & 0x4) ? 256 : 128;
11717 switch ((*codep & 0x3))
11718 {
11719 case 0:
c0f3af97
L
11720 break;
11721 case 1:
11722 vex.prefix = DATA_PREFIX_OPCODE;
11723 break;
11724 case 2:
11725 vex.prefix = REPE_PREFIX_OPCODE;
11726 break;
11727 case 3:
11728 vex.prefix = REPNE_PREFIX_OPCODE;
11729 break;
11730 }
11731 need_vex = 1;
11732 need_vex_reg = 1;
11733 codep++;
91d6fa6a
NC
11734 vindex = *codep++;
11735 dp = &vex_table[dp->op[1].bytemode][vindex];
285ca992 11736 end_codep = codep;
53c4d625
JB
11737 /* There is no MODRM byte for VEX 77. */
11738 if (vindex != 0x77)
c0f3af97
L
11739 {
11740 FETCH_DATA (info, codep + 1);
11741 modrm.mod = (*codep >> 6) & 3;
11742 modrm.reg = (*codep >> 3) & 7;
11743 modrm.rm = *codep & 7;
11744 }
11745 break;
11746
9e30b8e0
L
11747 case USE_VEX_W_TABLE:
11748 if (!need_vex)
11749 abort ();
11750
11751 dp = &vex_w_table[dp->op[1].bytemode][vex.w ? 1 : 0];
11752 break;
11753
43234a1e
L
11754 case USE_EVEX_TABLE:
11755 two_source_ops = 0;
11756 /* EVEX prefix. */
11757 vex.evex = 1;
11758 FETCH_DATA (info, codep + 4);
11759 /* All bits in the REX prefix are ignored. */
11760 rex_ignored = rex;
11761 /* The first byte after 0x62. */
11762 rex = ~(*codep >> 5) & 0x7;
11763 vex.r = *codep & 0x10;
11764 switch ((*codep & 0xf))
11765 {
11766 default:
11767 return &bad_opcode;
11768 case 0x1:
11769 vex_table_index = EVEX_0F;
11770 break;
11771 case 0x2:
11772 vex_table_index = EVEX_0F38;
11773 break;
11774 case 0x3:
11775 vex_table_index = EVEX_0F3A;
11776 break;
11777 }
11778
11779 /* The second byte after 0x62. */
11780 codep++;
11781 vex.w = *codep & 0x80;
11782 if (vex.w && address_mode == mode_64bit)
11783 rex |= REX_W;
11784
11785 vex.register_specifier = (~(*codep >> 3)) & 0xf;
43234a1e
L
11786
11787 /* The U bit. */
11788 if (!(*codep & 0x4))
11789 return &bad_opcode;
11790
11791 switch ((*codep & 0x3))
11792 {
11793 case 0:
43234a1e
L
11794 break;
11795 case 1:
11796 vex.prefix = DATA_PREFIX_OPCODE;
11797 break;
11798 case 2:
11799 vex.prefix = REPE_PREFIX_OPCODE;
11800 break;
11801 case 3:
11802 vex.prefix = REPNE_PREFIX_OPCODE;
11803 break;
11804 }
11805
11806 /* The third byte after 0x62. */
11807 codep++;
11808
11809 /* Remember the static rounding bits. */
11810 vex.ll = (*codep >> 5) & 3;
11811 vex.b = (*codep & 0x10) != 0;
11812
11813 vex.v = *codep & 0x8;
11814 vex.mask_register_specifier = *codep & 0x7;
11815 vex.zeroing = *codep & 0x80;
11816
5f847646
JB
11817 if (address_mode != mode_64bit)
11818 {
11819 /* In 16/32-bit mode silently ignore following bits. */
11820 rex &= ~REX_B;
11821 vex.r = 1;
11822 vex.v = 1;
11823 }
11824
43234a1e
L
11825 need_vex = 1;
11826 need_vex_reg = 1;
11827 codep++;
11828 vindex = *codep++;
11829 dp = &evex_table[vex_table_index][vindex];
285ca992 11830 end_codep = codep;
43234a1e
L
11831 FETCH_DATA (info, codep + 1);
11832 modrm.mod = (*codep >> 6) & 3;
11833 modrm.reg = (*codep >> 3) & 7;
11834 modrm.rm = *codep & 7;
11835
11836 /* Set vector length. */
11837 if (modrm.mod == 3 && vex.b)
11838 vex.length = 512;
11839 else
11840 {
11841 switch (vex.ll)
11842 {
11843 case 0x0:
11844 vex.length = 128;
11845 break;
11846 case 0x1:
11847 vex.length = 256;
11848 break;
11849 case 0x2:
11850 vex.length = 512;
11851 break;
11852 default:
11853 return &bad_opcode;
11854 }
11855 }
11856 break;
11857
592d1631
L
11858 case 0:
11859 dp = &bad_opcode;
11860 break;
11861
b844680a 11862 default:
d34b5006 11863 abort ();
b844680a
L
11864 }
11865
11866 if (dp->name != NULL)
11867 return dp;
11868 else
8bb15339 11869 return get_valid_dis386 (dp, info);
b844680a
L
11870}
11871
dfc8cf43 11872static void
55cf16e1 11873get_sib (disassemble_info *info, int sizeflag)
dfc8cf43
L
11874{
11875 /* If modrm.mod == 3, operand must be register. */
11876 if (need_modrm
55cf16e1 11877 && ((sizeflag & AFLAG) || address_mode == mode_64bit)
dfc8cf43
L
11878 && modrm.mod != 3
11879 && modrm.rm == 4)
11880 {
11881 FETCH_DATA (info, codep + 2);
11882 sib.index = (codep [1] >> 3) & 7;
11883 sib.scale = (codep [1] >> 6) & 3;
11884 sib.base = codep [1] & 7;
11885 }
11886}
11887
e396998b 11888static int
26ca5450 11889print_insn (bfd_vma pc, disassemble_info *info)
252b5132 11890{
2da11e11 11891 const struct dis386 *dp;
252b5132 11892 int i;
ce518a5f 11893 char *op_txt[MAX_OPERANDS];
252b5132 11894 int needcomma;
df18fdba 11895 int sizeflag, orig_sizeflag;
e396998b 11896 const char *p;
252b5132 11897 struct dis_private priv;
f16cd0d5 11898 int prefix_length;
252b5132 11899
d7921315
L
11900 priv.orig_sizeflag = AFLAG | DFLAG;
11901 if ((info->mach & bfd_mach_i386_i386) != 0)
cb712a9e 11902 address_mode = mode_32bit;
2da11e11 11903 else if (info->mach == bfd_mach_i386_i8086)
d7921315
L
11904 {
11905 address_mode = mode_16bit;
11906 priv.orig_sizeflag = 0;
11907 }
2da11e11 11908 else
d7921315
L
11909 address_mode = mode_64bit;
11910
11911 if (intel_syntax == (char) -1)
11912 intel_syntax = (info->mach & bfd_mach_i386_intel_syntax) != 0;
e396998b
AM
11913
11914 for (p = info->disassembler_options; p != NULL; )
11915 {
5db04b09
L
11916 if (CONST_STRNEQ (p, "amd64"))
11917 isa64 = amd64;
11918 else if (CONST_STRNEQ (p, "intel64"))
11919 isa64 = intel64;
11920 else if (CONST_STRNEQ (p, "x86-64"))
e396998b 11921 {
cb712a9e 11922 address_mode = mode_64bit;
e396998b
AM
11923 priv.orig_sizeflag = AFLAG | DFLAG;
11924 }
0112cd26 11925 else if (CONST_STRNEQ (p, "i386"))
e396998b 11926 {
cb712a9e 11927 address_mode = mode_32bit;
e396998b
AM
11928 priv.orig_sizeflag = AFLAG | DFLAG;
11929 }
0112cd26 11930 else if (CONST_STRNEQ (p, "i8086"))
e396998b 11931 {
cb712a9e 11932 address_mode = mode_16bit;
e396998b
AM
11933 priv.orig_sizeflag = 0;
11934 }
0112cd26 11935 else if (CONST_STRNEQ (p, "intel"))
e396998b
AM
11936 {
11937 intel_syntax = 1;
9d141669
L
11938 if (CONST_STRNEQ (p + 5, "-mnemonic"))
11939 intel_mnemonic = 1;
e396998b 11940 }
0112cd26 11941 else if (CONST_STRNEQ (p, "att"))
e396998b
AM
11942 {
11943 intel_syntax = 0;
9d141669
L
11944 if (CONST_STRNEQ (p + 3, "-mnemonic"))
11945 intel_mnemonic = 0;
e396998b 11946 }
0112cd26 11947 else if (CONST_STRNEQ (p, "addr"))
e396998b 11948 {
f59a29b9
L
11949 if (address_mode == mode_64bit)
11950 {
11951 if (p[4] == '3' && p[5] == '2')
11952 priv.orig_sizeflag &= ~AFLAG;
11953 else if (p[4] == '6' && p[5] == '4')
11954 priv.orig_sizeflag |= AFLAG;
11955 }
11956 else
11957 {
11958 if (p[4] == '1' && p[5] == '6')
11959 priv.orig_sizeflag &= ~AFLAG;
11960 else if (p[4] == '3' && p[5] == '2')
11961 priv.orig_sizeflag |= AFLAG;
11962 }
e396998b 11963 }
0112cd26 11964 else if (CONST_STRNEQ (p, "data"))
e396998b
AM
11965 {
11966 if (p[4] == '1' && p[5] == '6')
11967 priv.orig_sizeflag &= ~DFLAG;
11968 else if (p[4] == '3' && p[5] == '2')
11969 priv.orig_sizeflag |= DFLAG;
11970 }
0112cd26 11971 else if (CONST_STRNEQ (p, "suffix"))
e396998b
AM
11972 priv.orig_sizeflag |= SUFFIX_ALWAYS;
11973
11974 p = strchr (p, ',');
11975 if (p != NULL)
11976 p++;
11977 }
11978
c0f92bf9
L
11979 if (address_mode == mode_64bit && sizeof (bfd_vma) < 8)
11980 {
11981 (*info->fprintf_func) (info->stream,
11982 _("64-bit address is disabled"));
11983 return -1;
11984 }
11985
e396998b
AM
11986 if (intel_syntax)
11987 {
11988 names64 = intel_names64;
11989 names32 = intel_names32;
11990 names16 = intel_names16;
11991 names8 = intel_names8;
11992 names8rex = intel_names8rex;
11993 names_seg = intel_names_seg;
b9733481 11994 names_mm = intel_names_mm;
7e8b059b 11995 names_bnd = intel_names_bnd;
b9733481
L
11996 names_xmm = intel_names_xmm;
11997 names_ymm = intel_names_ymm;
43234a1e 11998 names_zmm = intel_names_zmm;
db51cc60
L
11999 index64 = intel_index64;
12000 index32 = intel_index32;
43234a1e 12001 names_mask = intel_names_mask;
e396998b
AM
12002 index16 = intel_index16;
12003 open_char = '[';
12004 close_char = ']';
12005 separator_char = '+';
12006 scale_char = '*';
12007 }
12008 else
12009 {
12010 names64 = att_names64;
12011 names32 = att_names32;
12012 names16 = att_names16;
12013 names8 = att_names8;
12014 names8rex = att_names8rex;
12015 names_seg = att_names_seg;
b9733481 12016 names_mm = att_names_mm;
7e8b059b 12017 names_bnd = att_names_bnd;
b9733481
L
12018 names_xmm = att_names_xmm;
12019 names_ymm = att_names_ymm;
43234a1e 12020 names_zmm = att_names_zmm;
db51cc60
L
12021 index64 = att_index64;
12022 index32 = att_index32;
43234a1e 12023 names_mask = att_names_mask;
e396998b
AM
12024 index16 = att_index16;
12025 open_char = '(';
12026 close_char = ')';
12027 separator_char = ',';
12028 scale_char = ',';
12029 }
2da11e11 12030
4fe53c98 12031 /* The output looks better if we put 7 bytes on a line, since that
8a9036a4
L
12032 puts most long word instructions on a single line. Use 8 bytes
12033 for Intel L1OM. */
d7921315 12034 if ((info->mach & bfd_mach_l1om) != 0)
8a9036a4
L
12035 info->bytes_per_line = 8;
12036 else
12037 info->bytes_per_line = 7;
252b5132 12038
26ca5450 12039 info->private_data = &priv;
252b5132
RH
12040 priv.max_fetched = priv.the_buffer;
12041 priv.insn_start = pc;
252b5132
RH
12042
12043 obuf[0] = 0;
ce518a5f
L
12044 for (i = 0; i < MAX_OPERANDS; ++i)
12045 {
12046 op_out[i][0] = 0;
12047 op_index[i] = -1;
12048 }
252b5132
RH
12049
12050 the_info = info;
12051 start_pc = pc;
e396998b
AM
12052 start_codep = priv.the_buffer;
12053 codep = priv.the_buffer;
252b5132 12054
8df14d78 12055 if (OPCODES_SIGSETJMP (priv.bailout) != 0)
5076851f 12056 {
7d421014
ILT
12057 const char *name;
12058
5076851f 12059 /* Getting here means we tried for data but didn't get it. That
e396998b
AM
12060 means we have an incomplete instruction of some sort. Just
12061 print the first byte as a prefix or a .byte pseudo-op. */
12062 if (codep > priv.the_buffer)
5076851f 12063 {
e396998b 12064 name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
7d421014
ILT
12065 if (name != NULL)
12066 (*info->fprintf_func) (info->stream, "%s", name);
12067 else
5076851f 12068 {
7d421014
ILT
12069 /* Just print the first byte as a .byte instruction. */
12070 (*info->fprintf_func) (info->stream, ".byte 0x%x",
e396998b 12071 (unsigned int) priv.the_buffer[0]);
5076851f 12072 }
5076851f 12073
7d421014 12074 return 1;
5076851f
ILT
12075 }
12076
12077 return -1;
12078 }
12079
52b15da3 12080 obufp = obuf;
f16cd0d5
L
12081 sizeflag = priv.orig_sizeflag;
12082
12083 if (!ckprefix () || rex_used)
12084 {
12085 /* Too many prefixes or unused REX prefixes. */
12086 for (i = 0;
f6dd4781 12087 i < (int) ARRAY_SIZE (all_prefixes) && all_prefixes[i];
f16cd0d5 12088 i++)
de882298 12089 (*info->fprintf_func) (info->stream, "%s%s",
6c067bbb 12090 i == 0 ? "" : " ",
f16cd0d5 12091 prefix_name (all_prefixes[i], sizeflag));
de882298 12092 return i;
f16cd0d5 12093 }
252b5132
RH
12094
12095 insn_codep = codep;
12096
12097 FETCH_DATA (info, codep + 1);
12098 two_source_ops = (*codep == 0x62) || (*codep == 0xc8);
12099
3e7d61b2 12100 if (((prefixes & PREFIX_FWAIT)
f16cd0d5 12101 && ((*codep < 0xd8) || (*codep > 0xdf))))
252b5132 12102 {
86a80a50 12103 /* Handle prefixes before fwait. */
d9949a36 12104 for (i = 0; i < fwait_prefix && all_prefixes[i];
86a80a50
L
12105 i++)
12106 (*info->fprintf_func) (info->stream, "%s ",
12107 prefix_name (all_prefixes[i], sizeflag));
f16cd0d5 12108 (*info->fprintf_func) (info->stream, "fwait");
86a80a50 12109 return i + 1;
252b5132
RH
12110 }
12111
252b5132
RH
12112 if (*codep == 0x0f)
12113 {
eec0f4ca 12114 unsigned char threebyte;
5f40e14d
JS
12115
12116 codep++;
12117 FETCH_DATA (info, codep + 1);
12118 threebyte = *codep;
eec0f4ca 12119 dp = &dis386_twobyte[threebyte];
252b5132 12120 need_modrm = twobyte_has_modrm[*codep];
eec0f4ca 12121 codep++;
252b5132
RH
12122 }
12123 else
12124 {
6439fc28 12125 dp = &dis386[*codep];
252b5132 12126 need_modrm = onebyte_has_modrm[*codep];
eec0f4ca 12127 codep++;
252b5132 12128 }
246c51aa 12129
df18fdba
L
12130 /* Save sizeflag for printing the extra prefixes later before updating
12131 it for mnemonic and operand processing. The prefix names depend
12132 only on the address mode. */
12133 orig_sizeflag = sizeflag;
c608c12e 12134 if (prefixes & PREFIX_ADDR)
df18fdba 12135 sizeflag ^= AFLAG;
b844680a 12136 if ((prefixes & PREFIX_DATA))
df18fdba 12137 sizeflag ^= DFLAG;
3ffd33cf 12138
285ca992 12139 end_codep = codep;
8bb15339 12140 if (need_modrm)
252b5132
RH
12141 {
12142 FETCH_DATA (info, codep + 1);
7967e09e
L
12143 modrm.mod = (*codep >> 6) & 3;
12144 modrm.reg = (*codep >> 3) & 7;
12145 modrm.rm = *codep & 7;
252b5132
RH
12146 }
12147
42d5f9c6
MS
12148 need_vex = 0;
12149 need_vex_reg = 0;
12150 vex_w_done = 0;
caf0678c 12151 memset (&vex, 0, sizeof (vex));
55b126d4 12152
ce518a5f 12153 if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE)
252b5132 12154 {
55cf16e1 12155 get_sib (info, sizeflag);
252b5132
RH
12156 dofloat (sizeflag);
12157 }
12158 else
12159 {
8bb15339 12160 dp = get_valid_dis386 (dp, info);
b844680a 12161 if (dp != NULL && putop (dp->name, sizeflag) == 0)
6c067bbb 12162 {
55cf16e1 12163 get_sib (info, sizeflag);
ce518a5f
L
12164 for (i = 0; i < MAX_OPERANDS; ++i)
12165 {
246c51aa 12166 obufp = op_out[i];
ce518a5f
L
12167 op_ad = MAX_OPERANDS - 1 - i;
12168 if (dp->op[i].rtn)
12169 (*dp->op[i].rtn) (dp->op[i].bytemode, sizeflag);
43234a1e
L
12170 /* For EVEX instruction after the last operand masking
12171 should be printed. */
12172 if (i == 0 && vex.evex)
12173 {
12174 /* Don't print {%k0}. */
12175 if (vex.mask_register_specifier)
12176 {
12177 oappend ("{");
12178 oappend (names_mask[vex.mask_register_specifier]);
12179 oappend ("}");
12180 }
12181 if (vex.zeroing)
12182 oappend ("{z}");
12183 }
ce518a5f 12184 }
6439fc28 12185 }
252b5132
RH
12186 }
12187
63c6fc6c
L
12188 /* If VEX.vvvv and EVEX.vvvv are unused, they must be all 1s, which
12189 are all 0s in inverted form. */
12190 if (need_vex && vex.register_specifier != 0)
12191 {
12192 (*info->fprintf_func) (info->stream, "(bad)");
12193 return end_codep - priv.the_buffer;
12194 }
12195
d869730d 12196 /* Check if the REX prefix is used. */
e2e6193d 12197 if (rex_ignored == 0 && (rex ^ rex_used) == 0 && last_rex_prefix >= 0)
f16cd0d5
L
12198 all_prefixes[last_rex_prefix] = 0;
12199
5e6718e4 12200 /* Check if the SEG prefix is used. */
f16cd0d5
L
12201 if ((prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS | PREFIX_ES
12202 | PREFIX_FS | PREFIX_GS)) != 0
285ca992 12203 && (used_prefixes & active_seg_prefix) != 0)
f16cd0d5
L
12204 all_prefixes[last_seg_prefix] = 0;
12205
5e6718e4 12206 /* Check if the ADDR prefix is used. */
f16cd0d5
L
12207 if ((prefixes & PREFIX_ADDR) != 0
12208 && (used_prefixes & PREFIX_ADDR) != 0)
12209 all_prefixes[last_addr_prefix] = 0;
12210
df18fdba
L
12211 /* Check if the DATA prefix is used. */
12212 if ((prefixes & PREFIX_DATA) != 0
12213 && (used_prefixes & PREFIX_DATA) != 0)
12214 all_prefixes[last_data_prefix] = 0;
f16cd0d5 12215
df18fdba 12216 /* Print the extra prefixes. */
f16cd0d5 12217 prefix_length = 0;
f310f33d 12218 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
f16cd0d5
L
12219 if (all_prefixes[i])
12220 {
12221 const char *name;
df18fdba 12222 name = prefix_name (all_prefixes[i], orig_sizeflag);
f16cd0d5
L
12223 if (name == NULL)
12224 abort ();
12225 prefix_length += strlen (name) + 1;
12226 (*info->fprintf_func) (info->stream, "%s ", name);
12227 }
b844680a 12228
285ca992
L
12229 /* If the mandatory PREFIX_REPZ/PREFIX_REPNZ/PREFIX_DATA prefix is
12230 unused, opcode is invalid. Since the PREFIX_DATA prefix may be
12231 used by putop and MMX/SSE operand and may be overriden by the
12232 PREFIX_REPZ/PREFIX_REPNZ fix, we check the PREFIX_DATA prefix
12233 separately. */
3888916d 12234 if (dp->prefix_requirement == PREFIX_OPCODE
285ca992
L
12235 && dp != &bad_opcode
12236 && (((prefixes
12237 & (PREFIX_REPZ | PREFIX_REPNZ)) != 0
12238 && (used_prefixes
12239 & (PREFIX_REPZ | PREFIX_REPNZ)) == 0)
12240 || ((((prefixes
12241 & (PREFIX_REPZ | PREFIX_REPNZ | PREFIX_DATA))
12242 == PREFIX_DATA)
12243 && (used_prefixes & PREFIX_DATA) == 0))))
12244 {
12245 (*info->fprintf_func) (info->stream, "(bad)");
12246 return end_codep - priv.the_buffer;
12247 }
12248
f16cd0d5
L
12249 /* Check maximum code length. */
12250 if ((codep - start_codep) > MAX_CODE_LENGTH)
12251 {
12252 (*info->fprintf_func) (info->stream, "(bad)");
12253 return MAX_CODE_LENGTH;
12254 }
b844680a 12255
ea397f5b 12256 obufp = mnemonicendp;
f16cd0d5 12257 for (i = strlen (obuf) + prefix_length; i < 6; i++)
252b5132
RH
12258 oappend (" ");
12259 oappend (" ");
12260 (*info->fprintf_func) (info->stream, "%s", obuf);
12261
12262 /* The enter and bound instructions are printed with operands in the same
12263 order as the intel book; everything else is printed in reverse order. */
2da11e11 12264 if (intel_syntax || two_source_ops)
252b5132 12265 {
185b1163
L
12266 bfd_vma riprel;
12267
ce518a5f 12268 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 12269 op_txt[i] = op_out[i];
246c51aa 12270
3a8547d2
JB
12271 if (intel_syntax && dp && dp->op[2].rtn == OP_Rounding
12272 && dp->op[3].rtn == OP_E && dp->op[4].rtn == NULL)
12273 {
12274 op_txt[2] = op_out[3];
12275 op_txt[3] = op_out[2];
12276 }
12277
ce518a5f
L
12278 for (i = 0; i < (MAX_OPERANDS >> 1); ++i)
12279 {
6c067bbb
RM
12280 op_ad = op_index[i];
12281 op_index[i] = op_index[MAX_OPERANDS - 1 - i];
12282 op_index[MAX_OPERANDS - 1 - i] = op_ad;
185b1163
L
12283 riprel = op_riprel[i];
12284 op_riprel[i] = op_riprel [MAX_OPERANDS - 1 - i];
12285 op_riprel[MAX_OPERANDS - 1 - i] = riprel;
ce518a5f 12286 }
252b5132
RH
12287 }
12288 else
12289 {
ce518a5f 12290 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 12291 op_txt[MAX_OPERANDS - 1 - i] = op_out[i];
050dfa73
MM
12292 }
12293
ce518a5f
L
12294 needcomma = 0;
12295 for (i = 0; i < MAX_OPERANDS; ++i)
12296 if (*op_txt[i])
12297 {
12298 if (needcomma)
12299 (*info->fprintf_func) (info->stream, ",");
12300 if (op_index[i] != -1 && !op_riprel[i])
12301 (*info->print_address_func) ((bfd_vma) op_address[op_index[i]], info);
12302 else
12303 (*info->fprintf_func) (info->stream, "%s", op_txt[i]);
12304 needcomma = 1;
12305 }
050dfa73 12306
ce518a5f 12307 for (i = 0; i < MAX_OPERANDS; i++)
52b15da3
JH
12308 if (op_index[i] != -1 && op_riprel[i])
12309 {
12310 (*info->fprintf_func) (info->stream, " # ");
4fd7268a 12311 (*info->print_address_func) ((bfd_vma) (start_pc + (codep - start_codep)
52b15da3 12312 + op_address[op_index[i]]), info);
185b1163 12313 break;
52b15da3 12314 }
e396998b 12315 return codep - priv.the_buffer;
252b5132
RH
12316}
12317
6439fc28 12318static const char *float_mem[] = {
252b5132 12319 /* d8 */
7c52e0e8
L
12320 "fadd{s|}",
12321 "fmul{s|}",
12322 "fcom{s|}",
12323 "fcomp{s|}",
12324 "fsub{s|}",
12325 "fsubr{s|}",
12326 "fdiv{s|}",
12327 "fdivr{s|}",
db6eb5be 12328 /* d9 */
7c52e0e8 12329 "fld{s|}",
252b5132 12330 "(bad)",
7c52e0e8
L
12331 "fst{s|}",
12332 "fstp{s|}",
9306ca4a 12333 "fldenvIC",
252b5132 12334 "fldcw",
9306ca4a 12335 "fNstenvIC",
252b5132
RH
12336 "fNstcw",
12337 /* da */
7c52e0e8
L
12338 "fiadd{l|}",
12339 "fimul{l|}",
12340 "ficom{l|}",
12341 "ficomp{l|}",
12342 "fisub{l|}",
12343 "fisubr{l|}",
12344 "fidiv{l|}",
12345 "fidivr{l|}",
252b5132 12346 /* db */
7c52e0e8
L
12347 "fild{l|}",
12348 "fisttp{l|}",
12349 "fist{l|}",
12350 "fistp{l|}",
252b5132 12351 "(bad)",
6439fc28 12352 "fld{t||t|}",
252b5132 12353 "(bad)",
6439fc28 12354 "fstp{t||t|}",
252b5132 12355 /* dc */
7c52e0e8
L
12356 "fadd{l|}",
12357 "fmul{l|}",
12358 "fcom{l|}",
12359 "fcomp{l|}",
12360 "fsub{l|}",
12361 "fsubr{l|}",
12362 "fdiv{l|}",
12363 "fdivr{l|}",
252b5132 12364 /* dd */
7c52e0e8
L
12365 "fld{l|}",
12366 "fisttp{ll|}",
12367 "fst{l||}",
12368 "fstp{l|}",
9306ca4a 12369 "frstorIC",
252b5132 12370 "(bad)",
9306ca4a 12371 "fNsaveIC",
252b5132
RH
12372 "fNstsw",
12373 /* de */
ac465521
JB
12374 "fiadd{s|}",
12375 "fimul{s|}",
12376 "ficom{s|}",
12377 "ficomp{s|}",
12378 "fisub{s|}",
12379 "fisubr{s|}",
12380 "fidiv{s|}",
12381 "fidivr{s|}",
252b5132 12382 /* df */
ac465521
JB
12383 "fild{s|}",
12384 "fisttp{s|}",
12385 "fist{s|}",
12386 "fistp{s|}",
252b5132 12387 "fbld",
7c52e0e8 12388 "fild{ll|}",
252b5132 12389 "fbstp",
7c52e0e8 12390 "fistp{ll|}",
1d9f512f
AM
12391};
12392
12393static const unsigned char float_mem_mode[] = {
12394 /* d8 */
12395 d_mode,
12396 d_mode,
12397 d_mode,
12398 d_mode,
12399 d_mode,
12400 d_mode,
12401 d_mode,
12402 d_mode,
12403 /* d9 */
12404 d_mode,
12405 0,
12406 d_mode,
12407 d_mode,
12408 0,
12409 w_mode,
12410 0,
12411 w_mode,
12412 /* da */
12413 d_mode,
12414 d_mode,
12415 d_mode,
12416 d_mode,
12417 d_mode,
12418 d_mode,
12419 d_mode,
12420 d_mode,
12421 /* db */
12422 d_mode,
12423 d_mode,
12424 d_mode,
12425 d_mode,
12426 0,
9306ca4a 12427 t_mode,
1d9f512f 12428 0,
9306ca4a 12429 t_mode,
1d9f512f
AM
12430 /* dc */
12431 q_mode,
12432 q_mode,
12433 q_mode,
12434 q_mode,
12435 q_mode,
12436 q_mode,
12437 q_mode,
12438 q_mode,
12439 /* dd */
12440 q_mode,
12441 q_mode,
12442 q_mode,
12443 q_mode,
12444 0,
12445 0,
12446 0,
12447 w_mode,
12448 /* de */
12449 w_mode,
12450 w_mode,
12451 w_mode,
12452 w_mode,
12453 w_mode,
12454 w_mode,
12455 w_mode,
12456 w_mode,
12457 /* df */
12458 w_mode,
12459 w_mode,
12460 w_mode,
12461 w_mode,
9306ca4a 12462 t_mode,
1d9f512f 12463 q_mode,
9306ca4a 12464 t_mode,
1d9f512f 12465 q_mode
252b5132
RH
12466};
12467
ce518a5f
L
12468#define ST { OP_ST, 0 }
12469#define STi { OP_STi, 0 }
252b5132 12470
48c97fa1
L
12471#define FGRPd9_2 NULL, { { NULL, 1 } }, 0
12472#define FGRPd9_4 NULL, { { NULL, 2 } }, 0
12473#define FGRPd9_5 NULL, { { NULL, 3 } }, 0
12474#define FGRPd9_6 NULL, { { NULL, 4 } }, 0
12475#define FGRPd9_7 NULL, { { NULL, 5 } }, 0
12476#define FGRPda_5 NULL, { { NULL, 6 } }, 0
12477#define FGRPdb_4 NULL, { { NULL, 7 } }, 0
12478#define FGRPde_3 NULL, { { NULL, 8 } }, 0
12479#define FGRPdf_4 NULL, { { NULL, 9 } }, 0
252b5132 12480
2da11e11 12481static const struct dis386 float_reg[][8] = {
252b5132
RH
12482 /* d8 */
12483 {
bf890a93
IT
12484 { "fadd", { ST, STi }, 0 },
12485 { "fmul", { ST, STi }, 0 },
12486 { "fcom", { STi }, 0 },
12487 { "fcomp", { STi }, 0 },
12488 { "fsub", { ST, STi }, 0 },
12489 { "fsubr", { ST, STi }, 0 },
12490 { "fdiv", { ST, STi }, 0 },
12491 { "fdivr", { ST, STi }, 0 },
252b5132
RH
12492 },
12493 /* d9 */
12494 {
bf890a93
IT
12495 { "fld", { STi }, 0 },
12496 { "fxch", { STi }, 0 },
252b5132 12497 { FGRPd9_2 },
592d1631 12498 { Bad_Opcode },
252b5132
RH
12499 { FGRPd9_4 },
12500 { FGRPd9_5 },
12501 { FGRPd9_6 },
12502 { FGRPd9_7 },
12503 },
12504 /* da */
12505 {
bf890a93
IT
12506 { "fcmovb", { ST, STi }, 0 },
12507 { "fcmove", { ST, STi }, 0 },
12508 { "fcmovbe",{ ST, STi }, 0 },
12509 { "fcmovu", { ST, STi }, 0 },
592d1631 12510 { Bad_Opcode },
252b5132 12511 { FGRPda_5 },
592d1631
L
12512 { Bad_Opcode },
12513 { Bad_Opcode },
252b5132
RH
12514 },
12515 /* db */
12516 {
bf890a93
IT
12517 { "fcmovnb",{ ST, STi }, 0 },
12518 { "fcmovne",{ ST, STi }, 0 },
12519 { "fcmovnbe",{ ST, STi }, 0 },
12520 { "fcmovnu",{ ST, STi }, 0 },
252b5132 12521 { FGRPdb_4 },
bf890a93
IT
12522 { "fucomi", { ST, STi }, 0 },
12523 { "fcomi", { ST, STi }, 0 },
592d1631 12524 { Bad_Opcode },
252b5132
RH
12525 },
12526 /* dc */
12527 {
bf890a93
IT
12528 { "fadd", { STi, ST }, 0 },
12529 { "fmul", { STi, ST }, 0 },
592d1631
L
12530 { Bad_Opcode },
12531 { Bad_Opcode },
d53e6b98
JB
12532 { "fsub{!M|r}", { STi, ST }, 0 },
12533 { "fsub{M|}", { STi, ST }, 0 },
12534 { "fdiv{!M|r}", { STi, ST }, 0 },
12535 { "fdiv{M|}", { STi, ST }, 0 },
252b5132
RH
12536 },
12537 /* dd */
12538 {
bf890a93 12539 { "ffree", { STi }, 0 },
592d1631 12540 { Bad_Opcode },
bf890a93
IT
12541 { "fst", { STi }, 0 },
12542 { "fstp", { STi }, 0 },
12543 { "fucom", { STi }, 0 },
12544 { "fucomp", { STi }, 0 },
592d1631
L
12545 { Bad_Opcode },
12546 { Bad_Opcode },
252b5132
RH
12547 },
12548 /* de */
12549 {
bf890a93
IT
12550 { "faddp", { STi, ST }, 0 },
12551 { "fmulp", { STi, ST }, 0 },
592d1631 12552 { Bad_Opcode },
252b5132 12553 { FGRPde_3 },
d53e6b98
JB
12554 { "fsub{!M|r}p", { STi, ST }, 0 },
12555 { "fsub{M|}p", { STi, ST }, 0 },
12556 { "fdiv{!M|r}p", { STi, ST }, 0 },
12557 { "fdiv{M|}p", { STi, ST }, 0 },
252b5132
RH
12558 },
12559 /* df */
12560 {
bf890a93 12561 { "ffreep", { STi }, 0 },
592d1631
L
12562 { Bad_Opcode },
12563 { Bad_Opcode },
12564 { Bad_Opcode },
252b5132 12565 { FGRPdf_4 },
bf890a93
IT
12566 { "fucomip", { ST, STi }, 0 },
12567 { "fcomip", { ST, STi }, 0 },
592d1631 12568 { Bad_Opcode },
252b5132
RH
12569 },
12570};
12571
252b5132 12572static char *fgrps[][8] = {
48c97fa1
L
12573 /* Bad opcode 0 */
12574 {
12575 "(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12576 },
12577
12578 /* d9_2 1 */
252b5132
RH
12579 {
12580 "fnop","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12581 },
12582
48c97fa1 12583 /* d9_4 2 */
252b5132
RH
12584 {
12585 "fchs","fabs","(bad)","(bad)","ftst","fxam","(bad)","(bad)",
12586 },
12587
48c97fa1 12588 /* d9_5 3 */
252b5132
RH
12589 {
12590 "fld1","fldl2t","fldl2e","fldpi","fldlg2","fldln2","fldz","(bad)",
12591 },
12592
48c97fa1 12593 /* d9_6 4 */
252b5132
RH
12594 {
12595 "f2xm1","fyl2x","fptan","fpatan","fxtract","fprem1","fdecstp","fincstp",
12596 },
12597
48c97fa1 12598 /* d9_7 5 */
252b5132
RH
12599 {
12600 "fprem","fyl2xp1","fsqrt","fsincos","frndint","fscale","fsin","fcos",
12601 },
12602
48c97fa1 12603 /* da_5 6 */
252b5132
RH
12604 {
12605 "(bad)","fucompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12606 },
12607
48c97fa1 12608 /* db_4 7 */
252b5132 12609 {
309d3373
JB
12610 "fNeni(8087 only)","fNdisi(8087 only)","fNclex","fNinit",
12611 "fNsetpm(287 only)","frstpm(287 only)","(bad)","(bad)",
252b5132
RH
12612 },
12613
48c97fa1 12614 /* de_3 8 */
252b5132
RH
12615 {
12616 "(bad)","fcompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12617 },
12618
48c97fa1 12619 /* df_4 9 */
252b5132
RH
12620 {
12621 "fNstsw","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12622 },
12623};
12624
b6169b20
L
12625static void
12626swap_operand (void)
12627{
12628 mnemonicendp[0] = '.';
12629 mnemonicendp[1] = 's';
12630 mnemonicendp += 2;
12631}
12632
b844680a
L
12633static void
12634OP_Skip_MODRM (int bytemode ATTRIBUTE_UNUSED,
12635 int sizeflag ATTRIBUTE_UNUSED)
12636{
12637 /* Skip mod/rm byte. */
12638 MODRM_CHECK;
12639 codep++;
12640}
12641
252b5132 12642static void
26ca5450 12643dofloat (int sizeflag)
252b5132 12644{
2da11e11 12645 const struct dis386 *dp;
252b5132
RH
12646 unsigned char floatop;
12647
12648 floatop = codep[-1];
12649
7967e09e 12650 if (modrm.mod != 3)
252b5132 12651 {
7967e09e 12652 int fp_indx = (floatop - 0xd8) * 8 + modrm.reg;
1d9f512f
AM
12653
12654 putop (float_mem[fp_indx], sizeflag);
ce518a5f 12655 obufp = op_out[0];
6e50d963 12656 op_ad = 2;
1d9f512f 12657 OP_E (float_mem_mode[fp_indx], sizeflag);
252b5132
RH
12658 return;
12659 }
6608db57 12660 /* Skip mod/rm byte. */
4bba6815 12661 MODRM_CHECK;
252b5132
RH
12662 codep++;
12663
7967e09e 12664 dp = &float_reg[floatop - 0xd8][modrm.reg];
252b5132
RH
12665 if (dp->name == NULL)
12666 {
7967e09e 12667 putop (fgrps[dp->op[0].bytemode][modrm.rm], sizeflag);
252b5132 12668
6608db57 12669 /* Instruction fnstsw is only one with strange arg. */
252b5132 12670 if (floatop == 0xdf && codep[-1] == 0xe0)
ce518a5f 12671 strcpy (op_out[0], names16[0]);
252b5132
RH
12672 }
12673 else
12674 {
12675 putop (dp->name, sizeflag);
12676
ce518a5f 12677 obufp = op_out[0];
6e50d963 12678 op_ad = 2;
ce518a5f
L
12679 if (dp->op[0].rtn)
12680 (*dp->op[0].rtn) (dp->op[0].bytemode, sizeflag);
6e50d963 12681
ce518a5f 12682 obufp = op_out[1];
6e50d963 12683 op_ad = 1;
ce518a5f
L
12684 if (dp->op[1].rtn)
12685 (*dp->op[1].rtn) (dp->op[1].bytemode, sizeflag);
252b5132
RH
12686 }
12687}
12688
9ce09ba2
RM
12689/* Like oappend (below), but S is a string starting with '%'.
12690 In Intel syntax, the '%' is elided. */
12691static void
12692oappend_maybe_intel (const char *s)
12693{
12694 oappend (s + intel_syntax);
12695}
12696
252b5132 12697static void
26ca5450 12698OP_ST (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 12699{
9ce09ba2 12700 oappend_maybe_intel ("%st");
252b5132
RH
12701}
12702
252b5132 12703static void
26ca5450 12704OP_STi (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 12705{
7967e09e 12706 sprintf (scratchbuf, "%%st(%d)", modrm.rm);
9ce09ba2 12707 oappend_maybe_intel (scratchbuf);
252b5132
RH
12708}
12709
6608db57 12710/* Capital letters in template are macros. */
6439fc28 12711static int
d3ce72d0 12712putop (const char *in_template, int sizeflag)
252b5132 12713{
2da11e11 12714 const char *p;
9306ca4a 12715 int alt = 0;
9d141669 12716 int cond = 1;
98b528ac
L
12717 unsigned int l = 0, len = 1;
12718 char last[4];
12719
12720#define SAVE_LAST(c) \
12721 if (l < len && l < sizeof (last)) \
12722 last[l++] = c; \
12723 else \
12724 abort ();
252b5132 12725
d3ce72d0 12726 for (p = in_template; *p; p++)
252b5132
RH
12727 {
12728 switch (*p)
12729 {
12730 default:
12731 *obufp++ = *p;
12732 break;
98b528ac
L
12733 case '%':
12734 len++;
12735 break;
9d141669
L
12736 case '!':
12737 cond = 0;
12738 break;
6439fc28 12739 case '{':
6439fc28 12740 if (intel_syntax)
6439fc28
AM
12741 {
12742 while (*++p != '|')
7c52e0e8
L
12743 if (*p == '}' || *p == '\0')
12744 abort ();
6439fc28 12745 }
9306ca4a
JB
12746 /* Fall through. */
12747 case 'I':
12748 alt = 1;
12749 continue;
6439fc28
AM
12750 case '|':
12751 while (*++p != '}')
12752 {
12753 if (*p == '\0')
12754 abort ();
12755 }
12756 break;
12757 case '}':
12758 break;
252b5132 12759 case 'A':
db6eb5be
AM
12760 if (intel_syntax)
12761 break;
7967e09e 12762 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
252b5132
RH
12763 *obufp++ = 'b';
12764 break;
12765 case 'B':
4b06377f
L
12766 if (l == 0 && len == 1)
12767 {
12768case_B:
12769 if (intel_syntax)
12770 break;
12771 if (sizeflag & SUFFIX_ALWAYS)
12772 *obufp++ = 'b';
12773 }
12774 else
12775 {
12776 if (l != 1
12777 || len != 2
12778 || last[0] != 'L')
12779 {
12780 SAVE_LAST (*p);
12781 break;
12782 }
12783
12784 if (address_mode == mode_64bit
12785 && !(prefixes & PREFIX_ADDR))
12786 {
12787 *obufp++ = 'a';
12788 *obufp++ = 'b';
12789 *obufp++ = 's';
12790 }
12791
12792 goto case_B;
12793 }
252b5132 12794 break;
9306ca4a
JB
12795 case 'C':
12796 if (intel_syntax && !alt)
12797 break;
12798 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
12799 {
12800 if (sizeflag & DFLAG)
12801 *obufp++ = intel_syntax ? 'd' : 'l';
12802 else
12803 *obufp++ = intel_syntax ? 'w' : 's';
12804 used_prefixes |= (prefixes & PREFIX_DATA);
12805 }
12806 break;
ed7841b3
JB
12807 case 'D':
12808 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
12809 break;
161a04f6 12810 USED_REX (REX_W);
7967e09e 12811 if (modrm.mod == 3)
ed7841b3 12812 {
161a04f6 12813 if (rex & REX_W)
ed7841b3 12814 *obufp++ = 'q';
ed7841b3 12815 else
f16cd0d5
L
12816 {
12817 if (sizeflag & DFLAG)
12818 *obufp++ = intel_syntax ? 'd' : 'l';
12819 else
12820 *obufp++ = 'w';
12821 used_prefixes |= (prefixes & PREFIX_DATA);
12822 }
ed7841b3
JB
12823 }
12824 else
12825 *obufp++ = 'w';
12826 break;
252b5132 12827 case 'E': /* For jcxz/jecxz */
cb712a9e 12828 if (address_mode == mode_64bit)
c1a64871
JH
12829 {
12830 if (sizeflag & AFLAG)
12831 *obufp++ = 'r';
12832 else
12833 *obufp++ = 'e';
12834 }
12835 else
12836 if (sizeflag & AFLAG)
12837 *obufp++ = 'e';
3ffd33cf
AM
12838 used_prefixes |= (prefixes & PREFIX_ADDR);
12839 break;
12840 case 'F':
db6eb5be
AM
12841 if (intel_syntax)
12842 break;
e396998b 12843 if ((prefixes & PREFIX_ADDR) || (sizeflag & SUFFIX_ALWAYS))
3ffd33cf
AM
12844 {
12845 if (sizeflag & AFLAG)
cb712a9e 12846 *obufp++ = address_mode == mode_64bit ? 'q' : 'l';
3ffd33cf 12847 else
cb712a9e 12848 *obufp++ = address_mode == mode_64bit ? 'l' : 'w';
3ffd33cf
AM
12849 used_prefixes |= (prefixes & PREFIX_ADDR);
12850 }
252b5132 12851 break;
52fd6d94
JB
12852 case 'G':
12853 if (intel_syntax || (obufp[-1] != 's' && !(sizeflag & SUFFIX_ALWAYS)))
12854 break;
161a04f6 12855 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
12856 *obufp++ = 'l';
12857 else
12858 *obufp++ = 'w';
161a04f6 12859 if (!(rex & REX_W))
52fd6d94
JB
12860 used_prefixes |= (prefixes & PREFIX_DATA);
12861 break;
5dd0794d 12862 case 'H':
db6eb5be
AM
12863 if (intel_syntax)
12864 break;
5dd0794d
AM
12865 if ((prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_CS
12866 || (prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_DS)
12867 {
12868 used_prefixes |= prefixes & (PREFIX_CS | PREFIX_DS);
12869 *obufp++ = ',';
12870 *obufp++ = 'p';
12871 if (prefixes & PREFIX_DS)
12872 *obufp++ = 't';
12873 else
12874 *obufp++ = 'n';
12875 }
12876 break;
9306ca4a
JB
12877 case 'J':
12878 if (intel_syntax)
12879 break;
12880 *obufp++ = 'l';
12881 break;
42903f7f
L
12882 case 'K':
12883 USED_REX (REX_W);
12884 if (rex & REX_W)
12885 *obufp++ = 'q';
12886 else
12887 *obufp++ = 'd';
12888 break;
6dd5059a 12889 case 'Z':
04d824a4
JB
12890 if (l != 0 || len != 1)
12891 {
12892 if (l != 1 || len != 2 || last[0] != 'X')
12893 {
12894 SAVE_LAST (*p);
12895 break;
12896 }
12897 if (!need_vex || !vex.evex)
12898 abort ();
12899 if (intel_syntax
12900 || ((modrm.mod == 3 || vex.b) && !(sizeflag & SUFFIX_ALWAYS)))
12901 break;
12902 switch (vex.length)
12903 {
12904 case 128:
12905 *obufp++ = 'x';
12906 break;
12907 case 256:
12908 *obufp++ = 'y';
12909 break;
12910 case 512:
12911 *obufp++ = 'z';
12912 break;
12913 default:
12914 abort ();
12915 }
12916 break;
12917 }
6dd5059a
L
12918 if (intel_syntax)
12919 break;
12920 if (address_mode == mode_64bit && (sizeflag & SUFFIX_ALWAYS))
12921 {
12922 *obufp++ = 'q';
12923 break;
12924 }
12925 /* Fall through. */
98b528ac 12926 goto case_L;
252b5132 12927 case 'L':
98b528ac
L
12928 if (l != 0 || len != 1)
12929 {
12930 SAVE_LAST (*p);
12931 break;
12932 }
12933case_L:
db6eb5be
AM
12934 if (intel_syntax)
12935 break;
252b5132
RH
12936 if (sizeflag & SUFFIX_ALWAYS)
12937 *obufp++ = 'l';
252b5132 12938 break;
9d141669
L
12939 case 'M':
12940 if (intel_mnemonic != cond)
12941 *obufp++ = 'r';
12942 break;
252b5132
RH
12943 case 'N':
12944 if ((prefixes & PREFIX_FWAIT) == 0)
12945 *obufp++ = 'n';
7d421014
ILT
12946 else
12947 used_prefixes |= PREFIX_FWAIT;
252b5132 12948 break;
52b15da3 12949 case 'O':
161a04f6
L
12950 USED_REX (REX_W);
12951 if (rex & REX_W)
6439fc28 12952 *obufp++ = 'o';
a35ca55a
JB
12953 else if (intel_syntax && (sizeflag & DFLAG))
12954 *obufp++ = 'q';
52b15da3
JH
12955 else
12956 *obufp++ = 'd';
161a04f6 12957 if (!(rex & REX_W))
a35ca55a 12958 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 12959 break;
07f5af7d
L
12960 case '&':
12961 if (!intel_syntax
12962 && address_mode == mode_64bit
12963 && isa64 == intel64)
12964 {
12965 *obufp++ = 'q';
12966 break;
12967 }
12968 /* Fall through. */
6439fc28 12969 case 'T':
d9e3625e
L
12970 if (!intel_syntax
12971 && address_mode == mode_64bit
7bb15c6f 12972 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
12973 {
12974 *obufp++ = 'q';
12975 break;
12976 }
6608db57 12977 /* Fall through. */
4b4c407a 12978 goto case_P;
252b5132 12979 case 'P':
4b4c407a 12980 if (l == 0 && len == 1)
d9e3625e 12981 {
4b4c407a
L
12982case_P:
12983 if (intel_syntax)
d9e3625e 12984 {
4b4c407a
L
12985 if ((rex & REX_W) == 0
12986 && (prefixes & PREFIX_DATA))
12987 {
12988 if ((sizeflag & DFLAG) == 0)
12989 *obufp++ = 'w';
12990 used_prefixes |= (prefixes & PREFIX_DATA);
12991 }
12992 break;
12993 }
12994 if ((prefixes & PREFIX_DATA)
12995 || (rex & REX_W)
12996 || (sizeflag & SUFFIX_ALWAYS))
12997 {
12998 USED_REX (REX_W);
12999 if (rex & REX_W)
13000 *obufp++ = 'q';
13001 else
13002 {
13003 if (sizeflag & DFLAG)
13004 *obufp++ = 'l';
13005 else
13006 *obufp++ = 'w';
13007 used_prefixes |= (prefixes & PREFIX_DATA);
13008 }
d9e3625e 13009 }
d9e3625e 13010 }
4b4c407a 13011 else
252b5132 13012 {
4b4c407a
L
13013 if (l != 1 || len != 2 || last[0] != 'L')
13014 {
13015 SAVE_LAST (*p);
13016 break;
13017 }
13018
13019 if ((prefixes & PREFIX_DATA)
13020 || (rex & REX_W)
13021 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 13022 {
4b4c407a
L
13023 USED_REX (REX_W);
13024 if (rex & REX_W)
13025 *obufp++ = 'q';
13026 else
13027 {
13028 if (sizeflag & DFLAG)
13029 *obufp++ = intel_syntax ? 'd' : 'l';
13030 else
13031 *obufp++ = 'w';
13032 used_prefixes |= (prefixes & PREFIX_DATA);
13033 }
52b15da3 13034 }
252b5132
RH
13035 }
13036 break;
6439fc28 13037 case 'U':
db6eb5be
AM
13038 if (intel_syntax)
13039 break;
7bb15c6f 13040 if (address_mode == mode_64bit
6c067bbb 13041 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28 13042 {
7967e09e 13043 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
1a114b12 13044 *obufp++ = 'q';
6439fc28
AM
13045 break;
13046 }
6608db57 13047 /* Fall through. */
98b528ac 13048 goto case_Q;
252b5132 13049 case 'Q':
98b528ac 13050 if (l == 0 && len == 1)
252b5132 13051 {
98b528ac
L
13052case_Q:
13053 if (intel_syntax && !alt)
13054 break;
13055 USED_REX (REX_W);
13056 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 13057 {
98b528ac
L
13058 if (rex & REX_W)
13059 *obufp++ = 'q';
52b15da3 13060 else
98b528ac
L
13061 {
13062 if (sizeflag & DFLAG)
13063 *obufp++ = intel_syntax ? 'd' : 'l';
13064 else
13065 *obufp++ = 'w';
f16cd0d5 13066 used_prefixes |= (prefixes & PREFIX_DATA);
98b528ac 13067 }
52b15da3 13068 }
98b528ac
L
13069 }
13070 else
13071 {
13072 if (l != 1 || len != 2 || last[0] != 'L')
13073 {
13074 SAVE_LAST (*p);
13075 break;
13076 }
13077 if (intel_syntax
13078 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
13079 break;
13080 if ((rex & REX_W))
13081 {
13082 USED_REX (REX_W);
13083 *obufp++ = 'q';
13084 }
13085 else
13086 *obufp++ = 'l';
252b5132
RH
13087 }
13088 break;
13089 case 'R':
161a04f6
L
13090 USED_REX (REX_W);
13091 if (rex & REX_W)
a35ca55a
JB
13092 *obufp++ = 'q';
13093 else if (sizeflag & DFLAG)
c608c12e 13094 {
a35ca55a 13095 if (intel_syntax)
c608c12e 13096 *obufp++ = 'd';
c608c12e 13097 else
a35ca55a 13098 *obufp++ = 'l';
c608c12e 13099 }
252b5132 13100 else
a35ca55a
JB
13101 *obufp++ = 'w';
13102 if (intel_syntax && !p[1]
161a04f6 13103 && ((rex & REX_W) || (sizeflag & DFLAG)))
a35ca55a 13104 *obufp++ = 'e';
161a04f6 13105 if (!(rex & REX_W))
52b15da3 13106 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132 13107 break;
1a114b12 13108 case 'V':
4b06377f 13109 if (l == 0 && len == 1)
1a114b12 13110 {
4b06377f
L
13111 if (intel_syntax)
13112 break;
7bb15c6f 13113 if (address_mode == mode_64bit
6c067bbb 13114 && ((sizeflag & DFLAG) || (rex & REX_W)))
4b06377f
L
13115 {
13116 if (sizeflag & SUFFIX_ALWAYS)
13117 *obufp++ = 'q';
13118 break;
13119 }
13120 }
13121 else
13122 {
13123 if (l != 1
13124 || len != 2
13125 || last[0] != 'L')
13126 {
13127 SAVE_LAST (*p);
13128 break;
13129 }
13130
13131 if (rex & REX_W)
13132 {
13133 *obufp++ = 'a';
13134 *obufp++ = 'b';
13135 *obufp++ = 's';
13136 }
1a114b12
JB
13137 }
13138 /* Fall through. */
4b06377f 13139 goto case_S;
252b5132 13140 case 'S':
4b06377f 13141 if (l == 0 && len == 1)
252b5132 13142 {
4b06377f
L
13143case_S:
13144 if (intel_syntax)
13145 break;
13146 if (sizeflag & SUFFIX_ALWAYS)
52b15da3 13147 {
4b06377f
L
13148 if (rex & REX_W)
13149 *obufp++ = 'q';
52b15da3 13150 else
4b06377f
L
13151 {
13152 if (sizeflag & DFLAG)
13153 *obufp++ = 'l';
13154 else
13155 *obufp++ = 'w';
13156 used_prefixes |= (prefixes & PREFIX_DATA);
13157 }
13158 }
13159 }
13160 else
13161 {
13162 if (l != 1
13163 || len != 2
13164 || last[0] != 'L')
13165 {
13166 SAVE_LAST (*p);
13167 break;
52b15da3 13168 }
4b06377f
L
13169
13170 if (address_mode == mode_64bit
13171 && !(prefixes & PREFIX_ADDR))
13172 {
13173 *obufp++ = 'a';
13174 *obufp++ = 'b';
13175 *obufp++ = 's';
13176 }
13177
13178 goto case_S;
252b5132 13179 }
252b5132 13180 break;
041bd2e0 13181 case 'X':
c0f3af97
L
13182 if (l != 0 || len != 1)
13183 {
13184 SAVE_LAST (*p);
13185 break;
13186 }
13187 if (need_vex && vex.prefix)
13188 {
13189 if (vex.prefix == DATA_PREFIX_OPCODE)
13190 *obufp++ = 'd';
13191 else
13192 *obufp++ = 's';
13193 }
041bd2e0 13194 else
f16cd0d5
L
13195 {
13196 if (prefixes & PREFIX_DATA)
13197 *obufp++ = 'd';
13198 else
13199 *obufp++ = 's';
13200 used_prefixes |= (prefixes & PREFIX_DATA);
13201 }
041bd2e0 13202 break;
76f227a5 13203 case 'Y':
c0f3af97 13204 if (l == 0 && len == 1)
9646c87b 13205 abort ();
c0f3af97
L
13206 else
13207 {
13208 if (l != 1 || len != 2 || last[0] != 'X')
13209 {
13210 SAVE_LAST (*p);
13211 break;
13212 }
13213 if (!need_vex)
13214 abort ();
13215 if (intel_syntax
04d824a4 13216 || ((modrm.mod == 3 || vex.b) && !(sizeflag & SUFFIX_ALWAYS)))
c0f3af97
L
13217 break;
13218 switch (vex.length)
13219 {
13220 case 128:
13221 *obufp++ = 'x';
13222 break;
13223 case 256:
13224 *obufp++ = 'y';
13225 break;
04d824a4
JB
13226 case 512:
13227 if (!vex.evex)
c0f3af97 13228 default:
04d824a4 13229 abort ();
c0f3af97 13230 }
76f227a5
JH
13231 }
13232 break;
252b5132 13233 case 'W':
0bfee649 13234 if (l == 0 && len == 1)
a35ca55a 13235 {
0bfee649
L
13236 /* operand size flag for cwtl, cbtw */
13237 USED_REX (REX_W);
13238 if (rex & REX_W)
13239 {
13240 if (intel_syntax)
13241 *obufp++ = 'd';
13242 else
13243 *obufp++ = 'l';
13244 }
13245 else if (sizeflag & DFLAG)
13246 *obufp++ = 'w';
a35ca55a 13247 else
0bfee649
L
13248 *obufp++ = 'b';
13249 if (!(rex & REX_W))
13250 used_prefixes |= (prefixes & PREFIX_DATA);
a35ca55a 13251 }
252b5132 13252 else
0bfee649 13253 {
6c30d220
L
13254 if (l != 1
13255 || len != 2
13256 || (last[0] != 'X'
13257 && last[0] != 'L'))
0bfee649
L
13258 {
13259 SAVE_LAST (*p);
13260 break;
13261 }
13262 if (!need_vex)
13263 abort ();
6c30d220
L
13264 if (last[0] == 'X')
13265 *obufp++ = vex.w ? 'd': 's';
13266 else
13267 *obufp++ = vex.w ? 'q': 'd';
0bfee649 13268 }
252b5132 13269 break;
a72d2af2
L
13270 case '^':
13271 if (intel_syntax)
13272 break;
13273 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
13274 {
13275 if (sizeflag & DFLAG)
13276 *obufp++ = 'l';
13277 else
13278 *obufp++ = 'w';
13279 used_prefixes |= (prefixes & PREFIX_DATA);
13280 }
13281 break;
5db04b09
L
13282 case '@':
13283 if (intel_syntax)
13284 break;
13285 if (address_mode == mode_64bit
13286 && (isa64 == intel64
13287 || ((sizeflag & DFLAG) || (rex & REX_W))))
13288 *obufp++ = 'q';
13289 else if ((prefixes & PREFIX_DATA))
13290 {
13291 if (!(sizeflag & DFLAG))
13292 *obufp++ = 'w';
13293 used_prefixes |= (prefixes & PREFIX_DATA);
13294 }
13295 break;
252b5132 13296 }
9306ca4a 13297 alt = 0;
252b5132
RH
13298 }
13299 *obufp = 0;
ea397f5b 13300 mnemonicendp = obufp;
6439fc28 13301 return 0;
252b5132
RH
13302}
13303
13304static void
26ca5450 13305oappend (const char *s)
252b5132 13306{
ea397f5b 13307 obufp = stpcpy (obufp, s);
252b5132
RH
13308}
13309
13310static void
26ca5450 13311append_seg (void)
252b5132 13312{
285ca992
L
13313 /* Only print the active segment register. */
13314 if (!active_seg_prefix)
13315 return;
13316
13317 used_prefixes |= active_seg_prefix;
13318 switch (active_seg_prefix)
7d421014 13319 {
285ca992 13320 case PREFIX_CS:
9ce09ba2 13321 oappend_maybe_intel ("%cs:");
285ca992
L
13322 break;
13323 case PREFIX_DS:
9ce09ba2 13324 oappend_maybe_intel ("%ds:");
285ca992
L
13325 break;
13326 case PREFIX_SS:
9ce09ba2 13327 oappend_maybe_intel ("%ss:");
285ca992
L
13328 break;
13329 case PREFIX_ES:
9ce09ba2 13330 oappend_maybe_intel ("%es:");
285ca992
L
13331 break;
13332 case PREFIX_FS:
9ce09ba2 13333 oappend_maybe_intel ("%fs:");
285ca992
L
13334 break;
13335 case PREFIX_GS:
9ce09ba2 13336 oappend_maybe_intel ("%gs:");
285ca992
L
13337 break;
13338 default:
13339 break;
7d421014 13340 }
252b5132
RH
13341}
13342
13343static void
26ca5450 13344OP_indirE (int bytemode, int sizeflag)
252b5132
RH
13345{
13346 if (!intel_syntax)
13347 oappend ("*");
13348 OP_E (bytemode, sizeflag);
13349}
13350
52b15da3 13351static void
26ca5450 13352print_operand_value (char *buf, int hex, bfd_vma disp)
52b15da3 13353{
cb712a9e 13354 if (address_mode == mode_64bit)
52b15da3
JH
13355 {
13356 if (hex)
13357 {
13358 char tmp[30];
13359 int i;
13360 buf[0] = '0';
13361 buf[1] = 'x';
13362 sprintf_vma (tmp, disp);
6608db57 13363 for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++);
52b15da3
JH
13364 strcpy (buf + 2, tmp + i);
13365 }
13366 else
13367 {
13368 bfd_signed_vma v = disp;
13369 char tmp[30];
13370 int i;
13371 if (v < 0)
13372 {
13373 *(buf++) = '-';
13374 v = -disp;
6608db57 13375 /* Check for possible overflow on 0x8000000000000000. */
52b15da3
JH
13376 if (v < 0)
13377 {
13378 strcpy (buf, "9223372036854775808");
13379 return;
13380 }
13381 }
13382 if (!v)
13383 {
13384 strcpy (buf, "0");
13385 return;
13386 }
13387
13388 i = 0;
13389 tmp[29] = 0;
13390 while (v)
13391 {
6608db57 13392 tmp[28 - i] = (v % 10) + '0';
52b15da3
JH
13393 v /= 10;
13394 i++;
13395 }
13396 strcpy (buf, tmp + 29 - i);
13397 }
13398 }
13399 else
13400 {
13401 if (hex)
13402 sprintf (buf, "0x%x", (unsigned int) disp);
13403 else
13404 sprintf (buf, "%d", (int) disp);
13405 }
13406}
13407
5d669648
L
13408/* Put DISP in BUF as signed hex number. */
13409
13410static void
13411print_displacement (char *buf, bfd_vma disp)
13412{
13413 bfd_signed_vma val = disp;
13414 char tmp[30];
13415 int i, j = 0;
13416
13417 if (val < 0)
13418 {
13419 buf[j++] = '-';
13420 val = -disp;
13421
13422 /* Check for possible overflow. */
13423 if (val < 0)
13424 {
13425 switch (address_mode)
13426 {
13427 case mode_64bit:
13428 strcpy (buf + j, "0x8000000000000000");
13429 break;
13430 case mode_32bit:
13431 strcpy (buf + j, "0x80000000");
13432 break;
13433 case mode_16bit:
13434 strcpy (buf + j, "0x8000");
13435 break;
13436 }
13437 return;
13438 }
13439 }
13440
13441 buf[j++] = '0';
13442 buf[j++] = 'x';
13443
0af1713e 13444 sprintf_vma (tmp, (bfd_vma) val);
5d669648
L
13445 for (i = 0; tmp[i] == '0'; i++)
13446 continue;
13447 if (tmp[i] == '\0')
13448 i--;
13449 strcpy (buf + j, tmp + i);
13450}
13451
3f31e633
JB
13452static void
13453intel_operand_size (int bytemode, int sizeflag)
13454{
43234a1e
L
13455 if (vex.evex
13456 && vex.b
13457 && (bytemode == x_mode
13458 || bytemode == evex_half_bcst_xmmq_mode))
13459 {
13460 if (vex.w)
13461 oappend ("QWORD PTR ");
13462 else
13463 oappend ("DWORD PTR ");
13464 return;
13465 }
3f31e633
JB
13466 switch (bytemode)
13467 {
13468 case b_mode:
b6169b20 13469 case b_swap_mode:
42903f7f 13470 case dqb_mode:
1ba585e8 13471 case db_mode:
3f31e633
JB
13472 oappend ("BYTE PTR ");
13473 break;
13474 case w_mode:
1ba585e8 13475 case dw_mode:
3f31e633
JB
13476 case dqw_mode:
13477 oappend ("WORD PTR ");
13478 break;
07f5af7d
L
13479 case indir_v_mode:
13480 if (address_mode == mode_64bit && isa64 == intel64)
13481 {
13482 oappend ("QWORD PTR ");
13483 break;
13484 }
1a0670f3 13485 /* Fall through. */
1a114b12 13486 case stack_v_mode:
7bb15c6f 13487 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
3f31e633
JB
13488 {
13489 oappend ("QWORD PTR ");
3f31e633
JB
13490 break;
13491 }
1a0670f3 13492 /* Fall through. */
3f31e633 13493 case v_mode:
b6169b20 13494 case v_swap_mode:
3f31e633 13495 case dq_mode:
161a04f6
L
13496 USED_REX (REX_W);
13497 if (rex & REX_W)
3f31e633 13498 oappend ("QWORD PTR ");
3f31e633 13499 else
f16cd0d5
L
13500 {
13501 if ((sizeflag & DFLAG) || bytemode == dq_mode)
13502 oappend ("DWORD PTR ");
13503 else
13504 oappend ("WORD PTR ");
13505 used_prefixes |= (prefixes & PREFIX_DATA);
13506 }
3f31e633 13507 break;
52fd6d94 13508 case z_mode:
161a04f6 13509 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
13510 *obufp++ = 'D';
13511 oappend ("WORD PTR ");
161a04f6 13512 if (!(rex & REX_W))
52fd6d94
JB
13513 used_prefixes |= (prefixes & PREFIX_DATA);
13514 break;
34b772a6
JB
13515 case a_mode:
13516 if (sizeflag & DFLAG)
13517 oappend ("QWORD PTR ");
13518 else
13519 oappend ("DWORD PTR ");
13520 used_prefixes |= (prefixes & PREFIX_DATA);
13521 break;
3f31e633 13522 case d_mode:
539f890d
L
13523 case d_scalar_mode:
13524 case d_scalar_swap_mode:
fa99fab2 13525 case d_swap_mode:
42903f7f 13526 case dqd_mode:
3f31e633
JB
13527 oappend ("DWORD PTR ");
13528 break;
13529 case q_mode:
539f890d
L
13530 case q_scalar_mode:
13531 case q_scalar_swap_mode:
b6169b20 13532 case q_swap_mode:
3f31e633
JB
13533 oappend ("QWORD PTR ");
13534 break;
d20dee9e 13535 case dqa_mode:
3f31e633 13536 case m_mode:
cb712a9e 13537 if (address_mode == mode_64bit)
3f31e633
JB
13538 oappend ("QWORD PTR ");
13539 else
13540 oappend ("DWORD PTR ");
13541 break;
13542 case f_mode:
13543 if (sizeflag & DFLAG)
13544 oappend ("FWORD PTR ");
13545 else
13546 oappend ("DWORD PTR ");
13547 used_prefixes |= (prefixes & PREFIX_DATA);
13548 break;
13549 case t_mode:
13550 oappend ("TBYTE PTR ");
13551 break;
13552 case x_mode:
b6169b20 13553 case x_swap_mode:
43234a1e
L
13554 case evex_x_gscat_mode:
13555 case evex_x_nobcst_mode:
53467f57
IT
13556 case b_scalar_mode:
13557 case w_scalar_mode:
c0f3af97
L
13558 if (need_vex)
13559 {
13560 switch (vex.length)
13561 {
13562 case 128:
13563 oappend ("XMMWORD PTR ");
13564 break;
13565 case 256:
13566 oappend ("YMMWORD PTR ");
13567 break;
43234a1e
L
13568 case 512:
13569 oappend ("ZMMWORD PTR ");
13570 break;
c0f3af97
L
13571 default:
13572 abort ();
13573 }
13574 }
13575 else
13576 oappend ("XMMWORD PTR ");
13577 break;
13578 case xmm_mode:
3f31e633
JB
13579 oappend ("XMMWORD PTR ");
13580 break;
43234a1e
L
13581 case ymm_mode:
13582 oappend ("YMMWORD PTR ");
13583 break;
c0f3af97 13584 case xmmq_mode:
43234a1e 13585 case evex_half_bcst_xmmq_mode:
c0f3af97
L
13586 if (!need_vex)
13587 abort ();
13588
13589 switch (vex.length)
13590 {
13591 case 128:
13592 oappend ("QWORD PTR ");
13593 break;
13594 case 256:
13595 oappend ("XMMWORD PTR ");
13596 break;
43234a1e
L
13597 case 512:
13598 oappend ("YMMWORD PTR ");
13599 break;
c0f3af97
L
13600 default:
13601 abort ();
13602 }
13603 break;
6c30d220
L
13604 case xmm_mb_mode:
13605 if (!need_vex)
13606 abort ();
13607
13608 switch (vex.length)
13609 {
13610 case 128:
13611 case 256:
43234a1e 13612 case 512:
6c30d220
L
13613 oappend ("BYTE PTR ");
13614 break;
13615 default:
13616 abort ();
13617 }
13618 break;
13619 case xmm_mw_mode:
13620 if (!need_vex)
13621 abort ();
13622
13623 switch (vex.length)
13624 {
13625 case 128:
13626 case 256:
43234a1e 13627 case 512:
6c30d220
L
13628 oappend ("WORD PTR ");
13629 break;
13630 default:
13631 abort ();
13632 }
13633 break;
13634 case xmm_md_mode:
13635 if (!need_vex)
13636 abort ();
13637
13638 switch (vex.length)
13639 {
13640 case 128:
13641 case 256:
43234a1e 13642 case 512:
6c30d220
L
13643 oappend ("DWORD PTR ");
13644 break;
13645 default:
13646 abort ();
13647 }
13648 break;
13649 case xmm_mq_mode:
13650 if (!need_vex)
13651 abort ();
13652
13653 switch (vex.length)
13654 {
13655 case 128:
13656 case 256:
43234a1e 13657 case 512:
6c30d220
L
13658 oappend ("QWORD PTR ");
13659 break;
13660 default:
13661 abort ();
13662 }
13663 break;
13664 case xmmdw_mode:
13665 if (!need_vex)
13666 abort ();
13667
13668 switch (vex.length)
13669 {
13670 case 128:
13671 oappend ("WORD PTR ");
13672 break;
13673 case 256:
13674 oappend ("DWORD PTR ");
13675 break;
43234a1e
L
13676 case 512:
13677 oappend ("QWORD PTR ");
13678 break;
6c30d220
L
13679 default:
13680 abort ();
13681 }
13682 break;
13683 case xmmqd_mode:
13684 if (!need_vex)
13685 abort ();
13686
13687 switch (vex.length)
13688 {
13689 case 128:
13690 oappend ("DWORD PTR ");
13691 break;
13692 case 256:
13693 oappend ("QWORD PTR ");
13694 break;
43234a1e
L
13695 case 512:
13696 oappend ("XMMWORD PTR ");
13697 break;
6c30d220
L
13698 default:
13699 abort ();
13700 }
13701 break;
c0f3af97
L
13702 case ymmq_mode:
13703 if (!need_vex)
13704 abort ();
13705
13706 switch (vex.length)
13707 {
13708 case 128:
13709 oappend ("QWORD PTR ");
13710 break;
13711 case 256:
13712 oappend ("YMMWORD PTR ");
13713 break;
43234a1e
L
13714 case 512:
13715 oappend ("ZMMWORD PTR ");
13716 break;
c0f3af97
L
13717 default:
13718 abort ();
13719 }
13720 break;
6c30d220
L
13721 case ymmxmm_mode:
13722 if (!need_vex)
13723 abort ();
13724
13725 switch (vex.length)
13726 {
13727 case 128:
13728 case 256:
13729 oappend ("XMMWORD PTR ");
13730 break;
13731 default:
13732 abort ();
13733 }
13734 break;
fb9c77c7
L
13735 case o_mode:
13736 oappend ("OWORD PTR ");
13737 break;
43234a1e 13738 case xmm_mdq_mode:
0bfee649 13739 case vex_w_dq_mode:
1c480963 13740 case vex_scalar_w_dq_mode:
0bfee649
L
13741 if (!need_vex)
13742 abort ();
13743
13744 if (vex.w)
13745 oappend ("QWORD PTR ");
13746 else
13747 oappend ("DWORD PTR ");
13748 break;
43234a1e
L
13749 case vex_vsib_d_w_dq_mode:
13750 case vex_vsib_q_w_dq_mode:
13751 if (!need_vex)
13752 abort ();
13753
13754 if (!vex.evex)
13755 {
13756 if (vex.w)
13757 oappend ("QWORD PTR ");
13758 else
13759 oappend ("DWORD PTR ");
13760 }
13761 else
13762 {
b28d1bda
IT
13763 switch (vex.length)
13764 {
13765 case 128:
13766 oappend ("XMMWORD PTR ");
13767 break;
13768 case 256:
13769 oappend ("YMMWORD PTR ");
13770 break;
13771 case 512:
13772 oappend ("ZMMWORD PTR ");
13773 break;
13774 default:
13775 abort ();
13776 }
43234a1e
L
13777 }
13778 break;
5fc35d96
IT
13779 case vex_vsib_q_w_d_mode:
13780 case vex_vsib_d_w_d_mode:
b28d1bda 13781 if (!need_vex || !vex.evex)
5fc35d96
IT
13782 abort ();
13783
b28d1bda
IT
13784 switch (vex.length)
13785 {
13786 case 128:
13787 oappend ("QWORD PTR ");
13788 break;
13789 case 256:
13790 oappend ("XMMWORD PTR ");
13791 break;
13792 case 512:
13793 oappend ("YMMWORD PTR ");
13794 break;
13795 default:
13796 abort ();
13797 }
5fc35d96
IT
13798
13799 break;
1ba585e8
IT
13800 case mask_bd_mode:
13801 if (!need_vex || vex.length != 128)
13802 abort ();
13803 if (vex.w)
13804 oappend ("DWORD PTR ");
13805 else
13806 oappend ("BYTE PTR ");
13807 break;
43234a1e
L
13808 case mask_mode:
13809 if (!need_vex)
13810 abort ();
1ba585e8
IT
13811 if (vex.w)
13812 oappend ("QWORD PTR ");
13813 else
13814 oappend ("WORD PTR ");
43234a1e 13815 break;
6c75cc62 13816 case v_bnd_mode:
d276ec69 13817 case v_bndmk_mode:
3f31e633
JB
13818 default:
13819 break;
13820 }
13821}
13822
252b5132 13823static void
c0f3af97 13824OP_E_register (int bytemode, int sizeflag)
252b5132 13825{
c0f3af97
L
13826 int reg = modrm.rm;
13827 const char **names;
252b5132 13828
c0f3af97
L
13829 USED_REX (REX_B);
13830 if ((rex & REX_B))
13831 reg += 8;
252b5132 13832
b6169b20 13833 if ((sizeflag & SUFFIX_ALWAYS)
1ba585e8 13834 && (bytemode == b_swap_mode
9f79e886 13835 || bytemode == bnd_swap_mode
60227d64 13836 || bytemode == v_swap_mode))
b6169b20
L
13837 swap_operand ();
13838
c0f3af97 13839 switch (bytemode)
252b5132 13840 {
c0f3af97 13841 case b_mode:
b6169b20 13842 case b_swap_mode:
c0f3af97
L
13843 USED_REX (0);
13844 if (rex)
13845 names = names8rex;
13846 else
13847 names = names8;
13848 break;
13849 case w_mode:
13850 names = names16;
13851 break;
13852 case d_mode:
1ba585e8
IT
13853 case dw_mode:
13854 case db_mode:
c0f3af97
L
13855 names = names32;
13856 break;
13857 case q_mode:
13858 names = names64;
13859 break;
13860 case m_mode:
6c75cc62 13861 case v_bnd_mode:
c0f3af97
L
13862 names = address_mode == mode_64bit ? names64 : names32;
13863 break;
7e8b059b 13864 case bnd_mode:
9f79e886 13865 case bnd_swap_mode:
0d96e4df
L
13866 if (reg > 0x3)
13867 {
13868 oappend ("(bad)");
13869 return;
13870 }
7e8b059b
L
13871 names = names_bnd;
13872 break;
07f5af7d
L
13873 case indir_v_mode:
13874 if (address_mode == mode_64bit && isa64 == intel64)
13875 {
13876 names = names64;
13877 break;
13878 }
1a0670f3 13879 /* Fall through. */
c0f3af97 13880 case stack_v_mode:
7bb15c6f 13881 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
252b5132 13882 {
c0f3af97 13883 names = names64;
252b5132 13884 break;
252b5132 13885 }
c0f3af97 13886 bytemode = v_mode;
1a0670f3 13887 /* Fall through. */
c0f3af97 13888 case v_mode:
b6169b20 13889 case v_swap_mode:
c0f3af97
L
13890 case dq_mode:
13891 case dqb_mode:
13892 case dqd_mode:
13893 case dqw_mode:
d20dee9e 13894 case dqa_mode:
c0f3af97
L
13895 USED_REX (REX_W);
13896 if (rex & REX_W)
13897 names = names64;
c0f3af97 13898 else
f16cd0d5 13899 {
7bb15c6f 13900 if ((sizeflag & DFLAG)
f16cd0d5
L
13901 || (bytemode != v_mode
13902 && bytemode != v_swap_mode))
13903 names = names32;
13904 else
13905 names = names16;
13906 used_prefixes |= (prefixes & PREFIX_DATA);
13907 }
c0f3af97 13908 break;
de89d0a3
IT
13909 case va_mode:
13910 names = (address_mode == mode_64bit
13911 ? names64 : names32);
13912 if (!(prefixes & PREFIX_ADDR))
aa178437
IT
13913 names = (address_mode == mode_16bit
13914 ? names16 : names);
de89d0a3
IT
13915 else
13916 {
13917 /* Remove "addr16/addr32". */
13918 all_prefixes[last_addr_prefix] = 0;
13919 names = (address_mode != mode_32bit
13920 ? names32 : names16);
13921 used_prefixes |= PREFIX_ADDR;
13922 }
13923 break;
1ba585e8 13924 case mask_bd_mode:
43234a1e 13925 case mask_mode:
9889cbb1
L
13926 if (reg > 0x7)
13927 {
13928 oappend ("(bad)");
13929 return;
13930 }
43234a1e
L
13931 names = names_mask;
13932 break;
c0f3af97
L
13933 case 0:
13934 return;
13935 default:
13936 oappend (INTERNAL_DISASSEMBLER_ERROR);
252b5132
RH
13937 return;
13938 }
c0f3af97
L
13939 oappend (names[reg]);
13940}
13941
13942static void
c1e679ec 13943OP_E_memory (int bytemode, int sizeflag)
c0f3af97
L
13944{
13945 bfd_vma disp = 0;
13946 int add = (rex & REX_B) ? 8 : 0;
13947 int riprel = 0;
43234a1e
L
13948 int shift;
13949
13950 if (vex.evex)
13951 {
13952 /* In EVEX, if operand doesn't allow broadcast, vex.b should be 0. */
13953 if (vex.b
13954 && bytemode != x_mode
90a915bf 13955 && bytemode != xmmq_mode
43234a1e
L
13956 && bytemode != evex_half_bcst_xmmq_mode)
13957 {
13958 BadOp ();
13959 return;
13960 }
13961 switch (bytemode)
13962 {
1ba585e8
IT
13963 case dqw_mode:
13964 case dw_mode:
1ba585e8
IT
13965 shift = 1;
13966 break;
13967 case dqb_mode:
13968 case db_mode:
13969 shift = 0;
13970 break;
b50c9f31
JB
13971 case dq_mode:
13972 if (address_mode != mode_64bit)
13973 {
13974 shift = 2;
13975 break;
13976 }
13977 /* fall through */
43234a1e 13978 case vex_vsib_d_w_dq_mode:
5fc35d96 13979 case vex_vsib_d_w_d_mode:
eaa9d1ad 13980 case vex_vsib_q_w_dq_mode:
5fc35d96 13981 case vex_vsib_q_w_d_mode:
43234a1e
L
13982 case evex_x_gscat_mode:
13983 case xmm_mdq_mode:
13984 shift = vex.w ? 3 : 2;
13985 break;
43234a1e
L
13986 case x_mode:
13987 case evex_half_bcst_xmmq_mode:
90a915bf 13988 case xmmq_mode:
43234a1e
L
13989 if (vex.b)
13990 {
13991 shift = vex.w ? 3 : 2;
13992 break;
13993 }
1a0670f3 13994 /* Fall through. */
43234a1e
L
13995 case xmmqd_mode:
13996 case xmmdw_mode:
43234a1e
L
13997 case ymmq_mode:
13998 case evex_x_nobcst_mode:
13999 case x_swap_mode:
14000 switch (vex.length)
14001 {
14002 case 128:
14003 shift = 4;
14004 break;
14005 case 256:
14006 shift = 5;
14007 break;
14008 case 512:
14009 shift = 6;
14010 break;
14011 default:
14012 abort ();
14013 }
14014 break;
14015 case ymm_mode:
14016 shift = 5;
14017 break;
14018 case xmm_mode:
14019 shift = 4;
14020 break;
14021 case xmm_mq_mode:
14022 case q_mode:
14023 case q_scalar_mode:
14024 case q_swap_mode:
14025 case q_scalar_swap_mode:
14026 shift = 3;
14027 break;
14028 case dqd_mode:
14029 case xmm_md_mode:
14030 case d_mode:
14031 case d_scalar_mode:
14032 case d_swap_mode:
14033 case d_scalar_swap_mode:
14034 shift = 2;
14035 break;
5074ad8a 14036 case w_scalar_mode:
43234a1e
L
14037 case xmm_mw_mode:
14038 shift = 1;
14039 break;
5074ad8a 14040 case b_scalar_mode:
43234a1e
L
14041 case xmm_mb_mode:
14042 shift = 0;
14043 break;
d20dee9e
L
14044 case dqa_mode:
14045 shift = address_mode == mode_64bit ? 3 : 2;
14046 break;
43234a1e
L
14047 default:
14048 abort ();
14049 }
14050 /* Make necessary corrections to shift for modes that need it.
14051 For these modes we currently have shift 4, 5 or 6 depending on
14052 vex.length (it corresponds to xmmword, ymmword or zmmword
14053 operand). We might want to make it 3, 4 or 5 (e.g. for
14054 xmmq_mode). In case of broadcast enabled the corrections
14055 aren't needed, as element size is always 32 or 64 bits. */
90a915bf
IT
14056 if (!vex.b
14057 && (bytemode == xmmq_mode
14058 || bytemode == evex_half_bcst_xmmq_mode))
43234a1e
L
14059 shift -= 1;
14060 else if (bytemode == xmmqd_mode)
14061 shift -= 2;
14062 else if (bytemode == xmmdw_mode)
14063 shift -= 3;
b28d1bda
IT
14064 else if (bytemode == ymmq_mode && vex.length == 128)
14065 shift -= 1;
43234a1e
L
14066 }
14067 else
14068 shift = 0;
252b5132 14069
c0f3af97 14070 USED_REX (REX_B);
3f31e633
JB
14071 if (intel_syntax)
14072 intel_operand_size (bytemode, sizeflag);
252b5132
RH
14073 append_seg ();
14074
5d669648 14075 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132 14076 {
5d669648
L
14077 /* 32/64 bit address mode */
14078 int havedisp;
252b5132
RH
14079 int havesib;
14080 int havebase;
0f7da397 14081 int haveindex;
20afcfb7 14082 int needindex;
1bc60e56 14083 int needaddr32;
82c18208 14084 int base, rbase;
91d6fa6a 14085 int vindex = 0;
252b5132 14086 int scale = 0;
7e8b059b
L
14087 int addr32flag = !((sizeflag & AFLAG)
14088 || bytemode == v_bnd_mode
d276ec69 14089 || bytemode == v_bndmk_mode
9f79e886
JB
14090 || bytemode == bnd_mode
14091 || bytemode == bnd_swap_mode);
6c30d220
L
14092 const char **indexes64 = names64;
14093 const char **indexes32 = names32;
252b5132
RH
14094
14095 havesib = 0;
14096 havebase = 1;
0f7da397 14097 haveindex = 0;
7967e09e 14098 base = modrm.rm;
252b5132
RH
14099
14100 if (base == 4)
14101 {
14102 havesib = 1;
dfc8cf43 14103 vindex = sib.index;
161a04f6
L
14104 USED_REX (REX_X);
14105 if (rex & REX_X)
91d6fa6a 14106 vindex += 8;
6c30d220
L
14107 switch (bytemode)
14108 {
14109 case vex_vsib_d_w_dq_mode:
5fc35d96 14110 case vex_vsib_d_w_d_mode:
6c30d220 14111 case vex_vsib_q_w_dq_mode:
5fc35d96 14112 case vex_vsib_q_w_d_mode:
6c30d220
L
14113 if (!need_vex)
14114 abort ();
43234a1e
L
14115 if (vex.evex)
14116 {
14117 if (!vex.v)
14118 vindex += 16;
14119 }
6c30d220
L
14120
14121 haveindex = 1;
14122 switch (vex.length)
14123 {
14124 case 128:
7bb15c6f 14125 indexes64 = indexes32 = names_xmm;
6c30d220
L
14126 break;
14127 case 256:
5fc35d96
IT
14128 if (!vex.w
14129 || bytemode == vex_vsib_q_w_dq_mode
14130 || bytemode == vex_vsib_q_w_d_mode)
7bb15c6f 14131 indexes64 = indexes32 = names_ymm;
6c30d220 14132 else
7bb15c6f 14133 indexes64 = indexes32 = names_xmm;
6c30d220 14134 break;
43234a1e 14135 case 512:
5fc35d96
IT
14136 if (!vex.w
14137 || bytemode == vex_vsib_q_w_dq_mode
14138 || bytemode == vex_vsib_q_w_d_mode)
43234a1e
L
14139 indexes64 = indexes32 = names_zmm;
14140 else
14141 indexes64 = indexes32 = names_ymm;
14142 break;
6c30d220
L
14143 default:
14144 abort ();
14145 }
14146 break;
14147 default:
14148 haveindex = vindex != 4;
14149 break;
14150 }
14151 scale = sib.scale;
14152 base = sib.base;
252b5132
RH
14153 codep++;
14154 }
82c18208 14155 rbase = base + add;
252b5132 14156
7967e09e 14157 switch (modrm.mod)
252b5132
RH
14158 {
14159 case 0:
82c18208 14160 if (base == 5)
252b5132
RH
14161 {
14162 havebase = 0;
cb712a9e 14163 if (address_mode == mode_64bit && !havesib)
52b15da3
JH
14164 riprel = 1;
14165 disp = get32s ();
d276ec69
JB
14166 if (riprel && bytemode == v_bndmk_mode)
14167 {
14168 oappend ("(bad)");
14169 return;
14170 }
252b5132
RH
14171 }
14172 break;
14173 case 1:
14174 FETCH_DATA (the_info, codep + 1);
14175 disp = *codep++;
14176 if ((disp & 0x80) != 0)
14177 disp -= 0x100;
43234a1e
L
14178 if (vex.evex && shift > 0)
14179 disp <<= shift;
252b5132
RH
14180 break;
14181 case 2:
52b15da3 14182 disp = get32s ();
252b5132
RH
14183 break;
14184 }
14185
1bc60e56
L
14186 needindex = 0;
14187 needaddr32 = 0;
14188 if (havesib
14189 && !havebase
14190 && !haveindex
14191 && address_mode != mode_16bit)
14192 {
14193 if (address_mode == mode_64bit)
14194 {
14195 /* Display eiz instead of addr32. */
14196 needindex = addr32flag;
14197 needaddr32 = 1;
14198 }
14199 else
14200 {
14201 /* In 32-bit mode, we need index register to tell [offset]
14202 from [eiz*1 + offset]. */
14203 needindex = 1;
14204 }
14205 }
14206
20afcfb7
L
14207 havedisp = (havebase
14208 || needindex
14209 || (havesib && (haveindex || scale != 0)));
5d669648 14210
252b5132 14211 if (!intel_syntax)
82c18208 14212 if (modrm.mod != 0 || base == 5)
db6eb5be 14213 {
5d669648
L
14214 if (havedisp || riprel)
14215 print_displacement (scratchbuf, disp);
14216 else
14217 print_operand_value (scratchbuf, 1, disp);
db6eb5be 14218 oappend (scratchbuf);
52b15da3
JH
14219 if (riprel)
14220 {
14221 set_op (disp, 1);
28596323 14222 oappend (!addr32flag ? "(%rip)" : "(%eip)");
52b15da3 14223 }
db6eb5be 14224 }
2da11e11 14225
1bc60e56 14226 if ((havebase || haveindex || needaddr32 || riprel)
7e8b059b 14227 && (bytemode != v_bnd_mode)
d276ec69 14228 && (bytemode != v_bndmk_mode)
9f79e886
JB
14229 && (bytemode != bnd_mode)
14230 && (bytemode != bnd_swap_mode))
87767711
JB
14231 used_prefixes |= PREFIX_ADDR;
14232
5d669648 14233 if (havedisp || (intel_syntax && riprel))
252b5132 14234 {
252b5132 14235 *obufp++ = open_char;
52b15da3 14236 if (intel_syntax && riprel)
185b1163
L
14237 {
14238 set_op (disp, 1);
28596323 14239 oappend (!addr32flag ? "rip" : "eip");
185b1163 14240 }
db6eb5be 14241 *obufp = '\0';
252b5132 14242 if (havebase)
7e8b059b 14243 oappend (address_mode == mode_64bit && !addr32flag
82c18208 14244 ? names64[rbase] : names32[rbase]);
252b5132
RH
14245 if (havesib)
14246 {
db51cc60
L
14247 /* ESP/RSP won't allow index. If base isn't ESP/RSP,
14248 print index to tell base + index from base. */
14249 if (scale != 0
20afcfb7 14250 || needindex
db51cc60
L
14251 || haveindex
14252 || (havebase && base != ESP_REG_NUM))
252b5132 14253 {
9306ca4a 14254 if (!intel_syntax || havebase)
db6eb5be 14255 {
9306ca4a
JB
14256 *obufp++ = separator_char;
14257 *obufp = '\0';
db6eb5be 14258 }
db51cc60 14259 if (haveindex)
7e8b059b 14260 oappend (address_mode == mode_64bit && !addr32flag
6c30d220 14261 ? indexes64[vindex] : indexes32[vindex]);
db51cc60 14262 else
7e8b059b 14263 oappend (address_mode == mode_64bit && !addr32flag
db51cc60
L
14264 ? index64 : index32);
14265
db6eb5be
AM
14266 *obufp++ = scale_char;
14267 *obufp = '\0';
14268 sprintf (scratchbuf, "%d", 1 << scale);
14269 oappend (scratchbuf);
14270 }
252b5132 14271 }
185b1163 14272 if (intel_syntax
82c18208 14273 && (disp || modrm.mod != 0 || base == 5))
3d456fa1 14274 {
db51cc60 14275 if (!havedisp || (bfd_signed_vma) disp >= 0)
3d456fa1
JB
14276 {
14277 *obufp++ = '+';
14278 *obufp = '\0';
14279 }
05203043 14280 else if (modrm.mod != 1 && disp != -disp)
3d456fa1
JB
14281 {
14282 *obufp++ = '-';
14283 *obufp = '\0';
14284 disp = - (bfd_signed_vma) disp;
14285 }
14286
db51cc60
L
14287 if (havedisp)
14288 print_displacement (scratchbuf, disp);
14289 else
14290 print_operand_value (scratchbuf, 1, disp);
3d456fa1
JB
14291 oappend (scratchbuf);
14292 }
252b5132
RH
14293
14294 *obufp++ = close_char;
db6eb5be 14295 *obufp = '\0';
252b5132
RH
14296 }
14297 else if (intel_syntax)
db6eb5be 14298 {
82c18208 14299 if (modrm.mod != 0 || base == 5)
db6eb5be 14300 {
285ca992 14301 if (!active_seg_prefix)
252b5132 14302 {
d708bcba 14303 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
14304 oappend (":");
14305 }
52b15da3 14306 print_operand_value (scratchbuf, 1, disp);
db6eb5be
AM
14307 oappend (scratchbuf);
14308 }
14309 }
252b5132
RH
14310 }
14311 else
f16cd0d5
L
14312 {
14313 /* 16 bit address mode */
14314 used_prefixes |= prefixes & PREFIX_ADDR;
7967e09e 14315 switch (modrm.mod)
252b5132
RH
14316 {
14317 case 0:
7967e09e 14318 if (modrm.rm == 6)
252b5132
RH
14319 {
14320 disp = get16 ();
14321 if ((disp & 0x8000) != 0)
14322 disp -= 0x10000;
14323 }
14324 break;
14325 case 1:
14326 FETCH_DATA (the_info, codep + 1);
14327 disp = *codep++;
14328 if ((disp & 0x80) != 0)
14329 disp -= 0x100;
65f3ed04
JB
14330 if (vex.evex && shift > 0)
14331 disp <<= shift;
252b5132
RH
14332 break;
14333 case 2:
14334 disp = get16 ();
14335 if ((disp & 0x8000) != 0)
14336 disp -= 0x10000;
14337 break;
14338 }
14339
14340 if (!intel_syntax)
7967e09e 14341 if (modrm.mod != 0 || modrm.rm == 6)
db6eb5be 14342 {
5d669648 14343 print_displacement (scratchbuf, disp);
db6eb5be
AM
14344 oappend (scratchbuf);
14345 }
252b5132 14346
7967e09e 14347 if (modrm.mod != 0 || modrm.rm != 6)
252b5132
RH
14348 {
14349 *obufp++ = open_char;
db6eb5be 14350 *obufp = '\0';
7967e09e 14351 oappend (index16[modrm.rm]);
5d669648
L
14352 if (intel_syntax
14353 && (disp || modrm.mod != 0 || modrm.rm == 6))
3d456fa1 14354 {
5d669648 14355 if ((bfd_signed_vma) disp >= 0)
3d456fa1
JB
14356 {
14357 *obufp++ = '+';
14358 *obufp = '\0';
14359 }
7967e09e 14360 else if (modrm.mod != 1)
3d456fa1
JB
14361 {
14362 *obufp++ = '-';
14363 *obufp = '\0';
14364 disp = - (bfd_signed_vma) disp;
14365 }
14366
5d669648 14367 print_displacement (scratchbuf, disp);
3d456fa1
JB
14368 oappend (scratchbuf);
14369 }
14370
db6eb5be
AM
14371 *obufp++ = close_char;
14372 *obufp = '\0';
252b5132 14373 }
3d456fa1
JB
14374 else if (intel_syntax)
14375 {
285ca992 14376 if (!active_seg_prefix)
3d456fa1
JB
14377 {
14378 oappend (names_seg[ds_reg - es_reg]);
14379 oappend (":");
14380 }
14381 print_operand_value (scratchbuf, 1, disp & 0xffff);
14382 oappend (scratchbuf);
14383 }
252b5132 14384 }
43234a1e
L
14385 if (vex.evex && vex.b
14386 && (bytemode == x_mode
90a915bf 14387 || bytemode == xmmq_mode
43234a1e
L
14388 || bytemode == evex_half_bcst_xmmq_mode))
14389 {
90a915bf
IT
14390 if (vex.w
14391 || bytemode == xmmq_mode
14392 || bytemode == evex_half_bcst_xmmq_mode)
b28d1bda
IT
14393 {
14394 switch (vex.length)
14395 {
14396 case 128:
14397 oappend ("{1to2}");
14398 break;
14399 case 256:
14400 oappend ("{1to4}");
14401 break;
14402 case 512:
14403 oappend ("{1to8}");
14404 break;
14405 default:
14406 abort ();
14407 }
14408 }
43234a1e 14409 else
b28d1bda
IT
14410 {
14411 switch (vex.length)
14412 {
14413 case 128:
14414 oappend ("{1to4}");
14415 break;
14416 case 256:
14417 oappend ("{1to8}");
14418 break;
14419 case 512:
14420 oappend ("{1to16}");
14421 break;
14422 default:
14423 abort ();
14424 }
14425 }
43234a1e 14426 }
252b5132
RH
14427}
14428
c0f3af97 14429static void
8b3f93e7 14430OP_E (int bytemode, int sizeflag)
c0f3af97
L
14431{
14432 /* Skip mod/rm byte. */
14433 MODRM_CHECK;
14434 codep++;
14435
14436 if (modrm.mod == 3)
14437 OP_E_register (bytemode, sizeflag);
14438 else
c1e679ec 14439 OP_E_memory (bytemode, sizeflag);
c0f3af97
L
14440}
14441
252b5132 14442static void
26ca5450 14443OP_G (int bytemode, int sizeflag)
252b5132 14444{
52b15da3 14445 int add = 0;
c0a30a9f 14446 const char **names;
161a04f6
L
14447 USED_REX (REX_R);
14448 if (rex & REX_R)
52b15da3 14449 add += 8;
252b5132
RH
14450 switch (bytemode)
14451 {
14452 case b_mode:
52b15da3
JH
14453 USED_REX (0);
14454 if (rex)
7967e09e 14455 oappend (names8rex[modrm.reg + add]);
52b15da3 14456 else
7967e09e 14457 oappend (names8[modrm.reg + add]);
252b5132
RH
14458 break;
14459 case w_mode:
7967e09e 14460 oappend (names16[modrm.reg + add]);
252b5132
RH
14461 break;
14462 case d_mode:
1ba585e8
IT
14463 case db_mode:
14464 case dw_mode:
7967e09e 14465 oappend (names32[modrm.reg + add]);
52b15da3
JH
14466 break;
14467 case q_mode:
7967e09e 14468 oappend (names64[modrm.reg + add]);
252b5132 14469 break;
7e8b059b 14470 case bnd_mode:
0d96e4df
L
14471 if (modrm.reg > 0x3)
14472 {
14473 oappend ("(bad)");
14474 return;
14475 }
7e8b059b
L
14476 oappend (names_bnd[modrm.reg]);
14477 break;
252b5132 14478 case v_mode:
9306ca4a 14479 case dq_mode:
42903f7f
L
14480 case dqb_mode:
14481 case dqd_mode:
9306ca4a 14482 case dqw_mode:
161a04f6
L
14483 USED_REX (REX_W);
14484 if (rex & REX_W)
7967e09e 14485 oappend (names64[modrm.reg + add]);
252b5132 14486 else
f16cd0d5
L
14487 {
14488 if ((sizeflag & DFLAG) || bytemode != v_mode)
14489 oappend (names32[modrm.reg + add]);
14490 else
14491 oappend (names16[modrm.reg + add]);
14492 used_prefixes |= (prefixes & PREFIX_DATA);
14493 }
252b5132 14494 break;
c0a30a9f
L
14495 case va_mode:
14496 names = (address_mode == mode_64bit
14497 ? names64 : names32);
14498 if (!(prefixes & PREFIX_ADDR))
14499 {
14500 if (address_mode == mode_16bit)
14501 names = names16;
14502 }
14503 else
14504 {
14505 /* Remove "addr16/addr32". */
14506 all_prefixes[last_addr_prefix] = 0;
14507 names = (address_mode != mode_32bit
14508 ? names32 : names16);
14509 used_prefixes |= PREFIX_ADDR;
14510 }
14511 oappend (names[modrm.reg + add]);
14512 break;
90700ea2 14513 case m_mode:
cb712a9e 14514 if (address_mode == mode_64bit)
7967e09e 14515 oappend (names64[modrm.reg + add]);
90700ea2 14516 else
7967e09e 14517 oappend (names32[modrm.reg + add]);
90700ea2 14518 break;
1ba585e8 14519 case mask_bd_mode:
43234a1e 14520 case mask_mode:
9889cbb1
L
14521 if ((modrm.reg + add) > 0x7)
14522 {
14523 oappend ("(bad)");
14524 return;
14525 }
43234a1e
L
14526 oappend (names_mask[modrm.reg + add]);
14527 break;
252b5132
RH
14528 default:
14529 oappend (INTERNAL_DISASSEMBLER_ERROR);
14530 break;
14531 }
14532}
14533
52b15da3 14534static bfd_vma
26ca5450 14535get64 (void)
52b15da3 14536{
5dd0794d 14537 bfd_vma x;
52b15da3 14538#ifdef BFD64
5dd0794d
AM
14539 unsigned int a;
14540 unsigned int b;
14541
52b15da3
JH
14542 FETCH_DATA (the_info, codep + 8);
14543 a = *codep++ & 0xff;
14544 a |= (*codep++ & 0xff) << 8;
14545 a |= (*codep++ & 0xff) << 16;
070fe95d 14546 a |= (*codep++ & 0xffu) << 24;
5dd0794d 14547 b = *codep++ & 0xff;
52b15da3
JH
14548 b |= (*codep++ & 0xff) << 8;
14549 b |= (*codep++ & 0xff) << 16;
070fe95d 14550 b |= (*codep++ & 0xffu) << 24;
52b15da3
JH
14551 x = a + ((bfd_vma) b << 32);
14552#else
6608db57 14553 abort ();
5dd0794d 14554 x = 0;
52b15da3
JH
14555#endif
14556 return x;
14557}
14558
14559static bfd_signed_vma
26ca5450 14560get32 (void)
252b5132 14561{
52b15da3 14562 bfd_signed_vma x = 0;
252b5132
RH
14563
14564 FETCH_DATA (the_info, codep + 4);
52b15da3
JH
14565 x = *codep++ & (bfd_signed_vma) 0xff;
14566 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
14567 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
14568 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
14569 return x;
14570}
14571
14572static bfd_signed_vma
26ca5450 14573get32s (void)
52b15da3
JH
14574{
14575 bfd_signed_vma x = 0;
14576
14577 FETCH_DATA (the_info, codep + 4);
14578 x = *codep++ & (bfd_signed_vma) 0xff;
14579 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
14580 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
14581 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
14582
14583 x = (x ^ ((bfd_signed_vma) 1 << 31)) - ((bfd_signed_vma) 1 << 31);
14584
252b5132
RH
14585 return x;
14586}
14587
14588static int
26ca5450 14589get16 (void)
252b5132
RH
14590{
14591 int x = 0;
14592
14593 FETCH_DATA (the_info, codep + 2);
14594 x = *codep++ & 0xff;
14595 x |= (*codep++ & 0xff) << 8;
14596 return x;
14597}
14598
14599static void
26ca5450 14600set_op (bfd_vma op, int riprel)
252b5132
RH
14601{
14602 op_index[op_ad] = op_ad;
cb712a9e 14603 if (address_mode == mode_64bit)
7081ff04
AJ
14604 {
14605 op_address[op_ad] = op;
14606 op_riprel[op_ad] = riprel;
14607 }
14608 else
14609 {
14610 /* Mask to get a 32-bit address. */
14611 op_address[op_ad] = op & 0xffffffff;
14612 op_riprel[op_ad] = riprel & 0xffffffff;
14613 }
252b5132
RH
14614}
14615
14616static void
26ca5450 14617OP_REG (int code, int sizeflag)
252b5132 14618{
2da11e11 14619 const char *s;
9b60702d 14620 int add;
de882298
RM
14621
14622 switch (code)
14623 {
14624 case es_reg: case ss_reg: case cs_reg:
14625 case ds_reg: case fs_reg: case gs_reg:
14626 oappend (names_seg[code - es_reg]);
14627 return;
14628 }
14629
161a04f6
L
14630 USED_REX (REX_B);
14631 if (rex & REX_B)
52b15da3 14632 add = 8;
9b60702d
L
14633 else
14634 add = 0;
52b15da3
JH
14635
14636 switch (code)
14637 {
52b15da3
JH
14638 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
14639 case sp_reg: case bp_reg: case si_reg: case di_reg:
14640 s = names16[code - ax_reg + add];
14641 break;
52b15da3
JH
14642 case al_reg: case ah_reg: case cl_reg: case ch_reg:
14643 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
14644 USED_REX (0);
14645 if (rex)
14646 s = names8rex[code - al_reg + add];
14647 else
14648 s = names8[code - al_reg];
14649 break;
6439fc28
AM
14650 case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg:
14651 case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg:
7bb15c6f 14652 if (address_mode == mode_64bit
6c067bbb 14653 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
14654 {
14655 s = names64[code - rAX_reg + add];
14656 break;
14657 }
14658 code += eAX_reg - rAX_reg;
6608db57 14659 /* Fall through. */
52b15da3
JH
14660 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
14661 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
14662 USED_REX (REX_W);
14663 if (rex & REX_W)
52b15da3 14664 s = names64[code - eAX_reg + add];
52b15da3 14665 else
f16cd0d5
L
14666 {
14667 if (sizeflag & DFLAG)
14668 s = names32[code - eAX_reg + add];
14669 else
14670 s = names16[code - eAX_reg + add];
14671 used_prefixes |= (prefixes & PREFIX_DATA);
14672 }
52b15da3 14673 break;
52b15da3
JH
14674 default:
14675 s = INTERNAL_DISASSEMBLER_ERROR;
14676 break;
14677 }
14678 oappend (s);
14679}
14680
14681static void
26ca5450 14682OP_IMREG (int code, int sizeflag)
52b15da3
JH
14683{
14684 const char *s;
252b5132
RH
14685
14686 switch (code)
14687 {
14688 case indir_dx_reg:
d708bcba 14689 if (intel_syntax)
52fd6d94 14690 s = "dx";
d708bcba 14691 else
db6eb5be 14692 s = "(%dx)";
252b5132
RH
14693 break;
14694 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
14695 case sp_reg: case bp_reg: case si_reg: case di_reg:
14696 s = names16[code - ax_reg];
14697 break;
14698 case es_reg: case ss_reg: case cs_reg:
14699 case ds_reg: case fs_reg: case gs_reg:
14700 s = names_seg[code - es_reg];
14701 break;
14702 case al_reg: case ah_reg: case cl_reg: case ch_reg:
14703 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
52b15da3
JH
14704 USED_REX (0);
14705 if (rex)
14706 s = names8rex[code - al_reg];
14707 else
14708 s = names8[code - al_reg];
252b5132
RH
14709 break;
14710 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
14711 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
14712 USED_REX (REX_W);
14713 if (rex & REX_W)
52b15da3 14714 s = names64[code - eAX_reg];
252b5132 14715 else
f16cd0d5
L
14716 {
14717 if (sizeflag & DFLAG)
14718 s = names32[code - eAX_reg];
14719 else
14720 s = names16[code - eAX_reg];
14721 used_prefixes |= (prefixes & PREFIX_DATA);
14722 }
252b5132 14723 break;
52fd6d94 14724 case z_mode_ax_reg:
161a04f6 14725 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
14726 s = *names32;
14727 else
14728 s = *names16;
161a04f6 14729 if (!(rex & REX_W))
52fd6d94
JB
14730 used_prefixes |= (prefixes & PREFIX_DATA);
14731 break;
252b5132
RH
14732 default:
14733 s = INTERNAL_DISASSEMBLER_ERROR;
14734 break;
14735 }
14736 oappend (s);
14737}
14738
14739static void
26ca5450 14740OP_I (int bytemode, int sizeflag)
252b5132 14741{
52b15da3
JH
14742 bfd_signed_vma op;
14743 bfd_signed_vma mask = -1;
252b5132
RH
14744
14745 switch (bytemode)
14746 {
14747 case b_mode:
14748 FETCH_DATA (the_info, codep + 1);
52b15da3
JH
14749 op = *codep++;
14750 mask = 0xff;
14751 break;
14752 case q_mode:
cb712a9e 14753 if (address_mode == mode_64bit)
6439fc28
AM
14754 {
14755 op = get32s ();
14756 break;
14757 }
6608db57 14758 /* Fall through. */
252b5132 14759 case v_mode:
161a04f6
L
14760 USED_REX (REX_W);
14761 if (rex & REX_W)
52b15da3 14762 op = get32s ();
252b5132 14763 else
52b15da3 14764 {
f16cd0d5
L
14765 if (sizeflag & DFLAG)
14766 {
14767 op = get32 ();
14768 mask = 0xffffffff;
14769 }
14770 else
14771 {
14772 op = get16 ();
14773 mask = 0xfffff;
14774 }
14775 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 14776 }
252b5132
RH
14777 break;
14778 case w_mode:
52b15da3 14779 mask = 0xfffff;
252b5132
RH
14780 op = get16 ();
14781 break;
9306ca4a
JB
14782 case const_1_mode:
14783 if (intel_syntax)
6c067bbb 14784 oappend ("1");
9306ca4a 14785 return;
252b5132
RH
14786 default:
14787 oappend (INTERNAL_DISASSEMBLER_ERROR);
14788 return;
14789 }
14790
52b15da3
JH
14791 op &= mask;
14792 scratchbuf[0] = '$';
d708bcba 14793 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 14794 oappend_maybe_intel (scratchbuf);
52b15da3
JH
14795 scratchbuf[0] = '\0';
14796}
14797
14798static void
26ca5450 14799OP_I64 (int bytemode, int sizeflag)
52b15da3
JH
14800{
14801 bfd_signed_vma op;
14802 bfd_signed_vma mask = -1;
14803
cb712a9e 14804 if (address_mode != mode_64bit)
6439fc28
AM
14805 {
14806 OP_I (bytemode, sizeflag);
14807 return;
14808 }
14809
52b15da3
JH
14810 switch (bytemode)
14811 {
14812 case b_mode:
14813 FETCH_DATA (the_info, codep + 1);
14814 op = *codep++;
14815 mask = 0xff;
14816 break;
14817 case v_mode:
161a04f6
L
14818 USED_REX (REX_W);
14819 if (rex & REX_W)
52b15da3 14820 op = get64 ();
52b15da3
JH
14821 else
14822 {
f16cd0d5
L
14823 if (sizeflag & DFLAG)
14824 {
14825 op = get32 ();
14826 mask = 0xffffffff;
14827 }
14828 else
14829 {
14830 op = get16 ();
14831 mask = 0xfffff;
14832 }
14833 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 14834 }
52b15da3
JH
14835 break;
14836 case w_mode:
14837 mask = 0xfffff;
14838 op = get16 ();
14839 break;
14840 default:
14841 oappend (INTERNAL_DISASSEMBLER_ERROR);
14842 return;
14843 }
14844
14845 op &= mask;
14846 scratchbuf[0] = '$';
d708bcba 14847 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 14848 oappend_maybe_intel (scratchbuf);
252b5132
RH
14849 scratchbuf[0] = '\0';
14850}
14851
14852static void
26ca5450 14853OP_sI (int bytemode, int sizeflag)
252b5132 14854{
52b15da3 14855 bfd_signed_vma op;
252b5132
RH
14856
14857 switch (bytemode)
14858 {
14859 case b_mode:
e3949f17 14860 case b_T_mode:
252b5132
RH
14861 FETCH_DATA (the_info, codep + 1);
14862 op = *codep++;
14863 if ((op & 0x80) != 0)
14864 op -= 0x100;
e3949f17
L
14865 if (bytemode == b_T_mode)
14866 {
14867 if (address_mode != mode_64bit
7bb15c6f 14868 || !((sizeflag & DFLAG) || (rex & REX_W)))
e3949f17 14869 {
6c067bbb
RM
14870 /* The operand-size prefix is overridden by a REX prefix. */
14871 if ((sizeflag & DFLAG) || (rex & REX_W))
e3949f17
L
14872 op &= 0xffffffff;
14873 else
14874 op &= 0xffff;
14875 }
14876 }
14877 else
14878 {
14879 if (!(rex & REX_W))
14880 {
14881 if (sizeflag & DFLAG)
14882 op &= 0xffffffff;
14883 else
14884 op &= 0xffff;
14885 }
14886 }
252b5132
RH
14887 break;
14888 case v_mode:
7bb15c6f
RM
14889 /* The operand-size prefix is overridden by a REX prefix. */
14890 if ((sizeflag & DFLAG) || (rex & REX_W))
52b15da3 14891 op = get32s ();
252b5132 14892 else
d9e3625e 14893 op = get16 ();
252b5132
RH
14894 break;
14895 default:
14896 oappend (INTERNAL_DISASSEMBLER_ERROR);
14897 return;
14898 }
52b15da3
JH
14899
14900 scratchbuf[0] = '$';
14901 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 14902 oappend_maybe_intel (scratchbuf);
252b5132
RH
14903}
14904
14905static void
26ca5450 14906OP_J (int bytemode, int sizeflag)
252b5132 14907{
52b15da3 14908 bfd_vma disp;
7081ff04 14909 bfd_vma mask = -1;
65ca155d 14910 bfd_vma segment = 0;
252b5132
RH
14911
14912 switch (bytemode)
14913 {
14914 case b_mode:
14915 FETCH_DATA (the_info, codep + 1);
14916 disp = *codep++;
14917 if ((disp & 0x80) != 0)
14918 disp -= 0x100;
14919 break;
14920 case v_mode:
5db04b09
L
14921 if (isa64 == amd64)
14922 USED_REX (REX_W);
14923 if ((sizeflag & DFLAG)
14924 || (address_mode == mode_64bit
14925 && (isa64 != amd64 || (rex & REX_W))))
52b15da3 14926 disp = get32s ();
252b5132
RH
14927 else
14928 {
14929 disp = get16 ();
206717e8
L
14930 if ((disp & 0x8000) != 0)
14931 disp -= 0x10000;
65ca155d
L
14932 /* In 16bit mode, address is wrapped around at 64k within
14933 the same segment. Otherwise, a data16 prefix on a jump
14934 instruction means that the pc is masked to 16 bits after
14935 the displacement is added! */
14936 mask = 0xffff;
14937 if ((prefixes & PREFIX_DATA) == 0)
4fd7268a 14938 segment = ((start_pc + (codep - start_codep))
65ca155d 14939 & ~((bfd_vma) 0xffff));
252b5132 14940 }
5db04b09
L
14941 if (address_mode != mode_64bit
14942 || (isa64 == amd64 && !(rex & REX_W)))
f16cd0d5 14943 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132
RH
14944 break;
14945 default:
14946 oappend (INTERNAL_DISASSEMBLER_ERROR);
14947 return;
14948 }
42d5f9c6 14949 disp = ((start_pc + (codep - start_codep) + disp) & mask) | segment;
52b15da3
JH
14950 set_op (disp, 0);
14951 print_operand_value (scratchbuf, 1, disp);
252b5132
RH
14952 oappend (scratchbuf);
14953}
14954
252b5132 14955static void
ed7841b3 14956OP_SEG (int bytemode, int sizeflag)
252b5132 14957{
ed7841b3 14958 if (bytemode == w_mode)
7967e09e 14959 oappend (names_seg[modrm.reg]);
ed7841b3 14960 else
7967e09e 14961 OP_E (modrm.mod == 3 ? bytemode : w_mode, sizeflag);
252b5132
RH
14962}
14963
14964static void
26ca5450 14965OP_DIR (int dummy ATTRIBUTE_UNUSED, int sizeflag)
252b5132
RH
14966{
14967 int seg, offset;
14968
c608c12e 14969 if (sizeflag & DFLAG)
252b5132 14970 {
c608c12e
AM
14971 offset = get32 ();
14972 seg = get16 ();
252b5132 14973 }
c608c12e
AM
14974 else
14975 {
14976 offset = get16 ();
14977 seg = get16 ();
14978 }
7d421014 14979 used_prefixes |= (prefixes & PREFIX_DATA);
d708bcba 14980 if (intel_syntax)
3f31e633 14981 sprintf (scratchbuf, "0x%x:0x%x", seg, offset);
d708bcba
AM
14982 else
14983 sprintf (scratchbuf, "$0x%x,$0x%x", seg, offset);
c608c12e 14984 oappend (scratchbuf);
252b5132
RH
14985}
14986
252b5132 14987static void
3f31e633 14988OP_OFF (int bytemode, int sizeflag)
252b5132 14989{
52b15da3 14990 bfd_vma off;
252b5132 14991
3f31e633
JB
14992 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
14993 intel_operand_size (bytemode, sizeflag);
252b5132
RH
14994 append_seg ();
14995
cb712a9e 14996 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132
RH
14997 off = get32 ();
14998 else
14999 off = get16 ();
15000
15001 if (intel_syntax)
15002 {
285ca992 15003 if (!active_seg_prefix)
252b5132 15004 {
d708bcba 15005 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
15006 oappend (":");
15007 }
15008 }
52b15da3
JH
15009 print_operand_value (scratchbuf, 1, off);
15010 oappend (scratchbuf);
15011}
6439fc28 15012
52b15da3 15013static void
3f31e633 15014OP_OFF64 (int bytemode, int sizeflag)
52b15da3
JH
15015{
15016 bfd_vma off;
15017
539e75ad
L
15018 if (address_mode != mode_64bit
15019 || (prefixes & PREFIX_ADDR))
6439fc28
AM
15020 {
15021 OP_OFF (bytemode, sizeflag);
15022 return;
15023 }
15024
3f31e633
JB
15025 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
15026 intel_operand_size (bytemode, sizeflag);
52b15da3
JH
15027 append_seg ();
15028
6608db57 15029 off = get64 ();
52b15da3
JH
15030
15031 if (intel_syntax)
15032 {
285ca992 15033 if (!active_seg_prefix)
52b15da3 15034 {
d708bcba 15035 oappend (names_seg[ds_reg - es_reg]);
52b15da3
JH
15036 oappend (":");
15037 }
15038 }
15039 print_operand_value (scratchbuf, 1, off);
252b5132
RH
15040 oappend (scratchbuf);
15041}
15042
15043static void
26ca5450 15044ptr_reg (int code, int sizeflag)
252b5132 15045{
2da11e11 15046 const char *s;
d708bcba 15047
1d9f512f 15048 *obufp++ = open_char;
20f0a1fc 15049 used_prefixes |= (prefixes & PREFIX_ADDR);
cb712a9e 15050 if (address_mode == mode_64bit)
c1a64871
JH
15051 {
15052 if (!(sizeflag & AFLAG))
db6eb5be 15053 s = names32[code - eAX_reg];
c1a64871 15054 else
db6eb5be 15055 s = names64[code - eAX_reg];
c1a64871 15056 }
52b15da3 15057 else if (sizeflag & AFLAG)
252b5132
RH
15058 s = names32[code - eAX_reg];
15059 else
15060 s = names16[code - eAX_reg];
15061 oappend (s);
1d9f512f
AM
15062 *obufp++ = close_char;
15063 *obufp = 0;
252b5132
RH
15064}
15065
15066static void
26ca5450 15067OP_ESreg (int code, int sizeflag)
252b5132 15068{
9306ca4a 15069 if (intel_syntax)
52fd6d94
JB
15070 {
15071 switch (codep[-1])
15072 {
15073 case 0x6d: /* insw/insl */
15074 intel_operand_size (z_mode, sizeflag);
15075 break;
15076 case 0xa5: /* movsw/movsl/movsq */
15077 case 0xa7: /* cmpsw/cmpsl/cmpsq */
15078 case 0xab: /* stosw/stosl */
15079 case 0xaf: /* scasw/scasl */
15080 intel_operand_size (v_mode, sizeflag);
15081 break;
15082 default:
15083 intel_operand_size (b_mode, sizeflag);
15084 }
15085 }
9ce09ba2 15086 oappend_maybe_intel ("%es:");
252b5132
RH
15087 ptr_reg (code, sizeflag);
15088}
15089
15090static void
26ca5450 15091OP_DSreg (int code, int sizeflag)
252b5132 15092{
9306ca4a 15093 if (intel_syntax)
52fd6d94
JB
15094 {
15095 switch (codep[-1])
15096 {
15097 case 0x6f: /* outsw/outsl */
15098 intel_operand_size (z_mode, sizeflag);
15099 break;
15100 case 0xa5: /* movsw/movsl/movsq */
15101 case 0xa7: /* cmpsw/cmpsl/cmpsq */
15102 case 0xad: /* lodsw/lodsl/lodsq */
15103 intel_operand_size (v_mode, sizeflag);
15104 break;
15105 default:
15106 intel_operand_size (b_mode, sizeflag);
15107 }
15108 }
285ca992
L
15109 /* Set active_seg_prefix to PREFIX_DS if it is unset so that the
15110 default segment register DS is printed. */
15111 if (!active_seg_prefix)
15112 active_seg_prefix = PREFIX_DS;
6608db57 15113 append_seg ();
252b5132
RH
15114 ptr_reg (code, sizeflag);
15115}
15116
252b5132 15117static void
26ca5450 15118OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15119{
9b60702d 15120 int add;
161a04f6 15121 if (rex & REX_R)
c4a530c5 15122 {
161a04f6 15123 USED_REX (REX_R);
c4a530c5
JB
15124 add = 8;
15125 }
cb712a9e 15126 else if (address_mode != mode_64bit && (prefixes & PREFIX_LOCK))
c4a530c5 15127 {
f16cd0d5 15128 all_prefixes[last_lock_prefix] = 0;
c4a530c5
JB
15129 used_prefixes |= PREFIX_LOCK;
15130 add = 8;
15131 }
9b60702d
L
15132 else
15133 add = 0;
7967e09e 15134 sprintf (scratchbuf, "%%cr%d", modrm.reg + add);
9ce09ba2 15135 oappend_maybe_intel (scratchbuf);
252b5132
RH
15136}
15137
252b5132 15138static void
26ca5450 15139OP_D (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15140{
9b60702d 15141 int add;
161a04f6
L
15142 USED_REX (REX_R);
15143 if (rex & REX_R)
52b15da3 15144 add = 8;
9b60702d
L
15145 else
15146 add = 0;
d708bcba 15147 if (intel_syntax)
7967e09e 15148 sprintf (scratchbuf, "db%d", modrm.reg + add);
d708bcba 15149 else
7967e09e 15150 sprintf (scratchbuf, "%%db%d", modrm.reg + add);
252b5132
RH
15151 oappend (scratchbuf);
15152}
15153
252b5132 15154static void
26ca5450 15155OP_T (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15156{
7967e09e 15157 sprintf (scratchbuf, "%%tr%d", modrm.reg);
9ce09ba2 15158 oappend_maybe_intel (scratchbuf);
252b5132
RH
15159}
15160
15161static void
6f74c397 15162OP_R (int bytemode, int sizeflag)
252b5132 15163{
68f34464
L
15164 /* Skip mod/rm byte. */
15165 MODRM_CHECK;
15166 codep++;
15167 OP_E_register (bytemode, sizeflag);
252b5132
RH
15168}
15169
15170static void
26ca5450 15171OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15172{
b9733481
L
15173 int reg = modrm.reg;
15174 const char **names;
15175
041bd2e0
JH
15176 used_prefixes |= (prefixes & PREFIX_DATA);
15177 if (prefixes & PREFIX_DATA)
20f0a1fc 15178 {
b9733481 15179 names = names_xmm;
161a04f6
L
15180 USED_REX (REX_R);
15181 if (rex & REX_R)
b9733481 15182 reg += 8;
20f0a1fc 15183 }
041bd2e0 15184 else
b9733481
L
15185 names = names_mm;
15186 oappend (names[reg]);
252b5132
RH
15187}
15188
c608c12e 15189static void
c0f3af97 15190OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
c608c12e 15191{
b9733481
L
15192 int reg = modrm.reg;
15193 const char **names;
15194
161a04f6
L
15195 USED_REX (REX_R);
15196 if (rex & REX_R)
b9733481 15197 reg += 8;
43234a1e
L
15198 if (vex.evex)
15199 {
15200 if (!vex.r)
15201 reg += 16;
15202 }
15203
539f890d
L
15204 if (need_vex
15205 && bytemode != xmm_mode
43234a1e
L
15206 && bytemode != xmmq_mode
15207 && bytemode != evex_half_bcst_xmmq_mode
15208 && bytemode != ymm_mode
539f890d 15209 && bytemode != scalar_mode)
c0f3af97
L
15210 {
15211 switch (vex.length)
15212 {
15213 case 128:
b9733481 15214 names = names_xmm;
c0f3af97
L
15215 break;
15216 case 256:
5fc35d96
IT
15217 if (vex.w
15218 || (bytemode != vex_vsib_q_w_dq_mode
15219 && bytemode != vex_vsib_q_w_d_mode))
6c30d220
L
15220 names = names_ymm;
15221 else
15222 names = names_xmm;
c0f3af97 15223 break;
43234a1e
L
15224 case 512:
15225 names = names_zmm;
15226 break;
c0f3af97
L
15227 default:
15228 abort ();
15229 }
15230 }
43234a1e
L
15231 else if (bytemode == xmmq_mode
15232 || bytemode == evex_half_bcst_xmmq_mode)
15233 {
15234 switch (vex.length)
15235 {
15236 case 128:
15237 case 256:
15238 names = names_xmm;
15239 break;
15240 case 512:
15241 names = names_ymm;
15242 break;
15243 default:
15244 abort ();
15245 }
15246 }
15247 else if (bytemode == ymm_mode)
15248 names = names_ymm;
c0f3af97 15249 else
b9733481
L
15250 names = names_xmm;
15251 oappend (names[reg]);
c608c12e
AM
15252}
15253
252b5132 15254static void
26ca5450 15255OP_EM (int bytemode, int sizeflag)
252b5132 15256{
b9733481
L
15257 int reg;
15258 const char **names;
15259
7967e09e 15260 if (modrm.mod != 3)
252b5132 15261 {
b6169b20
L
15262 if (intel_syntax
15263 && (bytemode == v_mode || bytemode == v_swap_mode))
9306ca4a
JB
15264 {
15265 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
15266 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 15267 }
252b5132
RH
15268 OP_E (bytemode, sizeflag);
15269 return;
15270 }
15271
b6169b20
L
15272 if ((sizeflag & SUFFIX_ALWAYS) && bytemode == v_swap_mode)
15273 swap_operand ();
15274
6608db57 15275 /* Skip mod/rm byte. */
4bba6815 15276 MODRM_CHECK;
252b5132 15277 codep++;
041bd2e0 15278 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 15279 reg = modrm.rm;
041bd2e0 15280 if (prefixes & PREFIX_DATA)
20f0a1fc 15281 {
b9733481 15282 names = names_xmm;
161a04f6
L
15283 USED_REX (REX_B);
15284 if (rex & REX_B)
b9733481 15285 reg += 8;
20f0a1fc 15286 }
041bd2e0 15287 else
b9733481
L
15288 names = names_mm;
15289 oappend (names[reg]);
252b5132
RH
15290}
15291
246c51aa
L
15292/* cvt* are the only instructions in sse2 which have
15293 both SSE and MMX operands and also have 0x66 prefix
15294 in their opcode. 0x66 was originally used to differentiate
15295 between SSE and MMX instruction(operands). So we have to handle the
4d9567e0
MM
15296 cvt* separately using OP_EMC and OP_MXC */
15297static void
15298OP_EMC (int bytemode, int sizeflag)
15299{
7967e09e 15300 if (modrm.mod != 3)
4d9567e0
MM
15301 {
15302 if (intel_syntax && bytemode == v_mode)
15303 {
15304 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
15305 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 15306 }
4d9567e0
MM
15307 OP_E (bytemode, sizeflag);
15308 return;
15309 }
246c51aa 15310
4d9567e0
MM
15311 /* Skip mod/rm byte. */
15312 MODRM_CHECK;
15313 codep++;
15314 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 15315 oappend (names_mm[modrm.rm]);
4d9567e0
MM
15316}
15317
15318static void
15319OP_MXC (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15320{
15321 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 15322 oappend (names_mm[modrm.reg]);
4d9567e0
MM
15323}
15324
c608c12e 15325static void
26ca5450 15326OP_EX (int bytemode, int sizeflag)
c608c12e 15327{
b9733481
L
15328 int reg;
15329 const char **names;
d6f574e0
L
15330
15331 /* Skip mod/rm byte. */
15332 MODRM_CHECK;
15333 codep++;
15334
7967e09e 15335 if (modrm.mod != 3)
c608c12e 15336 {
c1e679ec 15337 OP_E_memory (bytemode, sizeflag);
c608c12e
AM
15338 return;
15339 }
d6f574e0 15340
b9733481 15341 reg = modrm.rm;
161a04f6
L
15342 USED_REX (REX_B);
15343 if (rex & REX_B)
b9733481 15344 reg += 8;
43234a1e
L
15345 if (vex.evex)
15346 {
15347 USED_REX (REX_X);
15348 if ((rex & REX_X))
15349 reg += 16;
15350 }
c608c12e 15351
b6169b20 15352 if ((sizeflag & SUFFIX_ALWAYS)
fa99fab2
L
15353 && (bytemode == x_swap_mode
15354 || bytemode == d_swap_mode
7bb15c6f 15355 || bytemode == d_scalar_swap_mode
539f890d
L
15356 || bytemode == q_swap_mode
15357 || bytemode == q_scalar_swap_mode))
b6169b20
L
15358 swap_operand ();
15359
c0f3af97
L
15360 if (need_vex
15361 && bytemode != xmm_mode
6c30d220
L
15362 && bytemode != xmmdw_mode
15363 && bytemode != xmmqd_mode
15364 && bytemode != xmm_mb_mode
15365 && bytemode != xmm_mw_mode
15366 && bytemode != xmm_md_mode
15367 && bytemode != xmm_mq_mode
43234a1e 15368 && bytemode != xmm_mdq_mode
539f890d 15369 && bytemode != xmmq_mode
43234a1e
L
15370 && bytemode != evex_half_bcst_xmmq_mode
15371 && bytemode != ymm_mode
539f890d 15372 && bytemode != d_scalar_mode
7bb15c6f 15373 && bytemode != d_scalar_swap_mode
539f890d 15374 && bytemode != q_scalar_mode
1c480963
L
15375 && bytemode != q_scalar_swap_mode
15376 && bytemode != vex_scalar_w_dq_mode)
c0f3af97
L
15377 {
15378 switch (vex.length)
15379 {
15380 case 128:
b9733481 15381 names = names_xmm;
c0f3af97
L
15382 break;
15383 case 256:
b9733481 15384 names = names_ymm;
c0f3af97 15385 break;
43234a1e
L
15386 case 512:
15387 names = names_zmm;
15388 break;
c0f3af97
L
15389 default:
15390 abort ();
15391 }
15392 }
43234a1e
L
15393 else if (bytemode == xmmq_mode
15394 || bytemode == evex_half_bcst_xmmq_mode)
15395 {
15396 switch (vex.length)
15397 {
15398 case 128:
15399 case 256:
15400 names = names_xmm;
15401 break;
15402 case 512:
15403 names = names_ymm;
15404 break;
15405 default:
15406 abort ();
15407 }
15408 }
15409 else if (bytemode == ymm_mode)
15410 names = names_ymm;
c0f3af97 15411 else
b9733481
L
15412 names = names_xmm;
15413 oappend (names[reg]);
c608c12e
AM
15414}
15415
252b5132 15416static void
26ca5450 15417OP_MS (int bytemode, int sizeflag)
252b5132 15418{
7967e09e 15419 if (modrm.mod == 3)
2da11e11
AM
15420 OP_EM (bytemode, sizeflag);
15421 else
6608db57 15422 BadOp ();
252b5132
RH
15423}
15424
992aaec9 15425static void
26ca5450 15426OP_XS (int bytemode, int sizeflag)
992aaec9 15427{
7967e09e 15428 if (modrm.mod == 3)
992aaec9
AM
15429 OP_EX (bytemode, sizeflag);
15430 else
6608db57 15431 BadOp ();
992aaec9
AM
15432}
15433
cc0ec051
AM
15434static void
15435OP_M (int bytemode, int sizeflag)
15436{
7967e09e 15437 if (modrm.mod == 3)
75413a22
L
15438 /* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */
15439 BadOp ();
cc0ec051
AM
15440 else
15441 OP_E (bytemode, sizeflag);
15442}
15443
15444static void
15445OP_0f07 (int bytemode, int sizeflag)
15446{
7967e09e 15447 if (modrm.mod != 3 || modrm.rm != 0)
cc0ec051
AM
15448 BadOp ();
15449 else
15450 OP_E (bytemode, sizeflag);
15451}
15452
46e883c5 15453/* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
246c51aa 15454 32bit mode and "xchg %rax,%rax" in 64bit mode. */
46e883c5 15455
cc0ec051 15456static void
46e883c5 15457NOP_Fixup1 (int bytemode, int sizeflag)
cc0ec051 15458{
8b38ad71
L
15459 if ((prefixes & PREFIX_DATA) != 0
15460 || (rex != 0
15461 && rex != 0x48
15462 && address_mode == mode_64bit))
46e883c5
L
15463 OP_REG (bytemode, sizeflag);
15464 else
15465 strcpy (obuf, "nop");
15466}
15467
15468static void
15469NOP_Fixup2 (int bytemode, int sizeflag)
15470{
8b38ad71
L
15471 if ((prefixes & PREFIX_DATA) != 0
15472 || (rex != 0
15473 && rex != 0x48
15474 && address_mode == mode_64bit))
46e883c5 15475 OP_IMREG (bytemode, sizeflag);
cc0ec051
AM
15476}
15477
84037f8c 15478static const char *const Suffix3DNow[] = {
252b5132
RH
15479/* 00 */ NULL, NULL, NULL, NULL,
15480/* 04 */ NULL, NULL, NULL, NULL,
15481/* 08 */ NULL, NULL, NULL, NULL,
9e525108 15482/* 0C */ "pi2fw", "pi2fd", NULL, NULL,
252b5132
RH
15483/* 10 */ NULL, NULL, NULL, NULL,
15484/* 14 */ NULL, NULL, NULL, NULL,
15485/* 18 */ NULL, NULL, NULL, NULL,
9e525108 15486/* 1C */ "pf2iw", "pf2id", NULL, NULL,
252b5132
RH
15487/* 20 */ NULL, NULL, NULL, NULL,
15488/* 24 */ NULL, NULL, NULL, NULL,
15489/* 28 */ NULL, NULL, NULL, NULL,
15490/* 2C */ NULL, NULL, NULL, NULL,
15491/* 30 */ NULL, NULL, NULL, NULL,
15492/* 34 */ NULL, NULL, NULL, NULL,
15493/* 38 */ NULL, NULL, NULL, NULL,
15494/* 3C */ NULL, NULL, NULL, NULL,
15495/* 40 */ NULL, NULL, NULL, NULL,
15496/* 44 */ NULL, NULL, NULL, NULL,
15497/* 48 */ NULL, NULL, NULL, NULL,
15498/* 4C */ NULL, NULL, NULL, NULL,
15499/* 50 */ NULL, NULL, NULL, NULL,
15500/* 54 */ NULL, NULL, NULL, NULL,
15501/* 58 */ NULL, NULL, NULL, NULL,
15502/* 5C */ NULL, NULL, NULL, NULL,
15503/* 60 */ NULL, NULL, NULL, NULL,
15504/* 64 */ NULL, NULL, NULL, NULL,
15505/* 68 */ NULL, NULL, NULL, NULL,
15506/* 6C */ NULL, NULL, NULL, NULL,
15507/* 70 */ NULL, NULL, NULL, NULL,
15508/* 74 */ NULL, NULL, NULL, NULL,
15509/* 78 */ NULL, NULL, NULL, NULL,
15510/* 7C */ NULL, NULL, NULL, NULL,
15511/* 80 */ NULL, NULL, NULL, NULL,
15512/* 84 */ NULL, NULL, NULL, NULL,
9e525108
AM
15513/* 88 */ NULL, NULL, "pfnacc", NULL,
15514/* 8C */ NULL, NULL, "pfpnacc", NULL,
252b5132
RH
15515/* 90 */ "pfcmpge", NULL, NULL, NULL,
15516/* 94 */ "pfmin", NULL, "pfrcp", "pfrsqrt",
15517/* 98 */ NULL, NULL, "pfsub", NULL,
15518/* 9C */ NULL, NULL, "pfadd", NULL,
15519/* A0 */ "pfcmpgt", NULL, NULL, NULL,
15520/* A4 */ "pfmax", NULL, "pfrcpit1", "pfrsqit1",
15521/* A8 */ NULL, NULL, "pfsubr", NULL,
15522/* AC */ NULL, NULL, "pfacc", NULL,
15523/* B0 */ "pfcmpeq", NULL, NULL, NULL,
9beff690 15524/* B4 */ "pfmul", NULL, "pfrcpit2", "pmulhrw",
9e525108 15525/* B8 */ NULL, NULL, NULL, "pswapd",
252b5132
RH
15526/* BC */ NULL, NULL, NULL, "pavgusb",
15527/* C0 */ NULL, NULL, NULL, NULL,
15528/* C4 */ NULL, NULL, NULL, NULL,
15529/* C8 */ NULL, NULL, NULL, NULL,
15530/* CC */ NULL, NULL, NULL, NULL,
15531/* D0 */ NULL, NULL, NULL, NULL,
15532/* D4 */ NULL, NULL, NULL, NULL,
15533/* D8 */ NULL, NULL, NULL, NULL,
15534/* DC */ NULL, NULL, NULL, NULL,
15535/* E0 */ NULL, NULL, NULL, NULL,
15536/* E4 */ NULL, NULL, NULL, NULL,
15537/* E8 */ NULL, NULL, NULL, NULL,
15538/* EC */ NULL, NULL, NULL, NULL,
15539/* F0 */ NULL, NULL, NULL, NULL,
15540/* F4 */ NULL, NULL, NULL, NULL,
15541/* F8 */ NULL, NULL, NULL, NULL,
15542/* FC */ NULL, NULL, NULL, NULL,
15543};
15544
15545static void
26ca5450 15546OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132
RH
15547{
15548 const char *mnemonic;
15549
15550 FETCH_DATA (the_info, codep + 1);
15551 /* AMD 3DNow! instructions are specified by an opcode suffix in the
15552 place where an 8-bit immediate would normally go. ie. the last
15553 byte of the instruction. */
ea397f5b 15554 obufp = mnemonicendp;
c608c12e 15555 mnemonic = Suffix3DNow[*codep++ & 0xff];
252b5132 15556 if (mnemonic)
2da11e11 15557 oappend (mnemonic);
252b5132
RH
15558 else
15559 {
15560 /* Since a variable sized modrm/sib chunk is between the start
15561 of the opcode (0x0f0f) and the opcode suffix, we need to do
15562 all the modrm processing first, and don't know until now that
15563 we have a bad opcode. This necessitates some cleaning up. */
ce518a5f
L
15564 op_out[0][0] = '\0';
15565 op_out[1][0] = '\0';
6608db57 15566 BadOp ();
252b5132 15567 }
ea397f5b 15568 mnemonicendp = obufp;
252b5132 15569}
c608c12e 15570
ea397f5b
L
15571static struct op simd_cmp_op[] =
15572{
15573 { STRING_COMMA_LEN ("eq") },
15574 { STRING_COMMA_LEN ("lt") },
15575 { STRING_COMMA_LEN ("le") },
15576 { STRING_COMMA_LEN ("unord") },
15577 { STRING_COMMA_LEN ("neq") },
15578 { STRING_COMMA_LEN ("nlt") },
15579 { STRING_COMMA_LEN ("nle") },
15580 { STRING_COMMA_LEN ("ord") }
c608c12e
AM
15581};
15582
15583static void
ad19981d 15584CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
c608c12e
AM
15585{
15586 unsigned int cmp_type;
15587
15588 FETCH_DATA (the_info, codep + 1);
15589 cmp_type = *codep++ & 0xff;
c0f3af97 15590 if (cmp_type < ARRAY_SIZE (simd_cmp_op))
c608c12e 15591 {
ad19981d 15592 char suffix [3];
ea397f5b 15593 char *p = mnemonicendp - 2;
ad19981d
L
15594 suffix[0] = p[0];
15595 suffix[1] = p[1];
15596 suffix[2] = '\0';
ea397f5b
L
15597 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
15598 mnemonicendp += simd_cmp_op[cmp_type].len;
c608c12e
AM
15599 }
15600 else
15601 {
ad19981d
L
15602 /* We have a reserved extension byte. Output it directly. */
15603 scratchbuf[0] = '$';
15604 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 15605 oappend_maybe_intel (scratchbuf);
ad19981d 15606 scratchbuf[0] = '\0';
c608c12e
AM
15607 }
15608}
15609
9916071f
AP
15610static void
15611OP_Mwaitx (int bytemode ATTRIBUTE_UNUSED,
15612 int sizeflag ATTRIBUTE_UNUSED)
15613{
15614 /* mwaitx %eax,%ecx,%ebx */
15615 if (!intel_syntax)
15616 {
15617 const char **names = (address_mode == mode_64bit
15618 ? names64 : names32);
15619 strcpy (op_out[0], names[0]);
15620 strcpy (op_out[1], names[1]);
15621 strcpy (op_out[2], names[3]);
15622 two_source_ops = 1;
15623 }
15624 /* Skip mod/rm byte. */
15625 MODRM_CHECK;
15626 codep++;
15627}
15628
ca164297 15629static void
b844680a
L
15630OP_Mwait (int bytemode ATTRIBUTE_UNUSED,
15631 int sizeflag ATTRIBUTE_UNUSED)
15632{
15633 /* mwait %eax,%ecx */
15634 if (!intel_syntax)
15635 {
15636 const char **names = (address_mode == mode_64bit
15637 ? names64 : names32);
15638 strcpy (op_out[0], names[0]);
15639 strcpy (op_out[1], names[1]);
15640 two_source_ops = 1;
15641 }
15642 /* Skip mod/rm byte. */
15643 MODRM_CHECK;
15644 codep++;
15645}
15646
15647static void
15648OP_Monitor (int bytemode ATTRIBUTE_UNUSED,
15649 int sizeflag ATTRIBUTE_UNUSED)
ca164297 15650{
b844680a
L
15651 /* monitor %eax,%ecx,%edx" */
15652 if (!intel_syntax)
ca164297 15653 {
b844680a 15654 const char **op1_names;
cb712a9e
L
15655 const char **names = (address_mode == mode_64bit
15656 ? names64 : names32);
1d9f512f 15657
b844680a
L
15658 if (!(prefixes & PREFIX_ADDR))
15659 op1_names = (address_mode == mode_16bit
15660 ? names16 : names);
ca164297
L
15661 else
15662 {
b844680a 15663 /* Remove "addr16/addr32". */
f16cd0d5 15664 all_prefixes[last_addr_prefix] = 0;
b844680a
L
15665 op1_names = (address_mode != mode_32bit
15666 ? names32 : names16);
15667 used_prefixes |= PREFIX_ADDR;
ca164297 15668 }
b844680a
L
15669 strcpy (op_out[0], op1_names[0]);
15670 strcpy (op_out[1], names[1]);
15671 strcpy (op_out[2], names[2]);
15672 two_source_ops = 1;
ca164297 15673 }
b844680a
L
15674 /* Skip mod/rm byte. */
15675 MODRM_CHECK;
15676 codep++;
30123838
JB
15677}
15678
6608db57
KH
15679static void
15680BadOp (void)
2da11e11 15681{
6608db57
KH
15682 /* Throw away prefixes and 1st. opcode byte. */
15683 codep = insn_codep + 1;
2da11e11
AM
15684 oappend ("(bad)");
15685}
4cc91dba 15686
35c52694
L
15687static void
15688REP_Fixup (int bytemode, int sizeflag)
15689{
15690 /* The 0xf3 prefix should be displayed as "rep" for ins, outs, movs,
15691 lods and stos. */
35c52694 15692 if (prefixes & PREFIX_REPZ)
f16cd0d5 15693 all_prefixes[last_repz_prefix] = REP_PREFIX;
35c52694
L
15694
15695 switch (bytemode)
15696 {
15697 case al_reg:
15698 case eAX_reg:
15699 case indir_dx_reg:
15700 OP_IMREG (bytemode, sizeflag);
15701 break;
15702 case eDI_reg:
15703 OP_ESreg (bytemode, sizeflag);
15704 break;
15705 case eSI_reg:
15706 OP_DSreg (bytemode, sizeflag);
15707 break;
15708 default:
15709 abort ();
15710 break;
15711 }
15712}
f5804c90 15713
7e8b059b
L
15714/* For BND-prefixed instructions 0xF2 prefix should be displayed as
15715 "bnd". */
15716
15717static void
15718BND_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15719{
15720 if (prefixes & PREFIX_REPNZ)
15721 all_prefixes[last_repnz_prefix] = BND_PREFIX;
15722}
15723
04ef582a
L
15724/* For NOTRACK-prefixed instructions, 0x3E prefix should be displayed as
15725 "notrack". */
15726
15727static void
15728NOTRACK_Fixup (int bytemode ATTRIBUTE_UNUSED,
15729 int sizeflag ATTRIBUTE_UNUSED)
15730{
9fef80d6 15731 if (active_seg_prefix == PREFIX_DS
04ef582a
L
15732 && (address_mode != mode_64bit || last_data_prefix < 0))
15733 {
4e9ac44a 15734 /* NOTRACK prefix is only valid on indirect branch instructions.
9fef80d6 15735 NB: DATA prefix is unsupported for Intel64. */
04ef582a
L
15736 active_seg_prefix = 0;
15737 all_prefixes[last_seg_prefix] = NOTRACK_PREFIX;
15738 }
15739}
15740
42164a71
L
15741/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
15742 "xacquire"/"xrelease" for memory operand if there is a LOCK prefix.
15743 */
15744
15745static void
15746HLE_Fixup1 (int bytemode, int sizeflag)
15747{
15748 if (modrm.mod != 3
15749 && (prefixes & PREFIX_LOCK) != 0)
15750 {
15751 if (prefixes & PREFIX_REPZ)
15752 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15753 if (prefixes & PREFIX_REPNZ)
15754 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
15755 }
15756
15757 OP_E (bytemode, sizeflag);
15758}
15759
15760/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
15761 "xacquire"/"xrelease" for memory operand. No check for LOCK prefix.
15762 */
15763
15764static void
15765HLE_Fixup2 (int bytemode, int sizeflag)
15766{
15767 if (modrm.mod != 3)
15768 {
15769 if (prefixes & PREFIX_REPZ)
15770 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15771 if (prefixes & PREFIX_REPNZ)
15772 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
15773 }
15774
15775 OP_E (bytemode, sizeflag);
15776}
15777
15778/* Similar to OP_E. But the 0xf3 prefixes should be displayed as
15779 "xrelease" for memory operand. No check for LOCK prefix. */
15780
15781static void
15782HLE_Fixup3 (int bytemode, int sizeflag)
15783{
15784 if (modrm.mod != 3
15785 && last_repz_prefix > last_repnz_prefix
15786 && (prefixes & PREFIX_REPZ) != 0)
15787 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15788
15789 OP_E (bytemode, sizeflag);
15790}
15791
f5804c90
L
15792static void
15793CMPXCHG8B_Fixup (int bytemode, int sizeflag)
15794{
161a04f6
L
15795 USED_REX (REX_W);
15796 if (rex & REX_W)
f5804c90
L
15797 {
15798 /* Change cmpxchg8b to cmpxchg16b. */
ea397f5b
L
15799 char *p = mnemonicendp - 2;
15800 mnemonicendp = stpcpy (p, "16b");
fb9c77c7 15801 bytemode = o_mode;
f5804c90 15802 }
42164a71
L
15803 else if ((prefixes & PREFIX_LOCK) != 0)
15804 {
15805 if (prefixes & PREFIX_REPZ)
15806 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15807 if (prefixes & PREFIX_REPNZ)
15808 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
15809 }
15810
f5804c90
L
15811 OP_M (bytemode, sizeflag);
15812}
42903f7f
L
15813
15814static void
15815XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED)
15816{
b9733481
L
15817 const char **names;
15818
c0f3af97
L
15819 if (need_vex)
15820 {
15821 switch (vex.length)
15822 {
15823 case 128:
b9733481 15824 names = names_xmm;
c0f3af97
L
15825 break;
15826 case 256:
b9733481 15827 names = names_ymm;
c0f3af97
L
15828 break;
15829 default:
15830 abort ();
15831 }
15832 }
15833 else
b9733481
L
15834 names = names_xmm;
15835 oappend (names[reg]);
42903f7f 15836}
381d071f
L
15837
15838static void
15839CRC32_Fixup (int bytemode, int sizeflag)
15840{
15841 /* Add proper suffix to "crc32". */
ea397f5b 15842 char *p = mnemonicendp;
381d071f
L
15843
15844 switch (bytemode)
15845 {
15846 case b_mode:
20592a94 15847 if (intel_syntax)
ea397f5b 15848 goto skip;
20592a94 15849
381d071f
L
15850 *p++ = 'b';
15851 break;
15852 case v_mode:
20592a94 15853 if (intel_syntax)
ea397f5b 15854 goto skip;
20592a94 15855
381d071f
L
15856 USED_REX (REX_W);
15857 if (rex & REX_W)
15858 *p++ = 'q';
7bb15c6f 15859 else
f16cd0d5
L
15860 {
15861 if (sizeflag & DFLAG)
15862 *p++ = 'l';
15863 else
15864 *p++ = 'w';
15865 used_prefixes |= (prefixes & PREFIX_DATA);
15866 }
381d071f
L
15867 break;
15868 default:
15869 oappend (INTERNAL_DISASSEMBLER_ERROR);
15870 break;
15871 }
ea397f5b 15872 mnemonicendp = p;
381d071f
L
15873 *p = '\0';
15874
ea397f5b 15875skip:
381d071f
L
15876 if (modrm.mod == 3)
15877 {
15878 int add;
15879
15880 /* Skip mod/rm byte. */
15881 MODRM_CHECK;
15882 codep++;
15883
15884 USED_REX (REX_B);
15885 add = (rex & REX_B) ? 8 : 0;
15886 if (bytemode == b_mode)
15887 {
15888 USED_REX (0);
15889 if (rex)
15890 oappend (names8rex[modrm.rm + add]);
15891 else
15892 oappend (names8[modrm.rm + add]);
15893 }
15894 else
15895 {
15896 USED_REX (REX_W);
15897 if (rex & REX_W)
15898 oappend (names64[modrm.rm + add]);
15899 else if ((prefixes & PREFIX_DATA))
15900 oappend (names16[modrm.rm + add]);
15901 else
15902 oappend (names32[modrm.rm + add]);
15903 }
15904 }
15905 else
9344ff29 15906 OP_E (bytemode, sizeflag);
381d071f 15907}
85f10a01 15908
eacc9c89
L
15909static void
15910FXSAVE_Fixup (int bytemode, int sizeflag)
15911{
15912 /* Add proper suffix to "fxsave" and "fxrstor". */
15913 USED_REX (REX_W);
15914 if (rex & REX_W)
15915 {
15916 char *p = mnemonicendp;
15917 *p++ = '6';
15918 *p++ = '4';
15919 *p = '\0';
15920 mnemonicendp = p;
15921 }
15922 OP_M (bytemode, sizeflag);
15923}
15924
15c7c1d8
JB
15925static void
15926PCMPESTR_Fixup (int bytemode, int sizeflag)
15927{
15928 /* Add proper suffix to "{,v}pcmpestr{i,m}". */
15929 if (!intel_syntax)
15930 {
15931 char *p = mnemonicendp;
15932
15933 USED_REX (REX_W);
15934 if (rex & REX_W)
15935 *p++ = 'q';
15936 else if (sizeflag & SUFFIX_ALWAYS)
15937 *p++ = 'l';
15938
15939 *p = '\0';
15940 mnemonicendp = p;
15941 }
15942
15943 OP_EX (bytemode, sizeflag);
15944}
15945
c0f3af97
L
15946/* Display the destination register operand for instructions with
15947 VEX. */
15948
15949static void
15950OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
15951{
539f890d 15952 int reg;
b9733481
L
15953 const char **names;
15954
c0f3af97
L
15955 if (!need_vex)
15956 abort ();
15957
15958 if (!need_vex_reg)
15959 return;
15960
539f890d 15961 reg = vex.register_specifier;
63c6fc6c 15962 vex.register_specifier = 0;
5f847646
JB
15963 if (address_mode != mode_64bit)
15964 reg &= 7;
15965 else if (vex.evex && !vex.v)
15966 reg += 16;
43234a1e 15967
539f890d
L
15968 if (bytemode == vex_scalar_mode)
15969 {
15970 oappend (names_xmm[reg]);
15971 return;
15972 }
15973
c0f3af97
L
15974 switch (vex.length)
15975 {
15976 case 128:
15977 switch (bytemode)
15978 {
15979 case vex_mode:
15980 case vex128_mode:
6c30d220 15981 case vex_vsib_q_w_dq_mode:
5fc35d96 15982 case vex_vsib_q_w_d_mode:
cb21baef
L
15983 names = names_xmm;
15984 break;
15985 case dq_mode:
390a6789 15986 if (rex & REX_W)
cb21baef
L
15987 names = names64;
15988 else
15989 names = names32;
c0f3af97 15990 break;
1ba585e8 15991 case mask_bd_mode:
43234a1e 15992 case mask_mode:
9889cbb1
L
15993 if (reg > 0x7)
15994 {
15995 oappend ("(bad)");
15996 return;
15997 }
43234a1e
L
15998 names = names_mask;
15999 break;
c0f3af97
L
16000 default:
16001 abort ();
16002 return;
16003 }
c0f3af97
L
16004 break;
16005 case 256:
16006 switch (bytemode)
16007 {
16008 case vex_mode:
16009 case vex256_mode:
6c30d220
L
16010 names = names_ymm;
16011 break;
16012 case vex_vsib_q_w_dq_mode:
5fc35d96 16013 case vex_vsib_q_w_d_mode:
6c30d220 16014 names = vex.w ? names_ymm : names_xmm;
c0f3af97 16015 break;
1ba585e8 16016 case mask_bd_mode:
43234a1e 16017 case mask_mode:
9889cbb1
L
16018 if (reg > 0x7)
16019 {
16020 oappend ("(bad)");
16021 return;
16022 }
43234a1e
L
16023 names = names_mask;
16024 break;
c0f3af97 16025 default:
a37a2806
NC
16026 /* See PR binutils/20893 for a reproducer. */
16027 oappend ("(bad)");
c0f3af97
L
16028 return;
16029 }
c0f3af97 16030 break;
43234a1e
L
16031 case 512:
16032 names = names_zmm;
16033 break;
c0f3af97
L
16034 default:
16035 abort ();
16036 break;
16037 }
539f890d 16038 oappend (names[reg]);
c0f3af97
L
16039}
16040
922d8de8
DR
16041/* Get the VEX immediate byte without moving codep. */
16042
16043static unsigned char
ccc5981b 16044get_vex_imm8 (int sizeflag, int opnum)
922d8de8
DR
16045{
16046 int bytes_before_imm = 0;
16047
922d8de8
DR
16048 if (modrm.mod != 3)
16049 {
16050 /* There are SIB/displacement bytes. */
16051 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
6c067bbb 16052 {
922d8de8 16053 /* 32/64 bit address mode */
6c067bbb 16054 int base = modrm.rm;
922d8de8
DR
16055
16056 /* Check SIB byte. */
6c067bbb
RM
16057 if (base == 4)
16058 {
16059 FETCH_DATA (the_info, codep + 1);
16060 base = *codep & 7;
16061 /* When decoding the third source, don't increase
16062 bytes_before_imm as this has already been incremented
16063 by one in OP_E_memory while decoding the second
16064 source operand. */
16065 if (opnum == 0)
16066 bytes_before_imm++;
16067 }
16068
16069 /* Don't increase bytes_before_imm when decoding the third source,
16070 it has already been incremented by OP_E_memory while decoding
16071 the second source operand. */
16072 if (opnum == 0)
16073 {
16074 switch (modrm.mod)
16075 {
16076 case 0:
16077 /* When modrm.rm == 5 or modrm.rm == 4 and base in
16078 SIB == 5, there is a 4 byte displacement. */
16079 if (base != 5)
16080 /* No displacement. */
16081 break;
1a0670f3 16082 /* Fall through. */
6c067bbb
RM
16083 case 2:
16084 /* 4 byte displacement. */
16085 bytes_before_imm += 4;
16086 break;
16087 case 1:
16088 /* 1 byte displacement. */
16089 bytes_before_imm++;
16090 break;
16091 }
16092 }
16093 }
922d8de8 16094 else
02e647f9
SP
16095 {
16096 /* 16 bit address mode */
6c067bbb
RM
16097 /* Don't increase bytes_before_imm when decoding the third source,
16098 it has already been incremented by OP_E_memory while decoding
16099 the second source operand. */
16100 if (opnum == 0)
16101 {
02e647f9
SP
16102 switch (modrm.mod)
16103 {
16104 case 0:
16105 /* When modrm.rm == 6, there is a 2 byte displacement. */
16106 if (modrm.rm != 6)
16107 /* No displacement. */
16108 break;
1a0670f3 16109 /* Fall through. */
02e647f9
SP
16110 case 2:
16111 /* 2 byte displacement. */
16112 bytes_before_imm += 2;
16113 break;
16114 case 1:
16115 /* 1 byte displacement: when decoding the third source,
16116 don't increase bytes_before_imm as this has already
16117 been incremented by one in OP_E_memory while decoding
16118 the second source operand. */
16119 if (opnum == 0)
16120 bytes_before_imm++;
ccc5981b 16121
02e647f9
SP
16122 break;
16123 }
922d8de8
DR
16124 }
16125 }
16126 }
16127
16128 FETCH_DATA (the_info, codep + bytes_before_imm + 1);
16129 return codep [bytes_before_imm];
16130}
16131
16132static void
16133OP_EX_VexReg (int bytemode, int sizeflag, int reg)
16134{
b9733481
L
16135 const char **names;
16136
922d8de8
DR
16137 if (reg == -1 && modrm.mod != 3)
16138 {
16139 OP_E_memory (bytemode, sizeflag);
16140 return;
16141 }
16142 else
16143 {
16144 if (reg == -1)
16145 {
16146 reg = modrm.rm;
16147 USED_REX (REX_B);
16148 if (rex & REX_B)
16149 reg += 8;
16150 }
5f847646
JB
16151 if (address_mode != mode_64bit)
16152 reg &= 7;
922d8de8
DR
16153 }
16154
16155 switch (vex.length)
16156 {
16157 case 128:
b9733481 16158 names = names_xmm;
922d8de8
DR
16159 break;
16160 case 256:
b9733481 16161 names = names_ymm;
922d8de8
DR
16162 break;
16163 default:
16164 abort ();
16165 }
b9733481 16166 oappend (names[reg]);
922d8de8
DR
16167}
16168
a683cc34
SP
16169static void
16170OP_EX_VexImmW (int bytemode, int sizeflag)
16171{
16172 int reg = -1;
16173 static unsigned char vex_imm8;
16174
16175 if (vex_w_done == 0)
16176 {
16177 vex_w_done = 1;
16178
16179 /* Skip mod/rm byte. */
16180 MODRM_CHECK;
16181 codep++;
16182
16183 vex_imm8 = get_vex_imm8 (sizeflag, 0);
16184
16185 if (vex.w)
16186 reg = vex_imm8 >> 4;
16187
16188 OP_EX_VexReg (bytemode, sizeflag, reg);
16189 }
16190 else if (vex_w_done == 1)
16191 {
16192 vex_w_done = 2;
16193
16194 if (!vex.w)
16195 reg = vex_imm8 >> 4;
16196
16197 OP_EX_VexReg (bytemode, sizeflag, reg);
16198 }
16199 else
16200 {
16201 /* Output the imm8 directly. */
16202 scratchbuf[0] = '$';
16203 print_operand_value (scratchbuf + 1, 1, vex_imm8 & 0xf);
9ce09ba2 16204 oappend_maybe_intel (scratchbuf);
a683cc34
SP
16205 scratchbuf[0] = '\0';
16206 codep++;
16207 }
16208}
16209
5dd85c99
SP
16210static void
16211OP_Vex_2src (int bytemode, int sizeflag)
16212{
16213 if (modrm.mod == 3)
16214 {
b9733481 16215 int reg = modrm.rm;
5dd85c99 16216 USED_REX (REX_B);
b9733481
L
16217 if (rex & REX_B)
16218 reg += 8;
16219 oappend (names_xmm[reg]);
5dd85c99
SP
16220 }
16221 else
16222 {
16223 if (intel_syntax
16224 && (bytemode == v_mode || bytemode == v_swap_mode))
16225 {
16226 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
16227 used_prefixes |= (prefixes & PREFIX_DATA);
16228 }
16229 OP_E (bytemode, sizeflag);
16230 }
16231}
16232
16233static void
16234OP_Vex_2src_1 (int bytemode, int sizeflag)
16235{
16236 if (modrm.mod == 3)
16237 {
16238 /* Skip mod/rm byte. */
16239 MODRM_CHECK;
16240 codep++;
16241 }
16242
16243 if (vex.w)
5f847646
JB
16244 {
16245 unsigned int reg = vex.register_specifier;
63c6fc6c 16246 vex.register_specifier = 0;
5f847646
JB
16247
16248 if (address_mode != mode_64bit)
16249 reg &= 7;
16250 oappend (names_xmm[reg]);
16251 }
5dd85c99
SP
16252 else
16253 OP_Vex_2src (bytemode, sizeflag);
16254}
16255
16256static void
16257OP_Vex_2src_2 (int bytemode, int sizeflag)
16258{
16259 if (vex.w)
16260 OP_Vex_2src (bytemode, sizeflag);
16261 else
5f847646
JB
16262 {
16263 unsigned int reg = vex.register_specifier;
63c6fc6c 16264 vex.register_specifier = 0;
5f847646
JB
16265
16266 if (address_mode != mode_64bit)
16267 reg &= 7;
16268 oappend (names_xmm[reg]);
16269 }
5dd85c99
SP
16270}
16271
922d8de8
DR
16272static void
16273OP_EX_VexW (int bytemode, int sizeflag)
16274{
16275 int reg = -1;
16276
16277 if (!vex_w_done)
16278 {
41effecb
SP
16279 /* Skip mod/rm byte. */
16280 MODRM_CHECK;
16281 codep++;
16282
922d8de8 16283 if (vex.w)
ccc5981b 16284 reg = get_vex_imm8 (sizeflag, 0) >> 4;
922d8de8
DR
16285 }
16286 else
16287 {
16288 if (!vex.w)
ccc5981b 16289 reg = get_vex_imm8 (sizeflag, 1) >> 4;
922d8de8
DR
16290 }
16291
16292 OP_EX_VexReg (bytemode, sizeflag, reg);
922d8de8 16293
3a2430e0
JB
16294 if (vex_w_done)
16295 codep++;
16296 vex_w_done = 1;
922d8de8
DR
16297}
16298
c0f3af97
L
16299static void
16300OP_REG_VexI4 (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16301{
16302 int reg;
b9733481
L
16303 const char **names;
16304
c0f3af97
L
16305 FETCH_DATA (the_info, codep + 1);
16306 reg = *codep++;
16307
16308 if (bytemode != x_mode)
16309 abort ();
16310
c0f3af97 16311 reg >>= 4;
5f847646
JB
16312 if (address_mode != mode_64bit)
16313 reg &= 7;
dae39acc 16314
c0f3af97
L
16315 switch (vex.length)
16316 {
16317 case 128:
b9733481 16318 names = names_xmm;
c0f3af97
L
16319 break;
16320 case 256:
b9733481 16321 names = names_ymm;
c0f3af97
L
16322 break;
16323 default:
16324 abort ();
16325 }
b9733481 16326 oappend (names[reg]);
c0f3af97
L
16327}
16328
922d8de8
DR
16329static void
16330OP_XMM_VexW (int bytemode, int sizeflag)
16331{
16332 /* Turn off the REX.W bit since it is used for swapping operands
16333 now. */
16334 rex &= ~REX_W;
16335 OP_XMM (bytemode, sizeflag);
16336}
16337
c0f3af97
L
16338static void
16339OP_EX_Vex (int bytemode, int sizeflag)
16340{
16341 if (modrm.mod != 3)
63c6fc6c 16342 need_vex_reg = 0;
c0f3af97
L
16343 OP_EX (bytemode, sizeflag);
16344}
16345
16346static void
16347OP_XMM_Vex (int bytemode, int sizeflag)
16348{
16349 if (modrm.mod != 3)
63c6fc6c 16350 need_vex_reg = 0;
c0f3af97
L
16351 OP_XMM (bytemode, sizeflag);
16352}
16353
ea397f5b
L
16354static struct op vex_cmp_op[] =
16355{
16356 { STRING_COMMA_LEN ("eq") },
16357 { STRING_COMMA_LEN ("lt") },
16358 { STRING_COMMA_LEN ("le") },
16359 { STRING_COMMA_LEN ("unord") },
16360 { STRING_COMMA_LEN ("neq") },
16361 { STRING_COMMA_LEN ("nlt") },
16362 { STRING_COMMA_LEN ("nle") },
16363 { STRING_COMMA_LEN ("ord") },
16364 { STRING_COMMA_LEN ("eq_uq") },
16365 { STRING_COMMA_LEN ("nge") },
16366 { STRING_COMMA_LEN ("ngt") },
16367 { STRING_COMMA_LEN ("false") },
16368 { STRING_COMMA_LEN ("neq_oq") },
16369 { STRING_COMMA_LEN ("ge") },
16370 { STRING_COMMA_LEN ("gt") },
16371 { STRING_COMMA_LEN ("true") },
16372 { STRING_COMMA_LEN ("eq_os") },
16373 { STRING_COMMA_LEN ("lt_oq") },
16374 { STRING_COMMA_LEN ("le_oq") },
16375 { STRING_COMMA_LEN ("unord_s") },
16376 { STRING_COMMA_LEN ("neq_us") },
16377 { STRING_COMMA_LEN ("nlt_uq") },
16378 { STRING_COMMA_LEN ("nle_uq") },
16379 { STRING_COMMA_LEN ("ord_s") },
16380 { STRING_COMMA_LEN ("eq_us") },
16381 { STRING_COMMA_LEN ("nge_uq") },
16382 { STRING_COMMA_LEN ("ngt_uq") },
16383 { STRING_COMMA_LEN ("false_os") },
16384 { STRING_COMMA_LEN ("neq_os") },
16385 { STRING_COMMA_LEN ("ge_oq") },
16386 { STRING_COMMA_LEN ("gt_oq") },
16387 { STRING_COMMA_LEN ("true_us") },
c0f3af97
L
16388};
16389
16390static void
16391VCMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16392{
16393 unsigned int cmp_type;
16394
16395 FETCH_DATA (the_info, codep + 1);
16396 cmp_type = *codep++ & 0xff;
16397 if (cmp_type < ARRAY_SIZE (vex_cmp_op))
16398 {
16399 char suffix [3];
ea397f5b 16400 char *p = mnemonicendp - 2;
c0f3af97
L
16401 suffix[0] = p[0];
16402 suffix[1] = p[1];
16403 suffix[2] = '\0';
ea397f5b
L
16404 sprintf (p, "%s%s", vex_cmp_op[cmp_type].name, suffix);
16405 mnemonicendp += vex_cmp_op[cmp_type].len;
c0f3af97
L
16406 }
16407 else
16408 {
16409 /* We have a reserved extension byte. Output it directly. */
16410 scratchbuf[0] = '$';
16411 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 16412 oappend_maybe_intel (scratchbuf);
c0f3af97
L
16413 scratchbuf[0] = '\0';
16414 }
16415}
16416
43234a1e
L
16417static void
16418VPCMP_Fixup (int bytemode ATTRIBUTE_UNUSED,
16419 int sizeflag ATTRIBUTE_UNUSED)
16420{
16421 unsigned int cmp_type;
16422
16423 if (!vex.evex)
16424 abort ();
16425
16426 FETCH_DATA (the_info, codep + 1);
16427 cmp_type = *codep++ & 0xff;
16428 /* There are aliases for immediates 0, 1, 2, 4, 5, 6.
16429 If it's the case, print suffix, otherwise - print the immediate. */
16430 if (cmp_type < ARRAY_SIZE (simd_cmp_op)
16431 && cmp_type != 3
16432 && cmp_type != 7)
16433 {
16434 char suffix [3];
16435 char *p = mnemonicendp - 2;
16436
16437 /* vpcmp* can have both one- and two-lettered suffix. */
16438 if (p[0] == 'p')
16439 {
16440 p++;
16441 suffix[0] = p[0];
16442 suffix[1] = '\0';
16443 }
16444 else
16445 {
16446 suffix[0] = p[0];
16447 suffix[1] = p[1];
16448 suffix[2] = '\0';
16449 }
16450
16451 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
16452 mnemonicendp += simd_cmp_op[cmp_type].len;
16453 }
be92cb14
JB
16454 else
16455 {
16456 /* We have a reserved extension byte. Output it directly. */
16457 scratchbuf[0] = '$';
16458 print_operand_value (scratchbuf + 1, 1, cmp_type);
16459 oappend_maybe_intel (scratchbuf);
16460 scratchbuf[0] = '\0';
16461 }
16462}
16463
16464static const struct op xop_cmp_op[] =
16465{
16466 { STRING_COMMA_LEN ("lt") },
16467 { STRING_COMMA_LEN ("le") },
16468 { STRING_COMMA_LEN ("gt") },
16469 { STRING_COMMA_LEN ("ge") },
16470 { STRING_COMMA_LEN ("eq") },
16471 { STRING_COMMA_LEN ("neq") },
16472 { STRING_COMMA_LEN ("false") },
16473 { STRING_COMMA_LEN ("true") }
16474};
16475
16476static void
16477VPCOM_Fixup (int bytemode ATTRIBUTE_UNUSED,
16478 int sizeflag ATTRIBUTE_UNUSED)
16479{
16480 unsigned int cmp_type;
16481
16482 FETCH_DATA (the_info, codep + 1);
16483 cmp_type = *codep++ & 0xff;
16484 if (cmp_type < ARRAY_SIZE (xop_cmp_op))
16485 {
16486 char suffix[3];
16487 char *p = mnemonicendp - 2;
16488
16489 /* vpcom* can have both one- and two-lettered suffix. */
16490 if (p[0] == 'm')
16491 {
16492 p++;
16493 suffix[0] = p[0];
16494 suffix[1] = '\0';
16495 }
16496 else
16497 {
16498 suffix[0] = p[0];
16499 suffix[1] = p[1];
16500 suffix[2] = '\0';
16501 }
16502
16503 sprintf (p, "%s%s", xop_cmp_op[cmp_type].name, suffix);
16504 mnemonicendp += xop_cmp_op[cmp_type].len;
16505 }
43234a1e
L
16506 else
16507 {
16508 /* We have a reserved extension byte. Output it directly. */
16509 scratchbuf[0] = '$';
16510 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 16511 oappend_maybe_intel (scratchbuf);
43234a1e
L
16512 scratchbuf[0] = '\0';
16513 }
16514}
16515
ea397f5b
L
16516static const struct op pclmul_op[] =
16517{
16518 { STRING_COMMA_LEN ("lql") },
16519 { STRING_COMMA_LEN ("hql") },
16520 { STRING_COMMA_LEN ("lqh") },
16521 { STRING_COMMA_LEN ("hqh") }
c0f3af97
L
16522};
16523
16524static void
16525PCLMUL_Fixup (int bytemode ATTRIBUTE_UNUSED,
16526 int sizeflag ATTRIBUTE_UNUSED)
16527{
16528 unsigned int pclmul_type;
16529
16530 FETCH_DATA (the_info, codep + 1);
16531 pclmul_type = *codep++ & 0xff;
16532 switch (pclmul_type)
16533 {
16534 case 0x10:
16535 pclmul_type = 2;
16536 break;
16537 case 0x11:
16538 pclmul_type = 3;
16539 break;
16540 default:
16541 break;
7bb15c6f 16542 }
c0f3af97
L
16543 if (pclmul_type < ARRAY_SIZE (pclmul_op))
16544 {
16545 char suffix [4];
ea397f5b 16546 char *p = mnemonicendp - 3;
c0f3af97
L
16547 suffix[0] = p[0];
16548 suffix[1] = p[1];
16549 suffix[2] = p[2];
16550 suffix[3] = '\0';
ea397f5b
L
16551 sprintf (p, "%s%s", pclmul_op[pclmul_type].name, suffix);
16552 mnemonicendp += pclmul_op[pclmul_type].len;
c0f3af97
L
16553 }
16554 else
16555 {
16556 /* We have a reserved extension byte. Output it directly. */
16557 scratchbuf[0] = '$';
16558 print_operand_value (scratchbuf + 1, 1, pclmul_type);
9ce09ba2 16559 oappend_maybe_intel (scratchbuf);
c0f3af97
L
16560 scratchbuf[0] = '\0';
16561 }
16562}
16563
f1f8f695
L
16564static void
16565MOVBE_Fixup (int bytemode, int sizeflag)
16566{
16567 /* Add proper suffix to "movbe". */
ea397f5b 16568 char *p = mnemonicendp;
f1f8f695
L
16569
16570 switch (bytemode)
16571 {
16572 case v_mode:
16573 if (intel_syntax)
ea397f5b 16574 goto skip;
f1f8f695
L
16575
16576 USED_REX (REX_W);
16577 if (sizeflag & SUFFIX_ALWAYS)
16578 {
16579 if (rex & REX_W)
16580 *p++ = 'q';
f1f8f695 16581 else
f16cd0d5
L
16582 {
16583 if (sizeflag & DFLAG)
16584 *p++ = 'l';
16585 else
16586 *p++ = 'w';
16587 used_prefixes |= (prefixes & PREFIX_DATA);
16588 }
f1f8f695 16589 }
f1f8f695
L
16590 break;
16591 default:
16592 oappend (INTERNAL_DISASSEMBLER_ERROR);
16593 break;
16594 }
ea397f5b 16595 mnemonicendp = p;
f1f8f695
L
16596 *p = '\0';
16597
ea397f5b 16598skip:
f1f8f695
L
16599 OP_M (bytemode, sizeflag);
16600}
f88c9eb0
SP
16601
16602static void
16603OP_LWPCB_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16604{
16605 int reg;
16606 const char **names;
16607
16608 /* Skip mod/rm byte. */
16609 MODRM_CHECK;
16610 codep++;
16611
390a6789 16612 if (rex & REX_W)
f88c9eb0 16613 names = names64;
f88c9eb0 16614 else
ce7d077e 16615 names = names32;
f88c9eb0
SP
16616
16617 reg = modrm.rm;
16618 USED_REX (REX_B);
16619 if (rex & REX_B)
16620 reg += 8;
16621
16622 oappend (names[reg]);
16623}
16624
16625static void
16626OP_LWP_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16627{
16628 const char **names;
5f847646 16629 unsigned int reg = vex.register_specifier;
63c6fc6c 16630 vex.register_specifier = 0;
f88c9eb0 16631
390a6789 16632 if (rex & REX_W)
f88c9eb0 16633 names = names64;
f88c9eb0 16634 else
ce7d077e 16635 names = names32;
f88c9eb0 16636
5f847646
JB
16637 if (address_mode != mode_64bit)
16638 reg &= 7;
16639 oappend (names[reg]);
f88c9eb0 16640}
43234a1e
L
16641
16642static void
16643OP_Mask (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16644{
16645 if (!vex.evex
1ba585e8 16646 || (bytemode != mask_mode && bytemode != mask_bd_mode))
43234a1e
L
16647 abort ();
16648
16649 USED_REX (REX_R);
16650 if ((rex & REX_R) != 0 || !vex.r)
16651 {
16652 BadOp ();
16653 return;
16654 }
16655
16656 oappend (names_mask [modrm.reg]);
16657}
16658
16659static void
16660OP_Rounding (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16661{
16662 if (!vex.evex
16663 || (bytemode != evex_rounding_mode
70df6fc9 16664 && bytemode != evex_rounding_64_mode
43234a1e
L
16665 && bytemode != evex_sae_mode))
16666 abort ();
16667 if (modrm.mod == 3 && vex.b)
16668 switch (bytemode)
16669 {
70df6fc9
L
16670 case evex_rounding_64_mode:
16671 if (address_mode != mode_64bit)
16672 {
16673 oappend ("(bad)");
16674 break;
16675 }
16676 /* Fall through. */
43234a1e
L
16677 case evex_rounding_mode:
16678 oappend (names_rounding[vex.ll]);
16679 break;
16680 case evex_sae_mode:
16681 oappend ("{sae}");
16682 break;
16683 default:
16684 break;
16685 }
16686}
This page took 2.756034 seconds and 4 git commands to generate.