Fix a few non-dash safe xstormy16 shell scripts.
[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 }
09335d05 262#define Eq { OP_E, q_mode }
07f5af7d 263#define indirEv { OP_indirE, indir_v_mode }
ce518a5f
L
264#define indirEp { OP_indirE, f_mode }
265#define stackEv { OP_E, stack_v_mode }
266#define Em { OP_E, m_mode }
267#define Ew { OP_E, w_mode }
268#define M { OP_M, 0 } /* lea, lgdt, etc. */
34b772a6 269#define Ma { OP_M, a_mode }
b844680a 270#define Mb { OP_M, b_mode }
d9a5e5e5 271#define Md { OP_M, d_mode }
f1f8f695 272#define Mo { OP_M, o_mode }
ce518a5f
L
273#define Mp { OP_M, f_mode } /* 32 or 48 bit memory operand for LDS, LES etc */
274#define Mq { OP_M, q_mode }
d276ec69 275#define Mv_bnd { OP_M, v_bndmk_mode }
4ee52178 276#define Mx { OP_M, x_mode }
c0f3af97 277#define Mxmm { OP_M, xmm_mode }
ce518a5f 278#define Gb { OP_G, b_mode }
7e8b059b 279#define Gbnd { OP_G, bnd_mode }
ce518a5f
L
280#define Gv { OP_G, v_mode }
281#define Gd { OP_G, d_mode }
282#define Gdq { OP_G, dq_mode }
283#define Gm { OP_G, m_mode }
c0a30a9f 284#define Gva { OP_G, va_mode }
ce518a5f 285#define Gw { OP_G, w_mode }
6f74c397 286#define Rd { OP_R, d_mode }
43234a1e 287#define Rdq { OP_R, dq_mode }
6f74c397 288#define Rm { OP_R, m_mode }
ce518a5f
L
289#define Ib { OP_I, b_mode }
290#define sIb { OP_sI, b_mode } /* sign extened byte */
e3949f17 291#define sIbT { OP_sI, b_T_mode } /* sign extened byte like 'T' */
ce518a5f 292#define Iv { OP_I, v_mode }
7bb15c6f 293#define sIv { OP_sI, v_mode }
ce518a5f
L
294#define Iq { OP_I, q_mode }
295#define Iv64 { OP_I64, v_mode }
296#define Iw { OP_I, w_mode }
297#define I1 { OP_I, const_1_mode }
298#define Jb { OP_J, b_mode }
299#define Jv { OP_J, v_mode }
300#define Cm { OP_C, m_mode }
301#define Dm { OP_D, m_mode }
302#define Td { OP_T, d_mode }
b844680a 303#define Skip_MODRM { OP_Skip_MODRM, 0 }
ce518a5f
L
304
305#define RMeAX { OP_REG, eAX_reg }
306#define RMeBX { OP_REG, eBX_reg }
307#define RMeCX { OP_REG, eCX_reg }
308#define RMeDX { OP_REG, eDX_reg }
309#define RMeSP { OP_REG, eSP_reg }
310#define RMeBP { OP_REG, eBP_reg }
311#define RMeSI { OP_REG, eSI_reg }
312#define RMeDI { OP_REG, eDI_reg }
313#define RMrAX { OP_REG, rAX_reg }
314#define RMrBX { OP_REG, rBX_reg }
315#define RMrCX { OP_REG, rCX_reg }
316#define RMrDX { OP_REG, rDX_reg }
317#define RMrSP { OP_REG, rSP_reg }
318#define RMrBP { OP_REG, rBP_reg }
319#define RMrSI { OP_REG, rSI_reg }
320#define RMrDI { OP_REG, rDI_reg }
321#define RMAL { OP_REG, al_reg }
ce518a5f
L
322#define RMCL { OP_REG, cl_reg }
323#define RMDL { OP_REG, dl_reg }
324#define RMBL { OP_REG, bl_reg }
325#define RMAH { OP_REG, ah_reg }
326#define RMCH { OP_REG, ch_reg }
327#define RMDH { OP_REG, dh_reg }
328#define RMBH { OP_REG, bh_reg }
329#define RMAX { OP_REG, ax_reg }
330#define RMDX { OP_REG, dx_reg }
331
332#define eAX { OP_IMREG, eAX_reg }
333#define eBX { OP_IMREG, eBX_reg }
334#define eCX { OP_IMREG, eCX_reg }
335#define eDX { OP_IMREG, eDX_reg }
336#define eSP { OP_IMREG, eSP_reg }
337#define eBP { OP_IMREG, eBP_reg }
338#define eSI { OP_IMREG, eSI_reg }
339#define eDI { OP_IMREG, eDI_reg }
340#define AL { OP_IMREG, al_reg }
341#define CL { OP_IMREG, cl_reg }
342#define DL { OP_IMREG, dl_reg }
343#define BL { OP_IMREG, bl_reg }
344#define AH { OP_IMREG, ah_reg }
345#define CH { OP_IMREG, ch_reg }
346#define DH { OP_IMREG, dh_reg }
347#define BH { OP_IMREG, bh_reg }
348#define AX { OP_IMREG, ax_reg }
349#define DX { OP_IMREG, dx_reg }
350#define zAX { OP_IMREG, z_mode_ax_reg }
351#define indirDX { OP_IMREG, indir_dx_reg }
352
353#define Sw { OP_SEG, w_mode }
354#define Sv { OP_SEG, v_mode }
355#define Ap { OP_DIR, 0 }
356#define Ob { OP_OFF64, b_mode }
357#define Ov { OP_OFF64, v_mode }
358#define Xb { OP_DSreg, eSI_reg }
359#define Xv { OP_DSreg, eSI_reg }
360#define Xz { OP_DSreg, eSI_reg }
361#define Yb { OP_ESreg, eDI_reg }
362#define Yv { OP_ESreg, eDI_reg }
363#define DSBX { OP_DSreg, eBX_reg }
364
365#define es { OP_REG, es_reg }
366#define ss { OP_REG, ss_reg }
367#define cs { OP_REG, cs_reg }
368#define ds { OP_REG, ds_reg }
369#define fs { OP_REG, fs_reg }
370#define gs { OP_REG, gs_reg }
371
372#define MX { OP_MMX, 0 }
373#define XM { OP_XMM, 0 }
539f890d 374#define XMScalar { OP_XMM, scalar_mode }
6c30d220 375#define XMGatherQ { OP_XMM, vex_vsib_q_w_dq_mode }
c0f3af97 376#define XMM { OP_XMM, xmm_mode }
43234a1e 377#define XMxmmq { OP_XMM, xmmq_mode }
ce518a5f 378#define EM { OP_EM, v_mode }
b6169b20 379#define EMS { OP_EM, v_swap_mode }
09a2c6cf 380#define EMd { OP_EM, d_mode }
14051056 381#define EMx { OP_EM, x_mode }
53467f57 382#define EXbScalar { OP_EX, b_scalar_mode }
8976381e 383#define EXw { OP_EX, w_mode }
53467f57 384#define EXwScalar { OP_EX, w_scalar_mode }
09a2c6cf 385#define EXd { OP_EX, d_mode }
539f890d 386#define EXdScalar { OP_EX, d_scalar_mode }
fa99fab2 387#define EXdS { OP_EX, d_swap_mode }
43234a1e 388#define EXdScalarS { OP_EX, d_scalar_swap_mode }
09a2c6cf 389#define EXq { OP_EX, q_mode }
539f890d
L
390#define EXqScalar { OP_EX, q_scalar_mode }
391#define EXqScalarS { OP_EX, q_scalar_swap_mode }
b6169b20 392#define EXqS { OP_EX, q_swap_mode }
09a2c6cf 393#define EXx { OP_EX, x_mode }
b6169b20 394#define EXxS { OP_EX, x_swap_mode }
c0f3af97 395#define EXxmm { OP_EX, xmm_mode }
43234a1e 396#define EXymm { OP_EX, ymm_mode }
c0f3af97 397#define EXxmmq { OP_EX, xmmq_mode }
43234a1e 398#define EXEvexHalfBcstXmmq { OP_EX, evex_half_bcst_xmmq_mode }
6c30d220
L
399#define EXxmm_mb { OP_EX, xmm_mb_mode }
400#define EXxmm_mw { OP_EX, xmm_mw_mode }
401#define EXxmm_md { OP_EX, xmm_md_mode }
402#define EXxmm_mq { OP_EX, xmm_mq_mode }
43234a1e 403#define EXxmm_mdq { OP_EX, xmm_mdq_mode }
6c30d220
L
404#define EXxmmdw { OP_EX, xmmdw_mode }
405#define EXxmmqd { OP_EX, xmmqd_mode }
c0f3af97 406#define EXymmq { OP_EX, ymmq_mode }
0bfee649 407#define EXVexWdq { OP_EX, vex_w_dq_mode }
1c480963 408#define EXVexWdqScalar { OP_EX, vex_scalar_w_dq_mode }
43234a1e
L
409#define EXEvexXGscat { OP_EX, evex_x_gscat_mode }
410#define EXEvexXNoBcst { OP_EX, evex_x_nobcst_mode }
ce518a5f
L
411#define MS { OP_MS, v_mode }
412#define XS { OP_XS, v_mode }
09335d05 413#define EMCq { OP_EMC, q_mode }
ce518a5f 414#define MXC { OP_MXC, 0 }
ce518a5f 415#define OPSUF { OP_3DNowSuffix, 0 }
ad19981d 416#define CMP { CMP_Fixup, 0 }
42903f7f 417#define XMM0 { XMM_Fixup, 0 }
eacc9c89 418#define FXSAVE { FXSAVE_Fixup, 0 }
5dd85c99
SP
419#define Vex_2src_1 { OP_Vex_2src_1, 0 }
420#define Vex_2src_2 { OP_Vex_2src_2, 0 }
252b5132 421
c0f3af97 422#define Vex { OP_VEX, vex_mode }
539f890d 423#define VexScalar { OP_VEX, vex_scalar_mode }
6c30d220 424#define VexGatherQ { OP_VEX, vex_vsib_q_w_dq_mode }
c0f3af97
L
425#define Vex128 { OP_VEX, vex128_mode }
426#define Vex256 { OP_VEX, vex256_mode }
cb21baef 427#define VexGdq { OP_VEX, dq_mode }
c0f3af97 428#define EXdVex { OP_EX_Vex, d_mode }
fa99fab2 429#define EXdVexS { OP_EX_Vex, d_swap_mode }
539f890d 430#define EXdVexScalarS { OP_EX_Vex, d_scalar_swap_mode }
c0f3af97 431#define EXqVex { OP_EX_Vex, q_mode }
fa99fab2 432#define EXqVexS { OP_EX_Vex, q_swap_mode }
539f890d 433#define EXqVexScalarS { OP_EX_Vex, q_scalar_swap_mode }
922d8de8
DR
434#define EXVexW { OP_EX_VexW, x_mode }
435#define EXdVexW { OP_EX_VexW, d_mode }
436#define EXqVexW { OP_EX_VexW, q_mode }
a683cc34 437#define EXVexImmW { OP_EX_VexImmW, x_mode }
c0f3af97 438#define XMVex { OP_XMM_Vex, 0 }
539f890d 439#define XMVexScalar { OP_XMM_Vex, scalar_mode }
922d8de8 440#define XMVexW { OP_XMM_VexW, 0 }
c0f3af97
L
441#define XMVexI4 { OP_REG_VexI4, x_mode }
442#define PCLMUL { PCLMUL_Fixup, 0 }
c0f3af97 443#define VCMP { VCMP_Fixup, 0 }
43234a1e 444#define VPCMP { VPCMP_Fixup, 0 }
be92cb14 445#define VPCOM { VPCOM_Fixup, 0 }
43234a1e
L
446
447#define EXxEVexR { OP_Rounding, evex_rounding_mode }
70df6fc9 448#define EXxEVexR64 { OP_Rounding, evex_rounding_64_mode }
43234a1e
L
449#define EXxEVexS { OP_Rounding, evex_sae_mode }
450
451#define XMask { OP_Mask, mask_mode }
452#define MaskG { OP_G, mask_mode }
453#define MaskE { OP_E, mask_mode }
1ba585e8 454#define MaskBDE { OP_E, mask_bd_mode }
43234a1e
L
455#define MaskR { OP_R, mask_mode }
456#define MaskVex { OP_VEX, mask_mode }
c0f3af97 457
6c30d220 458#define MVexVSIBDWpX { OP_M, vex_vsib_d_w_dq_mode }
5fc35d96 459#define MVexVSIBDQWpX { OP_M, vex_vsib_d_w_d_mode }
6c30d220 460#define MVexVSIBQWpX { OP_M, vex_vsib_q_w_dq_mode }
5fc35d96 461#define MVexVSIBQDWpX { OP_M, vex_vsib_q_w_d_mode }
6c30d220 462
35c52694 463/* Used handle "rep" prefix for string instructions. */
ce518a5f
L
464#define Xbr { REP_Fixup, eSI_reg }
465#define Xvr { REP_Fixup, eSI_reg }
466#define Ybr { REP_Fixup, eDI_reg }
467#define Yvr { REP_Fixup, eDI_reg }
468#define Yzr { REP_Fixup, eDI_reg }
469#define indirDXr { REP_Fixup, indir_dx_reg }
470#define ALr { REP_Fixup, al_reg }
471#define eAXr { REP_Fixup, eAX_reg }
472
42164a71
L
473/* Used handle HLE prefix for lockable instructions. */
474#define Ebh1 { HLE_Fixup1, b_mode }
475#define Evh1 { HLE_Fixup1, v_mode }
476#define Ebh2 { HLE_Fixup2, b_mode }
477#define Evh2 { HLE_Fixup2, v_mode }
478#define Ebh3 { HLE_Fixup3, b_mode }
479#define Evh3 { HLE_Fixup3, v_mode }
480
7e8b059b 481#define BND { BND_Fixup, 0 }
04ef582a 482#define NOTRACK { NOTRACK_Fixup, 0 }
7e8b059b 483
ce518a5f
L
484#define cond_jump_flag { NULL, cond_jump_mode }
485#define loop_jcxz_flag { NULL, loop_jcxz_mode }
3ffd33cf 486
252b5132 487/* bits in sizeflag */
252b5132 488#define SUFFIX_ALWAYS 4
252b5132
RH
489#define AFLAG 2
490#define DFLAG 1
491
51e7da1b
L
492enum
493{
494 /* byte operand */
495 b_mode = 1,
496 /* byte operand with operand swapped */
3873ba12 497 b_swap_mode,
e3949f17
L
498 /* byte operand, sign extend like 'T' suffix */
499 b_T_mode,
51e7da1b 500 /* operand size depends on prefixes */
3873ba12 501 v_mode,
51e7da1b 502 /* operand size depends on prefixes with operand swapped */
3873ba12 503 v_swap_mode,
de89d0a3
IT
504 /* operand size depends on address prefix */
505 va_mode,
51e7da1b 506 /* word operand */
3873ba12 507 w_mode,
51e7da1b 508 /* double word operand */
3873ba12 509 d_mode,
51e7da1b 510 /* double word operand with operand swapped */
3873ba12 511 d_swap_mode,
51e7da1b 512 /* quad word operand */
3873ba12 513 q_mode,
51e7da1b 514 /* quad word operand with operand swapped */
3873ba12 515 q_swap_mode,
51e7da1b 516 /* ten-byte operand */
3873ba12 517 t_mode,
43234a1e
L
518 /* 16-byte XMM, 32-byte YMM or 64-byte ZMM operand. In EVEX with
519 broadcast enabled. */
3873ba12 520 x_mode,
43234a1e
L
521 /* Similar to x_mode, but with different EVEX mem shifts. */
522 evex_x_gscat_mode,
523 /* Similar to x_mode, but with disabled broadcast. */
524 evex_x_nobcst_mode,
525 /* Similar to x_mode, but with operands swapped and disabled broadcast
526 in EVEX. */
3873ba12 527 x_swap_mode,
51e7da1b 528 /* 16-byte XMM operand */
3873ba12 529 xmm_mode,
43234a1e
L
530 /* XMM, XMM or YMM register operand, or quad word, xmmword or ymmword
531 memory operand (depending on vector length). Broadcast isn't
532 allowed. */
3873ba12 533 xmmq_mode,
43234a1e
L
534 /* Same as xmmq_mode, but broadcast is allowed. */
535 evex_half_bcst_xmmq_mode,
6c30d220
L
536 /* XMM register or byte memory operand */
537 xmm_mb_mode,
538 /* XMM register or word memory operand */
539 xmm_mw_mode,
540 /* XMM register or double word memory operand */
541 xmm_md_mode,
542 /* XMM register or quad word memory operand */
543 xmm_mq_mode,
43234a1e
L
544 /* XMM register or double/quad word memory operand, depending on
545 VEX.W. */
546 xmm_mdq_mode,
547 /* 16-byte XMM, word, double word or quad word operand. */
6c30d220 548 xmmdw_mode,
43234a1e 549 /* 16-byte XMM, double word, quad word operand or xmm word operand. */
6c30d220 550 xmmqd_mode,
43234a1e
L
551 /* 32-byte YMM operand */
552 ymm_mode,
553 /* quad word, ymmword or zmmword memory operand. */
3873ba12 554 ymmq_mode,
6c30d220
L
555 /* 32-byte YMM or 16-byte word operand */
556 ymmxmm_mode,
51e7da1b 557 /* d_mode in 32bit, q_mode in 64bit mode. */
3873ba12 558 m_mode,
51e7da1b 559 /* pair of v_mode operands */
3873ba12
L
560 a_mode,
561 cond_jump_mode,
562 loop_jcxz_mode,
7e8b059b 563 v_bnd_mode,
d276ec69
JB
564 /* like v_bnd_mode in 32bit, no RIP-rel in 64bit mode. */
565 v_bndmk_mode,
51e7da1b 566 /* operand size depends on REX prefixes. */
3873ba12 567 dq_mode,
51e7da1b 568 /* registers like dq_mode, memory like w_mode. */
3873ba12 569 dqw_mode,
9f79e886 570 /* bounds operand */
7e8b059b 571 bnd_mode,
9f79e886
JB
572 /* bounds operand with operand swapped */
573 bnd_swap_mode,
51e7da1b 574 /* 4- or 6-byte pointer operand */
3873ba12
L
575 f_mode,
576 const_1_mode,
07f5af7d
L
577 /* v_mode for indirect branch opcodes. */
578 indir_v_mode,
51e7da1b 579 /* v_mode for stack-related opcodes. */
3873ba12 580 stack_v_mode,
51e7da1b 581 /* non-quad operand size depends on prefixes */
3873ba12 582 z_mode,
51e7da1b 583 /* 16-byte operand */
3873ba12 584 o_mode,
51e7da1b 585 /* registers like dq_mode, memory like b_mode. */
3873ba12 586 dqb_mode,
1ba585e8
IT
587 /* registers like d_mode, memory like b_mode. */
588 db_mode,
589 /* registers like d_mode, memory like w_mode. */
590 dw_mode,
51e7da1b 591 /* registers like dq_mode, memory like d_mode. */
3873ba12 592 dqd_mode,
51e7da1b 593 /* normal vex mode */
3873ba12 594 vex_mode,
51e7da1b 595 /* 128bit vex mode */
3873ba12 596 vex128_mode,
51e7da1b 597 /* 256bit vex mode */
3873ba12 598 vex256_mode,
51e7da1b 599 /* operand size depends on the VEX.W bit. */
3873ba12 600 vex_w_dq_mode,
d55ee72f 601
6c30d220
L
602 /* Similar to vex_w_dq_mode, with VSIB dword indices. */
603 vex_vsib_d_w_dq_mode,
5fc35d96
IT
604 /* Similar to vex_vsib_d_w_dq_mode, with smaller memory. */
605 vex_vsib_d_w_d_mode,
6c30d220
L
606 /* Similar to vex_w_dq_mode, with VSIB qword indices. */
607 vex_vsib_q_w_dq_mode,
5fc35d96
IT
608 /* Similar to vex_vsib_q_w_dq_mode, with smaller memory. */
609 vex_vsib_q_w_d_mode,
6c30d220 610
539f890d
L
611 /* scalar, ignore vector length. */
612 scalar_mode,
53467f57
IT
613 /* like b_mode, ignore vector length. */
614 b_scalar_mode,
615 /* like w_mode, ignore vector length. */
616 w_scalar_mode,
539f890d
L
617 /* like d_mode, ignore vector length. */
618 d_scalar_mode,
619 /* like d_swap_mode, ignore vector length. */
620 d_scalar_swap_mode,
621 /* like q_mode, ignore vector length. */
622 q_scalar_mode,
623 /* like q_swap_mode, ignore vector length. */
624 q_scalar_swap_mode,
625 /* like vex_mode, ignore vector length. */
626 vex_scalar_mode,
1c480963
L
627 /* like vex_w_dq_mode, ignore vector length. */
628 vex_scalar_w_dq_mode,
539f890d 629
43234a1e
L
630 /* Static rounding. */
631 evex_rounding_mode,
70df6fc9
L
632 /* Static rounding, 64-bit mode only. */
633 evex_rounding_64_mode,
43234a1e
L
634 /* Supress all exceptions. */
635 evex_sae_mode,
636
637 /* Mask register operand. */
638 mask_mode,
1ba585e8
IT
639 /* Mask register operand. */
640 mask_bd_mode,
43234a1e 641
3873ba12
L
642 es_reg,
643 cs_reg,
644 ss_reg,
645 ds_reg,
646 fs_reg,
647 gs_reg,
d55ee72f 648
3873ba12
L
649 eAX_reg,
650 eCX_reg,
651 eDX_reg,
652 eBX_reg,
653 eSP_reg,
654 eBP_reg,
655 eSI_reg,
656 eDI_reg,
d55ee72f 657
3873ba12
L
658 al_reg,
659 cl_reg,
660 dl_reg,
661 bl_reg,
662 ah_reg,
663 ch_reg,
664 dh_reg,
665 bh_reg,
d55ee72f 666
3873ba12
L
667 ax_reg,
668 cx_reg,
669 dx_reg,
670 bx_reg,
671 sp_reg,
672 bp_reg,
673 si_reg,
674 di_reg,
d55ee72f 675
3873ba12
L
676 rAX_reg,
677 rCX_reg,
678 rDX_reg,
679 rBX_reg,
680 rSP_reg,
681 rBP_reg,
682 rSI_reg,
683 rDI_reg,
d55ee72f 684
3873ba12
L
685 z_mode_ax_reg,
686 indir_dx_reg
51e7da1b 687};
252b5132 688
51e7da1b
L
689enum
690{
691 FLOATCODE = 1,
3873ba12
L
692 USE_REG_TABLE,
693 USE_MOD_TABLE,
694 USE_RM_TABLE,
695 USE_PREFIX_TABLE,
696 USE_X86_64_TABLE,
697 USE_3BYTE_TABLE,
f88c9eb0 698 USE_XOP_8F_TABLE,
3873ba12
L
699 USE_VEX_C4_TABLE,
700 USE_VEX_C5_TABLE,
9e30b8e0 701 USE_VEX_LEN_TABLE,
43234a1e 702 USE_VEX_W_TABLE,
04e2a182
L
703 USE_EVEX_TABLE,
704 USE_EVEX_LEN_TABLE
51e7da1b 705};
6439fc28 706
bf890a93 707#define FLOAT NULL, { { NULL, FLOATCODE } }, 0
4efba78c 708
bf890a93
IT
709#define DIS386(T, I) NULL, { { NULL, (T)}, { NULL, (I) } }, 0
710#define DIS386_PREFIX(T, I, P) NULL, { { NULL, (T)}, { NULL, (I) } }, P
1ceb70f8
L
711#define REG_TABLE(I) DIS386 (USE_REG_TABLE, (I))
712#define MOD_TABLE(I) DIS386 (USE_MOD_TABLE, (I))
713#define RM_TABLE(I) DIS386 (USE_RM_TABLE, (I))
714#define PREFIX_TABLE(I) DIS386 (USE_PREFIX_TABLE, (I))
4e7d34a6
L
715#define X86_64_TABLE(I) DIS386 (USE_X86_64_TABLE, (I))
716#define THREE_BYTE_TABLE(I) DIS386 (USE_3BYTE_TABLE, (I))
bf890a93 717#define THREE_BYTE_TABLE_PREFIX(I, P) DIS386_PREFIX (USE_3BYTE_TABLE, (I), P)
f88c9eb0 718#define XOP_8F_TABLE(I) DIS386 (USE_XOP_8F_TABLE, (I))
c0f3af97
L
719#define VEX_C4_TABLE(I) DIS386 (USE_VEX_C4_TABLE, (I))
720#define VEX_C5_TABLE(I) DIS386 (USE_VEX_C5_TABLE, (I))
721#define VEX_LEN_TABLE(I) DIS386 (USE_VEX_LEN_TABLE, (I))
9e30b8e0 722#define VEX_W_TABLE(I) DIS386 (USE_VEX_W_TABLE, (I))
43234a1e 723#define EVEX_TABLE(I) DIS386 (USE_EVEX_TABLE, (I))
04e2a182 724#define EVEX_LEN_TABLE(I) DIS386 (USE_EVEX_LEN_TABLE, (I))
1ceb70f8 725
51e7da1b
L
726enum
727{
728 REG_80 = 0,
3873ba12 729 REG_81,
7148c369 730 REG_83,
3873ba12
L
731 REG_8F,
732 REG_C0,
733 REG_C1,
734 REG_C6,
735 REG_C7,
736 REG_D0,
737 REG_D1,
738 REG_D2,
739 REG_D3,
740 REG_F6,
741 REG_F7,
742 REG_FE,
743 REG_FF,
744 REG_0F00,
745 REG_0F01,
746 REG_0F0D,
747 REG_0F18,
c48935d7 748 REG_0F1C_MOD_0,
603555e5 749 REG_0F1E_MOD_3,
3873ba12
L
750 REG_0F71,
751 REG_0F72,
752 REG_0F73,
753 REG_0FA6,
754 REG_0FA7,
755 REG_0FAE,
756 REG_0FBA,
757 REG_0FC7,
592a252b
L
758 REG_VEX_0F71,
759 REG_VEX_0F72,
760 REG_VEX_0F73,
761 REG_VEX_0FAE,
f12dc422 762 REG_VEX_0F38F3,
f88c9eb0 763 REG_XOP_LWPCB,
2a2a0f38
QN
764 REG_XOP_LWP,
765 REG_XOP_TBM_01,
43234a1e
L
766 REG_XOP_TBM_02,
767
1ba585e8 768 REG_EVEX_0F71,
43234a1e
L
769 REG_EVEX_0F72,
770 REG_EVEX_0F73,
771 REG_EVEX_0F38C6,
772 REG_EVEX_0F38C7
51e7da1b 773};
1ceb70f8 774
51e7da1b
L
775enum
776{
777 MOD_8D = 0,
42164a71
L
778 MOD_C6_REG_7,
779 MOD_C7_REG_7,
4a357820
MZ
780 MOD_FF_REG_3,
781 MOD_FF_REG_5,
3873ba12
L
782 MOD_0F01_REG_0,
783 MOD_0F01_REG_1,
784 MOD_0F01_REG_2,
785 MOD_0F01_REG_3,
8eab4136 786 MOD_0F01_REG_5,
3873ba12
L
787 MOD_0F01_REG_7,
788 MOD_0F12_PREFIX_0,
789 MOD_0F13,
790 MOD_0F16_PREFIX_0,
791 MOD_0F17,
792 MOD_0F18_REG_0,
793 MOD_0F18_REG_1,
794 MOD_0F18_REG_2,
795 MOD_0F18_REG_3,
d7189fa5
RM
796 MOD_0F18_REG_4,
797 MOD_0F18_REG_5,
798 MOD_0F18_REG_6,
799 MOD_0F18_REG_7,
7e8b059b
L
800 MOD_0F1A_PREFIX_0,
801 MOD_0F1B_PREFIX_0,
802 MOD_0F1B_PREFIX_1,
c48935d7 803 MOD_0F1C_PREFIX_0,
603555e5 804 MOD_0F1E_PREFIX_1,
3873ba12
L
805 MOD_0F24,
806 MOD_0F26,
807 MOD_0F2B_PREFIX_0,
808 MOD_0F2B_PREFIX_1,
809 MOD_0F2B_PREFIX_2,
810 MOD_0F2B_PREFIX_3,
811 MOD_0F51,
812 MOD_0F71_REG_2,
813 MOD_0F71_REG_4,
814 MOD_0F71_REG_6,
815 MOD_0F72_REG_2,
816 MOD_0F72_REG_4,
817 MOD_0F72_REG_6,
818 MOD_0F73_REG_2,
819 MOD_0F73_REG_3,
820 MOD_0F73_REG_6,
821 MOD_0F73_REG_7,
822 MOD_0FAE_REG_0,
823 MOD_0FAE_REG_1,
824 MOD_0FAE_REG_2,
825 MOD_0FAE_REG_3,
826 MOD_0FAE_REG_4,
827 MOD_0FAE_REG_5,
828 MOD_0FAE_REG_6,
829 MOD_0FAE_REG_7,
830 MOD_0FB2,
831 MOD_0FB4,
832 MOD_0FB5,
a8484f96 833 MOD_0FC3,
963f3586
IT
834 MOD_0FC7_REG_3,
835 MOD_0FC7_REG_4,
836 MOD_0FC7_REG_5,
3873ba12
L
837 MOD_0FC7_REG_6,
838 MOD_0FC7_REG_7,
839 MOD_0FD7,
840 MOD_0FE7_PREFIX_2,
841 MOD_0FF0_PREFIX_3,
842 MOD_0F382A_PREFIX_2,
603555e5
L
843 MOD_0F38F5_PREFIX_2,
844 MOD_0F38F6_PREFIX_0,
5d79adc4 845 MOD_0F38F8_PREFIX_1,
c0a30a9f 846 MOD_0F38F8_PREFIX_2,
5d79adc4 847 MOD_0F38F8_PREFIX_3,
c0a30a9f 848 MOD_0F38F9_PREFIX_0,
3873ba12
L
849 MOD_62_32BIT,
850 MOD_C4_32BIT,
851 MOD_C5_32BIT,
592a252b
L
852 MOD_VEX_0F12_PREFIX_0,
853 MOD_VEX_0F13,
854 MOD_VEX_0F16_PREFIX_0,
855 MOD_VEX_0F17,
856 MOD_VEX_0F2B,
ab4e4ed5
AF
857 MOD_VEX_W_0_0F41_P_0_LEN_1,
858 MOD_VEX_W_1_0F41_P_0_LEN_1,
859 MOD_VEX_W_0_0F41_P_2_LEN_1,
860 MOD_VEX_W_1_0F41_P_2_LEN_1,
861 MOD_VEX_W_0_0F42_P_0_LEN_1,
862 MOD_VEX_W_1_0F42_P_0_LEN_1,
863 MOD_VEX_W_0_0F42_P_2_LEN_1,
864 MOD_VEX_W_1_0F42_P_2_LEN_1,
865 MOD_VEX_W_0_0F44_P_0_LEN_1,
866 MOD_VEX_W_1_0F44_P_0_LEN_1,
867 MOD_VEX_W_0_0F44_P_2_LEN_1,
868 MOD_VEX_W_1_0F44_P_2_LEN_1,
869 MOD_VEX_W_0_0F45_P_0_LEN_1,
870 MOD_VEX_W_1_0F45_P_0_LEN_1,
871 MOD_VEX_W_0_0F45_P_2_LEN_1,
872 MOD_VEX_W_1_0F45_P_2_LEN_1,
873 MOD_VEX_W_0_0F46_P_0_LEN_1,
874 MOD_VEX_W_1_0F46_P_0_LEN_1,
875 MOD_VEX_W_0_0F46_P_2_LEN_1,
876 MOD_VEX_W_1_0F46_P_2_LEN_1,
877 MOD_VEX_W_0_0F47_P_0_LEN_1,
878 MOD_VEX_W_1_0F47_P_0_LEN_1,
879 MOD_VEX_W_0_0F47_P_2_LEN_1,
880 MOD_VEX_W_1_0F47_P_2_LEN_1,
881 MOD_VEX_W_0_0F4A_P_0_LEN_1,
882 MOD_VEX_W_1_0F4A_P_0_LEN_1,
883 MOD_VEX_W_0_0F4A_P_2_LEN_1,
884 MOD_VEX_W_1_0F4A_P_2_LEN_1,
885 MOD_VEX_W_0_0F4B_P_0_LEN_1,
886 MOD_VEX_W_1_0F4B_P_0_LEN_1,
887 MOD_VEX_W_0_0F4B_P_2_LEN_1,
592a252b
L
888 MOD_VEX_0F50,
889 MOD_VEX_0F71_REG_2,
890 MOD_VEX_0F71_REG_4,
891 MOD_VEX_0F71_REG_6,
892 MOD_VEX_0F72_REG_2,
893 MOD_VEX_0F72_REG_4,
894 MOD_VEX_0F72_REG_6,
895 MOD_VEX_0F73_REG_2,
896 MOD_VEX_0F73_REG_3,
897 MOD_VEX_0F73_REG_6,
898 MOD_VEX_0F73_REG_7,
ab4e4ed5
AF
899 MOD_VEX_W_0_0F91_P_0_LEN_0,
900 MOD_VEX_W_1_0F91_P_0_LEN_0,
901 MOD_VEX_W_0_0F91_P_2_LEN_0,
902 MOD_VEX_W_1_0F91_P_2_LEN_0,
903 MOD_VEX_W_0_0F92_P_0_LEN_0,
904 MOD_VEX_W_0_0F92_P_2_LEN_0,
58a211d2 905 MOD_VEX_0F92_P_3_LEN_0,
ab4e4ed5
AF
906 MOD_VEX_W_0_0F93_P_0_LEN_0,
907 MOD_VEX_W_0_0F93_P_2_LEN_0,
58a211d2 908 MOD_VEX_0F93_P_3_LEN_0,
ab4e4ed5
AF
909 MOD_VEX_W_0_0F98_P_0_LEN_0,
910 MOD_VEX_W_1_0F98_P_0_LEN_0,
911 MOD_VEX_W_0_0F98_P_2_LEN_0,
912 MOD_VEX_W_1_0F98_P_2_LEN_0,
913 MOD_VEX_W_0_0F99_P_0_LEN_0,
914 MOD_VEX_W_1_0F99_P_0_LEN_0,
915 MOD_VEX_W_0_0F99_P_2_LEN_0,
916 MOD_VEX_W_1_0F99_P_2_LEN_0,
592a252b
L
917 MOD_VEX_0FAE_REG_2,
918 MOD_VEX_0FAE_REG_3,
919 MOD_VEX_0FD7_PREFIX_2,
920 MOD_VEX_0FE7_PREFIX_2,
921 MOD_VEX_0FF0_PREFIX_3,
592a252b
L
922 MOD_VEX_0F381A_PREFIX_2,
923 MOD_VEX_0F382A_PREFIX_2,
924 MOD_VEX_0F382C_PREFIX_2,
925 MOD_VEX_0F382D_PREFIX_2,
926 MOD_VEX_0F382E_PREFIX_2,
6c30d220
L
927 MOD_VEX_0F382F_PREFIX_2,
928 MOD_VEX_0F385A_PREFIX_2,
929 MOD_VEX_0F388C_PREFIX_2,
930 MOD_VEX_0F388E_PREFIX_2,
ab4e4ed5
AF
931 MOD_VEX_W_0_0F3A30_P_2_LEN_0,
932 MOD_VEX_W_1_0F3A30_P_2_LEN_0,
933 MOD_VEX_W_0_0F3A31_P_2_LEN_0,
934 MOD_VEX_W_1_0F3A31_P_2_LEN_0,
935 MOD_VEX_W_0_0F3A32_P_2_LEN_0,
936 MOD_VEX_W_1_0F3A32_P_2_LEN_0,
937 MOD_VEX_W_0_0F3A33_P_2_LEN_0,
938 MOD_VEX_W_1_0F3A33_P_2_LEN_0,
43234a1e
L
939
940 MOD_EVEX_0F10_PREFIX_1,
941 MOD_EVEX_0F10_PREFIX_3,
942 MOD_EVEX_0F11_PREFIX_1,
943 MOD_EVEX_0F11_PREFIX_3,
944 MOD_EVEX_0F12_PREFIX_0,
945 MOD_EVEX_0F16_PREFIX_0,
946 MOD_EVEX_0F38C6_REG_1,
947 MOD_EVEX_0F38C6_REG_2,
948 MOD_EVEX_0F38C6_REG_5,
949 MOD_EVEX_0F38C6_REG_6,
950 MOD_EVEX_0F38C7_REG_1,
951 MOD_EVEX_0F38C7_REG_2,
952 MOD_EVEX_0F38C7_REG_5,
953 MOD_EVEX_0F38C7_REG_6
51e7da1b 954};
1ceb70f8 955
51e7da1b
L
956enum
957{
42164a71
L
958 RM_C6_REG_7 = 0,
959 RM_C7_REG_7,
960 RM_0F01_REG_0,
3873ba12
L
961 RM_0F01_REG_1,
962 RM_0F01_REG_2,
963 RM_0F01_REG_3,
8eab4136 964 RM_0F01_REG_5,
3873ba12 965 RM_0F01_REG_7,
603555e5 966 RM_0F1E_MOD_3_REG_7,
3873ba12
L
967 RM_0FAE_REG_6,
968 RM_0FAE_REG_7
51e7da1b 969};
1ceb70f8 970
51e7da1b
L
971enum
972{
973 PREFIX_90 = 0,
603555e5 974 PREFIX_MOD_0_0F01_REG_5,
2234eee6 975 PREFIX_MOD_3_0F01_REG_5_RM_0,
603555e5 976 PREFIX_MOD_3_0F01_REG_5_RM_2,
3233d7d0 977 PREFIX_0F09,
3873ba12
L
978 PREFIX_0F10,
979 PREFIX_0F11,
980 PREFIX_0F12,
981 PREFIX_0F16,
7e8b059b
L
982 PREFIX_0F1A,
983 PREFIX_0F1B,
c48935d7 984 PREFIX_0F1C,
603555e5 985 PREFIX_0F1E,
3873ba12
L
986 PREFIX_0F2A,
987 PREFIX_0F2B,
988 PREFIX_0F2C,
989 PREFIX_0F2D,
990 PREFIX_0F2E,
991 PREFIX_0F2F,
992 PREFIX_0F51,
993 PREFIX_0F52,
994 PREFIX_0F53,
995 PREFIX_0F58,
996 PREFIX_0F59,
997 PREFIX_0F5A,
998 PREFIX_0F5B,
999 PREFIX_0F5C,
1000 PREFIX_0F5D,
1001 PREFIX_0F5E,
1002 PREFIX_0F5F,
1003 PREFIX_0F60,
1004 PREFIX_0F61,
1005 PREFIX_0F62,
1006 PREFIX_0F6C,
1007 PREFIX_0F6D,
1008 PREFIX_0F6F,
1009 PREFIX_0F70,
1010 PREFIX_0F73_REG_3,
1011 PREFIX_0F73_REG_7,
1012 PREFIX_0F78,
1013 PREFIX_0F79,
1014 PREFIX_0F7C,
1015 PREFIX_0F7D,
1016 PREFIX_0F7E,
1017 PREFIX_0F7F,
c7b8aa3a
L
1018 PREFIX_0FAE_REG_0,
1019 PREFIX_0FAE_REG_1,
1020 PREFIX_0FAE_REG_2,
1021 PREFIX_0FAE_REG_3,
6b40c462
L
1022 PREFIX_MOD_0_0FAE_REG_4,
1023 PREFIX_MOD_3_0FAE_REG_4,
603555e5 1024 PREFIX_MOD_0_0FAE_REG_5,
2234eee6 1025 PREFIX_MOD_3_0FAE_REG_5,
de89d0a3
IT
1026 PREFIX_MOD_0_0FAE_REG_6,
1027 PREFIX_MOD_1_0FAE_REG_6,
963f3586 1028 PREFIX_0FAE_REG_7,
3873ba12 1029 PREFIX_0FB8,
f12dc422 1030 PREFIX_0FBC,
3873ba12
L
1031 PREFIX_0FBD,
1032 PREFIX_0FC2,
a8484f96 1033 PREFIX_MOD_0_0FC3,
f24bcbaa
L
1034 PREFIX_MOD_0_0FC7_REG_6,
1035 PREFIX_MOD_3_0FC7_REG_6,
1036 PREFIX_MOD_3_0FC7_REG_7,
3873ba12
L
1037 PREFIX_0FD0,
1038 PREFIX_0FD6,
1039 PREFIX_0FE6,
1040 PREFIX_0FE7,
1041 PREFIX_0FF0,
1042 PREFIX_0FF7,
1043 PREFIX_0F3810,
1044 PREFIX_0F3814,
1045 PREFIX_0F3815,
1046 PREFIX_0F3817,
1047 PREFIX_0F3820,
1048 PREFIX_0F3821,
1049 PREFIX_0F3822,
1050 PREFIX_0F3823,
1051 PREFIX_0F3824,
1052 PREFIX_0F3825,
1053 PREFIX_0F3828,
1054 PREFIX_0F3829,
1055 PREFIX_0F382A,
1056 PREFIX_0F382B,
1057 PREFIX_0F3830,
1058 PREFIX_0F3831,
1059 PREFIX_0F3832,
1060 PREFIX_0F3833,
1061 PREFIX_0F3834,
1062 PREFIX_0F3835,
1063 PREFIX_0F3837,
1064 PREFIX_0F3838,
1065 PREFIX_0F3839,
1066 PREFIX_0F383A,
1067 PREFIX_0F383B,
1068 PREFIX_0F383C,
1069 PREFIX_0F383D,
1070 PREFIX_0F383E,
1071 PREFIX_0F383F,
1072 PREFIX_0F3840,
1073 PREFIX_0F3841,
1074 PREFIX_0F3880,
1075 PREFIX_0F3881,
6c30d220 1076 PREFIX_0F3882,
a0046408
L
1077 PREFIX_0F38C8,
1078 PREFIX_0F38C9,
1079 PREFIX_0F38CA,
1080 PREFIX_0F38CB,
1081 PREFIX_0F38CC,
1082 PREFIX_0F38CD,
48521003 1083 PREFIX_0F38CF,
3873ba12
L
1084 PREFIX_0F38DB,
1085 PREFIX_0F38DC,
1086 PREFIX_0F38DD,
1087 PREFIX_0F38DE,
1088 PREFIX_0F38DF,
1089 PREFIX_0F38F0,
1090 PREFIX_0F38F1,
603555e5 1091 PREFIX_0F38F5,
e2e1fcde 1092 PREFIX_0F38F6,
c0a30a9f
L
1093 PREFIX_0F38F8,
1094 PREFIX_0F38F9,
3873ba12
L
1095 PREFIX_0F3A08,
1096 PREFIX_0F3A09,
1097 PREFIX_0F3A0A,
1098 PREFIX_0F3A0B,
1099 PREFIX_0F3A0C,
1100 PREFIX_0F3A0D,
1101 PREFIX_0F3A0E,
1102 PREFIX_0F3A14,
1103 PREFIX_0F3A15,
1104 PREFIX_0F3A16,
1105 PREFIX_0F3A17,
1106 PREFIX_0F3A20,
1107 PREFIX_0F3A21,
1108 PREFIX_0F3A22,
1109 PREFIX_0F3A40,
1110 PREFIX_0F3A41,
1111 PREFIX_0F3A42,
1112 PREFIX_0F3A44,
1113 PREFIX_0F3A60,
1114 PREFIX_0F3A61,
1115 PREFIX_0F3A62,
1116 PREFIX_0F3A63,
a0046408 1117 PREFIX_0F3ACC,
48521003
IT
1118 PREFIX_0F3ACE,
1119 PREFIX_0F3ACF,
3873ba12 1120 PREFIX_0F3ADF,
592a252b
L
1121 PREFIX_VEX_0F10,
1122 PREFIX_VEX_0F11,
1123 PREFIX_VEX_0F12,
1124 PREFIX_VEX_0F16,
1125 PREFIX_VEX_0F2A,
1126 PREFIX_VEX_0F2C,
1127 PREFIX_VEX_0F2D,
1128 PREFIX_VEX_0F2E,
1129 PREFIX_VEX_0F2F,
43234a1e
L
1130 PREFIX_VEX_0F41,
1131 PREFIX_VEX_0F42,
1132 PREFIX_VEX_0F44,
1133 PREFIX_VEX_0F45,
1134 PREFIX_VEX_0F46,
1135 PREFIX_VEX_0F47,
1ba585e8 1136 PREFIX_VEX_0F4A,
43234a1e 1137 PREFIX_VEX_0F4B,
592a252b
L
1138 PREFIX_VEX_0F51,
1139 PREFIX_VEX_0F52,
1140 PREFIX_VEX_0F53,
1141 PREFIX_VEX_0F58,
1142 PREFIX_VEX_0F59,
1143 PREFIX_VEX_0F5A,
1144 PREFIX_VEX_0F5B,
1145 PREFIX_VEX_0F5C,
1146 PREFIX_VEX_0F5D,
1147 PREFIX_VEX_0F5E,
1148 PREFIX_VEX_0F5F,
1149 PREFIX_VEX_0F60,
1150 PREFIX_VEX_0F61,
1151 PREFIX_VEX_0F62,
1152 PREFIX_VEX_0F63,
1153 PREFIX_VEX_0F64,
1154 PREFIX_VEX_0F65,
1155 PREFIX_VEX_0F66,
1156 PREFIX_VEX_0F67,
1157 PREFIX_VEX_0F68,
1158 PREFIX_VEX_0F69,
1159 PREFIX_VEX_0F6A,
1160 PREFIX_VEX_0F6B,
1161 PREFIX_VEX_0F6C,
1162 PREFIX_VEX_0F6D,
1163 PREFIX_VEX_0F6E,
1164 PREFIX_VEX_0F6F,
1165 PREFIX_VEX_0F70,
1166 PREFIX_VEX_0F71_REG_2,
1167 PREFIX_VEX_0F71_REG_4,
1168 PREFIX_VEX_0F71_REG_6,
1169 PREFIX_VEX_0F72_REG_2,
1170 PREFIX_VEX_0F72_REG_4,
1171 PREFIX_VEX_0F72_REG_6,
1172 PREFIX_VEX_0F73_REG_2,
1173 PREFIX_VEX_0F73_REG_3,
1174 PREFIX_VEX_0F73_REG_6,
1175 PREFIX_VEX_0F73_REG_7,
1176 PREFIX_VEX_0F74,
1177 PREFIX_VEX_0F75,
1178 PREFIX_VEX_0F76,
1179 PREFIX_VEX_0F77,
1180 PREFIX_VEX_0F7C,
1181 PREFIX_VEX_0F7D,
1182 PREFIX_VEX_0F7E,
1183 PREFIX_VEX_0F7F,
43234a1e
L
1184 PREFIX_VEX_0F90,
1185 PREFIX_VEX_0F91,
1186 PREFIX_VEX_0F92,
1187 PREFIX_VEX_0F93,
1188 PREFIX_VEX_0F98,
1ba585e8 1189 PREFIX_VEX_0F99,
592a252b
L
1190 PREFIX_VEX_0FC2,
1191 PREFIX_VEX_0FC4,
1192 PREFIX_VEX_0FC5,
1193 PREFIX_VEX_0FD0,
1194 PREFIX_VEX_0FD1,
1195 PREFIX_VEX_0FD2,
1196 PREFIX_VEX_0FD3,
1197 PREFIX_VEX_0FD4,
1198 PREFIX_VEX_0FD5,
1199 PREFIX_VEX_0FD6,
1200 PREFIX_VEX_0FD7,
1201 PREFIX_VEX_0FD8,
1202 PREFIX_VEX_0FD9,
1203 PREFIX_VEX_0FDA,
1204 PREFIX_VEX_0FDB,
1205 PREFIX_VEX_0FDC,
1206 PREFIX_VEX_0FDD,
1207 PREFIX_VEX_0FDE,
1208 PREFIX_VEX_0FDF,
1209 PREFIX_VEX_0FE0,
1210 PREFIX_VEX_0FE1,
1211 PREFIX_VEX_0FE2,
1212 PREFIX_VEX_0FE3,
1213 PREFIX_VEX_0FE4,
1214 PREFIX_VEX_0FE5,
1215 PREFIX_VEX_0FE6,
1216 PREFIX_VEX_0FE7,
1217 PREFIX_VEX_0FE8,
1218 PREFIX_VEX_0FE9,
1219 PREFIX_VEX_0FEA,
1220 PREFIX_VEX_0FEB,
1221 PREFIX_VEX_0FEC,
1222 PREFIX_VEX_0FED,
1223 PREFIX_VEX_0FEE,
1224 PREFIX_VEX_0FEF,
1225 PREFIX_VEX_0FF0,
1226 PREFIX_VEX_0FF1,
1227 PREFIX_VEX_0FF2,
1228 PREFIX_VEX_0FF3,
1229 PREFIX_VEX_0FF4,
1230 PREFIX_VEX_0FF5,
1231 PREFIX_VEX_0FF6,
1232 PREFIX_VEX_0FF7,
1233 PREFIX_VEX_0FF8,
1234 PREFIX_VEX_0FF9,
1235 PREFIX_VEX_0FFA,
1236 PREFIX_VEX_0FFB,
1237 PREFIX_VEX_0FFC,
1238 PREFIX_VEX_0FFD,
1239 PREFIX_VEX_0FFE,
1240 PREFIX_VEX_0F3800,
1241 PREFIX_VEX_0F3801,
1242 PREFIX_VEX_0F3802,
1243 PREFIX_VEX_0F3803,
1244 PREFIX_VEX_0F3804,
1245 PREFIX_VEX_0F3805,
1246 PREFIX_VEX_0F3806,
1247 PREFIX_VEX_0F3807,
1248 PREFIX_VEX_0F3808,
1249 PREFIX_VEX_0F3809,
1250 PREFIX_VEX_0F380A,
1251 PREFIX_VEX_0F380B,
1252 PREFIX_VEX_0F380C,
1253 PREFIX_VEX_0F380D,
1254 PREFIX_VEX_0F380E,
1255 PREFIX_VEX_0F380F,
1256 PREFIX_VEX_0F3813,
6c30d220 1257 PREFIX_VEX_0F3816,
592a252b
L
1258 PREFIX_VEX_0F3817,
1259 PREFIX_VEX_0F3818,
1260 PREFIX_VEX_0F3819,
1261 PREFIX_VEX_0F381A,
1262 PREFIX_VEX_0F381C,
1263 PREFIX_VEX_0F381D,
1264 PREFIX_VEX_0F381E,
1265 PREFIX_VEX_0F3820,
1266 PREFIX_VEX_0F3821,
1267 PREFIX_VEX_0F3822,
1268 PREFIX_VEX_0F3823,
1269 PREFIX_VEX_0F3824,
1270 PREFIX_VEX_0F3825,
1271 PREFIX_VEX_0F3828,
1272 PREFIX_VEX_0F3829,
1273 PREFIX_VEX_0F382A,
1274 PREFIX_VEX_0F382B,
1275 PREFIX_VEX_0F382C,
1276 PREFIX_VEX_0F382D,
1277 PREFIX_VEX_0F382E,
1278 PREFIX_VEX_0F382F,
1279 PREFIX_VEX_0F3830,
1280 PREFIX_VEX_0F3831,
1281 PREFIX_VEX_0F3832,
1282 PREFIX_VEX_0F3833,
1283 PREFIX_VEX_0F3834,
1284 PREFIX_VEX_0F3835,
6c30d220 1285 PREFIX_VEX_0F3836,
592a252b
L
1286 PREFIX_VEX_0F3837,
1287 PREFIX_VEX_0F3838,
1288 PREFIX_VEX_0F3839,
1289 PREFIX_VEX_0F383A,
1290 PREFIX_VEX_0F383B,
1291 PREFIX_VEX_0F383C,
1292 PREFIX_VEX_0F383D,
1293 PREFIX_VEX_0F383E,
1294 PREFIX_VEX_0F383F,
1295 PREFIX_VEX_0F3840,
1296 PREFIX_VEX_0F3841,
6c30d220
L
1297 PREFIX_VEX_0F3845,
1298 PREFIX_VEX_0F3846,
1299 PREFIX_VEX_0F3847,
1300 PREFIX_VEX_0F3858,
1301 PREFIX_VEX_0F3859,
1302 PREFIX_VEX_0F385A,
1303 PREFIX_VEX_0F3878,
1304 PREFIX_VEX_0F3879,
1305 PREFIX_VEX_0F388C,
1306 PREFIX_VEX_0F388E,
1307 PREFIX_VEX_0F3890,
1308 PREFIX_VEX_0F3891,
1309 PREFIX_VEX_0F3892,
1310 PREFIX_VEX_0F3893,
592a252b
L
1311 PREFIX_VEX_0F3896,
1312 PREFIX_VEX_0F3897,
1313 PREFIX_VEX_0F3898,
1314 PREFIX_VEX_0F3899,
1315 PREFIX_VEX_0F389A,
1316 PREFIX_VEX_0F389B,
1317 PREFIX_VEX_0F389C,
1318 PREFIX_VEX_0F389D,
1319 PREFIX_VEX_0F389E,
1320 PREFIX_VEX_0F389F,
1321 PREFIX_VEX_0F38A6,
1322 PREFIX_VEX_0F38A7,
1323 PREFIX_VEX_0F38A8,
1324 PREFIX_VEX_0F38A9,
1325 PREFIX_VEX_0F38AA,
1326 PREFIX_VEX_0F38AB,
1327 PREFIX_VEX_0F38AC,
1328 PREFIX_VEX_0F38AD,
1329 PREFIX_VEX_0F38AE,
1330 PREFIX_VEX_0F38AF,
1331 PREFIX_VEX_0F38B6,
1332 PREFIX_VEX_0F38B7,
1333 PREFIX_VEX_0F38B8,
1334 PREFIX_VEX_0F38B9,
1335 PREFIX_VEX_0F38BA,
1336 PREFIX_VEX_0F38BB,
1337 PREFIX_VEX_0F38BC,
1338 PREFIX_VEX_0F38BD,
1339 PREFIX_VEX_0F38BE,
1340 PREFIX_VEX_0F38BF,
48521003 1341 PREFIX_VEX_0F38CF,
592a252b
L
1342 PREFIX_VEX_0F38DB,
1343 PREFIX_VEX_0F38DC,
1344 PREFIX_VEX_0F38DD,
1345 PREFIX_VEX_0F38DE,
1346 PREFIX_VEX_0F38DF,
f12dc422
L
1347 PREFIX_VEX_0F38F2,
1348 PREFIX_VEX_0F38F3_REG_1,
1349 PREFIX_VEX_0F38F3_REG_2,
1350 PREFIX_VEX_0F38F3_REG_3,
6c30d220
L
1351 PREFIX_VEX_0F38F5,
1352 PREFIX_VEX_0F38F6,
f12dc422 1353 PREFIX_VEX_0F38F7,
6c30d220
L
1354 PREFIX_VEX_0F3A00,
1355 PREFIX_VEX_0F3A01,
1356 PREFIX_VEX_0F3A02,
592a252b
L
1357 PREFIX_VEX_0F3A04,
1358 PREFIX_VEX_0F3A05,
1359 PREFIX_VEX_0F3A06,
1360 PREFIX_VEX_0F3A08,
1361 PREFIX_VEX_0F3A09,
1362 PREFIX_VEX_0F3A0A,
1363 PREFIX_VEX_0F3A0B,
1364 PREFIX_VEX_0F3A0C,
1365 PREFIX_VEX_0F3A0D,
1366 PREFIX_VEX_0F3A0E,
1367 PREFIX_VEX_0F3A0F,
1368 PREFIX_VEX_0F3A14,
1369 PREFIX_VEX_0F3A15,
1370 PREFIX_VEX_0F3A16,
1371 PREFIX_VEX_0F3A17,
1372 PREFIX_VEX_0F3A18,
1373 PREFIX_VEX_0F3A19,
1374 PREFIX_VEX_0F3A1D,
1375 PREFIX_VEX_0F3A20,
1376 PREFIX_VEX_0F3A21,
1377 PREFIX_VEX_0F3A22,
43234a1e 1378 PREFIX_VEX_0F3A30,
1ba585e8 1379 PREFIX_VEX_0F3A31,
43234a1e 1380 PREFIX_VEX_0F3A32,
1ba585e8 1381 PREFIX_VEX_0F3A33,
6c30d220
L
1382 PREFIX_VEX_0F3A38,
1383 PREFIX_VEX_0F3A39,
592a252b
L
1384 PREFIX_VEX_0F3A40,
1385 PREFIX_VEX_0F3A41,
1386 PREFIX_VEX_0F3A42,
1387 PREFIX_VEX_0F3A44,
6c30d220 1388 PREFIX_VEX_0F3A46,
592a252b
L
1389 PREFIX_VEX_0F3A48,
1390 PREFIX_VEX_0F3A49,
1391 PREFIX_VEX_0F3A4A,
1392 PREFIX_VEX_0F3A4B,
1393 PREFIX_VEX_0F3A4C,
1394 PREFIX_VEX_0F3A5C,
1395 PREFIX_VEX_0F3A5D,
1396 PREFIX_VEX_0F3A5E,
1397 PREFIX_VEX_0F3A5F,
1398 PREFIX_VEX_0F3A60,
1399 PREFIX_VEX_0F3A61,
1400 PREFIX_VEX_0F3A62,
1401 PREFIX_VEX_0F3A63,
1402 PREFIX_VEX_0F3A68,
1403 PREFIX_VEX_0F3A69,
1404 PREFIX_VEX_0F3A6A,
1405 PREFIX_VEX_0F3A6B,
1406 PREFIX_VEX_0F3A6C,
1407 PREFIX_VEX_0F3A6D,
1408 PREFIX_VEX_0F3A6E,
1409 PREFIX_VEX_0F3A6F,
1410 PREFIX_VEX_0F3A78,
1411 PREFIX_VEX_0F3A79,
1412 PREFIX_VEX_0F3A7A,
1413 PREFIX_VEX_0F3A7B,
1414 PREFIX_VEX_0F3A7C,
1415 PREFIX_VEX_0F3A7D,
1416 PREFIX_VEX_0F3A7E,
1417 PREFIX_VEX_0F3A7F,
48521003
IT
1418 PREFIX_VEX_0F3ACE,
1419 PREFIX_VEX_0F3ACF,
6c30d220 1420 PREFIX_VEX_0F3ADF,
43234a1e
L
1421 PREFIX_VEX_0F3AF0,
1422
1423 PREFIX_EVEX_0F10,
1424 PREFIX_EVEX_0F11,
1425 PREFIX_EVEX_0F12,
1426 PREFIX_EVEX_0F13,
1427 PREFIX_EVEX_0F14,
1428 PREFIX_EVEX_0F15,
1429 PREFIX_EVEX_0F16,
1430 PREFIX_EVEX_0F17,
1431 PREFIX_EVEX_0F28,
1432 PREFIX_EVEX_0F29,
1433 PREFIX_EVEX_0F2A,
1434 PREFIX_EVEX_0F2B,
1435 PREFIX_EVEX_0F2C,
1436 PREFIX_EVEX_0F2D,
1437 PREFIX_EVEX_0F2E,
1438 PREFIX_EVEX_0F2F,
1439 PREFIX_EVEX_0F51,
90a915bf
IT
1440 PREFIX_EVEX_0F54,
1441 PREFIX_EVEX_0F55,
1442 PREFIX_EVEX_0F56,
1443 PREFIX_EVEX_0F57,
43234a1e
L
1444 PREFIX_EVEX_0F58,
1445 PREFIX_EVEX_0F59,
1446 PREFIX_EVEX_0F5A,
1447 PREFIX_EVEX_0F5B,
1448 PREFIX_EVEX_0F5C,
1449 PREFIX_EVEX_0F5D,
1450 PREFIX_EVEX_0F5E,
1451 PREFIX_EVEX_0F5F,
1ba585e8
IT
1452 PREFIX_EVEX_0F60,
1453 PREFIX_EVEX_0F61,
43234a1e 1454 PREFIX_EVEX_0F62,
1ba585e8
IT
1455 PREFIX_EVEX_0F63,
1456 PREFIX_EVEX_0F64,
1457 PREFIX_EVEX_0F65,
43234a1e 1458 PREFIX_EVEX_0F66,
1ba585e8
IT
1459 PREFIX_EVEX_0F67,
1460 PREFIX_EVEX_0F68,
1461 PREFIX_EVEX_0F69,
43234a1e 1462 PREFIX_EVEX_0F6A,
1ba585e8 1463 PREFIX_EVEX_0F6B,
43234a1e
L
1464 PREFIX_EVEX_0F6C,
1465 PREFIX_EVEX_0F6D,
1466 PREFIX_EVEX_0F6E,
1467 PREFIX_EVEX_0F6F,
1468 PREFIX_EVEX_0F70,
1ba585e8
IT
1469 PREFIX_EVEX_0F71_REG_2,
1470 PREFIX_EVEX_0F71_REG_4,
1471 PREFIX_EVEX_0F71_REG_6,
43234a1e
L
1472 PREFIX_EVEX_0F72_REG_0,
1473 PREFIX_EVEX_0F72_REG_1,
1474 PREFIX_EVEX_0F72_REG_2,
1475 PREFIX_EVEX_0F72_REG_4,
1476 PREFIX_EVEX_0F72_REG_6,
1477 PREFIX_EVEX_0F73_REG_2,
1ba585e8 1478 PREFIX_EVEX_0F73_REG_3,
43234a1e 1479 PREFIX_EVEX_0F73_REG_6,
1ba585e8
IT
1480 PREFIX_EVEX_0F73_REG_7,
1481 PREFIX_EVEX_0F74,
1482 PREFIX_EVEX_0F75,
43234a1e
L
1483 PREFIX_EVEX_0F76,
1484 PREFIX_EVEX_0F78,
1485 PREFIX_EVEX_0F79,
1486 PREFIX_EVEX_0F7A,
1487 PREFIX_EVEX_0F7B,
1488 PREFIX_EVEX_0F7E,
1489 PREFIX_EVEX_0F7F,
1490 PREFIX_EVEX_0FC2,
1ba585e8
IT
1491 PREFIX_EVEX_0FC4,
1492 PREFIX_EVEX_0FC5,
43234a1e 1493 PREFIX_EVEX_0FC6,
1ba585e8 1494 PREFIX_EVEX_0FD1,
43234a1e
L
1495 PREFIX_EVEX_0FD2,
1496 PREFIX_EVEX_0FD3,
1497 PREFIX_EVEX_0FD4,
1ba585e8 1498 PREFIX_EVEX_0FD5,
43234a1e 1499 PREFIX_EVEX_0FD6,
1ba585e8
IT
1500 PREFIX_EVEX_0FD8,
1501 PREFIX_EVEX_0FD9,
1502 PREFIX_EVEX_0FDA,
43234a1e 1503 PREFIX_EVEX_0FDB,
1ba585e8
IT
1504 PREFIX_EVEX_0FDC,
1505 PREFIX_EVEX_0FDD,
1506 PREFIX_EVEX_0FDE,
43234a1e 1507 PREFIX_EVEX_0FDF,
1ba585e8
IT
1508 PREFIX_EVEX_0FE0,
1509 PREFIX_EVEX_0FE1,
43234a1e 1510 PREFIX_EVEX_0FE2,
1ba585e8
IT
1511 PREFIX_EVEX_0FE3,
1512 PREFIX_EVEX_0FE4,
1513 PREFIX_EVEX_0FE5,
43234a1e
L
1514 PREFIX_EVEX_0FE6,
1515 PREFIX_EVEX_0FE7,
1ba585e8
IT
1516 PREFIX_EVEX_0FE8,
1517 PREFIX_EVEX_0FE9,
1518 PREFIX_EVEX_0FEA,
43234a1e 1519 PREFIX_EVEX_0FEB,
1ba585e8
IT
1520 PREFIX_EVEX_0FEC,
1521 PREFIX_EVEX_0FED,
1522 PREFIX_EVEX_0FEE,
43234a1e 1523 PREFIX_EVEX_0FEF,
1ba585e8 1524 PREFIX_EVEX_0FF1,
43234a1e
L
1525 PREFIX_EVEX_0FF2,
1526 PREFIX_EVEX_0FF3,
1527 PREFIX_EVEX_0FF4,
1ba585e8
IT
1528 PREFIX_EVEX_0FF5,
1529 PREFIX_EVEX_0FF6,
1530 PREFIX_EVEX_0FF8,
1531 PREFIX_EVEX_0FF9,
43234a1e
L
1532 PREFIX_EVEX_0FFA,
1533 PREFIX_EVEX_0FFB,
1ba585e8
IT
1534 PREFIX_EVEX_0FFC,
1535 PREFIX_EVEX_0FFD,
43234a1e 1536 PREFIX_EVEX_0FFE,
1ba585e8
IT
1537 PREFIX_EVEX_0F3800,
1538 PREFIX_EVEX_0F3804,
1539 PREFIX_EVEX_0F380B,
43234a1e
L
1540 PREFIX_EVEX_0F380C,
1541 PREFIX_EVEX_0F380D,
1ba585e8 1542 PREFIX_EVEX_0F3810,
43234a1e
L
1543 PREFIX_EVEX_0F3811,
1544 PREFIX_EVEX_0F3812,
1545 PREFIX_EVEX_0F3813,
1546 PREFIX_EVEX_0F3814,
1547 PREFIX_EVEX_0F3815,
1548 PREFIX_EVEX_0F3816,
1549 PREFIX_EVEX_0F3818,
1550 PREFIX_EVEX_0F3819,
1551 PREFIX_EVEX_0F381A,
1552 PREFIX_EVEX_0F381B,
1ba585e8
IT
1553 PREFIX_EVEX_0F381C,
1554 PREFIX_EVEX_0F381D,
43234a1e
L
1555 PREFIX_EVEX_0F381E,
1556 PREFIX_EVEX_0F381F,
1ba585e8 1557 PREFIX_EVEX_0F3820,
43234a1e
L
1558 PREFIX_EVEX_0F3821,
1559 PREFIX_EVEX_0F3822,
1560 PREFIX_EVEX_0F3823,
1561 PREFIX_EVEX_0F3824,
1562 PREFIX_EVEX_0F3825,
1ba585e8 1563 PREFIX_EVEX_0F3826,
43234a1e
L
1564 PREFIX_EVEX_0F3827,
1565 PREFIX_EVEX_0F3828,
1566 PREFIX_EVEX_0F3829,
1567 PREFIX_EVEX_0F382A,
1ba585e8 1568 PREFIX_EVEX_0F382B,
43234a1e
L
1569 PREFIX_EVEX_0F382C,
1570 PREFIX_EVEX_0F382D,
1ba585e8 1571 PREFIX_EVEX_0F3830,
43234a1e
L
1572 PREFIX_EVEX_0F3831,
1573 PREFIX_EVEX_0F3832,
1574 PREFIX_EVEX_0F3833,
1575 PREFIX_EVEX_0F3834,
1576 PREFIX_EVEX_0F3835,
1577 PREFIX_EVEX_0F3836,
1578 PREFIX_EVEX_0F3837,
1ba585e8 1579 PREFIX_EVEX_0F3838,
43234a1e
L
1580 PREFIX_EVEX_0F3839,
1581 PREFIX_EVEX_0F383A,
1582 PREFIX_EVEX_0F383B,
1ba585e8 1583 PREFIX_EVEX_0F383C,
43234a1e 1584 PREFIX_EVEX_0F383D,
1ba585e8 1585 PREFIX_EVEX_0F383E,
43234a1e
L
1586 PREFIX_EVEX_0F383F,
1587 PREFIX_EVEX_0F3840,
1588 PREFIX_EVEX_0F3842,
1589 PREFIX_EVEX_0F3843,
1590 PREFIX_EVEX_0F3844,
1591 PREFIX_EVEX_0F3845,
1592 PREFIX_EVEX_0F3846,
1593 PREFIX_EVEX_0F3847,
1594 PREFIX_EVEX_0F384C,
1595 PREFIX_EVEX_0F384D,
1596 PREFIX_EVEX_0F384E,
1597 PREFIX_EVEX_0F384F,
8cfcb765
IT
1598 PREFIX_EVEX_0F3850,
1599 PREFIX_EVEX_0F3851,
47acf0bd
IT
1600 PREFIX_EVEX_0F3852,
1601 PREFIX_EVEX_0F3853,
ee6872be 1602 PREFIX_EVEX_0F3854,
620214f7 1603 PREFIX_EVEX_0F3855,
43234a1e
L
1604 PREFIX_EVEX_0F3858,
1605 PREFIX_EVEX_0F3859,
1606 PREFIX_EVEX_0F385A,
1607 PREFIX_EVEX_0F385B,
53467f57
IT
1608 PREFIX_EVEX_0F3862,
1609 PREFIX_EVEX_0F3863,
43234a1e
L
1610 PREFIX_EVEX_0F3864,
1611 PREFIX_EVEX_0F3865,
1ba585e8 1612 PREFIX_EVEX_0F3866,
9186c494 1613 PREFIX_EVEX_0F3868,
53467f57
IT
1614 PREFIX_EVEX_0F3870,
1615 PREFIX_EVEX_0F3871,
1616 PREFIX_EVEX_0F3872,
1617 PREFIX_EVEX_0F3873,
1ba585e8 1618 PREFIX_EVEX_0F3875,
43234a1e
L
1619 PREFIX_EVEX_0F3876,
1620 PREFIX_EVEX_0F3877,
1ba585e8
IT
1621 PREFIX_EVEX_0F3878,
1622 PREFIX_EVEX_0F3879,
1623 PREFIX_EVEX_0F387A,
1624 PREFIX_EVEX_0F387B,
43234a1e 1625 PREFIX_EVEX_0F387C,
1ba585e8 1626 PREFIX_EVEX_0F387D,
43234a1e
L
1627 PREFIX_EVEX_0F387E,
1628 PREFIX_EVEX_0F387F,
14f195c9 1629 PREFIX_EVEX_0F3883,
43234a1e
L
1630 PREFIX_EVEX_0F3888,
1631 PREFIX_EVEX_0F3889,
1632 PREFIX_EVEX_0F388A,
1633 PREFIX_EVEX_0F388B,
1ba585e8 1634 PREFIX_EVEX_0F388D,
ee6872be 1635 PREFIX_EVEX_0F388F,
43234a1e
L
1636 PREFIX_EVEX_0F3890,
1637 PREFIX_EVEX_0F3891,
1638 PREFIX_EVEX_0F3892,
1639 PREFIX_EVEX_0F3893,
1640 PREFIX_EVEX_0F3896,
1641 PREFIX_EVEX_0F3897,
1642 PREFIX_EVEX_0F3898,
1643 PREFIX_EVEX_0F3899,
1644 PREFIX_EVEX_0F389A,
1645 PREFIX_EVEX_0F389B,
1646 PREFIX_EVEX_0F389C,
1647 PREFIX_EVEX_0F389D,
1648 PREFIX_EVEX_0F389E,
1649 PREFIX_EVEX_0F389F,
1650 PREFIX_EVEX_0F38A0,
1651 PREFIX_EVEX_0F38A1,
1652 PREFIX_EVEX_0F38A2,
1653 PREFIX_EVEX_0F38A3,
1654 PREFIX_EVEX_0F38A6,
1655 PREFIX_EVEX_0F38A7,
1656 PREFIX_EVEX_0F38A8,
1657 PREFIX_EVEX_0F38A9,
1658 PREFIX_EVEX_0F38AA,
1659 PREFIX_EVEX_0F38AB,
1660 PREFIX_EVEX_0F38AC,
1661 PREFIX_EVEX_0F38AD,
1662 PREFIX_EVEX_0F38AE,
1663 PREFIX_EVEX_0F38AF,
2cc1b5aa
IT
1664 PREFIX_EVEX_0F38B4,
1665 PREFIX_EVEX_0F38B5,
43234a1e
L
1666 PREFIX_EVEX_0F38B6,
1667 PREFIX_EVEX_0F38B7,
1668 PREFIX_EVEX_0F38B8,
1669 PREFIX_EVEX_0F38B9,
1670 PREFIX_EVEX_0F38BA,
1671 PREFIX_EVEX_0F38BB,
1672 PREFIX_EVEX_0F38BC,
1673 PREFIX_EVEX_0F38BD,
1674 PREFIX_EVEX_0F38BE,
1675 PREFIX_EVEX_0F38BF,
1676 PREFIX_EVEX_0F38C4,
1677 PREFIX_EVEX_0F38C6_REG_1,
1678 PREFIX_EVEX_0F38C6_REG_2,
1679 PREFIX_EVEX_0F38C6_REG_5,
1680 PREFIX_EVEX_0F38C6_REG_6,
1681 PREFIX_EVEX_0F38C7_REG_1,
1682 PREFIX_EVEX_0F38C7_REG_2,
1683 PREFIX_EVEX_0F38C7_REG_5,
1684 PREFIX_EVEX_0F38C7_REG_6,
1685 PREFIX_EVEX_0F38C8,
1686 PREFIX_EVEX_0F38CA,
1687 PREFIX_EVEX_0F38CB,
1688 PREFIX_EVEX_0F38CC,
1689 PREFIX_EVEX_0F38CD,
48521003 1690 PREFIX_EVEX_0F38CF,
8dcf1fad
IT
1691 PREFIX_EVEX_0F38DC,
1692 PREFIX_EVEX_0F38DD,
1693 PREFIX_EVEX_0F38DE,
1694 PREFIX_EVEX_0F38DF,
43234a1e
L
1695
1696 PREFIX_EVEX_0F3A00,
1697 PREFIX_EVEX_0F3A01,
1698 PREFIX_EVEX_0F3A03,
1699 PREFIX_EVEX_0F3A04,
1700 PREFIX_EVEX_0F3A05,
1701 PREFIX_EVEX_0F3A08,
1702 PREFIX_EVEX_0F3A09,
1703 PREFIX_EVEX_0F3A0A,
1704 PREFIX_EVEX_0F3A0B,
1ba585e8
IT
1705 PREFIX_EVEX_0F3A0F,
1706 PREFIX_EVEX_0F3A14,
1707 PREFIX_EVEX_0F3A15,
90a915bf 1708 PREFIX_EVEX_0F3A16,
43234a1e
L
1709 PREFIX_EVEX_0F3A17,
1710 PREFIX_EVEX_0F3A18,
1711 PREFIX_EVEX_0F3A19,
1712 PREFIX_EVEX_0F3A1A,
1713 PREFIX_EVEX_0F3A1B,
1714 PREFIX_EVEX_0F3A1D,
1715 PREFIX_EVEX_0F3A1E,
1716 PREFIX_EVEX_0F3A1F,
1ba585e8 1717 PREFIX_EVEX_0F3A20,
43234a1e 1718 PREFIX_EVEX_0F3A21,
90a915bf 1719 PREFIX_EVEX_0F3A22,
43234a1e
L
1720 PREFIX_EVEX_0F3A23,
1721 PREFIX_EVEX_0F3A25,
1722 PREFIX_EVEX_0F3A26,
1723 PREFIX_EVEX_0F3A27,
1724 PREFIX_EVEX_0F3A38,
1725 PREFIX_EVEX_0F3A39,
1726 PREFIX_EVEX_0F3A3A,
1727 PREFIX_EVEX_0F3A3B,
1ba585e8
IT
1728 PREFIX_EVEX_0F3A3E,
1729 PREFIX_EVEX_0F3A3F,
1730 PREFIX_EVEX_0F3A42,
43234a1e 1731 PREFIX_EVEX_0F3A43,
ff1982d5 1732 PREFIX_EVEX_0F3A44,
90a915bf
IT
1733 PREFIX_EVEX_0F3A50,
1734 PREFIX_EVEX_0F3A51,
43234a1e 1735 PREFIX_EVEX_0F3A54,
90a915bf
IT
1736 PREFIX_EVEX_0F3A55,
1737 PREFIX_EVEX_0F3A56,
1738 PREFIX_EVEX_0F3A57,
1739 PREFIX_EVEX_0F3A66,
53467f57
IT
1740 PREFIX_EVEX_0F3A67,
1741 PREFIX_EVEX_0F3A70,
1742 PREFIX_EVEX_0F3A71,
1743 PREFIX_EVEX_0F3A72,
48521003
IT
1744 PREFIX_EVEX_0F3A73,
1745 PREFIX_EVEX_0F3ACE,
1746 PREFIX_EVEX_0F3ACF
51e7da1b 1747};
4e7d34a6 1748
51e7da1b
L
1749enum
1750{
1751 X86_64_06 = 0,
3873ba12
L
1752 X86_64_07,
1753 X86_64_0D,
1754 X86_64_16,
1755 X86_64_17,
1756 X86_64_1E,
1757 X86_64_1F,
1758 X86_64_27,
1759 X86_64_2F,
1760 X86_64_37,
1761 X86_64_3F,
1762 X86_64_60,
1763 X86_64_61,
1764 X86_64_62,
1765 X86_64_63,
1766 X86_64_6D,
1767 X86_64_6F,
d039fef3 1768 X86_64_82,
3873ba12
L
1769 X86_64_9A,
1770 X86_64_C4,
1771 X86_64_C5,
1772 X86_64_CE,
1773 X86_64_D4,
1774 X86_64_D5,
a72d2af2
L
1775 X86_64_E8,
1776 X86_64_E9,
3873ba12
L
1777 X86_64_EA,
1778 X86_64_0F01_REG_0,
1779 X86_64_0F01_REG_1,
1780 X86_64_0F01_REG_2,
1781 X86_64_0F01_REG_3
51e7da1b 1782};
4e7d34a6 1783
51e7da1b
L
1784enum
1785{
1786 THREE_BYTE_0F38 = 0,
1f334aeb 1787 THREE_BYTE_0F3A
51e7da1b 1788};
4e7d34a6 1789
f88c9eb0
SP
1790enum
1791{
5dd85c99
SP
1792 XOP_08 = 0,
1793 XOP_09,
f88c9eb0
SP
1794 XOP_0A
1795};
1796
51e7da1b
L
1797enum
1798{
1799 VEX_0F = 0,
3873ba12
L
1800 VEX_0F38,
1801 VEX_0F3A
51e7da1b 1802};
c0f3af97 1803
43234a1e
L
1804enum
1805{
1806 EVEX_0F = 0,
1807 EVEX_0F38,
1808 EVEX_0F3A
1809};
1810
51e7da1b
L
1811enum
1812{
ec6f095a 1813 VEX_LEN_0F12_P_0_M_0 = 0,
592a252b
L
1814 VEX_LEN_0F12_P_0_M_1,
1815 VEX_LEN_0F12_P_2,
1816 VEX_LEN_0F13_M_0,
1817 VEX_LEN_0F16_P_0_M_0,
1818 VEX_LEN_0F16_P_0_M_1,
1819 VEX_LEN_0F16_P_2,
1820 VEX_LEN_0F17_M_0,
1821 VEX_LEN_0F2A_P_1,
1822 VEX_LEN_0F2A_P_3,
1823 VEX_LEN_0F2C_P_1,
1824 VEX_LEN_0F2C_P_3,
1825 VEX_LEN_0F2D_P_1,
1826 VEX_LEN_0F2D_P_3,
43234a1e 1827 VEX_LEN_0F41_P_0,
1ba585e8 1828 VEX_LEN_0F41_P_2,
43234a1e 1829 VEX_LEN_0F42_P_0,
1ba585e8 1830 VEX_LEN_0F42_P_2,
43234a1e 1831 VEX_LEN_0F44_P_0,
1ba585e8 1832 VEX_LEN_0F44_P_2,
43234a1e 1833 VEX_LEN_0F45_P_0,
1ba585e8 1834 VEX_LEN_0F45_P_2,
43234a1e 1835 VEX_LEN_0F46_P_0,
1ba585e8 1836 VEX_LEN_0F46_P_2,
43234a1e 1837 VEX_LEN_0F47_P_0,
1ba585e8
IT
1838 VEX_LEN_0F47_P_2,
1839 VEX_LEN_0F4A_P_0,
1840 VEX_LEN_0F4A_P_2,
1841 VEX_LEN_0F4B_P_0,
43234a1e 1842 VEX_LEN_0F4B_P_2,
592a252b 1843 VEX_LEN_0F6E_P_2,
ec6f095a 1844 VEX_LEN_0F77_P_0,
592a252b
L
1845 VEX_LEN_0F7E_P_1,
1846 VEX_LEN_0F7E_P_2,
43234a1e 1847 VEX_LEN_0F90_P_0,
1ba585e8 1848 VEX_LEN_0F90_P_2,
43234a1e 1849 VEX_LEN_0F91_P_0,
1ba585e8 1850 VEX_LEN_0F91_P_2,
43234a1e 1851 VEX_LEN_0F92_P_0,
90a915bf 1852 VEX_LEN_0F92_P_2,
1ba585e8 1853 VEX_LEN_0F92_P_3,
43234a1e 1854 VEX_LEN_0F93_P_0,
90a915bf 1855 VEX_LEN_0F93_P_2,
1ba585e8 1856 VEX_LEN_0F93_P_3,
43234a1e 1857 VEX_LEN_0F98_P_0,
1ba585e8
IT
1858 VEX_LEN_0F98_P_2,
1859 VEX_LEN_0F99_P_0,
1860 VEX_LEN_0F99_P_2,
592a252b
L
1861 VEX_LEN_0FAE_R_2_M_0,
1862 VEX_LEN_0FAE_R_3_M_0,
592a252b
L
1863 VEX_LEN_0FC4_P_2,
1864 VEX_LEN_0FC5_P_2,
592a252b 1865 VEX_LEN_0FD6_P_2,
592a252b 1866 VEX_LEN_0FF7_P_2,
6c30d220
L
1867 VEX_LEN_0F3816_P_2,
1868 VEX_LEN_0F3819_P_2,
592a252b 1869 VEX_LEN_0F381A_P_2_M_0,
6c30d220 1870 VEX_LEN_0F3836_P_2,
592a252b 1871 VEX_LEN_0F3841_P_2,
6c30d220 1872 VEX_LEN_0F385A_P_2_M_0,
592a252b 1873 VEX_LEN_0F38DB_P_2,
f12dc422
L
1874 VEX_LEN_0F38F2_P_0,
1875 VEX_LEN_0F38F3_R_1_P_0,
1876 VEX_LEN_0F38F3_R_2_P_0,
1877 VEX_LEN_0F38F3_R_3_P_0,
6c30d220
L
1878 VEX_LEN_0F38F5_P_0,
1879 VEX_LEN_0F38F5_P_1,
1880 VEX_LEN_0F38F5_P_3,
1881 VEX_LEN_0F38F6_P_3,
f12dc422 1882 VEX_LEN_0F38F7_P_0,
6c30d220
L
1883 VEX_LEN_0F38F7_P_1,
1884 VEX_LEN_0F38F7_P_2,
1885 VEX_LEN_0F38F7_P_3,
1886 VEX_LEN_0F3A00_P_2,
1887 VEX_LEN_0F3A01_P_2,
592a252b 1888 VEX_LEN_0F3A06_P_2,
592a252b
L
1889 VEX_LEN_0F3A14_P_2,
1890 VEX_LEN_0F3A15_P_2,
1891 VEX_LEN_0F3A16_P_2,
1892 VEX_LEN_0F3A17_P_2,
1893 VEX_LEN_0F3A18_P_2,
1894 VEX_LEN_0F3A19_P_2,
1895 VEX_LEN_0F3A20_P_2,
1896 VEX_LEN_0F3A21_P_2,
1897 VEX_LEN_0F3A22_P_2,
43234a1e 1898 VEX_LEN_0F3A30_P_2,
1ba585e8 1899 VEX_LEN_0F3A31_P_2,
43234a1e 1900 VEX_LEN_0F3A32_P_2,
1ba585e8 1901 VEX_LEN_0F3A33_P_2,
6c30d220
L
1902 VEX_LEN_0F3A38_P_2,
1903 VEX_LEN_0F3A39_P_2,
592a252b 1904 VEX_LEN_0F3A41_P_2,
6c30d220 1905 VEX_LEN_0F3A46_P_2,
592a252b
L
1906 VEX_LEN_0F3A60_P_2,
1907 VEX_LEN_0F3A61_P_2,
1908 VEX_LEN_0F3A62_P_2,
1909 VEX_LEN_0F3A63_P_2,
1910 VEX_LEN_0F3A6A_P_2,
1911 VEX_LEN_0F3A6B_P_2,
1912 VEX_LEN_0F3A6E_P_2,
1913 VEX_LEN_0F3A6F_P_2,
1914 VEX_LEN_0F3A7A_P_2,
1915 VEX_LEN_0F3A7B_P_2,
1916 VEX_LEN_0F3A7E_P_2,
1917 VEX_LEN_0F3A7F_P_2,
1918 VEX_LEN_0F3ADF_P_2,
6c30d220 1919 VEX_LEN_0F3AF0_P_3,
ff688e1f
L
1920 VEX_LEN_0FXOP_08_CC,
1921 VEX_LEN_0FXOP_08_CD,
1922 VEX_LEN_0FXOP_08_CE,
1923 VEX_LEN_0FXOP_08_CF,
1924 VEX_LEN_0FXOP_08_EC,
1925 VEX_LEN_0FXOP_08_ED,
1926 VEX_LEN_0FXOP_08_EE,
1927 VEX_LEN_0FXOP_08_EF,
592a252b
L
1928 VEX_LEN_0FXOP_09_80,
1929 VEX_LEN_0FXOP_09_81
51e7da1b 1930};
c0f3af97 1931
04e2a182
L
1932enum
1933{
1934 EVEX_LEN_0F6E_P_2 = 0,
1935 EVEX_LEN_0F7E_P_1,
1936 EVEX_LEN_0F7E_P_2,
12efd68d 1937 EVEX_LEN_0FD6_P_2,
f0a6222e
L
1938 EVEX_LEN_0F3819_P_2_W_0,
1939 EVEX_LEN_0F3819_P_2_W_1,
1940 EVEX_LEN_0F381A_P_2_W_0,
1941 EVEX_LEN_0F381A_P_2_W_1,
1942 EVEX_LEN_0F381B_P_2_W_0,
1943 EVEX_LEN_0F381B_P_2_W_1,
1944 EVEX_LEN_0F385A_P_2_W_0,
1945 EVEX_LEN_0F385A_P_2_W_1,
1946 EVEX_LEN_0F385B_P_2_W_0,
1947 EVEX_LEN_0F385B_P_2_W_1,
12efd68d
L
1948 EVEX_LEN_0F3A18_P_2_W_0,
1949 EVEX_LEN_0F3A18_P_2_W_1,
1950 EVEX_LEN_0F3A19_P_2_W_0,
1951 EVEX_LEN_0F3A19_P_2_W_1,
1952 EVEX_LEN_0F3A1A_P_2_W_0,
1953 EVEX_LEN_0F3A1A_P_2_W_1,
1954 EVEX_LEN_0F3A1B_P_2_W_0,
6e1c90b7
L
1955 EVEX_LEN_0F3A1B_P_2_W_1,
1956 EVEX_LEN_0F3A23_P_2_W_0,
1957 EVEX_LEN_0F3A23_P_2_W_1,
1958 EVEX_LEN_0F3A38_P_2_W_0,
1959 EVEX_LEN_0F3A38_P_2_W_1,
1960 EVEX_LEN_0F3A39_P_2_W_0,
1961 EVEX_LEN_0F3A39_P_2_W_1,
1962 EVEX_LEN_0F3A3A_P_2_W_0,
1963 EVEX_LEN_0F3A3A_P_2_W_1,
1964 EVEX_LEN_0F3A3B_P_2_W_0,
1965 EVEX_LEN_0F3A3B_P_2_W_1,
1966 EVEX_LEN_0F3A43_P_2_W_0,
1967 EVEX_LEN_0F3A43_P_2_W_1
04e2a182
L
1968};
1969
9e30b8e0
L
1970enum
1971{
ec6f095a 1972 VEX_W_0F41_P_0_LEN_1 = 0,
1ba585e8 1973 VEX_W_0F41_P_2_LEN_1,
43234a1e 1974 VEX_W_0F42_P_0_LEN_1,
1ba585e8 1975 VEX_W_0F42_P_2_LEN_1,
43234a1e 1976 VEX_W_0F44_P_0_LEN_0,
1ba585e8 1977 VEX_W_0F44_P_2_LEN_0,
43234a1e 1978 VEX_W_0F45_P_0_LEN_1,
1ba585e8 1979 VEX_W_0F45_P_2_LEN_1,
43234a1e 1980 VEX_W_0F46_P_0_LEN_1,
1ba585e8 1981 VEX_W_0F46_P_2_LEN_1,
43234a1e 1982 VEX_W_0F47_P_0_LEN_1,
1ba585e8
IT
1983 VEX_W_0F47_P_2_LEN_1,
1984 VEX_W_0F4A_P_0_LEN_1,
1985 VEX_W_0F4A_P_2_LEN_1,
1986 VEX_W_0F4B_P_0_LEN_1,
43234a1e 1987 VEX_W_0F4B_P_2_LEN_1,
43234a1e 1988 VEX_W_0F90_P_0_LEN_0,
1ba585e8 1989 VEX_W_0F90_P_2_LEN_0,
43234a1e 1990 VEX_W_0F91_P_0_LEN_0,
1ba585e8 1991 VEX_W_0F91_P_2_LEN_0,
43234a1e 1992 VEX_W_0F92_P_0_LEN_0,
90a915bf 1993 VEX_W_0F92_P_2_LEN_0,
43234a1e 1994 VEX_W_0F93_P_0_LEN_0,
90a915bf 1995 VEX_W_0F93_P_2_LEN_0,
43234a1e 1996 VEX_W_0F98_P_0_LEN_0,
1ba585e8
IT
1997 VEX_W_0F98_P_2_LEN_0,
1998 VEX_W_0F99_P_0_LEN_0,
1999 VEX_W_0F99_P_2_LEN_0,
592a252b
L
2000 VEX_W_0F380C_P_2,
2001 VEX_W_0F380D_P_2,
2002 VEX_W_0F380E_P_2,
2003 VEX_W_0F380F_P_2,
6c30d220 2004 VEX_W_0F3816_P_2,
6c30d220
L
2005 VEX_W_0F3818_P_2,
2006 VEX_W_0F3819_P_2,
592a252b 2007 VEX_W_0F381A_P_2_M_0,
592a252b
L
2008 VEX_W_0F382C_P_2_M_0,
2009 VEX_W_0F382D_P_2_M_0,
2010 VEX_W_0F382E_P_2_M_0,
2011 VEX_W_0F382F_P_2_M_0,
6c30d220 2012 VEX_W_0F3836_P_2,
6c30d220
L
2013 VEX_W_0F3846_P_2,
2014 VEX_W_0F3858_P_2,
2015 VEX_W_0F3859_P_2,
2016 VEX_W_0F385A_P_2_M_0,
2017 VEX_W_0F3878_P_2,
2018 VEX_W_0F3879_P_2,
48521003 2019 VEX_W_0F38CF_P_2,
6c30d220
L
2020 VEX_W_0F3A00_P_2,
2021 VEX_W_0F3A01_P_2,
2022 VEX_W_0F3A02_P_2,
592a252b
L
2023 VEX_W_0F3A04_P_2,
2024 VEX_W_0F3A05_P_2,
2025 VEX_W_0F3A06_P_2,
592a252b
L
2026 VEX_W_0F3A18_P_2,
2027 VEX_W_0F3A19_P_2,
43234a1e 2028 VEX_W_0F3A30_P_2_LEN_0,
1ba585e8 2029 VEX_W_0F3A31_P_2_LEN_0,
43234a1e 2030 VEX_W_0F3A32_P_2_LEN_0,
1ba585e8 2031 VEX_W_0F3A33_P_2_LEN_0,
6c30d220
L
2032 VEX_W_0F3A38_P_2,
2033 VEX_W_0F3A39_P_2,
6c30d220 2034 VEX_W_0F3A46_P_2,
592a252b
L
2035 VEX_W_0F3A48_P_2,
2036 VEX_W_0F3A49_P_2,
2037 VEX_W_0F3A4A_P_2,
2038 VEX_W_0F3A4B_P_2,
2039 VEX_W_0F3A4C_P_2,
48521003
IT
2040 VEX_W_0F3ACE_P_2,
2041 VEX_W_0F3ACF_P_2,
43234a1e
L
2042
2043 EVEX_W_0F10_P_0,
2044 EVEX_W_0F10_P_1_M_0,
2045 EVEX_W_0F10_P_1_M_1,
2046 EVEX_W_0F10_P_2,
2047 EVEX_W_0F10_P_3_M_0,
2048 EVEX_W_0F10_P_3_M_1,
2049 EVEX_W_0F11_P_0,
2050 EVEX_W_0F11_P_1_M_0,
2051 EVEX_W_0F11_P_1_M_1,
2052 EVEX_W_0F11_P_2,
2053 EVEX_W_0F11_P_3_M_0,
2054 EVEX_W_0F11_P_3_M_1,
2055 EVEX_W_0F12_P_0_M_0,
2056 EVEX_W_0F12_P_0_M_1,
2057 EVEX_W_0F12_P_1,
2058 EVEX_W_0F12_P_2,
2059 EVEX_W_0F12_P_3,
2060 EVEX_W_0F13_P_0,
2061 EVEX_W_0F13_P_2,
2062 EVEX_W_0F14_P_0,
2063 EVEX_W_0F14_P_2,
2064 EVEX_W_0F15_P_0,
2065 EVEX_W_0F15_P_2,
2066 EVEX_W_0F16_P_0_M_0,
2067 EVEX_W_0F16_P_0_M_1,
2068 EVEX_W_0F16_P_1,
2069 EVEX_W_0F16_P_2,
2070 EVEX_W_0F17_P_0,
2071 EVEX_W_0F17_P_2,
2072 EVEX_W_0F28_P_0,
2073 EVEX_W_0F28_P_2,
2074 EVEX_W_0F29_P_0,
2075 EVEX_W_0F29_P_2,
43234a1e
L
2076 EVEX_W_0F2A_P_3,
2077 EVEX_W_0F2B_P_0,
2078 EVEX_W_0F2B_P_2,
2079 EVEX_W_0F2E_P_0,
2080 EVEX_W_0F2E_P_2,
2081 EVEX_W_0F2F_P_0,
2082 EVEX_W_0F2F_P_2,
2083 EVEX_W_0F51_P_0,
2084 EVEX_W_0F51_P_1,
2085 EVEX_W_0F51_P_2,
2086 EVEX_W_0F51_P_3,
90a915bf
IT
2087 EVEX_W_0F54_P_0,
2088 EVEX_W_0F54_P_2,
2089 EVEX_W_0F55_P_0,
2090 EVEX_W_0F55_P_2,
2091 EVEX_W_0F56_P_0,
2092 EVEX_W_0F56_P_2,
2093 EVEX_W_0F57_P_0,
2094 EVEX_W_0F57_P_2,
43234a1e
L
2095 EVEX_W_0F58_P_0,
2096 EVEX_W_0F58_P_1,
2097 EVEX_W_0F58_P_2,
2098 EVEX_W_0F58_P_3,
2099 EVEX_W_0F59_P_0,
2100 EVEX_W_0F59_P_1,
2101 EVEX_W_0F59_P_2,
2102 EVEX_W_0F59_P_3,
2103 EVEX_W_0F5A_P_0,
2104 EVEX_W_0F5A_P_1,
2105 EVEX_W_0F5A_P_2,
2106 EVEX_W_0F5A_P_3,
2107 EVEX_W_0F5B_P_0,
2108 EVEX_W_0F5B_P_1,
2109 EVEX_W_0F5B_P_2,
2110 EVEX_W_0F5C_P_0,
2111 EVEX_W_0F5C_P_1,
2112 EVEX_W_0F5C_P_2,
2113 EVEX_W_0F5C_P_3,
2114 EVEX_W_0F5D_P_0,
2115 EVEX_W_0F5D_P_1,
2116 EVEX_W_0F5D_P_2,
2117 EVEX_W_0F5D_P_3,
2118 EVEX_W_0F5E_P_0,
2119 EVEX_W_0F5E_P_1,
2120 EVEX_W_0F5E_P_2,
2121 EVEX_W_0F5E_P_3,
2122 EVEX_W_0F5F_P_0,
2123 EVEX_W_0F5F_P_1,
2124 EVEX_W_0F5F_P_2,
2125 EVEX_W_0F5F_P_3,
2126 EVEX_W_0F62_P_2,
2127 EVEX_W_0F66_P_2,
2128 EVEX_W_0F6A_P_2,
1ba585e8 2129 EVEX_W_0F6B_P_2,
43234a1e
L
2130 EVEX_W_0F6C_P_2,
2131 EVEX_W_0F6D_P_2,
43234a1e
L
2132 EVEX_W_0F6F_P_1,
2133 EVEX_W_0F6F_P_2,
1ba585e8 2134 EVEX_W_0F6F_P_3,
43234a1e
L
2135 EVEX_W_0F70_P_2,
2136 EVEX_W_0F72_R_2_P_2,
2137 EVEX_W_0F72_R_6_P_2,
2138 EVEX_W_0F73_R_2_P_2,
2139 EVEX_W_0F73_R_6_P_2,
2140 EVEX_W_0F76_P_2,
2141 EVEX_W_0F78_P_0,
90a915bf 2142 EVEX_W_0F78_P_2,
43234a1e 2143 EVEX_W_0F79_P_0,
90a915bf 2144 EVEX_W_0F79_P_2,
43234a1e 2145 EVEX_W_0F7A_P_1,
90a915bf 2146 EVEX_W_0F7A_P_2,
43234a1e 2147 EVEX_W_0F7A_P_3,
90a915bf 2148 EVEX_W_0F7B_P_2,
43234a1e
L
2149 EVEX_W_0F7B_P_3,
2150 EVEX_W_0F7E_P_1,
43234a1e
L
2151 EVEX_W_0F7F_P_1,
2152 EVEX_W_0F7F_P_2,
1ba585e8 2153 EVEX_W_0F7F_P_3,
43234a1e
L
2154 EVEX_W_0FC2_P_0,
2155 EVEX_W_0FC2_P_1,
2156 EVEX_W_0FC2_P_2,
2157 EVEX_W_0FC2_P_3,
2158 EVEX_W_0FC6_P_0,
2159 EVEX_W_0FC6_P_2,
2160 EVEX_W_0FD2_P_2,
2161 EVEX_W_0FD3_P_2,
2162 EVEX_W_0FD4_P_2,
2163 EVEX_W_0FD6_P_2,
2164 EVEX_W_0FE6_P_1,
2165 EVEX_W_0FE6_P_2,
2166 EVEX_W_0FE6_P_3,
2167 EVEX_W_0FE7_P_2,
2168 EVEX_W_0FF2_P_2,
2169 EVEX_W_0FF3_P_2,
2170 EVEX_W_0FF4_P_2,
2171 EVEX_W_0FFA_P_2,
2172 EVEX_W_0FFB_P_2,
2173 EVEX_W_0FFE_P_2,
2174 EVEX_W_0F380C_P_2,
2175 EVEX_W_0F380D_P_2,
1ba585e8
IT
2176 EVEX_W_0F3810_P_1,
2177 EVEX_W_0F3810_P_2,
43234a1e 2178 EVEX_W_0F3811_P_1,
1ba585e8 2179 EVEX_W_0F3811_P_2,
43234a1e 2180 EVEX_W_0F3812_P_1,
1ba585e8 2181 EVEX_W_0F3812_P_2,
43234a1e
L
2182 EVEX_W_0F3813_P_1,
2183 EVEX_W_0F3813_P_2,
2184 EVEX_W_0F3814_P_1,
2185 EVEX_W_0F3815_P_1,
2186 EVEX_W_0F3818_P_2,
2187 EVEX_W_0F3819_P_2,
2188 EVEX_W_0F381A_P_2,
2189 EVEX_W_0F381B_P_2,
2190 EVEX_W_0F381E_P_2,
2191 EVEX_W_0F381F_P_2,
1ba585e8 2192 EVEX_W_0F3820_P_1,
43234a1e
L
2193 EVEX_W_0F3821_P_1,
2194 EVEX_W_0F3822_P_1,
2195 EVEX_W_0F3823_P_1,
2196 EVEX_W_0F3824_P_1,
2197 EVEX_W_0F3825_P_1,
2198 EVEX_W_0F3825_P_2,
1ba585e8
IT
2199 EVEX_W_0F3826_P_1,
2200 EVEX_W_0F3826_P_2,
2201 EVEX_W_0F3828_P_1,
43234a1e 2202 EVEX_W_0F3828_P_2,
1ba585e8 2203 EVEX_W_0F3829_P_1,
43234a1e
L
2204 EVEX_W_0F3829_P_2,
2205 EVEX_W_0F382A_P_1,
2206 EVEX_W_0F382A_P_2,
1ba585e8
IT
2207 EVEX_W_0F382B_P_2,
2208 EVEX_W_0F3830_P_1,
43234a1e
L
2209 EVEX_W_0F3831_P_1,
2210 EVEX_W_0F3832_P_1,
2211 EVEX_W_0F3833_P_1,
2212 EVEX_W_0F3834_P_1,
2213 EVEX_W_0F3835_P_1,
2214 EVEX_W_0F3835_P_2,
2215 EVEX_W_0F3837_P_2,
90a915bf
IT
2216 EVEX_W_0F3838_P_1,
2217 EVEX_W_0F3839_P_1,
43234a1e
L
2218 EVEX_W_0F383A_P_1,
2219 EVEX_W_0F3840_P_2,
d6aab7a1 2220 EVEX_W_0F3852_P_1,
ee6872be 2221 EVEX_W_0F3854_P_2,
620214f7 2222 EVEX_W_0F3855_P_2,
43234a1e
L
2223 EVEX_W_0F3858_P_2,
2224 EVEX_W_0F3859_P_2,
2225 EVEX_W_0F385A_P_2,
2226 EVEX_W_0F385B_P_2,
53467f57
IT
2227 EVEX_W_0F3862_P_2,
2228 EVEX_W_0F3863_P_2,
1ba585e8 2229 EVEX_W_0F3866_P_2,
9186c494 2230 EVEX_W_0F3868_P_3,
53467f57
IT
2231 EVEX_W_0F3870_P_2,
2232 EVEX_W_0F3871_P_2,
d6aab7a1 2233 EVEX_W_0F3872_P_1,
53467f57 2234 EVEX_W_0F3872_P_2,
d6aab7a1 2235 EVEX_W_0F3872_P_3,
53467f57 2236 EVEX_W_0F3873_P_2,
1ba585e8
IT
2237 EVEX_W_0F3875_P_2,
2238 EVEX_W_0F3878_P_2,
2239 EVEX_W_0F3879_P_2,
2240 EVEX_W_0F387A_P_2,
2241 EVEX_W_0F387B_P_2,
2242 EVEX_W_0F387D_P_2,
14f195c9 2243 EVEX_W_0F3883_P_2,
1ba585e8 2244 EVEX_W_0F388D_P_2,
43234a1e
L
2245 EVEX_W_0F3891_P_2,
2246 EVEX_W_0F3893_P_2,
2247 EVEX_W_0F38A1_P_2,
2248 EVEX_W_0F38A3_P_2,
2249 EVEX_W_0F38C7_R_1_P_2,
2250 EVEX_W_0F38C7_R_2_P_2,
2251 EVEX_W_0F38C7_R_5_P_2,
2252 EVEX_W_0F38C7_R_6_P_2,
2253
2254 EVEX_W_0F3A00_P_2,
2255 EVEX_W_0F3A01_P_2,
2256 EVEX_W_0F3A04_P_2,
2257 EVEX_W_0F3A05_P_2,
2258 EVEX_W_0F3A08_P_2,
2259 EVEX_W_0F3A09_P_2,
2260 EVEX_W_0F3A0A_P_2,
2261 EVEX_W_0F3A0B_P_2,
2262 EVEX_W_0F3A18_P_2,
2263 EVEX_W_0F3A19_P_2,
2264 EVEX_W_0F3A1A_P_2,
2265 EVEX_W_0F3A1B_P_2,
2266 EVEX_W_0F3A1D_P_2,
2267 EVEX_W_0F3A21_P_2,
2268 EVEX_W_0F3A23_P_2,
2269 EVEX_W_0F3A38_P_2,
2270 EVEX_W_0F3A39_P_2,
2271 EVEX_W_0F3A3A_P_2,
2272 EVEX_W_0F3A3B_P_2,
1ba585e8
IT
2273 EVEX_W_0F3A3E_P_2,
2274 EVEX_W_0F3A3F_P_2,
2275 EVEX_W_0F3A42_P_2,
90a915bf
IT
2276 EVEX_W_0F3A43_P_2,
2277 EVEX_W_0F3A50_P_2,
2278 EVEX_W_0F3A51_P_2,
2279 EVEX_W_0F3A56_P_2,
2280 EVEX_W_0F3A57_P_2,
2281 EVEX_W_0F3A66_P_2,
53467f57
IT
2282 EVEX_W_0F3A67_P_2,
2283 EVEX_W_0F3A70_P_2,
2284 EVEX_W_0F3A71_P_2,
2285 EVEX_W_0F3A72_P_2,
48521003
IT
2286 EVEX_W_0F3A73_P_2,
2287 EVEX_W_0F3ACE_P_2,
2288 EVEX_W_0F3ACF_P_2
9e30b8e0
L
2289};
2290
26ca5450 2291typedef void (*op_rtn) (int bytemode, int sizeflag);
252b5132
RH
2292
2293struct dis386 {
2da11e11 2294 const char *name;
ce518a5f
L
2295 struct
2296 {
2297 op_rtn rtn;
2298 int bytemode;
2299 } op[MAX_OPERANDS];
bf890a93 2300 unsigned int prefix_requirement;
252b5132
RH
2301};
2302
2303/* Upper case letters in the instruction names here are macros.
2304 'A' => print 'b' if no register operands or suffix_always is true
2305 'B' => print 'b' if suffix_always is true
9306ca4a 2306 'C' => print 's' or 'l' ('w' or 'd' in Intel mode) depending on operand
98b528ac 2307 size prefix
ed7841b3 2308 'D' => print 'w' if no register operands or 'w', 'l' or 'q', if
98b528ac 2309 suffix_always is true
252b5132 2310 'E' => print 'e' if 32-bit form of jcxz
3ffd33cf 2311 'F' => print 'w' or 'l' depending on address size prefix (loop insns)
52fd6d94 2312 'G' => print 'w' or 'l' depending on operand size prefix (i/o insns)
5dd0794d 2313 'H' => print ",pt" or ",pn" branch hint
9306ca4a 2314 'I' => honor following macro letter even in Intel mode (implemented only
98b528ac 2315 for some of the macro letters)
9306ca4a 2316 'J' => print 'l'
42903f7f 2317 'K' => print 'd' or 'q' if rex prefix is present.
252b5132 2318 'L' => print 'l' if suffix_always is true
9d141669 2319 'M' => print 'r' if intel_mnemonic is false.
252b5132 2320 'N' => print 'n' if instruction has no wait "prefix"
a35ca55a 2321 'O' => print 'd' or 'o' (or 'q' in Intel mode)
52b15da3 2322 'P' => print 'w', 'l' or 'q' if instruction has an operand size prefix,
98b528ac
L
2323 or suffix_always is true. print 'q' if rex prefix is present.
2324 'Q' => print 'w', 'l' or 'q' for memory operand or suffix_always
2325 is true
a35ca55a 2326 'R' => print 'w', 'l' or 'q' ('d' for 'l' and 'e' in Intel mode)
52b15da3 2327 'S' => print 'w', 'l' or 'q' if suffix_always is true
a72d2af2
L
2328 'T' => print 'q' in 64bit mode if instruction has no operand size
2329 prefix and behave as 'P' otherwise
2330 'U' => print 'q' in 64bit mode if instruction has no operand size
2331 prefix and behave as 'Q' otherwise
2332 'V' => print 'q' in 64bit mode if instruction has no operand size
2333 prefix and behave as 'S' otherwise
a35ca55a 2334 'W' => print 'b', 'w' or 'l' ('d' in Intel mode)
9306ca4a 2335 'X' => print 's', 'd' depending on data16 prefix (for XMM)
9646c87b 2336 'Y' unused.
6dd5059a 2337 'Z' => print 'q' in 64bit mode and behave as 'L' otherwise
9d141669 2338 '!' => change condition from true to false or from false to true.
98b528ac 2339 '%' => add 1 upper case letter to the macro.
a72d2af2
L
2340 '^' => print 'w' or 'l' depending on operand size prefix or
2341 suffix_always is true (lcall/ljmp).
5db04b09
L
2342 '@' => print 'q' for Intel64 ISA, 'w' or 'q' for AMD64 ISA depending
2343 on operand size prefix.
07f5af7d
L
2344 '&' => print 'q' in 64bit mode for Intel64 ISA or if instruction
2345 has no operand size prefix for AMD64 ISA, behave as 'P'
2346 otherwise
98b528ac
L
2347
2348 2 upper case letter macros:
04d824a4
JB
2349 "XY" => print 'x' or 'y' if suffix_always is true or no register
2350 operands and no broadcast.
2351 "XZ" => print 'x', 'y', or 'z' if suffix_always is true or no
2352 register operands and no broadcast.
4b06377f
L
2353 "XW" => print 's', 'd' depending on the VEX.W bit (for FMA)
2354 "LQ" => print 'l' ('d' in Intel mode) or 'q' for memory operand
98b528ac 2355 or suffix_always is true
4b06377f
L
2356 "LB" => print "abs" in 64bit mode and behave as 'B' otherwise
2357 "LS" => print "abs" in 64bit mode and behave as 'S' otherwise
2358 "LV" => print "abs" for 64bit operand and behave as 'S' otherwise
6c30d220 2359 "LW" => print 'd', 'q' depending on the VEX.W bit
4b4c407a
L
2360 "LP" => print 'w' or 'l' ('d' in Intel mode) if instruction has
2361 an operand size prefix, or suffix_always is true. print
2362 'q' if rex prefix is present.
52b15da3 2363
6439fc28
AM
2364 Many of the above letters print nothing in Intel mode. See "putop"
2365 for the details.
52b15da3 2366
6439fc28 2367 Braces '{' and '}', and vertical bars '|', indicate alternative
7c52e0e8 2368 mnemonic strings for AT&T and Intel. */
252b5132 2369
6439fc28 2370static const struct dis386 dis386[] = {
252b5132 2371 /* 00 */
bf890a93
IT
2372 { "addB", { Ebh1, Gb }, 0 },
2373 { "addS", { Evh1, Gv }, 0 },
2374 { "addB", { Gb, EbS }, 0 },
2375 { "addS", { Gv, EvS }, 0 },
2376 { "addB", { AL, Ib }, 0 },
2377 { "addS", { eAX, Iv }, 0 },
4e7d34a6
L
2378 { X86_64_TABLE (X86_64_06) },
2379 { X86_64_TABLE (X86_64_07) },
252b5132 2380 /* 08 */
bf890a93
IT
2381 { "orB", { Ebh1, Gb }, 0 },
2382 { "orS", { Evh1, Gv }, 0 },
2383 { "orB", { Gb, EbS }, 0 },
2384 { "orS", { Gv, EvS }, 0 },
2385 { "orB", { AL, Ib }, 0 },
2386 { "orS", { eAX, Iv }, 0 },
4e7d34a6 2387 { X86_64_TABLE (X86_64_0D) },
592d1631 2388 { Bad_Opcode }, /* 0x0f extended opcode escape */
252b5132 2389 /* 10 */
bf890a93
IT
2390 { "adcB", { Ebh1, Gb }, 0 },
2391 { "adcS", { Evh1, Gv }, 0 },
2392 { "adcB", { Gb, EbS }, 0 },
2393 { "adcS", { Gv, EvS }, 0 },
2394 { "adcB", { AL, Ib }, 0 },
2395 { "adcS", { eAX, Iv }, 0 },
4e7d34a6
L
2396 { X86_64_TABLE (X86_64_16) },
2397 { X86_64_TABLE (X86_64_17) },
252b5132 2398 /* 18 */
bf890a93
IT
2399 { "sbbB", { Ebh1, Gb }, 0 },
2400 { "sbbS", { Evh1, Gv }, 0 },
2401 { "sbbB", { Gb, EbS }, 0 },
2402 { "sbbS", { Gv, EvS }, 0 },
2403 { "sbbB", { AL, Ib }, 0 },
2404 { "sbbS", { eAX, Iv }, 0 },
4e7d34a6
L
2405 { X86_64_TABLE (X86_64_1E) },
2406 { X86_64_TABLE (X86_64_1F) },
252b5132 2407 /* 20 */
bf890a93
IT
2408 { "andB", { Ebh1, Gb }, 0 },
2409 { "andS", { Evh1, Gv }, 0 },
2410 { "andB", { Gb, EbS }, 0 },
2411 { "andS", { Gv, EvS }, 0 },
2412 { "andB", { AL, Ib }, 0 },
2413 { "andS", { eAX, Iv }, 0 },
592d1631 2414 { Bad_Opcode }, /* SEG ES prefix */
4e7d34a6 2415 { X86_64_TABLE (X86_64_27) },
252b5132 2416 /* 28 */
bf890a93
IT
2417 { "subB", { Ebh1, Gb }, 0 },
2418 { "subS", { Evh1, Gv }, 0 },
2419 { "subB", { Gb, EbS }, 0 },
2420 { "subS", { Gv, EvS }, 0 },
2421 { "subB", { AL, Ib }, 0 },
2422 { "subS", { eAX, Iv }, 0 },
592d1631 2423 { Bad_Opcode }, /* SEG CS prefix */
4e7d34a6 2424 { X86_64_TABLE (X86_64_2F) },
252b5132 2425 /* 30 */
bf890a93
IT
2426 { "xorB", { Ebh1, Gb }, 0 },
2427 { "xorS", { Evh1, Gv }, 0 },
2428 { "xorB", { Gb, EbS }, 0 },
2429 { "xorS", { Gv, EvS }, 0 },
2430 { "xorB", { AL, Ib }, 0 },
2431 { "xorS", { eAX, Iv }, 0 },
592d1631 2432 { Bad_Opcode }, /* SEG SS prefix */
4e7d34a6 2433 { X86_64_TABLE (X86_64_37) },
252b5132 2434 /* 38 */
bf890a93
IT
2435 { "cmpB", { Eb, Gb }, 0 },
2436 { "cmpS", { Ev, Gv }, 0 },
2437 { "cmpB", { Gb, EbS }, 0 },
2438 { "cmpS", { Gv, EvS }, 0 },
2439 { "cmpB", { AL, Ib }, 0 },
2440 { "cmpS", { eAX, Iv }, 0 },
592d1631 2441 { Bad_Opcode }, /* SEG DS prefix */
4e7d34a6 2442 { X86_64_TABLE (X86_64_3F) },
252b5132 2443 /* 40 */
bf890a93
IT
2444 { "inc{S|}", { RMeAX }, 0 },
2445 { "inc{S|}", { RMeCX }, 0 },
2446 { "inc{S|}", { RMeDX }, 0 },
2447 { "inc{S|}", { RMeBX }, 0 },
2448 { "inc{S|}", { RMeSP }, 0 },
2449 { "inc{S|}", { RMeBP }, 0 },
2450 { "inc{S|}", { RMeSI }, 0 },
2451 { "inc{S|}", { RMeDI }, 0 },
252b5132 2452 /* 48 */
bf890a93
IT
2453 { "dec{S|}", { RMeAX }, 0 },
2454 { "dec{S|}", { RMeCX }, 0 },
2455 { "dec{S|}", { RMeDX }, 0 },
2456 { "dec{S|}", { RMeBX }, 0 },
2457 { "dec{S|}", { RMeSP }, 0 },
2458 { "dec{S|}", { RMeBP }, 0 },
2459 { "dec{S|}", { RMeSI }, 0 },
2460 { "dec{S|}", { RMeDI }, 0 },
252b5132 2461 /* 50 */
bf890a93
IT
2462 { "pushV", { RMrAX }, 0 },
2463 { "pushV", { RMrCX }, 0 },
2464 { "pushV", { RMrDX }, 0 },
2465 { "pushV", { RMrBX }, 0 },
2466 { "pushV", { RMrSP }, 0 },
2467 { "pushV", { RMrBP }, 0 },
2468 { "pushV", { RMrSI }, 0 },
2469 { "pushV", { RMrDI }, 0 },
252b5132 2470 /* 58 */
bf890a93
IT
2471 { "popV", { RMrAX }, 0 },
2472 { "popV", { RMrCX }, 0 },
2473 { "popV", { RMrDX }, 0 },
2474 { "popV", { RMrBX }, 0 },
2475 { "popV", { RMrSP }, 0 },
2476 { "popV", { RMrBP }, 0 },
2477 { "popV", { RMrSI }, 0 },
2478 { "popV", { RMrDI }, 0 },
252b5132 2479 /* 60 */
4e7d34a6
L
2480 { X86_64_TABLE (X86_64_60) },
2481 { X86_64_TABLE (X86_64_61) },
2482 { X86_64_TABLE (X86_64_62) },
2483 { X86_64_TABLE (X86_64_63) },
592d1631
L
2484 { Bad_Opcode }, /* seg fs */
2485 { Bad_Opcode }, /* seg gs */
2486 { Bad_Opcode }, /* op size prefix */
2487 { Bad_Opcode }, /* adr size prefix */
252b5132 2488 /* 68 */
bf890a93
IT
2489 { "pushT", { sIv }, 0 },
2490 { "imulS", { Gv, Ev, Iv }, 0 },
2491 { "pushT", { sIbT }, 0 },
2492 { "imulS", { Gv, Ev, sIb }, 0 },
2493 { "ins{b|}", { Ybr, indirDX }, 0 },
4e7d34a6 2494 { X86_64_TABLE (X86_64_6D) },
bf890a93 2495 { "outs{b|}", { indirDXr, Xb }, 0 },
4e7d34a6 2496 { X86_64_TABLE (X86_64_6F) },
252b5132 2497 /* 70 */
bf890a93
IT
2498 { "joH", { Jb, BND, cond_jump_flag }, 0 },
2499 { "jnoH", { Jb, BND, cond_jump_flag }, 0 },
2500 { "jbH", { Jb, BND, cond_jump_flag }, 0 },
2501 { "jaeH", { Jb, BND, cond_jump_flag }, 0 },
2502 { "jeH", { Jb, BND, cond_jump_flag }, 0 },
2503 { "jneH", { Jb, BND, cond_jump_flag }, 0 },
2504 { "jbeH", { Jb, BND, cond_jump_flag }, 0 },
2505 { "jaH", { Jb, BND, cond_jump_flag }, 0 },
252b5132 2506 /* 78 */
bf890a93
IT
2507 { "jsH", { Jb, BND, cond_jump_flag }, 0 },
2508 { "jnsH", { Jb, BND, cond_jump_flag }, 0 },
2509 { "jpH", { Jb, BND, cond_jump_flag }, 0 },
2510 { "jnpH", { Jb, BND, cond_jump_flag }, 0 },
2511 { "jlH", { Jb, BND, cond_jump_flag }, 0 },
2512 { "jgeH", { Jb, BND, cond_jump_flag }, 0 },
2513 { "jleH", { Jb, BND, cond_jump_flag }, 0 },
2514 { "jgH", { Jb, BND, cond_jump_flag }, 0 },
252b5132 2515 /* 80 */
1ceb70f8
L
2516 { REG_TABLE (REG_80) },
2517 { REG_TABLE (REG_81) },
d039fef3 2518 { X86_64_TABLE (X86_64_82) },
7148c369 2519 { REG_TABLE (REG_83) },
bf890a93
IT
2520 { "testB", { Eb, Gb }, 0 },
2521 { "testS", { Ev, Gv }, 0 },
2522 { "xchgB", { Ebh2, Gb }, 0 },
2523 { "xchgS", { Evh2, Gv }, 0 },
252b5132 2524 /* 88 */
bf890a93
IT
2525 { "movB", { Ebh3, Gb }, 0 },
2526 { "movS", { Evh3, Gv }, 0 },
2527 { "movB", { Gb, EbS }, 0 },
2528 { "movS", { Gv, EvS }, 0 },
2529 { "movD", { Sv, Sw }, 0 },
1ceb70f8 2530 { MOD_TABLE (MOD_8D) },
bf890a93 2531 { "movD", { Sw, Sv }, 0 },
1ceb70f8 2532 { REG_TABLE (REG_8F) },
252b5132 2533 /* 90 */
1ceb70f8 2534 { PREFIX_TABLE (PREFIX_90) },
bf890a93
IT
2535 { "xchgS", { RMeCX, eAX }, 0 },
2536 { "xchgS", { RMeDX, eAX }, 0 },
2537 { "xchgS", { RMeBX, eAX }, 0 },
2538 { "xchgS", { RMeSP, eAX }, 0 },
2539 { "xchgS", { RMeBP, eAX }, 0 },
2540 { "xchgS", { RMeSI, eAX }, 0 },
2541 { "xchgS", { RMeDI, eAX }, 0 },
252b5132 2542 /* 98 */
bf890a93
IT
2543 { "cW{t|}R", { XX }, 0 },
2544 { "cR{t|}O", { XX }, 0 },
4e7d34a6 2545 { X86_64_TABLE (X86_64_9A) },
592d1631 2546 { Bad_Opcode }, /* fwait */
bf890a93
IT
2547 { "pushfT", { XX }, 0 },
2548 { "popfT", { XX }, 0 },
2549 { "sahf", { XX }, 0 },
2550 { "lahf", { XX }, 0 },
252b5132 2551 /* a0 */
bf890a93
IT
2552 { "mov%LB", { AL, Ob }, 0 },
2553 { "mov%LS", { eAX, Ov }, 0 },
2554 { "mov%LB", { Ob, AL }, 0 },
2555 { "mov%LS", { Ov, eAX }, 0 },
2556 { "movs{b|}", { Ybr, Xb }, 0 },
2557 { "movs{R|}", { Yvr, Xv }, 0 },
2558 { "cmps{b|}", { Xb, Yb }, 0 },
2559 { "cmps{R|}", { Xv, Yv }, 0 },
252b5132 2560 /* a8 */
bf890a93
IT
2561 { "testB", { AL, Ib }, 0 },
2562 { "testS", { eAX, Iv }, 0 },
2563 { "stosB", { Ybr, AL }, 0 },
2564 { "stosS", { Yvr, eAX }, 0 },
2565 { "lodsB", { ALr, Xb }, 0 },
2566 { "lodsS", { eAXr, Xv }, 0 },
2567 { "scasB", { AL, Yb }, 0 },
2568 { "scasS", { eAX, Yv }, 0 },
252b5132 2569 /* b0 */
bf890a93
IT
2570 { "movB", { RMAL, Ib }, 0 },
2571 { "movB", { RMCL, Ib }, 0 },
2572 { "movB", { RMDL, Ib }, 0 },
2573 { "movB", { RMBL, Ib }, 0 },
2574 { "movB", { RMAH, Ib }, 0 },
2575 { "movB", { RMCH, Ib }, 0 },
2576 { "movB", { RMDH, Ib }, 0 },
2577 { "movB", { RMBH, Ib }, 0 },
252b5132 2578 /* b8 */
bf890a93
IT
2579 { "mov%LV", { RMeAX, Iv64 }, 0 },
2580 { "mov%LV", { RMeCX, Iv64 }, 0 },
2581 { "mov%LV", { RMeDX, Iv64 }, 0 },
2582 { "mov%LV", { RMeBX, Iv64 }, 0 },
2583 { "mov%LV", { RMeSP, Iv64 }, 0 },
2584 { "mov%LV", { RMeBP, Iv64 }, 0 },
2585 { "mov%LV", { RMeSI, Iv64 }, 0 },
2586 { "mov%LV", { RMeDI, Iv64 }, 0 },
252b5132 2587 /* c0 */
1ceb70f8
L
2588 { REG_TABLE (REG_C0) },
2589 { REG_TABLE (REG_C1) },
bf890a93
IT
2590 { "retT", { Iw, BND }, 0 },
2591 { "retT", { BND }, 0 },
4e7d34a6
L
2592 { X86_64_TABLE (X86_64_C4) },
2593 { X86_64_TABLE (X86_64_C5) },
1ceb70f8
L
2594 { REG_TABLE (REG_C6) },
2595 { REG_TABLE (REG_C7) },
252b5132 2596 /* c8 */
bf890a93
IT
2597 { "enterT", { Iw, Ib }, 0 },
2598 { "leaveT", { XX }, 0 },
2599 { "Jret{|f}P", { Iw }, 0 },
2600 { "Jret{|f}P", { XX }, 0 },
2601 { "int3", { XX }, 0 },
2602 { "int", { Ib }, 0 },
4e7d34a6 2603 { X86_64_TABLE (X86_64_CE) },
bf890a93 2604 { "iret%LP", { XX }, 0 },
252b5132 2605 /* d0 */
1ceb70f8
L
2606 { REG_TABLE (REG_D0) },
2607 { REG_TABLE (REG_D1) },
2608 { REG_TABLE (REG_D2) },
2609 { REG_TABLE (REG_D3) },
4e7d34a6
L
2610 { X86_64_TABLE (X86_64_D4) },
2611 { X86_64_TABLE (X86_64_D5) },
592d1631 2612 { Bad_Opcode },
bf890a93 2613 { "xlat", { DSBX }, 0 },
252b5132
RH
2614 /* d8 */
2615 { FLOAT },
2616 { FLOAT },
2617 { FLOAT },
2618 { FLOAT },
2619 { FLOAT },
2620 { FLOAT },
2621 { FLOAT },
2622 { FLOAT },
2623 /* e0 */
bf890a93
IT
2624 { "loopneFH", { Jb, XX, loop_jcxz_flag }, 0 },
2625 { "loopeFH", { Jb, XX, loop_jcxz_flag }, 0 },
2626 { "loopFH", { Jb, XX, loop_jcxz_flag }, 0 },
2627 { "jEcxzH", { Jb, XX, loop_jcxz_flag }, 0 },
2628 { "inB", { AL, Ib }, 0 },
2629 { "inG", { zAX, Ib }, 0 },
2630 { "outB", { Ib, AL }, 0 },
2631 { "outG", { Ib, zAX }, 0 },
252b5132 2632 /* e8 */
a72d2af2
L
2633 { X86_64_TABLE (X86_64_E8) },
2634 { X86_64_TABLE (X86_64_E9) },
4e7d34a6 2635 { X86_64_TABLE (X86_64_EA) },
bf890a93
IT
2636 { "jmp", { Jb, BND }, 0 },
2637 { "inB", { AL, indirDX }, 0 },
2638 { "inG", { zAX, indirDX }, 0 },
2639 { "outB", { indirDX, AL }, 0 },
2640 { "outG", { indirDX, zAX }, 0 },
252b5132 2641 /* f0 */
592d1631 2642 { Bad_Opcode }, /* lock prefix */
bf890a93 2643 { "icebp", { XX }, 0 },
592d1631
L
2644 { Bad_Opcode }, /* repne */
2645 { Bad_Opcode }, /* repz */
bf890a93
IT
2646 { "hlt", { XX }, 0 },
2647 { "cmc", { XX }, 0 },
1ceb70f8
L
2648 { REG_TABLE (REG_F6) },
2649 { REG_TABLE (REG_F7) },
252b5132 2650 /* f8 */
bf890a93
IT
2651 { "clc", { XX }, 0 },
2652 { "stc", { XX }, 0 },
2653 { "cli", { XX }, 0 },
2654 { "sti", { XX }, 0 },
2655 { "cld", { XX }, 0 },
2656 { "std", { XX }, 0 },
1ceb70f8
L
2657 { REG_TABLE (REG_FE) },
2658 { REG_TABLE (REG_FF) },
252b5132
RH
2659};
2660
6439fc28 2661static const struct dis386 dis386_twobyte[] = {
252b5132 2662 /* 00 */
1ceb70f8
L
2663 { REG_TABLE (REG_0F00 ) },
2664 { REG_TABLE (REG_0F01 ) },
bf890a93
IT
2665 { "larS", { Gv, Ew }, 0 },
2666 { "lslS", { Gv, Ew }, 0 },
592d1631 2667 { Bad_Opcode },
bf890a93
IT
2668 { "syscall", { XX }, 0 },
2669 { "clts", { XX }, 0 },
2670 { "sysret%LP", { XX }, 0 },
252b5132 2671 /* 08 */
bf890a93 2672 { "invd", { XX }, 0 },
3233d7d0 2673 { PREFIX_TABLE (PREFIX_0F09) },
592d1631 2674 { Bad_Opcode },
bf890a93 2675 { "ud2", { XX }, 0 },
592d1631 2676 { Bad_Opcode },
b5b1fc4f 2677 { REG_TABLE (REG_0F0D) },
bf890a93
IT
2678 { "femms", { XX }, 0 },
2679 { "", { MX, EM, OPSUF }, 0 }, /* See OP_3DNowSuffix. */
252b5132 2680 /* 10 */
1ceb70f8
L
2681 { PREFIX_TABLE (PREFIX_0F10) },
2682 { PREFIX_TABLE (PREFIX_0F11) },
2683 { PREFIX_TABLE (PREFIX_0F12) },
2684 { MOD_TABLE (MOD_0F13) },
507bd325
L
2685 { "unpcklpX", { XM, EXx }, PREFIX_OPCODE },
2686 { "unpckhpX", { XM, EXx }, PREFIX_OPCODE },
1ceb70f8
L
2687 { PREFIX_TABLE (PREFIX_0F16) },
2688 { MOD_TABLE (MOD_0F17) },
252b5132 2689 /* 18 */
1ceb70f8 2690 { REG_TABLE (REG_0F18) },
bf890a93 2691 { "nopQ", { Ev }, 0 },
7e8b059b
L
2692 { PREFIX_TABLE (PREFIX_0F1A) },
2693 { PREFIX_TABLE (PREFIX_0F1B) },
c48935d7 2694 { PREFIX_TABLE (PREFIX_0F1C) },
bf890a93 2695 { "nopQ", { Ev }, 0 },
603555e5 2696 { PREFIX_TABLE (PREFIX_0F1E) },
bf890a93 2697 { "nopQ", { Ev }, 0 },
252b5132 2698 /* 20 */
bf890a93
IT
2699 { "movZ", { Rm, Cm }, 0 },
2700 { "movZ", { Rm, Dm }, 0 },
2701 { "movZ", { Cm, Rm }, 0 },
2702 { "movZ", { Dm, Rm }, 0 },
1ceb70f8 2703 { MOD_TABLE (MOD_0F24) },
592d1631 2704 { Bad_Opcode },
1ceb70f8 2705 { MOD_TABLE (MOD_0F26) },
592d1631 2706 { Bad_Opcode },
252b5132 2707 /* 28 */
507bd325
L
2708 { "movapX", { XM, EXx }, PREFIX_OPCODE },
2709 { "movapX", { EXxS, XM }, PREFIX_OPCODE },
1ceb70f8
L
2710 { PREFIX_TABLE (PREFIX_0F2A) },
2711 { PREFIX_TABLE (PREFIX_0F2B) },
2712 { PREFIX_TABLE (PREFIX_0F2C) },
2713 { PREFIX_TABLE (PREFIX_0F2D) },
2714 { PREFIX_TABLE (PREFIX_0F2E) },
2715 { PREFIX_TABLE (PREFIX_0F2F) },
252b5132 2716 /* 30 */
bf890a93
IT
2717 { "wrmsr", { XX }, 0 },
2718 { "rdtsc", { XX }, 0 },
2719 { "rdmsr", { XX }, 0 },
2720 { "rdpmc", { XX }, 0 },
2721 { "sysenter", { XX }, 0 },
2722 { "sysexit", { XX }, 0 },
592d1631 2723 { Bad_Opcode },
bf890a93 2724 { "getsec", { XX }, 0 },
252b5132 2725 /* 38 */
507bd325 2726 { THREE_BYTE_TABLE_PREFIX (THREE_BYTE_0F38, PREFIX_OPCODE) },
592d1631 2727 { Bad_Opcode },
507bd325 2728 { THREE_BYTE_TABLE_PREFIX (THREE_BYTE_0F3A, PREFIX_OPCODE) },
592d1631
L
2729 { Bad_Opcode },
2730 { Bad_Opcode },
2731 { Bad_Opcode },
2732 { Bad_Opcode },
2733 { Bad_Opcode },
252b5132 2734 /* 40 */
bf890a93
IT
2735 { "cmovoS", { Gv, Ev }, 0 },
2736 { "cmovnoS", { Gv, Ev }, 0 },
2737 { "cmovbS", { Gv, Ev }, 0 },
2738 { "cmovaeS", { Gv, Ev }, 0 },
2739 { "cmoveS", { Gv, Ev }, 0 },
2740 { "cmovneS", { Gv, Ev }, 0 },
2741 { "cmovbeS", { Gv, Ev }, 0 },
2742 { "cmovaS", { Gv, Ev }, 0 },
252b5132 2743 /* 48 */
bf890a93
IT
2744 { "cmovsS", { Gv, Ev }, 0 },
2745 { "cmovnsS", { Gv, Ev }, 0 },
2746 { "cmovpS", { Gv, Ev }, 0 },
2747 { "cmovnpS", { Gv, Ev }, 0 },
2748 { "cmovlS", { Gv, Ev }, 0 },
2749 { "cmovgeS", { Gv, Ev }, 0 },
2750 { "cmovleS", { Gv, Ev }, 0 },
2751 { "cmovgS", { Gv, Ev }, 0 },
252b5132 2752 /* 50 */
75c135a8 2753 { MOD_TABLE (MOD_0F51) },
1ceb70f8
L
2754 { PREFIX_TABLE (PREFIX_0F51) },
2755 { PREFIX_TABLE (PREFIX_0F52) },
2756 { PREFIX_TABLE (PREFIX_0F53) },
507bd325
L
2757 { "andpX", { XM, EXx }, PREFIX_OPCODE },
2758 { "andnpX", { XM, EXx }, PREFIX_OPCODE },
2759 { "orpX", { XM, EXx }, PREFIX_OPCODE },
2760 { "xorpX", { XM, EXx }, PREFIX_OPCODE },
252b5132 2761 /* 58 */
1ceb70f8
L
2762 { PREFIX_TABLE (PREFIX_0F58) },
2763 { PREFIX_TABLE (PREFIX_0F59) },
2764 { PREFIX_TABLE (PREFIX_0F5A) },
2765 { PREFIX_TABLE (PREFIX_0F5B) },
2766 { PREFIX_TABLE (PREFIX_0F5C) },
2767 { PREFIX_TABLE (PREFIX_0F5D) },
2768 { PREFIX_TABLE (PREFIX_0F5E) },
2769 { PREFIX_TABLE (PREFIX_0F5F) },
252b5132 2770 /* 60 */
1ceb70f8
L
2771 { PREFIX_TABLE (PREFIX_0F60) },
2772 { PREFIX_TABLE (PREFIX_0F61) },
2773 { PREFIX_TABLE (PREFIX_0F62) },
507bd325
L
2774 { "packsswb", { MX, EM }, PREFIX_OPCODE },
2775 { "pcmpgtb", { MX, EM }, PREFIX_OPCODE },
2776 { "pcmpgtw", { MX, EM }, PREFIX_OPCODE },
2777 { "pcmpgtd", { MX, EM }, PREFIX_OPCODE },
2778 { "packuswb", { MX, EM }, PREFIX_OPCODE },
252b5132 2779 /* 68 */
507bd325
L
2780 { "punpckhbw", { MX, EM }, PREFIX_OPCODE },
2781 { "punpckhwd", { MX, EM }, PREFIX_OPCODE },
2782 { "punpckhdq", { MX, EM }, PREFIX_OPCODE },
2783 { "packssdw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8
L
2784 { PREFIX_TABLE (PREFIX_0F6C) },
2785 { PREFIX_TABLE (PREFIX_0F6D) },
507bd325 2786 { "movK", { MX, Edq }, PREFIX_OPCODE },
1ceb70f8 2787 { PREFIX_TABLE (PREFIX_0F6F) },
252b5132 2788 /* 70 */
1ceb70f8
L
2789 { PREFIX_TABLE (PREFIX_0F70) },
2790 { REG_TABLE (REG_0F71) },
2791 { REG_TABLE (REG_0F72) },
2792 { REG_TABLE (REG_0F73) },
507bd325
L
2793 { "pcmpeqb", { MX, EM }, PREFIX_OPCODE },
2794 { "pcmpeqw", { MX, EM }, PREFIX_OPCODE },
2795 { "pcmpeqd", { MX, EM }, PREFIX_OPCODE },
2796 { "emms", { XX }, PREFIX_OPCODE },
252b5132 2797 /* 78 */
1ceb70f8
L
2798 { PREFIX_TABLE (PREFIX_0F78) },
2799 { PREFIX_TABLE (PREFIX_0F79) },
1f334aeb 2800 { Bad_Opcode },
592d1631 2801 { Bad_Opcode },
1ceb70f8
L
2802 { PREFIX_TABLE (PREFIX_0F7C) },
2803 { PREFIX_TABLE (PREFIX_0F7D) },
2804 { PREFIX_TABLE (PREFIX_0F7E) },
2805 { PREFIX_TABLE (PREFIX_0F7F) },
252b5132 2806 /* 80 */
bf890a93
IT
2807 { "joH", { Jv, BND, cond_jump_flag }, 0 },
2808 { "jnoH", { Jv, BND, cond_jump_flag }, 0 },
2809 { "jbH", { Jv, BND, cond_jump_flag }, 0 },
2810 { "jaeH", { Jv, BND, cond_jump_flag }, 0 },
2811 { "jeH", { Jv, BND, cond_jump_flag }, 0 },
2812 { "jneH", { Jv, BND, cond_jump_flag }, 0 },
2813 { "jbeH", { Jv, BND, cond_jump_flag }, 0 },
2814 { "jaH", { Jv, BND, cond_jump_flag }, 0 },
252b5132 2815 /* 88 */
bf890a93
IT
2816 { "jsH", { Jv, BND, cond_jump_flag }, 0 },
2817 { "jnsH", { Jv, BND, cond_jump_flag }, 0 },
2818 { "jpH", { Jv, BND, cond_jump_flag }, 0 },
2819 { "jnpH", { Jv, BND, cond_jump_flag }, 0 },
2820 { "jlH", { Jv, BND, cond_jump_flag }, 0 },
2821 { "jgeH", { Jv, BND, cond_jump_flag }, 0 },
2822 { "jleH", { Jv, BND, cond_jump_flag }, 0 },
2823 { "jgH", { Jv, BND, cond_jump_flag }, 0 },
252b5132 2824 /* 90 */
bf890a93
IT
2825 { "seto", { Eb }, 0 },
2826 { "setno", { Eb }, 0 },
2827 { "setb", { Eb }, 0 },
2828 { "setae", { Eb }, 0 },
2829 { "sete", { Eb }, 0 },
2830 { "setne", { Eb }, 0 },
2831 { "setbe", { Eb }, 0 },
2832 { "seta", { Eb }, 0 },
252b5132 2833 /* 98 */
bf890a93
IT
2834 { "sets", { Eb }, 0 },
2835 { "setns", { Eb }, 0 },
2836 { "setp", { Eb }, 0 },
2837 { "setnp", { Eb }, 0 },
2838 { "setl", { Eb }, 0 },
2839 { "setge", { Eb }, 0 },
2840 { "setle", { Eb }, 0 },
2841 { "setg", { Eb }, 0 },
252b5132 2842 /* a0 */
bf890a93
IT
2843 { "pushT", { fs }, 0 },
2844 { "popT", { fs }, 0 },
2845 { "cpuid", { XX }, 0 },
2846 { "btS", { Ev, Gv }, 0 },
2847 { "shldS", { Ev, Gv, Ib }, 0 },
2848 { "shldS", { Ev, Gv, CL }, 0 },
1ceb70f8
L
2849 { REG_TABLE (REG_0FA6) },
2850 { REG_TABLE (REG_0FA7) },
252b5132 2851 /* a8 */
bf890a93
IT
2852 { "pushT", { gs }, 0 },
2853 { "popT", { gs }, 0 },
2854 { "rsm", { XX }, 0 },
2855 { "btsS", { Evh1, Gv }, 0 },
2856 { "shrdS", { Ev, Gv, Ib }, 0 },
2857 { "shrdS", { Ev, Gv, CL }, 0 },
1ceb70f8 2858 { REG_TABLE (REG_0FAE) },
bf890a93 2859 { "imulS", { Gv, Ev }, 0 },
252b5132 2860 /* b0 */
bf890a93
IT
2861 { "cmpxchgB", { Ebh1, Gb }, 0 },
2862 { "cmpxchgS", { Evh1, Gv }, 0 },
1ceb70f8 2863 { MOD_TABLE (MOD_0FB2) },
bf890a93 2864 { "btrS", { Evh1, Gv }, 0 },
1ceb70f8
L
2865 { MOD_TABLE (MOD_0FB4) },
2866 { MOD_TABLE (MOD_0FB5) },
bf890a93
IT
2867 { "movz{bR|x}", { Gv, Eb }, 0 },
2868 { "movz{wR|x}", { Gv, Ew }, 0 }, /* yes, there really is movzww ! */
252b5132 2869 /* b8 */
1ceb70f8 2870 { PREFIX_TABLE (PREFIX_0FB8) },
66f1eba0 2871 { "ud1S", { Gv, Ev }, 0 },
1ceb70f8 2872 { REG_TABLE (REG_0FBA) },
bf890a93 2873 { "btcS", { Evh1, Gv }, 0 },
f12dc422 2874 { PREFIX_TABLE (PREFIX_0FBC) },
1ceb70f8 2875 { PREFIX_TABLE (PREFIX_0FBD) },
bf890a93
IT
2876 { "movs{bR|x}", { Gv, Eb }, 0 },
2877 { "movs{wR|x}", { Gv, Ew }, 0 }, /* yes, there really is movsww ! */
252b5132 2878 /* c0 */
bf890a93
IT
2879 { "xaddB", { Ebh1, Gb }, 0 },
2880 { "xaddS", { Evh1, Gv }, 0 },
1ceb70f8 2881 { PREFIX_TABLE (PREFIX_0FC2) },
a8484f96 2882 { MOD_TABLE (MOD_0FC3) },
507bd325
L
2883 { "pinsrw", { MX, Edqw, Ib }, PREFIX_OPCODE },
2884 { "pextrw", { Gdq, MS, Ib }, PREFIX_OPCODE },
2885 { "shufpX", { XM, EXx, Ib }, PREFIX_OPCODE },
1ceb70f8 2886 { REG_TABLE (REG_0FC7) },
252b5132 2887 /* c8 */
bf890a93
IT
2888 { "bswap", { RMeAX }, 0 },
2889 { "bswap", { RMeCX }, 0 },
2890 { "bswap", { RMeDX }, 0 },
2891 { "bswap", { RMeBX }, 0 },
2892 { "bswap", { RMeSP }, 0 },
2893 { "bswap", { RMeBP }, 0 },
2894 { "bswap", { RMeSI }, 0 },
2895 { "bswap", { RMeDI }, 0 },
252b5132 2896 /* d0 */
1ceb70f8 2897 { PREFIX_TABLE (PREFIX_0FD0) },
507bd325
L
2898 { "psrlw", { MX, EM }, PREFIX_OPCODE },
2899 { "psrld", { MX, EM }, PREFIX_OPCODE },
2900 { "psrlq", { MX, EM }, PREFIX_OPCODE },
2901 { "paddq", { MX, EM }, PREFIX_OPCODE },
2902 { "pmullw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8 2903 { PREFIX_TABLE (PREFIX_0FD6) },
75c135a8 2904 { MOD_TABLE (MOD_0FD7) },
252b5132 2905 /* d8 */
507bd325
L
2906 { "psubusb", { MX, EM }, PREFIX_OPCODE },
2907 { "psubusw", { MX, EM }, PREFIX_OPCODE },
2908 { "pminub", { MX, EM }, PREFIX_OPCODE },
2909 { "pand", { MX, EM }, PREFIX_OPCODE },
2910 { "paddusb", { MX, EM }, PREFIX_OPCODE },
2911 { "paddusw", { MX, EM }, PREFIX_OPCODE },
2912 { "pmaxub", { MX, EM }, PREFIX_OPCODE },
2913 { "pandn", { MX, EM }, PREFIX_OPCODE },
252b5132 2914 /* e0 */
507bd325
L
2915 { "pavgb", { MX, EM }, PREFIX_OPCODE },
2916 { "psraw", { MX, EM }, PREFIX_OPCODE },
2917 { "psrad", { MX, EM }, PREFIX_OPCODE },
2918 { "pavgw", { MX, EM }, PREFIX_OPCODE },
2919 { "pmulhuw", { MX, EM }, PREFIX_OPCODE },
2920 { "pmulhw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8
L
2921 { PREFIX_TABLE (PREFIX_0FE6) },
2922 { PREFIX_TABLE (PREFIX_0FE7) },
252b5132 2923 /* e8 */
507bd325
L
2924 { "psubsb", { MX, EM }, PREFIX_OPCODE },
2925 { "psubsw", { MX, EM }, PREFIX_OPCODE },
2926 { "pminsw", { MX, EM }, PREFIX_OPCODE },
2927 { "por", { MX, EM }, PREFIX_OPCODE },
2928 { "paddsb", { MX, EM }, PREFIX_OPCODE },
2929 { "paddsw", { MX, EM }, PREFIX_OPCODE },
2930 { "pmaxsw", { MX, EM }, PREFIX_OPCODE },
2931 { "pxor", { MX, EM }, PREFIX_OPCODE },
252b5132 2932 /* f0 */
1ceb70f8 2933 { PREFIX_TABLE (PREFIX_0FF0) },
507bd325
L
2934 { "psllw", { MX, EM }, PREFIX_OPCODE },
2935 { "pslld", { MX, EM }, PREFIX_OPCODE },
2936 { "psllq", { MX, EM }, PREFIX_OPCODE },
2937 { "pmuludq", { MX, EM }, PREFIX_OPCODE },
2938 { "pmaddwd", { MX, EM }, PREFIX_OPCODE },
2939 { "psadbw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8 2940 { PREFIX_TABLE (PREFIX_0FF7) },
252b5132 2941 /* f8 */
507bd325
L
2942 { "psubb", { MX, EM }, PREFIX_OPCODE },
2943 { "psubw", { MX, EM }, PREFIX_OPCODE },
2944 { "psubd", { MX, EM }, PREFIX_OPCODE },
2945 { "psubq", { MX, EM }, PREFIX_OPCODE },
2946 { "paddb", { MX, EM }, PREFIX_OPCODE },
2947 { "paddw", { MX, EM }, PREFIX_OPCODE },
2948 { "paddd", { MX, EM }, PREFIX_OPCODE },
66f1eba0 2949 { "ud0S", { Gv, Ev }, 0 },
252b5132
RH
2950};
2951
2952static const unsigned char onebyte_has_modrm[256] = {
c608c12e
AM
2953 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2954 /* ------------------------------- */
2955 /* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 00 */
2956 /* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 10 */
2957 /* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 20 */
2958 /* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 30 */
2959 /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40 */
2960 /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50 */
2961 /* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, /* 60 */
2962 /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70 */
2963 /* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 80 */
2964 /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 90 */
2965 /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* a0 */
2966 /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* b0 */
2967 /* c0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* c0 */
2968 /* d0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* d0 */
2969 /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* e0 */
2970 /* f0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1 /* f0 */
2971 /* ------------------------------- */
2972 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
252b5132
RH
2973};
2974
2975static const unsigned char twobyte_has_modrm[256] = {
c608c12e
AM
2976 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2977 /* ------------------------------- */
252b5132 2978 /* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */
b5b1fc4f 2979 /* 10 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1f */
85f10a01 2980 /* 20 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 2f */
331d2d0d 2981 /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
252b5132 2982 /* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */
4bba6815
AM
2983 /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */
2984 /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */
85f10a01 2985 /* 70 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 7f */
252b5132
RH
2986 /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
2987 /* 90 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9f */
30d1c836 2988 /* a0 */ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1, /* af */
66f1eba0 2989 /* b0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* bf */
252b5132 2990 /* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */
ca164297 2991 /* d0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
4bba6815 2992 /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
66f1eba0 2993 /* f0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 /* ff */
c608c12e
AM
2994 /* ------------------------------- */
2995 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2996};
2997
252b5132
RH
2998static char obuf[100];
2999static char *obufp;
ea397f5b 3000static char *mnemonicendp;
252b5132
RH
3001static char scratchbuf[100];
3002static unsigned char *start_codep;
3003static unsigned char *insn_codep;
3004static unsigned char *codep;
285ca992 3005static unsigned char *end_codep;
f16cd0d5
L
3006static int last_lock_prefix;
3007static int last_repz_prefix;
3008static int last_repnz_prefix;
3009static int last_data_prefix;
3010static int last_addr_prefix;
3011static int last_rex_prefix;
3012static int last_seg_prefix;
d9949a36 3013static int fwait_prefix;
285ca992
L
3014/* The active segment register prefix. */
3015static int active_seg_prefix;
f16cd0d5
L
3016#define MAX_CODE_LENGTH 15
3017/* We can up to 14 prefixes since the maximum instruction length is
3018 15bytes. */
3019static int all_prefixes[MAX_CODE_LENGTH - 1];
252b5132 3020static disassemble_info *the_info;
7967e09e
L
3021static struct
3022 {
3023 int mod;
7967e09e 3024 int reg;
484c222e 3025 int rm;
7967e09e
L
3026 }
3027modrm;
4bba6815 3028static unsigned char need_modrm;
dfc8cf43
L
3029static struct
3030 {
3031 int scale;
3032 int index;
3033 int base;
3034 }
3035sib;
c0f3af97
L
3036static struct
3037 {
3038 int register_specifier;
3039 int length;
3040 int prefix;
3041 int w;
43234a1e
L
3042 int evex;
3043 int r;
3044 int v;
3045 int mask_register_specifier;
3046 int zeroing;
3047 int ll;
3048 int b;
c0f3af97
L
3049 }
3050vex;
3051static unsigned char need_vex;
3052static unsigned char need_vex_reg;
dae39acc 3053static unsigned char vex_w_done;
252b5132 3054
ea397f5b
L
3055struct op
3056 {
3057 const char *name;
3058 unsigned int len;
3059 };
3060
4bba6815
AM
3061/* If we are accessing mod/rm/reg without need_modrm set, then the
3062 values are stale. Hitting this abort likely indicates that you
3063 need to update onebyte_has_modrm or twobyte_has_modrm. */
3064#define MODRM_CHECK if (!need_modrm) abort ()
3065
d708bcba
AM
3066static const char **names64;
3067static const char **names32;
3068static const char **names16;
3069static const char **names8;
3070static const char **names8rex;
3071static const char **names_seg;
db51cc60
L
3072static const char *index64;
3073static const char *index32;
d708bcba 3074static const char **index16;
7e8b059b 3075static const char **names_bnd;
d708bcba
AM
3076
3077static const char *intel_names64[] = {
3078 "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
3079 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
3080};
3081static const char *intel_names32[] = {
3082 "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
3083 "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"
3084};
3085static const char *intel_names16[] = {
3086 "ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
3087 "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
3088};
3089static const char *intel_names8[] = {
3090 "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh",
3091};
3092static const char *intel_names8rex[] = {
3093 "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
3094 "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"
3095};
3096static const char *intel_names_seg[] = {
3097 "es", "cs", "ss", "ds", "fs", "gs", "?", "?",
3098};
db51cc60
L
3099static const char *intel_index64 = "riz";
3100static const char *intel_index32 = "eiz";
d708bcba
AM
3101static const char *intel_index16[] = {
3102 "bx+si", "bx+di", "bp+si", "bp+di", "si", "di", "bp", "bx"
3103};
3104
3105static const char *att_names64[] = {
3106 "%rax", "%rcx", "%rdx", "%rbx", "%rsp", "%rbp", "%rsi", "%rdi",
52b15da3
JH
3107 "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
3108};
d708bcba
AM
3109static const char *att_names32[] = {
3110 "%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi",
52b15da3 3111 "%r8d", "%r9d", "%r10d", "%r11d", "%r12d", "%r13d", "%r14d", "%r15d"
252b5132 3112};
d708bcba
AM
3113static const char *att_names16[] = {
3114 "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di",
52b15da3 3115 "%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w"
252b5132 3116};
d708bcba
AM
3117static const char *att_names8[] = {
3118 "%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh",
252b5132 3119};
d708bcba
AM
3120static const char *att_names8rex[] = {
3121 "%al", "%cl", "%dl", "%bl", "%spl", "%bpl", "%sil", "%dil",
52b15da3
JH
3122 "%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b"
3123};
d708bcba
AM
3124static const char *att_names_seg[] = {
3125 "%es", "%cs", "%ss", "%ds", "%fs", "%gs", "%?", "%?",
252b5132 3126};
db51cc60
L
3127static const char *att_index64 = "%riz";
3128static const char *att_index32 = "%eiz";
d708bcba
AM
3129static const char *att_index16[] = {
3130 "%bx,%si", "%bx,%di", "%bp,%si", "%bp,%di", "%si", "%di", "%bp", "%bx"
252b5132
RH
3131};
3132
b9733481
L
3133static const char **names_mm;
3134static const char *intel_names_mm[] = {
3135 "mm0", "mm1", "mm2", "mm3",
3136 "mm4", "mm5", "mm6", "mm7"
3137};
3138static const char *att_names_mm[] = {
3139 "%mm0", "%mm1", "%mm2", "%mm3",
3140 "%mm4", "%mm5", "%mm6", "%mm7"
3141};
3142
7e8b059b
L
3143static const char *intel_names_bnd[] = {
3144 "bnd0", "bnd1", "bnd2", "bnd3"
3145};
3146
3147static const char *att_names_bnd[] = {
3148 "%bnd0", "%bnd1", "%bnd2", "%bnd3"
3149};
3150
b9733481
L
3151static const char **names_xmm;
3152static const char *intel_names_xmm[] = {
3153 "xmm0", "xmm1", "xmm2", "xmm3",
3154 "xmm4", "xmm5", "xmm6", "xmm7",
3155 "xmm8", "xmm9", "xmm10", "xmm11",
43234a1e
L
3156 "xmm12", "xmm13", "xmm14", "xmm15",
3157 "xmm16", "xmm17", "xmm18", "xmm19",
3158 "xmm20", "xmm21", "xmm22", "xmm23",
3159 "xmm24", "xmm25", "xmm26", "xmm27",
3160 "xmm28", "xmm29", "xmm30", "xmm31"
b9733481
L
3161};
3162static const char *att_names_xmm[] = {
3163 "%xmm0", "%xmm1", "%xmm2", "%xmm3",
3164 "%xmm4", "%xmm5", "%xmm6", "%xmm7",
3165 "%xmm8", "%xmm9", "%xmm10", "%xmm11",
43234a1e
L
3166 "%xmm12", "%xmm13", "%xmm14", "%xmm15",
3167 "%xmm16", "%xmm17", "%xmm18", "%xmm19",
3168 "%xmm20", "%xmm21", "%xmm22", "%xmm23",
3169 "%xmm24", "%xmm25", "%xmm26", "%xmm27",
3170 "%xmm28", "%xmm29", "%xmm30", "%xmm31"
b9733481
L
3171};
3172
3173static const char **names_ymm;
3174static const char *intel_names_ymm[] = {
3175 "ymm0", "ymm1", "ymm2", "ymm3",
3176 "ymm4", "ymm5", "ymm6", "ymm7",
3177 "ymm8", "ymm9", "ymm10", "ymm11",
43234a1e
L
3178 "ymm12", "ymm13", "ymm14", "ymm15",
3179 "ymm16", "ymm17", "ymm18", "ymm19",
3180 "ymm20", "ymm21", "ymm22", "ymm23",
3181 "ymm24", "ymm25", "ymm26", "ymm27",
3182 "ymm28", "ymm29", "ymm30", "ymm31"
b9733481
L
3183};
3184static const char *att_names_ymm[] = {
3185 "%ymm0", "%ymm1", "%ymm2", "%ymm3",
3186 "%ymm4", "%ymm5", "%ymm6", "%ymm7",
3187 "%ymm8", "%ymm9", "%ymm10", "%ymm11",
43234a1e
L
3188 "%ymm12", "%ymm13", "%ymm14", "%ymm15",
3189 "%ymm16", "%ymm17", "%ymm18", "%ymm19",
3190 "%ymm20", "%ymm21", "%ymm22", "%ymm23",
3191 "%ymm24", "%ymm25", "%ymm26", "%ymm27",
3192 "%ymm28", "%ymm29", "%ymm30", "%ymm31"
3193};
3194
3195static const char **names_zmm;
3196static const char *intel_names_zmm[] = {
3197 "zmm0", "zmm1", "zmm2", "zmm3",
3198 "zmm4", "zmm5", "zmm6", "zmm7",
3199 "zmm8", "zmm9", "zmm10", "zmm11",
3200 "zmm12", "zmm13", "zmm14", "zmm15",
3201 "zmm16", "zmm17", "zmm18", "zmm19",
3202 "zmm20", "zmm21", "zmm22", "zmm23",
3203 "zmm24", "zmm25", "zmm26", "zmm27",
3204 "zmm28", "zmm29", "zmm30", "zmm31"
3205};
3206static const char *att_names_zmm[] = {
3207 "%zmm0", "%zmm1", "%zmm2", "%zmm3",
3208 "%zmm4", "%zmm5", "%zmm6", "%zmm7",
3209 "%zmm8", "%zmm9", "%zmm10", "%zmm11",
3210 "%zmm12", "%zmm13", "%zmm14", "%zmm15",
3211 "%zmm16", "%zmm17", "%zmm18", "%zmm19",
3212 "%zmm20", "%zmm21", "%zmm22", "%zmm23",
3213 "%zmm24", "%zmm25", "%zmm26", "%zmm27",
3214 "%zmm28", "%zmm29", "%zmm30", "%zmm31"
3215};
3216
3217static const char **names_mask;
3218static const char *intel_names_mask[] = {
3219 "k0", "k1", "k2", "k3", "k4", "k5", "k6", "k7"
3220};
3221static const char *att_names_mask[] = {
3222 "%k0", "%k1", "%k2", "%k3", "%k4", "%k5", "%k6", "%k7"
3223};
3224
3225static const char *names_rounding[] =
3226{
3227 "{rn-sae}",
3228 "{rd-sae}",
3229 "{ru-sae}",
3230 "{rz-sae}"
b9733481
L
3231};
3232
1ceb70f8
L
3233static const struct dis386 reg_table[][8] = {
3234 /* REG_80 */
252b5132 3235 {
bf890a93
IT
3236 { "addA", { Ebh1, Ib }, 0 },
3237 { "orA", { Ebh1, Ib }, 0 },
3238 { "adcA", { Ebh1, Ib }, 0 },
3239 { "sbbA", { Ebh1, Ib }, 0 },
3240 { "andA", { Ebh1, Ib }, 0 },
3241 { "subA", { Ebh1, Ib }, 0 },
3242 { "xorA", { Ebh1, Ib }, 0 },
3243 { "cmpA", { Eb, Ib }, 0 },
252b5132 3244 },
1ceb70f8 3245 /* REG_81 */
252b5132 3246 {
bf890a93
IT
3247 { "addQ", { Evh1, Iv }, 0 },
3248 { "orQ", { Evh1, Iv }, 0 },
3249 { "adcQ", { Evh1, Iv }, 0 },
3250 { "sbbQ", { Evh1, Iv }, 0 },
3251 { "andQ", { Evh1, Iv }, 0 },
3252 { "subQ", { Evh1, Iv }, 0 },
3253 { "xorQ", { Evh1, Iv }, 0 },
3254 { "cmpQ", { Ev, Iv }, 0 },
252b5132 3255 },
7148c369 3256 /* REG_83 */
252b5132 3257 {
bf890a93
IT
3258 { "addQ", { Evh1, sIb }, 0 },
3259 { "orQ", { Evh1, sIb }, 0 },
3260 { "adcQ", { Evh1, sIb }, 0 },
3261 { "sbbQ", { Evh1, sIb }, 0 },
3262 { "andQ", { Evh1, sIb }, 0 },
3263 { "subQ", { Evh1, sIb }, 0 },
3264 { "xorQ", { Evh1, sIb }, 0 },
3265 { "cmpQ", { Ev, sIb }, 0 },
252b5132 3266 },
1ceb70f8 3267 /* REG_8F */
4e7d34a6 3268 {
bf890a93 3269 { "popU", { stackEv }, 0 },
c48244a5 3270 { XOP_8F_TABLE (XOP_09) },
592d1631
L
3271 { Bad_Opcode },
3272 { Bad_Opcode },
3273 { Bad_Opcode },
f88c9eb0 3274 { XOP_8F_TABLE (XOP_09) },
4e7d34a6 3275 },
1ceb70f8 3276 /* REG_C0 */
252b5132 3277 {
bf890a93
IT
3278 { "rolA", { Eb, Ib }, 0 },
3279 { "rorA", { Eb, Ib }, 0 },
3280 { "rclA", { Eb, Ib }, 0 },
3281 { "rcrA", { Eb, Ib }, 0 },
3282 { "shlA", { Eb, Ib }, 0 },
3283 { "shrA", { Eb, Ib }, 0 },
e4bdd679 3284 { "shlA", { Eb, Ib }, 0 },
bf890a93 3285 { "sarA", { Eb, Ib }, 0 },
252b5132 3286 },
1ceb70f8 3287 /* REG_C1 */
252b5132 3288 {
bf890a93
IT
3289 { "rolQ", { Ev, Ib }, 0 },
3290 { "rorQ", { Ev, Ib }, 0 },
3291 { "rclQ", { Ev, Ib }, 0 },
3292 { "rcrQ", { Ev, Ib }, 0 },
3293 { "shlQ", { Ev, Ib }, 0 },
3294 { "shrQ", { Ev, Ib }, 0 },
e4bdd679 3295 { "shlQ", { Ev, Ib }, 0 },
bf890a93 3296 { "sarQ", { Ev, Ib }, 0 },
252b5132 3297 },
1ceb70f8 3298 /* REG_C6 */
4e7d34a6 3299 {
bf890a93 3300 { "movA", { Ebh3, Ib }, 0 },
42164a71
L
3301 { Bad_Opcode },
3302 { Bad_Opcode },
3303 { Bad_Opcode },
3304 { Bad_Opcode },
3305 { Bad_Opcode },
3306 { Bad_Opcode },
3307 { MOD_TABLE (MOD_C6_REG_7) },
4e7d34a6 3308 },
1ceb70f8 3309 /* REG_C7 */
4e7d34a6 3310 {
bf890a93 3311 { "movQ", { Evh3, Iv }, 0 },
42164a71
L
3312 { Bad_Opcode },
3313 { Bad_Opcode },
3314 { Bad_Opcode },
3315 { Bad_Opcode },
3316 { Bad_Opcode },
3317 { Bad_Opcode },
3318 { MOD_TABLE (MOD_C7_REG_7) },
4e7d34a6 3319 },
1ceb70f8 3320 /* REG_D0 */
252b5132 3321 {
bf890a93
IT
3322 { "rolA", { Eb, I1 }, 0 },
3323 { "rorA", { Eb, I1 }, 0 },
3324 { "rclA", { Eb, I1 }, 0 },
3325 { "rcrA", { Eb, I1 }, 0 },
3326 { "shlA", { Eb, I1 }, 0 },
3327 { "shrA", { Eb, I1 }, 0 },
e4bdd679 3328 { "shlA", { Eb, I1 }, 0 },
bf890a93 3329 { "sarA", { Eb, I1 }, 0 },
252b5132 3330 },
1ceb70f8 3331 /* REG_D1 */
252b5132 3332 {
bf890a93
IT
3333 { "rolQ", { Ev, I1 }, 0 },
3334 { "rorQ", { Ev, I1 }, 0 },
3335 { "rclQ", { Ev, I1 }, 0 },
3336 { "rcrQ", { Ev, I1 }, 0 },
3337 { "shlQ", { Ev, I1 }, 0 },
3338 { "shrQ", { Ev, I1 }, 0 },
e4bdd679 3339 { "shlQ", { Ev, I1 }, 0 },
bf890a93 3340 { "sarQ", { Ev, I1 }, 0 },
252b5132 3341 },
1ceb70f8 3342 /* REG_D2 */
252b5132 3343 {
bf890a93
IT
3344 { "rolA", { Eb, CL }, 0 },
3345 { "rorA", { Eb, CL }, 0 },
3346 { "rclA", { Eb, CL }, 0 },
3347 { "rcrA", { Eb, CL }, 0 },
3348 { "shlA", { Eb, CL }, 0 },
3349 { "shrA", { Eb, CL }, 0 },
e4bdd679 3350 { "shlA", { Eb, CL }, 0 },
bf890a93 3351 { "sarA", { Eb, CL }, 0 },
252b5132 3352 },
1ceb70f8 3353 /* REG_D3 */
252b5132 3354 {
bf890a93
IT
3355 { "rolQ", { Ev, CL }, 0 },
3356 { "rorQ", { Ev, CL }, 0 },
3357 { "rclQ", { Ev, CL }, 0 },
3358 { "rcrQ", { Ev, CL }, 0 },
3359 { "shlQ", { Ev, CL }, 0 },
3360 { "shrQ", { Ev, CL }, 0 },
e4bdd679 3361 { "shlQ", { Ev, CL }, 0 },
bf890a93 3362 { "sarQ", { Ev, CL }, 0 },
252b5132 3363 },
1ceb70f8 3364 /* REG_F6 */
252b5132 3365 {
bf890a93 3366 { "testA", { Eb, Ib }, 0 },
7db2c588 3367 { "testA", { Eb, Ib }, 0 },
bf890a93
IT
3368 { "notA", { Ebh1 }, 0 },
3369 { "negA", { Ebh1 }, 0 },
3370 { "mulA", { Eb }, 0 }, /* Don't print the implicit %al register, */
3371 { "imulA", { Eb }, 0 }, /* to distinguish these opcodes from other */
3372 { "divA", { Eb }, 0 }, /* mul/imul opcodes. Do the same for div */
3373 { "idivA", { Eb }, 0 }, /* and idiv for consistency. */
252b5132 3374 },
1ceb70f8 3375 /* REG_F7 */
252b5132 3376 {
bf890a93 3377 { "testQ", { Ev, Iv }, 0 },
7db2c588 3378 { "testQ", { Ev, Iv }, 0 },
bf890a93
IT
3379 { "notQ", { Evh1 }, 0 },
3380 { "negQ", { Evh1 }, 0 },
3381 { "mulQ", { Ev }, 0 }, /* Don't print the implicit register. */
3382 { "imulQ", { Ev }, 0 },
3383 { "divQ", { Ev }, 0 },
3384 { "idivQ", { Ev }, 0 },
252b5132 3385 },
1ceb70f8 3386 /* REG_FE */
252b5132 3387 {
bf890a93
IT
3388 { "incA", { Ebh1 }, 0 },
3389 { "decA", { Ebh1 }, 0 },
252b5132 3390 },
1ceb70f8 3391 /* REG_FF */
252b5132 3392 {
bf890a93
IT
3393 { "incQ", { Evh1 }, 0 },
3394 { "decQ", { Evh1 }, 0 },
9fef80d6 3395 { "call{&|}", { NOTRACK, indirEv, BND }, 0 },
4a357820 3396 { MOD_TABLE (MOD_FF_REG_3) },
9fef80d6 3397 { "jmp{&|}", { NOTRACK, indirEv, BND }, 0 },
4a357820 3398 { MOD_TABLE (MOD_FF_REG_5) },
bf890a93 3399 { "pushU", { stackEv }, 0 },
592d1631 3400 { Bad_Opcode },
252b5132 3401 },
1ceb70f8 3402 /* REG_0F00 */
252b5132 3403 {
bf890a93
IT
3404 { "sldtD", { Sv }, 0 },
3405 { "strD", { Sv }, 0 },
3406 { "lldt", { Ew }, 0 },
3407 { "ltr", { Ew }, 0 },
3408 { "verr", { Ew }, 0 },
3409 { "verw", { Ew }, 0 },
592d1631
L
3410 { Bad_Opcode },
3411 { Bad_Opcode },
252b5132 3412 },
1ceb70f8 3413 /* REG_0F01 */
252b5132 3414 {
1ceb70f8
L
3415 { MOD_TABLE (MOD_0F01_REG_0) },
3416 { MOD_TABLE (MOD_0F01_REG_1) },
3417 { MOD_TABLE (MOD_0F01_REG_2) },
3418 { MOD_TABLE (MOD_0F01_REG_3) },
bf890a93 3419 { "smswD", { Sv }, 0 },
8eab4136 3420 { MOD_TABLE (MOD_0F01_REG_5) },
bf890a93 3421 { "lmsw", { Ew }, 0 },
1ceb70f8 3422 { MOD_TABLE (MOD_0F01_REG_7) },
252b5132 3423 },
b5b1fc4f 3424 /* REG_0F0D */
252b5132 3425 {
bf890a93
IT
3426 { "prefetch", { Mb }, 0 },
3427 { "prefetchw", { Mb }, 0 },
3428 { "prefetchwt1", { Mb }, 0 },
3429 { "prefetch", { Mb }, 0 },
3430 { "prefetch", { Mb }, 0 },
3431 { "prefetch", { Mb }, 0 },
3432 { "prefetch", { Mb }, 0 },
3433 { "prefetch", { Mb }, 0 },
252b5132 3434 },
1ceb70f8 3435 /* REG_0F18 */
252b5132 3436 {
1ceb70f8
L
3437 { MOD_TABLE (MOD_0F18_REG_0) },
3438 { MOD_TABLE (MOD_0F18_REG_1) },
3439 { MOD_TABLE (MOD_0F18_REG_2) },
3440 { MOD_TABLE (MOD_0F18_REG_3) },
d7189fa5
RM
3441 { MOD_TABLE (MOD_0F18_REG_4) },
3442 { MOD_TABLE (MOD_0F18_REG_5) },
3443 { MOD_TABLE (MOD_0F18_REG_6) },
3444 { MOD_TABLE (MOD_0F18_REG_7) },
252b5132 3445 },
c48935d7
IT
3446 /* REG_0F1C_MOD_0 */
3447 {
3448 { "cldemote", { Mb }, 0 },
3449 { "nopQ", { Ev }, 0 },
3450 { "nopQ", { Ev }, 0 },
3451 { "nopQ", { Ev }, 0 },
3452 { "nopQ", { Ev }, 0 },
3453 { "nopQ", { Ev }, 0 },
3454 { "nopQ", { Ev }, 0 },
3455 { "nopQ", { Ev }, 0 },
3456 },
603555e5
L
3457 /* REG_0F1E_MOD_3 */
3458 {
3459 { "nopQ", { Ev }, 0 },
3460 { "rdsspK", { Rdq }, PREFIX_OPCODE },
3461 { "nopQ", { Ev }, 0 },
3462 { "nopQ", { Ev }, 0 },
3463 { "nopQ", { Ev }, 0 },
3464 { "nopQ", { Ev }, 0 },
3465 { "nopQ", { Ev }, 0 },
3466 { RM_TABLE (RM_0F1E_MOD_3_REG_7) },
3467 },
1ceb70f8 3468 /* REG_0F71 */
a6bd098c 3469 {
592d1631
L
3470 { Bad_Opcode },
3471 { Bad_Opcode },
1ceb70f8 3472 { MOD_TABLE (MOD_0F71_REG_2) },
592d1631 3473 { Bad_Opcode },
1ceb70f8 3474 { MOD_TABLE (MOD_0F71_REG_4) },
592d1631 3475 { Bad_Opcode },
1ceb70f8 3476 { MOD_TABLE (MOD_0F71_REG_6) },
a6bd098c 3477 },
1ceb70f8 3478 /* REG_0F72 */
a6bd098c 3479 {
592d1631
L
3480 { Bad_Opcode },
3481 { Bad_Opcode },
1ceb70f8 3482 { MOD_TABLE (MOD_0F72_REG_2) },
592d1631 3483 { Bad_Opcode },
1ceb70f8 3484 { MOD_TABLE (MOD_0F72_REG_4) },
592d1631 3485 { Bad_Opcode },
1ceb70f8 3486 { MOD_TABLE (MOD_0F72_REG_6) },
a6bd098c 3487 },
1ceb70f8 3488 /* REG_0F73 */
252b5132 3489 {
592d1631
L
3490 { Bad_Opcode },
3491 { Bad_Opcode },
1ceb70f8
L
3492 { MOD_TABLE (MOD_0F73_REG_2) },
3493 { MOD_TABLE (MOD_0F73_REG_3) },
592d1631
L
3494 { Bad_Opcode },
3495 { Bad_Opcode },
1ceb70f8
L
3496 { MOD_TABLE (MOD_0F73_REG_6) },
3497 { MOD_TABLE (MOD_0F73_REG_7) },
252b5132 3498 },
1ceb70f8 3499 /* REG_0FA6 */
252b5132 3500 {
bf890a93
IT
3501 { "montmul", { { OP_0f07, 0 } }, 0 },
3502 { "xsha1", { { OP_0f07, 0 } }, 0 },
3503 { "xsha256", { { OP_0f07, 0 } }, 0 },
4e7d34a6 3504 },
1ceb70f8 3505 /* REG_0FA7 */
4e7d34a6 3506 {
bf890a93
IT
3507 { "xstore-rng", { { OP_0f07, 0 } }, 0 },
3508 { "xcrypt-ecb", { { OP_0f07, 0 } }, 0 },
3509 { "xcrypt-cbc", { { OP_0f07, 0 } }, 0 },
3510 { "xcrypt-ctr", { { OP_0f07, 0 } }, 0 },
3511 { "xcrypt-cfb", { { OP_0f07, 0 } }, 0 },
3512 { "xcrypt-ofb", { { OP_0f07, 0 } }, 0 },
4e7d34a6 3513 },
1ceb70f8 3514 /* REG_0FAE */
4e7d34a6 3515 {
1ceb70f8
L
3516 { MOD_TABLE (MOD_0FAE_REG_0) },
3517 { MOD_TABLE (MOD_0FAE_REG_1) },
3518 { MOD_TABLE (MOD_0FAE_REG_2) },
3519 { MOD_TABLE (MOD_0FAE_REG_3) },
475a2301 3520 { MOD_TABLE (MOD_0FAE_REG_4) },
1ceb70f8
L
3521 { MOD_TABLE (MOD_0FAE_REG_5) },
3522 { MOD_TABLE (MOD_0FAE_REG_6) },
3523 { MOD_TABLE (MOD_0FAE_REG_7) },
252b5132 3524 },
1ceb70f8 3525 /* REG_0FBA */
252b5132 3526 {
592d1631
L
3527 { Bad_Opcode },
3528 { Bad_Opcode },
3529 { Bad_Opcode },
3530 { Bad_Opcode },
bf890a93
IT
3531 { "btQ", { Ev, Ib }, 0 },
3532 { "btsQ", { Evh1, Ib }, 0 },
3533 { "btrQ", { Evh1, Ib }, 0 },
3534 { "btcQ", { Evh1, Ib }, 0 },
c608c12e 3535 },
1ceb70f8 3536 /* REG_0FC7 */
c608c12e 3537 {
592d1631 3538 { Bad_Opcode },
bf890a93 3539 { "cmpxchg8b", { { CMPXCHG8B_Fixup, q_mode } }, 0 },
592d1631 3540 { Bad_Opcode },
963f3586
IT
3541 { MOD_TABLE (MOD_0FC7_REG_3) },
3542 { MOD_TABLE (MOD_0FC7_REG_4) },
3543 { MOD_TABLE (MOD_0FC7_REG_5) },
1ceb70f8
L
3544 { MOD_TABLE (MOD_0FC7_REG_6) },
3545 { MOD_TABLE (MOD_0FC7_REG_7) },
252b5132 3546 },
592a252b 3547 /* REG_VEX_0F71 */
c0f3af97 3548 {
592d1631
L
3549 { Bad_Opcode },
3550 { Bad_Opcode },
592a252b 3551 { MOD_TABLE (MOD_VEX_0F71_REG_2) },
592d1631 3552 { Bad_Opcode },
592a252b 3553 { MOD_TABLE (MOD_VEX_0F71_REG_4) },
592d1631 3554 { Bad_Opcode },
592a252b 3555 { MOD_TABLE (MOD_VEX_0F71_REG_6) },
c0f3af97 3556 },
592a252b 3557 /* REG_VEX_0F72 */
c0f3af97 3558 {
592d1631
L
3559 { Bad_Opcode },
3560 { Bad_Opcode },
592a252b 3561 { MOD_TABLE (MOD_VEX_0F72_REG_2) },
592d1631 3562 { Bad_Opcode },
592a252b 3563 { MOD_TABLE (MOD_VEX_0F72_REG_4) },
592d1631 3564 { Bad_Opcode },
592a252b 3565 { MOD_TABLE (MOD_VEX_0F72_REG_6) },
c0f3af97 3566 },
592a252b 3567 /* REG_VEX_0F73 */
c0f3af97 3568 {
592d1631
L
3569 { Bad_Opcode },
3570 { Bad_Opcode },
592a252b
L
3571 { MOD_TABLE (MOD_VEX_0F73_REG_2) },
3572 { MOD_TABLE (MOD_VEX_0F73_REG_3) },
592d1631
L
3573 { Bad_Opcode },
3574 { Bad_Opcode },
592a252b
L
3575 { MOD_TABLE (MOD_VEX_0F73_REG_6) },
3576 { MOD_TABLE (MOD_VEX_0F73_REG_7) },
c0f3af97 3577 },
592a252b 3578 /* REG_VEX_0FAE */
c0f3af97 3579 {
592d1631
L
3580 { Bad_Opcode },
3581 { Bad_Opcode },
592a252b
L
3582 { MOD_TABLE (MOD_VEX_0FAE_REG_2) },
3583 { MOD_TABLE (MOD_VEX_0FAE_REG_3) },
c0f3af97 3584 },
f12dc422
L
3585 /* REG_VEX_0F38F3 */
3586 {
3587 { Bad_Opcode },
3588 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_1) },
3589 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_2) },
3590 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_3) },
3591 },
f88c9eb0
SP
3592 /* REG_XOP_LWPCB */
3593 {
bf890a93
IT
3594 { "llwpcb", { { OP_LWPCB_E, 0 } }, 0 },
3595 { "slwpcb", { { OP_LWPCB_E, 0 } }, 0 },
f88c9eb0
SP
3596 },
3597 /* REG_XOP_LWP */
3598 {
bf890a93
IT
3599 { "lwpins", { { OP_LWP_E, 0 }, Ed, Iq }, 0 },
3600 { "lwpval", { { OP_LWP_E, 0 }, Ed, Iq }, 0 },
f88c9eb0 3601 },
2a2a0f38
QN
3602 /* REG_XOP_TBM_01 */
3603 {
3604 { Bad_Opcode },
bf890a93
IT
3605 { "blcfill", { { OP_LWP_E, 0 }, Ev }, 0 },
3606 { "blsfill", { { OP_LWP_E, 0 }, Ev }, 0 },
3607 { "blcs", { { OP_LWP_E, 0 }, Ev }, 0 },
3608 { "tzmsk", { { OP_LWP_E, 0 }, Ev }, 0 },
3609 { "blcic", { { OP_LWP_E, 0 }, Ev }, 0 },
3610 { "blsic", { { OP_LWP_E, 0 }, Ev }, 0 },
3611 { "t1mskc", { { OP_LWP_E, 0 }, Ev }, 0 },
2a2a0f38
QN
3612 },
3613 /* REG_XOP_TBM_02 */
3614 {
3615 { Bad_Opcode },
bf890a93 3616 { "blcmsk", { { OP_LWP_E, 0 }, Ev }, 0 },
2a2a0f38
QN
3617 { Bad_Opcode },
3618 { Bad_Opcode },
3619 { Bad_Opcode },
3620 { Bad_Opcode },
bf890a93 3621 { "blci", { { OP_LWP_E, 0 }, Ev }, 0 },
2a2a0f38 3622 },
ad692897
L
3623
3624#include "i386-dis-evex-reg.h"
4e7d34a6
L
3625};
3626
1ceb70f8
L
3627static const struct dis386 prefix_table[][4] = {
3628 /* PREFIX_90 */
252b5132 3629 {
bf890a93
IT
3630 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } }, 0 },
3631 { "pause", { XX }, 0 },
3632 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } }, 0 },
507bd325 3633 { NULL, { { NULL, 0 } }, PREFIX_IGNORED }
0f10071e 3634 },
4e7d34a6 3635
603555e5
L
3636 /* PREFIX_MOD_0_0F01_REG_5 */
3637 {
3638 { Bad_Opcode },
3639 { "rstorssp", { Mq }, PREFIX_OPCODE },
3640 },
3641
2234eee6 3642 /* PREFIX_MOD_3_0F01_REG_5_RM_0 */
603555e5
L
3643 {
3644 { Bad_Opcode },
2234eee6 3645 { "setssbsy", { Skip_MODRM }, PREFIX_OPCODE },
603555e5
L
3646 },
3647
3648 /* PREFIX_MOD_3_0F01_REG_5_RM_2 */
3649 {
3650 { Bad_Opcode },
c2f76402 3651 { "saveprevssp", { Skip_MODRM }, PREFIX_OPCODE },
603555e5
L
3652 },
3653
3233d7d0
IT
3654 /* PREFIX_0F09 */
3655 {
3656 { "wbinvd", { XX }, 0 },
3657 { "wbnoinvd", { XX }, 0 },
3658 },
3659
1ceb70f8 3660 /* PREFIX_0F10 */
cc0ec051 3661 {
507bd325
L
3662 { "movups", { XM, EXx }, PREFIX_OPCODE },
3663 { "movss", { XM, EXd }, PREFIX_OPCODE },
3664 { "movupd", { XM, EXx }, PREFIX_OPCODE },
3665 { "movsd", { XM, EXq }, PREFIX_OPCODE },
30d1c836 3666 },
4e7d34a6 3667
1ceb70f8 3668 /* PREFIX_0F11 */
30d1c836 3669 {
507bd325
L
3670 { "movups", { EXxS, XM }, PREFIX_OPCODE },
3671 { "movss", { EXdS, XM }, PREFIX_OPCODE },
3672 { "movupd", { EXxS, XM }, PREFIX_OPCODE },
3673 { "movsd", { EXqS, XM }, PREFIX_OPCODE },
4e7d34a6 3674 },
252b5132 3675
1ceb70f8 3676 /* PREFIX_0F12 */
c608c12e 3677 {
1ceb70f8 3678 { MOD_TABLE (MOD_0F12_PREFIX_0) },
507bd325
L
3679 { "movsldup", { XM, EXx }, PREFIX_OPCODE },
3680 { "movlpd", { XM, EXq }, PREFIX_OPCODE },
3681 { "movddup", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3682 },
4e7d34a6 3683
1ceb70f8 3684 /* PREFIX_0F16 */
c608c12e 3685 {
1ceb70f8 3686 { MOD_TABLE (MOD_0F16_PREFIX_0) },
507bd325
L
3687 { "movshdup", { XM, EXx }, PREFIX_OPCODE },
3688 { "movhpd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3689 },
4e7d34a6 3690
7e8b059b
L
3691 /* PREFIX_0F1A */
3692 {
3693 { MOD_TABLE (MOD_0F1A_PREFIX_0) },
bf890a93
IT
3694 { "bndcl", { Gbnd, Ev_bnd }, 0 },
3695 { "bndmov", { Gbnd, Ebnd }, 0 },
3696 { "bndcu", { Gbnd, Ev_bnd }, 0 },
7e8b059b
L
3697 },
3698
3699 /* PREFIX_0F1B */
3700 {
3701 { MOD_TABLE (MOD_0F1B_PREFIX_0) },
3702 { MOD_TABLE (MOD_0F1B_PREFIX_1) },
9f79e886 3703 { "bndmov", { EbndS, Gbnd }, 0 },
bf890a93 3704 { "bndcn", { Gbnd, Ev_bnd }, 0 },
7e8b059b
L
3705 },
3706
c48935d7
IT
3707 /* PREFIX_0F1C */
3708 {
3709 { MOD_TABLE (MOD_0F1C_PREFIX_0) },
3710 { "nopQ", { Ev }, PREFIX_OPCODE },
3711 { "nopQ", { Ev }, PREFIX_OPCODE },
3712 { "nopQ", { Ev }, PREFIX_OPCODE },
3713 },
3714
603555e5
L
3715 /* PREFIX_0F1E */
3716 {
3717 { "nopQ", { Ev }, PREFIX_OPCODE },
3718 { MOD_TABLE (MOD_0F1E_PREFIX_1) },
3719 { "nopQ", { Ev }, PREFIX_OPCODE },
3720 { "nopQ", { Ev }, PREFIX_OPCODE },
3721 },
3722
1ceb70f8 3723 /* PREFIX_0F2A */
c608c12e 3724 {
507bd325 3725 { "cvtpi2ps", { XM, EMCq }, PREFIX_OPCODE },
e1a1babd 3726 { "cvtsi2ss%LQ", { XM, Edq }, PREFIX_OPCODE },
507bd325 3727 { "cvtpi2pd", { XM, EMCq }, PREFIX_OPCODE },
e1a1babd 3728 { "cvtsi2sd%LQ", { XM, Edq }, 0 },
c608c12e 3729 },
4e7d34a6 3730
1ceb70f8 3731 /* PREFIX_0F2B */
c608c12e 3732 {
75c135a8
L
3733 { MOD_TABLE (MOD_0F2B_PREFIX_0) },
3734 { MOD_TABLE (MOD_0F2B_PREFIX_1) },
3735 { MOD_TABLE (MOD_0F2B_PREFIX_2) },
3736 { MOD_TABLE (MOD_0F2B_PREFIX_3) },
c608c12e 3737 },
4e7d34a6 3738
1ceb70f8 3739 /* PREFIX_0F2C */
c608c12e 3740 {
507bd325 3741 { "cvttps2pi", { MXC, EXq }, PREFIX_OPCODE },
e1a1babd 3742 { "cvttss2si", { Gdq, EXd }, PREFIX_OPCODE },
507bd325 3743 { "cvttpd2pi", { MXC, EXx }, PREFIX_OPCODE },
e1a1babd 3744 { "cvttsd2si", { Gdq, EXq }, PREFIX_OPCODE },
c608c12e 3745 },
4e7d34a6 3746
1ceb70f8 3747 /* PREFIX_0F2D */
c608c12e 3748 {
507bd325 3749 { "cvtps2pi", { MXC, EXq }, PREFIX_OPCODE },
e1a1babd 3750 { "cvtss2si", { Gdq, EXd }, PREFIX_OPCODE },
507bd325 3751 { "cvtpd2pi", { MXC, EXx }, PREFIX_OPCODE },
e1a1babd 3752 { "cvtsd2si", { Gdq, EXq }, PREFIX_OPCODE },
c608c12e 3753 },
4e7d34a6 3754
1ceb70f8 3755 /* PREFIX_0F2E */
c608c12e 3756 {
bf890a93 3757 { "ucomiss",{ XM, EXd }, 0 },
592d1631 3758 { Bad_Opcode },
bf890a93 3759 { "ucomisd",{ XM, EXq }, 0 },
c608c12e 3760 },
4e7d34a6 3761
1ceb70f8 3762 /* PREFIX_0F2F */
c608c12e 3763 {
bf890a93 3764 { "comiss", { XM, EXd }, 0 },
592d1631 3765 { Bad_Opcode },
bf890a93 3766 { "comisd", { XM, EXq }, 0 },
c608c12e 3767 },
4e7d34a6 3768
1ceb70f8 3769 /* PREFIX_0F51 */
c608c12e 3770 {
507bd325
L
3771 { "sqrtps", { XM, EXx }, PREFIX_OPCODE },
3772 { "sqrtss", { XM, EXd }, PREFIX_OPCODE },
3773 { "sqrtpd", { XM, EXx }, PREFIX_OPCODE },
3774 { "sqrtsd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3775 },
4e7d34a6 3776
1ceb70f8 3777 /* PREFIX_0F52 */
c608c12e 3778 {
507bd325
L
3779 { "rsqrtps",{ XM, EXx }, PREFIX_OPCODE },
3780 { "rsqrtss",{ XM, EXd }, PREFIX_OPCODE },
c608c12e 3781 },
4e7d34a6 3782
1ceb70f8 3783 /* PREFIX_0F53 */
c608c12e 3784 {
507bd325
L
3785 { "rcpps", { XM, EXx }, PREFIX_OPCODE },
3786 { "rcpss", { XM, EXd }, PREFIX_OPCODE },
c608c12e 3787 },
4e7d34a6 3788
1ceb70f8 3789 /* PREFIX_0F58 */
c608c12e 3790 {
507bd325
L
3791 { "addps", { XM, EXx }, PREFIX_OPCODE },
3792 { "addss", { XM, EXd }, PREFIX_OPCODE },
3793 { "addpd", { XM, EXx }, PREFIX_OPCODE },
3794 { "addsd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3795 },
4e7d34a6 3796
1ceb70f8 3797 /* PREFIX_0F59 */
c608c12e 3798 {
507bd325
L
3799 { "mulps", { XM, EXx }, PREFIX_OPCODE },
3800 { "mulss", { XM, EXd }, PREFIX_OPCODE },
3801 { "mulpd", { XM, EXx }, PREFIX_OPCODE },
3802 { "mulsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3803 },
4e7d34a6 3804
1ceb70f8 3805 /* PREFIX_0F5A */
041bd2e0 3806 {
507bd325
L
3807 { "cvtps2pd", { XM, EXq }, PREFIX_OPCODE },
3808 { "cvtss2sd", { XM, EXd }, PREFIX_OPCODE },
3809 { "cvtpd2ps", { XM, EXx }, PREFIX_OPCODE },
3810 { "cvtsd2ss", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3811 },
4e7d34a6 3812
1ceb70f8 3813 /* PREFIX_0F5B */
041bd2e0 3814 {
507bd325
L
3815 { "cvtdq2ps", { XM, EXx }, PREFIX_OPCODE },
3816 { "cvttps2dq", { XM, EXx }, PREFIX_OPCODE },
3817 { "cvtps2dq", { XM, EXx }, PREFIX_OPCODE },
041bd2e0 3818 },
4e7d34a6 3819
1ceb70f8 3820 /* PREFIX_0F5C */
041bd2e0 3821 {
507bd325
L
3822 { "subps", { XM, EXx }, PREFIX_OPCODE },
3823 { "subss", { XM, EXd }, PREFIX_OPCODE },
3824 { "subpd", { XM, EXx }, PREFIX_OPCODE },
3825 { "subsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3826 },
4e7d34a6 3827
1ceb70f8 3828 /* PREFIX_0F5D */
041bd2e0 3829 {
507bd325
L
3830 { "minps", { XM, EXx }, PREFIX_OPCODE },
3831 { "minss", { XM, EXd }, PREFIX_OPCODE },
3832 { "minpd", { XM, EXx }, PREFIX_OPCODE },
3833 { "minsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3834 },
4e7d34a6 3835
1ceb70f8 3836 /* PREFIX_0F5E */
041bd2e0 3837 {
507bd325
L
3838 { "divps", { XM, EXx }, PREFIX_OPCODE },
3839 { "divss", { XM, EXd }, PREFIX_OPCODE },
3840 { "divpd", { XM, EXx }, PREFIX_OPCODE },
3841 { "divsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3842 },
4e7d34a6 3843
1ceb70f8 3844 /* PREFIX_0F5F */
041bd2e0 3845 {
507bd325
L
3846 { "maxps", { XM, EXx }, PREFIX_OPCODE },
3847 { "maxss", { XM, EXd }, PREFIX_OPCODE },
3848 { "maxpd", { XM, EXx }, PREFIX_OPCODE },
3849 { "maxsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3850 },
4e7d34a6 3851
1ceb70f8 3852 /* PREFIX_0F60 */
041bd2e0 3853 {
507bd325 3854 { "punpcklbw",{ MX, EMd }, PREFIX_OPCODE },
592d1631 3855 { Bad_Opcode },
507bd325 3856 { "punpcklbw",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 3857 },
4e7d34a6 3858
1ceb70f8 3859 /* PREFIX_0F61 */
041bd2e0 3860 {
507bd325 3861 { "punpcklwd",{ MX, EMd }, PREFIX_OPCODE },
592d1631 3862 { Bad_Opcode },
507bd325 3863 { "punpcklwd",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 3864 },
4e7d34a6 3865
1ceb70f8 3866 /* PREFIX_0F62 */
041bd2e0 3867 {
507bd325 3868 { "punpckldq",{ MX, EMd }, PREFIX_OPCODE },
592d1631 3869 { Bad_Opcode },
507bd325 3870 { "punpckldq",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 3871 },
4e7d34a6 3872
1ceb70f8 3873 /* PREFIX_0F6C */
041bd2e0 3874 {
592d1631
L
3875 { Bad_Opcode },
3876 { Bad_Opcode },
507bd325 3877 { "punpcklqdq", { XM, EXx }, PREFIX_OPCODE },
0f17484f 3878 },
4e7d34a6 3879
1ceb70f8 3880 /* PREFIX_0F6D */
0f17484f 3881 {
592d1631
L
3882 { Bad_Opcode },
3883 { Bad_Opcode },
507bd325 3884 { "punpckhqdq", { XM, EXx }, PREFIX_OPCODE },
041bd2e0 3885 },
4e7d34a6 3886
1ceb70f8 3887 /* PREFIX_0F6F */
ca164297 3888 {
507bd325
L
3889 { "movq", { MX, EM }, PREFIX_OPCODE },
3890 { "movdqu", { XM, EXx }, PREFIX_OPCODE },
3891 { "movdqa", { XM, EXx }, PREFIX_OPCODE },
ca164297 3892 },
4e7d34a6 3893
1ceb70f8 3894 /* PREFIX_0F70 */
4e7d34a6 3895 {
507bd325
L
3896 { "pshufw", { MX, EM, Ib }, PREFIX_OPCODE },
3897 { "pshufhw",{ XM, EXx, Ib }, PREFIX_OPCODE },
3898 { "pshufd", { XM, EXx, Ib }, PREFIX_OPCODE },
3899 { "pshuflw",{ XM, EXx, Ib }, PREFIX_OPCODE },
4e7d34a6
L
3900 },
3901
92fddf8e
L
3902 /* PREFIX_0F73_REG_3 */
3903 {
592d1631
L
3904 { Bad_Opcode },
3905 { Bad_Opcode },
bf890a93 3906 { "psrldq", { XS, Ib }, 0 },
92fddf8e
L
3907 },
3908
3909 /* PREFIX_0F73_REG_7 */
3910 {
592d1631
L
3911 { Bad_Opcode },
3912 { Bad_Opcode },
bf890a93 3913 { "pslldq", { XS, Ib }, 0 },
92fddf8e
L
3914 },
3915
1ceb70f8 3916 /* PREFIX_0F78 */
4e7d34a6 3917 {
bf890a93 3918 {"vmread", { Em, Gm }, 0 },
592d1631 3919 { Bad_Opcode },
bf890a93
IT
3920 {"extrq", { XS, Ib, Ib }, 0 },
3921 {"insertq", { XM, XS, Ib, Ib }, 0 },
4e7d34a6
L
3922 },
3923
1ceb70f8 3924 /* PREFIX_0F79 */
4e7d34a6 3925 {
bf890a93 3926 {"vmwrite", { Gm, Em }, 0 },
592d1631 3927 { Bad_Opcode },
bf890a93
IT
3928 {"extrq", { XM, XS }, 0 },
3929 {"insertq", { XM, XS }, 0 },
4e7d34a6
L
3930 },
3931
1ceb70f8 3932 /* PREFIX_0F7C */
ca164297 3933 {
592d1631
L
3934 { Bad_Opcode },
3935 { Bad_Opcode },
507bd325
L
3936 { "haddpd", { XM, EXx }, PREFIX_OPCODE },
3937 { "haddps", { XM, EXx }, PREFIX_OPCODE },
ca164297 3938 },
4e7d34a6 3939
1ceb70f8 3940 /* PREFIX_0F7D */
ca164297 3941 {
592d1631
L
3942 { Bad_Opcode },
3943 { Bad_Opcode },
507bd325
L
3944 { "hsubpd", { XM, EXx }, PREFIX_OPCODE },
3945 { "hsubps", { XM, EXx }, PREFIX_OPCODE },
ca164297 3946 },
4e7d34a6 3947
1ceb70f8 3948 /* PREFIX_0F7E */
ca164297 3949 {
507bd325
L
3950 { "movK", { Edq, MX }, PREFIX_OPCODE },
3951 { "movq", { XM, EXq }, PREFIX_OPCODE },
3952 { "movK", { Edq, XM }, PREFIX_OPCODE },
ca164297 3953 },
4e7d34a6 3954
1ceb70f8 3955 /* PREFIX_0F7F */
ca164297 3956 {
507bd325
L
3957 { "movq", { EMS, MX }, PREFIX_OPCODE },
3958 { "movdqu", { EXxS, XM }, PREFIX_OPCODE },
3959 { "movdqa", { EXxS, XM }, PREFIX_OPCODE },
ca164297 3960 },
4e7d34a6 3961
c7b8aa3a
L
3962 /* PREFIX_0FAE_REG_0 */
3963 {
3964 { Bad_Opcode },
bf890a93 3965 { "rdfsbase", { Ev }, 0 },
c7b8aa3a
L
3966 },
3967
3968 /* PREFIX_0FAE_REG_1 */
3969 {
3970 { Bad_Opcode },
bf890a93 3971 { "rdgsbase", { Ev }, 0 },
c7b8aa3a
L
3972 },
3973
3974 /* PREFIX_0FAE_REG_2 */
3975 {
3976 { Bad_Opcode },
bf890a93 3977 { "wrfsbase", { Ev }, 0 },
c7b8aa3a
L
3978 },
3979
3980 /* PREFIX_0FAE_REG_3 */
3981 {
3982 { Bad_Opcode },
bf890a93 3983 { "wrgsbase", { Ev }, 0 },
c7b8aa3a
L
3984 },
3985
6b40c462
L
3986 /* PREFIX_MOD_0_0FAE_REG_4 */
3987 {
3988 { "xsave", { FXSAVE }, 0 },
3989 { "ptwrite%LQ", { Edq }, 0 },
3990 },
3991
3992 /* PREFIX_MOD_3_0FAE_REG_4 */
3993 {
3994 { Bad_Opcode },
3995 { "ptwrite%LQ", { Edq }, 0 },
3996 },
3997
603555e5
L
3998 /* PREFIX_MOD_0_0FAE_REG_5 */
3999 {
4000 { "xrstor", { FXSAVE }, PREFIX_OPCODE },
2234eee6
L
4001 },
4002
4003 /* PREFIX_MOD_3_0FAE_REG_5 */
4004 {
4005 { "lfence", { Skip_MODRM }, 0 },
4006 { "incsspK", { Rdq }, PREFIX_OPCODE },
603555e5
L
4007 },
4008
de89d0a3 4009 /* PREFIX_MOD_0_0FAE_REG_6 */
c5e7287a 4010 {
603555e5
L
4011 { "xsaveopt", { FXSAVE }, PREFIX_OPCODE },
4012 { "clrssbsy", { Mq }, PREFIX_OPCODE },
4013 { "clwb", { Mb }, PREFIX_OPCODE },
c5e7287a
IT
4014 },
4015
de89d0a3
IT
4016 /* PREFIX_MOD_1_0FAE_REG_6 */
4017 {
4018 { RM_TABLE (RM_0FAE_REG_6) },
4019 { "umonitor", { Eva }, PREFIX_OPCODE },
ae1d3843
L
4020 { "tpause", { Edq }, PREFIX_OPCODE },
4021 { "umwait", { Edq }, PREFIX_OPCODE },
de89d0a3
IT
4022 },
4023
963f3586
IT
4024 /* PREFIX_0FAE_REG_7 */
4025 {
bf890a93 4026 { "clflush", { Mb }, 0 },
963f3586 4027 { Bad_Opcode },
bf890a93 4028 { "clflushopt", { Mb }, 0 },
963f3586
IT
4029 },
4030
1ceb70f8 4031 /* PREFIX_0FB8 */
ca164297 4032 {
592d1631 4033 { Bad_Opcode },
bf890a93 4034 { "popcntS", { Gv, Ev }, 0 },
ca164297 4035 },
4e7d34a6 4036
f12dc422
L
4037 /* PREFIX_0FBC */
4038 {
bf890a93
IT
4039 { "bsfS", { Gv, Ev }, 0 },
4040 { "tzcntS", { Gv, Ev }, 0 },
4041 { "bsfS", { Gv, Ev }, 0 },
f12dc422
L
4042 },
4043
1ceb70f8 4044 /* PREFIX_0FBD */
050dfa73 4045 {
bf890a93
IT
4046 { "bsrS", { Gv, Ev }, 0 },
4047 { "lzcntS", { Gv, Ev }, 0 },
4048 { "bsrS", { Gv, Ev }, 0 },
050dfa73
MM
4049 },
4050
1ceb70f8 4051 /* PREFIX_0FC2 */
050dfa73 4052 {
507bd325
L
4053 { "cmpps", { XM, EXx, CMP }, PREFIX_OPCODE },
4054 { "cmpss", { XM, EXd, CMP }, PREFIX_OPCODE },
4055 { "cmppd", { XM, EXx, CMP }, PREFIX_OPCODE },
4056 { "cmpsd", { XM, EXq, CMP }, PREFIX_OPCODE },
050dfa73 4057 },
246c51aa 4058
a8484f96 4059 /* PREFIX_MOD_0_0FC3 */
4ee52178 4060 {
e1a1babd 4061 { "movntiS", { Edq, Gdq }, PREFIX_OPCODE },
4ee52178
L
4062 },
4063
f24bcbaa 4064 /* PREFIX_MOD_0_0FC7_REG_6 */
92fddf8e 4065 {
bf890a93
IT
4066 { "vmptrld",{ Mq }, 0 },
4067 { "vmxon", { Mq }, 0 },
4068 { "vmclear",{ Mq }, 0 },
92fddf8e
L
4069 },
4070
f24bcbaa
L
4071 /* PREFIX_MOD_3_0FC7_REG_6 */
4072 {
4073 { "rdrand", { Ev }, 0 },
4074 { Bad_Opcode },
4075 { "rdrand", { Ev }, 0 }
4076 },
4077
4078 /* PREFIX_MOD_3_0FC7_REG_7 */
4079 {
4080 { "rdseed", { Ev }, 0 },
8bc52696 4081 { "rdpid", { Em }, 0 },
f24bcbaa
L
4082 { "rdseed", { Ev }, 0 },
4083 },
4084
1ceb70f8 4085 /* PREFIX_0FD0 */
050dfa73 4086 {
592d1631
L
4087 { Bad_Opcode },
4088 { Bad_Opcode },
bf890a93
IT
4089 { "addsubpd", { XM, EXx }, 0 },
4090 { "addsubps", { XM, EXx }, 0 },
246c51aa 4091 },
050dfa73 4092
1ceb70f8 4093 /* PREFIX_0FD6 */
050dfa73 4094 {
592d1631 4095 { Bad_Opcode },
bf890a93
IT
4096 { "movq2dq",{ XM, MS }, 0 },
4097 { "movq", { EXqS, XM }, 0 },
4098 { "movdq2q",{ MX, XS }, 0 },
050dfa73
MM
4099 },
4100
1ceb70f8 4101 /* PREFIX_0FE6 */
7918206c 4102 {
592d1631 4103 { Bad_Opcode },
507bd325
L
4104 { "cvtdq2pd", { XM, EXq }, PREFIX_OPCODE },
4105 { "cvttpd2dq", { XM, EXx }, PREFIX_OPCODE },
4106 { "cvtpd2dq", { XM, EXx }, PREFIX_OPCODE },
7918206c 4107 },
8b38ad71 4108
1ceb70f8 4109 /* PREFIX_0FE7 */
8b38ad71 4110 {
507bd325 4111 { "movntq", { Mq, MX }, PREFIX_OPCODE },
592d1631 4112 { Bad_Opcode },
75c135a8 4113 { MOD_TABLE (MOD_0FE7_PREFIX_2) },
4e7d34a6
L
4114 },
4115
1ceb70f8 4116 /* PREFIX_0FF0 */
4e7d34a6 4117 {
592d1631
L
4118 { Bad_Opcode },
4119 { Bad_Opcode },
4120 { Bad_Opcode },
1ceb70f8 4121 { MOD_TABLE (MOD_0FF0_PREFIX_3) },
4e7d34a6
L
4122 },
4123
1ceb70f8 4124 /* PREFIX_0FF7 */
4e7d34a6 4125 {
507bd325 4126 { "maskmovq", { MX, MS }, PREFIX_OPCODE },
592d1631 4127 { Bad_Opcode },
507bd325 4128 { "maskmovdqu", { XM, XS }, PREFIX_OPCODE },
8b38ad71 4129 },
42903f7f 4130
1ceb70f8 4131 /* PREFIX_0F3810 */
42903f7f 4132 {
592d1631
L
4133 { Bad_Opcode },
4134 { Bad_Opcode },
507bd325 4135 { "pblendvb", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4136 },
4137
1ceb70f8 4138 /* PREFIX_0F3814 */
42903f7f 4139 {
592d1631
L
4140 { Bad_Opcode },
4141 { Bad_Opcode },
507bd325 4142 { "blendvps", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4143 },
4144
1ceb70f8 4145 /* PREFIX_0F3815 */
42903f7f 4146 {
592d1631
L
4147 { Bad_Opcode },
4148 { Bad_Opcode },
507bd325 4149 { "blendvpd", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4150 },
4151
1ceb70f8 4152 /* PREFIX_0F3817 */
42903f7f 4153 {
592d1631
L
4154 { Bad_Opcode },
4155 { Bad_Opcode },
507bd325 4156 { "ptest", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4157 },
4158
1ceb70f8 4159 /* PREFIX_0F3820 */
42903f7f 4160 {
592d1631
L
4161 { Bad_Opcode },
4162 { Bad_Opcode },
507bd325 4163 { "pmovsxbw", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4164 },
4165
1ceb70f8 4166 /* PREFIX_0F3821 */
42903f7f 4167 {
592d1631
L
4168 { Bad_Opcode },
4169 { Bad_Opcode },
507bd325 4170 { "pmovsxbd", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4171 },
4172
1ceb70f8 4173 /* PREFIX_0F3822 */
42903f7f 4174 {
592d1631
L
4175 { Bad_Opcode },
4176 { Bad_Opcode },
507bd325 4177 { "pmovsxbq", { XM, EXw }, PREFIX_OPCODE },
42903f7f
L
4178 },
4179
1ceb70f8 4180 /* PREFIX_0F3823 */
42903f7f 4181 {
592d1631
L
4182 { Bad_Opcode },
4183 { Bad_Opcode },
507bd325 4184 { "pmovsxwd", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4185 },
4186
1ceb70f8 4187 /* PREFIX_0F3824 */
42903f7f 4188 {
592d1631
L
4189 { Bad_Opcode },
4190 { Bad_Opcode },
507bd325 4191 { "pmovsxwq", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4192 },
4193
1ceb70f8 4194 /* PREFIX_0F3825 */
42903f7f 4195 {
592d1631
L
4196 { Bad_Opcode },
4197 { Bad_Opcode },
507bd325 4198 { "pmovsxdq", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4199 },
4200
1ceb70f8 4201 /* PREFIX_0F3828 */
42903f7f 4202 {
592d1631
L
4203 { Bad_Opcode },
4204 { Bad_Opcode },
507bd325 4205 { "pmuldq", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4206 },
4207
1ceb70f8 4208 /* PREFIX_0F3829 */
42903f7f 4209 {
592d1631
L
4210 { Bad_Opcode },
4211 { Bad_Opcode },
507bd325 4212 { "pcmpeqq", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4213 },
4214
1ceb70f8 4215 /* PREFIX_0F382A */
42903f7f 4216 {
592d1631
L
4217 { Bad_Opcode },
4218 { Bad_Opcode },
75c135a8 4219 { MOD_TABLE (MOD_0F382A_PREFIX_2) },
42903f7f
L
4220 },
4221
1ceb70f8 4222 /* PREFIX_0F382B */
42903f7f 4223 {
592d1631
L
4224 { Bad_Opcode },
4225 { Bad_Opcode },
507bd325 4226 { "packusdw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4227 },
4228
1ceb70f8 4229 /* PREFIX_0F3830 */
42903f7f 4230 {
592d1631
L
4231 { Bad_Opcode },
4232 { Bad_Opcode },
507bd325 4233 { "pmovzxbw", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4234 },
4235
1ceb70f8 4236 /* PREFIX_0F3831 */
42903f7f 4237 {
592d1631
L
4238 { Bad_Opcode },
4239 { Bad_Opcode },
507bd325 4240 { "pmovzxbd", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4241 },
4242
1ceb70f8 4243 /* PREFIX_0F3832 */
42903f7f 4244 {
592d1631
L
4245 { Bad_Opcode },
4246 { Bad_Opcode },
507bd325 4247 { "pmovzxbq", { XM, EXw }, PREFIX_OPCODE },
42903f7f
L
4248 },
4249
1ceb70f8 4250 /* PREFIX_0F3833 */
42903f7f 4251 {
592d1631
L
4252 { Bad_Opcode },
4253 { Bad_Opcode },
507bd325 4254 { "pmovzxwd", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4255 },
4256
1ceb70f8 4257 /* PREFIX_0F3834 */
42903f7f 4258 {
592d1631
L
4259 { Bad_Opcode },
4260 { Bad_Opcode },
507bd325 4261 { "pmovzxwq", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4262 },
4263
1ceb70f8 4264 /* PREFIX_0F3835 */
42903f7f 4265 {
592d1631
L
4266 { Bad_Opcode },
4267 { Bad_Opcode },
507bd325 4268 { "pmovzxdq", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4269 },
4270
1ceb70f8 4271 /* PREFIX_0F3837 */
4e7d34a6 4272 {
592d1631
L
4273 { Bad_Opcode },
4274 { Bad_Opcode },
507bd325 4275 { "pcmpgtq", { XM, EXx }, PREFIX_OPCODE },
4e7d34a6
L
4276 },
4277
1ceb70f8 4278 /* PREFIX_0F3838 */
42903f7f 4279 {
592d1631
L
4280 { Bad_Opcode },
4281 { Bad_Opcode },
507bd325 4282 { "pminsb", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4283 },
4284
1ceb70f8 4285 /* PREFIX_0F3839 */
42903f7f 4286 {
592d1631
L
4287 { Bad_Opcode },
4288 { Bad_Opcode },
507bd325 4289 { "pminsd", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4290 },
4291
1ceb70f8 4292 /* PREFIX_0F383A */
42903f7f 4293 {
592d1631
L
4294 { Bad_Opcode },
4295 { Bad_Opcode },
507bd325 4296 { "pminuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4297 },
4298
1ceb70f8 4299 /* PREFIX_0F383B */
42903f7f 4300 {
592d1631
L
4301 { Bad_Opcode },
4302 { Bad_Opcode },
507bd325 4303 { "pminud", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4304 },
4305
1ceb70f8 4306 /* PREFIX_0F383C */
42903f7f 4307 {
592d1631
L
4308 { Bad_Opcode },
4309 { Bad_Opcode },
507bd325 4310 { "pmaxsb", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4311 },
4312
1ceb70f8 4313 /* PREFIX_0F383D */
42903f7f 4314 {
592d1631
L
4315 { Bad_Opcode },
4316 { Bad_Opcode },
507bd325 4317 { "pmaxsd", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4318 },
4319
1ceb70f8 4320 /* PREFIX_0F383E */
42903f7f 4321 {
592d1631
L
4322 { Bad_Opcode },
4323 { Bad_Opcode },
507bd325 4324 { "pmaxuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4325 },
4326
1ceb70f8 4327 /* PREFIX_0F383F */
42903f7f 4328 {
592d1631
L
4329 { Bad_Opcode },
4330 { Bad_Opcode },
507bd325 4331 { "pmaxud", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4332 },
4333
1ceb70f8 4334 /* PREFIX_0F3840 */
42903f7f 4335 {
592d1631
L
4336 { Bad_Opcode },
4337 { Bad_Opcode },
507bd325 4338 { "pmulld", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4339 },
4340
1ceb70f8 4341 /* PREFIX_0F3841 */
42903f7f 4342 {
592d1631
L
4343 { Bad_Opcode },
4344 { Bad_Opcode },
507bd325 4345 { "phminposuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4346 },
4347
f1f8f695
L
4348 /* PREFIX_0F3880 */
4349 {
592d1631
L
4350 { Bad_Opcode },
4351 { Bad_Opcode },
507bd325 4352 { "invept", { Gm, Mo }, PREFIX_OPCODE },
f1f8f695
L
4353 },
4354
4355 /* PREFIX_0F3881 */
4356 {
592d1631
L
4357 { Bad_Opcode },
4358 { Bad_Opcode },
507bd325 4359 { "invvpid", { Gm, Mo }, PREFIX_OPCODE },
f1f8f695
L
4360 },
4361
6c30d220
L
4362 /* PREFIX_0F3882 */
4363 {
4364 { Bad_Opcode },
4365 { Bad_Opcode },
507bd325 4366 { "invpcid", { Gm, M }, PREFIX_OPCODE },
6c30d220
L
4367 },
4368
a0046408
L
4369 /* PREFIX_0F38C8 */
4370 {
507bd325 4371 { "sha1nexte", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4372 },
4373
4374 /* PREFIX_0F38C9 */
4375 {
507bd325 4376 { "sha1msg1", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4377 },
4378
4379 /* PREFIX_0F38CA */
4380 {
507bd325 4381 { "sha1msg2", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4382 },
4383
4384 /* PREFIX_0F38CB */
4385 {
507bd325 4386 { "sha256rnds2", { XM, EXxmm, XMM0 }, PREFIX_OPCODE },
a0046408
L
4387 },
4388
4389 /* PREFIX_0F38CC */
4390 {
507bd325 4391 { "sha256msg1", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4392 },
4393
4394 /* PREFIX_0F38CD */
4395 {
507bd325 4396 { "sha256msg2", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4397 },
4398
48521003
IT
4399 /* PREFIX_0F38CF */
4400 {
4401 { Bad_Opcode },
4402 { Bad_Opcode },
4403 { "gf2p8mulb", { XM, EXxmm }, PREFIX_OPCODE },
4404 },
4405
c0f3af97
L
4406 /* PREFIX_0F38DB */
4407 {
592d1631
L
4408 { Bad_Opcode },
4409 { Bad_Opcode },
507bd325 4410 { "aesimc", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4411 },
4412
4413 /* PREFIX_0F38DC */
4414 {
592d1631
L
4415 { Bad_Opcode },
4416 { Bad_Opcode },
507bd325 4417 { "aesenc", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4418 },
4419
4420 /* PREFIX_0F38DD */
4421 {
592d1631
L
4422 { Bad_Opcode },
4423 { Bad_Opcode },
507bd325 4424 { "aesenclast", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4425 },
4426
4427 /* PREFIX_0F38DE */
4428 {
592d1631
L
4429 { Bad_Opcode },
4430 { Bad_Opcode },
507bd325 4431 { "aesdec", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4432 },
4433
4434 /* PREFIX_0F38DF */
4435 {
592d1631
L
4436 { Bad_Opcode },
4437 { Bad_Opcode },
507bd325 4438 { "aesdeclast", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4439 },
4440
1ceb70f8 4441 /* PREFIX_0F38F0 */
4e7d34a6 4442 {
507bd325 4443 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } }, PREFIX_OPCODE },
592d1631 4444 { Bad_Opcode },
507bd325
L
4445 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } }, PREFIX_OPCODE },
4446 { "crc32", { Gdq, { CRC32_Fixup, b_mode } }, PREFIX_OPCODE },
4e7d34a6
L
4447 },
4448
1ceb70f8 4449 /* PREFIX_0F38F1 */
4e7d34a6 4450 {
507bd325 4451 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv }, PREFIX_OPCODE },
592d1631 4452 { Bad_Opcode },
507bd325
L
4453 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv }, PREFIX_OPCODE },
4454 { "crc32", { Gdq, { CRC32_Fixup, v_mode } }, PREFIX_OPCODE },
4e7d34a6
L
4455 },
4456
603555e5 4457 /* PREFIX_0F38F5 */
e2e1fcde
L
4458 {
4459 { Bad_Opcode },
603555e5
L
4460 { Bad_Opcode },
4461 { MOD_TABLE (MOD_0F38F5_PREFIX_2) },
4462 },
4463
4464 /* PREFIX_0F38F6 */
4465 {
4466 { MOD_TABLE (MOD_0F38F6_PREFIX_0) },
507bd325
L
4467 { "adoxS", { Gdq, Edq}, PREFIX_OPCODE },
4468 { "adcxS", { Gdq, Edq}, PREFIX_OPCODE },
e2e1fcde
L
4469 { Bad_Opcode },
4470 },
4471
c0a30a9f
L
4472 /* PREFIX_0F38F8 */
4473 {
4474 { Bad_Opcode },
5d79adc4 4475 { MOD_TABLE (MOD_0F38F8_PREFIX_1) },
c0a30a9f 4476 { MOD_TABLE (MOD_0F38F8_PREFIX_2) },
5d79adc4 4477 { MOD_TABLE (MOD_0F38F8_PREFIX_3) },
c0a30a9f
L
4478 },
4479
4480 /* PREFIX_0F38F9 */
4481 {
4482 { MOD_TABLE (MOD_0F38F9_PREFIX_0) },
4483 },
4484
1ceb70f8 4485 /* PREFIX_0F3A08 */
42903f7f 4486 {
592d1631
L
4487 { Bad_Opcode },
4488 { Bad_Opcode },
507bd325 4489 { "roundps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4490 },
4491
1ceb70f8 4492 /* PREFIX_0F3A09 */
42903f7f 4493 {
592d1631
L
4494 { Bad_Opcode },
4495 { Bad_Opcode },
507bd325 4496 { "roundpd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4497 },
4498
1ceb70f8 4499 /* PREFIX_0F3A0A */
42903f7f 4500 {
592d1631
L
4501 { Bad_Opcode },
4502 { Bad_Opcode },
507bd325 4503 { "roundss", { XM, EXd, Ib }, PREFIX_OPCODE },
42903f7f
L
4504 },
4505
1ceb70f8 4506 /* PREFIX_0F3A0B */
42903f7f 4507 {
592d1631
L
4508 { Bad_Opcode },
4509 { Bad_Opcode },
507bd325 4510 { "roundsd", { XM, EXq, Ib }, PREFIX_OPCODE },
42903f7f
L
4511 },
4512
1ceb70f8 4513 /* PREFIX_0F3A0C */
42903f7f 4514 {
592d1631
L
4515 { Bad_Opcode },
4516 { Bad_Opcode },
507bd325 4517 { "blendps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4518 },
4519
1ceb70f8 4520 /* PREFIX_0F3A0D */
42903f7f 4521 {
592d1631
L
4522 { Bad_Opcode },
4523 { Bad_Opcode },
507bd325 4524 { "blendpd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4525 },
4526
1ceb70f8 4527 /* PREFIX_0F3A0E */
42903f7f 4528 {
592d1631
L
4529 { Bad_Opcode },
4530 { Bad_Opcode },
507bd325 4531 { "pblendw", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4532 },
4533
1ceb70f8 4534 /* PREFIX_0F3A14 */
42903f7f 4535 {
592d1631
L
4536 { Bad_Opcode },
4537 { Bad_Opcode },
507bd325 4538 { "pextrb", { Edqb, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4539 },
4540
1ceb70f8 4541 /* PREFIX_0F3A15 */
42903f7f 4542 {
592d1631
L
4543 { Bad_Opcode },
4544 { Bad_Opcode },
507bd325 4545 { "pextrw", { Edqw, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4546 },
4547
1ceb70f8 4548 /* PREFIX_0F3A16 */
42903f7f 4549 {
592d1631
L
4550 { Bad_Opcode },
4551 { Bad_Opcode },
507bd325 4552 { "pextrK", { Edq, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4553 },
4554
1ceb70f8 4555 /* PREFIX_0F3A17 */
42903f7f 4556 {
592d1631
L
4557 { Bad_Opcode },
4558 { Bad_Opcode },
507bd325 4559 { "extractps", { Edqd, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4560 },
4561
1ceb70f8 4562 /* PREFIX_0F3A20 */
42903f7f 4563 {
592d1631
L
4564 { Bad_Opcode },
4565 { Bad_Opcode },
507bd325 4566 { "pinsrb", { XM, Edqb, Ib }, PREFIX_OPCODE },
42903f7f
L
4567 },
4568
1ceb70f8 4569 /* PREFIX_0F3A21 */
42903f7f 4570 {
592d1631
L
4571 { Bad_Opcode },
4572 { Bad_Opcode },
507bd325 4573 { "insertps", { XM, EXd, Ib }, PREFIX_OPCODE },
42903f7f
L
4574 },
4575
1ceb70f8 4576 /* PREFIX_0F3A22 */
42903f7f 4577 {
592d1631
L
4578 { Bad_Opcode },
4579 { Bad_Opcode },
507bd325 4580 { "pinsrK", { XM, Edq, Ib }, PREFIX_OPCODE },
42903f7f
L
4581 },
4582
1ceb70f8 4583 /* PREFIX_0F3A40 */
42903f7f 4584 {
592d1631
L
4585 { Bad_Opcode },
4586 { Bad_Opcode },
507bd325 4587 { "dpps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4588 },
4589
1ceb70f8 4590 /* PREFIX_0F3A41 */
42903f7f 4591 {
592d1631
L
4592 { Bad_Opcode },
4593 { Bad_Opcode },
507bd325 4594 { "dppd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4595 },
4596
1ceb70f8 4597 /* PREFIX_0F3A42 */
42903f7f 4598 {
592d1631
L
4599 { Bad_Opcode },
4600 { Bad_Opcode },
507bd325 4601 { "mpsadbw", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f 4602 },
381d071f 4603
c0f3af97
L
4604 /* PREFIX_0F3A44 */
4605 {
592d1631
L
4606 { Bad_Opcode },
4607 { Bad_Opcode },
507bd325 4608 { "pclmulqdq", { XM, EXx, PCLMUL }, PREFIX_OPCODE },
c0f3af97
L
4609 },
4610
1ceb70f8 4611 /* PREFIX_0F3A60 */
381d071f 4612 {
592d1631
L
4613 { Bad_Opcode },
4614 { Bad_Opcode },
15c7c1d8 4615 { "pcmpestrm", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, PREFIX_OPCODE },
381d071f
L
4616 },
4617
1ceb70f8 4618 /* PREFIX_0F3A61 */
381d071f 4619 {
592d1631
L
4620 { Bad_Opcode },
4621 { Bad_Opcode },
15c7c1d8 4622 { "pcmpestri", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, PREFIX_OPCODE },
381d071f
L
4623 },
4624
1ceb70f8 4625 /* PREFIX_0F3A62 */
381d071f 4626 {
592d1631
L
4627 { Bad_Opcode },
4628 { Bad_Opcode },
507bd325 4629 { "pcmpistrm", { XM, EXx, Ib }, PREFIX_OPCODE },
381d071f
L
4630 },
4631
1ceb70f8 4632 /* PREFIX_0F3A63 */
381d071f 4633 {
592d1631
L
4634 { Bad_Opcode },
4635 { Bad_Opcode },
507bd325 4636 { "pcmpistri", { XM, EXx, Ib }, PREFIX_OPCODE },
381d071f 4637 },
09a2c6cf 4638
a0046408
L
4639 /* PREFIX_0F3ACC */
4640 {
507bd325 4641 { "sha1rnds4", { XM, EXxmm, Ib }, PREFIX_OPCODE },
a0046408
L
4642 },
4643
48521003
IT
4644 /* PREFIX_0F3ACE */
4645 {
4646 { Bad_Opcode },
4647 { Bad_Opcode },
4648 { "gf2p8affineqb", { XM, EXxmm, Ib }, PREFIX_OPCODE },
4649 },
4650
4651 /* PREFIX_0F3ACF */
4652 {
4653 { Bad_Opcode },
4654 { Bad_Opcode },
4655 { "gf2p8affineinvqb", { XM, EXxmm, Ib }, PREFIX_OPCODE },
4656 },
4657
c0f3af97 4658 /* PREFIX_0F3ADF */
09a2c6cf 4659 {
592d1631
L
4660 { Bad_Opcode },
4661 { Bad_Opcode },
507bd325 4662 { "aeskeygenassist", { XM, EXx, Ib }, PREFIX_OPCODE },
09a2c6cf
L
4663 },
4664
592a252b 4665 /* PREFIX_VEX_0F10 */
09a2c6cf 4666 {
ec6f095a
L
4667 { "vmovups", { XM, EXx }, 0 },
4668 { "vmovss", { XMVexScalar, VexScalar, EXdScalar }, 0 },
4669 { "vmovupd", { XM, EXx }, 0 },
4670 { "vmovsd", { XMVexScalar, VexScalar, EXqScalar }, 0 },
09a2c6cf
L
4671 },
4672
592a252b 4673 /* PREFIX_VEX_0F11 */
09a2c6cf 4674 {
ec6f095a
L
4675 { "vmovups", { EXxS, XM }, 0 },
4676 { "vmovss", { EXdVexScalarS, VexScalar, XMScalar }, 0 },
4677 { "vmovupd", { EXxS, XM }, 0 },
4678 { "vmovsd", { EXqVexScalarS, VexScalar, XMScalar }, 0 },
09a2c6cf
L
4679 },
4680
592a252b 4681 /* PREFIX_VEX_0F12 */
09a2c6cf 4682 {
592a252b 4683 { MOD_TABLE (MOD_VEX_0F12_PREFIX_0) },
ec6f095a 4684 { "vmovsldup", { XM, EXx }, 0 },
592a252b 4685 { VEX_LEN_TABLE (VEX_LEN_0F12_P_2) },
ec6f095a 4686 { "vmovddup", { XM, EXymmq }, 0 },
09a2c6cf
L
4687 },
4688
592a252b 4689 /* PREFIX_VEX_0F16 */
09a2c6cf 4690 {
592a252b 4691 { MOD_TABLE (MOD_VEX_0F16_PREFIX_0) },
ec6f095a 4692 { "vmovshdup", { XM, EXx }, 0 },
592a252b 4693 { VEX_LEN_TABLE (VEX_LEN_0F16_P_2) },
5f754f58 4694 },
7c52e0e8 4695
592a252b 4696 /* PREFIX_VEX_0F2A */
5f754f58 4697 {
592d1631 4698 { Bad_Opcode },
592a252b 4699 { VEX_LEN_TABLE (VEX_LEN_0F2A_P_1) },
592d1631 4700 { Bad_Opcode },
592a252b 4701 { VEX_LEN_TABLE (VEX_LEN_0F2A_P_3) },
5f754f58 4702 },
7c52e0e8 4703
592a252b 4704 /* PREFIX_VEX_0F2C */
5f754f58 4705 {
592d1631 4706 { Bad_Opcode },
592a252b 4707 { VEX_LEN_TABLE (VEX_LEN_0F2C_P_1) },
592d1631 4708 { Bad_Opcode },
592a252b 4709 { VEX_LEN_TABLE (VEX_LEN_0F2C_P_3) },
5f754f58 4710 },
7c52e0e8 4711
592a252b 4712 /* PREFIX_VEX_0F2D */
7c52e0e8 4713 {
592d1631 4714 { Bad_Opcode },
592a252b 4715 { VEX_LEN_TABLE (VEX_LEN_0F2D_P_1) },
592d1631 4716 { Bad_Opcode },
592a252b 4717 { VEX_LEN_TABLE (VEX_LEN_0F2D_P_3) },
7c52e0e8
L
4718 },
4719
592a252b 4720 /* PREFIX_VEX_0F2E */
7c52e0e8 4721 {
ec6f095a 4722 { "vucomiss", { XMScalar, EXdScalar }, 0 },
592d1631 4723 { Bad_Opcode },
ec6f095a 4724 { "vucomisd", { XMScalar, EXqScalar }, 0 },
7c52e0e8
L
4725 },
4726
592a252b 4727 /* PREFIX_VEX_0F2F */
7c52e0e8 4728 {
ec6f095a 4729 { "vcomiss", { XMScalar, EXdScalar }, 0 },
592d1631 4730 { Bad_Opcode },
ec6f095a 4731 { "vcomisd", { XMScalar, EXqScalar }, 0 },
7c52e0e8
L
4732 },
4733
43234a1e
L
4734 /* PREFIX_VEX_0F41 */
4735 {
4736 { VEX_LEN_TABLE (VEX_LEN_0F41_P_0) },
1ba585e8
IT
4737 { Bad_Opcode },
4738 { VEX_LEN_TABLE (VEX_LEN_0F41_P_2) },
43234a1e
L
4739 },
4740
4741 /* PREFIX_VEX_0F42 */
4742 {
4743 { VEX_LEN_TABLE (VEX_LEN_0F42_P_0) },
1ba585e8
IT
4744 { Bad_Opcode },
4745 { VEX_LEN_TABLE (VEX_LEN_0F42_P_2) },
43234a1e
L
4746 },
4747
4748 /* PREFIX_VEX_0F44 */
4749 {
4750 { VEX_LEN_TABLE (VEX_LEN_0F44_P_0) },
1ba585e8
IT
4751 { Bad_Opcode },
4752 { VEX_LEN_TABLE (VEX_LEN_0F44_P_2) },
43234a1e
L
4753 },
4754
4755 /* PREFIX_VEX_0F45 */
4756 {
4757 { VEX_LEN_TABLE (VEX_LEN_0F45_P_0) },
1ba585e8
IT
4758 { Bad_Opcode },
4759 { VEX_LEN_TABLE (VEX_LEN_0F45_P_2) },
43234a1e
L
4760 },
4761
4762 /* PREFIX_VEX_0F46 */
4763 {
4764 { VEX_LEN_TABLE (VEX_LEN_0F46_P_0) },
1ba585e8
IT
4765 { Bad_Opcode },
4766 { VEX_LEN_TABLE (VEX_LEN_0F46_P_2) },
43234a1e
L
4767 },
4768
4769 /* PREFIX_VEX_0F47 */
4770 {
4771 { VEX_LEN_TABLE (VEX_LEN_0F47_P_0) },
1ba585e8
IT
4772 { Bad_Opcode },
4773 { VEX_LEN_TABLE (VEX_LEN_0F47_P_2) },
43234a1e
L
4774 },
4775
1ba585e8 4776 /* PREFIX_VEX_0F4A */
43234a1e 4777 {
1ba585e8 4778 { VEX_LEN_TABLE (VEX_LEN_0F4A_P_0) },
43234a1e 4779 { Bad_Opcode },
1ba585e8
IT
4780 { VEX_LEN_TABLE (VEX_LEN_0F4A_P_2) },
4781 },
4782
4783 /* PREFIX_VEX_0F4B */
4784 {
4785 { VEX_LEN_TABLE (VEX_LEN_0F4B_P_0) },
43234a1e
L
4786 { Bad_Opcode },
4787 { VEX_LEN_TABLE (VEX_LEN_0F4B_P_2) },
4788 },
4789
592a252b 4790 /* PREFIX_VEX_0F51 */
7c52e0e8 4791 {
ec6f095a
L
4792 { "vsqrtps", { XM, EXx }, 0 },
4793 { "vsqrtss", { XMScalar, VexScalar, EXdScalar }, 0 },
4794 { "vsqrtpd", { XM, EXx }, 0 },
4795 { "vsqrtsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4796 },
4797
592a252b 4798 /* PREFIX_VEX_0F52 */
7c52e0e8 4799 {
ec6f095a
L
4800 { "vrsqrtps", { XM, EXx }, 0 },
4801 { "vrsqrtss", { XMScalar, VexScalar, EXdScalar }, 0 },
7c52e0e8
L
4802 },
4803
592a252b 4804 /* PREFIX_VEX_0F53 */
7c52e0e8 4805 {
ec6f095a
L
4806 { "vrcpps", { XM, EXx }, 0 },
4807 { "vrcpss", { XMScalar, VexScalar, EXdScalar }, 0 },
7c52e0e8
L
4808 },
4809
592a252b 4810 /* PREFIX_VEX_0F58 */
7c52e0e8 4811 {
ec6f095a
L
4812 { "vaddps", { XM, Vex, EXx }, 0 },
4813 { "vaddss", { XMScalar, VexScalar, EXdScalar }, 0 },
4814 { "vaddpd", { XM, Vex, EXx }, 0 },
4815 { "vaddsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4816 },
4817
592a252b 4818 /* PREFIX_VEX_0F59 */
7c52e0e8 4819 {
ec6f095a
L
4820 { "vmulps", { XM, Vex, EXx }, 0 },
4821 { "vmulss", { XMScalar, VexScalar, EXdScalar }, 0 },
4822 { "vmulpd", { XM, Vex, EXx }, 0 },
4823 { "vmulsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4824 },
4825
592a252b 4826 /* PREFIX_VEX_0F5A */
7c52e0e8 4827 {
ec6f095a
L
4828 { "vcvtps2pd", { XM, EXxmmq }, 0 },
4829 { "vcvtss2sd", { XMScalar, VexScalar, EXdScalar }, 0 },
4830 { "vcvtpd2ps%XY",{ XMM, EXx }, 0 },
4831 { "vcvtsd2ss", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4832 },
4833
592a252b 4834 /* PREFIX_VEX_0F5B */
7c52e0e8 4835 {
ec6f095a
L
4836 { "vcvtdq2ps", { XM, EXx }, 0 },
4837 { "vcvttps2dq", { XM, EXx }, 0 },
4838 { "vcvtps2dq", { XM, EXx }, 0 },
7c52e0e8
L
4839 },
4840
592a252b 4841 /* PREFIX_VEX_0F5C */
7c52e0e8 4842 {
ec6f095a
L
4843 { "vsubps", { XM, Vex, EXx }, 0 },
4844 { "vsubss", { XMScalar, VexScalar, EXdScalar }, 0 },
4845 { "vsubpd", { XM, Vex, EXx }, 0 },
4846 { "vsubsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4847 },
4848
592a252b 4849 /* PREFIX_VEX_0F5D */
7c52e0e8 4850 {
ec6f095a
L
4851 { "vminps", { XM, Vex, EXx }, 0 },
4852 { "vminss", { XMScalar, VexScalar, EXdScalar }, 0 },
4853 { "vminpd", { XM, Vex, EXx }, 0 },
4854 { "vminsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4855 },
4856
592a252b 4857 /* PREFIX_VEX_0F5E */
7c52e0e8 4858 {
ec6f095a
L
4859 { "vdivps", { XM, Vex, EXx }, 0 },
4860 { "vdivss", { XMScalar, VexScalar, EXdScalar }, 0 },
4861 { "vdivpd", { XM, Vex, EXx }, 0 },
4862 { "vdivsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4863 },
4864
592a252b 4865 /* PREFIX_VEX_0F5F */
7c52e0e8 4866 {
ec6f095a
L
4867 { "vmaxps", { XM, Vex, EXx }, 0 },
4868 { "vmaxss", { XMScalar, VexScalar, EXdScalar }, 0 },
4869 { "vmaxpd", { XM, Vex, EXx }, 0 },
4870 { "vmaxsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4871 },
4872
592a252b 4873 /* PREFIX_VEX_0F60 */
7c52e0e8 4874 {
592d1631
L
4875 { Bad_Opcode },
4876 { Bad_Opcode },
ec6f095a 4877 { "vpunpcklbw", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4878 },
4879
592a252b 4880 /* PREFIX_VEX_0F61 */
7c52e0e8 4881 {
592d1631
L
4882 { Bad_Opcode },
4883 { Bad_Opcode },
ec6f095a 4884 { "vpunpcklwd", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4885 },
4886
592a252b 4887 /* PREFIX_VEX_0F62 */
7c52e0e8 4888 {
592d1631
L
4889 { Bad_Opcode },
4890 { Bad_Opcode },
ec6f095a 4891 { "vpunpckldq", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4892 },
4893
592a252b 4894 /* PREFIX_VEX_0F63 */
7c52e0e8 4895 {
592d1631
L
4896 { Bad_Opcode },
4897 { Bad_Opcode },
ec6f095a 4898 { "vpacksswb", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4899 },
4900
592a252b 4901 /* PREFIX_VEX_0F64 */
7c52e0e8 4902 {
592d1631
L
4903 { Bad_Opcode },
4904 { Bad_Opcode },
ec6f095a 4905 { "vpcmpgtb", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4906 },
4907
592a252b 4908 /* PREFIX_VEX_0F65 */
7c52e0e8 4909 {
592d1631
L
4910 { Bad_Opcode },
4911 { Bad_Opcode },
ec6f095a 4912 { "vpcmpgtw", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4913 },
4914
592a252b 4915 /* PREFIX_VEX_0F66 */
7c52e0e8 4916 {
592d1631
L
4917 { Bad_Opcode },
4918 { Bad_Opcode },
ec6f095a 4919 { "vpcmpgtd", { XM, Vex, EXx }, 0 },
7c52e0e8 4920 },
6439fc28 4921
592a252b 4922 /* PREFIX_VEX_0F67 */
331d2d0d 4923 {
592d1631
L
4924 { Bad_Opcode },
4925 { Bad_Opcode },
ec6f095a 4926 { "vpackuswb", { XM, Vex, EXx }, 0 },
c0f3af97
L
4927 },
4928
592a252b 4929 /* PREFIX_VEX_0F68 */
c0f3af97 4930 {
592d1631
L
4931 { Bad_Opcode },
4932 { Bad_Opcode },
ec6f095a 4933 { "vpunpckhbw", { XM, Vex, EXx }, 0 },
c0f3af97
L
4934 },
4935
592a252b 4936 /* PREFIX_VEX_0F69 */
c0f3af97 4937 {
592d1631
L
4938 { Bad_Opcode },
4939 { Bad_Opcode },
ec6f095a 4940 { "vpunpckhwd", { XM, Vex, EXx }, 0 },
c0f3af97
L
4941 },
4942
592a252b 4943 /* PREFIX_VEX_0F6A */
c0f3af97 4944 {
592d1631
L
4945 { Bad_Opcode },
4946 { Bad_Opcode },
ec6f095a 4947 { "vpunpckhdq", { XM, Vex, EXx }, 0 },
c0f3af97
L
4948 },
4949
592a252b 4950 /* PREFIX_VEX_0F6B */
c0f3af97 4951 {
592d1631
L
4952 { Bad_Opcode },
4953 { Bad_Opcode },
ec6f095a 4954 { "vpackssdw", { XM, Vex, EXx }, 0 },
c0f3af97
L
4955 },
4956
592a252b 4957 /* PREFIX_VEX_0F6C */
c0f3af97 4958 {
592d1631
L
4959 { Bad_Opcode },
4960 { Bad_Opcode },
ec6f095a 4961 { "vpunpcklqdq", { XM, Vex, EXx }, 0 },
c0f3af97
L
4962 },
4963
592a252b 4964 /* PREFIX_VEX_0F6D */
c0f3af97 4965 {
592d1631
L
4966 { Bad_Opcode },
4967 { Bad_Opcode },
ec6f095a 4968 { "vpunpckhqdq", { XM, Vex, EXx }, 0 },
c0f3af97
L
4969 },
4970
592a252b 4971 /* PREFIX_VEX_0F6E */
c0f3af97 4972 {
592d1631
L
4973 { Bad_Opcode },
4974 { Bad_Opcode },
592a252b 4975 { VEX_LEN_TABLE (VEX_LEN_0F6E_P_2) },
c0f3af97
L
4976 },
4977
592a252b 4978 /* PREFIX_VEX_0F6F */
c0f3af97 4979 {
592d1631 4980 { Bad_Opcode },
ec6f095a
L
4981 { "vmovdqu", { XM, EXx }, 0 },
4982 { "vmovdqa", { XM, EXx }, 0 },
c0f3af97
L
4983 },
4984
592a252b 4985 /* PREFIX_VEX_0F70 */
c0f3af97 4986 {
592d1631 4987 { Bad_Opcode },
ec6f095a
L
4988 { "vpshufhw", { XM, EXx, Ib }, 0 },
4989 { "vpshufd", { XM, EXx, Ib }, 0 },
4990 { "vpshuflw", { XM, EXx, Ib }, 0 },
c0f3af97
L
4991 },
4992
592a252b 4993 /* PREFIX_VEX_0F71_REG_2 */
c0f3af97 4994 {
592d1631
L
4995 { Bad_Opcode },
4996 { Bad_Opcode },
ec6f095a 4997 { "vpsrlw", { Vex, XS, Ib }, 0 },
c0f3af97
L
4998 },
4999
592a252b 5000 /* PREFIX_VEX_0F71_REG_4 */
c0f3af97 5001 {
592d1631
L
5002 { Bad_Opcode },
5003 { Bad_Opcode },
ec6f095a 5004 { "vpsraw", { Vex, XS, Ib }, 0 },
c0f3af97
L
5005 },
5006
592a252b 5007 /* PREFIX_VEX_0F71_REG_6 */
c0f3af97 5008 {
592d1631
L
5009 { Bad_Opcode },
5010 { Bad_Opcode },
ec6f095a 5011 { "vpsllw", { Vex, XS, Ib }, 0 },
c0f3af97
L
5012 },
5013
592a252b 5014 /* PREFIX_VEX_0F72_REG_2 */
c0f3af97 5015 {
592d1631
L
5016 { Bad_Opcode },
5017 { Bad_Opcode },
ec6f095a 5018 { "vpsrld", { Vex, XS, Ib }, 0 },
c0f3af97
L
5019 },
5020
592a252b 5021 /* PREFIX_VEX_0F72_REG_4 */
c0f3af97 5022 {
592d1631
L
5023 { Bad_Opcode },
5024 { Bad_Opcode },
ec6f095a 5025 { "vpsrad", { Vex, XS, Ib }, 0 },
c0f3af97
L
5026 },
5027
592a252b 5028 /* PREFIX_VEX_0F72_REG_6 */
c0f3af97 5029 {
592d1631
L
5030 { Bad_Opcode },
5031 { Bad_Opcode },
ec6f095a 5032 { "vpslld", { Vex, XS, Ib }, 0 },
c0f3af97
L
5033 },
5034
592a252b 5035 /* PREFIX_VEX_0F73_REG_2 */
c0f3af97 5036 {
592d1631
L
5037 { Bad_Opcode },
5038 { Bad_Opcode },
ec6f095a 5039 { "vpsrlq", { Vex, XS, Ib }, 0 },
c0f3af97
L
5040 },
5041
592a252b 5042 /* PREFIX_VEX_0F73_REG_3 */
c0f3af97 5043 {
592d1631
L
5044 { Bad_Opcode },
5045 { Bad_Opcode },
ec6f095a 5046 { "vpsrldq", { Vex, XS, Ib }, 0 },
c0f3af97
L
5047 },
5048
592a252b 5049 /* PREFIX_VEX_0F73_REG_6 */
c0f3af97 5050 {
592d1631
L
5051 { Bad_Opcode },
5052 { Bad_Opcode },
ec6f095a 5053 { "vpsllq", { Vex, XS, Ib }, 0 },
c0f3af97
L
5054 },
5055
592a252b 5056 /* PREFIX_VEX_0F73_REG_7 */
c0f3af97 5057 {
592d1631
L
5058 { Bad_Opcode },
5059 { Bad_Opcode },
ec6f095a 5060 { "vpslldq", { Vex, XS, Ib }, 0 },
c0f3af97
L
5061 },
5062
592a252b 5063 /* PREFIX_VEX_0F74 */
c0f3af97 5064 {
592d1631
L
5065 { Bad_Opcode },
5066 { Bad_Opcode },
ec6f095a 5067 { "vpcmpeqb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5068 },
5069
592a252b 5070 /* PREFIX_VEX_0F75 */
c0f3af97 5071 {
592d1631
L
5072 { Bad_Opcode },
5073 { Bad_Opcode },
ec6f095a 5074 { "vpcmpeqw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5075 },
5076
592a252b 5077 /* PREFIX_VEX_0F76 */
c0f3af97 5078 {
592d1631
L
5079 { Bad_Opcode },
5080 { Bad_Opcode },
ec6f095a 5081 { "vpcmpeqd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5082 },
5083
592a252b 5084 /* PREFIX_VEX_0F77 */
c0f3af97 5085 {
ec6f095a 5086 { VEX_LEN_TABLE (VEX_LEN_0F77_P_0) },
c0f3af97
L
5087 },
5088
592a252b 5089 /* PREFIX_VEX_0F7C */
c0f3af97 5090 {
592d1631
L
5091 { Bad_Opcode },
5092 { Bad_Opcode },
ec6f095a
L
5093 { "vhaddpd", { XM, Vex, EXx }, 0 },
5094 { "vhaddps", { XM, Vex, EXx }, 0 },
c0f3af97
L
5095 },
5096
592a252b 5097 /* PREFIX_VEX_0F7D */
c0f3af97 5098 {
592d1631
L
5099 { Bad_Opcode },
5100 { Bad_Opcode },
ec6f095a
L
5101 { "vhsubpd", { XM, Vex, EXx }, 0 },
5102 { "vhsubps", { XM, Vex, EXx }, 0 },
c0f3af97
L
5103 },
5104
592a252b 5105 /* PREFIX_VEX_0F7E */
c0f3af97 5106 {
592d1631 5107 { Bad_Opcode },
592a252b
L
5108 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_1) },
5109 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_2) },
c0f3af97
L
5110 },
5111
592a252b 5112 /* PREFIX_VEX_0F7F */
c0f3af97 5113 {
592d1631 5114 { Bad_Opcode },
ec6f095a
L
5115 { "vmovdqu", { EXxS, XM }, 0 },
5116 { "vmovdqa", { EXxS, XM }, 0 },
c0f3af97
L
5117 },
5118
43234a1e
L
5119 /* PREFIX_VEX_0F90 */
5120 {
5121 { VEX_LEN_TABLE (VEX_LEN_0F90_P_0) },
1ba585e8
IT
5122 { Bad_Opcode },
5123 { VEX_LEN_TABLE (VEX_LEN_0F90_P_2) },
43234a1e
L
5124 },
5125
5126 /* PREFIX_VEX_0F91 */
5127 {
5128 { VEX_LEN_TABLE (VEX_LEN_0F91_P_0) },
1ba585e8
IT
5129 { Bad_Opcode },
5130 { VEX_LEN_TABLE (VEX_LEN_0F91_P_2) },
43234a1e
L
5131 },
5132
5133 /* PREFIX_VEX_0F92 */
5134 {
5135 { VEX_LEN_TABLE (VEX_LEN_0F92_P_0) },
1ba585e8 5136 { Bad_Opcode },
90a915bf 5137 { VEX_LEN_TABLE (VEX_LEN_0F92_P_2) },
1ba585e8 5138 { VEX_LEN_TABLE (VEX_LEN_0F92_P_3) },
43234a1e
L
5139 },
5140
5141 /* PREFIX_VEX_0F93 */
5142 {
5143 { VEX_LEN_TABLE (VEX_LEN_0F93_P_0) },
1ba585e8 5144 { Bad_Opcode },
90a915bf 5145 { VEX_LEN_TABLE (VEX_LEN_0F93_P_2) },
1ba585e8 5146 { VEX_LEN_TABLE (VEX_LEN_0F93_P_3) },
43234a1e
L
5147 },
5148
5149 /* PREFIX_VEX_0F98 */
5150 {
5151 { VEX_LEN_TABLE (VEX_LEN_0F98_P_0) },
1ba585e8
IT
5152 { Bad_Opcode },
5153 { VEX_LEN_TABLE (VEX_LEN_0F98_P_2) },
5154 },
5155
5156 /* PREFIX_VEX_0F99 */
5157 {
5158 { VEX_LEN_TABLE (VEX_LEN_0F99_P_0) },
5159 { Bad_Opcode },
5160 { VEX_LEN_TABLE (VEX_LEN_0F99_P_2) },
43234a1e
L
5161 },
5162
592a252b 5163 /* PREFIX_VEX_0FC2 */
c0f3af97 5164 {
ec6f095a
L
5165 { "vcmpps", { XM, Vex, EXx, VCMP }, 0 },
5166 { "vcmpss", { XMScalar, VexScalar, EXdScalar, VCMP }, 0 },
5167 { "vcmppd", { XM, Vex, EXx, VCMP }, 0 },
5168 { "vcmpsd", { XMScalar, VexScalar, EXqScalar, VCMP }, 0 },
c0f3af97
L
5169 },
5170
592a252b 5171 /* PREFIX_VEX_0FC4 */
c0f3af97 5172 {
592d1631
L
5173 { Bad_Opcode },
5174 { Bad_Opcode },
592a252b 5175 { VEX_LEN_TABLE (VEX_LEN_0FC4_P_2) },
c0f3af97
L
5176 },
5177
592a252b 5178 /* PREFIX_VEX_0FC5 */
c0f3af97 5179 {
592d1631
L
5180 { Bad_Opcode },
5181 { Bad_Opcode },
592a252b 5182 { VEX_LEN_TABLE (VEX_LEN_0FC5_P_2) },
c0f3af97
L
5183 },
5184
592a252b 5185 /* PREFIX_VEX_0FD0 */
c0f3af97 5186 {
592d1631
L
5187 { Bad_Opcode },
5188 { Bad_Opcode },
ec6f095a
L
5189 { "vaddsubpd", { XM, Vex, EXx }, 0 },
5190 { "vaddsubps", { XM, Vex, EXx }, 0 },
c0f3af97
L
5191 },
5192
592a252b 5193 /* PREFIX_VEX_0FD1 */
c0f3af97 5194 {
592d1631
L
5195 { Bad_Opcode },
5196 { Bad_Opcode },
ec6f095a 5197 { "vpsrlw", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5198 },
5199
592a252b 5200 /* PREFIX_VEX_0FD2 */
c0f3af97 5201 {
592d1631
L
5202 { Bad_Opcode },
5203 { Bad_Opcode },
ec6f095a 5204 { "vpsrld", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5205 },
5206
592a252b 5207 /* PREFIX_VEX_0FD3 */
c0f3af97 5208 {
592d1631
L
5209 { Bad_Opcode },
5210 { Bad_Opcode },
ec6f095a 5211 { "vpsrlq", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5212 },
5213
592a252b 5214 /* PREFIX_VEX_0FD4 */
c0f3af97 5215 {
592d1631
L
5216 { Bad_Opcode },
5217 { Bad_Opcode },
ec6f095a 5218 { "vpaddq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5219 },
5220
592a252b 5221 /* PREFIX_VEX_0FD5 */
c0f3af97 5222 {
592d1631
L
5223 { Bad_Opcode },
5224 { Bad_Opcode },
ec6f095a 5225 { "vpmullw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5226 },
5227
592a252b 5228 /* PREFIX_VEX_0FD6 */
c0f3af97 5229 {
592d1631
L
5230 { Bad_Opcode },
5231 { Bad_Opcode },
592a252b 5232 { VEX_LEN_TABLE (VEX_LEN_0FD6_P_2) },
c0f3af97
L
5233 },
5234
592a252b 5235 /* PREFIX_VEX_0FD7 */
c0f3af97 5236 {
592d1631
L
5237 { Bad_Opcode },
5238 { Bad_Opcode },
592a252b 5239 { MOD_TABLE (MOD_VEX_0FD7_PREFIX_2) },
c0f3af97
L
5240 },
5241
592a252b 5242 /* PREFIX_VEX_0FD8 */
c0f3af97 5243 {
592d1631
L
5244 { Bad_Opcode },
5245 { Bad_Opcode },
ec6f095a 5246 { "vpsubusb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5247 },
5248
592a252b 5249 /* PREFIX_VEX_0FD9 */
c0f3af97 5250 {
592d1631
L
5251 { Bad_Opcode },
5252 { Bad_Opcode },
ec6f095a 5253 { "vpsubusw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5254 },
5255
592a252b 5256 /* PREFIX_VEX_0FDA */
c0f3af97 5257 {
592d1631
L
5258 { Bad_Opcode },
5259 { Bad_Opcode },
ec6f095a 5260 { "vpminub", { XM, Vex, EXx }, 0 },
c0f3af97
L
5261 },
5262
592a252b 5263 /* PREFIX_VEX_0FDB */
c0f3af97 5264 {
592d1631
L
5265 { Bad_Opcode },
5266 { Bad_Opcode },
ec6f095a 5267 { "vpand", { XM, Vex, EXx }, 0 },
c0f3af97
L
5268 },
5269
592a252b 5270 /* PREFIX_VEX_0FDC */
c0f3af97 5271 {
592d1631
L
5272 { Bad_Opcode },
5273 { Bad_Opcode },
ec6f095a 5274 { "vpaddusb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5275 },
5276
592a252b 5277 /* PREFIX_VEX_0FDD */
c0f3af97 5278 {
592d1631
L
5279 { Bad_Opcode },
5280 { Bad_Opcode },
ec6f095a 5281 { "vpaddusw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5282 },
5283
592a252b 5284 /* PREFIX_VEX_0FDE */
c0f3af97 5285 {
592d1631
L
5286 { Bad_Opcode },
5287 { Bad_Opcode },
ec6f095a 5288 { "vpmaxub", { XM, Vex, EXx }, 0 },
c0f3af97
L
5289 },
5290
592a252b 5291 /* PREFIX_VEX_0FDF */
c0f3af97 5292 {
592d1631
L
5293 { Bad_Opcode },
5294 { Bad_Opcode },
ec6f095a 5295 { "vpandn", { XM, Vex, EXx }, 0 },
c0f3af97
L
5296 },
5297
592a252b 5298 /* PREFIX_VEX_0FE0 */
c0f3af97 5299 {
592d1631
L
5300 { Bad_Opcode },
5301 { Bad_Opcode },
ec6f095a 5302 { "vpavgb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5303 },
5304
592a252b 5305 /* PREFIX_VEX_0FE1 */
c0f3af97 5306 {
592d1631
L
5307 { Bad_Opcode },
5308 { Bad_Opcode },
ec6f095a 5309 { "vpsraw", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5310 },
5311
592a252b 5312 /* PREFIX_VEX_0FE2 */
c0f3af97 5313 {
592d1631
L
5314 { Bad_Opcode },
5315 { Bad_Opcode },
ec6f095a 5316 { "vpsrad", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5317 },
5318
592a252b 5319 /* PREFIX_VEX_0FE3 */
c0f3af97 5320 {
592d1631
L
5321 { Bad_Opcode },
5322 { Bad_Opcode },
ec6f095a 5323 { "vpavgw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5324 },
5325
592a252b 5326 /* PREFIX_VEX_0FE4 */
c0f3af97 5327 {
592d1631
L
5328 { Bad_Opcode },
5329 { Bad_Opcode },
ec6f095a 5330 { "vpmulhuw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5331 },
5332
592a252b 5333 /* PREFIX_VEX_0FE5 */
c0f3af97 5334 {
592d1631
L
5335 { Bad_Opcode },
5336 { Bad_Opcode },
ec6f095a 5337 { "vpmulhw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5338 },
5339
592a252b 5340 /* PREFIX_VEX_0FE6 */
c0f3af97 5341 {
592d1631 5342 { Bad_Opcode },
ec6f095a
L
5343 { "vcvtdq2pd", { XM, EXxmmq }, 0 },
5344 { "vcvttpd2dq%XY", { XMM, EXx }, 0 },
5345 { "vcvtpd2dq%XY", { XMM, EXx }, 0 },
c0f3af97
L
5346 },
5347
592a252b 5348 /* PREFIX_VEX_0FE7 */
c0f3af97 5349 {
592d1631
L
5350 { Bad_Opcode },
5351 { Bad_Opcode },
592a252b 5352 { MOD_TABLE (MOD_VEX_0FE7_PREFIX_2) },
c0f3af97
L
5353 },
5354
592a252b 5355 /* PREFIX_VEX_0FE8 */
c0f3af97 5356 {
592d1631
L
5357 { Bad_Opcode },
5358 { Bad_Opcode },
ec6f095a 5359 { "vpsubsb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5360 },
5361
592a252b 5362 /* PREFIX_VEX_0FE9 */
c0f3af97 5363 {
592d1631
L
5364 { Bad_Opcode },
5365 { Bad_Opcode },
ec6f095a 5366 { "vpsubsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5367 },
5368
592a252b 5369 /* PREFIX_VEX_0FEA */
c0f3af97 5370 {
592d1631
L
5371 { Bad_Opcode },
5372 { Bad_Opcode },
ec6f095a 5373 { "vpminsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5374 },
5375
592a252b 5376 /* PREFIX_VEX_0FEB */
c0f3af97 5377 {
592d1631
L
5378 { Bad_Opcode },
5379 { Bad_Opcode },
ec6f095a 5380 { "vpor", { XM, Vex, EXx }, 0 },
c0f3af97
L
5381 },
5382
592a252b 5383 /* PREFIX_VEX_0FEC */
c0f3af97 5384 {
592d1631
L
5385 { Bad_Opcode },
5386 { Bad_Opcode },
ec6f095a 5387 { "vpaddsb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5388 },
5389
592a252b 5390 /* PREFIX_VEX_0FED */
c0f3af97 5391 {
592d1631
L
5392 { Bad_Opcode },
5393 { Bad_Opcode },
ec6f095a 5394 { "vpaddsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5395 },
5396
592a252b 5397 /* PREFIX_VEX_0FEE */
c0f3af97 5398 {
592d1631
L
5399 { Bad_Opcode },
5400 { Bad_Opcode },
ec6f095a 5401 { "vpmaxsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5402 },
5403
592a252b 5404 /* PREFIX_VEX_0FEF */
c0f3af97 5405 {
592d1631
L
5406 { Bad_Opcode },
5407 { Bad_Opcode },
ec6f095a 5408 { "vpxor", { XM, Vex, EXx }, 0 },
c0f3af97
L
5409 },
5410
592a252b 5411 /* PREFIX_VEX_0FF0 */
c0f3af97 5412 {
592d1631
L
5413 { Bad_Opcode },
5414 { Bad_Opcode },
5415 { Bad_Opcode },
592a252b 5416 { MOD_TABLE (MOD_VEX_0FF0_PREFIX_3) },
c0f3af97
L
5417 },
5418
592a252b 5419 /* PREFIX_VEX_0FF1 */
c0f3af97 5420 {
592d1631
L
5421 { Bad_Opcode },
5422 { Bad_Opcode },
ec6f095a 5423 { "vpsllw", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5424 },
5425
592a252b 5426 /* PREFIX_VEX_0FF2 */
c0f3af97 5427 {
592d1631
L
5428 { Bad_Opcode },
5429 { Bad_Opcode },
ec6f095a 5430 { "vpslld", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5431 },
5432
592a252b 5433 /* PREFIX_VEX_0FF3 */
c0f3af97 5434 {
592d1631
L
5435 { Bad_Opcode },
5436 { Bad_Opcode },
ec6f095a 5437 { "vpsllq", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5438 },
5439
592a252b 5440 /* PREFIX_VEX_0FF4 */
c0f3af97 5441 {
592d1631
L
5442 { Bad_Opcode },
5443 { Bad_Opcode },
ec6f095a 5444 { "vpmuludq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5445 },
5446
592a252b 5447 /* PREFIX_VEX_0FF5 */
c0f3af97 5448 {
592d1631
L
5449 { Bad_Opcode },
5450 { Bad_Opcode },
ec6f095a 5451 { "vpmaddwd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5452 },
5453
592a252b 5454 /* PREFIX_VEX_0FF6 */
c0f3af97 5455 {
592d1631
L
5456 { Bad_Opcode },
5457 { Bad_Opcode },
ec6f095a 5458 { "vpsadbw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5459 },
5460
592a252b 5461 /* PREFIX_VEX_0FF7 */
c0f3af97 5462 {
592d1631
L
5463 { Bad_Opcode },
5464 { Bad_Opcode },
592a252b 5465 { VEX_LEN_TABLE (VEX_LEN_0FF7_P_2) },
c0f3af97
L
5466 },
5467
592a252b 5468 /* PREFIX_VEX_0FF8 */
c0f3af97 5469 {
592d1631
L
5470 { Bad_Opcode },
5471 { Bad_Opcode },
ec6f095a 5472 { "vpsubb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5473 },
5474
592a252b 5475 /* PREFIX_VEX_0FF9 */
c0f3af97 5476 {
592d1631
L
5477 { Bad_Opcode },
5478 { Bad_Opcode },
ec6f095a 5479 { "vpsubw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5480 },
5481
592a252b 5482 /* PREFIX_VEX_0FFA */
c0f3af97 5483 {
592d1631
L
5484 { Bad_Opcode },
5485 { Bad_Opcode },
ec6f095a 5486 { "vpsubd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5487 },
5488
592a252b 5489 /* PREFIX_VEX_0FFB */
c0f3af97 5490 {
592d1631
L
5491 { Bad_Opcode },
5492 { Bad_Opcode },
ec6f095a 5493 { "vpsubq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5494 },
5495
592a252b 5496 /* PREFIX_VEX_0FFC */
c0f3af97 5497 {
592d1631
L
5498 { Bad_Opcode },
5499 { Bad_Opcode },
ec6f095a 5500 { "vpaddb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5501 },
5502
592a252b 5503 /* PREFIX_VEX_0FFD */
c0f3af97 5504 {
592d1631
L
5505 { Bad_Opcode },
5506 { Bad_Opcode },
ec6f095a 5507 { "vpaddw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5508 },
5509
592a252b 5510 /* PREFIX_VEX_0FFE */
c0f3af97 5511 {
592d1631
L
5512 { Bad_Opcode },
5513 { Bad_Opcode },
ec6f095a 5514 { "vpaddd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5515 },
5516
592a252b 5517 /* PREFIX_VEX_0F3800 */
c0f3af97 5518 {
592d1631
L
5519 { Bad_Opcode },
5520 { Bad_Opcode },
ec6f095a 5521 { "vpshufb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5522 },
5523
592a252b 5524 /* PREFIX_VEX_0F3801 */
c0f3af97 5525 {
592d1631
L
5526 { Bad_Opcode },
5527 { Bad_Opcode },
ec6f095a 5528 { "vphaddw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5529 },
5530
592a252b 5531 /* PREFIX_VEX_0F3802 */
c0f3af97 5532 {
592d1631
L
5533 { Bad_Opcode },
5534 { Bad_Opcode },
ec6f095a 5535 { "vphaddd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5536 },
5537
592a252b 5538 /* PREFIX_VEX_0F3803 */
c0f3af97 5539 {
592d1631
L
5540 { Bad_Opcode },
5541 { Bad_Opcode },
ec6f095a 5542 { "vphaddsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5543 },
5544
592a252b 5545 /* PREFIX_VEX_0F3804 */
c0f3af97 5546 {
592d1631
L
5547 { Bad_Opcode },
5548 { Bad_Opcode },
ec6f095a 5549 { "vpmaddubsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5550 },
5551
592a252b 5552 /* PREFIX_VEX_0F3805 */
c0f3af97 5553 {
592d1631
L
5554 { Bad_Opcode },
5555 { Bad_Opcode },
ec6f095a 5556 { "vphsubw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5557 },
5558
592a252b 5559 /* PREFIX_VEX_0F3806 */
c0f3af97 5560 {
592d1631
L
5561 { Bad_Opcode },
5562 { Bad_Opcode },
ec6f095a 5563 { "vphsubd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5564 },
5565
592a252b 5566 /* PREFIX_VEX_0F3807 */
c0f3af97 5567 {
592d1631
L
5568 { Bad_Opcode },
5569 { Bad_Opcode },
ec6f095a 5570 { "vphsubsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5571 },
5572
592a252b 5573 /* PREFIX_VEX_0F3808 */
c0f3af97 5574 {
592d1631
L
5575 { Bad_Opcode },
5576 { Bad_Opcode },
ec6f095a 5577 { "vpsignb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5578 },
5579
592a252b 5580 /* PREFIX_VEX_0F3809 */
c0f3af97 5581 {
592d1631
L
5582 { Bad_Opcode },
5583 { Bad_Opcode },
ec6f095a 5584 { "vpsignw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5585 },
5586
592a252b 5587 /* PREFIX_VEX_0F380A */
c0f3af97 5588 {
592d1631
L
5589 { Bad_Opcode },
5590 { Bad_Opcode },
ec6f095a 5591 { "vpsignd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5592 },
5593
592a252b 5594 /* PREFIX_VEX_0F380B */
c0f3af97 5595 {
592d1631
L
5596 { Bad_Opcode },
5597 { Bad_Opcode },
ec6f095a 5598 { "vpmulhrsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5599 },
5600
592a252b 5601 /* PREFIX_VEX_0F380C */
c0f3af97 5602 {
592d1631
L
5603 { Bad_Opcode },
5604 { Bad_Opcode },
592a252b 5605 { VEX_W_TABLE (VEX_W_0F380C_P_2) },
c0f3af97
L
5606 },
5607
592a252b 5608 /* PREFIX_VEX_0F380D */
c0f3af97 5609 {
592d1631
L
5610 { Bad_Opcode },
5611 { Bad_Opcode },
592a252b 5612 { VEX_W_TABLE (VEX_W_0F380D_P_2) },
c0f3af97
L
5613 },
5614
592a252b 5615 /* PREFIX_VEX_0F380E */
c0f3af97 5616 {
592d1631
L
5617 { Bad_Opcode },
5618 { Bad_Opcode },
592a252b 5619 { VEX_W_TABLE (VEX_W_0F380E_P_2) },
c0f3af97
L
5620 },
5621
592a252b 5622 /* PREFIX_VEX_0F380F */
c0f3af97 5623 {
592d1631
L
5624 { Bad_Opcode },
5625 { Bad_Opcode },
592a252b 5626 { VEX_W_TABLE (VEX_W_0F380F_P_2) },
c0f3af97
L
5627 },
5628
592a252b 5629 /* PREFIX_VEX_0F3813 */
c7b8aa3a
L
5630 {
5631 { Bad_Opcode },
5632 { Bad_Opcode },
bf890a93 5633 { "vcvtph2ps", { XM, EXxmmq }, 0 },
c7b8aa3a
L
5634 },
5635
6c30d220
L
5636 /* PREFIX_VEX_0F3816 */
5637 {
5638 { Bad_Opcode },
5639 { Bad_Opcode },
5640 { VEX_LEN_TABLE (VEX_LEN_0F3816_P_2) },
5641 },
5642
592a252b 5643 /* PREFIX_VEX_0F3817 */
c0f3af97 5644 {
592d1631
L
5645 { Bad_Opcode },
5646 { Bad_Opcode },
ec6f095a 5647 { "vptest", { XM, EXx }, 0 },
c0f3af97
L
5648 },
5649
592a252b 5650 /* PREFIX_VEX_0F3818 */
c0f3af97 5651 {
592d1631
L
5652 { Bad_Opcode },
5653 { Bad_Opcode },
6c30d220 5654 { VEX_W_TABLE (VEX_W_0F3818_P_2) },
c0f3af97
L
5655 },
5656
592a252b 5657 /* PREFIX_VEX_0F3819 */
c0f3af97 5658 {
592d1631
L
5659 { Bad_Opcode },
5660 { Bad_Opcode },
6c30d220 5661 { VEX_LEN_TABLE (VEX_LEN_0F3819_P_2) },
c0f3af97
L
5662 },
5663
592a252b 5664 /* PREFIX_VEX_0F381A */
c0f3af97 5665 {
592d1631
L
5666 { Bad_Opcode },
5667 { Bad_Opcode },
592a252b 5668 { MOD_TABLE (MOD_VEX_0F381A_PREFIX_2) },
c0f3af97
L
5669 },
5670
592a252b 5671 /* PREFIX_VEX_0F381C */
c0f3af97 5672 {
592d1631
L
5673 { Bad_Opcode },
5674 { Bad_Opcode },
ec6f095a 5675 { "vpabsb", { XM, EXx }, 0 },
c0f3af97
L
5676 },
5677
592a252b 5678 /* PREFIX_VEX_0F381D */
c0f3af97 5679 {
592d1631
L
5680 { Bad_Opcode },
5681 { Bad_Opcode },
ec6f095a 5682 { "vpabsw", { XM, EXx }, 0 },
c0f3af97
L
5683 },
5684
592a252b 5685 /* PREFIX_VEX_0F381E */
c0f3af97 5686 {
592d1631
L
5687 { Bad_Opcode },
5688 { Bad_Opcode },
ec6f095a 5689 { "vpabsd", { XM, EXx }, 0 },
c0f3af97
L
5690 },
5691
592a252b 5692 /* PREFIX_VEX_0F3820 */
c0f3af97 5693 {
592d1631
L
5694 { Bad_Opcode },
5695 { Bad_Opcode },
ec6f095a 5696 { "vpmovsxbw", { XM, EXxmmq }, 0 },
c0f3af97
L
5697 },
5698
592a252b 5699 /* PREFIX_VEX_0F3821 */
c0f3af97 5700 {
592d1631
L
5701 { Bad_Opcode },
5702 { Bad_Opcode },
ec6f095a 5703 { "vpmovsxbd", { XM, EXxmmqd }, 0 },
c0f3af97
L
5704 },
5705
592a252b 5706 /* PREFIX_VEX_0F3822 */
c0f3af97 5707 {
592d1631
L
5708 { Bad_Opcode },
5709 { Bad_Opcode },
ec6f095a 5710 { "vpmovsxbq", { XM, EXxmmdw }, 0 },
c0f3af97
L
5711 },
5712
592a252b 5713 /* PREFIX_VEX_0F3823 */
c0f3af97 5714 {
592d1631
L
5715 { Bad_Opcode },
5716 { Bad_Opcode },
ec6f095a 5717 { "vpmovsxwd", { XM, EXxmmq }, 0 },
c0f3af97
L
5718 },
5719
592a252b 5720 /* PREFIX_VEX_0F3824 */
c0f3af97 5721 {
592d1631
L
5722 { Bad_Opcode },
5723 { Bad_Opcode },
ec6f095a 5724 { "vpmovsxwq", { XM, EXxmmqd }, 0 },
c0f3af97
L
5725 },
5726
592a252b 5727 /* PREFIX_VEX_0F3825 */
c0f3af97 5728 {
592d1631
L
5729 { Bad_Opcode },
5730 { Bad_Opcode },
ec6f095a 5731 { "vpmovsxdq", { XM, EXxmmq }, 0 },
c0f3af97
L
5732 },
5733
592a252b 5734 /* PREFIX_VEX_0F3828 */
c0f3af97 5735 {
592d1631
L
5736 { Bad_Opcode },
5737 { Bad_Opcode },
ec6f095a 5738 { "vpmuldq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5739 },
5740
592a252b 5741 /* PREFIX_VEX_0F3829 */
c0f3af97 5742 {
592d1631
L
5743 { Bad_Opcode },
5744 { Bad_Opcode },
ec6f095a 5745 { "vpcmpeqq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5746 },
5747
592a252b 5748 /* PREFIX_VEX_0F382A */
c0f3af97 5749 {
592d1631
L
5750 { Bad_Opcode },
5751 { Bad_Opcode },
592a252b 5752 { MOD_TABLE (MOD_VEX_0F382A_PREFIX_2) },
c0f3af97
L
5753 },
5754
592a252b 5755 /* PREFIX_VEX_0F382B */
c0f3af97 5756 {
592d1631
L
5757 { Bad_Opcode },
5758 { Bad_Opcode },
ec6f095a 5759 { "vpackusdw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5760 },
5761
592a252b 5762 /* PREFIX_VEX_0F382C */
c0f3af97 5763 {
592d1631
L
5764 { Bad_Opcode },
5765 { Bad_Opcode },
592a252b 5766 { MOD_TABLE (MOD_VEX_0F382C_PREFIX_2) },
c0f3af97
L
5767 },
5768
592a252b 5769 /* PREFIX_VEX_0F382D */
c0f3af97 5770 {
592d1631
L
5771 { Bad_Opcode },
5772 { Bad_Opcode },
592a252b 5773 { MOD_TABLE (MOD_VEX_0F382D_PREFIX_2) },
c0f3af97
L
5774 },
5775
592a252b 5776 /* PREFIX_VEX_0F382E */
c0f3af97 5777 {
592d1631
L
5778 { Bad_Opcode },
5779 { Bad_Opcode },
592a252b 5780 { MOD_TABLE (MOD_VEX_0F382E_PREFIX_2) },
c0f3af97
L
5781 },
5782
592a252b 5783 /* PREFIX_VEX_0F382F */
c0f3af97 5784 {
592d1631
L
5785 { Bad_Opcode },
5786 { Bad_Opcode },
592a252b 5787 { MOD_TABLE (MOD_VEX_0F382F_PREFIX_2) },
c0f3af97
L
5788 },
5789
592a252b 5790 /* PREFIX_VEX_0F3830 */
c0f3af97 5791 {
592d1631
L
5792 { Bad_Opcode },
5793 { Bad_Opcode },
ec6f095a 5794 { "vpmovzxbw", { XM, EXxmmq }, 0 },
c0f3af97
L
5795 },
5796
592a252b 5797 /* PREFIX_VEX_0F3831 */
c0f3af97 5798 {
592d1631
L
5799 { Bad_Opcode },
5800 { Bad_Opcode },
ec6f095a 5801 { "vpmovzxbd", { XM, EXxmmqd }, 0 },
c0f3af97
L
5802 },
5803
592a252b 5804 /* PREFIX_VEX_0F3832 */
c0f3af97 5805 {
592d1631
L
5806 { Bad_Opcode },
5807 { Bad_Opcode },
ec6f095a 5808 { "vpmovzxbq", { XM, EXxmmdw }, 0 },
c0f3af97
L
5809 },
5810
592a252b 5811 /* PREFIX_VEX_0F3833 */
c0f3af97 5812 {
592d1631
L
5813 { Bad_Opcode },
5814 { Bad_Opcode },
ec6f095a 5815 { "vpmovzxwd", { XM, EXxmmq }, 0 },
c0f3af97
L
5816 },
5817
592a252b 5818 /* PREFIX_VEX_0F3834 */
c0f3af97 5819 {
592d1631
L
5820 { Bad_Opcode },
5821 { Bad_Opcode },
ec6f095a 5822 { "vpmovzxwq", { XM, EXxmmqd }, 0 },
c0f3af97
L
5823 },
5824
592a252b 5825 /* PREFIX_VEX_0F3835 */
c0f3af97 5826 {
592d1631
L
5827 { Bad_Opcode },
5828 { Bad_Opcode },
ec6f095a 5829 { "vpmovzxdq", { XM, EXxmmq }, 0 },
6c30d220
L
5830 },
5831
5832 /* PREFIX_VEX_0F3836 */
5833 {
5834 { Bad_Opcode },
5835 { Bad_Opcode },
5836 { VEX_LEN_TABLE (VEX_LEN_0F3836_P_2) },
c0f3af97
L
5837 },
5838
592a252b 5839 /* PREFIX_VEX_0F3837 */
c0f3af97 5840 {
592d1631
L
5841 { Bad_Opcode },
5842 { Bad_Opcode },
ec6f095a 5843 { "vpcmpgtq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5844 },
5845
592a252b 5846 /* PREFIX_VEX_0F3838 */
c0f3af97 5847 {
592d1631
L
5848 { Bad_Opcode },
5849 { Bad_Opcode },
ec6f095a 5850 { "vpminsb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5851 },
5852
592a252b 5853 /* PREFIX_VEX_0F3839 */
c0f3af97 5854 {
592d1631
L
5855 { Bad_Opcode },
5856 { Bad_Opcode },
ec6f095a 5857 { "vpminsd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5858 },
5859
592a252b 5860 /* PREFIX_VEX_0F383A */
c0f3af97 5861 {
592d1631
L
5862 { Bad_Opcode },
5863 { Bad_Opcode },
ec6f095a 5864 { "vpminuw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5865 },
5866
592a252b 5867 /* PREFIX_VEX_0F383B */
c0f3af97 5868 {
592d1631
L
5869 { Bad_Opcode },
5870 { Bad_Opcode },
ec6f095a 5871 { "vpminud", { XM, Vex, EXx }, 0 },
c0f3af97
L
5872 },
5873
592a252b 5874 /* PREFIX_VEX_0F383C */
c0f3af97 5875 {
592d1631
L
5876 { Bad_Opcode },
5877 { Bad_Opcode },
ec6f095a 5878 { "vpmaxsb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5879 },
5880
592a252b 5881 /* PREFIX_VEX_0F383D */
c0f3af97 5882 {
592d1631
L
5883 { Bad_Opcode },
5884 { Bad_Opcode },
ec6f095a 5885 { "vpmaxsd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5886 },
5887
592a252b 5888 /* PREFIX_VEX_0F383E */
c0f3af97 5889 {
592d1631
L
5890 { Bad_Opcode },
5891 { Bad_Opcode },
ec6f095a 5892 { "vpmaxuw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5893 },
5894
592a252b 5895 /* PREFIX_VEX_0F383F */
c0f3af97 5896 {
592d1631
L
5897 { Bad_Opcode },
5898 { Bad_Opcode },
ec6f095a 5899 { "vpmaxud", { XM, Vex, EXx }, 0 },
c0f3af97
L
5900 },
5901
592a252b 5902 /* PREFIX_VEX_0F3840 */
c0f3af97 5903 {
592d1631
L
5904 { Bad_Opcode },
5905 { Bad_Opcode },
ec6f095a 5906 { "vpmulld", { XM, Vex, EXx }, 0 },
c0f3af97
L
5907 },
5908
592a252b 5909 /* PREFIX_VEX_0F3841 */
c0f3af97 5910 {
592d1631
L
5911 { Bad_Opcode },
5912 { Bad_Opcode },
592a252b 5913 { VEX_LEN_TABLE (VEX_LEN_0F3841_P_2) },
c0f3af97
L
5914 },
5915
6c30d220
L
5916 /* PREFIX_VEX_0F3845 */
5917 {
5918 { Bad_Opcode },
5919 { Bad_Opcode },
bf890a93 5920 { "vpsrlv%LW", { XM, Vex, EXx }, 0 },
6c30d220
L
5921 },
5922
5923 /* PREFIX_VEX_0F3846 */
5924 {
5925 { Bad_Opcode },
5926 { Bad_Opcode },
5927 { VEX_W_TABLE (VEX_W_0F3846_P_2) },
5928 },
5929
5930 /* PREFIX_VEX_0F3847 */
5931 {
5932 { Bad_Opcode },
5933 { Bad_Opcode },
bf890a93 5934 { "vpsllv%LW", { XM, Vex, EXx }, 0 },
6c30d220
L
5935 },
5936
5937 /* PREFIX_VEX_0F3858 */
5938 {
5939 { Bad_Opcode },
5940 { Bad_Opcode },
5941 { VEX_W_TABLE (VEX_W_0F3858_P_2) },
5942 },
5943
5944 /* PREFIX_VEX_0F3859 */
5945 {
5946 { Bad_Opcode },
5947 { Bad_Opcode },
5948 { VEX_W_TABLE (VEX_W_0F3859_P_2) },
5949 },
5950
5951 /* PREFIX_VEX_0F385A */
5952 {
5953 { Bad_Opcode },
5954 { Bad_Opcode },
5955 { MOD_TABLE (MOD_VEX_0F385A_PREFIX_2) },
5956 },
5957
5958 /* PREFIX_VEX_0F3878 */
5959 {
5960 { Bad_Opcode },
5961 { Bad_Opcode },
5962 { VEX_W_TABLE (VEX_W_0F3878_P_2) },
5963 },
5964
5965 /* PREFIX_VEX_0F3879 */
5966 {
5967 { Bad_Opcode },
5968 { Bad_Opcode },
5969 { VEX_W_TABLE (VEX_W_0F3879_P_2) },
5970 },
5971
5972 /* PREFIX_VEX_0F388C */
5973 {
5974 { Bad_Opcode },
5975 { Bad_Opcode },
f7002f42 5976 { MOD_TABLE (MOD_VEX_0F388C_PREFIX_2) },
6c30d220
L
5977 },
5978
5979 /* PREFIX_VEX_0F388E */
5980 {
5981 { Bad_Opcode },
5982 { Bad_Opcode },
f7002f42 5983 { MOD_TABLE (MOD_VEX_0F388E_PREFIX_2) },
6c30d220
L
5984 },
5985
5986 /* PREFIX_VEX_0F3890 */
5987 {
5988 { Bad_Opcode },
5989 { Bad_Opcode },
bf890a93 5990 { "vpgatherd%LW", { XM, MVexVSIBDWpX, Vex }, 0 },
6c30d220
L
5991 },
5992
5993 /* PREFIX_VEX_0F3891 */
5994 {
5995 { Bad_Opcode },
5996 { Bad_Opcode },
bf890a93 5997 { "vpgatherq%LW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ }, 0 },
6c30d220
L
5998 },
5999
6000 /* PREFIX_VEX_0F3892 */
6001 {
6002 { Bad_Opcode },
6003 { Bad_Opcode },
bf890a93 6004 { "vgatherdp%XW", { XM, MVexVSIBDWpX, Vex }, 0 },
6c30d220
L
6005 },
6006
6007 /* PREFIX_VEX_0F3893 */
6008 {
6009 { Bad_Opcode },
6010 { Bad_Opcode },
bf890a93 6011 { "vgatherqp%XW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ }, 0 },
6c30d220
L
6012 },
6013
592a252b 6014 /* PREFIX_VEX_0F3896 */
a5ff0eb2 6015 {
592d1631
L
6016 { Bad_Opcode },
6017 { Bad_Opcode },
bf890a93 6018 { "vfmaddsub132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6019 },
6020
592a252b 6021 /* PREFIX_VEX_0F3897 */
a5ff0eb2 6022 {
592d1631
L
6023 { Bad_Opcode },
6024 { Bad_Opcode },
bf890a93 6025 { "vfmsubadd132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6026 },
6027
592a252b 6028 /* PREFIX_VEX_0F3898 */
a5ff0eb2 6029 {
592d1631
L
6030 { Bad_Opcode },
6031 { Bad_Opcode },
bf890a93 6032 { "vfmadd132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6033 },
6034
592a252b 6035 /* PREFIX_VEX_0F3899 */
a5ff0eb2 6036 {
592d1631
L
6037 { Bad_Opcode },
6038 { Bad_Opcode },
bf890a93 6039 { "vfmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
a5ff0eb2
L
6040 },
6041
592a252b 6042 /* PREFIX_VEX_0F389A */
a5ff0eb2 6043 {
592d1631
L
6044 { Bad_Opcode },
6045 { Bad_Opcode },
bf890a93 6046 { "vfmsub132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6047 },
6048
592a252b 6049 /* PREFIX_VEX_0F389B */
c0f3af97 6050 {
592d1631
L
6051 { Bad_Opcode },
6052 { Bad_Opcode },
bf890a93 6053 { "vfmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6054 },
6055
592a252b 6056 /* PREFIX_VEX_0F389C */
c0f3af97 6057 {
592d1631
L
6058 { Bad_Opcode },
6059 { Bad_Opcode },
bf890a93 6060 { "vfnmadd132p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6061 },
6062
592a252b 6063 /* PREFIX_VEX_0F389D */
c0f3af97 6064 {
592d1631
L
6065 { Bad_Opcode },
6066 { Bad_Opcode },
bf890a93 6067 { "vfnmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6068 },
6069
592a252b 6070 /* PREFIX_VEX_0F389E */
c0f3af97 6071 {
592d1631
L
6072 { Bad_Opcode },
6073 { Bad_Opcode },
bf890a93 6074 { "vfnmsub132p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6075 },
6076
592a252b 6077 /* PREFIX_VEX_0F389F */
c0f3af97 6078 {
592d1631
L
6079 { Bad_Opcode },
6080 { Bad_Opcode },
bf890a93 6081 { "vfnmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6082 },
6083
592a252b 6084 /* PREFIX_VEX_0F38A6 */
c0f3af97 6085 {
592d1631
L
6086 { Bad_Opcode },
6087 { Bad_Opcode },
bf890a93 6088 { "vfmaddsub213p%XW", { XM, Vex, EXx }, 0 },
592d1631 6089 { Bad_Opcode },
c0f3af97
L
6090 },
6091
592a252b 6092 /* PREFIX_VEX_0F38A7 */
c0f3af97 6093 {
592d1631
L
6094 { Bad_Opcode },
6095 { Bad_Opcode },
bf890a93 6096 { "vfmsubadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6097 },
6098
592a252b 6099 /* PREFIX_VEX_0F38A8 */
c0f3af97 6100 {
592d1631
L
6101 { Bad_Opcode },
6102 { Bad_Opcode },
bf890a93 6103 { "vfmadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6104 },
6105
592a252b 6106 /* PREFIX_VEX_0F38A9 */
c0f3af97 6107 {
592d1631
L
6108 { Bad_Opcode },
6109 { Bad_Opcode },
bf890a93 6110 { "vfmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6111 },
6112
592a252b 6113 /* PREFIX_VEX_0F38AA */
c0f3af97 6114 {
592d1631
L
6115 { Bad_Opcode },
6116 { Bad_Opcode },
bf890a93 6117 { "vfmsub213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6118 },
6119
592a252b 6120 /* PREFIX_VEX_0F38AB */
c0f3af97 6121 {
592d1631
L
6122 { Bad_Opcode },
6123 { Bad_Opcode },
bf890a93 6124 { "vfmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6125 },
6126
592a252b 6127 /* PREFIX_VEX_0F38AC */
c0f3af97 6128 {
592d1631
L
6129 { Bad_Opcode },
6130 { Bad_Opcode },
bf890a93 6131 { "vfnmadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6132 },
6133
592a252b 6134 /* PREFIX_VEX_0F38AD */
c0f3af97 6135 {
592d1631
L
6136 { Bad_Opcode },
6137 { Bad_Opcode },
bf890a93 6138 { "vfnmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6139 },
6140
592a252b 6141 /* PREFIX_VEX_0F38AE */
c0f3af97 6142 {
592d1631
L
6143 { Bad_Opcode },
6144 { Bad_Opcode },
bf890a93 6145 { "vfnmsub213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6146 },
6147
592a252b 6148 /* PREFIX_VEX_0F38AF */
c0f3af97 6149 {
592d1631
L
6150 { Bad_Opcode },
6151 { Bad_Opcode },
bf890a93 6152 { "vfnmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6153 },
6154
592a252b 6155 /* PREFIX_VEX_0F38B6 */
c0f3af97 6156 {
592d1631
L
6157 { Bad_Opcode },
6158 { Bad_Opcode },
bf890a93 6159 { "vfmaddsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6160 },
6161
592a252b 6162 /* PREFIX_VEX_0F38B7 */
c0f3af97 6163 {
592d1631
L
6164 { Bad_Opcode },
6165 { Bad_Opcode },
bf890a93 6166 { "vfmsubadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6167 },
6168
592a252b 6169 /* PREFIX_VEX_0F38B8 */
c0f3af97 6170 {
592d1631
L
6171 { Bad_Opcode },
6172 { Bad_Opcode },
bf890a93 6173 { "vfmadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6174 },
6175
592a252b 6176 /* PREFIX_VEX_0F38B9 */
c0f3af97 6177 {
592d1631
L
6178 { Bad_Opcode },
6179 { Bad_Opcode },
bf890a93 6180 { "vfmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6181 },
6182
592a252b 6183 /* PREFIX_VEX_0F38BA */
c0f3af97 6184 {
592d1631
L
6185 { Bad_Opcode },
6186 { Bad_Opcode },
bf890a93 6187 { "vfmsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6188 },
6189
592a252b 6190 /* PREFIX_VEX_0F38BB */
c0f3af97 6191 {
592d1631
L
6192 { Bad_Opcode },
6193 { Bad_Opcode },
bf890a93 6194 { "vfmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6195 },
6196
592a252b 6197 /* PREFIX_VEX_0F38BC */
c0f3af97 6198 {
592d1631
L
6199 { Bad_Opcode },
6200 { Bad_Opcode },
bf890a93 6201 { "vfnmadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6202 },
6203
592a252b 6204 /* PREFIX_VEX_0F38BD */
c0f3af97 6205 {
592d1631
L
6206 { Bad_Opcode },
6207 { Bad_Opcode },
bf890a93 6208 { "vfnmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6209 },
6210
592a252b 6211 /* PREFIX_VEX_0F38BE */
c0f3af97 6212 {
592d1631
L
6213 { Bad_Opcode },
6214 { Bad_Opcode },
bf890a93 6215 { "vfnmsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6216 },
6217
592a252b 6218 /* PREFIX_VEX_0F38BF */
c0f3af97 6219 {
592d1631
L
6220 { Bad_Opcode },
6221 { Bad_Opcode },
bf890a93 6222 { "vfnmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6223 },
6224
48521003
IT
6225 /* PREFIX_VEX_0F38CF */
6226 {
6227 { Bad_Opcode },
6228 { Bad_Opcode },
6229 { VEX_W_TABLE (VEX_W_0F38CF_P_2) },
6230 },
6231
592a252b 6232 /* PREFIX_VEX_0F38DB */
c0f3af97 6233 {
592d1631
L
6234 { Bad_Opcode },
6235 { Bad_Opcode },
592a252b 6236 { VEX_LEN_TABLE (VEX_LEN_0F38DB_P_2) },
c0f3af97
L
6237 },
6238
592a252b 6239 /* PREFIX_VEX_0F38DC */
c0f3af97 6240 {
592d1631
L
6241 { Bad_Opcode },
6242 { Bad_Opcode },
8dcf1fad 6243 { "vaesenc", { XM, Vex, EXx }, 0 },
c0f3af97
L
6244 },
6245
592a252b 6246 /* PREFIX_VEX_0F38DD */
c0f3af97 6247 {
592d1631
L
6248 { Bad_Opcode },
6249 { Bad_Opcode },
8dcf1fad 6250 { "vaesenclast", { XM, Vex, EXx }, 0 },
c0f3af97
L
6251 },
6252
592a252b 6253 /* PREFIX_VEX_0F38DE */
c0f3af97 6254 {
592d1631
L
6255 { Bad_Opcode },
6256 { Bad_Opcode },
8dcf1fad 6257 { "vaesdec", { XM, Vex, EXx }, 0 },
c0f3af97
L
6258 },
6259
592a252b 6260 /* PREFIX_VEX_0F38DF */
c0f3af97 6261 {
592d1631
L
6262 { Bad_Opcode },
6263 { Bad_Opcode },
8dcf1fad 6264 { "vaesdeclast", { XM, Vex, EXx }, 0 },
c0f3af97
L
6265 },
6266
f12dc422
L
6267 /* PREFIX_VEX_0F38F2 */
6268 {
6269 { VEX_LEN_TABLE (VEX_LEN_0F38F2_P_0) },
6270 },
6271
6272 /* PREFIX_VEX_0F38F3_REG_1 */
6273 {
6274 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_1_P_0) },
6275 },
6276
6277 /* PREFIX_VEX_0F38F3_REG_2 */
6278 {
6279 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_2_P_0) },
6280 },
6281
6282 /* PREFIX_VEX_0F38F3_REG_3 */
6283 {
6284 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_3_P_0) },
6285 },
6286
6c30d220
L
6287 /* PREFIX_VEX_0F38F5 */
6288 {
6289 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_0) },
6290 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_1) },
6291 { Bad_Opcode },
6292 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_3) },
6293 },
6294
6295 /* PREFIX_VEX_0F38F6 */
6296 {
6297 { Bad_Opcode },
6298 { Bad_Opcode },
6299 { Bad_Opcode },
6300 { VEX_LEN_TABLE (VEX_LEN_0F38F6_P_3) },
6301 },
6302
f12dc422
L
6303 /* PREFIX_VEX_0F38F7 */
6304 {
6305 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_0) },
6c30d220
L
6306 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_1) },
6307 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_2) },
6308 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_3) },
6309 },
6310
6311 /* PREFIX_VEX_0F3A00 */
6312 {
6313 { Bad_Opcode },
6314 { Bad_Opcode },
6315 { VEX_LEN_TABLE (VEX_LEN_0F3A00_P_2) },
6316 },
6317
6318 /* PREFIX_VEX_0F3A01 */
6319 {
6320 { Bad_Opcode },
6321 { Bad_Opcode },
6322 { VEX_LEN_TABLE (VEX_LEN_0F3A01_P_2) },
6323 },
6324
6325 /* PREFIX_VEX_0F3A02 */
6326 {
6327 { Bad_Opcode },
6328 { Bad_Opcode },
6329 { VEX_W_TABLE (VEX_W_0F3A02_P_2) },
f12dc422
L
6330 },
6331
592a252b 6332 /* PREFIX_VEX_0F3A04 */
c0f3af97 6333 {
592d1631
L
6334 { Bad_Opcode },
6335 { Bad_Opcode },
592a252b 6336 { VEX_W_TABLE (VEX_W_0F3A04_P_2) },
c0f3af97
L
6337 },
6338
592a252b 6339 /* PREFIX_VEX_0F3A05 */
c0f3af97 6340 {
592d1631
L
6341 { Bad_Opcode },
6342 { Bad_Opcode },
592a252b 6343 { VEX_W_TABLE (VEX_W_0F3A05_P_2) },
c0f3af97
L
6344 },
6345
592a252b 6346 /* PREFIX_VEX_0F3A06 */
c0f3af97 6347 {
592d1631
L
6348 { Bad_Opcode },
6349 { Bad_Opcode },
592a252b 6350 { VEX_LEN_TABLE (VEX_LEN_0F3A06_P_2) },
c0f3af97
L
6351 },
6352
592a252b 6353 /* PREFIX_VEX_0F3A08 */
c0f3af97 6354 {
592d1631
L
6355 { Bad_Opcode },
6356 { Bad_Opcode },
ec6f095a 6357 { "vroundps", { XM, EXx, Ib }, 0 },
c0f3af97
L
6358 },
6359
592a252b 6360 /* PREFIX_VEX_0F3A09 */
c0f3af97 6361 {
592d1631
L
6362 { Bad_Opcode },
6363 { Bad_Opcode },
ec6f095a 6364 { "vroundpd", { XM, EXx, Ib }, 0 },
c0f3af97
L
6365 },
6366
592a252b 6367 /* PREFIX_VEX_0F3A0A */
c0f3af97 6368 {
592d1631
L
6369 { Bad_Opcode },
6370 { Bad_Opcode },
ec6f095a 6371 { "vroundss", { XMScalar, VexScalar, EXdScalar, Ib }, 0 },
0bfee649
L
6372 },
6373
592a252b 6374 /* PREFIX_VEX_0F3A0B */
0bfee649 6375 {
592d1631
L
6376 { Bad_Opcode },
6377 { Bad_Opcode },
ec6f095a 6378 { "vroundsd", { XMScalar, VexScalar, EXqScalar, Ib }, 0 },
0bfee649
L
6379 },
6380
592a252b 6381 /* PREFIX_VEX_0F3A0C */
0bfee649 6382 {
592d1631
L
6383 { Bad_Opcode },
6384 { Bad_Opcode },
ec6f095a 6385 { "vblendps", { XM, Vex, EXx, Ib }, 0 },
0bfee649
L
6386 },
6387
592a252b 6388 /* PREFIX_VEX_0F3A0D */
0bfee649 6389 {
592d1631
L
6390 { Bad_Opcode },
6391 { Bad_Opcode },
ec6f095a 6392 { "vblendpd", { XM, Vex, EXx, Ib }, 0 },
c0f3af97
L
6393 },
6394
592a252b 6395 /* PREFIX_VEX_0F3A0E */
0bfee649 6396 {
592d1631
L
6397 { Bad_Opcode },
6398 { Bad_Opcode },
ec6f095a 6399 { "vpblendw", { XM, Vex, EXx, Ib }, 0 },
0bfee649
L
6400 },
6401
592a252b 6402 /* PREFIX_VEX_0F3A0F */
0bfee649 6403 {
592d1631
L
6404 { Bad_Opcode },
6405 { Bad_Opcode },
ec6f095a 6406 { "vpalignr", { XM, Vex, EXx, Ib }, 0 },
0bfee649
L
6407 },
6408
592a252b 6409 /* PREFIX_VEX_0F3A14 */
0bfee649 6410 {
592d1631
L
6411 { Bad_Opcode },
6412 { Bad_Opcode },
592a252b 6413 { VEX_LEN_TABLE (VEX_LEN_0F3A14_P_2) },
0bfee649
L
6414 },
6415
592a252b 6416 /* PREFIX_VEX_0F3A15 */
0bfee649 6417 {
592d1631
L
6418 { Bad_Opcode },
6419 { Bad_Opcode },
592a252b 6420 { VEX_LEN_TABLE (VEX_LEN_0F3A15_P_2) },
0bfee649
L
6421 },
6422
592a252b 6423 /* PREFIX_VEX_0F3A16 */
c0f3af97 6424 {
592d1631
L
6425 { Bad_Opcode },
6426 { Bad_Opcode },
592a252b 6427 { VEX_LEN_TABLE (VEX_LEN_0F3A16_P_2) },
c0f3af97
L
6428 },
6429
592a252b 6430 /* PREFIX_VEX_0F3A17 */
c0f3af97 6431 {
592d1631
L
6432 { Bad_Opcode },
6433 { Bad_Opcode },
592a252b 6434 { VEX_LEN_TABLE (VEX_LEN_0F3A17_P_2) },
c0f3af97
L
6435 },
6436
592a252b 6437 /* PREFIX_VEX_0F3A18 */
c0f3af97 6438 {
592d1631
L
6439 { Bad_Opcode },
6440 { Bad_Opcode },
592a252b 6441 { VEX_LEN_TABLE (VEX_LEN_0F3A18_P_2) },
c0f3af97
L
6442 },
6443
592a252b 6444 /* PREFIX_VEX_0F3A19 */
c0f3af97 6445 {
592d1631
L
6446 { Bad_Opcode },
6447 { Bad_Opcode },
592a252b 6448 { VEX_LEN_TABLE (VEX_LEN_0F3A19_P_2) },
c0f3af97
L
6449 },
6450
592a252b 6451 /* PREFIX_VEX_0F3A1D */
c7b8aa3a
L
6452 {
6453 { Bad_Opcode },
6454 { Bad_Opcode },
bf890a93 6455 { "vcvtps2ph", { EXxmmq, XM, Ib }, 0 },
c7b8aa3a
L
6456 },
6457
592a252b 6458 /* PREFIX_VEX_0F3A20 */
c0f3af97 6459 {
592d1631
L
6460 { Bad_Opcode },
6461 { Bad_Opcode },
592a252b 6462 { VEX_LEN_TABLE (VEX_LEN_0F3A20_P_2) },
c0f3af97
L
6463 },
6464
592a252b 6465 /* PREFIX_VEX_0F3A21 */
c0f3af97 6466 {
592d1631
L
6467 { Bad_Opcode },
6468 { Bad_Opcode },
592a252b 6469 { VEX_LEN_TABLE (VEX_LEN_0F3A21_P_2) },
c0f3af97
L
6470 },
6471
592a252b 6472 /* PREFIX_VEX_0F3A22 */
0bfee649 6473 {
592d1631
L
6474 { Bad_Opcode },
6475 { Bad_Opcode },
592a252b 6476 { VEX_LEN_TABLE (VEX_LEN_0F3A22_P_2) },
0bfee649
L
6477 },
6478
43234a1e
L
6479 /* PREFIX_VEX_0F3A30 */
6480 {
6481 { Bad_Opcode },
6482 { Bad_Opcode },
6483 { VEX_LEN_TABLE (VEX_LEN_0F3A30_P_2) },
6484 },
6485
1ba585e8
IT
6486 /* PREFIX_VEX_0F3A31 */
6487 {
6488 { Bad_Opcode },
6489 { Bad_Opcode },
6490 { VEX_LEN_TABLE (VEX_LEN_0F3A31_P_2) },
6491 },
6492
43234a1e
L
6493 /* PREFIX_VEX_0F3A32 */
6494 {
6495 { Bad_Opcode },
6496 { Bad_Opcode },
6497 { VEX_LEN_TABLE (VEX_LEN_0F3A32_P_2) },
6498 },
6499
1ba585e8
IT
6500 /* PREFIX_VEX_0F3A33 */
6501 {
6502 { Bad_Opcode },
6503 { Bad_Opcode },
6504 { VEX_LEN_TABLE (VEX_LEN_0F3A33_P_2) },
6505 },
6506
6c30d220
L
6507 /* PREFIX_VEX_0F3A38 */
6508 {
6509 { Bad_Opcode },
6510 { Bad_Opcode },
6511 { VEX_LEN_TABLE (VEX_LEN_0F3A38_P_2) },
6512 },
6513
6514 /* PREFIX_VEX_0F3A39 */
6515 {
6516 { Bad_Opcode },
6517 { Bad_Opcode },
6518 { VEX_LEN_TABLE (VEX_LEN_0F3A39_P_2) },
6519 },
6520
592a252b 6521 /* PREFIX_VEX_0F3A40 */
c0f3af97 6522 {
592d1631
L
6523 { Bad_Opcode },
6524 { Bad_Opcode },
ec6f095a 6525 { "vdpps", { XM, Vex, EXx, Ib }, 0 },
c0f3af97
L
6526 },
6527
592a252b 6528 /* PREFIX_VEX_0F3A41 */
c0f3af97 6529 {
592d1631
L
6530 { Bad_Opcode },
6531 { Bad_Opcode },
592a252b 6532 { VEX_LEN_TABLE (VEX_LEN_0F3A41_P_2) },
c0f3af97
L
6533 },
6534
592a252b 6535 /* PREFIX_VEX_0F3A42 */
c0f3af97 6536 {
592d1631
L
6537 { Bad_Opcode },
6538 { Bad_Opcode },
ec6f095a 6539 { "vmpsadbw", { XM, Vex, EXx, Ib }, 0 },
c0f3af97
L
6540 },
6541
592a252b 6542 /* PREFIX_VEX_0F3A44 */
ce2f5b3c 6543 {
592d1631
L
6544 { Bad_Opcode },
6545 { Bad_Opcode },
ff1982d5 6546 { "vpclmulqdq", { XM, Vex, EXx, PCLMUL }, 0 },
ce2f5b3c
L
6547 },
6548
6c30d220
L
6549 /* PREFIX_VEX_0F3A46 */
6550 {
6551 { Bad_Opcode },
6552 { Bad_Opcode },
6553 { VEX_LEN_TABLE (VEX_LEN_0F3A46_P_2) },
6554 },
6555
592a252b 6556 /* PREFIX_VEX_0F3A48 */
a683cc34
SP
6557 {
6558 { Bad_Opcode },
6559 { Bad_Opcode },
592a252b 6560 { VEX_W_TABLE (VEX_W_0F3A48_P_2) },
a683cc34
SP
6561 },
6562
592a252b 6563 /* PREFIX_VEX_0F3A49 */
a683cc34
SP
6564 {
6565 { Bad_Opcode },
6566 { Bad_Opcode },
592a252b 6567 { VEX_W_TABLE (VEX_W_0F3A49_P_2) },
a683cc34
SP
6568 },
6569
592a252b 6570 /* PREFIX_VEX_0F3A4A */
c0f3af97 6571 {
592d1631
L
6572 { Bad_Opcode },
6573 { Bad_Opcode },
592a252b 6574 { VEX_W_TABLE (VEX_W_0F3A4A_P_2) },
c0f3af97
L
6575 },
6576
592a252b 6577 /* PREFIX_VEX_0F3A4B */
c0f3af97 6578 {
592d1631
L
6579 { Bad_Opcode },
6580 { Bad_Opcode },
592a252b 6581 { VEX_W_TABLE (VEX_W_0F3A4B_P_2) },
c0f3af97
L
6582 },
6583
592a252b 6584 /* PREFIX_VEX_0F3A4C */
c0f3af97 6585 {
592d1631
L
6586 { Bad_Opcode },
6587 { Bad_Opcode },
6c30d220 6588 { VEX_W_TABLE (VEX_W_0F3A4C_P_2) },
c0f3af97
L
6589 },
6590
592a252b 6591 /* PREFIX_VEX_0F3A5C */
922d8de8 6592 {
592d1631
L
6593 { Bad_Opcode },
6594 { Bad_Opcode },
3a2430e0 6595 { "vfmaddsubps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6596 },
6597
592a252b 6598 /* PREFIX_VEX_0F3A5D */
922d8de8 6599 {
592d1631
L
6600 { Bad_Opcode },
6601 { Bad_Opcode },
3a2430e0 6602 { "vfmaddsubpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6603 },
6604
592a252b 6605 /* PREFIX_VEX_0F3A5E */
922d8de8 6606 {
592d1631
L
6607 { Bad_Opcode },
6608 { Bad_Opcode },
3a2430e0 6609 { "vfmsubaddps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6610 },
6611
592a252b 6612 /* PREFIX_VEX_0F3A5F */
922d8de8 6613 {
592d1631
L
6614 { Bad_Opcode },
6615 { Bad_Opcode },
3a2430e0 6616 { "vfmsubaddpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6617 },
6618
592a252b 6619 /* PREFIX_VEX_0F3A60 */
c0f3af97 6620 {
592d1631
L
6621 { Bad_Opcode },
6622 { Bad_Opcode },
592a252b 6623 { VEX_LEN_TABLE (VEX_LEN_0F3A60_P_2) },
592d1631 6624 { Bad_Opcode },
c0f3af97
L
6625 },
6626
592a252b 6627 /* PREFIX_VEX_0F3A61 */
c0f3af97 6628 {
592d1631
L
6629 { Bad_Opcode },
6630 { Bad_Opcode },
592a252b 6631 { VEX_LEN_TABLE (VEX_LEN_0F3A61_P_2) },
c0f3af97
L
6632 },
6633
592a252b 6634 /* PREFIX_VEX_0F3A62 */
c0f3af97 6635 {
592d1631
L
6636 { Bad_Opcode },
6637 { Bad_Opcode },
592a252b 6638 { VEX_LEN_TABLE (VEX_LEN_0F3A62_P_2) },
c0f3af97
L
6639 },
6640
592a252b 6641 /* PREFIX_VEX_0F3A63 */
c0f3af97 6642 {
592d1631
L
6643 { Bad_Opcode },
6644 { Bad_Opcode },
592a252b 6645 { VEX_LEN_TABLE (VEX_LEN_0F3A63_P_2) },
c0f3af97 6646 },
a5ff0eb2 6647
592a252b 6648 /* PREFIX_VEX_0F3A68 */
922d8de8 6649 {
592d1631
L
6650 { Bad_Opcode },
6651 { Bad_Opcode },
3a2430e0 6652 { "vfmaddps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6653 },
6654
592a252b 6655 /* PREFIX_VEX_0F3A69 */
922d8de8 6656 {
592d1631
L
6657 { Bad_Opcode },
6658 { Bad_Opcode },
3a2430e0 6659 { "vfmaddpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6660 },
6661
592a252b 6662 /* PREFIX_VEX_0F3A6A */
922d8de8 6663 {
592d1631
L
6664 { Bad_Opcode },
6665 { Bad_Opcode },
592a252b 6666 { VEX_LEN_TABLE (VEX_LEN_0F3A6A_P_2) },
922d8de8
DR
6667 },
6668
592a252b 6669 /* PREFIX_VEX_0F3A6B */
922d8de8 6670 {
592d1631
L
6671 { Bad_Opcode },
6672 { Bad_Opcode },
592a252b 6673 { VEX_LEN_TABLE (VEX_LEN_0F3A6B_P_2) },
922d8de8
DR
6674 },
6675
592a252b 6676 /* PREFIX_VEX_0F3A6C */
922d8de8 6677 {
592d1631
L
6678 { Bad_Opcode },
6679 { Bad_Opcode },
3a2430e0 6680 { "vfmsubps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6681 },
6682
592a252b 6683 /* PREFIX_VEX_0F3A6D */
922d8de8 6684 {
592d1631
L
6685 { Bad_Opcode },
6686 { Bad_Opcode },
3a2430e0 6687 { "vfmsubpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6688 },
6689
592a252b 6690 /* PREFIX_VEX_0F3A6E */
922d8de8 6691 {
592d1631
L
6692 { Bad_Opcode },
6693 { Bad_Opcode },
592a252b 6694 { VEX_LEN_TABLE (VEX_LEN_0F3A6E_P_2) },
922d8de8
DR
6695 },
6696
592a252b 6697 /* PREFIX_VEX_0F3A6F */
922d8de8 6698 {
592d1631
L
6699 { Bad_Opcode },
6700 { Bad_Opcode },
592a252b 6701 { VEX_LEN_TABLE (VEX_LEN_0F3A6F_P_2) },
922d8de8
DR
6702 },
6703
592a252b 6704 /* PREFIX_VEX_0F3A78 */
922d8de8 6705 {
592d1631
L
6706 { Bad_Opcode },
6707 { Bad_Opcode },
3a2430e0 6708 { "vfnmaddps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6709 },
6710
592a252b 6711 /* PREFIX_VEX_0F3A79 */
922d8de8 6712 {
592d1631
L
6713 { Bad_Opcode },
6714 { Bad_Opcode },
3a2430e0 6715 { "vfnmaddpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6716 },
6717
592a252b 6718 /* PREFIX_VEX_0F3A7A */
922d8de8 6719 {
592d1631
L
6720 { Bad_Opcode },
6721 { Bad_Opcode },
592a252b 6722 { VEX_LEN_TABLE (VEX_LEN_0F3A7A_P_2) },
922d8de8
DR
6723 },
6724
592a252b 6725 /* PREFIX_VEX_0F3A7B */
922d8de8 6726 {
592d1631
L
6727 { Bad_Opcode },
6728 { Bad_Opcode },
592a252b 6729 { VEX_LEN_TABLE (VEX_LEN_0F3A7B_P_2) },
922d8de8
DR
6730 },
6731
592a252b 6732 /* PREFIX_VEX_0F3A7C */
922d8de8 6733 {
592d1631
L
6734 { Bad_Opcode },
6735 { Bad_Opcode },
3a2430e0 6736 { "vfnmsubps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
592d1631 6737 { Bad_Opcode },
922d8de8
DR
6738 },
6739
592a252b 6740 /* PREFIX_VEX_0F3A7D */
922d8de8 6741 {
592d1631
L
6742 { Bad_Opcode },
6743 { Bad_Opcode },
3a2430e0 6744 { "vfnmsubpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6745 },
6746
592a252b 6747 /* PREFIX_VEX_0F3A7E */
922d8de8 6748 {
592d1631
L
6749 { Bad_Opcode },
6750 { Bad_Opcode },
592a252b 6751 { VEX_LEN_TABLE (VEX_LEN_0F3A7E_P_2) },
922d8de8
DR
6752 },
6753
592a252b 6754 /* PREFIX_VEX_0F3A7F */
922d8de8 6755 {
592d1631
L
6756 { Bad_Opcode },
6757 { Bad_Opcode },
592a252b 6758 { VEX_LEN_TABLE (VEX_LEN_0F3A7F_P_2) },
922d8de8
DR
6759 },
6760
48521003
IT
6761 /* PREFIX_VEX_0F3ACE */
6762 {
6763 { Bad_Opcode },
6764 { Bad_Opcode },
6765 { VEX_W_TABLE (VEX_W_0F3ACE_P_2) },
6766 },
6767
6768 /* PREFIX_VEX_0F3ACF */
6769 {
6770 { Bad_Opcode },
6771 { Bad_Opcode },
6772 { VEX_W_TABLE (VEX_W_0F3ACF_P_2) },
6773 },
6774
592a252b 6775 /* PREFIX_VEX_0F3ADF */
a5ff0eb2 6776 {
592d1631
L
6777 { Bad_Opcode },
6778 { Bad_Opcode },
592a252b 6779 { VEX_LEN_TABLE (VEX_LEN_0F3ADF_P_2) },
a5ff0eb2 6780 },
6c30d220
L
6781
6782 /* PREFIX_VEX_0F3AF0 */
6783 {
6784 { Bad_Opcode },
6785 { Bad_Opcode },
6786 { Bad_Opcode },
6787 { VEX_LEN_TABLE (VEX_LEN_0F3AF0_P_3) },
6788 },
43234a1e 6789
ad692897 6790#include "i386-dis-evex-prefix.h"
c0f3af97
L
6791};
6792
6793static const struct dis386 x86_64_table[][2] = {
6794 /* X86_64_06 */
6795 {
bf890a93 6796 { "pushP", { es }, 0 },
c0f3af97
L
6797 },
6798
6799 /* X86_64_07 */
6800 {
bf890a93 6801 { "popP", { es }, 0 },
c0f3af97
L
6802 },
6803
6804 /* X86_64_0D */
6805 {
bf890a93 6806 { "pushP", { cs }, 0 },
c0f3af97
L
6807 },
6808
6809 /* X86_64_16 */
6810 {
bf890a93 6811 { "pushP", { ss }, 0 },
c0f3af97
L
6812 },
6813
6814 /* X86_64_17 */
6815 {
bf890a93 6816 { "popP", { ss }, 0 },
c0f3af97
L
6817 },
6818
6819 /* X86_64_1E */
6820 {
bf890a93 6821 { "pushP", { ds }, 0 },
c0f3af97
L
6822 },
6823
6824 /* X86_64_1F */
6825 {
bf890a93 6826 { "popP", { ds }, 0 },
c0f3af97
L
6827 },
6828
6829 /* X86_64_27 */
6830 {
bf890a93 6831 { "daa", { XX }, 0 },
c0f3af97
L
6832 },
6833
6834 /* X86_64_2F */
6835 {
bf890a93 6836 { "das", { XX }, 0 },
c0f3af97
L
6837 },
6838
6839 /* X86_64_37 */
6840 {
bf890a93 6841 { "aaa", { XX }, 0 },
c0f3af97
L
6842 },
6843
6844 /* X86_64_3F */
6845 {
bf890a93 6846 { "aas", { XX }, 0 },
c0f3af97
L
6847 },
6848
6849 /* X86_64_60 */
6850 {
bf890a93 6851 { "pushaP", { XX }, 0 },
c0f3af97
L
6852 },
6853
6854 /* X86_64_61 */
6855 {
bf890a93 6856 { "popaP", { XX }, 0 },
c0f3af97
L
6857 },
6858
6859 /* X86_64_62 */
6860 {
6861 { MOD_TABLE (MOD_62_32BIT) },
43234a1e 6862 { EVEX_TABLE (EVEX_0F) },
c0f3af97
L
6863 },
6864
6865 /* X86_64_63 */
6866 {
bf890a93
IT
6867 { "arpl", { Ew, Gw }, 0 },
6868 { "movs{lq|xd}", { Gv, Ed }, 0 },
c0f3af97
L
6869 },
6870
6871 /* X86_64_6D */
6872 {
bf890a93
IT
6873 { "ins{R|}", { Yzr, indirDX }, 0 },
6874 { "ins{G|}", { Yzr, indirDX }, 0 },
c0f3af97
L
6875 },
6876
6877 /* X86_64_6F */
6878 {
bf890a93
IT
6879 { "outs{R|}", { indirDXr, Xz }, 0 },
6880 { "outs{G|}", { indirDXr, Xz }, 0 },
c0f3af97
L
6881 },
6882
d039fef3 6883 /* X86_64_82 */
8b89fe14 6884 {
de194d85 6885 /* Opcode 0x82 is an alias of opcode 0x80 in 32-bit mode. */
d039fef3 6886 { REG_TABLE (REG_80) },
8b89fe14
L
6887 },
6888
c0f3af97
L
6889 /* X86_64_9A */
6890 {
bf890a93 6891 { "Jcall{T|}", { Ap }, 0 },
c0f3af97
L
6892 },
6893
6894 /* X86_64_C4 */
6895 {
6896 { MOD_TABLE (MOD_C4_32BIT) },
6897 { VEX_C4_TABLE (VEX_0F) },
6898 },
6899
6900 /* X86_64_C5 */
6901 {
6902 { MOD_TABLE (MOD_C5_32BIT) },
6903 { VEX_C5_TABLE (VEX_0F) },
6904 },
6905
6906 /* X86_64_CE */
6907 {
bf890a93 6908 { "into", { XX }, 0 },
c0f3af97
L
6909 },
6910
6911 /* X86_64_D4 */
6912 {
bf890a93 6913 { "aam", { Ib }, 0 },
c0f3af97
L
6914 },
6915
6916 /* X86_64_D5 */
6917 {
bf890a93 6918 { "aad", { Ib }, 0 },
c0f3af97
L
6919 },
6920
a72d2af2
L
6921 /* X86_64_E8 */
6922 {
6923 { "callP", { Jv, BND }, 0 },
5db04b09 6924 { "call@", { Jv, BND }, 0 }
a72d2af2
L
6925 },
6926
6927 /* X86_64_E9 */
6928 {
6929 { "jmpP", { Jv, BND }, 0 },
5db04b09 6930 { "jmp@", { Jv, BND }, 0 }
a72d2af2
L
6931 },
6932
c0f3af97
L
6933 /* X86_64_EA */
6934 {
bf890a93 6935 { "Jjmp{T|}", { Ap }, 0 },
c0f3af97
L
6936 },
6937
6938 /* X86_64_0F01_REG_0 */
6939 {
bf890a93
IT
6940 { "sgdt{Q|IQ}", { M }, 0 },
6941 { "sgdt", { M }, 0 },
c0f3af97
L
6942 },
6943
6944 /* X86_64_0F01_REG_1 */
6945 {
bf890a93
IT
6946 { "sidt{Q|IQ}", { M }, 0 },
6947 { "sidt", { M }, 0 },
c0f3af97
L
6948 },
6949
6950 /* X86_64_0F01_REG_2 */
6951 {
bf890a93
IT
6952 { "lgdt{Q|Q}", { M }, 0 },
6953 { "lgdt", { M }, 0 },
c0f3af97
L
6954 },
6955
6956 /* X86_64_0F01_REG_3 */
6957 {
bf890a93
IT
6958 { "lidt{Q|Q}", { M }, 0 },
6959 { "lidt", { M }, 0 },
c0f3af97
L
6960 },
6961};
6962
6963static const struct dis386 three_byte_table[][256] = {
c1e679ec
DR
6964
6965 /* THREE_BYTE_0F38 */
c0f3af97
L
6966 {
6967 /* 00 */
507bd325
L
6968 { "pshufb", { MX, EM }, PREFIX_OPCODE },
6969 { "phaddw", { MX, EM }, PREFIX_OPCODE },
6970 { "phaddd", { MX, EM }, PREFIX_OPCODE },
6971 { "phaddsw", { MX, EM }, PREFIX_OPCODE },
6972 { "pmaddubsw", { MX, EM }, PREFIX_OPCODE },
6973 { "phsubw", { MX, EM }, PREFIX_OPCODE },
6974 { "phsubd", { MX, EM }, PREFIX_OPCODE },
6975 { "phsubsw", { MX, EM }, PREFIX_OPCODE },
c0f3af97 6976 /* 08 */
507bd325
L
6977 { "psignb", { MX, EM }, PREFIX_OPCODE },
6978 { "psignw", { MX, EM }, PREFIX_OPCODE },
6979 { "psignd", { MX, EM }, PREFIX_OPCODE },
6980 { "pmulhrsw", { MX, EM }, PREFIX_OPCODE },
592d1631
L
6981 { Bad_Opcode },
6982 { Bad_Opcode },
6983 { Bad_Opcode },
6984 { Bad_Opcode },
f88c9eb0
SP
6985 /* 10 */
6986 { PREFIX_TABLE (PREFIX_0F3810) },
592d1631
L
6987 { Bad_Opcode },
6988 { Bad_Opcode },
6989 { Bad_Opcode },
f88c9eb0
SP
6990 { PREFIX_TABLE (PREFIX_0F3814) },
6991 { PREFIX_TABLE (PREFIX_0F3815) },
592d1631 6992 { Bad_Opcode },
f88c9eb0
SP
6993 { PREFIX_TABLE (PREFIX_0F3817) },
6994 /* 18 */
592d1631
L
6995 { Bad_Opcode },
6996 { Bad_Opcode },
6997 { Bad_Opcode },
6998 { Bad_Opcode },
507bd325
L
6999 { "pabsb", { MX, EM }, PREFIX_OPCODE },
7000 { "pabsw", { MX, EM }, PREFIX_OPCODE },
7001 { "pabsd", { MX, EM }, PREFIX_OPCODE },
592d1631 7002 { Bad_Opcode },
f88c9eb0
SP
7003 /* 20 */
7004 { PREFIX_TABLE (PREFIX_0F3820) },
7005 { PREFIX_TABLE (PREFIX_0F3821) },
7006 { PREFIX_TABLE (PREFIX_0F3822) },
7007 { PREFIX_TABLE (PREFIX_0F3823) },
7008 { PREFIX_TABLE (PREFIX_0F3824) },
7009 { PREFIX_TABLE (PREFIX_0F3825) },
592d1631
L
7010 { Bad_Opcode },
7011 { Bad_Opcode },
f88c9eb0
SP
7012 /* 28 */
7013 { PREFIX_TABLE (PREFIX_0F3828) },
7014 { PREFIX_TABLE (PREFIX_0F3829) },
7015 { PREFIX_TABLE (PREFIX_0F382A) },
7016 { PREFIX_TABLE (PREFIX_0F382B) },
592d1631
L
7017 { Bad_Opcode },
7018 { Bad_Opcode },
7019 { Bad_Opcode },
7020 { Bad_Opcode },
f88c9eb0
SP
7021 /* 30 */
7022 { PREFIX_TABLE (PREFIX_0F3830) },
7023 { PREFIX_TABLE (PREFIX_0F3831) },
7024 { PREFIX_TABLE (PREFIX_0F3832) },
7025 { PREFIX_TABLE (PREFIX_0F3833) },
7026 { PREFIX_TABLE (PREFIX_0F3834) },
7027 { PREFIX_TABLE (PREFIX_0F3835) },
592d1631 7028 { Bad_Opcode },
f88c9eb0
SP
7029 { PREFIX_TABLE (PREFIX_0F3837) },
7030 /* 38 */
7031 { PREFIX_TABLE (PREFIX_0F3838) },
7032 { PREFIX_TABLE (PREFIX_0F3839) },
7033 { PREFIX_TABLE (PREFIX_0F383A) },
7034 { PREFIX_TABLE (PREFIX_0F383B) },
7035 { PREFIX_TABLE (PREFIX_0F383C) },
7036 { PREFIX_TABLE (PREFIX_0F383D) },
7037 { PREFIX_TABLE (PREFIX_0F383E) },
7038 { PREFIX_TABLE (PREFIX_0F383F) },
7039 /* 40 */
7040 { PREFIX_TABLE (PREFIX_0F3840) },
7041 { PREFIX_TABLE (PREFIX_0F3841) },
592d1631
L
7042 { Bad_Opcode },
7043 { Bad_Opcode },
7044 { Bad_Opcode },
7045 { Bad_Opcode },
7046 { Bad_Opcode },
7047 { Bad_Opcode },
f88c9eb0 7048 /* 48 */
592d1631
L
7049 { Bad_Opcode },
7050 { Bad_Opcode },
7051 { Bad_Opcode },
7052 { Bad_Opcode },
7053 { Bad_Opcode },
7054 { Bad_Opcode },
7055 { Bad_Opcode },
7056 { Bad_Opcode },
f88c9eb0 7057 /* 50 */
592d1631
L
7058 { Bad_Opcode },
7059 { Bad_Opcode },
7060 { Bad_Opcode },
7061 { Bad_Opcode },
7062 { Bad_Opcode },
7063 { Bad_Opcode },
7064 { Bad_Opcode },
7065 { Bad_Opcode },
f88c9eb0 7066 /* 58 */
592d1631
L
7067 { Bad_Opcode },
7068 { Bad_Opcode },
7069 { Bad_Opcode },
7070 { Bad_Opcode },
7071 { Bad_Opcode },
7072 { Bad_Opcode },
7073 { Bad_Opcode },
7074 { Bad_Opcode },
f88c9eb0 7075 /* 60 */
592d1631
L
7076 { Bad_Opcode },
7077 { Bad_Opcode },
7078 { Bad_Opcode },
7079 { Bad_Opcode },
7080 { Bad_Opcode },
7081 { Bad_Opcode },
7082 { Bad_Opcode },
7083 { Bad_Opcode },
f88c9eb0 7084 /* 68 */
592d1631
L
7085 { Bad_Opcode },
7086 { Bad_Opcode },
7087 { Bad_Opcode },
7088 { Bad_Opcode },
7089 { Bad_Opcode },
7090 { Bad_Opcode },
7091 { Bad_Opcode },
7092 { Bad_Opcode },
f88c9eb0 7093 /* 70 */
592d1631
L
7094 { Bad_Opcode },
7095 { Bad_Opcode },
7096 { Bad_Opcode },
7097 { Bad_Opcode },
7098 { Bad_Opcode },
7099 { Bad_Opcode },
7100 { Bad_Opcode },
7101 { Bad_Opcode },
f88c9eb0 7102 /* 78 */
592d1631
L
7103 { Bad_Opcode },
7104 { Bad_Opcode },
7105 { Bad_Opcode },
7106 { Bad_Opcode },
7107 { Bad_Opcode },
7108 { Bad_Opcode },
7109 { Bad_Opcode },
7110 { Bad_Opcode },
f88c9eb0
SP
7111 /* 80 */
7112 { PREFIX_TABLE (PREFIX_0F3880) },
7113 { PREFIX_TABLE (PREFIX_0F3881) },
6c30d220 7114 { PREFIX_TABLE (PREFIX_0F3882) },
592d1631
L
7115 { Bad_Opcode },
7116 { Bad_Opcode },
7117 { Bad_Opcode },
7118 { Bad_Opcode },
7119 { Bad_Opcode },
f88c9eb0 7120 /* 88 */
592d1631
L
7121 { Bad_Opcode },
7122 { Bad_Opcode },
7123 { Bad_Opcode },
7124 { Bad_Opcode },
7125 { Bad_Opcode },
7126 { Bad_Opcode },
7127 { Bad_Opcode },
7128 { Bad_Opcode },
f88c9eb0 7129 /* 90 */
592d1631
L
7130 { Bad_Opcode },
7131 { Bad_Opcode },
7132 { Bad_Opcode },
7133 { Bad_Opcode },
7134 { Bad_Opcode },
7135 { Bad_Opcode },
7136 { Bad_Opcode },
7137 { Bad_Opcode },
f88c9eb0 7138 /* 98 */
592d1631
L
7139 { Bad_Opcode },
7140 { Bad_Opcode },
7141 { Bad_Opcode },
7142 { Bad_Opcode },
7143 { Bad_Opcode },
7144 { Bad_Opcode },
7145 { Bad_Opcode },
7146 { Bad_Opcode },
f88c9eb0 7147 /* a0 */
592d1631
L
7148 { Bad_Opcode },
7149 { Bad_Opcode },
7150 { Bad_Opcode },
7151 { Bad_Opcode },
7152 { Bad_Opcode },
7153 { Bad_Opcode },
7154 { Bad_Opcode },
7155 { Bad_Opcode },
f88c9eb0 7156 /* a8 */
592d1631
L
7157 { Bad_Opcode },
7158 { Bad_Opcode },
7159 { Bad_Opcode },
7160 { Bad_Opcode },
7161 { Bad_Opcode },
7162 { Bad_Opcode },
7163 { Bad_Opcode },
7164 { Bad_Opcode },
f88c9eb0 7165 /* b0 */
592d1631
L
7166 { Bad_Opcode },
7167 { Bad_Opcode },
7168 { Bad_Opcode },
7169 { Bad_Opcode },
7170 { Bad_Opcode },
7171 { Bad_Opcode },
7172 { Bad_Opcode },
7173 { Bad_Opcode },
f88c9eb0 7174 /* b8 */
592d1631
L
7175 { Bad_Opcode },
7176 { Bad_Opcode },
7177 { Bad_Opcode },
7178 { Bad_Opcode },
7179 { Bad_Opcode },
7180 { Bad_Opcode },
7181 { Bad_Opcode },
7182 { Bad_Opcode },
f88c9eb0 7183 /* c0 */
592d1631
L
7184 { Bad_Opcode },
7185 { Bad_Opcode },
7186 { Bad_Opcode },
7187 { Bad_Opcode },
7188 { Bad_Opcode },
7189 { Bad_Opcode },
7190 { Bad_Opcode },
7191 { Bad_Opcode },
f88c9eb0 7192 /* c8 */
a0046408
L
7193 { PREFIX_TABLE (PREFIX_0F38C8) },
7194 { PREFIX_TABLE (PREFIX_0F38C9) },
7195 { PREFIX_TABLE (PREFIX_0F38CA) },
7196 { PREFIX_TABLE (PREFIX_0F38CB) },
7197 { PREFIX_TABLE (PREFIX_0F38CC) },
7198 { PREFIX_TABLE (PREFIX_0F38CD) },
592d1631 7199 { Bad_Opcode },
48521003 7200 { PREFIX_TABLE (PREFIX_0F38CF) },
f88c9eb0 7201 /* d0 */
592d1631
L
7202 { Bad_Opcode },
7203 { Bad_Opcode },
7204 { Bad_Opcode },
7205 { Bad_Opcode },
7206 { Bad_Opcode },
7207 { Bad_Opcode },
7208 { Bad_Opcode },
7209 { Bad_Opcode },
f88c9eb0 7210 /* d8 */
592d1631
L
7211 { Bad_Opcode },
7212 { Bad_Opcode },
7213 { Bad_Opcode },
f88c9eb0
SP
7214 { PREFIX_TABLE (PREFIX_0F38DB) },
7215 { PREFIX_TABLE (PREFIX_0F38DC) },
7216 { PREFIX_TABLE (PREFIX_0F38DD) },
7217 { PREFIX_TABLE (PREFIX_0F38DE) },
7218 { PREFIX_TABLE (PREFIX_0F38DF) },
7219 /* e0 */
592d1631
L
7220 { Bad_Opcode },
7221 { Bad_Opcode },
7222 { Bad_Opcode },
7223 { Bad_Opcode },
7224 { Bad_Opcode },
7225 { Bad_Opcode },
7226 { Bad_Opcode },
7227 { Bad_Opcode },
f88c9eb0 7228 /* e8 */
592d1631
L
7229 { Bad_Opcode },
7230 { Bad_Opcode },
7231 { Bad_Opcode },
7232 { Bad_Opcode },
7233 { Bad_Opcode },
7234 { Bad_Opcode },
7235 { Bad_Opcode },
7236 { Bad_Opcode },
f88c9eb0
SP
7237 /* f0 */
7238 { PREFIX_TABLE (PREFIX_0F38F0) },
7239 { PREFIX_TABLE (PREFIX_0F38F1) },
592d1631
L
7240 { Bad_Opcode },
7241 { Bad_Opcode },
7242 { Bad_Opcode },
603555e5 7243 { PREFIX_TABLE (PREFIX_0F38F5) },
e2e1fcde 7244 { PREFIX_TABLE (PREFIX_0F38F6) },
592d1631 7245 { Bad_Opcode },
f88c9eb0 7246 /* f8 */
c0a30a9f
L
7247 { PREFIX_TABLE (PREFIX_0F38F8) },
7248 { PREFIX_TABLE (PREFIX_0F38F9) },
592d1631
L
7249 { Bad_Opcode },
7250 { Bad_Opcode },
7251 { Bad_Opcode },
7252 { Bad_Opcode },
7253 { Bad_Opcode },
7254 { Bad_Opcode },
f88c9eb0
SP
7255 },
7256 /* THREE_BYTE_0F3A */
7257 {
7258 /* 00 */
592d1631
L
7259 { Bad_Opcode },
7260 { Bad_Opcode },
7261 { Bad_Opcode },
7262 { Bad_Opcode },
7263 { Bad_Opcode },
7264 { Bad_Opcode },
7265 { Bad_Opcode },
7266 { Bad_Opcode },
f88c9eb0
SP
7267 /* 08 */
7268 { PREFIX_TABLE (PREFIX_0F3A08) },
7269 { PREFIX_TABLE (PREFIX_0F3A09) },
7270 { PREFIX_TABLE (PREFIX_0F3A0A) },
7271 { PREFIX_TABLE (PREFIX_0F3A0B) },
7272 { PREFIX_TABLE (PREFIX_0F3A0C) },
7273 { PREFIX_TABLE (PREFIX_0F3A0D) },
7274 { PREFIX_TABLE (PREFIX_0F3A0E) },
507bd325 7275 { "palignr", { MX, EM, Ib }, PREFIX_OPCODE },
f88c9eb0 7276 /* 10 */
592d1631
L
7277 { Bad_Opcode },
7278 { Bad_Opcode },
7279 { Bad_Opcode },
7280 { Bad_Opcode },
f88c9eb0
SP
7281 { PREFIX_TABLE (PREFIX_0F3A14) },
7282 { PREFIX_TABLE (PREFIX_0F3A15) },
7283 { PREFIX_TABLE (PREFIX_0F3A16) },
7284 { PREFIX_TABLE (PREFIX_0F3A17) },
7285 /* 18 */
592d1631
L
7286 { Bad_Opcode },
7287 { Bad_Opcode },
7288 { Bad_Opcode },
7289 { Bad_Opcode },
7290 { Bad_Opcode },
7291 { Bad_Opcode },
7292 { Bad_Opcode },
7293 { Bad_Opcode },
f88c9eb0
SP
7294 /* 20 */
7295 { PREFIX_TABLE (PREFIX_0F3A20) },
7296 { PREFIX_TABLE (PREFIX_0F3A21) },
7297 { PREFIX_TABLE (PREFIX_0F3A22) },
592d1631
L
7298 { Bad_Opcode },
7299 { Bad_Opcode },
7300 { Bad_Opcode },
7301 { Bad_Opcode },
7302 { Bad_Opcode },
f88c9eb0 7303 /* 28 */
592d1631
L
7304 { Bad_Opcode },
7305 { Bad_Opcode },
7306 { Bad_Opcode },
7307 { Bad_Opcode },
7308 { Bad_Opcode },
7309 { Bad_Opcode },
7310 { Bad_Opcode },
7311 { Bad_Opcode },
f88c9eb0 7312 /* 30 */
592d1631
L
7313 { Bad_Opcode },
7314 { Bad_Opcode },
7315 { Bad_Opcode },
7316 { Bad_Opcode },
7317 { Bad_Opcode },
7318 { Bad_Opcode },
7319 { Bad_Opcode },
7320 { Bad_Opcode },
f88c9eb0 7321 /* 38 */
592d1631
L
7322 { Bad_Opcode },
7323 { Bad_Opcode },
7324 { Bad_Opcode },
7325 { Bad_Opcode },
7326 { Bad_Opcode },
7327 { Bad_Opcode },
7328 { Bad_Opcode },
7329 { Bad_Opcode },
f88c9eb0
SP
7330 /* 40 */
7331 { PREFIX_TABLE (PREFIX_0F3A40) },
7332 { PREFIX_TABLE (PREFIX_0F3A41) },
7333 { PREFIX_TABLE (PREFIX_0F3A42) },
592d1631 7334 { Bad_Opcode },
f88c9eb0 7335 { PREFIX_TABLE (PREFIX_0F3A44) },
592d1631
L
7336 { Bad_Opcode },
7337 { Bad_Opcode },
7338 { Bad_Opcode },
f88c9eb0 7339 /* 48 */
592d1631
L
7340 { Bad_Opcode },
7341 { Bad_Opcode },
7342 { Bad_Opcode },
7343 { Bad_Opcode },
7344 { Bad_Opcode },
7345 { Bad_Opcode },
7346 { Bad_Opcode },
7347 { Bad_Opcode },
f88c9eb0 7348 /* 50 */
592d1631
L
7349 { Bad_Opcode },
7350 { Bad_Opcode },
7351 { Bad_Opcode },
7352 { Bad_Opcode },
7353 { Bad_Opcode },
7354 { Bad_Opcode },
7355 { Bad_Opcode },
7356 { Bad_Opcode },
f88c9eb0 7357 /* 58 */
592d1631
L
7358 { Bad_Opcode },
7359 { Bad_Opcode },
7360 { Bad_Opcode },
7361 { Bad_Opcode },
7362 { Bad_Opcode },
7363 { Bad_Opcode },
7364 { Bad_Opcode },
7365 { Bad_Opcode },
f88c9eb0
SP
7366 /* 60 */
7367 { PREFIX_TABLE (PREFIX_0F3A60) },
7368 { PREFIX_TABLE (PREFIX_0F3A61) },
7369 { PREFIX_TABLE (PREFIX_0F3A62) },
7370 { PREFIX_TABLE (PREFIX_0F3A63) },
592d1631
L
7371 { Bad_Opcode },
7372 { Bad_Opcode },
7373 { Bad_Opcode },
7374 { Bad_Opcode },
f88c9eb0 7375 /* 68 */
592d1631
L
7376 { Bad_Opcode },
7377 { Bad_Opcode },
7378 { Bad_Opcode },
7379 { Bad_Opcode },
7380 { Bad_Opcode },
7381 { Bad_Opcode },
7382 { Bad_Opcode },
7383 { Bad_Opcode },
f88c9eb0 7384 /* 70 */
592d1631
L
7385 { Bad_Opcode },
7386 { Bad_Opcode },
7387 { Bad_Opcode },
7388 { Bad_Opcode },
7389 { Bad_Opcode },
7390 { Bad_Opcode },
7391 { Bad_Opcode },
7392 { Bad_Opcode },
f88c9eb0 7393 /* 78 */
592d1631
L
7394 { Bad_Opcode },
7395 { Bad_Opcode },
7396 { Bad_Opcode },
7397 { Bad_Opcode },
7398 { Bad_Opcode },
7399 { Bad_Opcode },
7400 { Bad_Opcode },
7401 { Bad_Opcode },
f88c9eb0 7402 /* 80 */
592d1631
L
7403 { Bad_Opcode },
7404 { Bad_Opcode },
7405 { Bad_Opcode },
7406 { Bad_Opcode },
7407 { Bad_Opcode },
7408 { Bad_Opcode },
7409 { Bad_Opcode },
7410 { Bad_Opcode },
f88c9eb0 7411 /* 88 */
592d1631
L
7412 { Bad_Opcode },
7413 { Bad_Opcode },
7414 { Bad_Opcode },
7415 { Bad_Opcode },
7416 { Bad_Opcode },
7417 { Bad_Opcode },
7418 { Bad_Opcode },
7419 { Bad_Opcode },
f88c9eb0 7420 /* 90 */
592d1631
L
7421 { Bad_Opcode },
7422 { Bad_Opcode },
7423 { Bad_Opcode },
7424 { Bad_Opcode },
7425 { Bad_Opcode },
7426 { Bad_Opcode },
7427 { Bad_Opcode },
7428 { Bad_Opcode },
f88c9eb0 7429 /* 98 */
592d1631
L
7430 { Bad_Opcode },
7431 { Bad_Opcode },
7432 { Bad_Opcode },
7433 { Bad_Opcode },
7434 { Bad_Opcode },
7435 { Bad_Opcode },
7436 { Bad_Opcode },
7437 { Bad_Opcode },
f88c9eb0 7438 /* a0 */
592d1631
L
7439 { Bad_Opcode },
7440 { Bad_Opcode },
7441 { Bad_Opcode },
7442 { Bad_Opcode },
7443 { Bad_Opcode },
7444 { Bad_Opcode },
7445 { Bad_Opcode },
7446 { Bad_Opcode },
f88c9eb0 7447 /* a8 */
592d1631
L
7448 { Bad_Opcode },
7449 { Bad_Opcode },
7450 { Bad_Opcode },
7451 { Bad_Opcode },
7452 { Bad_Opcode },
7453 { Bad_Opcode },
7454 { Bad_Opcode },
7455 { Bad_Opcode },
f88c9eb0 7456 /* b0 */
592d1631
L
7457 { Bad_Opcode },
7458 { Bad_Opcode },
7459 { Bad_Opcode },
7460 { Bad_Opcode },
7461 { Bad_Opcode },
7462 { Bad_Opcode },
7463 { Bad_Opcode },
7464 { Bad_Opcode },
f88c9eb0 7465 /* b8 */
592d1631
L
7466 { Bad_Opcode },
7467 { Bad_Opcode },
7468 { Bad_Opcode },
7469 { Bad_Opcode },
7470 { Bad_Opcode },
7471 { Bad_Opcode },
7472 { Bad_Opcode },
7473 { Bad_Opcode },
f88c9eb0 7474 /* c0 */
592d1631
L
7475 { Bad_Opcode },
7476 { Bad_Opcode },
7477 { Bad_Opcode },
7478 { Bad_Opcode },
7479 { Bad_Opcode },
7480 { Bad_Opcode },
7481 { Bad_Opcode },
7482 { Bad_Opcode },
f88c9eb0 7483 /* c8 */
592d1631
L
7484 { Bad_Opcode },
7485 { Bad_Opcode },
7486 { Bad_Opcode },
7487 { Bad_Opcode },
a0046408 7488 { PREFIX_TABLE (PREFIX_0F3ACC) },
592d1631 7489 { Bad_Opcode },
48521003
IT
7490 { PREFIX_TABLE (PREFIX_0F3ACE) },
7491 { PREFIX_TABLE (PREFIX_0F3ACF) },
f88c9eb0 7492 /* d0 */
592d1631
L
7493 { Bad_Opcode },
7494 { Bad_Opcode },
7495 { Bad_Opcode },
7496 { Bad_Opcode },
7497 { Bad_Opcode },
7498 { Bad_Opcode },
7499 { Bad_Opcode },
7500 { Bad_Opcode },
f88c9eb0 7501 /* d8 */
592d1631
L
7502 { Bad_Opcode },
7503 { Bad_Opcode },
7504 { Bad_Opcode },
7505 { Bad_Opcode },
7506 { Bad_Opcode },
7507 { Bad_Opcode },
7508 { Bad_Opcode },
f88c9eb0
SP
7509 { PREFIX_TABLE (PREFIX_0F3ADF) },
7510 /* e0 */
592d1631
L
7511 { Bad_Opcode },
7512 { Bad_Opcode },
7513 { Bad_Opcode },
7514 { Bad_Opcode },
7515 { Bad_Opcode },
592d1631
L
7516 { Bad_Opcode },
7517 { Bad_Opcode },
7518 { Bad_Opcode },
85f10a01 7519 /* e8 */
592d1631
L
7520 { Bad_Opcode },
7521 { Bad_Opcode },
7522 { Bad_Opcode },
7523 { Bad_Opcode },
7524 { Bad_Opcode },
7525 { Bad_Opcode },
7526 { Bad_Opcode },
7527 { Bad_Opcode },
85f10a01 7528 /* f0 */
592d1631
L
7529 { Bad_Opcode },
7530 { Bad_Opcode },
7531 { Bad_Opcode },
7532 { Bad_Opcode },
7533 { Bad_Opcode },
7534 { Bad_Opcode },
7535 { Bad_Opcode },
7536 { Bad_Opcode },
85f10a01 7537 /* f8 */
592d1631
L
7538 { Bad_Opcode },
7539 { Bad_Opcode },
7540 { Bad_Opcode },
7541 { Bad_Opcode },
7542 { Bad_Opcode },
7543 { Bad_Opcode },
7544 { Bad_Opcode },
7545 { Bad_Opcode },
85f10a01 7546 },
f88c9eb0
SP
7547};
7548
7549static const struct dis386 xop_table[][256] = {
5dd85c99 7550 /* XOP_08 */
85f10a01
MM
7551 {
7552 /* 00 */
592d1631
L
7553 { Bad_Opcode },
7554 { Bad_Opcode },
7555 { Bad_Opcode },
7556 { Bad_Opcode },
7557 { Bad_Opcode },
7558 { Bad_Opcode },
7559 { Bad_Opcode },
7560 { Bad_Opcode },
85f10a01 7561 /* 08 */
592d1631
L
7562 { Bad_Opcode },
7563 { Bad_Opcode },
7564 { Bad_Opcode },
7565 { Bad_Opcode },
7566 { Bad_Opcode },
7567 { Bad_Opcode },
7568 { Bad_Opcode },
7569 { Bad_Opcode },
85f10a01 7570 /* 10 */
3929df09 7571 { Bad_Opcode },
592d1631
L
7572 { Bad_Opcode },
7573 { Bad_Opcode },
7574 { Bad_Opcode },
7575 { Bad_Opcode },
7576 { Bad_Opcode },
7577 { Bad_Opcode },
7578 { Bad_Opcode },
85f10a01 7579 /* 18 */
592d1631
L
7580 { Bad_Opcode },
7581 { Bad_Opcode },
7582 { Bad_Opcode },
7583 { Bad_Opcode },
7584 { Bad_Opcode },
7585 { Bad_Opcode },
7586 { Bad_Opcode },
7587 { Bad_Opcode },
85f10a01 7588 /* 20 */
592d1631
L
7589 { Bad_Opcode },
7590 { Bad_Opcode },
7591 { Bad_Opcode },
7592 { Bad_Opcode },
7593 { Bad_Opcode },
7594 { Bad_Opcode },
7595 { Bad_Opcode },
7596 { Bad_Opcode },
85f10a01 7597 /* 28 */
592d1631
L
7598 { Bad_Opcode },
7599 { Bad_Opcode },
7600 { Bad_Opcode },
7601 { Bad_Opcode },
7602 { Bad_Opcode },
7603 { Bad_Opcode },
7604 { Bad_Opcode },
7605 { Bad_Opcode },
c0f3af97 7606 /* 30 */
592d1631
L
7607 { Bad_Opcode },
7608 { Bad_Opcode },
7609 { Bad_Opcode },
7610 { Bad_Opcode },
7611 { Bad_Opcode },
7612 { Bad_Opcode },
7613 { Bad_Opcode },
7614 { Bad_Opcode },
c0f3af97 7615 /* 38 */
592d1631
L
7616 { Bad_Opcode },
7617 { Bad_Opcode },
7618 { Bad_Opcode },
7619 { Bad_Opcode },
7620 { Bad_Opcode },
7621 { Bad_Opcode },
7622 { Bad_Opcode },
7623 { Bad_Opcode },
c0f3af97 7624 /* 40 */
592d1631
L
7625 { Bad_Opcode },
7626 { Bad_Opcode },
7627 { Bad_Opcode },
7628 { Bad_Opcode },
7629 { Bad_Opcode },
7630 { Bad_Opcode },
7631 { Bad_Opcode },
7632 { Bad_Opcode },
85f10a01 7633 /* 48 */
592d1631
L
7634 { Bad_Opcode },
7635 { Bad_Opcode },
7636 { Bad_Opcode },
7637 { Bad_Opcode },
7638 { Bad_Opcode },
7639 { Bad_Opcode },
7640 { Bad_Opcode },
7641 { Bad_Opcode },
c0f3af97 7642 /* 50 */
592d1631
L
7643 { Bad_Opcode },
7644 { Bad_Opcode },
7645 { Bad_Opcode },
7646 { Bad_Opcode },
7647 { Bad_Opcode },
7648 { Bad_Opcode },
7649 { Bad_Opcode },
7650 { Bad_Opcode },
85f10a01 7651 /* 58 */
592d1631
L
7652 { Bad_Opcode },
7653 { Bad_Opcode },
7654 { Bad_Opcode },
7655 { Bad_Opcode },
7656 { Bad_Opcode },
7657 { Bad_Opcode },
7658 { Bad_Opcode },
7659 { Bad_Opcode },
c1e679ec 7660 /* 60 */
592d1631
L
7661 { Bad_Opcode },
7662 { Bad_Opcode },
7663 { Bad_Opcode },
7664 { Bad_Opcode },
7665 { Bad_Opcode },
7666 { Bad_Opcode },
7667 { Bad_Opcode },
7668 { Bad_Opcode },
c0f3af97 7669 /* 68 */
592d1631
L
7670 { Bad_Opcode },
7671 { Bad_Opcode },
7672 { Bad_Opcode },
7673 { Bad_Opcode },
7674 { Bad_Opcode },
7675 { Bad_Opcode },
7676 { Bad_Opcode },
7677 { Bad_Opcode },
85f10a01 7678 /* 70 */
592d1631
L
7679 { Bad_Opcode },
7680 { Bad_Opcode },
7681 { Bad_Opcode },
7682 { Bad_Opcode },
7683 { Bad_Opcode },
7684 { Bad_Opcode },
7685 { Bad_Opcode },
7686 { Bad_Opcode },
85f10a01 7687 /* 78 */
592d1631
L
7688 { Bad_Opcode },
7689 { Bad_Opcode },
7690 { Bad_Opcode },
7691 { Bad_Opcode },
7692 { Bad_Opcode },
7693 { Bad_Opcode },
7694 { Bad_Opcode },
7695 { Bad_Opcode },
85f10a01 7696 /* 80 */
592d1631
L
7697 { Bad_Opcode },
7698 { Bad_Opcode },
7699 { Bad_Opcode },
7700 { Bad_Opcode },
7701 { Bad_Opcode },
3a2430e0
JB
7702 { "vpmacssww", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7703 { "vpmacsswd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7704 { "vpmacssdql", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
5dd85c99 7705 /* 88 */
592d1631
L
7706 { Bad_Opcode },
7707 { Bad_Opcode },
7708 { Bad_Opcode },
7709 { Bad_Opcode },
7710 { Bad_Opcode },
7711 { Bad_Opcode },
3a2430e0
JB
7712 { "vpmacssdd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7713 { "vpmacssdqh", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
5dd85c99 7714 /* 90 */
592d1631
L
7715 { Bad_Opcode },
7716 { Bad_Opcode },
7717 { Bad_Opcode },
7718 { Bad_Opcode },
7719 { Bad_Opcode },
3a2430e0
JB
7720 { "vpmacsww", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7721 { "vpmacswd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7722 { "vpmacsdql", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
5dd85c99 7723 /* 98 */
592d1631
L
7724 { Bad_Opcode },
7725 { Bad_Opcode },
7726 { Bad_Opcode },
7727 { Bad_Opcode },
7728 { Bad_Opcode },
7729 { Bad_Opcode },
3a2430e0
JB
7730 { "vpmacsdd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7731 { "vpmacsdqh", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
5dd85c99 7732 /* a0 */
592d1631
L
7733 { Bad_Opcode },
7734 { Bad_Opcode },
3a2430e0
JB
7735 { "vpcmov", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7736 { "vpperm", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
592d1631
L
7737 { Bad_Opcode },
7738 { Bad_Opcode },
3a2430e0 7739 { "vpmadcsswd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
592d1631 7740 { Bad_Opcode },
5dd85c99 7741 /* a8 */
592d1631
L
7742 { Bad_Opcode },
7743 { Bad_Opcode },
7744 { Bad_Opcode },
7745 { Bad_Opcode },
7746 { Bad_Opcode },
7747 { Bad_Opcode },
7748 { Bad_Opcode },
7749 { Bad_Opcode },
5dd85c99 7750 /* b0 */
592d1631
L
7751 { Bad_Opcode },
7752 { Bad_Opcode },
7753 { Bad_Opcode },
7754 { Bad_Opcode },
7755 { Bad_Opcode },
7756 { Bad_Opcode },
3a2430e0 7757 { "vpmadcswd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
592d1631 7758 { Bad_Opcode },
5dd85c99 7759 /* b8 */
592d1631
L
7760 { Bad_Opcode },
7761 { Bad_Opcode },
7762 { Bad_Opcode },
7763 { Bad_Opcode },
7764 { Bad_Opcode },
7765 { Bad_Opcode },
7766 { Bad_Opcode },
7767 { Bad_Opcode },
5dd85c99 7768 /* c0 */
bf890a93
IT
7769 { "vprotb", { XM, Vex_2src_1, Ib }, 0 },
7770 { "vprotw", { XM, Vex_2src_1, Ib }, 0 },
7771 { "vprotd", { XM, Vex_2src_1, Ib }, 0 },
7772 { "vprotq", { XM, Vex_2src_1, Ib }, 0 },
592d1631
L
7773 { Bad_Opcode },
7774 { Bad_Opcode },
7775 { Bad_Opcode },
7776 { Bad_Opcode },
5dd85c99 7777 /* c8 */
592d1631
L
7778 { Bad_Opcode },
7779 { Bad_Opcode },
7780 { Bad_Opcode },
7781 { Bad_Opcode },
ff688e1f
L
7782 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CC) },
7783 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CD) },
7784 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CE) },
7785 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CF) },
5dd85c99 7786 /* d0 */
592d1631
L
7787 { Bad_Opcode },
7788 { Bad_Opcode },
7789 { Bad_Opcode },
7790 { Bad_Opcode },
7791 { Bad_Opcode },
7792 { Bad_Opcode },
7793 { Bad_Opcode },
7794 { Bad_Opcode },
5dd85c99 7795 /* d8 */
592d1631
L
7796 { Bad_Opcode },
7797 { Bad_Opcode },
7798 { Bad_Opcode },
7799 { Bad_Opcode },
7800 { Bad_Opcode },
7801 { Bad_Opcode },
7802 { Bad_Opcode },
7803 { Bad_Opcode },
5dd85c99 7804 /* e0 */
592d1631
L
7805 { Bad_Opcode },
7806 { Bad_Opcode },
7807 { Bad_Opcode },
7808 { Bad_Opcode },
7809 { Bad_Opcode },
7810 { Bad_Opcode },
7811 { Bad_Opcode },
7812 { Bad_Opcode },
5dd85c99 7813 /* e8 */
592d1631
L
7814 { Bad_Opcode },
7815 { Bad_Opcode },
7816 { Bad_Opcode },
7817 { Bad_Opcode },
ff688e1f
L
7818 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EC) },
7819 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_ED) },
7820 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EE) },
7821 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EF) },
5dd85c99 7822 /* f0 */
592d1631
L
7823 { Bad_Opcode },
7824 { Bad_Opcode },
7825 { Bad_Opcode },
7826 { Bad_Opcode },
7827 { Bad_Opcode },
7828 { Bad_Opcode },
7829 { Bad_Opcode },
7830 { Bad_Opcode },
5dd85c99 7831 /* f8 */
592d1631
L
7832 { Bad_Opcode },
7833 { Bad_Opcode },
7834 { Bad_Opcode },
7835 { Bad_Opcode },
7836 { Bad_Opcode },
7837 { Bad_Opcode },
7838 { Bad_Opcode },
7839 { Bad_Opcode },
5dd85c99
SP
7840 },
7841 /* XOP_09 */
7842 {
7843 /* 00 */
592d1631 7844 { Bad_Opcode },
2a2a0f38
QN
7845 { REG_TABLE (REG_XOP_TBM_01) },
7846 { REG_TABLE (REG_XOP_TBM_02) },
592d1631
L
7847 { Bad_Opcode },
7848 { Bad_Opcode },
7849 { Bad_Opcode },
7850 { Bad_Opcode },
7851 { Bad_Opcode },
5dd85c99 7852 /* 08 */
592d1631
L
7853 { Bad_Opcode },
7854 { Bad_Opcode },
7855 { Bad_Opcode },
7856 { Bad_Opcode },
7857 { Bad_Opcode },
7858 { Bad_Opcode },
7859 { Bad_Opcode },
7860 { Bad_Opcode },
5dd85c99 7861 /* 10 */
592d1631
L
7862 { Bad_Opcode },
7863 { Bad_Opcode },
5dd85c99 7864 { REG_TABLE (REG_XOP_LWPCB) },
592d1631
L
7865 { Bad_Opcode },
7866 { Bad_Opcode },
7867 { Bad_Opcode },
7868 { Bad_Opcode },
7869 { Bad_Opcode },
5dd85c99 7870 /* 18 */
592d1631
L
7871 { Bad_Opcode },
7872 { Bad_Opcode },
7873 { Bad_Opcode },
7874 { Bad_Opcode },
7875 { Bad_Opcode },
7876 { Bad_Opcode },
7877 { Bad_Opcode },
7878 { Bad_Opcode },
5dd85c99 7879 /* 20 */
592d1631
L
7880 { Bad_Opcode },
7881 { Bad_Opcode },
7882 { Bad_Opcode },
7883 { Bad_Opcode },
7884 { Bad_Opcode },
7885 { Bad_Opcode },
7886 { Bad_Opcode },
7887 { Bad_Opcode },
5dd85c99 7888 /* 28 */
592d1631
L
7889 { Bad_Opcode },
7890 { Bad_Opcode },
7891 { Bad_Opcode },
7892 { Bad_Opcode },
7893 { Bad_Opcode },
7894 { Bad_Opcode },
7895 { Bad_Opcode },
7896 { Bad_Opcode },
5dd85c99 7897 /* 30 */
592d1631
L
7898 { Bad_Opcode },
7899 { Bad_Opcode },
7900 { Bad_Opcode },
7901 { Bad_Opcode },
7902 { Bad_Opcode },
7903 { Bad_Opcode },
7904 { Bad_Opcode },
7905 { Bad_Opcode },
5dd85c99 7906 /* 38 */
592d1631
L
7907 { Bad_Opcode },
7908 { Bad_Opcode },
7909 { Bad_Opcode },
7910 { Bad_Opcode },
7911 { Bad_Opcode },
7912 { Bad_Opcode },
7913 { Bad_Opcode },
7914 { Bad_Opcode },
5dd85c99 7915 /* 40 */
592d1631
L
7916 { Bad_Opcode },
7917 { Bad_Opcode },
7918 { Bad_Opcode },
7919 { Bad_Opcode },
7920 { Bad_Opcode },
7921 { Bad_Opcode },
7922 { Bad_Opcode },
7923 { Bad_Opcode },
5dd85c99 7924 /* 48 */
592d1631
L
7925 { Bad_Opcode },
7926 { Bad_Opcode },
7927 { Bad_Opcode },
7928 { Bad_Opcode },
7929 { Bad_Opcode },
7930 { Bad_Opcode },
7931 { Bad_Opcode },
7932 { Bad_Opcode },
5dd85c99 7933 /* 50 */
592d1631
L
7934 { Bad_Opcode },
7935 { Bad_Opcode },
7936 { Bad_Opcode },
7937 { Bad_Opcode },
7938 { Bad_Opcode },
7939 { Bad_Opcode },
7940 { Bad_Opcode },
7941 { Bad_Opcode },
5dd85c99 7942 /* 58 */
592d1631
L
7943 { Bad_Opcode },
7944 { Bad_Opcode },
7945 { Bad_Opcode },
7946 { Bad_Opcode },
7947 { Bad_Opcode },
7948 { Bad_Opcode },
7949 { Bad_Opcode },
7950 { Bad_Opcode },
5dd85c99 7951 /* 60 */
592d1631
L
7952 { Bad_Opcode },
7953 { Bad_Opcode },
7954 { Bad_Opcode },
7955 { Bad_Opcode },
7956 { Bad_Opcode },
7957 { Bad_Opcode },
7958 { Bad_Opcode },
7959 { Bad_Opcode },
5dd85c99 7960 /* 68 */
592d1631
L
7961 { Bad_Opcode },
7962 { Bad_Opcode },
7963 { Bad_Opcode },
7964 { Bad_Opcode },
7965 { Bad_Opcode },
7966 { Bad_Opcode },
7967 { Bad_Opcode },
7968 { Bad_Opcode },
5dd85c99 7969 /* 70 */
592d1631
L
7970 { Bad_Opcode },
7971 { Bad_Opcode },
7972 { Bad_Opcode },
7973 { Bad_Opcode },
7974 { Bad_Opcode },
7975 { Bad_Opcode },
7976 { Bad_Opcode },
7977 { Bad_Opcode },
5dd85c99 7978 /* 78 */
592d1631
L
7979 { Bad_Opcode },
7980 { Bad_Opcode },
7981 { Bad_Opcode },
7982 { Bad_Opcode },
7983 { Bad_Opcode },
7984 { Bad_Opcode },
7985 { Bad_Opcode },
7986 { Bad_Opcode },
5dd85c99 7987 /* 80 */
592a252b
L
7988 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_80) },
7989 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_81) },
bf890a93
IT
7990 { "vfrczss", { XM, EXd }, 0 },
7991 { "vfrczsd", { XM, EXq }, 0 },
592d1631
L
7992 { Bad_Opcode },
7993 { Bad_Opcode },
7994 { Bad_Opcode },
7995 { Bad_Opcode },
5dd85c99 7996 /* 88 */
592d1631
L
7997 { Bad_Opcode },
7998 { Bad_Opcode },
7999 { Bad_Opcode },
8000 { Bad_Opcode },
8001 { Bad_Opcode },
8002 { Bad_Opcode },
8003 { Bad_Opcode },
8004 { Bad_Opcode },
5dd85c99 8005 /* 90 */
bf890a93
IT
8006 { "vprotb", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8007 { "vprotw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8008 { "vprotd", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8009 { "vprotq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8010 { "vpshlb", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8011 { "vpshlw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8012 { "vpshld", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8013 { "vpshlq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
5dd85c99 8014 /* 98 */
bf890a93
IT
8015 { "vpshab", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8016 { "vpshaw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8017 { "vpshad", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
8018 { "vpshaq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
592d1631
L
8019 { Bad_Opcode },
8020 { Bad_Opcode },
8021 { Bad_Opcode },
8022 { Bad_Opcode },
5dd85c99 8023 /* a0 */
592d1631
L
8024 { Bad_Opcode },
8025 { Bad_Opcode },
8026 { Bad_Opcode },
8027 { Bad_Opcode },
8028 { Bad_Opcode },
8029 { Bad_Opcode },
8030 { Bad_Opcode },
8031 { Bad_Opcode },
5dd85c99 8032 /* a8 */
592d1631
L
8033 { Bad_Opcode },
8034 { Bad_Opcode },
8035 { Bad_Opcode },
8036 { Bad_Opcode },
8037 { Bad_Opcode },
8038 { Bad_Opcode },
8039 { Bad_Opcode },
8040 { Bad_Opcode },
5dd85c99 8041 /* b0 */
592d1631
L
8042 { Bad_Opcode },
8043 { Bad_Opcode },
8044 { Bad_Opcode },
8045 { Bad_Opcode },
8046 { Bad_Opcode },
8047 { Bad_Opcode },
8048 { Bad_Opcode },
8049 { Bad_Opcode },
5dd85c99 8050 /* b8 */
592d1631
L
8051 { Bad_Opcode },
8052 { Bad_Opcode },
8053 { Bad_Opcode },
8054 { Bad_Opcode },
8055 { Bad_Opcode },
8056 { Bad_Opcode },
8057 { Bad_Opcode },
8058 { Bad_Opcode },
5dd85c99 8059 /* c0 */
592d1631 8060 { Bad_Opcode },
bf890a93
IT
8061 { "vphaddbw", { XM, EXxmm }, 0 },
8062 { "vphaddbd", { XM, EXxmm }, 0 },
8063 { "vphaddbq", { XM, EXxmm }, 0 },
592d1631
L
8064 { Bad_Opcode },
8065 { Bad_Opcode },
bf890a93
IT
8066 { "vphaddwd", { XM, EXxmm }, 0 },
8067 { "vphaddwq", { XM, EXxmm }, 0 },
5dd85c99 8068 /* c8 */
592d1631
L
8069 { Bad_Opcode },
8070 { Bad_Opcode },
8071 { Bad_Opcode },
bf890a93 8072 { "vphadddq", { XM, EXxmm }, 0 },
592d1631
L
8073 { Bad_Opcode },
8074 { Bad_Opcode },
8075 { Bad_Opcode },
8076 { Bad_Opcode },
5dd85c99 8077 /* d0 */
592d1631 8078 { Bad_Opcode },
bf890a93
IT
8079 { "vphaddubw", { XM, EXxmm }, 0 },
8080 { "vphaddubd", { XM, EXxmm }, 0 },
8081 { "vphaddubq", { XM, EXxmm }, 0 },
592d1631
L
8082 { Bad_Opcode },
8083 { Bad_Opcode },
bf890a93
IT
8084 { "vphadduwd", { XM, EXxmm }, 0 },
8085 { "vphadduwq", { XM, EXxmm }, 0 },
5dd85c99 8086 /* d8 */
592d1631
L
8087 { Bad_Opcode },
8088 { Bad_Opcode },
8089 { Bad_Opcode },
bf890a93 8090 { "vphaddudq", { XM, EXxmm }, 0 },
592d1631
L
8091 { Bad_Opcode },
8092 { Bad_Opcode },
8093 { Bad_Opcode },
8094 { Bad_Opcode },
5dd85c99 8095 /* e0 */
592d1631 8096 { Bad_Opcode },
bf890a93
IT
8097 { "vphsubbw", { XM, EXxmm }, 0 },
8098 { "vphsubwd", { XM, EXxmm }, 0 },
8099 { "vphsubdq", { XM, EXxmm }, 0 },
592d1631
L
8100 { Bad_Opcode },
8101 { Bad_Opcode },
8102 { Bad_Opcode },
8103 { Bad_Opcode },
4e7d34a6 8104 /* e8 */
592d1631
L
8105 { Bad_Opcode },
8106 { Bad_Opcode },
8107 { Bad_Opcode },
8108 { Bad_Opcode },
8109 { Bad_Opcode },
8110 { Bad_Opcode },
8111 { Bad_Opcode },
8112 { Bad_Opcode },
4e7d34a6 8113 /* f0 */
592d1631
L
8114 { Bad_Opcode },
8115 { Bad_Opcode },
8116 { Bad_Opcode },
8117 { Bad_Opcode },
8118 { Bad_Opcode },
8119 { Bad_Opcode },
8120 { Bad_Opcode },
8121 { Bad_Opcode },
4e7d34a6 8122 /* f8 */
592d1631
L
8123 { Bad_Opcode },
8124 { Bad_Opcode },
8125 { Bad_Opcode },
8126 { Bad_Opcode },
8127 { Bad_Opcode },
8128 { Bad_Opcode },
8129 { Bad_Opcode },
8130 { Bad_Opcode },
4e7d34a6 8131 },
f88c9eb0 8132 /* XOP_0A */
4e7d34a6
L
8133 {
8134 /* 00 */
592d1631
L
8135 { Bad_Opcode },
8136 { Bad_Opcode },
8137 { Bad_Opcode },
8138 { Bad_Opcode },
8139 { Bad_Opcode },
8140 { Bad_Opcode },
8141 { Bad_Opcode },
8142 { Bad_Opcode },
4e7d34a6 8143 /* 08 */
592d1631
L
8144 { Bad_Opcode },
8145 { Bad_Opcode },
8146 { Bad_Opcode },
8147 { Bad_Opcode },
8148 { Bad_Opcode },
8149 { Bad_Opcode },
8150 { Bad_Opcode },
8151 { Bad_Opcode },
4e7d34a6 8152 /* 10 */
bf890a93 8153 { "bextr", { Gv, Ev, Iq }, 0 },
592d1631 8154 { Bad_Opcode },
f88c9eb0 8155 { REG_TABLE (REG_XOP_LWP) },
592d1631
L
8156 { Bad_Opcode },
8157 { Bad_Opcode },
8158 { Bad_Opcode },
8159 { Bad_Opcode },
8160 { Bad_Opcode },
4e7d34a6 8161 /* 18 */
592d1631
L
8162 { Bad_Opcode },
8163 { Bad_Opcode },
8164 { Bad_Opcode },
8165 { Bad_Opcode },
8166 { Bad_Opcode },
8167 { Bad_Opcode },
8168 { Bad_Opcode },
8169 { Bad_Opcode },
4e7d34a6 8170 /* 20 */
592d1631
L
8171 { Bad_Opcode },
8172 { Bad_Opcode },
8173 { Bad_Opcode },
8174 { Bad_Opcode },
8175 { Bad_Opcode },
8176 { Bad_Opcode },
8177 { Bad_Opcode },
8178 { Bad_Opcode },
4e7d34a6 8179 /* 28 */
592d1631
L
8180 { Bad_Opcode },
8181 { Bad_Opcode },
8182 { Bad_Opcode },
8183 { Bad_Opcode },
8184 { Bad_Opcode },
8185 { Bad_Opcode },
8186 { Bad_Opcode },
8187 { Bad_Opcode },
4e7d34a6 8188 /* 30 */
592d1631
L
8189 { Bad_Opcode },
8190 { Bad_Opcode },
8191 { Bad_Opcode },
8192 { Bad_Opcode },
8193 { Bad_Opcode },
8194 { Bad_Opcode },
8195 { Bad_Opcode },
8196 { Bad_Opcode },
c0f3af97 8197 /* 38 */
592d1631
L
8198 { Bad_Opcode },
8199 { Bad_Opcode },
8200 { Bad_Opcode },
8201 { Bad_Opcode },
8202 { Bad_Opcode },
8203 { Bad_Opcode },
8204 { Bad_Opcode },
8205 { Bad_Opcode },
c0f3af97 8206 /* 40 */
592d1631
L
8207 { Bad_Opcode },
8208 { Bad_Opcode },
8209 { Bad_Opcode },
8210 { Bad_Opcode },
8211 { Bad_Opcode },
8212 { Bad_Opcode },
8213 { Bad_Opcode },
8214 { Bad_Opcode },
c1e679ec 8215 /* 48 */
592d1631
L
8216 { Bad_Opcode },
8217 { Bad_Opcode },
8218 { Bad_Opcode },
8219 { Bad_Opcode },
8220 { Bad_Opcode },
8221 { Bad_Opcode },
8222 { Bad_Opcode },
8223 { Bad_Opcode },
c1e679ec 8224 /* 50 */
592d1631
L
8225 { Bad_Opcode },
8226 { Bad_Opcode },
8227 { Bad_Opcode },
8228 { Bad_Opcode },
8229 { Bad_Opcode },
8230 { Bad_Opcode },
8231 { Bad_Opcode },
8232 { Bad_Opcode },
4e7d34a6 8233 /* 58 */
592d1631
L
8234 { Bad_Opcode },
8235 { Bad_Opcode },
8236 { Bad_Opcode },
8237 { Bad_Opcode },
8238 { Bad_Opcode },
8239 { Bad_Opcode },
8240 { Bad_Opcode },
8241 { Bad_Opcode },
4e7d34a6 8242 /* 60 */
592d1631
L
8243 { Bad_Opcode },
8244 { Bad_Opcode },
8245 { Bad_Opcode },
8246 { Bad_Opcode },
8247 { Bad_Opcode },
8248 { Bad_Opcode },
8249 { Bad_Opcode },
8250 { Bad_Opcode },
4e7d34a6 8251 /* 68 */
592d1631
L
8252 { Bad_Opcode },
8253 { Bad_Opcode },
8254 { Bad_Opcode },
8255 { Bad_Opcode },
8256 { Bad_Opcode },
8257 { Bad_Opcode },
8258 { Bad_Opcode },
8259 { Bad_Opcode },
4e7d34a6 8260 /* 70 */
592d1631
L
8261 { Bad_Opcode },
8262 { Bad_Opcode },
8263 { Bad_Opcode },
8264 { Bad_Opcode },
8265 { Bad_Opcode },
8266 { Bad_Opcode },
8267 { Bad_Opcode },
8268 { Bad_Opcode },
4e7d34a6 8269 /* 78 */
592d1631
L
8270 { Bad_Opcode },
8271 { Bad_Opcode },
8272 { Bad_Opcode },
8273 { Bad_Opcode },
8274 { Bad_Opcode },
8275 { Bad_Opcode },
8276 { Bad_Opcode },
8277 { Bad_Opcode },
4e7d34a6 8278 /* 80 */
592d1631
L
8279 { Bad_Opcode },
8280 { Bad_Opcode },
8281 { Bad_Opcode },
8282 { Bad_Opcode },
8283 { Bad_Opcode },
8284 { Bad_Opcode },
8285 { Bad_Opcode },
8286 { Bad_Opcode },
4e7d34a6 8287 /* 88 */
592d1631
L
8288 { Bad_Opcode },
8289 { Bad_Opcode },
8290 { Bad_Opcode },
8291 { Bad_Opcode },
8292 { Bad_Opcode },
8293 { Bad_Opcode },
8294 { Bad_Opcode },
8295 { Bad_Opcode },
4e7d34a6 8296 /* 90 */
592d1631
L
8297 { Bad_Opcode },
8298 { Bad_Opcode },
8299 { Bad_Opcode },
8300 { Bad_Opcode },
8301 { Bad_Opcode },
8302 { Bad_Opcode },
8303 { Bad_Opcode },
8304 { Bad_Opcode },
4e7d34a6 8305 /* 98 */
592d1631
L
8306 { Bad_Opcode },
8307 { Bad_Opcode },
8308 { Bad_Opcode },
8309 { Bad_Opcode },
8310 { Bad_Opcode },
8311 { Bad_Opcode },
8312 { Bad_Opcode },
8313 { Bad_Opcode },
4e7d34a6 8314 /* a0 */
592d1631
L
8315 { Bad_Opcode },
8316 { Bad_Opcode },
8317 { Bad_Opcode },
8318 { Bad_Opcode },
8319 { Bad_Opcode },
8320 { Bad_Opcode },
8321 { Bad_Opcode },
8322 { Bad_Opcode },
4e7d34a6 8323 /* a8 */
592d1631
L
8324 { Bad_Opcode },
8325 { Bad_Opcode },
8326 { Bad_Opcode },
8327 { Bad_Opcode },
8328 { Bad_Opcode },
8329 { Bad_Opcode },
8330 { Bad_Opcode },
8331 { Bad_Opcode },
d5d7db8e 8332 /* b0 */
592d1631
L
8333 { Bad_Opcode },
8334 { Bad_Opcode },
8335 { Bad_Opcode },
8336 { Bad_Opcode },
8337 { Bad_Opcode },
8338 { Bad_Opcode },
8339 { Bad_Opcode },
8340 { Bad_Opcode },
85f10a01 8341 /* b8 */
592d1631
L
8342 { Bad_Opcode },
8343 { Bad_Opcode },
8344 { Bad_Opcode },
8345 { Bad_Opcode },
8346 { Bad_Opcode },
8347 { Bad_Opcode },
8348 { Bad_Opcode },
8349 { Bad_Opcode },
85f10a01 8350 /* c0 */
592d1631
L
8351 { Bad_Opcode },
8352 { Bad_Opcode },
8353 { Bad_Opcode },
8354 { Bad_Opcode },
8355 { Bad_Opcode },
8356 { Bad_Opcode },
8357 { Bad_Opcode },
8358 { Bad_Opcode },
85f10a01 8359 /* c8 */
592d1631
L
8360 { Bad_Opcode },
8361 { Bad_Opcode },
8362 { Bad_Opcode },
8363 { Bad_Opcode },
8364 { Bad_Opcode },
8365 { Bad_Opcode },
8366 { Bad_Opcode },
8367 { Bad_Opcode },
85f10a01 8368 /* d0 */
592d1631
L
8369 { Bad_Opcode },
8370 { Bad_Opcode },
8371 { Bad_Opcode },
8372 { Bad_Opcode },
8373 { Bad_Opcode },
8374 { Bad_Opcode },
8375 { Bad_Opcode },
8376 { Bad_Opcode },
85f10a01 8377 /* d8 */
592d1631
L
8378 { Bad_Opcode },
8379 { Bad_Opcode },
8380 { Bad_Opcode },
8381 { Bad_Opcode },
8382 { Bad_Opcode },
8383 { Bad_Opcode },
8384 { Bad_Opcode },
8385 { Bad_Opcode },
85f10a01 8386 /* e0 */
592d1631
L
8387 { Bad_Opcode },
8388 { Bad_Opcode },
8389 { Bad_Opcode },
8390 { Bad_Opcode },
8391 { Bad_Opcode },
8392 { Bad_Opcode },
8393 { Bad_Opcode },
8394 { Bad_Opcode },
85f10a01 8395 /* e8 */
592d1631
L
8396 { Bad_Opcode },
8397 { Bad_Opcode },
8398 { Bad_Opcode },
8399 { Bad_Opcode },
8400 { Bad_Opcode },
8401 { Bad_Opcode },
8402 { Bad_Opcode },
8403 { Bad_Opcode },
85f10a01 8404 /* f0 */
592d1631
L
8405 { Bad_Opcode },
8406 { Bad_Opcode },
8407 { Bad_Opcode },
8408 { Bad_Opcode },
8409 { Bad_Opcode },
8410 { Bad_Opcode },
8411 { Bad_Opcode },
8412 { Bad_Opcode },
85f10a01 8413 /* f8 */
592d1631
L
8414 { Bad_Opcode },
8415 { Bad_Opcode },
8416 { Bad_Opcode },
8417 { Bad_Opcode },
8418 { Bad_Opcode },
8419 { Bad_Opcode },
8420 { Bad_Opcode },
8421 { Bad_Opcode },
85f10a01 8422 },
c0f3af97
L
8423};
8424
8425static const struct dis386 vex_table[][256] = {
8426 /* VEX_0F */
85f10a01
MM
8427 {
8428 /* 00 */
592d1631
L
8429 { Bad_Opcode },
8430 { Bad_Opcode },
8431 { Bad_Opcode },
8432 { Bad_Opcode },
8433 { Bad_Opcode },
8434 { Bad_Opcode },
8435 { Bad_Opcode },
8436 { Bad_Opcode },
85f10a01 8437 /* 08 */
592d1631
L
8438 { Bad_Opcode },
8439 { Bad_Opcode },
8440 { Bad_Opcode },
8441 { Bad_Opcode },
8442 { Bad_Opcode },
8443 { Bad_Opcode },
8444 { Bad_Opcode },
8445 { Bad_Opcode },
c0f3af97 8446 /* 10 */
592a252b
L
8447 { PREFIX_TABLE (PREFIX_VEX_0F10) },
8448 { PREFIX_TABLE (PREFIX_VEX_0F11) },
8449 { PREFIX_TABLE (PREFIX_VEX_0F12) },
8450 { MOD_TABLE (MOD_VEX_0F13) },
ec6f095a
L
8451 { "vunpcklpX", { XM, Vex, EXx }, 0 },
8452 { "vunpckhpX", { XM, Vex, EXx }, 0 },
592a252b
L
8453 { PREFIX_TABLE (PREFIX_VEX_0F16) },
8454 { MOD_TABLE (MOD_VEX_0F17) },
c0f3af97 8455 /* 18 */
592d1631
L
8456 { Bad_Opcode },
8457 { Bad_Opcode },
8458 { Bad_Opcode },
8459 { Bad_Opcode },
8460 { Bad_Opcode },
8461 { Bad_Opcode },
8462 { Bad_Opcode },
8463 { Bad_Opcode },
c0f3af97 8464 /* 20 */
592d1631
L
8465 { Bad_Opcode },
8466 { Bad_Opcode },
8467 { Bad_Opcode },
8468 { Bad_Opcode },
8469 { Bad_Opcode },
8470 { Bad_Opcode },
8471 { Bad_Opcode },
8472 { Bad_Opcode },
c0f3af97 8473 /* 28 */
ec6f095a
L
8474 { "vmovapX", { XM, EXx }, 0 },
8475 { "vmovapX", { EXxS, XM }, 0 },
592a252b
L
8476 { PREFIX_TABLE (PREFIX_VEX_0F2A) },
8477 { MOD_TABLE (MOD_VEX_0F2B) },
8478 { PREFIX_TABLE (PREFIX_VEX_0F2C) },
8479 { PREFIX_TABLE (PREFIX_VEX_0F2D) },
8480 { PREFIX_TABLE (PREFIX_VEX_0F2E) },
8481 { PREFIX_TABLE (PREFIX_VEX_0F2F) },
85f10a01 8482 /* 30 */
592d1631
L
8483 { Bad_Opcode },
8484 { Bad_Opcode },
8485 { Bad_Opcode },
8486 { Bad_Opcode },
8487 { Bad_Opcode },
8488 { Bad_Opcode },
8489 { Bad_Opcode },
8490 { Bad_Opcode },
4e7d34a6 8491 /* 38 */
592d1631
L
8492 { Bad_Opcode },
8493 { Bad_Opcode },
8494 { Bad_Opcode },
8495 { Bad_Opcode },
8496 { Bad_Opcode },
8497 { Bad_Opcode },
8498 { Bad_Opcode },
8499 { Bad_Opcode },
d5d7db8e 8500 /* 40 */
592d1631 8501 { Bad_Opcode },
43234a1e
L
8502 { PREFIX_TABLE (PREFIX_VEX_0F41) },
8503 { PREFIX_TABLE (PREFIX_VEX_0F42) },
592d1631 8504 { Bad_Opcode },
43234a1e
L
8505 { PREFIX_TABLE (PREFIX_VEX_0F44) },
8506 { PREFIX_TABLE (PREFIX_VEX_0F45) },
8507 { PREFIX_TABLE (PREFIX_VEX_0F46) },
8508 { PREFIX_TABLE (PREFIX_VEX_0F47) },
85f10a01 8509 /* 48 */
592d1631
L
8510 { Bad_Opcode },
8511 { Bad_Opcode },
1ba585e8 8512 { PREFIX_TABLE (PREFIX_VEX_0F4A) },
43234a1e 8513 { PREFIX_TABLE (PREFIX_VEX_0F4B) },
592d1631
L
8514 { Bad_Opcode },
8515 { Bad_Opcode },
8516 { Bad_Opcode },
8517 { Bad_Opcode },
d5d7db8e 8518 /* 50 */
592a252b
L
8519 { MOD_TABLE (MOD_VEX_0F50) },
8520 { PREFIX_TABLE (PREFIX_VEX_0F51) },
8521 { PREFIX_TABLE (PREFIX_VEX_0F52) },
8522 { PREFIX_TABLE (PREFIX_VEX_0F53) },
bf890a93
IT
8523 { "vandpX", { XM, Vex, EXx }, 0 },
8524 { "vandnpX", { XM, Vex, EXx }, 0 },
8525 { "vorpX", { XM, Vex, EXx }, 0 },
8526 { "vxorpX", { XM, Vex, EXx }, 0 },
c0f3af97 8527 /* 58 */
592a252b
L
8528 { PREFIX_TABLE (PREFIX_VEX_0F58) },
8529 { PREFIX_TABLE (PREFIX_VEX_0F59) },
8530 { PREFIX_TABLE (PREFIX_VEX_0F5A) },
8531 { PREFIX_TABLE (PREFIX_VEX_0F5B) },
8532 { PREFIX_TABLE (PREFIX_VEX_0F5C) },
8533 { PREFIX_TABLE (PREFIX_VEX_0F5D) },
8534 { PREFIX_TABLE (PREFIX_VEX_0F5E) },
8535 { PREFIX_TABLE (PREFIX_VEX_0F5F) },
c0f3af97 8536 /* 60 */
592a252b
L
8537 { PREFIX_TABLE (PREFIX_VEX_0F60) },
8538 { PREFIX_TABLE (PREFIX_VEX_0F61) },
8539 { PREFIX_TABLE (PREFIX_VEX_0F62) },
8540 { PREFIX_TABLE (PREFIX_VEX_0F63) },
8541 { PREFIX_TABLE (PREFIX_VEX_0F64) },
8542 { PREFIX_TABLE (PREFIX_VEX_0F65) },
8543 { PREFIX_TABLE (PREFIX_VEX_0F66) },
8544 { PREFIX_TABLE (PREFIX_VEX_0F67) },
c0f3af97 8545 /* 68 */
592a252b
L
8546 { PREFIX_TABLE (PREFIX_VEX_0F68) },
8547 { PREFIX_TABLE (PREFIX_VEX_0F69) },
8548 { PREFIX_TABLE (PREFIX_VEX_0F6A) },
8549 { PREFIX_TABLE (PREFIX_VEX_0F6B) },
8550 { PREFIX_TABLE (PREFIX_VEX_0F6C) },
8551 { PREFIX_TABLE (PREFIX_VEX_0F6D) },
8552 { PREFIX_TABLE (PREFIX_VEX_0F6E) },
8553 { PREFIX_TABLE (PREFIX_VEX_0F6F) },
c0f3af97 8554 /* 70 */
592a252b
L
8555 { PREFIX_TABLE (PREFIX_VEX_0F70) },
8556 { REG_TABLE (REG_VEX_0F71) },
8557 { REG_TABLE (REG_VEX_0F72) },
8558 { REG_TABLE (REG_VEX_0F73) },
8559 { PREFIX_TABLE (PREFIX_VEX_0F74) },
8560 { PREFIX_TABLE (PREFIX_VEX_0F75) },
8561 { PREFIX_TABLE (PREFIX_VEX_0F76) },
8562 { PREFIX_TABLE (PREFIX_VEX_0F77) },
c0f3af97 8563 /* 78 */
592d1631
L
8564 { Bad_Opcode },
8565 { Bad_Opcode },
8566 { Bad_Opcode },
8567 { Bad_Opcode },
592a252b
L
8568 { PREFIX_TABLE (PREFIX_VEX_0F7C) },
8569 { PREFIX_TABLE (PREFIX_VEX_0F7D) },
8570 { PREFIX_TABLE (PREFIX_VEX_0F7E) },
8571 { PREFIX_TABLE (PREFIX_VEX_0F7F) },
c0f3af97 8572 /* 80 */
592d1631
L
8573 { Bad_Opcode },
8574 { Bad_Opcode },
8575 { Bad_Opcode },
8576 { Bad_Opcode },
8577 { Bad_Opcode },
8578 { Bad_Opcode },
8579 { Bad_Opcode },
8580 { Bad_Opcode },
c0f3af97 8581 /* 88 */
592d1631
L
8582 { Bad_Opcode },
8583 { Bad_Opcode },
8584 { Bad_Opcode },
8585 { Bad_Opcode },
8586 { Bad_Opcode },
8587 { Bad_Opcode },
8588 { Bad_Opcode },
8589 { Bad_Opcode },
c0f3af97 8590 /* 90 */
43234a1e
L
8591 { PREFIX_TABLE (PREFIX_VEX_0F90) },
8592 { PREFIX_TABLE (PREFIX_VEX_0F91) },
8593 { PREFIX_TABLE (PREFIX_VEX_0F92) },
8594 { PREFIX_TABLE (PREFIX_VEX_0F93) },
592d1631
L
8595 { Bad_Opcode },
8596 { Bad_Opcode },
8597 { Bad_Opcode },
8598 { Bad_Opcode },
c0f3af97 8599 /* 98 */
43234a1e 8600 { PREFIX_TABLE (PREFIX_VEX_0F98) },
1ba585e8 8601 { PREFIX_TABLE (PREFIX_VEX_0F99) },
592d1631
L
8602 { Bad_Opcode },
8603 { Bad_Opcode },
8604 { Bad_Opcode },
8605 { Bad_Opcode },
8606 { Bad_Opcode },
8607 { Bad_Opcode },
c0f3af97 8608 /* a0 */
592d1631
L
8609 { Bad_Opcode },
8610 { Bad_Opcode },
8611 { Bad_Opcode },
8612 { Bad_Opcode },
8613 { Bad_Opcode },
8614 { Bad_Opcode },
8615 { Bad_Opcode },
8616 { Bad_Opcode },
c0f3af97 8617 /* a8 */
592d1631
L
8618 { Bad_Opcode },
8619 { Bad_Opcode },
8620 { Bad_Opcode },
8621 { Bad_Opcode },
8622 { Bad_Opcode },
8623 { Bad_Opcode },
592a252b 8624 { REG_TABLE (REG_VEX_0FAE) },
592d1631 8625 { Bad_Opcode },
c0f3af97 8626 /* b0 */
592d1631
L
8627 { Bad_Opcode },
8628 { Bad_Opcode },
8629 { Bad_Opcode },
8630 { Bad_Opcode },
8631 { Bad_Opcode },
8632 { Bad_Opcode },
8633 { Bad_Opcode },
8634 { Bad_Opcode },
c0f3af97 8635 /* b8 */
592d1631
L
8636 { Bad_Opcode },
8637 { Bad_Opcode },
8638 { Bad_Opcode },
8639 { Bad_Opcode },
8640 { Bad_Opcode },
8641 { Bad_Opcode },
8642 { Bad_Opcode },
8643 { Bad_Opcode },
c0f3af97 8644 /* c0 */
592d1631
L
8645 { Bad_Opcode },
8646 { Bad_Opcode },
592a252b 8647 { PREFIX_TABLE (PREFIX_VEX_0FC2) },
592d1631 8648 { Bad_Opcode },
592a252b
L
8649 { PREFIX_TABLE (PREFIX_VEX_0FC4) },
8650 { PREFIX_TABLE (PREFIX_VEX_0FC5) },
bf890a93 8651 { "vshufpX", { XM, Vex, EXx, Ib }, 0 },
592d1631 8652 { Bad_Opcode },
c0f3af97 8653 /* c8 */
592d1631
L
8654 { Bad_Opcode },
8655 { Bad_Opcode },
8656 { Bad_Opcode },
8657 { Bad_Opcode },
8658 { Bad_Opcode },
8659 { Bad_Opcode },
8660 { Bad_Opcode },
8661 { Bad_Opcode },
c0f3af97 8662 /* d0 */
592a252b
L
8663 { PREFIX_TABLE (PREFIX_VEX_0FD0) },
8664 { PREFIX_TABLE (PREFIX_VEX_0FD1) },
8665 { PREFIX_TABLE (PREFIX_VEX_0FD2) },
8666 { PREFIX_TABLE (PREFIX_VEX_0FD3) },
8667 { PREFIX_TABLE (PREFIX_VEX_0FD4) },
8668 { PREFIX_TABLE (PREFIX_VEX_0FD5) },
8669 { PREFIX_TABLE (PREFIX_VEX_0FD6) },
8670 { PREFIX_TABLE (PREFIX_VEX_0FD7) },
c0f3af97 8671 /* d8 */
592a252b
L
8672 { PREFIX_TABLE (PREFIX_VEX_0FD8) },
8673 { PREFIX_TABLE (PREFIX_VEX_0FD9) },
8674 { PREFIX_TABLE (PREFIX_VEX_0FDA) },
8675 { PREFIX_TABLE (PREFIX_VEX_0FDB) },
8676 { PREFIX_TABLE (PREFIX_VEX_0FDC) },
8677 { PREFIX_TABLE (PREFIX_VEX_0FDD) },
8678 { PREFIX_TABLE (PREFIX_VEX_0FDE) },
8679 { PREFIX_TABLE (PREFIX_VEX_0FDF) },
c0f3af97 8680 /* e0 */
592a252b
L
8681 { PREFIX_TABLE (PREFIX_VEX_0FE0) },
8682 { PREFIX_TABLE (PREFIX_VEX_0FE1) },
8683 { PREFIX_TABLE (PREFIX_VEX_0FE2) },
8684 { PREFIX_TABLE (PREFIX_VEX_0FE3) },
8685 { PREFIX_TABLE (PREFIX_VEX_0FE4) },
8686 { PREFIX_TABLE (PREFIX_VEX_0FE5) },
8687 { PREFIX_TABLE (PREFIX_VEX_0FE6) },
8688 { PREFIX_TABLE (PREFIX_VEX_0FE7) },
c0f3af97 8689 /* e8 */
592a252b
L
8690 { PREFIX_TABLE (PREFIX_VEX_0FE8) },
8691 { PREFIX_TABLE (PREFIX_VEX_0FE9) },
8692 { PREFIX_TABLE (PREFIX_VEX_0FEA) },
8693 { PREFIX_TABLE (PREFIX_VEX_0FEB) },
8694 { PREFIX_TABLE (PREFIX_VEX_0FEC) },
8695 { PREFIX_TABLE (PREFIX_VEX_0FED) },
8696 { PREFIX_TABLE (PREFIX_VEX_0FEE) },
8697 { PREFIX_TABLE (PREFIX_VEX_0FEF) },
c0f3af97 8698 /* f0 */
592a252b
L
8699 { PREFIX_TABLE (PREFIX_VEX_0FF0) },
8700 { PREFIX_TABLE (PREFIX_VEX_0FF1) },
8701 { PREFIX_TABLE (PREFIX_VEX_0FF2) },
8702 { PREFIX_TABLE (PREFIX_VEX_0FF3) },
8703 { PREFIX_TABLE (PREFIX_VEX_0FF4) },
8704 { PREFIX_TABLE (PREFIX_VEX_0FF5) },
8705 { PREFIX_TABLE (PREFIX_VEX_0FF6) },
8706 { PREFIX_TABLE (PREFIX_VEX_0FF7) },
c0f3af97 8707 /* f8 */
592a252b
L
8708 { PREFIX_TABLE (PREFIX_VEX_0FF8) },
8709 { PREFIX_TABLE (PREFIX_VEX_0FF9) },
8710 { PREFIX_TABLE (PREFIX_VEX_0FFA) },
8711 { PREFIX_TABLE (PREFIX_VEX_0FFB) },
8712 { PREFIX_TABLE (PREFIX_VEX_0FFC) },
8713 { PREFIX_TABLE (PREFIX_VEX_0FFD) },
8714 { PREFIX_TABLE (PREFIX_VEX_0FFE) },
592d1631 8715 { Bad_Opcode },
c0f3af97
L
8716 },
8717 /* VEX_0F38 */
8718 {
8719 /* 00 */
592a252b
L
8720 { PREFIX_TABLE (PREFIX_VEX_0F3800) },
8721 { PREFIX_TABLE (PREFIX_VEX_0F3801) },
8722 { PREFIX_TABLE (PREFIX_VEX_0F3802) },
8723 { PREFIX_TABLE (PREFIX_VEX_0F3803) },
8724 { PREFIX_TABLE (PREFIX_VEX_0F3804) },
8725 { PREFIX_TABLE (PREFIX_VEX_0F3805) },
8726 { PREFIX_TABLE (PREFIX_VEX_0F3806) },
8727 { PREFIX_TABLE (PREFIX_VEX_0F3807) },
c0f3af97 8728 /* 08 */
592a252b
L
8729 { PREFIX_TABLE (PREFIX_VEX_0F3808) },
8730 { PREFIX_TABLE (PREFIX_VEX_0F3809) },
8731 { PREFIX_TABLE (PREFIX_VEX_0F380A) },
8732 { PREFIX_TABLE (PREFIX_VEX_0F380B) },
8733 { PREFIX_TABLE (PREFIX_VEX_0F380C) },
8734 { PREFIX_TABLE (PREFIX_VEX_0F380D) },
8735 { PREFIX_TABLE (PREFIX_VEX_0F380E) },
8736 { PREFIX_TABLE (PREFIX_VEX_0F380F) },
c0f3af97 8737 /* 10 */
592d1631
L
8738 { Bad_Opcode },
8739 { Bad_Opcode },
8740 { Bad_Opcode },
592a252b 8741 { PREFIX_TABLE (PREFIX_VEX_0F3813) },
592d1631
L
8742 { Bad_Opcode },
8743 { Bad_Opcode },
6c30d220 8744 { PREFIX_TABLE (PREFIX_VEX_0F3816) },
592a252b 8745 { PREFIX_TABLE (PREFIX_VEX_0F3817) },
c0f3af97 8746 /* 18 */
592a252b
L
8747 { PREFIX_TABLE (PREFIX_VEX_0F3818) },
8748 { PREFIX_TABLE (PREFIX_VEX_0F3819) },
8749 { PREFIX_TABLE (PREFIX_VEX_0F381A) },
592d1631 8750 { Bad_Opcode },
592a252b
L
8751 { PREFIX_TABLE (PREFIX_VEX_0F381C) },
8752 { PREFIX_TABLE (PREFIX_VEX_0F381D) },
8753 { PREFIX_TABLE (PREFIX_VEX_0F381E) },
592d1631 8754 { Bad_Opcode },
c0f3af97 8755 /* 20 */
592a252b
L
8756 { PREFIX_TABLE (PREFIX_VEX_0F3820) },
8757 { PREFIX_TABLE (PREFIX_VEX_0F3821) },
8758 { PREFIX_TABLE (PREFIX_VEX_0F3822) },
8759 { PREFIX_TABLE (PREFIX_VEX_0F3823) },
8760 { PREFIX_TABLE (PREFIX_VEX_0F3824) },
8761 { PREFIX_TABLE (PREFIX_VEX_0F3825) },
592d1631
L
8762 { Bad_Opcode },
8763 { Bad_Opcode },
c0f3af97 8764 /* 28 */
592a252b
L
8765 { PREFIX_TABLE (PREFIX_VEX_0F3828) },
8766 { PREFIX_TABLE (PREFIX_VEX_0F3829) },
8767 { PREFIX_TABLE (PREFIX_VEX_0F382A) },
8768 { PREFIX_TABLE (PREFIX_VEX_0F382B) },
8769 { PREFIX_TABLE (PREFIX_VEX_0F382C) },
8770 { PREFIX_TABLE (PREFIX_VEX_0F382D) },
8771 { PREFIX_TABLE (PREFIX_VEX_0F382E) },
8772 { PREFIX_TABLE (PREFIX_VEX_0F382F) },
c0f3af97 8773 /* 30 */
592a252b
L
8774 { PREFIX_TABLE (PREFIX_VEX_0F3830) },
8775 { PREFIX_TABLE (PREFIX_VEX_0F3831) },
8776 { PREFIX_TABLE (PREFIX_VEX_0F3832) },
8777 { PREFIX_TABLE (PREFIX_VEX_0F3833) },
8778 { PREFIX_TABLE (PREFIX_VEX_0F3834) },
8779 { PREFIX_TABLE (PREFIX_VEX_0F3835) },
6c30d220 8780 { PREFIX_TABLE (PREFIX_VEX_0F3836) },
592a252b 8781 { PREFIX_TABLE (PREFIX_VEX_0F3837) },
c0f3af97 8782 /* 38 */
592a252b
L
8783 { PREFIX_TABLE (PREFIX_VEX_0F3838) },
8784 { PREFIX_TABLE (PREFIX_VEX_0F3839) },
8785 { PREFIX_TABLE (PREFIX_VEX_0F383A) },
8786 { PREFIX_TABLE (PREFIX_VEX_0F383B) },
8787 { PREFIX_TABLE (PREFIX_VEX_0F383C) },
8788 { PREFIX_TABLE (PREFIX_VEX_0F383D) },
8789 { PREFIX_TABLE (PREFIX_VEX_0F383E) },
8790 { PREFIX_TABLE (PREFIX_VEX_0F383F) },
c0f3af97 8791 /* 40 */
592a252b
L
8792 { PREFIX_TABLE (PREFIX_VEX_0F3840) },
8793 { PREFIX_TABLE (PREFIX_VEX_0F3841) },
592d1631
L
8794 { Bad_Opcode },
8795 { Bad_Opcode },
8796 { Bad_Opcode },
6c30d220
L
8797 { PREFIX_TABLE (PREFIX_VEX_0F3845) },
8798 { PREFIX_TABLE (PREFIX_VEX_0F3846) },
8799 { PREFIX_TABLE (PREFIX_VEX_0F3847) },
c0f3af97 8800 /* 48 */
592d1631
L
8801 { Bad_Opcode },
8802 { Bad_Opcode },
8803 { Bad_Opcode },
8804 { Bad_Opcode },
8805 { Bad_Opcode },
8806 { Bad_Opcode },
8807 { Bad_Opcode },
8808 { Bad_Opcode },
c0f3af97 8809 /* 50 */
592d1631
L
8810 { Bad_Opcode },
8811 { Bad_Opcode },
8812 { Bad_Opcode },
8813 { Bad_Opcode },
8814 { Bad_Opcode },
8815 { Bad_Opcode },
8816 { Bad_Opcode },
8817 { Bad_Opcode },
c0f3af97 8818 /* 58 */
6c30d220
L
8819 { PREFIX_TABLE (PREFIX_VEX_0F3858) },
8820 { PREFIX_TABLE (PREFIX_VEX_0F3859) },
8821 { PREFIX_TABLE (PREFIX_VEX_0F385A) },
592d1631
L
8822 { Bad_Opcode },
8823 { Bad_Opcode },
8824 { Bad_Opcode },
8825 { Bad_Opcode },
8826 { Bad_Opcode },
c0f3af97 8827 /* 60 */
592d1631
L
8828 { Bad_Opcode },
8829 { Bad_Opcode },
8830 { Bad_Opcode },
8831 { Bad_Opcode },
8832 { Bad_Opcode },
8833 { Bad_Opcode },
8834 { Bad_Opcode },
8835 { Bad_Opcode },
c0f3af97 8836 /* 68 */
592d1631
L
8837 { Bad_Opcode },
8838 { Bad_Opcode },
8839 { Bad_Opcode },
8840 { Bad_Opcode },
8841 { Bad_Opcode },
8842 { Bad_Opcode },
8843 { Bad_Opcode },
8844 { Bad_Opcode },
c0f3af97 8845 /* 70 */
592d1631
L
8846 { Bad_Opcode },
8847 { Bad_Opcode },
8848 { Bad_Opcode },
8849 { Bad_Opcode },
8850 { Bad_Opcode },
8851 { Bad_Opcode },
8852 { Bad_Opcode },
8853 { Bad_Opcode },
c0f3af97 8854 /* 78 */
6c30d220
L
8855 { PREFIX_TABLE (PREFIX_VEX_0F3878) },
8856 { PREFIX_TABLE (PREFIX_VEX_0F3879) },
592d1631
L
8857 { Bad_Opcode },
8858 { Bad_Opcode },
8859 { Bad_Opcode },
8860 { Bad_Opcode },
8861 { Bad_Opcode },
8862 { Bad_Opcode },
c0f3af97 8863 /* 80 */
592d1631
L
8864 { Bad_Opcode },
8865 { Bad_Opcode },
8866 { Bad_Opcode },
8867 { Bad_Opcode },
8868 { Bad_Opcode },
8869 { Bad_Opcode },
8870 { Bad_Opcode },
8871 { Bad_Opcode },
c0f3af97 8872 /* 88 */
592d1631
L
8873 { Bad_Opcode },
8874 { Bad_Opcode },
8875 { Bad_Opcode },
8876 { Bad_Opcode },
6c30d220 8877 { PREFIX_TABLE (PREFIX_VEX_0F388C) },
592d1631 8878 { Bad_Opcode },
6c30d220 8879 { PREFIX_TABLE (PREFIX_VEX_0F388E) },
592d1631 8880 { Bad_Opcode },
c0f3af97 8881 /* 90 */
6c30d220
L
8882 { PREFIX_TABLE (PREFIX_VEX_0F3890) },
8883 { PREFIX_TABLE (PREFIX_VEX_0F3891) },
8884 { PREFIX_TABLE (PREFIX_VEX_0F3892) },
8885 { PREFIX_TABLE (PREFIX_VEX_0F3893) },
592d1631
L
8886 { Bad_Opcode },
8887 { Bad_Opcode },
592a252b
L
8888 { PREFIX_TABLE (PREFIX_VEX_0F3896) },
8889 { PREFIX_TABLE (PREFIX_VEX_0F3897) },
c0f3af97 8890 /* 98 */
592a252b
L
8891 { PREFIX_TABLE (PREFIX_VEX_0F3898) },
8892 { PREFIX_TABLE (PREFIX_VEX_0F3899) },
8893 { PREFIX_TABLE (PREFIX_VEX_0F389A) },
8894 { PREFIX_TABLE (PREFIX_VEX_0F389B) },
8895 { PREFIX_TABLE (PREFIX_VEX_0F389C) },
8896 { PREFIX_TABLE (PREFIX_VEX_0F389D) },
8897 { PREFIX_TABLE (PREFIX_VEX_0F389E) },
8898 { PREFIX_TABLE (PREFIX_VEX_0F389F) },
c0f3af97 8899 /* a0 */
592d1631
L
8900 { Bad_Opcode },
8901 { Bad_Opcode },
8902 { Bad_Opcode },
8903 { Bad_Opcode },
8904 { Bad_Opcode },
8905 { Bad_Opcode },
592a252b
L
8906 { PREFIX_TABLE (PREFIX_VEX_0F38A6) },
8907 { PREFIX_TABLE (PREFIX_VEX_0F38A7) },
c0f3af97 8908 /* a8 */
592a252b
L
8909 { PREFIX_TABLE (PREFIX_VEX_0F38A8) },
8910 { PREFIX_TABLE (PREFIX_VEX_0F38A9) },
8911 { PREFIX_TABLE (PREFIX_VEX_0F38AA) },
8912 { PREFIX_TABLE (PREFIX_VEX_0F38AB) },
8913 { PREFIX_TABLE (PREFIX_VEX_0F38AC) },
8914 { PREFIX_TABLE (PREFIX_VEX_0F38AD) },
8915 { PREFIX_TABLE (PREFIX_VEX_0F38AE) },
8916 { PREFIX_TABLE (PREFIX_VEX_0F38AF) },
c0f3af97 8917 /* b0 */
592d1631
L
8918 { Bad_Opcode },
8919 { Bad_Opcode },
8920 { Bad_Opcode },
8921 { Bad_Opcode },
8922 { Bad_Opcode },
8923 { Bad_Opcode },
592a252b
L
8924 { PREFIX_TABLE (PREFIX_VEX_0F38B6) },
8925 { PREFIX_TABLE (PREFIX_VEX_0F38B7) },
c0f3af97 8926 /* b8 */
592a252b
L
8927 { PREFIX_TABLE (PREFIX_VEX_0F38B8) },
8928 { PREFIX_TABLE (PREFIX_VEX_0F38B9) },
8929 { PREFIX_TABLE (PREFIX_VEX_0F38BA) },
8930 { PREFIX_TABLE (PREFIX_VEX_0F38BB) },
8931 { PREFIX_TABLE (PREFIX_VEX_0F38BC) },
8932 { PREFIX_TABLE (PREFIX_VEX_0F38BD) },
8933 { PREFIX_TABLE (PREFIX_VEX_0F38BE) },
8934 { PREFIX_TABLE (PREFIX_VEX_0F38BF) },
c0f3af97 8935 /* c0 */
592d1631
L
8936 { Bad_Opcode },
8937 { Bad_Opcode },
8938 { Bad_Opcode },
8939 { Bad_Opcode },
8940 { Bad_Opcode },
8941 { Bad_Opcode },
8942 { Bad_Opcode },
8943 { Bad_Opcode },
c0f3af97 8944 /* c8 */
592d1631
L
8945 { Bad_Opcode },
8946 { Bad_Opcode },
8947 { Bad_Opcode },
8948 { Bad_Opcode },
8949 { Bad_Opcode },
8950 { Bad_Opcode },
8951 { Bad_Opcode },
48521003 8952 { PREFIX_TABLE (PREFIX_VEX_0F38CF) },
c0f3af97 8953 /* d0 */
592d1631
L
8954 { Bad_Opcode },
8955 { Bad_Opcode },
8956 { Bad_Opcode },
8957 { Bad_Opcode },
8958 { Bad_Opcode },
8959 { Bad_Opcode },
8960 { Bad_Opcode },
8961 { Bad_Opcode },
c0f3af97 8962 /* d8 */
592d1631
L
8963 { Bad_Opcode },
8964 { Bad_Opcode },
8965 { Bad_Opcode },
592a252b
L
8966 { PREFIX_TABLE (PREFIX_VEX_0F38DB) },
8967 { PREFIX_TABLE (PREFIX_VEX_0F38DC) },
8968 { PREFIX_TABLE (PREFIX_VEX_0F38DD) },
8969 { PREFIX_TABLE (PREFIX_VEX_0F38DE) },
8970 { PREFIX_TABLE (PREFIX_VEX_0F38DF) },
c0f3af97 8971 /* e0 */
592d1631
L
8972 { Bad_Opcode },
8973 { Bad_Opcode },
8974 { Bad_Opcode },
8975 { Bad_Opcode },
8976 { Bad_Opcode },
8977 { Bad_Opcode },
8978 { Bad_Opcode },
8979 { Bad_Opcode },
c0f3af97 8980 /* e8 */
592d1631
L
8981 { Bad_Opcode },
8982 { Bad_Opcode },
8983 { Bad_Opcode },
8984 { Bad_Opcode },
8985 { Bad_Opcode },
8986 { Bad_Opcode },
8987 { Bad_Opcode },
8988 { Bad_Opcode },
c0f3af97 8989 /* f0 */
592d1631
L
8990 { Bad_Opcode },
8991 { Bad_Opcode },
f12dc422
L
8992 { PREFIX_TABLE (PREFIX_VEX_0F38F2) },
8993 { REG_TABLE (REG_VEX_0F38F3) },
592d1631 8994 { Bad_Opcode },
6c30d220
L
8995 { PREFIX_TABLE (PREFIX_VEX_0F38F5) },
8996 { PREFIX_TABLE (PREFIX_VEX_0F38F6) },
f12dc422 8997 { PREFIX_TABLE (PREFIX_VEX_0F38F7) },
c0f3af97 8998 /* f8 */
592d1631
L
8999 { Bad_Opcode },
9000 { Bad_Opcode },
9001 { Bad_Opcode },
9002 { Bad_Opcode },
9003 { Bad_Opcode },
9004 { Bad_Opcode },
9005 { Bad_Opcode },
9006 { Bad_Opcode },
c0f3af97
L
9007 },
9008 /* VEX_0F3A */
9009 {
9010 /* 00 */
6c30d220
L
9011 { PREFIX_TABLE (PREFIX_VEX_0F3A00) },
9012 { PREFIX_TABLE (PREFIX_VEX_0F3A01) },
9013 { PREFIX_TABLE (PREFIX_VEX_0F3A02) },
592d1631 9014 { Bad_Opcode },
592a252b
L
9015 { PREFIX_TABLE (PREFIX_VEX_0F3A04) },
9016 { PREFIX_TABLE (PREFIX_VEX_0F3A05) },
9017 { PREFIX_TABLE (PREFIX_VEX_0F3A06) },
592d1631 9018 { Bad_Opcode },
c0f3af97 9019 /* 08 */
592a252b
L
9020 { PREFIX_TABLE (PREFIX_VEX_0F3A08) },
9021 { PREFIX_TABLE (PREFIX_VEX_0F3A09) },
9022 { PREFIX_TABLE (PREFIX_VEX_0F3A0A) },
9023 { PREFIX_TABLE (PREFIX_VEX_0F3A0B) },
9024 { PREFIX_TABLE (PREFIX_VEX_0F3A0C) },
9025 { PREFIX_TABLE (PREFIX_VEX_0F3A0D) },
9026 { PREFIX_TABLE (PREFIX_VEX_0F3A0E) },
9027 { PREFIX_TABLE (PREFIX_VEX_0F3A0F) },
c0f3af97 9028 /* 10 */
592d1631
L
9029 { Bad_Opcode },
9030 { Bad_Opcode },
9031 { Bad_Opcode },
9032 { Bad_Opcode },
592a252b
L
9033 { PREFIX_TABLE (PREFIX_VEX_0F3A14) },
9034 { PREFIX_TABLE (PREFIX_VEX_0F3A15) },
9035 { PREFIX_TABLE (PREFIX_VEX_0F3A16) },
9036 { PREFIX_TABLE (PREFIX_VEX_0F3A17) },
c0f3af97 9037 /* 18 */
592a252b
L
9038 { PREFIX_TABLE (PREFIX_VEX_0F3A18) },
9039 { PREFIX_TABLE (PREFIX_VEX_0F3A19) },
592d1631
L
9040 { Bad_Opcode },
9041 { Bad_Opcode },
9042 { Bad_Opcode },
592a252b 9043 { PREFIX_TABLE (PREFIX_VEX_0F3A1D) },
592d1631
L
9044 { Bad_Opcode },
9045 { Bad_Opcode },
c0f3af97 9046 /* 20 */
592a252b
L
9047 { PREFIX_TABLE (PREFIX_VEX_0F3A20) },
9048 { PREFIX_TABLE (PREFIX_VEX_0F3A21) },
9049 { PREFIX_TABLE (PREFIX_VEX_0F3A22) },
592d1631
L
9050 { Bad_Opcode },
9051 { Bad_Opcode },
9052 { Bad_Opcode },
9053 { Bad_Opcode },
9054 { Bad_Opcode },
c0f3af97 9055 /* 28 */
592d1631
L
9056 { Bad_Opcode },
9057 { Bad_Opcode },
9058 { Bad_Opcode },
9059 { Bad_Opcode },
9060 { Bad_Opcode },
9061 { Bad_Opcode },
9062 { Bad_Opcode },
9063 { Bad_Opcode },
c0f3af97 9064 /* 30 */
43234a1e 9065 { PREFIX_TABLE (PREFIX_VEX_0F3A30) },
1ba585e8 9066 { PREFIX_TABLE (PREFIX_VEX_0F3A31) },
43234a1e 9067 { PREFIX_TABLE (PREFIX_VEX_0F3A32) },
1ba585e8 9068 { PREFIX_TABLE (PREFIX_VEX_0F3A33) },
592d1631
L
9069 { Bad_Opcode },
9070 { Bad_Opcode },
9071 { Bad_Opcode },
9072 { Bad_Opcode },
c0f3af97 9073 /* 38 */
6c30d220
L
9074 { PREFIX_TABLE (PREFIX_VEX_0F3A38) },
9075 { PREFIX_TABLE (PREFIX_VEX_0F3A39) },
592d1631
L
9076 { Bad_Opcode },
9077 { Bad_Opcode },
9078 { Bad_Opcode },
9079 { Bad_Opcode },
9080 { Bad_Opcode },
9081 { Bad_Opcode },
c0f3af97 9082 /* 40 */
592a252b
L
9083 { PREFIX_TABLE (PREFIX_VEX_0F3A40) },
9084 { PREFIX_TABLE (PREFIX_VEX_0F3A41) },
9085 { PREFIX_TABLE (PREFIX_VEX_0F3A42) },
592d1631 9086 { Bad_Opcode },
592a252b 9087 { PREFIX_TABLE (PREFIX_VEX_0F3A44) },
592d1631 9088 { Bad_Opcode },
6c30d220 9089 { PREFIX_TABLE (PREFIX_VEX_0F3A46) },
592d1631 9090 { Bad_Opcode },
c0f3af97 9091 /* 48 */
592a252b
L
9092 { PREFIX_TABLE (PREFIX_VEX_0F3A48) },
9093 { PREFIX_TABLE (PREFIX_VEX_0F3A49) },
9094 { PREFIX_TABLE (PREFIX_VEX_0F3A4A) },
9095 { PREFIX_TABLE (PREFIX_VEX_0F3A4B) },
9096 { PREFIX_TABLE (PREFIX_VEX_0F3A4C) },
592d1631
L
9097 { Bad_Opcode },
9098 { Bad_Opcode },
9099 { Bad_Opcode },
c0f3af97 9100 /* 50 */
592d1631
L
9101 { Bad_Opcode },
9102 { Bad_Opcode },
9103 { Bad_Opcode },
9104 { Bad_Opcode },
9105 { Bad_Opcode },
9106 { Bad_Opcode },
9107 { Bad_Opcode },
9108 { Bad_Opcode },
c0f3af97 9109 /* 58 */
592d1631
L
9110 { Bad_Opcode },
9111 { Bad_Opcode },
9112 { Bad_Opcode },
9113 { Bad_Opcode },
592a252b
L
9114 { PREFIX_TABLE (PREFIX_VEX_0F3A5C) },
9115 { PREFIX_TABLE (PREFIX_VEX_0F3A5D) },
9116 { PREFIX_TABLE (PREFIX_VEX_0F3A5E) },
9117 { PREFIX_TABLE (PREFIX_VEX_0F3A5F) },
c0f3af97 9118 /* 60 */
592a252b
L
9119 { PREFIX_TABLE (PREFIX_VEX_0F3A60) },
9120 { PREFIX_TABLE (PREFIX_VEX_0F3A61) },
9121 { PREFIX_TABLE (PREFIX_VEX_0F3A62) },
9122 { PREFIX_TABLE (PREFIX_VEX_0F3A63) },
592d1631
L
9123 { Bad_Opcode },
9124 { Bad_Opcode },
9125 { Bad_Opcode },
9126 { Bad_Opcode },
c0f3af97 9127 /* 68 */
592a252b
L
9128 { PREFIX_TABLE (PREFIX_VEX_0F3A68) },
9129 { PREFIX_TABLE (PREFIX_VEX_0F3A69) },
9130 { PREFIX_TABLE (PREFIX_VEX_0F3A6A) },
9131 { PREFIX_TABLE (PREFIX_VEX_0F3A6B) },
9132 { PREFIX_TABLE (PREFIX_VEX_0F3A6C) },
9133 { PREFIX_TABLE (PREFIX_VEX_0F3A6D) },
9134 { PREFIX_TABLE (PREFIX_VEX_0F3A6E) },
9135 { PREFIX_TABLE (PREFIX_VEX_0F3A6F) },
c0f3af97 9136 /* 70 */
592d1631
L
9137 { Bad_Opcode },
9138 { Bad_Opcode },
9139 { Bad_Opcode },
9140 { Bad_Opcode },
9141 { Bad_Opcode },
9142 { Bad_Opcode },
9143 { Bad_Opcode },
9144 { Bad_Opcode },
c0f3af97 9145 /* 78 */
592a252b
L
9146 { PREFIX_TABLE (PREFIX_VEX_0F3A78) },
9147 { PREFIX_TABLE (PREFIX_VEX_0F3A79) },
9148 { PREFIX_TABLE (PREFIX_VEX_0F3A7A) },
9149 { PREFIX_TABLE (PREFIX_VEX_0F3A7B) },
9150 { PREFIX_TABLE (PREFIX_VEX_0F3A7C) },
9151 { PREFIX_TABLE (PREFIX_VEX_0F3A7D) },
9152 { PREFIX_TABLE (PREFIX_VEX_0F3A7E) },
9153 { PREFIX_TABLE (PREFIX_VEX_0F3A7F) },
c0f3af97 9154 /* 80 */
592d1631
L
9155 { Bad_Opcode },
9156 { Bad_Opcode },
9157 { Bad_Opcode },
9158 { Bad_Opcode },
9159 { Bad_Opcode },
9160 { Bad_Opcode },
9161 { Bad_Opcode },
9162 { Bad_Opcode },
c0f3af97 9163 /* 88 */
592d1631
L
9164 { Bad_Opcode },
9165 { Bad_Opcode },
9166 { Bad_Opcode },
9167 { Bad_Opcode },
9168 { Bad_Opcode },
9169 { Bad_Opcode },
9170 { Bad_Opcode },
9171 { Bad_Opcode },
c0f3af97 9172 /* 90 */
592d1631
L
9173 { Bad_Opcode },
9174 { Bad_Opcode },
9175 { Bad_Opcode },
9176 { Bad_Opcode },
9177 { Bad_Opcode },
9178 { Bad_Opcode },
9179 { Bad_Opcode },
9180 { Bad_Opcode },
c0f3af97 9181 /* 98 */
592d1631
L
9182 { Bad_Opcode },
9183 { Bad_Opcode },
9184 { Bad_Opcode },
9185 { Bad_Opcode },
9186 { Bad_Opcode },
9187 { Bad_Opcode },
9188 { Bad_Opcode },
9189 { Bad_Opcode },
c0f3af97 9190 /* a0 */
592d1631
L
9191 { Bad_Opcode },
9192 { Bad_Opcode },
9193 { Bad_Opcode },
9194 { Bad_Opcode },
9195 { Bad_Opcode },
9196 { Bad_Opcode },
9197 { Bad_Opcode },
9198 { Bad_Opcode },
c0f3af97 9199 /* a8 */
592d1631
L
9200 { Bad_Opcode },
9201 { Bad_Opcode },
9202 { Bad_Opcode },
9203 { Bad_Opcode },
9204 { Bad_Opcode },
9205 { Bad_Opcode },
9206 { Bad_Opcode },
9207 { Bad_Opcode },
c0f3af97 9208 /* b0 */
592d1631
L
9209 { Bad_Opcode },
9210 { Bad_Opcode },
9211 { Bad_Opcode },
9212 { Bad_Opcode },
9213 { Bad_Opcode },
9214 { Bad_Opcode },
9215 { Bad_Opcode },
9216 { Bad_Opcode },
c0f3af97 9217 /* b8 */
592d1631
L
9218 { Bad_Opcode },
9219 { Bad_Opcode },
9220 { Bad_Opcode },
9221 { Bad_Opcode },
9222 { Bad_Opcode },
9223 { Bad_Opcode },
9224 { Bad_Opcode },
9225 { Bad_Opcode },
c0f3af97 9226 /* c0 */
592d1631
L
9227 { Bad_Opcode },
9228 { Bad_Opcode },
9229 { Bad_Opcode },
9230 { Bad_Opcode },
9231 { Bad_Opcode },
9232 { Bad_Opcode },
9233 { Bad_Opcode },
9234 { Bad_Opcode },
c0f3af97 9235 /* c8 */
592d1631
L
9236 { Bad_Opcode },
9237 { Bad_Opcode },
9238 { Bad_Opcode },
9239 { Bad_Opcode },
9240 { Bad_Opcode },
9241 { Bad_Opcode },
48521003
IT
9242 { PREFIX_TABLE(PREFIX_VEX_0F3ACE) },
9243 { PREFIX_TABLE(PREFIX_VEX_0F3ACF) },
c0f3af97 9244 /* d0 */
592d1631
L
9245 { Bad_Opcode },
9246 { Bad_Opcode },
9247 { Bad_Opcode },
9248 { Bad_Opcode },
9249 { Bad_Opcode },
9250 { Bad_Opcode },
9251 { Bad_Opcode },
9252 { Bad_Opcode },
c0f3af97 9253 /* d8 */
592d1631
L
9254 { Bad_Opcode },
9255 { Bad_Opcode },
9256 { Bad_Opcode },
9257 { Bad_Opcode },
9258 { Bad_Opcode },
9259 { Bad_Opcode },
9260 { Bad_Opcode },
592a252b 9261 { PREFIX_TABLE (PREFIX_VEX_0F3ADF) },
c0f3af97 9262 /* e0 */
592d1631
L
9263 { Bad_Opcode },
9264 { Bad_Opcode },
9265 { Bad_Opcode },
9266 { Bad_Opcode },
9267 { Bad_Opcode },
9268 { Bad_Opcode },
9269 { Bad_Opcode },
9270 { Bad_Opcode },
c0f3af97 9271 /* e8 */
592d1631
L
9272 { Bad_Opcode },
9273 { Bad_Opcode },
9274 { Bad_Opcode },
9275 { Bad_Opcode },
9276 { Bad_Opcode },
9277 { Bad_Opcode },
9278 { Bad_Opcode },
9279 { Bad_Opcode },
c0f3af97 9280 /* f0 */
6c30d220 9281 { PREFIX_TABLE (PREFIX_VEX_0F3AF0) },
592d1631
L
9282 { Bad_Opcode },
9283 { Bad_Opcode },
9284 { Bad_Opcode },
9285 { Bad_Opcode },
9286 { Bad_Opcode },
9287 { Bad_Opcode },
9288 { Bad_Opcode },
c0f3af97 9289 /* f8 */
592d1631
L
9290 { Bad_Opcode },
9291 { Bad_Opcode },
9292 { Bad_Opcode },
9293 { Bad_Opcode },
9294 { Bad_Opcode },
9295 { Bad_Opcode },
9296 { Bad_Opcode },
9297 { Bad_Opcode },
c0f3af97
L
9298 },
9299};
9300
43234a1e 9301#include "i386-dis-evex.h"
ad692897 9302
c0f3af97 9303static const struct dis386 vex_len_table[][2] = {
592a252b 9304 /* VEX_LEN_0F12_P_0_M_0 */
c0f3af97 9305 {
ec6f095a 9306 { "vmovlps", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9307 },
9308
592a252b 9309 /* VEX_LEN_0F12_P_0_M_1 */
c0f3af97 9310 {
ec6f095a 9311 { "vmovhlps", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9312 },
9313
592a252b 9314 /* VEX_LEN_0F12_P_2 */
c0f3af97 9315 {
ec6f095a 9316 { "vmovlpd", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9317 },
9318
592a252b 9319 /* VEX_LEN_0F13_M_0 */
c0f3af97 9320 {
ec6f095a 9321 { "vmovlpX", { EXq, XM }, 0 },
c0f3af97
L
9322 },
9323
592a252b 9324 /* VEX_LEN_0F16_P_0_M_0 */
c0f3af97 9325 {
ec6f095a 9326 { "vmovhps", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9327 },
9328
592a252b 9329 /* VEX_LEN_0F16_P_0_M_1 */
c0f3af97 9330 {
ec6f095a 9331 { "vmovlhps", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9332 },
9333
592a252b 9334 /* VEX_LEN_0F16_P_2 */
c0f3af97 9335 {
ec6f095a 9336 { "vmovhpd", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9337 },
9338
592a252b 9339 /* VEX_LEN_0F17_M_0 */
c0f3af97 9340 {
ec6f095a 9341 { "vmovhpX", { EXq, XM }, 0 },
c0f3af97
L
9342 },
9343
592a252b 9344 /* VEX_LEN_0F2A_P_1 */
c0f3af97 9345 {
bf890a93
IT
9346 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev }, 0 },
9347 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev }, 0 },
c0f3af97
L
9348 },
9349
592a252b 9350 /* VEX_LEN_0F2A_P_3 */
c0f3af97 9351 {
bf890a93
IT
9352 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev }, 0 },
9353 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev }, 0 },
c0f3af97
L
9354 },
9355
592a252b 9356 /* VEX_LEN_0F2C_P_1 */
c0f3af97 9357 {
9646c87b
JB
9358 { "vcvttss2si", { Gv, EXdScalar }, 0 },
9359 { "vcvttss2si", { Gv, EXdScalar }, 0 },
c0f3af97
L
9360 },
9361
592a252b 9362 /* VEX_LEN_0F2C_P_3 */
c0f3af97 9363 {
9646c87b
JB
9364 { "vcvttsd2si", { Gv, EXqScalar }, 0 },
9365 { "vcvttsd2si", { Gv, EXqScalar }, 0 },
c0f3af97
L
9366 },
9367
592a252b 9368 /* VEX_LEN_0F2D_P_1 */
c0f3af97 9369 {
9646c87b
JB
9370 { "vcvtss2si", { Gv, EXdScalar }, 0 },
9371 { "vcvtss2si", { Gv, EXdScalar }, 0 },
c0f3af97
L
9372 },
9373
592a252b 9374 /* VEX_LEN_0F2D_P_3 */
c0f3af97 9375 {
9646c87b
JB
9376 { "vcvtsd2si", { Gv, EXqScalar }, 0 },
9377 { "vcvtsd2si", { Gv, EXqScalar }, 0 },
c0f3af97
L
9378 },
9379
43234a1e
L
9380 /* VEX_LEN_0F41_P_0 */
9381 {
9382 { Bad_Opcode },
9383 { VEX_W_TABLE (VEX_W_0F41_P_0_LEN_1) },
9384 },
1ba585e8
IT
9385 /* VEX_LEN_0F41_P_2 */
9386 {
9387 { Bad_Opcode },
9388 { VEX_W_TABLE (VEX_W_0F41_P_2_LEN_1) },
9389 },
43234a1e
L
9390 /* VEX_LEN_0F42_P_0 */
9391 {
9392 { Bad_Opcode },
9393 { VEX_W_TABLE (VEX_W_0F42_P_0_LEN_1) },
9394 },
1ba585e8
IT
9395 /* VEX_LEN_0F42_P_2 */
9396 {
9397 { Bad_Opcode },
9398 { VEX_W_TABLE (VEX_W_0F42_P_2_LEN_1) },
9399 },
43234a1e
L
9400 /* VEX_LEN_0F44_P_0 */
9401 {
9402 { VEX_W_TABLE (VEX_W_0F44_P_0_LEN_0) },
9403 },
1ba585e8
IT
9404 /* VEX_LEN_0F44_P_2 */
9405 {
9406 { VEX_W_TABLE (VEX_W_0F44_P_2_LEN_0) },
9407 },
43234a1e
L
9408 /* VEX_LEN_0F45_P_0 */
9409 {
9410 { Bad_Opcode },
9411 { VEX_W_TABLE (VEX_W_0F45_P_0_LEN_1) },
9412 },
1ba585e8
IT
9413 /* VEX_LEN_0F45_P_2 */
9414 {
9415 { Bad_Opcode },
9416 { VEX_W_TABLE (VEX_W_0F45_P_2_LEN_1) },
9417 },
43234a1e
L
9418 /* VEX_LEN_0F46_P_0 */
9419 {
9420 { Bad_Opcode },
9421 { VEX_W_TABLE (VEX_W_0F46_P_0_LEN_1) },
9422 },
1ba585e8
IT
9423 /* VEX_LEN_0F46_P_2 */
9424 {
9425 { Bad_Opcode },
9426 { VEX_W_TABLE (VEX_W_0F46_P_2_LEN_1) },
9427 },
43234a1e
L
9428 /* VEX_LEN_0F47_P_0 */
9429 {
9430 { Bad_Opcode },
9431 { VEX_W_TABLE (VEX_W_0F47_P_0_LEN_1) },
9432 },
1ba585e8
IT
9433 /* VEX_LEN_0F47_P_2 */
9434 {
9435 { Bad_Opcode },
9436 { VEX_W_TABLE (VEX_W_0F47_P_2_LEN_1) },
9437 },
9438 /* VEX_LEN_0F4A_P_0 */
9439 {
9440 { Bad_Opcode },
9441 { VEX_W_TABLE (VEX_W_0F4A_P_0_LEN_1) },
9442 },
9443 /* VEX_LEN_0F4A_P_2 */
9444 {
9445 { Bad_Opcode },
9446 { VEX_W_TABLE (VEX_W_0F4A_P_2_LEN_1) },
9447 },
9448 /* VEX_LEN_0F4B_P_0 */
9449 {
9450 { Bad_Opcode },
9451 { VEX_W_TABLE (VEX_W_0F4B_P_0_LEN_1) },
9452 },
43234a1e
L
9453 /* VEX_LEN_0F4B_P_2 */
9454 {
9455 { Bad_Opcode },
9456 { VEX_W_TABLE (VEX_W_0F4B_P_2_LEN_1) },
9457 },
9458
ec6f095a 9459 /* VEX_LEN_0F6E_P_2 */
c0f3af97 9460 {
ec6f095a 9461 { "vmovK", { XMScalar, Edq }, 0 },
c0f3af97
L
9462 },
9463
ec6f095a 9464 /* VEX_LEN_0F77_P_1 */
c0f3af97 9465 {
ec6f095a
L
9466 { "vzeroupper", { XX }, 0 },
9467 { "vzeroall", { XX }, 0 },
c0f3af97
L
9468 },
9469
ec6f095a 9470 /* VEX_LEN_0F7E_P_1 */
c0f3af97 9471 {
ec6f095a 9472 { "vmovq", { XMScalar, EXqScalar }, 0 },
c0f3af97
L
9473 },
9474
ec6f095a 9475 /* VEX_LEN_0F7E_P_2 */
c0f3af97 9476 {
ec6f095a 9477 { "vmovK", { Edq, XMScalar }, 0 },
c0f3af97
L
9478 },
9479
ec6f095a 9480 /* VEX_LEN_0F90_P_0 */
c0f3af97 9481 {
ec6f095a 9482 { VEX_W_TABLE (VEX_W_0F90_P_0_LEN_0) },
c0f3af97
L
9483 },
9484
ec6f095a 9485 /* VEX_LEN_0F90_P_2 */
c0f3af97 9486 {
ec6f095a 9487 { VEX_W_TABLE (VEX_W_0F90_P_2_LEN_0) },
c0f3af97
L
9488 },
9489
ec6f095a 9490 /* VEX_LEN_0F91_P_0 */
c0f3af97 9491 {
ec6f095a 9492 { VEX_W_TABLE (VEX_W_0F91_P_0_LEN_0) },
c0f3af97
L
9493 },
9494
ec6f095a 9495 /* VEX_LEN_0F91_P_2 */
c0f3af97 9496 {
ec6f095a 9497 { VEX_W_TABLE (VEX_W_0F91_P_2_LEN_0) },
c0f3af97
L
9498 },
9499
ec6f095a 9500 /* VEX_LEN_0F92_P_0 */
c0f3af97 9501 {
ec6f095a 9502 { VEX_W_TABLE (VEX_W_0F92_P_0_LEN_0) },
c0f3af97
L
9503 },
9504
ec6f095a 9505 /* VEX_LEN_0F92_P_2 */
c0f3af97 9506 {
ec6f095a 9507 { VEX_W_TABLE (VEX_W_0F92_P_2_LEN_0) },
c0f3af97
L
9508 },
9509
ec6f095a 9510 /* VEX_LEN_0F92_P_3 */
c0f3af97 9511 {
58a211d2 9512 { MOD_TABLE (MOD_VEX_0F92_P_3_LEN_0) },
c0f3af97
L
9513 },
9514
ec6f095a 9515 /* VEX_LEN_0F93_P_0 */
c0f3af97 9516 {
ec6f095a 9517 { VEX_W_TABLE (VEX_W_0F93_P_0_LEN_0) },
c0f3af97
L
9518 },
9519
ec6f095a 9520 /* VEX_LEN_0F93_P_2 */
c0f3af97 9521 {
ec6f095a 9522 { VEX_W_TABLE (VEX_W_0F93_P_2_LEN_0) },
c0f3af97
L
9523 },
9524
ec6f095a 9525 /* VEX_LEN_0F93_P_3 */
c0f3af97 9526 {
58a211d2 9527 { MOD_TABLE (MOD_VEX_0F93_P_3_LEN_0) },
c0f3af97
L
9528 },
9529
ec6f095a 9530 /* VEX_LEN_0F98_P_0 */
43234a1e
L
9531 {
9532 { VEX_W_TABLE (VEX_W_0F98_P_0_LEN_0) },
9533 },
9534
1ba585e8
IT
9535 /* VEX_LEN_0F98_P_2 */
9536 {
9537 { VEX_W_TABLE (VEX_W_0F98_P_2_LEN_0) },
9538 },
9539
9540 /* VEX_LEN_0F99_P_0 */
9541 {
9542 { VEX_W_TABLE (VEX_W_0F99_P_0_LEN_0) },
9543 },
9544
9545 /* VEX_LEN_0F99_P_2 */
9546 {
9547 { VEX_W_TABLE (VEX_W_0F99_P_2_LEN_0) },
9548 },
9549
6c30d220 9550 /* VEX_LEN_0FAE_R_2_M_0 */
c0f3af97 9551 {
ec6f095a 9552 { "vldmxcsr", { Md }, 0 },
c0f3af97
L
9553 },
9554
6c30d220 9555 /* VEX_LEN_0FAE_R_3_M_0 */
c0f3af97 9556 {
ec6f095a 9557 { "vstmxcsr", { Md }, 0 },
c0f3af97
L
9558 },
9559
6c30d220 9560 /* VEX_LEN_0FC4_P_2 */
c0f3af97 9561 {
b50c9f31 9562 { "vpinsrw", { XM, Vex128, Edqw, Ib }, 0 },
c0f3af97
L
9563 },
9564
6c30d220 9565 /* VEX_LEN_0FC5_P_2 */
c0f3af97 9566 {
b50c9f31 9567 { "vpextrw", { Gdq, XS, Ib }, 0 },
c0f3af97
L
9568 },
9569
6c30d220 9570 /* VEX_LEN_0FD6_P_2 */
c0f3af97 9571 {
ec6f095a 9572 { "vmovq", { EXqScalarS, XMScalar }, 0 },
c0f3af97
L
9573 },
9574
6c30d220 9575 /* VEX_LEN_0FF7_P_2 */
c0f3af97 9576 {
ec6f095a 9577 { "vmaskmovdqu", { XM, XS }, 0 },
c0f3af97
L
9578 },
9579
6c30d220 9580 /* VEX_LEN_0F3816_P_2 */
c0f3af97 9581 {
6c30d220
L
9582 { Bad_Opcode },
9583 { VEX_W_TABLE (VEX_W_0F3816_P_2) },
c0f3af97
L
9584 },
9585
6c30d220 9586 /* VEX_LEN_0F3819_P_2 */
c0f3af97 9587 {
6c30d220
L
9588 { Bad_Opcode },
9589 { VEX_W_TABLE (VEX_W_0F3819_P_2) },
c0f3af97
L
9590 },
9591
6c30d220 9592 /* VEX_LEN_0F381A_P_2_M_0 */
c0f3af97 9593 {
6c30d220
L
9594 { Bad_Opcode },
9595 { VEX_W_TABLE (VEX_W_0F381A_P_2_M_0) },
c0f3af97
L
9596 },
9597
6c30d220 9598 /* VEX_LEN_0F3836_P_2 */
c0f3af97 9599 {
6c30d220
L
9600 { Bad_Opcode },
9601 { VEX_W_TABLE (VEX_W_0F3836_P_2) },
c0f3af97
L
9602 },
9603
592a252b 9604 /* VEX_LEN_0F3841_P_2 */
c0f3af97 9605 {
ec6f095a 9606 { "vphminposuw", { XM, EXx }, 0 },
c0f3af97
L
9607 },
9608
6c30d220
L
9609 /* VEX_LEN_0F385A_P_2_M_0 */
9610 {
9611 { Bad_Opcode },
9612 { VEX_W_TABLE (VEX_W_0F385A_P_2_M_0) },
9613 },
9614
592a252b 9615 /* VEX_LEN_0F38DB_P_2 */
a5ff0eb2 9616 {
ec6f095a 9617 { "vaesimc", { XM, EXx }, 0 },
a5ff0eb2
L
9618 },
9619
f12dc422
L
9620 /* VEX_LEN_0F38F2_P_0 */
9621 {
bf890a93 9622 { "andnS", { Gdq, VexGdq, Edq }, 0 },
f12dc422
L
9623 },
9624
9625 /* VEX_LEN_0F38F3_R_1_P_0 */
9626 {
bf890a93 9627 { "blsrS", { VexGdq, Edq }, 0 },
f12dc422
L
9628 },
9629
9630 /* VEX_LEN_0F38F3_R_2_P_0 */
9631 {
bf890a93 9632 { "blsmskS", { VexGdq, Edq }, 0 },
f12dc422
L
9633 },
9634
9635 /* VEX_LEN_0F38F3_R_3_P_0 */
9636 {
bf890a93 9637 { "blsiS", { VexGdq, Edq }, 0 },
f12dc422
L
9638 },
9639
6c30d220
L
9640 /* VEX_LEN_0F38F5_P_0 */
9641 {
bf890a93 9642 { "bzhiS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
9643 },
9644
9645 /* VEX_LEN_0F38F5_P_1 */
9646 {
bf890a93 9647 { "pextS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
9648 },
9649
9650 /* VEX_LEN_0F38F5_P_3 */
9651 {
bf890a93 9652 { "pdepS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
9653 },
9654
9655 /* VEX_LEN_0F38F6_P_3 */
9656 {
bf890a93 9657 { "mulxS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
9658 },
9659
f12dc422
L
9660 /* VEX_LEN_0F38F7_P_0 */
9661 {
bf890a93 9662 { "bextrS", { Gdq, Edq, VexGdq }, 0 },
f12dc422
L
9663 },
9664
6c30d220
L
9665 /* VEX_LEN_0F38F7_P_1 */
9666 {
bf890a93 9667 { "sarxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
9668 },
9669
9670 /* VEX_LEN_0F38F7_P_2 */
9671 {
bf890a93 9672 { "shlxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
9673 },
9674
9675 /* VEX_LEN_0F38F7_P_3 */
9676 {
bf890a93 9677 { "shrxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
9678 },
9679
9680 /* VEX_LEN_0F3A00_P_2 */
9681 {
9682 { Bad_Opcode },
9683 { VEX_W_TABLE (VEX_W_0F3A00_P_2) },
9684 },
9685
9686 /* VEX_LEN_0F3A01_P_2 */
9687 {
9688 { Bad_Opcode },
9689 { VEX_W_TABLE (VEX_W_0F3A01_P_2) },
9690 },
9691
592a252b 9692 /* VEX_LEN_0F3A06_P_2 */
c0f3af97 9693 {
592d1631 9694 { Bad_Opcode },
592a252b 9695 { VEX_W_TABLE (VEX_W_0F3A06_P_2) },
c0f3af97
L
9696 },
9697
592a252b 9698 /* VEX_LEN_0F3A14_P_2 */
c0f3af97 9699 {
b50c9f31 9700 { "vpextrb", { Edqb, XM, Ib }, 0 },
c0f3af97
L
9701 },
9702
592a252b 9703 /* VEX_LEN_0F3A15_P_2 */
c0f3af97 9704 {
b50c9f31 9705 { "vpextrw", { Edqw, XM, Ib }, 0 },
c0f3af97
L
9706 },
9707
592a252b 9708 /* VEX_LEN_0F3A16_P_2 */
c0f3af97 9709 {
bf890a93 9710 { "vpextrK", { Edq, XM, Ib }, 0 },
c0f3af97
L
9711 },
9712
592a252b 9713 /* VEX_LEN_0F3A17_P_2 */
c0f3af97 9714 {
bf890a93 9715 { "vextractps", { Edqd, XM, Ib }, 0 },
c0f3af97
L
9716 },
9717
592a252b 9718 /* VEX_LEN_0F3A18_P_2 */
c0f3af97 9719 {
592d1631 9720 { Bad_Opcode },
592a252b 9721 { VEX_W_TABLE (VEX_W_0F3A18_P_2) },
c0f3af97
L
9722 },
9723
592a252b 9724 /* VEX_LEN_0F3A19_P_2 */
c0f3af97 9725 {
592d1631 9726 { Bad_Opcode },
592a252b 9727 { VEX_W_TABLE (VEX_W_0F3A19_P_2) },
c0f3af97
L
9728 },
9729
592a252b 9730 /* VEX_LEN_0F3A20_P_2 */
c0f3af97 9731 {
b50c9f31 9732 { "vpinsrb", { XM, Vex128, Edqb, Ib }, 0 },
c0f3af97
L
9733 },
9734
592a252b 9735 /* VEX_LEN_0F3A21_P_2 */
c0f3af97 9736 {
ec6f095a 9737 { "vinsertps", { XM, Vex128, EXd, Ib }, 0 },
c0f3af97
L
9738 },
9739
592a252b 9740 /* VEX_LEN_0F3A22_P_2 */
c0f3af97 9741 {
bf890a93 9742 { "vpinsrK", { XM, Vex128, Edq, Ib }, 0 },
c0f3af97
L
9743 },
9744
43234a1e
L
9745 /* VEX_LEN_0F3A30_P_2 */
9746 {
9747 { VEX_W_TABLE (VEX_W_0F3A30_P_2_LEN_0) },
9748 },
9749
1ba585e8
IT
9750 /* VEX_LEN_0F3A31_P_2 */
9751 {
9752 { VEX_W_TABLE (VEX_W_0F3A31_P_2_LEN_0) },
9753 },
9754
43234a1e
L
9755 /* VEX_LEN_0F3A32_P_2 */
9756 {
9757 { VEX_W_TABLE (VEX_W_0F3A32_P_2_LEN_0) },
9758 },
9759
1ba585e8
IT
9760 /* VEX_LEN_0F3A33_P_2 */
9761 {
9762 { VEX_W_TABLE (VEX_W_0F3A33_P_2_LEN_0) },
9763 },
9764
6c30d220 9765 /* VEX_LEN_0F3A38_P_2 */
c0f3af97 9766 {
6c30d220
L
9767 { Bad_Opcode },
9768 { VEX_W_TABLE (VEX_W_0F3A38_P_2) },
c0f3af97
L
9769 },
9770
6c30d220 9771 /* VEX_LEN_0F3A39_P_2 */
c0f3af97 9772 {
6c30d220
L
9773 { Bad_Opcode },
9774 { VEX_W_TABLE (VEX_W_0F3A39_P_2) },
9775 },
9776
9777 /* VEX_LEN_0F3A41_P_2 */
9778 {
ec6f095a 9779 { "vdppd", { XM, Vex128, EXx, Ib }, 0 },
c0f3af97
L
9780 },
9781
6c30d220 9782 /* VEX_LEN_0F3A46_P_2 */
c0f3af97 9783 {
6c30d220
L
9784 { Bad_Opcode },
9785 { VEX_W_TABLE (VEX_W_0F3A46_P_2) },
c0f3af97
L
9786 },
9787
592a252b 9788 /* VEX_LEN_0F3A60_P_2 */
c0f3af97 9789 {
15c7c1d8 9790 { "vpcmpestrm", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, 0 },
c0f3af97
L
9791 },
9792
592a252b 9793 /* VEX_LEN_0F3A61_P_2 */
c0f3af97 9794 {
15c7c1d8 9795 { "vpcmpestri", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, 0 },
c0f3af97
L
9796 },
9797
592a252b 9798 /* VEX_LEN_0F3A62_P_2 */
c0f3af97 9799 {
ec6f095a 9800 { "vpcmpistrm", { XM, EXx, Ib }, 0 },
c0f3af97
L
9801 },
9802
592a252b 9803 /* VEX_LEN_0F3A63_P_2 */
c0f3af97 9804 {
ec6f095a 9805 { "vpcmpistri", { XM, EXx, Ib }, 0 },
c0f3af97
L
9806 },
9807
592a252b 9808 /* VEX_LEN_0F3A6A_P_2 */
922d8de8 9809 {
3a2430e0 9810 { "vfmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 },
922d8de8
DR
9811 },
9812
592a252b 9813 /* VEX_LEN_0F3A6B_P_2 */
922d8de8 9814 {
3a2430e0 9815 { "vfmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 },
922d8de8
DR
9816 },
9817
592a252b 9818 /* VEX_LEN_0F3A6E_P_2 */
922d8de8 9819 {
3a2430e0 9820 { "vfmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 },
922d8de8
DR
9821 },
9822
592a252b 9823 /* VEX_LEN_0F3A6F_P_2 */
922d8de8 9824 {
3a2430e0 9825 { "vfmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 },
922d8de8
DR
9826 },
9827
592a252b 9828 /* VEX_LEN_0F3A7A_P_2 */
922d8de8 9829 {
3a2430e0 9830 { "vfnmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 },
922d8de8
DR
9831 },
9832
592a252b 9833 /* VEX_LEN_0F3A7B_P_2 */
922d8de8 9834 {
3a2430e0 9835 { "vfnmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 },
922d8de8
DR
9836 },
9837
592a252b 9838 /* VEX_LEN_0F3A7E_P_2 */
922d8de8 9839 {
3a2430e0 9840 { "vfnmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 },
922d8de8
DR
9841 },
9842
592a252b 9843 /* VEX_LEN_0F3A7F_P_2 */
922d8de8 9844 {
3a2430e0 9845 { "vfnmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 },
922d8de8
DR
9846 },
9847
592a252b 9848 /* VEX_LEN_0F3ADF_P_2 */
a5ff0eb2 9849 {
ec6f095a 9850 { "vaeskeygenassist", { XM, EXx, Ib }, 0 },
a5ff0eb2 9851 },
4c807e72 9852
6c30d220
L
9853 /* VEX_LEN_0F3AF0_P_3 */
9854 {
bf890a93 9855 { "rorxS", { Gdq, Edq, Ib }, 0 },
6c30d220
L
9856 },
9857
ff688e1f
L
9858 /* VEX_LEN_0FXOP_08_CC */
9859 {
be92cb14 9860 { "vpcomb", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9861 },
9862
9863 /* VEX_LEN_0FXOP_08_CD */
9864 {
be92cb14 9865 { "vpcomw", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9866 },
9867
9868 /* VEX_LEN_0FXOP_08_CE */
9869 {
be92cb14 9870 { "vpcomd", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9871 },
9872
9873 /* VEX_LEN_0FXOP_08_CF */
9874 {
be92cb14 9875 { "vpcomq", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9876 },
9877
9878 /* VEX_LEN_0FXOP_08_EC */
9879 {
be92cb14 9880 { "vpcomub", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9881 },
9882
9883 /* VEX_LEN_0FXOP_08_ED */
9884 {
be92cb14 9885 { "vpcomuw", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9886 },
9887
9888 /* VEX_LEN_0FXOP_08_EE */
9889 {
be92cb14 9890 { "vpcomud", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9891 },
9892
9893 /* VEX_LEN_0FXOP_08_EF */
9894 {
be92cb14 9895 { "vpcomuq", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9896 },
9897
592a252b 9898 /* VEX_LEN_0FXOP_09_80 */
5dd85c99 9899 {
bf890a93
IT
9900 { "vfrczps", { XM, EXxmm }, 0 },
9901 { "vfrczps", { XM, EXymmq }, 0 },
5dd85c99 9902 },
4c807e72 9903
592a252b 9904 /* VEX_LEN_0FXOP_09_81 */
5dd85c99 9905 {
bf890a93
IT
9906 { "vfrczpd", { XM, EXxmm }, 0 },
9907 { "vfrczpd", { XM, EXymmq }, 0 },
5dd85c99 9908 },
331d2d0d
L
9909};
9910
ad692897 9911#include "i386-dis-evex-len.h"
04e2a182 9912
9e30b8e0 9913static const struct dis386 vex_w_table[][2] = {
43234a1e
L
9914 {
9915 /* VEX_W_0F41_P_0_LEN_1 */
ab4e4ed5
AF
9916 { MOD_TABLE (MOD_VEX_W_0_0F41_P_0_LEN_1) },
9917 { MOD_TABLE (MOD_VEX_W_1_0F41_P_0_LEN_1) },
1ba585e8
IT
9918 },
9919 {
9920 /* VEX_W_0F41_P_2_LEN_1 */
ab4e4ed5
AF
9921 { MOD_TABLE (MOD_VEX_W_0_0F41_P_2_LEN_1) },
9922 { MOD_TABLE (MOD_VEX_W_1_0F41_P_2_LEN_1) }
43234a1e
L
9923 },
9924 {
9925 /* VEX_W_0F42_P_0_LEN_1 */
ab4e4ed5
AF
9926 { MOD_TABLE (MOD_VEX_W_0_0F42_P_0_LEN_1) },
9927 { MOD_TABLE (MOD_VEX_W_1_0F42_P_0_LEN_1) },
1ba585e8
IT
9928 },
9929 {
9930 /* VEX_W_0F42_P_2_LEN_1 */
ab4e4ed5
AF
9931 { MOD_TABLE (MOD_VEX_W_0_0F42_P_2_LEN_1) },
9932 { MOD_TABLE (MOD_VEX_W_1_0F42_P_2_LEN_1) },
43234a1e
L
9933 },
9934 {
9935 /* VEX_W_0F44_P_0_LEN_0 */
ab4e4ed5
AF
9936 { MOD_TABLE (MOD_VEX_W_0_0F44_P_0_LEN_1) },
9937 { MOD_TABLE (MOD_VEX_W_1_0F44_P_0_LEN_1) },
1ba585e8
IT
9938 },
9939 {
9940 /* VEX_W_0F44_P_2_LEN_0 */
ab4e4ed5
AF
9941 { MOD_TABLE (MOD_VEX_W_0_0F44_P_2_LEN_1) },
9942 { MOD_TABLE (MOD_VEX_W_1_0F44_P_2_LEN_1) },
43234a1e
L
9943 },
9944 {
ec6f095a
L
9945 /* VEX_W_0F45_P_0_LEN_1 */
9946 { MOD_TABLE (MOD_VEX_W_0_0F45_P_0_LEN_1) },
9947 { MOD_TABLE (MOD_VEX_W_1_0F45_P_0_LEN_1) },
9e30b8e0
L
9948 },
9949 {
ec6f095a
L
9950 /* VEX_W_0F45_P_2_LEN_1 */
9951 { MOD_TABLE (MOD_VEX_W_0_0F45_P_2_LEN_1) },
9952 { MOD_TABLE (MOD_VEX_W_1_0F45_P_2_LEN_1) },
9e30b8e0
L
9953 },
9954 {
ec6f095a
L
9955 /* VEX_W_0F46_P_0_LEN_1 */
9956 { MOD_TABLE (MOD_VEX_W_0_0F46_P_0_LEN_1) },
9957 { MOD_TABLE (MOD_VEX_W_1_0F46_P_0_LEN_1) },
9e30b8e0
L
9958 },
9959 {
ec6f095a
L
9960 /* VEX_W_0F46_P_2_LEN_1 */
9961 { MOD_TABLE (MOD_VEX_W_0_0F46_P_2_LEN_1) },
9962 { MOD_TABLE (MOD_VEX_W_1_0F46_P_2_LEN_1) },
9e30b8e0
L
9963 },
9964 {
ec6f095a
L
9965 /* VEX_W_0F47_P_0_LEN_1 */
9966 { MOD_TABLE (MOD_VEX_W_0_0F47_P_0_LEN_1) },
9967 { MOD_TABLE (MOD_VEX_W_1_0F47_P_0_LEN_1) },
9e30b8e0
L
9968 },
9969 {
ec6f095a
L
9970 /* VEX_W_0F47_P_2_LEN_1 */
9971 { MOD_TABLE (MOD_VEX_W_0_0F47_P_2_LEN_1) },
9972 { MOD_TABLE (MOD_VEX_W_1_0F47_P_2_LEN_1) },
9e30b8e0
L
9973 },
9974 {
ec6f095a
L
9975 /* VEX_W_0F4A_P_0_LEN_1 */
9976 { MOD_TABLE (MOD_VEX_W_0_0F4A_P_0_LEN_1) },
9977 { MOD_TABLE (MOD_VEX_W_1_0F4A_P_0_LEN_1) },
9e30b8e0
L
9978 },
9979 {
ec6f095a
L
9980 /* VEX_W_0F4A_P_2_LEN_1 */
9981 { MOD_TABLE (MOD_VEX_W_0_0F4A_P_2_LEN_1) },
9982 { MOD_TABLE (MOD_VEX_W_1_0F4A_P_2_LEN_1) },
9e30b8e0
L
9983 },
9984 {
ec6f095a
L
9985 /* VEX_W_0F4B_P_0_LEN_1 */
9986 { MOD_TABLE (MOD_VEX_W_0_0F4B_P_0_LEN_1) },
9987 { MOD_TABLE (MOD_VEX_W_1_0F4B_P_0_LEN_1) },
9e30b8e0
L
9988 },
9989 {
ec6f095a
L
9990 /* VEX_W_0F4B_P_2_LEN_1 */
9991 { MOD_TABLE (MOD_VEX_W_0_0F4B_P_2_LEN_1) },
9e30b8e0
L
9992 },
9993 {
ec6f095a
L
9994 /* VEX_W_0F90_P_0_LEN_0 */
9995 { "kmovw", { MaskG, MaskE }, 0 },
9996 { "kmovq", { MaskG, MaskE }, 0 },
9e30b8e0
L
9997 },
9998 {
ec6f095a
L
9999 /* VEX_W_0F90_P_2_LEN_0 */
10000 { "kmovb", { MaskG, MaskBDE }, 0 },
10001 { "kmovd", { MaskG, MaskBDE }, 0 },
9e30b8e0
L
10002 },
10003 {
ec6f095a
L
10004 /* VEX_W_0F91_P_0_LEN_0 */
10005 { MOD_TABLE (MOD_VEX_W_0_0F91_P_0_LEN_0) },
10006 { MOD_TABLE (MOD_VEX_W_1_0F91_P_0_LEN_0) },
9e30b8e0
L
10007 },
10008 {
ec6f095a
L
10009 /* VEX_W_0F91_P_2_LEN_0 */
10010 { MOD_TABLE (MOD_VEX_W_0_0F91_P_2_LEN_0) },
10011 { MOD_TABLE (MOD_VEX_W_1_0F91_P_2_LEN_0) },
9e30b8e0
L
10012 },
10013 {
ec6f095a
L
10014 /* VEX_W_0F92_P_0_LEN_0 */
10015 { MOD_TABLE (MOD_VEX_W_0_0F92_P_0_LEN_0) },
9e30b8e0
L
10016 },
10017 {
ec6f095a
L
10018 /* VEX_W_0F92_P_2_LEN_0 */
10019 { MOD_TABLE (MOD_VEX_W_0_0F92_P_2_LEN_0) },
9e30b8e0 10020 },
9e30b8e0 10021 {
ec6f095a
L
10022 /* VEX_W_0F93_P_0_LEN_0 */
10023 { MOD_TABLE (MOD_VEX_W_0_0F93_P_0_LEN_0) },
9e30b8e0
L
10024 },
10025 {
ec6f095a
L
10026 /* VEX_W_0F93_P_2_LEN_0 */
10027 { MOD_TABLE (MOD_VEX_W_0_0F93_P_2_LEN_0) },
9e30b8e0 10028 },
9e30b8e0 10029 {
ec6f095a
L
10030 /* VEX_W_0F98_P_0_LEN_0 */
10031 { MOD_TABLE (MOD_VEX_W_0_0F98_P_0_LEN_0) },
10032 { MOD_TABLE (MOD_VEX_W_1_0F98_P_0_LEN_0) },
9e30b8e0
L
10033 },
10034 {
ec6f095a
L
10035 /* VEX_W_0F98_P_2_LEN_0 */
10036 { MOD_TABLE (MOD_VEX_W_0_0F98_P_2_LEN_0) },
10037 { MOD_TABLE (MOD_VEX_W_1_0F98_P_2_LEN_0) },
9e30b8e0
L
10038 },
10039 {
ec6f095a
L
10040 /* VEX_W_0F99_P_0_LEN_0 */
10041 { MOD_TABLE (MOD_VEX_W_0_0F99_P_0_LEN_0) },
10042 { MOD_TABLE (MOD_VEX_W_1_0F99_P_0_LEN_0) },
9e30b8e0
L
10043 },
10044 {
ec6f095a
L
10045 /* VEX_W_0F99_P_2_LEN_0 */
10046 { MOD_TABLE (MOD_VEX_W_0_0F99_P_2_LEN_0) },
10047 { MOD_TABLE (MOD_VEX_W_1_0F99_P_2_LEN_0) },
9e30b8e0 10048 },
9e30b8e0 10049 {
592a252b 10050 /* VEX_W_0F380C_P_2 */
bf890a93 10051 { "vpermilps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10052 },
10053 {
592a252b 10054 /* VEX_W_0F380D_P_2 */
bf890a93 10055 { "vpermilpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10056 },
10057 {
592a252b 10058 /* VEX_W_0F380E_P_2 */
bf890a93 10059 { "vtestps", { XM, EXx }, 0 },
9e30b8e0
L
10060 },
10061 {
592a252b 10062 /* VEX_W_0F380F_P_2 */
bf890a93 10063 { "vtestpd", { XM, EXx }, 0 },
9e30b8e0 10064 },
6c30d220
L
10065 {
10066 /* VEX_W_0F3816_P_2 */
bf890a93 10067 { "vpermps", { XM, Vex, EXx }, 0 },
6c30d220 10068 },
bcf2684f 10069 {
6c30d220 10070 /* VEX_W_0F3818_P_2 */
bf890a93 10071 { "vbroadcastss", { XM, EXxmm_md }, 0 },
bcf2684f 10072 },
9e30b8e0 10073 {
6c30d220 10074 /* VEX_W_0F3819_P_2 */
bf890a93 10075 { "vbroadcastsd", { XM, EXxmm_mq }, 0 },
9e30b8e0
L
10076 },
10077 {
592a252b 10078 /* VEX_W_0F381A_P_2_M_0 */
bf890a93 10079 { "vbroadcastf128", { XM, Mxmm }, 0 },
9e30b8e0 10080 },
53aa04a0 10081 {
592a252b 10082 /* VEX_W_0F382C_P_2_M_0 */
bf890a93 10083 { "vmaskmovps", { XM, Vex, Mx }, 0 },
53aa04a0
L
10084 },
10085 {
592a252b 10086 /* VEX_W_0F382D_P_2_M_0 */
bf890a93 10087 { "vmaskmovpd", { XM, Vex, Mx }, 0 },
53aa04a0
L
10088 },
10089 {
592a252b 10090 /* VEX_W_0F382E_P_2_M_0 */
bf890a93 10091 { "vmaskmovps", { Mx, Vex, XM }, 0 },
53aa04a0
L
10092 },
10093 {
592a252b 10094 /* VEX_W_0F382F_P_2_M_0 */
bf890a93 10095 { "vmaskmovpd", { Mx, Vex, XM }, 0 },
53aa04a0 10096 },
6c30d220
L
10097 {
10098 /* VEX_W_0F3836_P_2 */
bf890a93 10099 { "vpermd", { XM, Vex, EXx }, 0 },
9e30b8e0 10100 },
6c30d220
L
10101 {
10102 /* VEX_W_0F3846_P_2 */
bf890a93 10103 { "vpsravd", { XM, Vex, EXx }, 0 },
6c30d220
L
10104 },
10105 {
10106 /* VEX_W_0F3858_P_2 */
bf890a93 10107 { "vpbroadcastd", { XM, EXxmm_md }, 0 },
6c30d220
L
10108 },
10109 {
10110 /* VEX_W_0F3859_P_2 */
bf890a93 10111 { "vpbroadcastq", { XM, EXxmm_mq }, 0 },
6c30d220
L
10112 },
10113 {
10114 /* VEX_W_0F385A_P_2_M_0 */
bf890a93 10115 { "vbroadcasti128", { XM, Mxmm }, 0 },
6c30d220
L
10116 },
10117 {
10118 /* VEX_W_0F3878_P_2 */
bf890a93 10119 { "vpbroadcastb", { XM, EXxmm_mb }, 0 },
6c30d220
L
10120 },
10121 {
10122 /* VEX_W_0F3879_P_2 */
bf890a93 10123 { "vpbroadcastw", { XM, EXxmm_mw }, 0 },
6c30d220 10124 },
48521003
IT
10125 {
10126 /* VEX_W_0F38CF_P_2 */
10127 { "vgf2p8mulb", { XM, Vex, EXx }, 0 },
10128 },
6c30d220
L
10129 {
10130 /* VEX_W_0F3A00_P_2 */
10131 { Bad_Opcode },
bf890a93 10132 { "vpermq", { XM, EXx, Ib }, 0 },
6c30d220
L
10133 },
10134 {
10135 /* VEX_W_0F3A01_P_2 */
10136 { Bad_Opcode },
bf890a93 10137 { "vpermpd", { XM, EXx, Ib }, 0 },
6c30d220
L
10138 },
10139 {
10140 /* VEX_W_0F3A02_P_2 */
bf890a93 10141 { "vpblendd", { XM, Vex, EXx, Ib }, 0 },
6c30d220 10142 },
9e30b8e0 10143 {
592a252b 10144 /* VEX_W_0F3A04_P_2 */
bf890a93 10145 { "vpermilps", { XM, EXx, Ib }, 0 },
9e30b8e0
L
10146 },
10147 {
592a252b 10148 /* VEX_W_0F3A05_P_2 */
bf890a93 10149 { "vpermilpd", { XM, EXx, Ib }, 0 },
9e30b8e0
L
10150 },
10151 {
592a252b 10152 /* VEX_W_0F3A06_P_2 */
bf890a93 10153 { "vperm2f128", { XM, Vex256, EXx, Ib }, 0 },
9e30b8e0 10154 },
9e30b8e0 10155 {
592a252b 10156 /* VEX_W_0F3A18_P_2 */
bf890a93 10157 { "vinsertf128", { XM, Vex256, EXxmm, Ib }, 0 },
9e30b8e0
L
10158 },
10159 {
592a252b 10160 /* VEX_W_0F3A19_P_2 */
bf890a93 10161 { "vextractf128", { EXxmm, XM, Ib }, 0 },
9e30b8e0 10162 },
43234a1e 10163 {
1ba585e8 10164 /* VEX_W_0F3A30_P_2_LEN_0 */
ab4e4ed5
AF
10165 { MOD_TABLE (MOD_VEX_W_0_0F3A30_P_2_LEN_0) },
10166 { MOD_TABLE (MOD_VEX_W_1_0F3A30_P_2_LEN_0) },
43234a1e
L
10167 },
10168 {
1ba585e8 10169 /* VEX_W_0F3A31_P_2_LEN_0 */
ab4e4ed5
AF
10170 { MOD_TABLE (MOD_VEX_W_0_0F3A31_P_2_LEN_0) },
10171 { MOD_TABLE (MOD_VEX_W_1_0F3A31_P_2_LEN_0) },
1ba585e8
IT
10172 },
10173 {
10174 /* VEX_W_0F3A32_P_2_LEN_0 */
ab4e4ed5
AF
10175 { MOD_TABLE (MOD_VEX_W_0_0F3A32_P_2_LEN_0) },
10176 { MOD_TABLE (MOD_VEX_W_1_0F3A32_P_2_LEN_0) },
43234a1e 10177 },
1ba585e8
IT
10178 {
10179 /* VEX_W_0F3A33_P_2_LEN_0 */
ab4e4ed5
AF
10180 { MOD_TABLE (MOD_VEX_W_0_0F3A33_P_2_LEN_0) },
10181 { MOD_TABLE (MOD_VEX_W_1_0F3A33_P_2_LEN_0) },
1ba585e8 10182 },
6c30d220
L
10183 {
10184 /* VEX_W_0F3A38_P_2 */
bf890a93 10185 { "vinserti128", { XM, Vex256, EXxmm, Ib }, 0 },
6c30d220
L
10186 },
10187 {
10188 /* VEX_W_0F3A39_P_2 */
bf890a93 10189 { "vextracti128", { EXxmm, XM, Ib }, 0 },
6c30d220 10190 },
6c30d220
L
10191 {
10192 /* VEX_W_0F3A46_P_2 */
bf890a93 10193 { "vperm2i128", { XM, Vex256, EXx, Ib }, 0 },
6c30d220 10194 },
a683cc34 10195 {
592a252b 10196 /* VEX_W_0F3A48_P_2 */
bf890a93
IT
10197 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
10198 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
a683cc34
SP
10199 },
10200 {
592a252b 10201 /* VEX_W_0F3A49_P_2 */
bf890a93
IT
10202 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
10203 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
a683cc34 10204 },
9e30b8e0 10205 {
592a252b 10206 /* VEX_W_0F3A4A_P_2 */
bf890a93 10207 { "vblendvps", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0
L
10208 },
10209 {
592a252b 10210 /* VEX_W_0F3A4B_P_2 */
bf890a93 10211 { "vblendvpd", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0
L
10212 },
10213 {
592a252b 10214 /* VEX_W_0F3A4C_P_2 */
bf890a93 10215 { "vpblendvb", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0 10216 },
48521003
IT
10217 {
10218 /* VEX_W_0F3ACE_P_2 */
10219 { Bad_Opcode },
10220 { "vgf2p8affineqb", { XM, Vex, EXx, Ib }, 0 },
10221 },
10222 {
10223 /* VEX_W_0F3ACF_P_2 */
10224 { Bad_Opcode },
10225 { "vgf2p8affineinvqb", { XM, Vex, EXx, Ib }, 0 },
10226 },
ad692897
L
10227
10228#include "i386-dis-evex-w.h"
9e30b8e0
L
10229};
10230
10231static const struct dis386 mod_table[][2] = {
10232 {
10233 /* MOD_8D */
bf890a93 10234 { "leaS", { Gv, M }, 0 },
9e30b8e0 10235 },
42164a71
L
10236 {
10237 /* MOD_C6_REG_7 */
10238 { Bad_Opcode },
10239 { RM_TABLE (RM_C6_REG_7) },
10240 },
10241 {
10242 /* MOD_C7_REG_7 */
10243 { Bad_Opcode },
10244 { RM_TABLE (RM_C7_REG_7) },
10245 },
4a357820
MZ
10246 {
10247 /* MOD_FF_REG_3 */
a72d2af2 10248 { "Jcall^", { indirEp }, 0 },
4a357820
MZ
10249 },
10250 {
10251 /* MOD_FF_REG_5 */
a72d2af2 10252 { "Jjmp^", { indirEp }, 0 },
4a357820 10253 },
9e30b8e0
L
10254 {
10255 /* MOD_0F01_REG_0 */
10256 { X86_64_TABLE (X86_64_0F01_REG_0) },
10257 { RM_TABLE (RM_0F01_REG_0) },
10258 },
10259 {
10260 /* MOD_0F01_REG_1 */
10261 { X86_64_TABLE (X86_64_0F01_REG_1) },
10262 { RM_TABLE (RM_0F01_REG_1) },
10263 },
10264 {
10265 /* MOD_0F01_REG_2 */
10266 { X86_64_TABLE (X86_64_0F01_REG_2) },
10267 { RM_TABLE (RM_0F01_REG_2) },
10268 },
10269 {
10270 /* MOD_0F01_REG_3 */
10271 { X86_64_TABLE (X86_64_0F01_REG_3) },
10272 { RM_TABLE (RM_0F01_REG_3) },
10273 },
8eab4136
L
10274 {
10275 /* MOD_0F01_REG_5 */
603555e5 10276 { PREFIX_TABLE (PREFIX_MOD_0_0F01_REG_5) },
8eab4136
L
10277 { RM_TABLE (RM_0F01_REG_5) },
10278 },
9e30b8e0
L
10279 {
10280 /* MOD_0F01_REG_7 */
bf890a93 10281 { "invlpg", { Mb }, 0 },
9e30b8e0
L
10282 { RM_TABLE (RM_0F01_REG_7) },
10283 },
10284 {
10285 /* MOD_0F12_PREFIX_0 */
507bd325
L
10286 { "movlps", { XM, EXq }, PREFIX_OPCODE },
10287 { "movhlps", { XM, EXq }, PREFIX_OPCODE },
9e30b8e0
L
10288 },
10289 {
10290 /* MOD_0F13 */
507bd325 10291 { "movlpX", { EXq, XM }, PREFIX_OPCODE },
9e30b8e0
L
10292 },
10293 {
10294 /* MOD_0F16_PREFIX_0 */
bf890a93
IT
10295 { "movhps", { XM, EXq }, 0 },
10296 { "movlhps", { XM, EXq }, 0 },
9e30b8e0
L
10297 },
10298 {
10299 /* MOD_0F17 */
507bd325 10300 { "movhpX", { EXq, XM }, PREFIX_OPCODE },
9e30b8e0
L
10301 },
10302 {
10303 /* MOD_0F18_REG_0 */
bf890a93 10304 { "prefetchnta", { Mb }, 0 },
9e30b8e0
L
10305 },
10306 {
10307 /* MOD_0F18_REG_1 */
bf890a93 10308 { "prefetcht0", { Mb }, 0 },
9e30b8e0
L
10309 },
10310 {
10311 /* MOD_0F18_REG_2 */
bf890a93 10312 { "prefetcht1", { Mb }, 0 },
9e30b8e0
L
10313 },
10314 {
10315 /* MOD_0F18_REG_3 */
bf890a93 10316 { "prefetcht2", { Mb }, 0 },
9e30b8e0 10317 },
d7189fa5
RM
10318 {
10319 /* MOD_0F18_REG_4 */
bf890a93 10320 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
10321 },
10322 {
10323 /* MOD_0F18_REG_5 */
bf890a93 10324 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
10325 },
10326 {
10327 /* MOD_0F18_REG_6 */
bf890a93 10328 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
10329 },
10330 {
10331 /* MOD_0F18_REG_7 */
bf890a93 10332 { "nop/reserved", { Mb }, 0 },
d7189fa5 10333 },
7e8b059b
L
10334 {
10335 /* MOD_0F1A_PREFIX_0 */
d276ec69 10336 { "bndldx", { Gbnd, Mv_bnd }, 0 },
bf890a93 10337 { "nopQ", { Ev }, 0 },
7e8b059b
L
10338 },
10339 {
10340 /* MOD_0F1B_PREFIX_0 */
d276ec69 10341 { "bndstx", { Mv_bnd, Gbnd }, 0 },
bf890a93 10342 { "nopQ", { Ev }, 0 },
7e8b059b
L
10343 },
10344 {
10345 /* MOD_0F1B_PREFIX_1 */
d276ec69 10346 { "bndmk", { Gbnd, Mv_bnd }, 0 },
bf890a93 10347 { "nopQ", { Ev }, 0 },
7e8b059b 10348 },
c48935d7
IT
10349 {
10350 /* MOD_0F1C_PREFIX_0 */
10351 { REG_TABLE (REG_0F1C_MOD_0) },
10352 { "nopQ", { Ev }, 0 },
10353 },
603555e5
L
10354 {
10355 /* MOD_0F1E_PREFIX_1 */
10356 { "nopQ", { Ev }, 0 },
10357 { REG_TABLE (REG_0F1E_MOD_3) },
10358 },
b844680a 10359 {
92fddf8e 10360 /* MOD_0F24 */
7bb15c6f 10361 { Bad_Opcode },
bf890a93 10362 { "movL", { Rd, Td }, 0 },
b844680a
L
10363 },
10364 {
92fddf8e 10365 /* MOD_0F26 */
592d1631 10366 { Bad_Opcode },
bf890a93 10367 { "movL", { Td, Rd }, 0 },
b844680a 10368 },
75c135a8
L
10369 {
10370 /* MOD_0F2B_PREFIX_0 */
507bd325 10371 {"movntps", { Mx, XM }, PREFIX_OPCODE },
75c135a8
L
10372 },
10373 {
10374 /* MOD_0F2B_PREFIX_1 */
507bd325 10375 {"movntss", { Md, XM }, PREFIX_OPCODE },
75c135a8
L
10376 },
10377 {
10378 /* MOD_0F2B_PREFIX_2 */
507bd325 10379 {"movntpd", { Mx, XM }, PREFIX_OPCODE },
75c135a8
L
10380 },
10381 {
10382 /* MOD_0F2B_PREFIX_3 */
507bd325 10383 {"movntsd", { Mq, XM }, PREFIX_OPCODE },
75c135a8
L
10384 },
10385 {
10386 /* MOD_0F51 */
592d1631 10387 { Bad_Opcode },
507bd325 10388 { "movmskpX", { Gdq, XS }, PREFIX_OPCODE },
75c135a8 10389 },
b844680a 10390 {
1ceb70f8 10391 /* MOD_0F71_REG_2 */
592d1631 10392 { Bad_Opcode },
bf890a93 10393 { "psrlw", { MS, Ib }, 0 },
b844680a
L
10394 },
10395 {
1ceb70f8 10396 /* MOD_0F71_REG_4 */
592d1631 10397 { Bad_Opcode },
bf890a93 10398 { "psraw", { MS, Ib }, 0 },
b844680a
L
10399 },
10400 {
1ceb70f8 10401 /* MOD_0F71_REG_6 */
592d1631 10402 { Bad_Opcode },
bf890a93 10403 { "psllw", { MS, Ib }, 0 },
b844680a
L
10404 },
10405 {
1ceb70f8 10406 /* MOD_0F72_REG_2 */
592d1631 10407 { Bad_Opcode },
bf890a93 10408 { "psrld", { MS, Ib }, 0 },
b844680a
L
10409 },
10410 {
1ceb70f8 10411 /* MOD_0F72_REG_4 */
592d1631 10412 { Bad_Opcode },
bf890a93 10413 { "psrad", { MS, Ib }, 0 },
b844680a
L
10414 },
10415 {
1ceb70f8 10416 /* MOD_0F72_REG_6 */
592d1631 10417 { Bad_Opcode },
bf890a93 10418 { "pslld", { MS, Ib }, 0 },
b844680a
L
10419 },
10420 {
1ceb70f8 10421 /* MOD_0F73_REG_2 */
592d1631 10422 { Bad_Opcode },
bf890a93 10423 { "psrlq", { MS, Ib }, 0 },
b844680a
L
10424 },
10425 {
1ceb70f8 10426 /* MOD_0F73_REG_3 */
592d1631 10427 { Bad_Opcode },
c0f3af97
L
10428 { PREFIX_TABLE (PREFIX_0F73_REG_3) },
10429 },
10430 {
10431 /* MOD_0F73_REG_6 */
592d1631 10432 { Bad_Opcode },
bf890a93 10433 { "psllq", { MS, Ib }, 0 },
c0f3af97
L
10434 },
10435 {
10436 /* MOD_0F73_REG_7 */
592d1631 10437 { Bad_Opcode },
c0f3af97
L
10438 { PREFIX_TABLE (PREFIX_0F73_REG_7) },
10439 },
10440 {
10441 /* MOD_0FAE_REG_0 */
bf890a93 10442 { "fxsave", { FXSAVE }, 0 },
c7b8aa3a 10443 { PREFIX_TABLE (PREFIX_0FAE_REG_0) },
c0f3af97
L
10444 },
10445 {
10446 /* MOD_0FAE_REG_1 */
bf890a93 10447 { "fxrstor", { FXSAVE }, 0 },
c7b8aa3a 10448 { PREFIX_TABLE (PREFIX_0FAE_REG_1) },
c0f3af97
L
10449 },
10450 {
10451 /* MOD_0FAE_REG_2 */
bf890a93 10452 { "ldmxcsr", { Md }, 0 },
c7b8aa3a 10453 { PREFIX_TABLE (PREFIX_0FAE_REG_2) },
c0f3af97
L
10454 },
10455 {
10456 /* MOD_0FAE_REG_3 */
bf890a93 10457 { "stmxcsr", { Md }, 0 },
c7b8aa3a 10458 { PREFIX_TABLE (PREFIX_0FAE_REG_3) },
c0f3af97
L
10459 },
10460 {
10461 /* MOD_0FAE_REG_4 */
6b40c462
L
10462 { PREFIX_TABLE (PREFIX_MOD_0_0FAE_REG_4) },
10463 { PREFIX_TABLE (PREFIX_MOD_3_0FAE_REG_4) },
c0f3af97
L
10464 },
10465 {
10466 /* MOD_0FAE_REG_5 */
603555e5 10467 { PREFIX_TABLE (PREFIX_MOD_0_0FAE_REG_5) },
2234eee6 10468 { PREFIX_TABLE (PREFIX_MOD_3_0FAE_REG_5) },
c0f3af97
L
10469 },
10470 {
10471 /* MOD_0FAE_REG_6 */
de89d0a3
IT
10472 { PREFIX_TABLE (PREFIX_MOD_0_0FAE_REG_6) },
10473 { PREFIX_TABLE (PREFIX_MOD_1_0FAE_REG_6) },
c0f3af97
L
10474 },
10475 {
10476 /* MOD_0FAE_REG_7 */
963f3586 10477 { PREFIX_TABLE (PREFIX_0FAE_REG_7) },
c0f3af97
L
10478 { RM_TABLE (RM_0FAE_REG_7) },
10479 },
10480 {
10481 /* MOD_0FB2 */
bf890a93 10482 { "lssS", { Gv, Mp }, 0 },
c0f3af97
L
10483 },
10484 {
10485 /* MOD_0FB4 */
bf890a93 10486 { "lfsS", { Gv, Mp }, 0 },
c0f3af97
L
10487 },
10488 {
10489 /* MOD_0FB5 */
bf890a93 10490 { "lgsS", { Gv, Mp }, 0 },
c0f3af97 10491 },
a8484f96
L
10492 {
10493 /* MOD_0FC3 */
10494 { PREFIX_TABLE (PREFIX_MOD_0_0FC3) },
10495 },
963f3586
IT
10496 {
10497 /* MOD_0FC7_REG_3 */
a8484f96 10498 { "xrstors", { FXSAVE }, 0 },
963f3586
IT
10499 },
10500 {
10501 /* MOD_0FC7_REG_4 */
bf890a93 10502 { "xsavec", { FXSAVE }, 0 },
963f3586
IT
10503 },
10504 {
10505 /* MOD_0FC7_REG_5 */
bf890a93 10506 { "xsaves", { FXSAVE }, 0 },
963f3586 10507 },
c0f3af97
L
10508 {
10509 /* MOD_0FC7_REG_6 */
f24bcbaa
L
10510 { PREFIX_TABLE (PREFIX_MOD_0_0FC7_REG_6) },
10511 { PREFIX_TABLE (PREFIX_MOD_3_0FC7_REG_6) }
c0f3af97
L
10512 },
10513 {
10514 /* MOD_0FC7_REG_7 */
bf890a93 10515 { "vmptrst", { Mq }, 0 },
f24bcbaa 10516 { PREFIX_TABLE (PREFIX_MOD_3_0FC7_REG_7) }
c0f3af97
L
10517 },
10518 {
10519 /* MOD_0FD7 */
592d1631 10520 { Bad_Opcode },
bf890a93 10521 { "pmovmskb", { Gdq, MS }, 0 },
c0f3af97
L
10522 },
10523 {
10524 /* MOD_0FE7_PREFIX_2 */
bf890a93 10525 { "movntdq", { Mx, XM }, 0 },
c0f3af97
L
10526 },
10527 {
10528 /* MOD_0FF0_PREFIX_3 */
bf890a93 10529 { "lddqu", { XM, M }, 0 },
c0f3af97
L
10530 },
10531 {
10532 /* MOD_0F382A_PREFIX_2 */
bf890a93 10533 { "movntdqa", { XM, Mx }, 0 },
c0f3af97 10534 },
603555e5
L
10535 {
10536 /* MOD_0F38F5_PREFIX_2 */
10537 { "wrussK", { M, Gdq }, PREFIX_OPCODE },
10538 },
10539 {
10540 /* MOD_0F38F6_PREFIX_0 */
10541 { "wrssK", { M, Gdq }, PREFIX_OPCODE },
10542 },
5d79adc4
L
10543 {
10544 /* MOD_0F38F8_PREFIX_1 */
10545 { "enqcmds", { Gva, M }, PREFIX_OPCODE },
10546 },
c0a30a9f
L
10547 {
10548 /* MOD_0F38F8_PREFIX_2 */
10549 { "movdir64b", { Gva, M }, PREFIX_OPCODE },
10550 },
5d79adc4
L
10551 {
10552 /* MOD_0F38F8_PREFIX_3 */
10553 { "enqcmd", { Gva, M }, PREFIX_OPCODE },
10554 },
c0a30a9f
L
10555 {
10556 /* MOD_0F38F9_PREFIX_0 */
10557 { "movdiri", { Em, Gv }, PREFIX_OPCODE },
10558 },
c0f3af97
L
10559 {
10560 /* MOD_62_32BIT */
bf890a93 10561 { "bound{S|}", { Gv, Ma }, 0 },
43234a1e 10562 { EVEX_TABLE (EVEX_0F) },
c0f3af97
L
10563 },
10564 {
10565 /* MOD_C4_32BIT */
bf890a93 10566 { "lesS", { Gv, Mp }, 0 },
c0f3af97
L
10567 { VEX_C4_TABLE (VEX_0F) },
10568 },
10569 {
10570 /* MOD_C5_32BIT */
bf890a93 10571 { "ldsS", { Gv, Mp }, 0 },
c0f3af97
L
10572 { VEX_C5_TABLE (VEX_0F) },
10573 },
10574 {
592a252b
L
10575 /* MOD_VEX_0F12_PREFIX_0 */
10576 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_0) },
10577 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_1) },
c0f3af97
L
10578 },
10579 {
592a252b
L
10580 /* MOD_VEX_0F13 */
10581 { VEX_LEN_TABLE (VEX_LEN_0F13_M_0) },
c0f3af97
L
10582 },
10583 {
592a252b
L
10584 /* MOD_VEX_0F16_PREFIX_0 */
10585 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_0) },
10586 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_1) },
c0f3af97
L
10587 },
10588 {
592a252b
L
10589 /* MOD_VEX_0F17 */
10590 { VEX_LEN_TABLE (VEX_LEN_0F17_M_0) },
c0f3af97
L
10591 },
10592 {
592a252b 10593 /* MOD_VEX_0F2B */
ec6f095a 10594 { "vmovntpX", { Mx, XM }, 0 },
c0f3af97 10595 },
ab4e4ed5
AF
10596 {
10597 /* MOD_VEX_W_0_0F41_P_0_LEN_1 */
10598 { Bad_Opcode },
10599 { "kandw", { MaskG, MaskVex, MaskR }, 0 },
10600 },
10601 {
10602 /* MOD_VEX_W_1_0F41_P_0_LEN_1 */
10603 { Bad_Opcode },
10604 { "kandq", { MaskG, MaskVex, MaskR }, 0 },
10605 },
10606 {
10607 /* MOD_VEX_W_0_0F41_P_2_LEN_1 */
10608 { Bad_Opcode },
10609 { "kandb", { MaskG, MaskVex, MaskR }, 0 },
10610 },
10611 {
10612 /* MOD_VEX_W_1_0F41_P_2_LEN_1 */
10613 { Bad_Opcode },
10614 { "kandd", { MaskG, MaskVex, MaskR }, 0 },
10615 },
10616 {
10617 /* MOD_VEX_W_0_0F42_P_0_LEN_1 */
10618 { Bad_Opcode },
10619 { "kandnw", { MaskG, MaskVex, MaskR }, 0 },
10620 },
10621 {
10622 /* MOD_VEX_W_1_0F42_P_0_LEN_1 */
10623 { Bad_Opcode },
10624 { "kandnq", { MaskG, MaskVex, MaskR }, 0 },
10625 },
10626 {
10627 /* MOD_VEX_W_0_0F42_P_2_LEN_1 */
10628 { Bad_Opcode },
10629 { "kandnb", { MaskG, MaskVex, MaskR }, 0 },
10630 },
10631 {
10632 /* MOD_VEX_W_1_0F42_P_2_LEN_1 */
10633 { Bad_Opcode },
10634 { "kandnd", { MaskG, MaskVex, MaskR }, 0 },
10635 },
10636 {
10637 /* MOD_VEX_W_0_0F44_P_0_LEN_0 */
10638 { Bad_Opcode },
10639 { "knotw", { MaskG, MaskR }, 0 },
10640 },
10641 {
10642 /* MOD_VEX_W_1_0F44_P_0_LEN_0 */
10643 { Bad_Opcode },
10644 { "knotq", { MaskG, MaskR }, 0 },
10645 },
10646 {
10647 /* MOD_VEX_W_0_0F44_P_2_LEN_0 */
10648 { Bad_Opcode },
10649 { "knotb", { MaskG, MaskR }, 0 },
10650 },
10651 {
10652 /* MOD_VEX_W_1_0F44_P_2_LEN_0 */
10653 { Bad_Opcode },
10654 { "knotd", { MaskG, MaskR }, 0 },
10655 },
10656 {
10657 /* MOD_VEX_W_0_0F45_P_0_LEN_1 */
10658 { Bad_Opcode },
10659 { "korw", { MaskG, MaskVex, MaskR }, 0 },
10660 },
10661 {
10662 /* MOD_VEX_W_1_0F45_P_0_LEN_1 */
10663 { Bad_Opcode },
10664 { "korq", { MaskG, MaskVex, MaskR }, 0 },
10665 },
10666 {
10667 /* MOD_VEX_W_0_0F45_P_2_LEN_1 */
10668 { Bad_Opcode },
10669 { "korb", { MaskG, MaskVex, MaskR }, 0 },
10670 },
10671 {
10672 /* MOD_VEX_W_1_0F45_P_2_LEN_1 */
10673 { Bad_Opcode },
10674 { "kord", { MaskG, MaskVex, MaskR }, 0 },
10675 },
10676 {
10677 /* MOD_VEX_W_0_0F46_P_0_LEN_1 */
10678 { Bad_Opcode },
10679 { "kxnorw", { MaskG, MaskVex, MaskR }, 0 },
10680 },
10681 {
10682 /* MOD_VEX_W_1_0F46_P_0_LEN_1 */
10683 { Bad_Opcode },
10684 { "kxnorq", { MaskG, MaskVex, MaskR }, 0 },
10685 },
10686 {
10687 /* MOD_VEX_W_0_0F46_P_2_LEN_1 */
10688 { Bad_Opcode },
10689 { "kxnorb", { MaskG, MaskVex, MaskR }, 0 },
10690 },
10691 {
10692 /* MOD_VEX_W_1_0F46_P_2_LEN_1 */
10693 { Bad_Opcode },
10694 { "kxnord", { MaskG, MaskVex, MaskR }, 0 },
10695 },
10696 {
10697 /* MOD_VEX_W_0_0F47_P_0_LEN_1 */
10698 { Bad_Opcode },
10699 { "kxorw", { MaskG, MaskVex, MaskR }, 0 },
10700 },
10701 {
10702 /* MOD_VEX_W_1_0F47_P_0_LEN_1 */
10703 { Bad_Opcode },
10704 { "kxorq", { MaskG, MaskVex, MaskR }, 0 },
10705 },
10706 {
10707 /* MOD_VEX_W_0_0F47_P_2_LEN_1 */
10708 { Bad_Opcode },
10709 { "kxorb", { MaskG, MaskVex, MaskR }, 0 },
10710 },
10711 {
10712 /* MOD_VEX_W_1_0F47_P_2_LEN_1 */
10713 { Bad_Opcode },
10714 { "kxord", { MaskG, MaskVex, MaskR }, 0 },
10715 },
10716 {
10717 /* MOD_VEX_W_0_0F4A_P_0_LEN_1 */
10718 { Bad_Opcode },
10719 { "kaddw", { MaskG, MaskVex, MaskR }, 0 },
10720 },
10721 {
10722 /* MOD_VEX_W_1_0F4A_P_0_LEN_1 */
10723 { Bad_Opcode },
10724 { "kaddq", { MaskG, MaskVex, MaskR }, 0 },
10725 },
10726 {
10727 /* MOD_VEX_W_0_0F4A_P_2_LEN_1 */
10728 { Bad_Opcode },
10729 { "kaddb", { MaskG, MaskVex, MaskR }, 0 },
10730 },
10731 {
10732 /* MOD_VEX_W_1_0F4A_P_2_LEN_1 */
10733 { Bad_Opcode },
10734 { "kaddd", { MaskG, MaskVex, MaskR }, 0 },
10735 },
10736 {
10737 /* MOD_VEX_W_0_0F4B_P_0_LEN_1 */
10738 { Bad_Opcode },
10739 { "kunpckwd", { MaskG, MaskVex, MaskR }, 0 },
10740 },
10741 {
10742 /* MOD_VEX_W_1_0F4B_P_0_LEN_1 */
10743 { Bad_Opcode },
10744 { "kunpckdq", { MaskG, MaskVex, MaskR }, 0 },
10745 },
10746 {
10747 /* MOD_VEX_W_0_0F4B_P_2_LEN_1 */
10748 { Bad_Opcode },
10749 { "kunpckbw", { MaskG, MaskVex, MaskR }, 0 },
10750 },
c0f3af97 10751 {
592a252b 10752 /* MOD_VEX_0F50 */
592d1631 10753 { Bad_Opcode },
ec6f095a 10754 { "vmovmskpX", { Gdq, XS }, 0 },
c0f3af97
L
10755 },
10756 {
592a252b 10757 /* MOD_VEX_0F71_REG_2 */
592d1631 10758 { Bad_Opcode },
592a252b 10759 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_2) },
b844680a
L
10760 },
10761 {
592a252b 10762 /* MOD_VEX_0F71_REG_4 */
592d1631 10763 { Bad_Opcode },
592a252b 10764 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_4) },
b844680a
L
10765 },
10766 {
592a252b 10767 /* MOD_VEX_0F71_REG_6 */
592d1631 10768 { Bad_Opcode },
592a252b 10769 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_6) },
b844680a
L
10770 },
10771 {
592a252b 10772 /* MOD_VEX_0F72_REG_2 */
592d1631 10773 { Bad_Opcode },
592a252b 10774 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_2) },
b844680a 10775 },
d8faab4e 10776 {
592a252b 10777 /* MOD_VEX_0F72_REG_4 */
592d1631 10778 { Bad_Opcode },
592a252b 10779 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_4) },
d8faab4e
L
10780 },
10781 {
592a252b 10782 /* MOD_VEX_0F72_REG_6 */
592d1631 10783 { Bad_Opcode },
592a252b 10784 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_6) },
d8faab4e 10785 },
876d4bfa 10786 {
592a252b 10787 /* MOD_VEX_0F73_REG_2 */
592d1631 10788 { Bad_Opcode },
592a252b 10789 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_2) },
876d4bfa
L
10790 },
10791 {
592a252b 10792 /* MOD_VEX_0F73_REG_3 */
592d1631 10793 { Bad_Opcode },
592a252b 10794 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_3) },
475a2301
L
10795 },
10796 {
592a252b 10797 /* MOD_VEX_0F73_REG_6 */
592d1631 10798 { Bad_Opcode },
592a252b 10799 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_6) },
876d4bfa
L
10800 },
10801 {
592a252b 10802 /* MOD_VEX_0F73_REG_7 */
592d1631 10803 { Bad_Opcode },
592a252b 10804 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_7) },
876d4bfa 10805 },
ab4e4ed5
AF
10806 {
10807 /* MOD_VEX_W_0_0F91_P_0_LEN_0 */
10808 { "kmovw", { Ew, MaskG }, 0 },
10809 { Bad_Opcode },
10810 },
10811 {
10812 /* MOD_VEX_W_0_0F91_P_0_LEN_0 */
10813 { "kmovq", { Eq, MaskG }, 0 },
10814 { Bad_Opcode },
10815 },
10816 {
10817 /* MOD_VEX_W_0_0F91_P_2_LEN_0 */
10818 { "kmovb", { Eb, MaskG }, 0 },
10819 { Bad_Opcode },
10820 },
10821 {
10822 /* MOD_VEX_W_0_0F91_P_2_LEN_0 */
10823 { "kmovd", { Ed, MaskG }, 0 },
10824 { Bad_Opcode },
10825 },
10826 {
10827 /* MOD_VEX_W_0_0F92_P_0_LEN_0 */
10828 { Bad_Opcode },
10829 { "kmovw", { MaskG, Rdq }, 0 },
10830 },
10831 {
10832 /* MOD_VEX_W_0_0F92_P_2_LEN_0 */
10833 { Bad_Opcode },
10834 { "kmovb", { MaskG, Rdq }, 0 },
10835 },
10836 {
58a211d2 10837 /* MOD_VEX_0F92_P_3_LEN_0 */
ab4e4ed5 10838 { Bad_Opcode },
58a211d2 10839 { "kmovK", { MaskG, Rdq }, 0 },
ab4e4ed5
AF
10840 },
10841 {
10842 /* MOD_VEX_W_0_0F93_P_0_LEN_0 */
10843 { Bad_Opcode },
10844 { "kmovw", { Gdq, MaskR }, 0 },
10845 },
10846 {
10847 /* MOD_VEX_W_0_0F93_P_2_LEN_0 */
10848 { Bad_Opcode },
10849 { "kmovb", { Gdq, MaskR }, 0 },
10850 },
10851 {
58a211d2 10852 /* MOD_VEX_0F93_P_3_LEN_0 */
ab4e4ed5 10853 { Bad_Opcode },
58a211d2 10854 { "kmovK", { Gdq, MaskR }, 0 },
ab4e4ed5
AF
10855 },
10856 {
10857 /* MOD_VEX_W_0_0F98_P_0_LEN_0 */
10858 { Bad_Opcode },
10859 { "kortestw", { MaskG, MaskR }, 0 },
10860 },
10861 {
10862 /* MOD_VEX_W_1_0F98_P_0_LEN_0 */
10863 { Bad_Opcode },
10864 { "kortestq", { MaskG, MaskR }, 0 },
10865 },
10866 {
10867 /* MOD_VEX_W_0_0F98_P_2_LEN_0 */
10868 { Bad_Opcode },
10869 { "kortestb", { MaskG, MaskR }, 0 },
10870 },
10871 {
10872 /* MOD_VEX_W_1_0F98_P_2_LEN_0 */
10873 { Bad_Opcode },
10874 { "kortestd", { MaskG, MaskR }, 0 },
10875 },
10876 {
10877 /* MOD_VEX_W_0_0F99_P_0_LEN_0 */
10878 { Bad_Opcode },
10879 { "ktestw", { MaskG, MaskR }, 0 },
10880 },
10881 {
10882 /* MOD_VEX_W_1_0F99_P_0_LEN_0 */
10883 { Bad_Opcode },
10884 { "ktestq", { MaskG, MaskR }, 0 },
10885 },
10886 {
10887 /* MOD_VEX_W_0_0F99_P_2_LEN_0 */
10888 { Bad_Opcode },
10889 { "ktestb", { MaskG, MaskR }, 0 },
10890 },
10891 {
10892 /* MOD_VEX_W_1_0F99_P_2_LEN_0 */
10893 { Bad_Opcode },
10894 { "ktestd", { MaskG, MaskR }, 0 },
10895 },
876d4bfa 10896 {
592a252b
L
10897 /* MOD_VEX_0FAE_REG_2 */
10898 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_2_M_0) },
876d4bfa 10899 },
bbedc832 10900 {
592a252b
L
10901 /* MOD_VEX_0FAE_REG_3 */
10902 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_3_M_0) },
bbedc832 10903 },
144c41d9 10904 {
592a252b 10905 /* MOD_VEX_0FD7_PREFIX_2 */
592d1631 10906 { Bad_Opcode },
ec6f095a 10907 { "vpmovmskb", { Gdq, XS }, 0 },
144c41d9 10908 },
1afd85e3 10909 {
592a252b 10910 /* MOD_VEX_0FE7_PREFIX_2 */
ec6f095a 10911 { "vmovntdq", { Mx, XM }, 0 },
1afd85e3
L
10912 },
10913 {
592a252b 10914 /* MOD_VEX_0FF0_PREFIX_3 */
ec6f095a 10915 { "vlddqu", { XM, M }, 0 },
92fddf8e 10916 },
75c135a8 10917 {
592a252b
L
10918 /* MOD_VEX_0F381A_PREFIX_2 */
10919 { VEX_LEN_TABLE (VEX_LEN_0F381A_P_2_M_0) },
75c135a8 10920 },
1afd85e3 10921 {
592a252b 10922 /* MOD_VEX_0F382A_PREFIX_2 */
ec6f095a 10923 { "vmovntdqa", { XM, Mx }, 0 },
1afd85e3 10924 },
75c135a8 10925 {
592a252b
L
10926 /* MOD_VEX_0F382C_PREFIX_2 */
10927 { VEX_W_TABLE (VEX_W_0F382C_P_2_M_0) },
75c135a8 10928 },
1afd85e3 10929 {
592a252b
L
10930 /* MOD_VEX_0F382D_PREFIX_2 */
10931 { VEX_W_TABLE (VEX_W_0F382D_P_2_M_0) },
1afd85e3
L
10932 },
10933 {
592a252b
L
10934 /* MOD_VEX_0F382E_PREFIX_2 */
10935 { VEX_W_TABLE (VEX_W_0F382E_P_2_M_0) },
1afd85e3
L
10936 },
10937 {
592a252b
L
10938 /* MOD_VEX_0F382F_PREFIX_2 */
10939 { VEX_W_TABLE (VEX_W_0F382F_P_2_M_0) },
1afd85e3 10940 },
6c30d220
L
10941 {
10942 /* MOD_VEX_0F385A_PREFIX_2 */
10943 { VEX_LEN_TABLE (VEX_LEN_0F385A_P_2_M_0) },
10944 },
10945 {
10946 /* MOD_VEX_0F388C_PREFIX_2 */
bf890a93 10947 { "vpmaskmov%LW", { XM, Vex, Mx }, 0 },
6c30d220
L
10948 },
10949 {
10950 /* MOD_VEX_0F388E_PREFIX_2 */
bf890a93 10951 { "vpmaskmov%LW", { Mx, Vex, XM }, 0 },
6c30d220 10952 },
ab4e4ed5
AF
10953 {
10954 /* MOD_VEX_W_0_0F3A30_P_2_LEN_0 */
10955 { Bad_Opcode },
10956 { "kshiftrb", { MaskG, MaskR, Ib }, 0 },
10957 },
10958 {
10959 /* MOD_VEX_W_1_0F3A30_P_2_LEN_0 */
10960 { Bad_Opcode },
10961 { "kshiftrw", { MaskG, MaskR, Ib }, 0 },
10962 },
10963 {
10964 /* MOD_VEX_W_0_0F3A31_P_2_LEN_0 */
10965 { Bad_Opcode },
10966 { "kshiftrd", { MaskG, MaskR, Ib }, 0 },
10967 },
10968 {
10969 /* MOD_VEX_W_1_0F3A31_P_2_LEN_0 */
10970 { Bad_Opcode },
10971 { "kshiftrq", { MaskG, MaskR, Ib }, 0 },
10972 },
10973 {
10974 /* MOD_VEX_W_0_0F3A32_P_2_LEN_0 */
10975 { Bad_Opcode },
10976 { "kshiftlb", { MaskG, MaskR, Ib }, 0 },
10977 },
10978 {
10979 /* MOD_VEX_W_1_0F3A32_P_2_LEN_0 */
10980 { Bad_Opcode },
10981 { "kshiftlw", { MaskG, MaskR, Ib }, 0 },
10982 },
10983 {
10984 /* MOD_VEX_W_0_0F3A33_P_2_LEN_0 */
10985 { Bad_Opcode },
10986 { "kshiftld", { MaskG, MaskR, Ib }, 0 },
10987 },
10988 {
10989 /* MOD_VEX_W_1_0F3A33_P_2_LEN_0 */
10990 { Bad_Opcode },
10991 { "kshiftlq", { MaskG, MaskR, Ib }, 0 },
10992 },
ad692897
L
10993
10994#include "i386-dis-evex-mod.h"
b844680a
L
10995};
10996
1ceb70f8 10997static const struct dis386 rm_table[][8] = {
42164a71
L
10998 {
10999 /* RM_C6_REG_7 */
bf890a93 11000 { "xabort", { Skip_MODRM, Ib }, 0 },
42164a71
L
11001 },
11002 {
11003 /* RM_C7_REG_7 */
bf890a93 11004 { "xbeginT", { Skip_MODRM, Jv }, 0 },
42164a71 11005 },
b844680a 11006 {
1ceb70f8 11007 /* RM_0F01_REG_0 */
a4e78aa5 11008 { "enclv", { Skip_MODRM }, 0 },
bf890a93
IT
11009 { "vmcall", { Skip_MODRM }, 0 },
11010 { "vmlaunch", { Skip_MODRM }, 0 },
11011 { "vmresume", { Skip_MODRM }, 0 },
11012 { "vmxoff", { Skip_MODRM }, 0 },
be3a8dca 11013 { "pconfig", { Skip_MODRM }, 0 },
b844680a
L
11014 },
11015 {
1ceb70f8 11016 /* RM_0F01_REG_1 */
bf890a93
IT
11017 { "monitor", { { OP_Monitor, 0 } }, 0 },
11018 { "mwait", { { OP_Mwait, 0 } }, 0 },
11019 { "clac", { Skip_MODRM }, 0 },
11020 { "stac", { Skip_MODRM }, 0 },
2cf200a4
IT
11021 { Bad_Opcode },
11022 { Bad_Opcode },
11023 { Bad_Opcode },
bf890a93 11024 { "encls", { Skip_MODRM }, 0 },
b844680a 11025 },
475a2301
L
11026 {
11027 /* RM_0F01_REG_2 */
bf890a93
IT
11028 { "xgetbv", { Skip_MODRM }, 0 },
11029 { "xsetbv", { Skip_MODRM }, 0 },
8729a6f6
L
11030 { Bad_Opcode },
11031 { Bad_Opcode },
bf890a93
IT
11032 { "vmfunc", { Skip_MODRM }, 0 },
11033 { "xend", { Skip_MODRM }, 0 },
11034 { "xtest", { Skip_MODRM }, 0 },
11035 { "enclu", { Skip_MODRM }, 0 },
475a2301 11036 },
b844680a 11037 {
1ceb70f8 11038 /* RM_0F01_REG_3 */
bf890a93
IT
11039 { "vmrun", { Skip_MODRM }, 0 },
11040 { "vmmcall", { Skip_MODRM }, 0 },
11041 { "vmload", { Skip_MODRM }, 0 },
11042 { "vmsave", { Skip_MODRM }, 0 },
11043 { "stgi", { Skip_MODRM }, 0 },
11044 { "clgi", { Skip_MODRM }, 0 },
11045 { "skinit", { Skip_MODRM }, 0 },
11046 { "invlpga", { Skip_MODRM }, 0 },
4e7d34a6 11047 },
8eab4136
L
11048 {
11049 /* RM_0F01_REG_5 */
2234eee6 11050 { PREFIX_TABLE (PREFIX_MOD_3_0F01_REG_5_RM_0) },
8eab4136 11051 { Bad_Opcode },
603555e5 11052 { PREFIX_TABLE (PREFIX_MOD_3_0F01_REG_5_RM_2) },
8eab4136
L
11053 { Bad_Opcode },
11054 { Bad_Opcode },
11055 { Bad_Opcode },
11056 { "rdpkru", { Skip_MODRM }, 0 },
11057 { "wrpkru", { Skip_MODRM }, 0 },
11058 },
4e7d34a6 11059 {
1ceb70f8 11060 /* RM_0F01_REG_7 */
bf890a93
IT
11061 { "swapgs", { Skip_MODRM }, 0 },
11062 { "rdtscp", { Skip_MODRM }, 0 },
9916071f
AP
11063 { "monitorx", { { OP_Monitor, 0 } }, 0 },
11064 { "mwaitx", { { OP_Mwaitx, 0 } }, 0 },
bf890a93 11065 { "clzero", { Skip_MODRM }, 0 },
b844680a 11066 },
603555e5
L
11067 {
11068 /* RM_0F1E_MOD_3_REG_7 */
11069 { "nopQ", { Ev }, 0 },
11070 { "nopQ", { Ev }, 0 },
11071 { "endbr64", { Skip_MODRM }, PREFIX_OPCODE },
11072 { "endbr32", { Skip_MODRM }, PREFIX_OPCODE },
11073 { "nopQ", { Ev }, 0 },
11074 { "nopQ", { Ev }, 0 },
11075 { "nopQ", { Ev }, 0 },
11076 { "nopQ", { Ev }, 0 },
11077 },
b844680a 11078 {
1ceb70f8 11079 /* RM_0FAE_REG_6 */
bf890a93 11080 { "mfence", { Skip_MODRM }, 0 },
b844680a 11081 },
bbedc832 11082 {
1ceb70f8 11083 /* RM_0FAE_REG_7 */
b5cefcca
L
11084 { "sfence", { Skip_MODRM }, 0 },
11085
144c41d9 11086 },
b844680a
L
11087};
11088
c608c12e
AM
11089#define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")
11090
f16cd0d5
L
11091/* We use the high bit to indicate different name for the same
11092 prefix. */
f16cd0d5 11093#define REP_PREFIX (0xf3 | 0x100)
42164a71
L
11094#define XACQUIRE_PREFIX (0xf2 | 0x200)
11095#define XRELEASE_PREFIX (0xf3 | 0x400)
7e8b059b 11096#define BND_PREFIX (0xf2 | 0x400)
04ef582a 11097#define NOTRACK_PREFIX (0x3e | 0x100)
f16cd0d5
L
11098
11099static int
26ca5450 11100ckprefix (void)
252b5132 11101{
f16cd0d5 11102 int newrex, i, length;
52b15da3 11103 rex = 0;
c0f3af97 11104 rex_ignored = 0;
252b5132 11105 prefixes = 0;
7d421014 11106 used_prefixes = 0;
52b15da3 11107 rex_used = 0;
f16cd0d5
L
11108 last_lock_prefix = -1;
11109 last_repz_prefix = -1;
11110 last_repnz_prefix = -1;
11111 last_data_prefix = -1;
11112 last_addr_prefix = -1;
11113 last_rex_prefix = -1;
11114 last_seg_prefix = -1;
d9949a36 11115 fwait_prefix = -1;
285ca992 11116 active_seg_prefix = 0;
f310f33d
L
11117 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
11118 all_prefixes[i] = 0;
11119 i = 0;
f16cd0d5
L
11120 length = 0;
11121 /* The maximum instruction length is 15bytes. */
11122 while (length < MAX_CODE_LENGTH - 1)
252b5132
RH
11123 {
11124 FETCH_DATA (the_info, codep + 1);
52b15da3 11125 newrex = 0;
252b5132
RH
11126 switch (*codep)
11127 {
52b15da3
JH
11128 /* REX prefixes family. */
11129 case 0x40:
11130 case 0x41:
11131 case 0x42:
11132 case 0x43:
11133 case 0x44:
11134 case 0x45:
11135 case 0x46:
11136 case 0x47:
11137 case 0x48:
11138 case 0x49:
11139 case 0x4a:
11140 case 0x4b:
11141 case 0x4c:
11142 case 0x4d:
11143 case 0x4e:
11144 case 0x4f:
f16cd0d5
L
11145 if (address_mode == mode_64bit)
11146 newrex = *codep;
11147 else
11148 return 1;
11149 last_rex_prefix = i;
52b15da3 11150 break;
252b5132
RH
11151 case 0xf3:
11152 prefixes |= PREFIX_REPZ;
f16cd0d5 11153 last_repz_prefix = i;
252b5132
RH
11154 break;
11155 case 0xf2:
11156 prefixes |= PREFIX_REPNZ;
f16cd0d5 11157 last_repnz_prefix = i;
252b5132
RH
11158 break;
11159 case 0xf0:
11160 prefixes |= PREFIX_LOCK;
f16cd0d5 11161 last_lock_prefix = i;
252b5132
RH
11162 break;
11163 case 0x2e:
11164 prefixes |= PREFIX_CS;
f16cd0d5 11165 last_seg_prefix = i;
285ca992 11166 active_seg_prefix = PREFIX_CS;
252b5132
RH
11167 break;
11168 case 0x36:
11169 prefixes |= PREFIX_SS;
f16cd0d5 11170 last_seg_prefix = i;
285ca992 11171 active_seg_prefix = PREFIX_SS;
252b5132
RH
11172 break;
11173 case 0x3e:
11174 prefixes |= PREFIX_DS;
f16cd0d5 11175 last_seg_prefix = i;
285ca992 11176 active_seg_prefix = PREFIX_DS;
252b5132
RH
11177 break;
11178 case 0x26:
11179 prefixes |= PREFIX_ES;
f16cd0d5 11180 last_seg_prefix = i;
285ca992 11181 active_seg_prefix = PREFIX_ES;
252b5132
RH
11182 break;
11183 case 0x64:
11184 prefixes |= PREFIX_FS;
f16cd0d5 11185 last_seg_prefix = i;
285ca992 11186 active_seg_prefix = PREFIX_FS;
252b5132
RH
11187 break;
11188 case 0x65:
11189 prefixes |= PREFIX_GS;
f16cd0d5 11190 last_seg_prefix = i;
285ca992 11191 active_seg_prefix = PREFIX_GS;
252b5132
RH
11192 break;
11193 case 0x66:
11194 prefixes |= PREFIX_DATA;
f16cd0d5 11195 last_data_prefix = i;
252b5132
RH
11196 break;
11197 case 0x67:
11198 prefixes |= PREFIX_ADDR;
f16cd0d5 11199 last_addr_prefix = i;
252b5132 11200 break;
5076851f 11201 case FWAIT_OPCODE:
252b5132
RH
11202 /* fwait is really an instruction. If there are prefixes
11203 before the fwait, they belong to the fwait, *not* to the
11204 following instruction. */
d9949a36 11205 fwait_prefix = i;
3e7d61b2 11206 if (prefixes || rex)
252b5132
RH
11207 {
11208 prefixes |= PREFIX_FWAIT;
11209 codep++;
6c067bbb
RM
11210 /* This ensures that the previous REX prefixes are noticed
11211 as unused prefixes, as in the return case below. */
11212 rex_used = rex;
f16cd0d5 11213 return 1;
252b5132
RH
11214 }
11215 prefixes = PREFIX_FWAIT;
11216 break;
11217 default:
f16cd0d5 11218 return 1;
252b5132 11219 }
52b15da3
JH
11220 /* Rex is ignored when followed by another prefix. */
11221 if (rex)
11222 {
3e7d61b2 11223 rex_used = rex;
f16cd0d5 11224 return 1;
52b15da3 11225 }
f16cd0d5 11226 if (*codep != FWAIT_OPCODE)
4e9ac44a 11227 all_prefixes[i++] = *codep;
52b15da3 11228 rex = newrex;
252b5132 11229 codep++;
f16cd0d5
L
11230 length++;
11231 }
11232 return 0;
11233}
11234
7d421014
ILT
11235/* Return the name of the prefix byte PREF, or NULL if PREF is not a
11236 prefix byte. */
11237
11238static const char *
26ca5450 11239prefix_name (int pref, int sizeflag)
7d421014 11240{
0003779b
L
11241 static const char *rexes [16] =
11242 {
11243 "rex", /* 0x40 */
11244 "rex.B", /* 0x41 */
11245 "rex.X", /* 0x42 */
11246 "rex.XB", /* 0x43 */
11247 "rex.R", /* 0x44 */
11248 "rex.RB", /* 0x45 */
11249 "rex.RX", /* 0x46 */
11250 "rex.RXB", /* 0x47 */
11251 "rex.W", /* 0x48 */
11252 "rex.WB", /* 0x49 */
11253 "rex.WX", /* 0x4a */
11254 "rex.WXB", /* 0x4b */
11255 "rex.WR", /* 0x4c */
11256 "rex.WRB", /* 0x4d */
11257 "rex.WRX", /* 0x4e */
11258 "rex.WRXB", /* 0x4f */
11259 };
11260
7d421014
ILT
11261 switch (pref)
11262 {
52b15da3
JH
11263 /* REX prefixes family. */
11264 case 0x40:
52b15da3 11265 case 0x41:
52b15da3 11266 case 0x42:
52b15da3 11267 case 0x43:
52b15da3 11268 case 0x44:
52b15da3 11269 case 0x45:
52b15da3 11270 case 0x46:
52b15da3 11271 case 0x47:
52b15da3 11272 case 0x48:
52b15da3 11273 case 0x49:
52b15da3 11274 case 0x4a:
52b15da3 11275 case 0x4b:
52b15da3 11276 case 0x4c:
52b15da3 11277 case 0x4d:
52b15da3 11278 case 0x4e:
52b15da3 11279 case 0x4f:
0003779b 11280 return rexes [pref - 0x40];
7d421014
ILT
11281 case 0xf3:
11282 return "repz";
11283 case 0xf2:
11284 return "repnz";
11285 case 0xf0:
11286 return "lock";
11287 case 0x2e:
11288 return "cs";
11289 case 0x36:
11290 return "ss";
11291 case 0x3e:
11292 return "ds";
11293 case 0x26:
11294 return "es";
11295 case 0x64:
11296 return "fs";
11297 case 0x65:
11298 return "gs";
11299 case 0x66:
11300 return (sizeflag & DFLAG) ? "data16" : "data32";
11301 case 0x67:
cb712a9e 11302 if (address_mode == mode_64bit)
db6eb5be 11303 return (sizeflag & AFLAG) ? "addr32" : "addr64";
c1a64871 11304 else
2888cb7a 11305 return (sizeflag & AFLAG) ? "addr16" : "addr32";
7d421014
ILT
11306 case FWAIT_OPCODE:
11307 return "fwait";
f16cd0d5
L
11308 case REP_PREFIX:
11309 return "rep";
42164a71
L
11310 case XACQUIRE_PREFIX:
11311 return "xacquire";
11312 case XRELEASE_PREFIX:
11313 return "xrelease";
7e8b059b
L
11314 case BND_PREFIX:
11315 return "bnd";
04ef582a
L
11316 case NOTRACK_PREFIX:
11317 return "notrack";
7d421014
ILT
11318 default:
11319 return NULL;
11320 }
11321}
11322
ce518a5f
L
11323static char op_out[MAX_OPERANDS][100];
11324static int op_ad, op_index[MAX_OPERANDS];
1d9f512f 11325static int two_source_ops;
ce518a5f
L
11326static bfd_vma op_address[MAX_OPERANDS];
11327static bfd_vma op_riprel[MAX_OPERANDS];
52b15da3 11328static bfd_vma start_pc;
ce518a5f 11329
252b5132
RH
11330/*
11331 * On the 386's of 1988, the maximum length of an instruction is 15 bytes.
11332 * (see topic "Redundant prefixes" in the "Differences from 8086"
11333 * section of the "Virtual 8086 Mode" chapter.)
11334 * 'pc' should be the address of this instruction, it will
11335 * be used to print the target address if this is a relative jump or call
11336 * The function returns the length of this instruction in bytes.
11337 */
11338
252b5132 11339static char intel_syntax;
9d141669 11340static char intel_mnemonic = !SYSV386_COMPAT;
252b5132
RH
11341static char open_char;
11342static char close_char;
11343static char separator_char;
11344static char scale_char;
11345
5db04b09
L
11346enum x86_64_isa
11347{
11348 amd64 = 0,
11349 intel64
11350};
11351
11352static enum x86_64_isa isa64;
11353
e396998b
AM
11354/* Here for backwards compatibility. When gdb stops using
11355 print_insn_i386_att and print_insn_i386_intel these functions can
11356 disappear, and print_insn_i386 be merged into print_insn. */
252b5132 11357int
26ca5450 11358print_insn_i386_att (bfd_vma pc, disassemble_info *info)
252b5132
RH
11359{
11360 intel_syntax = 0;
e396998b
AM
11361
11362 return print_insn (pc, info);
252b5132
RH
11363}
11364
11365int
26ca5450 11366print_insn_i386_intel (bfd_vma pc, disassemble_info *info)
252b5132
RH
11367{
11368 intel_syntax = 1;
e396998b
AM
11369
11370 return print_insn (pc, info);
252b5132
RH
11371}
11372
e396998b 11373int
26ca5450 11374print_insn_i386 (bfd_vma pc, disassemble_info *info)
e396998b
AM
11375{
11376 intel_syntax = -1;
11377
11378 return print_insn (pc, info);
11379}
11380
f59a29b9
L
11381void
11382print_i386_disassembler_options (FILE *stream)
11383{
11384 fprintf (stream, _("\n\
11385The following i386/x86-64 specific disassembler options are supported for use\n\
11386with the -M switch (multiple options should be separated by commas):\n"));
11387
11388 fprintf (stream, _(" x86-64 Disassemble in 64bit mode\n"));
11389 fprintf (stream, _(" i386 Disassemble in 32bit mode\n"));
11390 fprintf (stream, _(" i8086 Disassemble in 16bit mode\n"));
11391 fprintf (stream, _(" att Display instruction in AT&T syntax\n"));
11392 fprintf (stream, _(" intel Display instruction in Intel syntax\n"));
9d141669
L
11393 fprintf (stream, _(" att-mnemonic\n"
11394 " Display instruction in AT&T mnemonic\n"));
11395 fprintf (stream, _(" intel-mnemonic\n"
11396 " Display instruction in Intel mnemonic\n"));
f59a29b9
L
11397 fprintf (stream, _(" addr64 Assume 64bit address size\n"));
11398 fprintf (stream, _(" addr32 Assume 32bit address size\n"));
11399 fprintf (stream, _(" addr16 Assume 16bit address size\n"));
11400 fprintf (stream, _(" data32 Assume 32bit data size\n"));
11401 fprintf (stream, _(" data16 Assume 16bit data size\n"));
11402 fprintf (stream, _(" suffix Always display instruction suffix in AT&T syntax\n"));
5db04b09
L
11403 fprintf (stream, _(" amd64 Display instruction in AMD64 ISA\n"));
11404 fprintf (stream, _(" intel64 Display instruction in Intel64 ISA\n"));
f59a29b9
L
11405}
11406
592d1631 11407/* Bad opcode. */
bf890a93 11408static const struct dis386 bad_opcode = { "(bad)", { XX }, 0 };
592d1631 11409
b844680a
L
11410/* Get a pointer to struct dis386 with a valid name. */
11411
11412static const struct dis386 *
8bb15339 11413get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
b844680a 11414{
91d6fa6a 11415 int vindex, vex_table_index;
b844680a
L
11416
11417 if (dp->name != NULL)
11418 return dp;
11419
11420 switch (dp->op[0].bytemode)
11421 {
1ceb70f8
L
11422 case USE_REG_TABLE:
11423 dp = &reg_table[dp->op[1].bytemode][modrm.reg];
11424 break;
11425
11426 case USE_MOD_TABLE:
91d6fa6a
NC
11427 vindex = modrm.mod == 0x3 ? 1 : 0;
11428 dp = &mod_table[dp->op[1].bytemode][vindex];
1ceb70f8
L
11429 break;
11430
11431 case USE_RM_TABLE:
11432 dp = &rm_table[dp->op[1].bytemode][modrm.rm];
b844680a
L
11433 break;
11434
4e7d34a6 11435 case USE_PREFIX_TABLE:
c0f3af97 11436 if (need_vex)
b844680a 11437 {
c0f3af97
L
11438 /* The prefix in VEX is implicit. */
11439 switch (vex.prefix)
11440 {
11441 case 0:
91d6fa6a 11442 vindex = 0;
c0f3af97
L
11443 break;
11444 case REPE_PREFIX_OPCODE:
91d6fa6a 11445 vindex = 1;
c0f3af97
L
11446 break;
11447 case DATA_PREFIX_OPCODE:
91d6fa6a 11448 vindex = 2;
c0f3af97
L
11449 break;
11450 case REPNE_PREFIX_OPCODE:
91d6fa6a 11451 vindex = 3;
c0f3af97
L
11452 break;
11453 default:
11454 abort ();
11455 break;
11456 }
b844680a 11457 }
7bb15c6f 11458 else
b844680a 11459 {
285ca992
L
11460 int last_prefix = -1;
11461 int prefix = 0;
91d6fa6a 11462 vindex = 0;
285ca992
L
11463 /* We check PREFIX_REPNZ and PREFIX_REPZ before PREFIX_DATA.
11464 When there are multiple PREFIX_REPNZ and PREFIX_REPZ, the
11465 last one wins. */
11466 if ((prefixes & (PREFIX_REPZ | PREFIX_REPNZ)) != 0)
b844680a 11467 {
285ca992 11468 if (last_repz_prefix > last_repnz_prefix)
c0f3af97 11469 {
285ca992
L
11470 vindex = 1;
11471 prefix = PREFIX_REPZ;
11472 last_prefix = last_repz_prefix;
c0f3af97
L
11473 }
11474 else
b844680a 11475 {
285ca992
L
11476 vindex = 3;
11477 prefix = PREFIX_REPNZ;
11478 last_prefix = last_repnz_prefix;
b844680a 11479 }
285ca992 11480
507bd325
L
11481 /* Check if prefix should be ignored. */
11482 if ((((prefix_table[dp->op[1].bytemode][vindex].prefix_requirement
11483 & PREFIX_IGNORED) >> PREFIX_IGNORED_SHIFT)
11484 & prefix) != 0)
285ca992
L
11485 vindex = 0;
11486 }
11487
11488 if (vindex == 0 && (prefixes & PREFIX_DATA) != 0)
11489 {
11490 vindex = 2;
11491 prefix = PREFIX_DATA;
11492 last_prefix = last_data_prefix;
11493 }
11494
11495 if (vindex != 0)
11496 {
11497 used_prefixes |= prefix;
11498 all_prefixes[last_prefix] = 0;
b844680a
L
11499 }
11500 }
91d6fa6a 11501 dp = &prefix_table[dp->op[1].bytemode][vindex];
b844680a
L
11502 break;
11503
4e7d34a6 11504 case USE_X86_64_TABLE:
91d6fa6a
NC
11505 vindex = address_mode == mode_64bit ? 1 : 0;
11506 dp = &x86_64_table[dp->op[1].bytemode][vindex];
b844680a
L
11507 break;
11508
4e7d34a6 11509 case USE_3BYTE_TABLE:
8bb15339 11510 FETCH_DATA (info, codep + 2);
91d6fa6a
NC
11511 vindex = *codep++;
11512 dp = &three_byte_table[dp->op[1].bytemode][vindex];
285ca992 11513 end_codep = codep;
8bb15339
L
11514 modrm.mod = (*codep >> 6) & 3;
11515 modrm.reg = (*codep >> 3) & 7;
11516 modrm.rm = *codep & 7;
11517 break;
11518
c0f3af97
L
11519 case USE_VEX_LEN_TABLE:
11520 if (!need_vex)
11521 abort ();
11522
11523 switch (vex.length)
11524 {
11525 case 128:
91d6fa6a 11526 vindex = 0;
c0f3af97
L
11527 break;
11528 case 256:
91d6fa6a 11529 vindex = 1;
c0f3af97
L
11530 break;
11531 default:
11532 abort ();
11533 break;
11534 }
11535
91d6fa6a 11536 dp = &vex_len_table[dp->op[1].bytemode][vindex];
c0f3af97
L
11537 break;
11538
04e2a182
L
11539 case USE_EVEX_LEN_TABLE:
11540 if (!vex.evex)
11541 abort ();
11542
11543 switch (vex.length)
11544 {
11545 case 128:
11546 vindex = 0;
11547 break;
11548 case 256:
11549 vindex = 1;
11550 break;
11551 case 512:
11552 vindex = 2;
11553 break;
11554 default:
11555 abort ();
11556 break;
11557 }
11558
11559 dp = &evex_len_table[dp->op[1].bytemode][vindex];
11560 break;
11561
f88c9eb0
SP
11562 case USE_XOP_8F_TABLE:
11563 FETCH_DATA (info, codep + 3);
11564 /* All bits in the REX prefix are ignored. */
11565 rex_ignored = rex;
11566 rex = ~(*codep >> 5) & 0x7;
11567
11568 /* VEX_TABLE_INDEX is the mmmmm part of the XOP byte 1 "RCB.mmmmm". */
11569 switch ((*codep & 0x1f))
11570 {
11571 default:
f07af43e
L
11572 dp = &bad_opcode;
11573 return dp;
5dd85c99
SP
11574 case 0x8:
11575 vex_table_index = XOP_08;
11576 break;
f88c9eb0
SP
11577 case 0x9:
11578 vex_table_index = XOP_09;
11579 break;
11580 case 0xa:
11581 vex_table_index = XOP_0A;
11582 break;
11583 }
11584 codep++;
11585 vex.w = *codep & 0x80;
11586 if (vex.w && address_mode == mode_64bit)
11587 rex |= REX_W;
11588
11589 vex.register_specifier = (~(*codep >> 3)) & 0xf;
abfcb414 11590 if (address_mode != mode_64bit)
f07af43e 11591 {
abfcb414
AP
11592 /* In 16/32-bit mode REX_B is silently ignored. */
11593 rex &= ~REX_B;
f07af43e 11594 }
f88c9eb0
SP
11595
11596 vex.length = (*codep & 0x4) ? 256 : 128;
11597 switch ((*codep & 0x3))
11598 {
11599 case 0:
f88c9eb0
SP
11600 break;
11601 case 1:
11602 vex.prefix = DATA_PREFIX_OPCODE;
11603 break;
11604 case 2:
11605 vex.prefix = REPE_PREFIX_OPCODE;
11606 break;
11607 case 3:
11608 vex.prefix = REPNE_PREFIX_OPCODE;
11609 break;
11610 }
11611 need_vex = 1;
11612 need_vex_reg = 1;
11613 codep++;
91d6fa6a
NC
11614 vindex = *codep++;
11615 dp = &xop_table[vex_table_index][vindex];
c48244a5 11616
285ca992 11617 end_codep = codep;
c48244a5
SP
11618 FETCH_DATA (info, codep + 1);
11619 modrm.mod = (*codep >> 6) & 3;
11620 modrm.reg = (*codep >> 3) & 7;
11621 modrm.rm = *codep & 7;
f88c9eb0
SP
11622 break;
11623
c0f3af97 11624 case USE_VEX_C4_TABLE:
43234a1e 11625 /* VEX prefix. */
c0f3af97
L
11626 FETCH_DATA (info, codep + 3);
11627 /* All bits in the REX prefix are ignored. */
11628 rex_ignored = rex;
11629 rex = ~(*codep >> 5) & 0x7;
11630 switch ((*codep & 0x1f))
11631 {
11632 default:
f07af43e
L
11633 dp = &bad_opcode;
11634 return dp;
c0f3af97 11635 case 0x1:
f88c9eb0 11636 vex_table_index = VEX_0F;
c0f3af97
L
11637 break;
11638 case 0x2:
f88c9eb0 11639 vex_table_index = VEX_0F38;
c0f3af97
L
11640 break;
11641 case 0x3:
f88c9eb0 11642 vex_table_index = VEX_0F3A;
c0f3af97
L
11643 break;
11644 }
11645 codep++;
11646 vex.w = *codep & 0x80;
9889cbb1 11647 if (address_mode == mode_64bit)
f07af43e 11648 {
9889cbb1
L
11649 if (vex.w)
11650 rex |= REX_W;
9889cbb1
L
11651 }
11652 else
11653 {
11654 /* For the 3-byte VEX prefix in 32-bit mode, the REX_B bit
11655 is ignored, other REX bits are 0 and the highest bit in
5f847646 11656 VEX.vvvv is also ignored (but we mustn't clear it here). */
9889cbb1 11657 rex = 0;
f07af43e 11658 }
5f847646 11659 vex.register_specifier = (~(*codep >> 3)) & 0xf;
c0f3af97
L
11660 vex.length = (*codep & 0x4) ? 256 : 128;
11661 switch ((*codep & 0x3))
11662 {
11663 case 0:
c0f3af97
L
11664 break;
11665 case 1:
11666 vex.prefix = DATA_PREFIX_OPCODE;
11667 break;
11668 case 2:
11669 vex.prefix = REPE_PREFIX_OPCODE;
11670 break;
11671 case 3:
11672 vex.prefix = REPNE_PREFIX_OPCODE;
11673 break;
11674 }
11675 need_vex = 1;
11676 need_vex_reg = 1;
11677 codep++;
91d6fa6a
NC
11678 vindex = *codep++;
11679 dp = &vex_table[vex_table_index][vindex];
285ca992 11680 end_codep = codep;
53c4d625
JB
11681 /* There is no MODRM byte for VEX0F 77. */
11682 if (vex_table_index != VEX_0F || vindex != 0x77)
c0f3af97
L
11683 {
11684 FETCH_DATA (info, codep + 1);
11685 modrm.mod = (*codep >> 6) & 3;
11686 modrm.reg = (*codep >> 3) & 7;
11687 modrm.rm = *codep & 7;
11688 }
11689 break;
11690
11691 case USE_VEX_C5_TABLE:
43234a1e 11692 /* VEX prefix. */
c0f3af97
L
11693 FETCH_DATA (info, codep + 2);
11694 /* All bits in the REX prefix are ignored. */
11695 rex_ignored = rex;
11696 rex = (*codep & 0x80) ? 0 : REX_R;
11697
9889cbb1
L
11698 /* For the 2-byte VEX prefix in 32-bit mode, the highest bit in
11699 VEX.vvvv is 1. */
c0f3af97 11700 vex.register_specifier = (~(*codep >> 3)) & 0xf;
c0f3af97
L
11701 vex.length = (*codep & 0x4) ? 256 : 128;
11702 switch ((*codep & 0x3))
11703 {
11704 case 0:
c0f3af97
L
11705 break;
11706 case 1:
11707 vex.prefix = DATA_PREFIX_OPCODE;
11708 break;
11709 case 2:
11710 vex.prefix = REPE_PREFIX_OPCODE;
11711 break;
11712 case 3:
11713 vex.prefix = REPNE_PREFIX_OPCODE;
11714 break;
11715 }
11716 need_vex = 1;
11717 need_vex_reg = 1;
11718 codep++;
91d6fa6a
NC
11719 vindex = *codep++;
11720 dp = &vex_table[dp->op[1].bytemode][vindex];
285ca992 11721 end_codep = codep;
53c4d625
JB
11722 /* There is no MODRM byte for VEX 77. */
11723 if (vindex != 0x77)
c0f3af97
L
11724 {
11725 FETCH_DATA (info, codep + 1);
11726 modrm.mod = (*codep >> 6) & 3;
11727 modrm.reg = (*codep >> 3) & 7;
11728 modrm.rm = *codep & 7;
11729 }
11730 break;
11731
9e30b8e0
L
11732 case USE_VEX_W_TABLE:
11733 if (!need_vex)
11734 abort ();
11735
11736 dp = &vex_w_table[dp->op[1].bytemode][vex.w ? 1 : 0];
11737 break;
11738
43234a1e
L
11739 case USE_EVEX_TABLE:
11740 two_source_ops = 0;
11741 /* EVEX prefix. */
11742 vex.evex = 1;
11743 FETCH_DATA (info, codep + 4);
11744 /* All bits in the REX prefix are ignored. */
11745 rex_ignored = rex;
11746 /* The first byte after 0x62. */
11747 rex = ~(*codep >> 5) & 0x7;
11748 vex.r = *codep & 0x10;
11749 switch ((*codep & 0xf))
11750 {
11751 default:
11752 return &bad_opcode;
11753 case 0x1:
11754 vex_table_index = EVEX_0F;
11755 break;
11756 case 0x2:
11757 vex_table_index = EVEX_0F38;
11758 break;
11759 case 0x3:
11760 vex_table_index = EVEX_0F3A;
11761 break;
11762 }
11763
11764 /* The second byte after 0x62. */
11765 codep++;
11766 vex.w = *codep & 0x80;
11767 if (vex.w && address_mode == mode_64bit)
11768 rex |= REX_W;
11769
11770 vex.register_specifier = (~(*codep >> 3)) & 0xf;
43234a1e
L
11771
11772 /* The U bit. */
11773 if (!(*codep & 0x4))
11774 return &bad_opcode;
11775
11776 switch ((*codep & 0x3))
11777 {
11778 case 0:
43234a1e
L
11779 break;
11780 case 1:
11781 vex.prefix = DATA_PREFIX_OPCODE;
11782 break;
11783 case 2:
11784 vex.prefix = REPE_PREFIX_OPCODE;
11785 break;
11786 case 3:
11787 vex.prefix = REPNE_PREFIX_OPCODE;
11788 break;
11789 }
11790
11791 /* The third byte after 0x62. */
11792 codep++;
11793
11794 /* Remember the static rounding bits. */
11795 vex.ll = (*codep >> 5) & 3;
11796 vex.b = (*codep & 0x10) != 0;
11797
11798 vex.v = *codep & 0x8;
11799 vex.mask_register_specifier = *codep & 0x7;
11800 vex.zeroing = *codep & 0x80;
11801
5f847646
JB
11802 if (address_mode != mode_64bit)
11803 {
11804 /* In 16/32-bit mode silently ignore following bits. */
11805 rex &= ~REX_B;
11806 vex.r = 1;
11807 vex.v = 1;
11808 }
11809
43234a1e
L
11810 need_vex = 1;
11811 need_vex_reg = 1;
11812 codep++;
11813 vindex = *codep++;
11814 dp = &evex_table[vex_table_index][vindex];
285ca992 11815 end_codep = codep;
43234a1e
L
11816 FETCH_DATA (info, codep + 1);
11817 modrm.mod = (*codep >> 6) & 3;
11818 modrm.reg = (*codep >> 3) & 7;
11819 modrm.rm = *codep & 7;
11820
11821 /* Set vector length. */
11822 if (modrm.mod == 3 && vex.b)
11823 vex.length = 512;
11824 else
11825 {
11826 switch (vex.ll)
11827 {
11828 case 0x0:
11829 vex.length = 128;
11830 break;
11831 case 0x1:
11832 vex.length = 256;
11833 break;
11834 case 0x2:
11835 vex.length = 512;
11836 break;
11837 default:
11838 return &bad_opcode;
11839 }
11840 }
11841 break;
11842
592d1631
L
11843 case 0:
11844 dp = &bad_opcode;
11845 break;
11846
b844680a 11847 default:
d34b5006 11848 abort ();
b844680a
L
11849 }
11850
11851 if (dp->name != NULL)
11852 return dp;
11853 else
8bb15339 11854 return get_valid_dis386 (dp, info);
b844680a
L
11855}
11856
dfc8cf43 11857static void
55cf16e1 11858get_sib (disassemble_info *info, int sizeflag)
dfc8cf43
L
11859{
11860 /* If modrm.mod == 3, operand must be register. */
11861 if (need_modrm
55cf16e1 11862 && ((sizeflag & AFLAG) || address_mode == mode_64bit)
dfc8cf43
L
11863 && modrm.mod != 3
11864 && modrm.rm == 4)
11865 {
11866 FETCH_DATA (info, codep + 2);
11867 sib.index = (codep [1] >> 3) & 7;
11868 sib.scale = (codep [1] >> 6) & 3;
11869 sib.base = codep [1] & 7;
11870 }
11871}
11872
e396998b 11873static int
26ca5450 11874print_insn (bfd_vma pc, disassemble_info *info)
252b5132 11875{
2da11e11 11876 const struct dis386 *dp;
252b5132 11877 int i;
ce518a5f 11878 char *op_txt[MAX_OPERANDS];
252b5132 11879 int needcomma;
df18fdba 11880 int sizeflag, orig_sizeflag;
e396998b 11881 const char *p;
252b5132 11882 struct dis_private priv;
f16cd0d5 11883 int prefix_length;
252b5132 11884
d7921315
L
11885 priv.orig_sizeflag = AFLAG | DFLAG;
11886 if ((info->mach & bfd_mach_i386_i386) != 0)
cb712a9e 11887 address_mode = mode_32bit;
2da11e11 11888 else if (info->mach == bfd_mach_i386_i8086)
d7921315
L
11889 {
11890 address_mode = mode_16bit;
11891 priv.orig_sizeflag = 0;
11892 }
2da11e11 11893 else
d7921315
L
11894 address_mode = mode_64bit;
11895
11896 if (intel_syntax == (char) -1)
11897 intel_syntax = (info->mach & bfd_mach_i386_intel_syntax) != 0;
e396998b
AM
11898
11899 for (p = info->disassembler_options; p != NULL; )
11900 {
5db04b09
L
11901 if (CONST_STRNEQ (p, "amd64"))
11902 isa64 = amd64;
11903 else if (CONST_STRNEQ (p, "intel64"))
11904 isa64 = intel64;
11905 else if (CONST_STRNEQ (p, "x86-64"))
e396998b 11906 {
cb712a9e 11907 address_mode = mode_64bit;
e396998b
AM
11908 priv.orig_sizeflag = AFLAG | DFLAG;
11909 }
0112cd26 11910 else if (CONST_STRNEQ (p, "i386"))
e396998b 11911 {
cb712a9e 11912 address_mode = mode_32bit;
e396998b
AM
11913 priv.orig_sizeflag = AFLAG | DFLAG;
11914 }
0112cd26 11915 else if (CONST_STRNEQ (p, "i8086"))
e396998b 11916 {
cb712a9e 11917 address_mode = mode_16bit;
e396998b
AM
11918 priv.orig_sizeflag = 0;
11919 }
0112cd26 11920 else if (CONST_STRNEQ (p, "intel"))
e396998b
AM
11921 {
11922 intel_syntax = 1;
9d141669
L
11923 if (CONST_STRNEQ (p + 5, "-mnemonic"))
11924 intel_mnemonic = 1;
e396998b 11925 }
0112cd26 11926 else if (CONST_STRNEQ (p, "att"))
e396998b
AM
11927 {
11928 intel_syntax = 0;
9d141669
L
11929 if (CONST_STRNEQ (p + 3, "-mnemonic"))
11930 intel_mnemonic = 0;
e396998b 11931 }
0112cd26 11932 else if (CONST_STRNEQ (p, "addr"))
e396998b 11933 {
f59a29b9
L
11934 if (address_mode == mode_64bit)
11935 {
11936 if (p[4] == '3' && p[5] == '2')
11937 priv.orig_sizeflag &= ~AFLAG;
11938 else if (p[4] == '6' && p[5] == '4')
11939 priv.orig_sizeflag |= AFLAG;
11940 }
11941 else
11942 {
11943 if (p[4] == '1' && p[5] == '6')
11944 priv.orig_sizeflag &= ~AFLAG;
11945 else if (p[4] == '3' && p[5] == '2')
11946 priv.orig_sizeflag |= AFLAG;
11947 }
e396998b 11948 }
0112cd26 11949 else if (CONST_STRNEQ (p, "data"))
e396998b
AM
11950 {
11951 if (p[4] == '1' && p[5] == '6')
11952 priv.orig_sizeflag &= ~DFLAG;
11953 else if (p[4] == '3' && p[5] == '2')
11954 priv.orig_sizeflag |= DFLAG;
11955 }
0112cd26 11956 else if (CONST_STRNEQ (p, "suffix"))
e396998b
AM
11957 priv.orig_sizeflag |= SUFFIX_ALWAYS;
11958
11959 p = strchr (p, ',');
11960 if (p != NULL)
11961 p++;
11962 }
11963
c0f92bf9
L
11964 if (address_mode == mode_64bit && sizeof (bfd_vma) < 8)
11965 {
11966 (*info->fprintf_func) (info->stream,
11967 _("64-bit address is disabled"));
11968 return -1;
11969 }
11970
e396998b
AM
11971 if (intel_syntax)
11972 {
11973 names64 = intel_names64;
11974 names32 = intel_names32;
11975 names16 = intel_names16;
11976 names8 = intel_names8;
11977 names8rex = intel_names8rex;
11978 names_seg = intel_names_seg;
b9733481 11979 names_mm = intel_names_mm;
7e8b059b 11980 names_bnd = intel_names_bnd;
b9733481
L
11981 names_xmm = intel_names_xmm;
11982 names_ymm = intel_names_ymm;
43234a1e 11983 names_zmm = intel_names_zmm;
db51cc60
L
11984 index64 = intel_index64;
11985 index32 = intel_index32;
43234a1e 11986 names_mask = intel_names_mask;
e396998b
AM
11987 index16 = intel_index16;
11988 open_char = '[';
11989 close_char = ']';
11990 separator_char = '+';
11991 scale_char = '*';
11992 }
11993 else
11994 {
11995 names64 = att_names64;
11996 names32 = att_names32;
11997 names16 = att_names16;
11998 names8 = att_names8;
11999 names8rex = att_names8rex;
12000 names_seg = att_names_seg;
b9733481 12001 names_mm = att_names_mm;
7e8b059b 12002 names_bnd = att_names_bnd;
b9733481
L
12003 names_xmm = att_names_xmm;
12004 names_ymm = att_names_ymm;
43234a1e 12005 names_zmm = att_names_zmm;
db51cc60
L
12006 index64 = att_index64;
12007 index32 = att_index32;
43234a1e 12008 names_mask = att_names_mask;
e396998b
AM
12009 index16 = att_index16;
12010 open_char = '(';
12011 close_char = ')';
12012 separator_char = ',';
12013 scale_char = ',';
12014 }
2da11e11 12015
4fe53c98 12016 /* The output looks better if we put 7 bytes on a line, since that
8a9036a4
L
12017 puts most long word instructions on a single line. Use 8 bytes
12018 for Intel L1OM. */
d7921315 12019 if ((info->mach & bfd_mach_l1om) != 0)
8a9036a4
L
12020 info->bytes_per_line = 8;
12021 else
12022 info->bytes_per_line = 7;
252b5132 12023
26ca5450 12024 info->private_data = &priv;
252b5132
RH
12025 priv.max_fetched = priv.the_buffer;
12026 priv.insn_start = pc;
252b5132
RH
12027
12028 obuf[0] = 0;
ce518a5f
L
12029 for (i = 0; i < MAX_OPERANDS; ++i)
12030 {
12031 op_out[i][0] = 0;
12032 op_index[i] = -1;
12033 }
252b5132
RH
12034
12035 the_info = info;
12036 start_pc = pc;
e396998b
AM
12037 start_codep = priv.the_buffer;
12038 codep = priv.the_buffer;
252b5132 12039
8df14d78 12040 if (OPCODES_SIGSETJMP (priv.bailout) != 0)
5076851f 12041 {
7d421014
ILT
12042 const char *name;
12043
5076851f 12044 /* Getting here means we tried for data but didn't get it. That
e396998b
AM
12045 means we have an incomplete instruction of some sort. Just
12046 print the first byte as a prefix or a .byte pseudo-op. */
12047 if (codep > priv.the_buffer)
5076851f 12048 {
e396998b 12049 name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
7d421014
ILT
12050 if (name != NULL)
12051 (*info->fprintf_func) (info->stream, "%s", name);
12052 else
5076851f 12053 {
7d421014
ILT
12054 /* Just print the first byte as a .byte instruction. */
12055 (*info->fprintf_func) (info->stream, ".byte 0x%x",
e396998b 12056 (unsigned int) priv.the_buffer[0]);
5076851f 12057 }
5076851f 12058
7d421014 12059 return 1;
5076851f
ILT
12060 }
12061
12062 return -1;
12063 }
12064
52b15da3 12065 obufp = obuf;
f16cd0d5
L
12066 sizeflag = priv.orig_sizeflag;
12067
12068 if (!ckprefix () || rex_used)
12069 {
12070 /* Too many prefixes or unused REX prefixes. */
12071 for (i = 0;
f6dd4781 12072 i < (int) ARRAY_SIZE (all_prefixes) && all_prefixes[i];
f16cd0d5 12073 i++)
de882298 12074 (*info->fprintf_func) (info->stream, "%s%s",
6c067bbb 12075 i == 0 ? "" : " ",
f16cd0d5 12076 prefix_name (all_prefixes[i], sizeflag));
de882298 12077 return i;
f16cd0d5 12078 }
252b5132
RH
12079
12080 insn_codep = codep;
12081
12082 FETCH_DATA (info, codep + 1);
12083 two_source_ops = (*codep == 0x62) || (*codep == 0xc8);
12084
3e7d61b2 12085 if (((prefixes & PREFIX_FWAIT)
f16cd0d5 12086 && ((*codep < 0xd8) || (*codep > 0xdf))))
252b5132 12087 {
86a80a50 12088 /* Handle prefixes before fwait. */
d9949a36 12089 for (i = 0; i < fwait_prefix && all_prefixes[i];
86a80a50
L
12090 i++)
12091 (*info->fprintf_func) (info->stream, "%s ",
12092 prefix_name (all_prefixes[i], sizeflag));
f16cd0d5 12093 (*info->fprintf_func) (info->stream, "fwait");
86a80a50 12094 return i + 1;
252b5132
RH
12095 }
12096
252b5132
RH
12097 if (*codep == 0x0f)
12098 {
eec0f4ca 12099 unsigned char threebyte;
5f40e14d
JS
12100
12101 codep++;
12102 FETCH_DATA (info, codep + 1);
12103 threebyte = *codep;
eec0f4ca 12104 dp = &dis386_twobyte[threebyte];
252b5132 12105 need_modrm = twobyte_has_modrm[*codep];
eec0f4ca 12106 codep++;
252b5132
RH
12107 }
12108 else
12109 {
6439fc28 12110 dp = &dis386[*codep];
252b5132 12111 need_modrm = onebyte_has_modrm[*codep];
eec0f4ca 12112 codep++;
252b5132 12113 }
246c51aa 12114
df18fdba
L
12115 /* Save sizeflag for printing the extra prefixes later before updating
12116 it for mnemonic and operand processing. The prefix names depend
12117 only on the address mode. */
12118 orig_sizeflag = sizeflag;
c608c12e 12119 if (prefixes & PREFIX_ADDR)
df18fdba 12120 sizeflag ^= AFLAG;
b844680a 12121 if ((prefixes & PREFIX_DATA))
df18fdba 12122 sizeflag ^= DFLAG;
3ffd33cf 12123
285ca992 12124 end_codep = codep;
8bb15339 12125 if (need_modrm)
252b5132
RH
12126 {
12127 FETCH_DATA (info, codep + 1);
7967e09e
L
12128 modrm.mod = (*codep >> 6) & 3;
12129 modrm.reg = (*codep >> 3) & 7;
12130 modrm.rm = *codep & 7;
252b5132
RH
12131 }
12132
42d5f9c6
MS
12133 need_vex = 0;
12134 need_vex_reg = 0;
12135 vex_w_done = 0;
caf0678c 12136 memset (&vex, 0, sizeof (vex));
55b126d4 12137
ce518a5f 12138 if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE)
252b5132 12139 {
55cf16e1 12140 get_sib (info, sizeflag);
252b5132
RH
12141 dofloat (sizeflag);
12142 }
12143 else
12144 {
8bb15339 12145 dp = get_valid_dis386 (dp, info);
b844680a 12146 if (dp != NULL && putop (dp->name, sizeflag) == 0)
6c067bbb 12147 {
55cf16e1 12148 get_sib (info, sizeflag);
ce518a5f
L
12149 for (i = 0; i < MAX_OPERANDS; ++i)
12150 {
246c51aa 12151 obufp = op_out[i];
ce518a5f
L
12152 op_ad = MAX_OPERANDS - 1 - i;
12153 if (dp->op[i].rtn)
12154 (*dp->op[i].rtn) (dp->op[i].bytemode, sizeflag);
43234a1e
L
12155 /* For EVEX instruction after the last operand masking
12156 should be printed. */
12157 if (i == 0 && vex.evex)
12158 {
12159 /* Don't print {%k0}. */
12160 if (vex.mask_register_specifier)
12161 {
12162 oappend ("{");
12163 oappend (names_mask[vex.mask_register_specifier]);
12164 oappend ("}");
12165 }
12166 if (vex.zeroing)
12167 oappend ("{z}");
12168 }
ce518a5f 12169 }
6439fc28 12170 }
252b5132
RH
12171 }
12172
63c6fc6c
L
12173 /* If VEX.vvvv and EVEX.vvvv are unused, they must be all 1s, which
12174 are all 0s in inverted form. */
12175 if (need_vex && vex.register_specifier != 0)
12176 {
12177 (*info->fprintf_func) (info->stream, "(bad)");
12178 return end_codep - priv.the_buffer;
12179 }
12180
d869730d 12181 /* Check if the REX prefix is used. */
e2e6193d 12182 if (rex_ignored == 0 && (rex ^ rex_used) == 0 && last_rex_prefix >= 0)
f16cd0d5
L
12183 all_prefixes[last_rex_prefix] = 0;
12184
5e6718e4 12185 /* Check if the SEG prefix is used. */
f16cd0d5
L
12186 if ((prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS | PREFIX_ES
12187 | PREFIX_FS | PREFIX_GS)) != 0
285ca992 12188 && (used_prefixes & active_seg_prefix) != 0)
f16cd0d5
L
12189 all_prefixes[last_seg_prefix] = 0;
12190
5e6718e4 12191 /* Check if the ADDR prefix is used. */
f16cd0d5
L
12192 if ((prefixes & PREFIX_ADDR) != 0
12193 && (used_prefixes & PREFIX_ADDR) != 0)
12194 all_prefixes[last_addr_prefix] = 0;
12195
df18fdba
L
12196 /* Check if the DATA prefix is used. */
12197 if ((prefixes & PREFIX_DATA) != 0
12198 && (used_prefixes & PREFIX_DATA) != 0)
12199 all_prefixes[last_data_prefix] = 0;
f16cd0d5 12200
df18fdba 12201 /* Print the extra prefixes. */
f16cd0d5 12202 prefix_length = 0;
f310f33d 12203 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
f16cd0d5
L
12204 if (all_prefixes[i])
12205 {
12206 const char *name;
df18fdba 12207 name = prefix_name (all_prefixes[i], orig_sizeflag);
f16cd0d5
L
12208 if (name == NULL)
12209 abort ();
12210 prefix_length += strlen (name) + 1;
12211 (*info->fprintf_func) (info->stream, "%s ", name);
12212 }
b844680a 12213
285ca992
L
12214 /* If the mandatory PREFIX_REPZ/PREFIX_REPNZ/PREFIX_DATA prefix is
12215 unused, opcode is invalid. Since the PREFIX_DATA prefix may be
12216 used by putop and MMX/SSE operand and may be overriden by the
12217 PREFIX_REPZ/PREFIX_REPNZ fix, we check the PREFIX_DATA prefix
12218 separately. */
3888916d 12219 if (dp->prefix_requirement == PREFIX_OPCODE
285ca992
L
12220 && dp != &bad_opcode
12221 && (((prefixes
12222 & (PREFIX_REPZ | PREFIX_REPNZ)) != 0
12223 && (used_prefixes
12224 & (PREFIX_REPZ | PREFIX_REPNZ)) == 0)
12225 || ((((prefixes
12226 & (PREFIX_REPZ | PREFIX_REPNZ | PREFIX_DATA))
12227 == PREFIX_DATA)
12228 && (used_prefixes & PREFIX_DATA) == 0))))
12229 {
12230 (*info->fprintf_func) (info->stream, "(bad)");
12231 return end_codep - priv.the_buffer;
12232 }
12233
f16cd0d5
L
12234 /* Check maximum code length. */
12235 if ((codep - start_codep) > MAX_CODE_LENGTH)
12236 {
12237 (*info->fprintf_func) (info->stream, "(bad)");
12238 return MAX_CODE_LENGTH;
12239 }
b844680a 12240
ea397f5b 12241 obufp = mnemonicendp;
f16cd0d5 12242 for (i = strlen (obuf) + prefix_length; i < 6; i++)
252b5132
RH
12243 oappend (" ");
12244 oappend (" ");
12245 (*info->fprintf_func) (info->stream, "%s", obuf);
12246
12247 /* The enter and bound instructions are printed with operands in the same
12248 order as the intel book; everything else is printed in reverse order. */
2da11e11 12249 if (intel_syntax || two_source_ops)
252b5132 12250 {
185b1163
L
12251 bfd_vma riprel;
12252
ce518a5f 12253 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 12254 op_txt[i] = op_out[i];
246c51aa 12255
3a8547d2
JB
12256 if (intel_syntax && dp && dp->op[2].rtn == OP_Rounding
12257 && dp->op[3].rtn == OP_E && dp->op[4].rtn == NULL)
12258 {
12259 op_txt[2] = op_out[3];
12260 op_txt[3] = op_out[2];
12261 }
12262
ce518a5f
L
12263 for (i = 0; i < (MAX_OPERANDS >> 1); ++i)
12264 {
6c067bbb
RM
12265 op_ad = op_index[i];
12266 op_index[i] = op_index[MAX_OPERANDS - 1 - i];
12267 op_index[MAX_OPERANDS - 1 - i] = op_ad;
185b1163
L
12268 riprel = op_riprel[i];
12269 op_riprel[i] = op_riprel [MAX_OPERANDS - 1 - i];
12270 op_riprel[MAX_OPERANDS - 1 - i] = riprel;
ce518a5f 12271 }
252b5132
RH
12272 }
12273 else
12274 {
ce518a5f 12275 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 12276 op_txt[MAX_OPERANDS - 1 - i] = op_out[i];
050dfa73
MM
12277 }
12278
ce518a5f
L
12279 needcomma = 0;
12280 for (i = 0; i < MAX_OPERANDS; ++i)
12281 if (*op_txt[i])
12282 {
12283 if (needcomma)
12284 (*info->fprintf_func) (info->stream, ",");
12285 if (op_index[i] != -1 && !op_riprel[i])
12286 (*info->print_address_func) ((bfd_vma) op_address[op_index[i]], info);
12287 else
12288 (*info->fprintf_func) (info->stream, "%s", op_txt[i]);
12289 needcomma = 1;
12290 }
050dfa73 12291
ce518a5f 12292 for (i = 0; i < MAX_OPERANDS; i++)
52b15da3
JH
12293 if (op_index[i] != -1 && op_riprel[i])
12294 {
12295 (*info->fprintf_func) (info->stream, " # ");
4fd7268a 12296 (*info->print_address_func) ((bfd_vma) (start_pc + (codep - start_codep)
52b15da3 12297 + op_address[op_index[i]]), info);
185b1163 12298 break;
52b15da3 12299 }
e396998b 12300 return codep - priv.the_buffer;
252b5132
RH
12301}
12302
6439fc28 12303static const char *float_mem[] = {
252b5132 12304 /* d8 */
7c52e0e8
L
12305 "fadd{s|}",
12306 "fmul{s|}",
12307 "fcom{s|}",
12308 "fcomp{s|}",
12309 "fsub{s|}",
12310 "fsubr{s|}",
12311 "fdiv{s|}",
12312 "fdivr{s|}",
db6eb5be 12313 /* d9 */
7c52e0e8 12314 "fld{s|}",
252b5132 12315 "(bad)",
7c52e0e8
L
12316 "fst{s|}",
12317 "fstp{s|}",
9306ca4a 12318 "fldenvIC",
252b5132 12319 "fldcw",
9306ca4a 12320 "fNstenvIC",
252b5132
RH
12321 "fNstcw",
12322 /* da */
7c52e0e8
L
12323 "fiadd{l|}",
12324 "fimul{l|}",
12325 "ficom{l|}",
12326 "ficomp{l|}",
12327 "fisub{l|}",
12328 "fisubr{l|}",
12329 "fidiv{l|}",
12330 "fidivr{l|}",
252b5132 12331 /* db */
7c52e0e8
L
12332 "fild{l|}",
12333 "fisttp{l|}",
12334 "fist{l|}",
12335 "fistp{l|}",
252b5132 12336 "(bad)",
6439fc28 12337 "fld{t||t|}",
252b5132 12338 "(bad)",
6439fc28 12339 "fstp{t||t|}",
252b5132 12340 /* dc */
7c52e0e8
L
12341 "fadd{l|}",
12342 "fmul{l|}",
12343 "fcom{l|}",
12344 "fcomp{l|}",
12345 "fsub{l|}",
12346 "fsubr{l|}",
12347 "fdiv{l|}",
12348 "fdivr{l|}",
252b5132 12349 /* dd */
7c52e0e8
L
12350 "fld{l|}",
12351 "fisttp{ll|}",
12352 "fst{l||}",
12353 "fstp{l|}",
9306ca4a 12354 "frstorIC",
252b5132 12355 "(bad)",
9306ca4a 12356 "fNsaveIC",
252b5132
RH
12357 "fNstsw",
12358 /* de */
ac465521
JB
12359 "fiadd{s|}",
12360 "fimul{s|}",
12361 "ficom{s|}",
12362 "ficomp{s|}",
12363 "fisub{s|}",
12364 "fisubr{s|}",
12365 "fidiv{s|}",
12366 "fidivr{s|}",
252b5132 12367 /* df */
ac465521
JB
12368 "fild{s|}",
12369 "fisttp{s|}",
12370 "fist{s|}",
12371 "fistp{s|}",
252b5132 12372 "fbld",
7c52e0e8 12373 "fild{ll|}",
252b5132 12374 "fbstp",
7c52e0e8 12375 "fistp{ll|}",
1d9f512f
AM
12376};
12377
12378static const unsigned char float_mem_mode[] = {
12379 /* d8 */
12380 d_mode,
12381 d_mode,
12382 d_mode,
12383 d_mode,
12384 d_mode,
12385 d_mode,
12386 d_mode,
12387 d_mode,
12388 /* d9 */
12389 d_mode,
12390 0,
12391 d_mode,
12392 d_mode,
12393 0,
12394 w_mode,
12395 0,
12396 w_mode,
12397 /* da */
12398 d_mode,
12399 d_mode,
12400 d_mode,
12401 d_mode,
12402 d_mode,
12403 d_mode,
12404 d_mode,
12405 d_mode,
12406 /* db */
12407 d_mode,
12408 d_mode,
12409 d_mode,
12410 d_mode,
12411 0,
9306ca4a 12412 t_mode,
1d9f512f 12413 0,
9306ca4a 12414 t_mode,
1d9f512f
AM
12415 /* dc */
12416 q_mode,
12417 q_mode,
12418 q_mode,
12419 q_mode,
12420 q_mode,
12421 q_mode,
12422 q_mode,
12423 q_mode,
12424 /* dd */
12425 q_mode,
12426 q_mode,
12427 q_mode,
12428 q_mode,
12429 0,
12430 0,
12431 0,
12432 w_mode,
12433 /* de */
12434 w_mode,
12435 w_mode,
12436 w_mode,
12437 w_mode,
12438 w_mode,
12439 w_mode,
12440 w_mode,
12441 w_mode,
12442 /* df */
12443 w_mode,
12444 w_mode,
12445 w_mode,
12446 w_mode,
9306ca4a 12447 t_mode,
1d9f512f 12448 q_mode,
9306ca4a 12449 t_mode,
1d9f512f 12450 q_mode
252b5132
RH
12451};
12452
ce518a5f
L
12453#define ST { OP_ST, 0 }
12454#define STi { OP_STi, 0 }
252b5132 12455
48c97fa1
L
12456#define FGRPd9_2 NULL, { { NULL, 1 } }, 0
12457#define FGRPd9_4 NULL, { { NULL, 2 } }, 0
12458#define FGRPd9_5 NULL, { { NULL, 3 } }, 0
12459#define FGRPd9_6 NULL, { { NULL, 4 } }, 0
12460#define FGRPd9_7 NULL, { { NULL, 5 } }, 0
12461#define FGRPda_5 NULL, { { NULL, 6 } }, 0
12462#define FGRPdb_4 NULL, { { NULL, 7 } }, 0
12463#define FGRPde_3 NULL, { { NULL, 8 } }, 0
12464#define FGRPdf_4 NULL, { { NULL, 9 } }, 0
252b5132 12465
2da11e11 12466static const struct dis386 float_reg[][8] = {
252b5132
RH
12467 /* d8 */
12468 {
bf890a93
IT
12469 { "fadd", { ST, STi }, 0 },
12470 { "fmul", { ST, STi }, 0 },
12471 { "fcom", { STi }, 0 },
12472 { "fcomp", { STi }, 0 },
12473 { "fsub", { ST, STi }, 0 },
12474 { "fsubr", { ST, STi }, 0 },
12475 { "fdiv", { ST, STi }, 0 },
12476 { "fdivr", { ST, STi }, 0 },
252b5132
RH
12477 },
12478 /* d9 */
12479 {
bf890a93
IT
12480 { "fld", { STi }, 0 },
12481 { "fxch", { STi }, 0 },
252b5132 12482 { FGRPd9_2 },
592d1631 12483 { Bad_Opcode },
252b5132
RH
12484 { FGRPd9_4 },
12485 { FGRPd9_5 },
12486 { FGRPd9_6 },
12487 { FGRPd9_7 },
12488 },
12489 /* da */
12490 {
bf890a93
IT
12491 { "fcmovb", { ST, STi }, 0 },
12492 { "fcmove", { ST, STi }, 0 },
12493 { "fcmovbe",{ ST, STi }, 0 },
12494 { "fcmovu", { ST, STi }, 0 },
592d1631 12495 { Bad_Opcode },
252b5132 12496 { FGRPda_5 },
592d1631
L
12497 { Bad_Opcode },
12498 { Bad_Opcode },
252b5132
RH
12499 },
12500 /* db */
12501 {
bf890a93
IT
12502 { "fcmovnb",{ ST, STi }, 0 },
12503 { "fcmovne",{ ST, STi }, 0 },
12504 { "fcmovnbe",{ ST, STi }, 0 },
12505 { "fcmovnu",{ ST, STi }, 0 },
252b5132 12506 { FGRPdb_4 },
bf890a93
IT
12507 { "fucomi", { ST, STi }, 0 },
12508 { "fcomi", { ST, STi }, 0 },
592d1631 12509 { Bad_Opcode },
252b5132
RH
12510 },
12511 /* dc */
12512 {
bf890a93
IT
12513 { "fadd", { STi, ST }, 0 },
12514 { "fmul", { STi, ST }, 0 },
592d1631
L
12515 { Bad_Opcode },
12516 { Bad_Opcode },
d53e6b98
JB
12517 { "fsub{!M|r}", { STi, ST }, 0 },
12518 { "fsub{M|}", { STi, ST }, 0 },
12519 { "fdiv{!M|r}", { STi, ST }, 0 },
12520 { "fdiv{M|}", { STi, ST }, 0 },
252b5132
RH
12521 },
12522 /* dd */
12523 {
bf890a93 12524 { "ffree", { STi }, 0 },
592d1631 12525 { Bad_Opcode },
bf890a93
IT
12526 { "fst", { STi }, 0 },
12527 { "fstp", { STi }, 0 },
12528 { "fucom", { STi }, 0 },
12529 { "fucomp", { STi }, 0 },
592d1631
L
12530 { Bad_Opcode },
12531 { Bad_Opcode },
252b5132
RH
12532 },
12533 /* de */
12534 {
bf890a93
IT
12535 { "faddp", { STi, ST }, 0 },
12536 { "fmulp", { STi, ST }, 0 },
592d1631 12537 { Bad_Opcode },
252b5132 12538 { FGRPde_3 },
d53e6b98
JB
12539 { "fsub{!M|r}p", { STi, ST }, 0 },
12540 { "fsub{M|}p", { STi, ST }, 0 },
12541 { "fdiv{!M|r}p", { STi, ST }, 0 },
12542 { "fdiv{M|}p", { STi, ST }, 0 },
252b5132
RH
12543 },
12544 /* df */
12545 {
bf890a93 12546 { "ffreep", { STi }, 0 },
592d1631
L
12547 { Bad_Opcode },
12548 { Bad_Opcode },
12549 { Bad_Opcode },
252b5132 12550 { FGRPdf_4 },
bf890a93
IT
12551 { "fucomip", { ST, STi }, 0 },
12552 { "fcomip", { ST, STi }, 0 },
592d1631 12553 { Bad_Opcode },
252b5132
RH
12554 },
12555};
12556
252b5132 12557static char *fgrps[][8] = {
48c97fa1
L
12558 /* Bad opcode 0 */
12559 {
12560 "(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12561 },
12562
12563 /* d9_2 1 */
252b5132
RH
12564 {
12565 "fnop","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12566 },
12567
48c97fa1 12568 /* d9_4 2 */
252b5132
RH
12569 {
12570 "fchs","fabs","(bad)","(bad)","ftst","fxam","(bad)","(bad)",
12571 },
12572
48c97fa1 12573 /* d9_5 3 */
252b5132
RH
12574 {
12575 "fld1","fldl2t","fldl2e","fldpi","fldlg2","fldln2","fldz","(bad)",
12576 },
12577
48c97fa1 12578 /* d9_6 4 */
252b5132
RH
12579 {
12580 "f2xm1","fyl2x","fptan","fpatan","fxtract","fprem1","fdecstp","fincstp",
12581 },
12582
48c97fa1 12583 /* d9_7 5 */
252b5132
RH
12584 {
12585 "fprem","fyl2xp1","fsqrt","fsincos","frndint","fscale","fsin","fcos",
12586 },
12587
48c97fa1 12588 /* da_5 6 */
252b5132
RH
12589 {
12590 "(bad)","fucompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12591 },
12592
48c97fa1 12593 /* db_4 7 */
252b5132 12594 {
309d3373
JB
12595 "fNeni(8087 only)","fNdisi(8087 only)","fNclex","fNinit",
12596 "fNsetpm(287 only)","frstpm(287 only)","(bad)","(bad)",
252b5132
RH
12597 },
12598
48c97fa1 12599 /* de_3 8 */
252b5132
RH
12600 {
12601 "(bad)","fcompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12602 },
12603
48c97fa1 12604 /* df_4 9 */
252b5132
RH
12605 {
12606 "fNstsw","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12607 },
12608};
12609
b6169b20
L
12610static void
12611swap_operand (void)
12612{
12613 mnemonicendp[0] = '.';
12614 mnemonicendp[1] = 's';
12615 mnemonicendp += 2;
12616}
12617
b844680a
L
12618static void
12619OP_Skip_MODRM (int bytemode ATTRIBUTE_UNUSED,
12620 int sizeflag ATTRIBUTE_UNUSED)
12621{
12622 /* Skip mod/rm byte. */
12623 MODRM_CHECK;
12624 codep++;
12625}
12626
252b5132 12627static void
26ca5450 12628dofloat (int sizeflag)
252b5132 12629{
2da11e11 12630 const struct dis386 *dp;
252b5132
RH
12631 unsigned char floatop;
12632
12633 floatop = codep[-1];
12634
7967e09e 12635 if (modrm.mod != 3)
252b5132 12636 {
7967e09e 12637 int fp_indx = (floatop - 0xd8) * 8 + modrm.reg;
1d9f512f
AM
12638
12639 putop (float_mem[fp_indx], sizeflag);
ce518a5f 12640 obufp = op_out[0];
6e50d963 12641 op_ad = 2;
1d9f512f 12642 OP_E (float_mem_mode[fp_indx], sizeflag);
252b5132
RH
12643 return;
12644 }
6608db57 12645 /* Skip mod/rm byte. */
4bba6815 12646 MODRM_CHECK;
252b5132
RH
12647 codep++;
12648
7967e09e 12649 dp = &float_reg[floatop - 0xd8][modrm.reg];
252b5132
RH
12650 if (dp->name == NULL)
12651 {
7967e09e 12652 putop (fgrps[dp->op[0].bytemode][modrm.rm], sizeflag);
252b5132 12653
6608db57 12654 /* Instruction fnstsw is only one with strange arg. */
252b5132 12655 if (floatop == 0xdf && codep[-1] == 0xe0)
ce518a5f 12656 strcpy (op_out[0], names16[0]);
252b5132
RH
12657 }
12658 else
12659 {
12660 putop (dp->name, sizeflag);
12661
ce518a5f 12662 obufp = op_out[0];
6e50d963 12663 op_ad = 2;
ce518a5f
L
12664 if (dp->op[0].rtn)
12665 (*dp->op[0].rtn) (dp->op[0].bytemode, sizeflag);
6e50d963 12666
ce518a5f 12667 obufp = op_out[1];
6e50d963 12668 op_ad = 1;
ce518a5f
L
12669 if (dp->op[1].rtn)
12670 (*dp->op[1].rtn) (dp->op[1].bytemode, sizeflag);
252b5132
RH
12671 }
12672}
12673
9ce09ba2
RM
12674/* Like oappend (below), but S is a string starting with '%'.
12675 In Intel syntax, the '%' is elided. */
12676static void
12677oappend_maybe_intel (const char *s)
12678{
12679 oappend (s + intel_syntax);
12680}
12681
252b5132 12682static void
26ca5450 12683OP_ST (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 12684{
9ce09ba2 12685 oappend_maybe_intel ("%st");
252b5132
RH
12686}
12687
252b5132 12688static void
26ca5450 12689OP_STi (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 12690{
7967e09e 12691 sprintf (scratchbuf, "%%st(%d)", modrm.rm);
9ce09ba2 12692 oappend_maybe_intel (scratchbuf);
252b5132
RH
12693}
12694
6608db57 12695/* Capital letters in template are macros. */
6439fc28 12696static int
d3ce72d0 12697putop (const char *in_template, int sizeflag)
252b5132 12698{
2da11e11 12699 const char *p;
9306ca4a 12700 int alt = 0;
9d141669 12701 int cond = 1;
98b528ac
L
12702 unsigned int l = 0, len = 1;
12703 char last[4];
12704
12705#define SAVE_LAST(c) \
12706 if (l < len && l < sizeof (last)) \
12707 last[l++] = c; \
12708 else \
12709 abort ();
252b5132 12710
d3ce72d0 12711 for (p = in_template; *p; p++)
252b5132
RH
12712 {
12713 switch (*p)
12714 {
12715 default:
12716 *obufp++ = *p;
12717 break;
98b528ac
L
12718 case '%':
12719 len++;
12720 break;
9d141669
L
12721 case '!':
12722 cond = 0;
12723 break;
6439fc28 12724 case '{':
6439fc28 12725 if (intel_syntax)
6439fc28
AM
12726 {
12727 while (*++p != '|')
7c52e0e8
L
12728 if (*p == '}' || *p == '\0')
12729 abort ();
6439fc28 12730 }
9306ca4a
JB
12731 /* Fall through. */
12732 case 'I':
12733 alt = 1;
12734 continue;
6439fc28
AM
12735 case '|':
12736 while (*++p != '}')
12737 {
12738 if (*p == '\0')
12739 abort ();
12740 }
12741 break;
12742 case '}':
12743 break;
252b5132 12744 case 'A':
db6eb5be
AM
12745 if (intel_syntax)
12746 break;
7967e09e 12747 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
252b5132
RH
12748 *obufp++ = 'b';
12749 break;
12750 case 'B':
4b06377f
L
12751 if (l == 0 && len == 1)
12752 {
12753case_B:
12754 if (intel_syntax)
12755 break;
12756 if (sizeflag & SUFFIX_ALWAYS)
12757 *obufp++ = 'b';
12758 }
12759 else
12760 {
12761 if (l != 1
12762 || len != 2
12763 || last[0] != 'L')
12764 {
12765 SAVE_LAST (*p);
12766 break;
12767 }
12768
12769 if (address_mode == mode_64bit
12770 && !(prefixes & PREFIX_ADDR))
12771 {
12772 *obufp++ = 'a';
12773 *obufp++ = 'b';
12774 *obufp++ = 's';
12775 }
12776
12777 goto case_B;
12778 }
252b5132 12779 break;
9306ca4a
JB
12780 case 'C':
12781 if (intel_syntax && !alt)
12782 break;
12783 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
12784 {
12785 if (sizeflag & DFLAG)
12786 *obufp++ = intel_syntax ? 'd' : 'l';
12787 else
12788 *obufp++ = intel_syntax ? 'w' : 's';
12789 used_prefixes |= (prefixes & PREFIX_DATA);
12790 }
12791 break;
ed7841b3
JB
12792 case 'D':
12793 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
12794 break;
161a04f6 12795 USED_REX (REX_W);
7967e09e 12796 if (modrm.mod == 3)
ed7841b3 12797 {
161a04f6 12798 if (rex & REX_W)
ed7841b3 12799 *obufp++ = 'q';
ed7841b3 12800 else
f16cd0d5
L
12801 {
12802 if (sizeflag & DFLAG)
12803 *obufp++ = intel_syntax ? 'd' : 'l';
12804 else
12805 *obufp++ = 'w';
12806 used_prefixes |= (prefixes & PREFIX_DATA);
12807 }
ed7841b3
JB
12808 }
12809 else
12810 *obufp++ = 'w';
12811 break;
252b5132 12812 case 'E': /* For jcxz/jecxz */
cb712a9e 12813 if (address_mode == mode_64bit)
c1a64871
JH
12814 {
12815 if (sizeflag & AFLAG)
12816 *obufp++ = 'r';
12817 else
12818 *obufp++ = 'e';
12819 }
12820 else
12821 if (sizeflag & AFLAG)
12822 *obufp++ = 'e';
3ffd33cf
AM
12823 used_prefixes |= (prefixes & PREFIX_ADDR);
12824 break;
12825 case 'F':
db6eb5be
AM
12826 if (intel_syntax)
12827 break;
e396998b 12828 if ((prefixes & PREFIX_ADDR) || (sizeflag & SUFFIX_ALWAYS))
3ffd33cf
AM
12829 {
12830 if (sizeflag & AFLAG)
cb712a9e 12831 *obufp++ = address_mode == mode_64bit ? 'q' : 'l';
3ffd33cf 12832 else
cb712a9e 12833 *obufp++ = address_mode == mode_64bit ? 'l' : 'w';
3ffd33cf
AM
12834 used_prefixes |= (prefixes & PREFIX_ADDR);
12835 }
252b5132 12836 break;
52fd6d94
JB
12837 case 'G':
12838 if (intel_syntax || (obufp[-1] != 's' && !(sizeflag & SUFFIX_ALWAYS)))
12839 break;
161a04f6 12840 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
12841 *obufp++ = 'l';
12842 else
12843 *obufp++ = 'w';
161a04f6 12844 if (!(rex & REX_W))
52fd6d94
JB
12845 used_prefixes |= (prefixes & PREFIX_DATA);
12846 break;
5dd0794d 12847 case 'H':
db6eb5be
AM
12848 if (intel_syntax)
12849 break;
5dd0794d
AM
12850 if ((prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_CS
12851 || (prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_DS)
12852 {
12853 used_prefixes |= prefixes & (PREFIX_CS | PREFIX_DS);
12854 *obufp++ = ',';
12855 *obufp++ = 'p';
12856 if (prefixes & PREFIX_DS)
12857 *obufp++ = 't';
12858 else
12859 *obufp++ = 'n';
12860 }
12861 break;
9306ca4a
JB
12862 case 'J':
12863 if (intel_syntax)
12864 break;
12865 *obufp++ = 'l';
12866 break;
42903f7f
L
12867 case 'K':
12868 USED_REX (REX_W);
12869 if (rex & REX_W)
12870 *obufp++ = 'q';
12871 else
12872 *obufp++ = 'd';
12873 break;
6dd5059a 12874 case 'Z':
04d824a4
JB
12875 if (l != 0 || len != 1)
12876 {
12877 if (l != 1 || len != 2 || last[0] != 'X')
12878 {
12879 SAVE_LAST (*p);
12880 break;
12881 }
12882 if (!need_vex || !vex.evex)
12883 abort ();
12884 if (intel_syntax
12885 || ((modrm.mod == 3 || vex.b) && !(sizeflag & SUFFIX_ALWAYS)))
12886 break;
12887 switch (vex.length)
12888 {
12889 case 128:
12890 *obufp++ = 'x';
12891 break;
12892 case 256:
12893 *obufp++ = 'y';
12894 break;
12895 case 512:
12896 *obufp++ = 'z';
12897 break;
12898 default:
12899 abort ();
12900 }
12901 break;
12902 }
6dd5059a
L
12903 if (intel_syntax)
12904 break;
12905 if (address_mode == mode_64bit && (sizeflag & SUFFIX_ALWAYS))
12906 {
12907 *obufp++ = 'q';
12908 break;
12909 }
12910 /* Fall through. */
98b528ac 12911 goto case_L;
252b5132 12912 case 'L':
98b528ac
L
12913 if (l != 0 || len != 1)
12914 {
12915 SAVE_LAST (*p);
12916 break;
12917 }
12918case_L:
db6eb5be
AM
12919 if (intel_syntax)
12920 break;
252b5132
RH
12921 if (sizeflag & SUFFIX_ALWAYS)
12922 *obufp++ = 'l';
252b5132 12923 break;
9d141669
L
12924 case 'M':
12925 if (intel_mnemonic != cond)
12926 *obufp++ = 'r';
12927 break;
252b5132
RH
12928 case 'N':
12929 if ((prefixes & PREFIX_FWAIT) == 0)
12930 *obufp++ = 'n';
7d421014
ILT
12931 else
12932 used_prefixes |= PREFIX_FWAIT;
252b5132 12933 break;
52b15da3 12934 case 'O':
161a04f6
L
12935 USED_REX (REX_W);
12936 if (rex & REX_W)
6439fc28 12937 *obufp++ = 'o';
a35ca55a
JB
12938 else if (intel_syntax && (sizeflag & DFLAG))
12939 *obufp++ = 'q';
52b15da3
JH
12940 else
12941 *obufp++ = 'd';
161a04f6 12942 if (!(rex & REX_W))
a35ca55a 12943 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 12944 break;
07f5af7d
L
12945 case '&':
12946 if (!intel_syntax
12947 && address_mode == mode_64bit
12948 && isa64 == intel64)
12949 {
12950 *obufp++ = 'q';
12951 break;
12952 }
12953 /* Fall through. */
6439fc28 12954 case 'T':
d9e3625e
L
12955 if (!intel_syntax
12956 && address_mode == mode_64bit
7bb15c6f 12957 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
12958 {
12959 *obufp++ = 'q';
12960 break;
12961 }
6608db57 12962 /* Fall through. */
4b4c407a 12963 goto case_P;
252b5132 12964 case 'P':
4b4c407a 12965 if (l == 0 && len == 1)
d9e3625e 12966 {
4b4c407a
L
12967case_P:
12968 if (intel_syntax)
d9e3625e 12969 {
4b4c407a
L
12970 if ((rex & REX_W) == 0
12971 && (prefixes & PREFIX_DATA))
12972 {
12973 if ((sizeflag & DFLAG) == 0)
12974 *obufp++ = 'w';
12975 used_prefixes |= (prefixes & PREFIX_DATA);
12976 }
12977 break;
12978 }
12979 if ((prefixes & PREFIX_DATA)
12980 || (rex & REX_W)
12981 || (sizeflag & SUFFIX_ALWAYS))
12982 {
12983 USED_REX (REX_W);
12984 if (rex & REX_W)
12985 *obufp++ = 'q';
12986 else
12987 {
12988 if (sizeflag & DFLAG)
12989 *obufp++ = 'l';
12990 else
12991 *obufp++ = 'w';
12992 used_prefixes |= (prefixes & PREFIX_DATA);
12993 }
d9e3625e 12994 }
d9e3625e 12995 }
4b4c407a 12996 else
252b5132 12997 {
4b4c407a
L
12998 if (l != 1 || len != 2 || last[0] != 'L')
12999 {
13000 SAVE_LAST (*p);
13001 break;
13002 }
13003
13004 if ((prefixes & PREFIX_DATA)
13005 || (rex & REX_W)
13006 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 13007 {
4b4c407a
L
13008 USED_REX (REX_W);
13009 if (rex & REX_W)
13010 *obufp++ = 'q';
13011 else
13012 {
13013 if (sizeflag & DFLAG)
13014 *obufp++ = intel_syntax ? 'd' : 'l';
13015 else
13016 *obufp++ = 'w';
13017 used_prefixes |= (prefixes & PREFIX_DATA);
13018 }
52b15da3 13019 }
252b5132
RH
13020 }
13021 break;
6439fc28 13022 case 'U':
db6eb5be
AM
13023 if (intel_syntax)
13024 break;
7bb15c6f 13025 if (address_mode == mode_64bit
6c067bbb 13026 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28 13027 {
7967e09e 13028 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
1a114b12 13029 *obufp++ = 'q';
6439fc28
AM
13030 break;
13031 }
6608db57 13032 /* Fall through. */
98b528ac 13033 goto case_Q;
252b5132 13034 case 'Q':
98b528ac 13035 if (l == 0 && len == 1)
252b5132 13036 {
98b528ac
L
13037case_Q:
13038 if (intel_syntax && !alt)
13039 break;
13040 USED_REX (REX_W);
13041 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 13042 {
98b528ac
L
13043 if (rex & REX_W)
13044 *obufp++ = 'q';
52b15da3 13045 else
98b528ac
L
13046 {
13047 if (sizeflag & DFLAG)
13048 *obufp++ = intel_syntax ? 'd' : 'l';
13049 else
13050 *obufp++ = 'w';
f16cd0d5 13051 used_prefixes |= (prefixes & PREFIX_DATA);
98b528ac 13052 }
52b15da3 13053 }
98b528ac
L
13054 }
13055 else
13056 {
13057 if (l != 1 || len != 2 || last[0] != 'L')
13058 {
13059 SAVE_LAST (*p);
13060 break;
13061 }
13062 if (intel_syntax
13063 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
13064 break;
13065 if ((rex & REX_W))
13066 {
13067 USED_REX (REX_W);
13068 *obufp++ = 'q';
13069 }
13070 else
13071 *obufp++ = 'l';
252b5132
RH
13072 }
13073 break;
13074 case 'R':
161a04f6
L
13075 USED_REX (REX_W);
13076 if (rex & REX_W)
a35ca55a
JB
13077 *obufp++ = 'q';
13078 else if (sizeflag & DFLAG)
c608c12e 13079 {
a35ca55a 13080 if (intel_syntax)
c608c12e 13081 *obufp++ = 'd';
c608c12e 13082 else
a35ca55a 13083 *obufp++ = 'l';
c608c12e 13084 }
252b5132 13085 else
a35ca55a
JB
13086 *obufp++ = 'w';
13087 if (intel_syntax && !p[1]
161a04f6 13088 && ((rex & REX_W) || (sizeflag & DFLAG)))
a35ca55a 13089 *obufp++ = 'e';
161a04f6 13090 if (!(rex & REX_W))
52b15da3 13091 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132 13092 break;
1a114b12 13093 case 'V':
4b06377f 13094 if (l == 0 && len == 1)
1a114b12 13095 {
4b06377f
L
13096 if (intel_syntax)
13097 break;
7bb15c6f 13098 if (address_mode == mode_64bit
6c067bbb 13099 && ((sizeflag & DFLAG) || (rex & REX_W)))
4b06377f
L
13100 {
13101 if (sizeflag & SUFFIX_ALWAYS)
13102 *obufp++ = 'q';
13103 break;
13104 }
13105 }
13106 else
13107 {
13108 if (l != 1
13109 || len != 2
13110 || last[0] != 'L')
13111 {
13112 SAVE_LAST (*p);
13113 break;
13114 }
13115
13116 if (rex & REX_W)
13117 {
13118 *obufp++ = 'a';
13119 *obufp++ = 'b';
13120 *obufp++ = 's';
13121 }
1a114b12
JB
13122 }
13123 /* Fall through. */
4b06377f 13124 goto case_S;
252b5132 13125 case 'S':
4b06377f 13126 if (l == 0 && len == 1)
252b5132 13127 {
4b06377f
L
13128case_S:
13129 if (intel_syntax)
13130 break;
13131 if (sizeflag & SUFFIX_ALWAYS)
52b15da3 13132 {
4b06377f
L
13133 if (rex & REX_W)
13134 *obufp++ = 'q';
52b15da3 13135 else
4b06377f
L
13136 {
13137 if (sizeflag & DFLAG)
13138 *obufp++ = 'l';
13139 else
13140 *obufp++ = 'w';
13141 used_prefixes |= (prefixes & PREFIX_DATA);
13142 }
13143 }
13144 }
13145 else
13146 {
13147 if (l != 1
13148 || len != 2
13149 || last[0] != 'L')
13150 {
13151 SAVE_LAST (*p);
13152 break;
52b15da3 13153 }
4b06377f
L
13154
13155 if (address_mode == mode_64bit
13156 && !(prefixes & PREFIX_ADDR))
13157 {
13158 *obufp++ = 'a';
13159 *obufp++ = 'b';
13160 *obufp++ = 's';
13161 }
13162
13163 goto case_S;
252b5132 13164 }
252b5132 13165 break;
041bd2e0 13166 case 'X':
c0f3af97
L
13167 if (l != 0 || len != 1)
13168 {
13169 SAVE_LAST (*p);
13170 break;
13171 }
13172 if (need_vex && vex.prefix)
13173 {
13174 if (vex.prefix == DATA_PREFIX_OPCODE)
13175 *obufp++ = 'd';
13176 else
13177 *obufp++ = 's';
13178 }
041bd2e0 13179 else
f16cd0d5
L
13180 {
13181 if (prefixes & PREFIX_DATA)
13182 *obufp++ = 'd';
13183 else
13184 *obufp++ = 's';
13185 used_prefixes |= (prefixes & PREFIX_DATA);
13186 }
041bd2e0 13187 break;
76f227a5 13188 case 'Y':
c0f3af97 13189 if (l == 0 && len == 1)
9646c87b 13190 abort ();
c0f3af97
L
13191 else
13192 {
13193 if (l != 1 || len != 2 || last[0] != 'X')
13194 {
13195 SAVE_LAST (*p);
13196 break;
13197 }
13198 if (!need_vex)
13199 abort ();
13200 if (intel_syntax
04d824a4 13201 || ((modrm.mod == 3 || vex.b) && !(sizeflag & SUFFIX_ALWAYS)))
c0f3af97
L
13202 break;
13203 switch (vex.length)
13204 {
13205 case 128:
13206 *obufp++ = 'x';
13207 break;
13208 case 256:
13209 *obufp++ = 'y';
13210 break;
04d824a4
JB
13211 case 512:
13212 if (!vex.evex)
c0f3af97 13213 default:
04d824a4 13214 abort ();
c0f3af97 13215 }
76f227a5
JH
13216 }
13217 break;
252b5132 13218 case 'W':
0bfee649 13219 if (l == 0 && len == 1)
a35ca55a 13220 {
0bfee649
L
13221 /* operand size flag for cwtl, cbtw */
13222 USED_REX (REX_W);
13223 if (rex & REX_W)
13224 {
13225 if (intel_syntax)
13226 *obufp++ = 'd';
13227 else
13228 *obufp++ = 'l';
13229 }
13230 else if (sizeflag & DFLAG)
13231 *obufp++ = 'w';
a35ca55a 13232 else
0bfee649
L
13233 *obufp++ = 'b';
13234 if (!(rex & REX_W))
13235 used_prefixes |= (prefixes & PREFIX_DATA);
a35ca55a 13236 }
252b5132 13237 else
0bfee649 13238 {
6c30d220
L
13239 if (l != 1
13240 || len != 2
13241 || (last[0] != 'X'
13242 && last[0] != 'L'))
0bfee649
L
13243 {
13244 SAVE_LAST (*p);
13245 break;
13246 }
13247 if (!need_vex)
13248 abort ();
6c30d220
L
13249 if (last[0] == 'X')
13250 *obufp++ = vex.w ? 'd': 's';
13251 else
13252 *obufp++ = vex.w ? 'q': 'd';
0bfee649 13253 }
252b5132 13254 break;
a72d2af2
L
13255 case '^':
13256 if (intel_syntax)
13257 break;
13258 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
13259 {
13260 if (sizeflag & DFLAG)
13261 *obufp++ = 'l';
13262 else
13263 *obufp++ = 'w';
13264 used_prefixes |= (prefixes & PREFIX_DATA);
13265 }
13266 break;
5db04b09
L
13267 case '@':
13268 if (intel_syntax)
13269 break;
13270 if (address_mode == mode_64bit
13271 && (isa64 == intel64
13272 || ((sizeflag & DFLAG) || (rex & REX_W))))
13273 *obufp++ = 'q';
13274 else if ((prefixes & PREFIX_DATA))
13275 {
13276 if (!(sizeflag & DFLAG))
13277 *obufp++ = 'w';
13278 used_prefixes |= (prefixes & PREFIX_DATA);
13279 }
13280 break;
252b5132 13281 }
9306ca4a 13282 alt = 0;
252b5132
RH
13283 }
13284 *obufp = 0;
ea397f5b 13285 mnemonicendp = obufp;
6439fc28 13286 return 0;
252b5132
RH
13287}
13288
13289static void
26ca5450 13290oappend (const char *s)
252b5132 13291{
ea397f5b 13292 obufp = stpcpy (obufp, s);
252b5132
RH
13293}
13294
13295static void
26ca5450 13296append_seg (void)
252b5132 13297{
285ca992
L
13298 /* Only print the active segment register. */
13299 if (!active_seg_prefix)
13300 return;
13301
13302 used_prefixes |= active_seg_prefix;
13303 switch (active_seg_prefix)
7d421014 13304 {
285ca992 13305 case PREFIX_CS:
9ce09ba2 13306 oappend_maybe_intel ("%cs:");
285ca992
L
13307 break;
13308 case PREFIX_DS:
9ce09ba2 13309 oappend_maybe_intel ("%ds:");
285ca992
L
13310 break;
13311 case PREFIX_SS:
9ce09ba2 13312 oappend_maybe_intel ("%ss:");
285ca992
L
13313 break;
13314 case PREFIX_ES:
9ce09ba2 13315 oappend_maybe_intel ("%es:");
285ca992
L
13316 break;
13317 case PREFIX_FS:
9ce09ba2 13318 oappend_maybe_intel ("%fs:");
285ca992
L
13319 break;
13320 case PREFIX_GS:
9ce09ba2 13321 oappend_maybe_intel ("%gs:");
285ca992
L
13322 break;
13323 default:
13324 break;
7d421014 13325 }
252b5132
RH
13326}
13327
13328static void
26ca5450 13329OP_indirE (int bytemode, int sizeflag)
252b5132
RH
13330{
13331 if (!intel_syntax)
13332 oappend ("*");
13333 OP_E (bytemode, sizeflag);
13334}
13335
52b15da3 13336static void
26ca5450 13337print_operand_value (char *buf, int hex, bfd_vma disp)
52b15da3 13338{
cb712a9e 13339 if (address_mode == mode_64bit)
52b15da3
JH
13340 {
13341 if (hex)
13342 {
13343 char tmp[30];
13344 int i;
13345 buf[0] = '0';
13346 buf[1] = 'x';
13347 sprintf_vma (tmp, disp);
6608db57 13348 for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++);
52b15da3
JH
13349 strcpy (buf + 2, tmp + i);
13350 }
13351 else
13352 {
13353 bfd_signed_vma v = disp;
13354 char tmp[30];
13355 int i;
13356 if (v < 0)
13357 {
13358 *(buf++) = '-';
13359 v = -disp;
6608db57 13360 /* Check for possible overflow on 0x8000000000000000. */
52b15da3
JH
13361 if (v < 0)
13362 {
13363 strcpy (buf, "9223372036854775808");
13364 return;
13365 }
13366 }
13367 if (!v)
13368 {
13369 strcpy (buf, "0");
13370 return;
13371 }
13372
13373 i = 0;
13374 tmp[29] = 0;
13375 while (v)
13376 {
6608db57 13377 tmp[28 - i] = (v % 10) + '0';
52b15da3
JH
13378 v /= 10;
13379 i++;
13380 }
13381 strcpy (buf, tmp + 29 - i);
13382 }
13383 }
13384 else
13385 {
13386 if (hex)
13387 sprintf (buf, "0x%x", (unsigned int) disp);
13388 else
13389 sprintf (buf, "%d", (int) disp);
13390 }
13391}
13392
5d669648
L
13393/* Put DISP in BUF as signed hex number. */
13394
13395static void
13396print_displacement (char *buf, bfd_vma disp)
13397{
13398 bfd_signed_vma val = disp;
13399 char tmp[30];
13400 int i, j = 0;
13401
13402 if (val < 0)
13403 {
13404 buf[j++] = '-';
13405 val = -disp;
13406
13407 /* Check for possible overflow. */
13408 if (val < 0)
13409 {
13410 switch (address_mode)
13411 {
13412 case mode_64bit:
13413 strcpy (buf + j, "0x8000000000000000");
13414 break;
13415 case mode_32bit:
13416 strcpy (buf + j, "0x80000000");
13417 break;
13418 case mode_16bit:
13419 strcpy (buf + j, "0x8000");
13420 break;
13421 }
13422 return;
13423 }
13424 }
13425
13426 buf[j++] = '0';
13427 buf[j++] = 'x';
13428
0af1713e 13429 sprintf_vma (tmp, (bfd_vma) val);
5d669648
L
13430 for (i = 0; tmp[i] == '0'; i++)
13431 continue;
13432 if (tmp[i] == '\0')
13433 i--;
13434 strcpy (buf + j, tmp + i);
13435}
13436
3f31e633
JB
13437static void
13438intel_operand_size (int bytemode, int sizeflag)
13439{
43234a1e
L
13440 if (vex.evex
13441 && vex.b
13442 && (bytemode == x_mode
13443 || bytemode == evex_half_bcst_xmmq_mode))
13444 {
13445 if (vex.w)
13446 oappend ("QWORD PTR ");
13447 else
13448 oappend ("DWORD PTR ");
13449 return;
13450 }
3f31e633
JB
13451 switch (bytemode)
13452 {
13453 case b_mode:
b6169b20 13454 case b_swap_mode:
42903f7f 13455 case dqb_mode:
1ba585e8 13456 case db_mode:
3f31e633
JB
13457 oappend ("BYTE PTR ");
13458 break;
13459 case w_mode:
1ba585e8 13460 case dw_mode:
3f31e633
JB
13461 case dqw_mode:
13462 oappend ("WORD PTR ");
13463 break;
07f5af7d
L
13464 case indir_v_mode:
13465 if (address_mode == mode_64bit && isa64 == intel64)
13466 {
13467 oappend ("QWORD PTR ");
13468 break;
13469 }
1a0670f3 13470 /* Fall through. */
1a114b12 13471 case stack_v_mode:
7bb15c6f 13472 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
3f31e633
JB
13473 {
13474 oappend ("QWORD PTR ");
3f31e633
JB
13475 break;
13476 }
1a0670f3 13477 /* Fall through. */
3f31e633 13478 case v_mode:
b6169b20 13479 case v_swap_mode:
3f31e633 13480 case dq_mode:
161a04f6
L
13481 USED_REX (REX_W);
13482 if (rex & REX_W)
3f31e633 13483 oappend ("QWORD PTR ");
3f31e633 13484 else
f16cd0d5
L
13485 {
13486 if ((sizeflag & DFLAG) || bytemode == dq_mode)
13487 oappend ("DWORD PTR ");
13488 else
13489 oappend ("WORD PTR ");
13490 used_prefixes |= (prefixes & PREFIX_DATA);
13491 }
3f31e633 13492 break;
52fd6d94 13493 case z_mode:
161a04f6 13494 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
13495 *obufp++ = 'D';
13496 oappend ("WORD PTR ");
161a04f6 13497 if (!(rex & REX_W))
52fd6d94
JB
13498 used_prefixes |= (prefixes & PREFIX_DATA);
13499 break;
34b772a6
JB
13500 case a_mode:
13501 if (sizeflag & DFLAG)
13502 oappend ("QWORD PTR ");
13503 else
13504 oappend ("DWORD PTR ");
13505 used_prefixes |= (prefixes & PREFIX_DATA);
13506 break;
3f31e633 13507 case d_mode:
539f890d
L
13508 case d_scalar_mode:
13509 case d_scalar_swap_mode:
fa99fab2 13510 case d_swap_mode:
42903f7f 13511 case dqd_mode:
3f31e633
JB
13512 oappend ("DWORD PTR ");
13513 break;
13514 case q_mode:
539f890d
L
13515 case q_scalar_mode:
13516 case q_scalar_swap_mode:
b6169b20 13517 case q_swap_mode:
3f31e633
JB
13518 oappend ("QWORD PTR ");
13519 break;
13520 case m_mode:
cb712a9e 13521 if (address_mode == mode_64bit)
3f31e633
JB
13522 oappend ("QWORD PTR ");
13523 else
13524 oappend ("DWORD PTR ");
13525 break;
13526 case f_mode:
13527 if (sizeflag & DFLAG)
13528 oappend ("FWORD PTR ");
13529 else
13530 oappend ("DWORD PTR ");
13531 used_prefixes |= (prefixes & PREFIX_DATA);
13532 break;
13533 case t_mode:
13534 oappend ("TBYTE PTR ");
13535 break;
13536 case x_mode:
b6169b20 13537 case x_swap_mode:
43234a1e
L
13538 case evex_x_gscat_mode:
13539 case evex_x_nobcst_mode:
53467f57
IT
13540 case b_scalar_mode:
13541 case w_scalar_mode:
c0f3af97
L
13542 if (need_vex)
13543 {
13544 switch (vex.length)
13545 {
13546 case 128:
13547 oappend ("XMMWORD PTR ");
13548 break;
13549 case 256:
13550 oappend ("YMMWORD PTR ");
13551 break;
43234a1e
L
13552 case 512:
13553 oappend ("ZMMWORD PTR ");
13554 break;
c0f3af97
L
13555 default:
13556 abort ();
13557 }
13558 }
13559 else
13560 oappend ("XMMWORD PTR ");
13561 break;
13562 case xmm_mode:
3f31e633
JB
13563 oappend ("XMMWORD PTR ");
13564 break;
43234a1e
L
13565 case ymm_mode:
13566 oappend ("YMMWORD PTR ");
13567 break;
c0f3af97 13568 case xmmq_mode:
43234a1e 13569 case evex_half_bcst_xmmq_mode:
c0f3af97
L
13570 if (!need_vex)
13571 abort ();
13572
13573 switch (vex.length)
13574 {
13575 case 128:
13576 oappend ("QWORD PTR ");
13577 break;
13578 case 256:
13579 oappend ("XMMWORD PTR ");
13580 break;
43234a1e
L
13581 case 512:
13582 oappend ("YMMWORD PTR ");
13583 break;
c0f3af97
L
13584 default:
13585 abort ();
13586 }
13587 break;
6c30d220
L
13588 case xmm_mb_mode:
13589 if (!need_vex)
13590 abort ();
13591
13592 switch (vex.length)
13593 {
13594 case 128:
13595 case 256:
43234a1e 13596 case 512:
6c30d220
L
13597 oappend ("BYTE PTR ");
13598 break;
13599 default:
13600 abort ();
13601 }
13602 break;
13603 case xmm_mw_mode:
13604 if (!need_vex)
13605 abort ();
13606
13607 switch (vex.length)
13608 {
13609 case 128:
13610 case 256:
43234a1e 13611 case 512:
6c30d220
L
13612 oappend ("WORD PTR ");
13613 break;
13614 default:
13615 abort ();
13616 }
13617 break;
13618 case xmm_md_mode:
13619 if (!need_vex)
13620 abort ();
13621
13622 switch (vex.length)
13623 {
13624 case 128:
13625 case 256:
43234a1e 13626 case 512:
6c30d220
L
13627 oappend ("DWORD PTR ");
13628 break;
13629 default:
13630 abort ();
13631 }
13632 break;
13633 case xmm_mq_mode:
13634 if (!need_vex)
13635 abort ();
13636
13637 switch (vex.length)
13638 {
13639 case 128:
13640 case 256:
43234a1e 13641 case 512:
6c30d220
L
13642 oappend ("QWORD PTR ");
13643 break;
13644 default:
13645 abort ();
13646 }
13647 break;
13648 case xmmdw_mode:
13649 if (!need_vex)
13650 abort ();
13651
13652 switch (vex.length)
13653 {
13654 case 128:
13655 oappend ("WORD PTR ");
13656 break;
13657 case 256:
13658 oappend ("DWORD PTR ");
13659 break;
43234a1e
L
13660 case 512:
13661 oappend ("QWORD PTR ");
13662 break;
6c30d220
L
13663 default:
13664 abort ();
13665 }
13666 break;
13667 case xmmqd_mode:
13668 if (!need_vex)
13669 abort ();
13670
13671 switch (vex.length)
13672 {
13673 case 128:
13674 oappend ("DWORD PTR ");
13675 break;
13676 case 256:
13677 oappend ("QWORD PTR ");
13678 break;
43234a1e
L
13679 case 512:
13680 oappend ("XMMWORD PTR ");
13681 break;
6c30d220
L
13682 default:
13683 abort ();
13684 }
13685 break;
c0f3af97
L
13686 case ymmq_mode:
13687 if (!need_vex)
13688 abort ();
13689
13690 switch (vex.length)
13691 {
13692 case 128:
13693 oappend ("QWORD PTR ");
13694 break;
13695 case 256:
13696 oappend ("YMMWORD PTR ");
13697 break;
43234a1e
L
13698 case 512:
13699 oappend ("ZMMWORD PTR ");
13700 break;
c0f3af97
L
13701 default:
13702 abort ();
13703 }
13704 break;
6c30d220
L
13705 case ymmxmm_mode:
13706 if (!need_vex)
13707 abort ();
13708
13709 switch (vex.length)
13710 {
13711 case 128:
13712 case 256:
13713 oappend ("XMMWORD PTR ");
13714 break;
13715 default:
13716 abort ();
13717 }
13718 break;
fb9c77c7
L
13719 case o_mode:
13720 oappend ("OWORD PTR ");
13721 break;
43234a1e 13722 case xmm_mdq_mode:
0bfee649 13723 case vex_w_dq_mode:
1c480963 13724 case vex_scalar_w_dq_mode:
0bfee649
L
13725 if (!need_vex)
13726 abort ();
13727
13728 if (vex.w)
13729 oappend ("QWORD PTR ");
13730 else
13731 oappend ("DWORD PTR ");
13732 break;
43234a1e
L
13733 case vex_vsib_d_w_dq_mode:
13734 case vex_vsib_q_w_dq_mode:
13735 if (!need_vex)
13736 abort ();
13737
13738 if (!vex.evex)
13739 {
13740 if (vex.w)
13741 oappend ("QWORD PTR ");
13742 else
13743 oappend ("DWORD PTR ");
13744 }
13745 else
13746 {
b28d1bda
IT
13747 switch (vex.length)
13748 {
13749 case 128:
13750 oappend ("XMMWORD PTR ");
13751 break;
13752 case 256:
13753 oappend ("YMMWORD PTR ");
13754 break;
13755 case 512:
13756 oappend ("ZMMWORD PTR ");
13757 break;
13758 default:
13759 abort ();
13760 }
43234a1e
L
13761 }
13762 break;
5fc35d96
IT
13763 case vex_vsib_q_w_d_mode:
13764 case vex_vsib_d_w_d_mode:
b28d1bda 13765 if (!need_vex || !vex.evex)
5fc35d96
IT
13766 abort ();
13767
b28d1bda
IT
13768 switch (vex.length)
13769 {
13770 case 128:
13771 oappend ("QWORD PTR ");
13772 break;
13773 case 256:
13774 oappend ("XMMWORD PTR ");
13775 break;
13776 case 512:
13777 oappend ("YMMWORD PTR ");
13778 break;
13779 default:
13780 abort ();
13781 }
5fc35d96
IT
13782
13783 break;
1ba585e8
IT
13784 case mask_bd_mode:
13785 if (!need_vex || vex.length != 128)
13786 abort ();
13787 if (vex.w)
13788 oappend ("DWORD PTR ");
13789 else
13790 oappend ("BYTE PTR ");
13791 break;
43234a1e
L
13792 case mask_mode:
13793 if (!need_vex)
13794 abort ();
1ba585e8
IT
13795 if (vex.w)
13796 oappend ("QWORD PTR ");
13797 else
13798 oappend ("WORD PTR ");
43234a1e 13799 break;
6c75cc62 13800 case v_bnd_mode:
d276ec69 13801 case v_bndmk_mode:
3f31e633
JB
13802 default:
13803 break;
13804 }
13805}
13806
252b5132 13807static void
c0f3af97 13808OP_E_register (int bytemode, int sizeflag)
252b5132 13809{
c0f3af97
L
13810 int reg = modrm.rm;
13811 const char **names;
252b5132 13812
c0f3af97
L
13813 USED_REX (REX_B);
13814 if ((rex & REX_B))
13815 reg += 8;
252b5132 13816
b6169b20 13817 if ((sizeflag & SUFFIX_ALWAYS)
1ba585e8 13818 && (bytemode == b_swap_mode
9f79e886 13819 || bytemode == bnd_swap_mode
60227d64 13820 || bytemode == v_swap_mode))
b6169b20
L
13821 swap_operand ();
13822
c0f3af97 13823 switch (bytemode)
252b5132 13824 {
c0f3af97 13825 case b_mode:
b6169b20 13826 case b_swap_mode:
c0f3af97
L
13827 USED_REX (0);
13828 if (rex)
13829 names = names8rex;
13830 else
13831 names = names8;
13832 break;
13833 case w_mode:
13834 names = names16;
13835 break;
13836 case d_mode:
1ba585e8
IT
13837 case dw_mode:
13838 case db_mode:
c0f3af97
L
13839 names = names32;
13840 break;
13841 case q_mode:
13842 names = names64;
13843 break;
13844 case m_mode:
6c75cc62 13845 case v_bnd_mode:
c0f3af97
L
13846 names = address_mode == mode_64bit ? names64 : names32;
13847 break;
7e8b059b 13848 case bnd_mode:
9f79e886 13849 case bnd_swap_mode:
0d96e4df
L
13850 if (reg > 0x3)
13851 {
13852 oappend ("(bad)");
13853 return;
13854 }
7e8b059b
L
13855 names = names_bnd;
13856 break;
07f5af7d
L
13857 case indir_v_mode:
13858 if (address_mode == mode_64bit && isa64 == intel64)
13859 {
13860 names = names64;
13861 break;
13862 }
1a0670f3 13863 /* Fall through. */
c0f3af97 13864 case stack_v_mode:
7bb15c6f 13865 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
252b5132 13866 {
c0f3af97 13867 names = names64;
252b5132 13868 break;
252b5132 13869 }
c0f3af97 13870 bytemode = v_mode;
1a0670f3 13871 /* Fall through. */
c0f3af97 13872 case v_mode:
b6169b20 13873 case v_swap_mode:
c0f3af97
L
13874 case dq_mode:
13875 case dqb_mode:
13876 case dqd_mode:
13877 case dqw_mode:
13878 USED_REX (REX_W);
13879 if (rex & REX_W)
13880 names = names64;
c0f3af97 13881 else
f16cd0d5 13882 {
7bb15c6f 13883 if ((sizeflag & DFLAG)
f16cd0d5
L
13884 || (bytemode != v_mode
13885 && bytemode != v_swap_mode))
13886 names = names32;
13887 else
13888 names = names16;
13889 used_prefixes |= (prefixes & PREFIX_DATA);
13890 }
c0f3af97 13891 break;
de89d0a3
IT
13892 case va_mode:
13893 names = (address_mode == mode_64bit
13894 ? names64 : names32);
13895 if (!(prefixes & PREFIX_ADDR))
aa178437
IT
13896 names = (address_mode == mode_16bit
13897 ? names16 : names);
de89d0a3
IT
13898 else
13899 {
13900 /* Remove "addr16/addr32". */
13901 all_prefixes[last_addr_prefix] = 0;
13902 names = (address_mode != mode_32bit
13903 ? names32 : names16);
13904 used_prefixes |= PREFIX_ADDR;
13905 }
13906 break;
1ba585e8 13907 case mask_bd_mode:
43234a1e 13908 case mask_mode:
9889cbb1
L
13909 if (reg > 0x7)
13910 {
13911 oappend ("(bad)");
13912 return;
13913 }
43234a1e
L
13914 names = names_mask;
13915 break;
c0f3af97
L
13916 case 0:
13917 return;
13918 default:
13919 oappend (INTERNAL_DISASSEMBLER_ERROR);
252b5132
RH
13920 return;
13921 }
c0f3af97
L
13922 oappend (names[reg]);
13923}
13924
13925static void
c1e679ec 13926OP_E_memory (int bytemode, int sizeflag)
c0f3af97
L
13927{
13928 bfd_vma disp = 0;
13929 int add = (rex & REX_B) ? 8 : 0;
13930 int riprel = 0;
43234a1e
L
13931 int shift;
13932
13933 if (vex.evex)
13934 {
13935 /* In EVEX, if operand doesn't allow broadcast, vex.b should be 0. */
13936 if (vex.b
13937 && bytemode != x_mode
90a915bf 13938 && bytemode != xmmq_mode
43234a1e
L
13939 && bytemode != evex_half_bcst_xmmq_mode)
13940 {
13941 BadOp ();
13942 return;
13943 }
13944 switch (bytemode)
13945 {
1ba585e8
IT
13946 case dqw_mode:
13947 case dw_mode:
1ba585e8
IT
13948 shift = 1;
13949 break;
13950 case dqb_mode:
13951 case db_mode:
13952 shift = 0;
13953 break;
b50c9f31
JB
13954 case dq_mode:
13955 if (address_mode != mode_64bit)
13956 {
13957 shift = 2;
13958 break;
13959 }
13960 /* fall through */
43234a1e 13961 case vex_vsib_d_w_dq_mode:
5fc35d96 13962 case vex_vsib_d_w_d_mode:
eaa9d1ad 13963 case vex_vsib_q_w_dq_mode:
5fc35d96 13964 case vex_vsib_q_w_d_mode:
43234a1e
L
13965 case evex_x_gscat_mode:
13966 case xmm_mdq_mode:
13967 shift = vex.w ? 3 : 2;
13968 break;
43234a1e
L
13969 case x_mode:
13970 case evex_half_bcst_xmmq_mode:
90a915bf 13971 case xmmq_mode:
43234a1e
L
13972 if (vex.b)
13973 {
13974 shift = vex.w ? 3 : 2;
13975 break;
13976 }
1a0670f3 13977 /* Fall through. */
43234a1e
L
13978 case xmmqd_mode:
13979 case xmmdw_mode:
43234a1e
L
13980 case ymmq_mode:
13981 case evex_x_nobcst_mode:
13982 case x_swap_mode:
13983 switch (vex.length)
13984 {
13985 case 128:
13986 shift = 4;
13987 break;
13988 case 256:
13989 shift = 5;
13990 break;
13991 case 512:
13992 shift = 6;
13993 break;
13994 default:
13995 abort ();
13996 }
13997 break;
13998 case ymm_mode:
13999 shift = 5;
14000 break;
14001 case xmm_mode:
14002 shift = 4;
14003 break;
14004 case xmm_mq_mode:
14005 case q_mode:
14006 case q_scalar_mode:
14007 case q_swap_mode:
14008 case q_scalar_swap_mode:
14009 shift = 3;
14010 break;
14011 case dqd_mode:
14012 case xmm_md_mode:
14013 case d_mode:
14014 case d_scalar_mode:
14015 case d_swap_mode:
14016 case d_scalar_swap_mode:
14017 shift = 2;
14018 break;
5074ad8a 14019 case w_scalar_mode:
43234a1e
L
14020 case xmm_mw_mode:
14021 shift = 1;
14022 break;
5074ad8a 14023 case b_scalar_mode:
43234a1e
L
14024 case xmm_mb_mode:
14025 shift = 0;
14026 break;
14027 default:
14028 abort ();
14029 }
14030 /* Make necessary corrections to shift for modes that need it.
14031 For these modes we currently have shift 4, 5 or 6 depending on
14032 vex.length (it corresponds to xmmword, ymmword or zmmword
14033 operand). We might want to make it 3, 4 or 5 (e.g. for
14034 xmmq_mode). In case of broadcast enabled the corrections
14035 aren't needed, as element size is always 32 or 64 bits. */
90a915bf
IT
14036 if (!vex.b
14037 && (bytemode == xmmq_mode
14038 || bytemode == evex_half_bcst_xmmq_mode))
43234a1e
L
14039 shift -= 1;
14040 else if (bytemode == xmmqd_mode)
14041 shift -= 2;
14042 else if (bytemode == xmmdw_mode)
14043 shift -= 3;
b28d1bda
IT
14044 else if (bytemode == ymmq_mode && vex.length == 128)
14045 shift -= 1;
43234a1e
L
14046 }
14047 else
14048 shift = 0;
252b5132 14049
c0f3af97 14050 USED_REX (REX_B);
3f31e633
JB
14051 if (intel_syntax)
14052 intel_operand_size (bytemode, sizeflag);
252b5132
RH
14053 append_seg ();
14054
5d669648 14055 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132 14056 {
5d669648
L
14057 /* 32/64 bit address mode */
14058 int havedisp;
252b5132
RH
14059 int havesib;
14060 int havebase;
0f7da397 14061 int haveindex;
20afcfb7 14062 int needindex;
1bc60e56 14063 int needaddr32;
82c18208 14064 int base, rbase;
91d6fa6a 14065 int vindex = 0;
252b5132 14066 int scale = 0;
7e8b059b
L
14067 int addr32flag = !((sizeflag & AFLAG)
14068 || bytemode == v_bnd_mode
d276ec69 14069 || bytemode == v_bndmk_mode
9f79e886
JB
14070 || bytemode == bnd_mode
14071 || bytemode == bnd_swap_mode);
6c30d220
L
14072 const char **indexes64 = names64;
14073 const char **indexes32 = names32;
252b5132
RH
14074
14075 havesib = 0;
14076 havebase = 1;
0f7da397 14077 haveindex = 0;
7967e09e 14078 base = modrm.rm;
252b5132
RH
14079
14080 if (base == 4)
14081 {
14082 havesib = 1;
dfc8cf43 14083 vindex = sib.index;
161a04f6
L
14084 USED_REX (REX_X);
14085 if (rex & REX_X)
91d6fa6a 14086 vindex += 8;
6c30d220
L
14087 switch (bytemode)
14088 {
14089 case vex_vsib_d_w_dq_mode:
5fc35d96 14090 case vex_vsib_d_w_d_mode:
6c30d220 14091 case vex_vsib_q_w_dq_mode:
5fc35d96 14092 case vex_vsib_q_w_d_mode:
6c30d220
L
14093 if (!need_vex)
14094 abort ();
43234a1e
L
14095 if (vex.evex)
14096 {
14097 if (!vex.v)
14098 vindex += 16;
14099 }
6c30d220
L
14100
14101 haveindex = 1;
14102 switch (vex.length)
14103 {
14104 case 128:
7bb15c6f 14105 indexes64 = indexes32 = names_xmm;
6c30d220
L
14106 break;
14107 case 256:
5fc35d96
IT
14108 if (!vex.w
14109 || bytemode == vex_vsib_q_w_dq_mode
14110 || bytemode == vex_vsib_q_w_d_mode)
7bb15c6f 14111 indexes64 = indexes32 = names_ymm;
6c30d220 14112 else
7bb15c6f 14113 indexes64 = indexes32 = names_xmm;
6c30d220 14114 break;
43234a1e 14115 case 512:
5fc35d96
IT
14116 if (!vex.w
14117 || bytemode == vex_vsib_q_w_dq_mode
14118 || bytemode == vex_vsib_q_w_d_mode)
43234a1e
L
14119 indexes64 = indexes32 = names_zmm;
14120 else
14121 indexes64 = indexes32 = names_ymm;
14122 break;
6c30d220
L
14123 default:
14124 abort ();
14125 }
14126 break;
14127 default:
14128 haveindex = vindex != 4;
14129 break;
14130 }
14131 scale = sib.scale;
14132 base = sib.base;
252b5132
RH
14133 codep++;
14134 }
82c18208 14135 rbase = base + add;
252b5132 14136
7967e09e 14137 switch (modrm.mod)
252b5132
RH
14138 {
14139 case 0:
82c18208 14140 if (base == 5)
252b5132
RH
14141 {
14142 havebase = 0;
cb712a9e 14143 if (address_mode == mode_64bit && !havesib)
52b15da3
JH
14144 riprel = 1;
14145 disp = get32s ();
d276ec69
JB
14146 if (riprel && bytemode == v_bndmk_mode)
14147 {
14148 oappend ("(bad)");
14149 return;
14150 }
252b5132
RH
14151 }
14152 break;
14153 case 1:
14154 FETCH_DATA (the_info, codep + 1);
14155 disp = *codep++;
14156 if ((disp & 0x80) != 0)
14157 disp -= 0x100;
43234a1e
L
14158 if (vex.evex && shift > 0)
14159 disp <<= shift;
252b5132
RH
14160 break;
14161 case 2:
52b15da3 14162 disp = get32s ();
252b5132
RH
14163 break;
14164 }
14165
1bc60e56
L
14166 needindex = 0;
14167 needaddr32 = 0;
14168 if (havesib
14169 && !havebase
14170 && !haveindex
14171 && address_mode != mode_16bit)
14172 {
14173 if (address_mode == mode_64bit)
14174 {
14175 /* Display eiz instead of addr32. */
14176 needindex = addr32flag;
14177 needaddr32 = 1;
14178 }
14179 else
14180 {
14181 /* In 32-bit mode, we need index register to tell [offset]
14182 from [eiz*1 + offset]. */
14183 needindex = 1;
14184 }
14185 }
14186
20afcfb7
L
14187 havedisp = (havebase
14188 || needindex
14189 || (havesib && (haveindex || scale != 0)));
5d669648 14190
252b5132 14191 if (!intel_syntax)
82c18208 14192 if (modrm.mod != 0 || base == 5)
db6eb5be 14193 {
5d669648
L
14194 if (havedisp || riprel)
14195 print_displacement (scratchbuf, disp);
14196 else
14197 print_operand_value (scratchbuf, 1, disp);
db6eb5be 14198 oappend (scratchbuf);
52b15da3
JH
14199 if (riprel)
14200 {
14201 set_op (disp, 1);
28596323 14202 oappend (!addr32flag ? "(%rip)" : "(%eip)");
52b15da3 14203 }
db6eb5be 14204 }
2da11e11 14205
1bc60e56 14206 if ((havebase || haveindex || needaddr32 || riprel)
7e8b059b 14207 && (bytemode != v_bnd_mode)
d276ec69 14208 && (bytemode != v_bndmk_mode)
9f79e886
JB
14209 && (bytemode != bnd_mode)
14210 && (bytemode != bnd_swap_mode))
87767711
JB
14211 used_prefixes |= PREFIX_ADDR;
14212
5d669648 14213 if (havedisp || (intel_syntax && riprel))
252b5132 14214 {
252b5132 14215 *obufp++ = open_char;
52b15da3 14216 if (intel_syntax && riprel)
185b1163
L
14217 {
14218 set_op (disp, 1);
28596323 14219 oappend (!addr32flag ? "rip" : "eip");
185b1163 14220 }
db6eb5be 14221 *obufp = '\0';
252b5132 14222 if (havebase)
7e8b059b 14223 oappend (address_mode == mode_64bit && !addr32flag
82c18208 14224 ? names64[rbase] : names32[rbase]);
252b5132
RH
14225 if (havesib)
14226 {
db51cc60
L
14227 /* ESP/RSP won't allow index. If base isn't ESP/RSP,
14228 print index to tell base + index from base. */
14229 if (scale != 0
20afcfb7 14230 || needindex
db51cc60
L
14231 || haveindex
14232 || (havebase && base != ESP_REG_NUM))
252b5132 14233 {
9306ca4a 14234 if (!intel_syntax || havebase)
db6eb5be 14235 {
9306ca4a
JB
14236 *obufp++ = separator_char;
14237 *obufp = '\0';
db6eb5be 14238 }
db51cc60 14239 if (haveindex)
7e8b059b 14240 oappend (address_mode == mode_64bit && !addr32flag
6c30d220 14241 ? indexes64[vindex] : indexes32[vindex]);
db51cc60 14242 else
7e8b059b 14243 oappend (address_mode == mode_64bit && !addr32flag
db51cc60
L
14244 ? index64 : index32);
14245
db6eb5be
AM
14246 *obufp++ = scale_char;
14247 *obufp = '\0';
14248 sprintf (scratchbuf, "%d", 1 << scale);
14249 oappend (scratchbuf);
14250 }
252b5132 14251 }
185b1163 14252 if (intel_syntax
82c18208 14253 && (disp || modrm.mod != 0 || base == 5))
3d456fa1 14254 {
db51cc60 14255 if (!havedisp || (bfd_signed_vma) disp >= 0)
3d456fa1
JB
14256 {
14257 *obufp++ = '+';
14258 *obufp = '\0';
14259 }
05203043 14260 else if (modrm.mod != 1 && disp != -disp)
3d456fa1
JB
14261 {
14262 *obufp++ = '-';
14263 *obufp = '\0';
14264 disp = - (bfd_signed_vma) disp;
14265 }
14266
db51cc60
L
14267 if (havedisp)
14268 print_displacement (scratchbuf, disp);
14269 else
14270 print_operand_value (scratchbuf, 1, disp);
3d456fa1
JB
14271 oappend (scratchbuf);
14272 }
252b5132
RH
14273
14274 *obufp++ = close_char;
db6eb5be 14275 *obufp = '\0';
252b5132
RH
14276 }
14277 else if (intel_syntax)
db6eb5be 14278 {
82c18208 14279 if (modrm.mod != 0 || base == 5)
db6eb5be 14280 {
285ca992 14281 if (!active_seg_prefix)
252b5132 14282 {
d708bcba 14283 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
14284 oappend (":");
14285 }
52b15da3 14286 print_operand_value (scratchbuf, 1, disp);
db6eb5be
AM
14287 oappend (scratchbuf);
14288 }
14289 }
252b5132
RH
14290 }
14291 else
f16cd0d5
L
14292 {
14293 /* 16 bit address mode */
14294 used_prefixes |= prefixes & PREFIX_ADDR;
7967e09e 14295 switch (modrm.mod)
252b5132
RH
14296 {
14297 case 0:
7967e09e 14298 if (modrm.rm == 6)
252b5132
RH
14299 {
14300 disp = get16 ();
14301 if ((disp & 0x8000) != 0)
14302 disp -= 0x10000;
14303 }
14304 break;
14305 case 1:
14306 FETCH_DATA (the_info, codep + 1);
14307 disp = *codep++;
14308 if ((disp & 0x80) != 0)
14309 disp -= 0x100;
65f3ed04
JB
14310 if (vex.evex && shift > 0)
14311 disp <<= shift;
252b5132
RH
14312 break;
14313 case 2:
14314 disp = get16 ();
14315 if ((disp & 0x8000) != 0)
14316 disp -= 0x10000;
14317 break;
14318 }
14319
14320 if (!intel_syntax)
7967e09e 14321 if (modrm.mod != 0 || modrm.rm == 6)
db6eb5be 14322 {
5d669648 14323 print_displacement (scratchbuf, disp);
db6eb5be
AM
14324 oappend (scratchbuf);
14325 }
252b5132 14326
7967e09e 14327 if (modrm.mod != 0 || modrm.rm != 6)
252b5132
RH
14328 {
14329 *obufp++ = open_char;
db6eb5be 14330 *obufp = '\0';
7967e09e 14331 oappend (index16[modrm.rm]);
5d669648
L
14332 if (intel_syntax
14333 && (disp || modrm.mod != 0 || modrm.rm == 6))
3d456fa1 14334 {
5d669648 14335 if ((bfd_signed_vma) disp >= 0)
3d456fa1
JB
14336 {
14337 *obufp++ = '+';
14338 *obufp = '\0';
14339 }
7967e09e 14340 else if (modrm.mod != 1)
3d456fa1
JB
14341 {
14342 *obufp++ = '-';
14343 *obufp = '\0';
14344 disp = - (bfd_signed_vma) disp;
14345 }
14346
5d669648 14347 print_displacement (scratchbuf, disp);
3d456fa1
JB
14348 oappend (scratchbuf);
14349 }
14350
db6eb5be
AM
14351 *obufp++ = close_char;
14352 *obufp = '\0';
252b5132 14353 }
3d456fa1
JB
14354 else if (intel_syntax)
14355 {
285ca992 14356 if (!active_seg_prefix)
3d456fa1
JB
14357 {
14358 oappend (names_seg[ds_reg - es_reg]);
14359 oappend (":");
14360 }
14361 print_operand_value (scratchbuf, 1, disp & 0xffff);
14362 oappend (scratchbuf);
14363 }
252b5132 14364 }
43234a1e
L
14365 if (vex.evex && vex.b
14366 && (bytemode == x_mode
90a915bf 14367 || bytemode == xmmq_mode
43234a1e
L
14368 || bytemode == evex_half_bcst_xmmq_mode))
14369 {
90a915bf
IT
14370 if (vex.w
14371 || bytemode == xmmq_mode
14372 || bytemode == evex_half_bcst_xmmq_mode)
b28d1bda
IT
14373 {
14374 switch (vex.length)
14375 {
14376 case 128:
14377 oappend ("{1to2}");
14378 break;
14379 case 256:
14380 oappend ("{1to4}");
14381 break;
14382 case 512:
14383 oappend ("{1to8}");
14384 break;
14385 default:
14386 abort ();
14387 }
14388 }
43234a1e 14389 else
b28d1bda
IT
14390 {
14391 switch (vex.length)
14392 {
14393 case 128:
14394 oappend ("{1to4}");
14395 break;
14396 case 256:
14397 oappend ("{1to8}");
14398 break;
14399 case 512:
14400 oappend ("{1to16}");
14401 break;
14402 default:
14403 abort ();
14404 }
14405 }
43234a1e 14406 }
252b5132
RH
14407}
14408
c0f3af97 14409static void
8b3f93e7 14410OP_E (int bytemode, int sizeflag)
c0f3af97
L
14411{
14412 /* Skip mod/rm byte. */
14413 MODRM_CHECK;
14414 codep++;
14415
14416 if (modrm.mod == 3)
14417 OP_E_register (bytemode, sizeflag);
14418 else
c1e679ec 14419 OP_E_memory (bytemode, sizeflag);
c0f3af97
L
14420}
14421
252b5132 14422static void
26ca5450 14423OP_G (int bytemode, int sizeflag)
252b5132 14424{
52b15da3 14425 int add = 0;
c0a30a9f 14426 const char **names;
161a04f6
L
14427 USED_REX (REX_R);
14428 if (rex & REX_R)
52b15da3 14429 add += 8;
252b5132
RH
14430 switch (bytemode)
14431 {
14432 case b_mode:
52b15da3
JH
14433 USED_REX (0);
14434 if (rex)
7967e09e 14435 oappend (names8rex[modrm.reg + add]);
52b15da3 14436 else
7967e09e 14437 oappend (names8[modrm.reg + add]);
252b5132
RH
14438 break;
14439 case w_mode:
7967e09e 14440 oappend (names16[modrm.reg + add]);
252b5132
RH
14441 break;
14442 case d_mode:
1ba585e8
IT
14443 case db_mode:
14444 case dw_mode:
7967e09e 14445 oappend (names32[modrm.reg + add]);
52b15da3
JH
14446 break;
14447 case q_mode:
7967e09e 14448 oappend (names64[modrm.reg + add]);
252b5132 14449 break;
7e8b059b 14450 case bnd_mode:
0d96e4df
L
14451 if (modrm.reg > 0x3)
14452 {
14453 oappend ("(bad)");
14454 return;
14455 }
7e8b059b
L
14456 oappend (names_bnd[modrm.reg]);
14457 break;
252b5132 14458 case v_mode:
9306ca4a 14459 case dq_mode:
42903f7f
L
14460 case dqb_mode:
14461 case dqd_mode:
9306ca4a 14462 case dqw_mode:
161a04f6
L
14463 USED_REX (REX_W);
14464 if (rex & REX_W)
7967e09e 14465 oappend (names64[modrm.reg + add]);
252b5132 14466 else
f16cd0d5
L
14467 {
14468 if ((sizeflag & DFLAG) || bytemode != v_mode)
14469 oappend (names32[modrm.reg + add]);
14470 else
14471 oappend (names16[modrm.reg + add]);
14472 used_prefixes |= (prefixes & PREFIX_DATA);
14473 }
252b5132 14474 break;
c0a30a9f
L
14475 case va_mode:
14476 names = (address_mode == mode_64bit
14477 ? names64 : names32);
14478 if (!(prefixes & PREFIX_ADDR))
14479 {
14480 if (address_mode == mode_16bit)
14481 names = names16;
14482 }
14483 else
14484 {
14485 /* Remove "addr16/addr32". */
14486 all_prefixes[last_addr_prefix] = 0;
14487 names = (address_mode != mode_32bit
14488 ? names32 : names16);
14489 used_prefixes |= PREFIX_ADDR;
14490 }
14491 oappend (names[modrm.reg + add]);
14492 break;
90700ea2 14493 case m_mode:
cb712a9e 14494 if (address_mode == mode_64bit)
7967e09e 14495 oappend (names64[modrm.reg + add]);
90700ea2 14496 else
7967e09e 14497 oappend (names32[modrm.reg + add]);
90700ea2 14498 break;
1ba585e8 14499 case mask_bd_mode:
43234a1e 14500 case mask_mode:
9889cbb1
L
14501 if ((modrm.reg + add) > 0x7)
14502 {
14503 oappend ("(bad)");
14504 return;
14505 }
43234a1e
L
14506 oappend (names_mask[modrm.reg + add]);
14507 break;
252b5132
RH
14508 default:
14509 oappend (INTERNAL_DISASSEMBLER_ERROR);
14510 break;
14511 }
14512}
14513
52b15da3 14514static bfd_vma
26ca5450 14515get64 (void)
52b15da3 14516{
5dd0794d 14517 bfd_vma x;
52b15da3 14518#ifdef BFD64
5dd0794d
AM
14519 unsigned int a;
14520 unsigned int b;
14521
52b15da3
JH
14522 FETCH_DATA (the_info, codep + 8);
14523 a = *codep++ & 0xff;
14524 a |= (*codep++ & 0xff) << 8;
14525 a |= (*codep++ & 0xff) << 16;
070fe95d 14526 a |= (*codep++ & 0xffu) << 24;
5dd0794d 14527 b = *codep++ & 0xff;
52b15da3
JH
14528 b |= (*codep++ & 0xff) << 8;
14529 b |= (*codep++ & 0xff) << 16;
070fe95d 14530 b |= (*codep++ & 0xffu) << 24;
52b15da3
JH
14531 x = a + ((bfd_vma) b << 32);
14532#else
6608db57 14533 abort ();
5dd0794d 14534 x = 0;
52b15da3
JH
14535#endif
14536 return x;
14537}
14538
14539static bfd_signed_vma
26ca5450 14540get32 (void)
252b5132 14541{
52b15da3 14542 bfd_signed_vma x = 0;
252b5132
RH
14543
14544 FETCH_DATA (the_info, codep + 4);
52b15da3
JH
14545 x = *codep++ & (bfd_signed_vma) 0xff;
14546 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
14547 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
14548 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
14549 return x;
14550}
14551
14552static bfd_signed_vma
26ca5450 14553get32s (void)
52b15da3
JH
14554{
14555 bfd_signed_vma x = 0;
14556
14557 FETCH_DATA (the_info, codep + 4);
14558 x = *codep++ & (bfd_signed_vma) 0xff;
14559 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
14560 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
14561 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
14562
14563 x = (x ^ ((bfd_signed_vma) 1 << 31)) - ((bfd_signed_vma) 1 << 31);
14564
252b5132
RH
14565 return x;
14566}
14567
14568static int
26ca5450 14569get16 (void)
252b5132
RH
14570{
14571 int x = 0;
14572
14573 FETCH_DATA (the_info, codep + 2);
14574 x = *codep++ & 0xff;
14575 x |= (*codep++ & 0xff) << 8;
14576 return x;
14577}
14578
14579static void
26ca5450 14580set_op (bfd_vma op, int riprel)
252b5132
RH
14581{
14582 op_index[op_ad] = op_ad;
cb712a9e 14583 if (address_mode == mode_64bit)
7081ff04
AJ
14584 {
14585 op_address[op_ad] = op;
14586 op_riprel[op_ad] = riprel;
14587 }
14588 else
14589 {
14590 /* Mask to get a 32-bit address. */
14591 op_address[op_ad] = op & 0xffffffff;
14592 op_riprel[op_ad] = riprel & 0xffffffff;
14593 }
252b5132
RH
14594}
14595
14596static void
26ca5450 14597OP_REG (int code, int sizeflag)
252b5132 14598{
2da11e11 14599 const char *s;
9b60702d 14600 int add;
de882298
RM
14601
14602 switch (code)
14603 {
14604 case es_reg: case ss_reg: case cs_reg:
14605 case ds_reg: case fs_reg: case gs_reg:
14606 oappend (names_seg[code - es_reg]);
14607 return;
14608 }
14609
161a04f6
L
14610 USED_REX (REX_B);
14611 if (rex & REX_B)
52b15da3 14612 add = 8;
9b60702d
L
14613 else
14614 add = 0;
52b15da3
JH
14615
14616 switch (code)
14617 {
52b15da3
JH
14618 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
14619 case sp_reg: case bp_reg: case si_reg: case di_reg:
14620 s = names16[code - ax_reg + add];
14621 break;
52b15da3
JH
14622 case al_reg: case ah_reg: case cl_reg: case ch_reg:
14623 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
14624 USED_REX (0);
14625 if (rex)
14626 s = names8rex[code - al_reg + add];
14627 else
14628 s = names8[code - al_reg];
14629 break;
6439fc28
AM
14630 case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg:
14631 case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg:
7bb15c6f 14632 if (address_mode == mode_64bit
6c067bbb 14633 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
14634 {
14635 s = names64[code - rAX_reg + add];
14636 break;
14637 }
14638 code += eAX_reg - rAX_reg;
6608db57 14639 /* Fall through. */
52b15da3
JH
14640 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
14641 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
14642 USED_REX (REX_W);
14643 if (rex & REX_W)
52b15da3 14644 s = names64[code - eAX_reg + add];
52b15da3 14645 else
f16cd0d5
L
14646 {
14647 if (sizeflag & DFLAG)
14648 s = names32[code - eAX_reg + add];
14649 else
14650 s = names16[code - eAX_reg + add];
14651 used_prefixes |= (prefixes & PREFIX_DATA);
14652 }
52b15da3 14653 break;
52b15da3
JH
14654 default:
14655 s = INTERNAL_DISASSEMBLER_ERROR;
14656 break;
14657 }
14658 oappend (s);
14659}
14660
14661static void
26ca5450 14662OP_IMREG (int code, int sizeflag)
52b15da3
JH
14663{
14664 const char *s;
252b5132
RH
14665
14666 switch (code)
14667 {
14668 case indir_dx_reg:
d708bcba 14669 if (intel_syntax)
52fd6d94 14670 s = "dx";
d708bcba 14671 else
db6eb5be 14672 s = "(%dx)";
252b5132
RH
14673 break;
14674 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
14675 case sp_reg: case bp_reg: case si_reg: case di_reg:
14676 s = names16[code - ax_reg];
14677 break;
14678 case es_reg: case ss_reg: case cs_reg:
14679 case ds_reg: case fs_reg: case gs_reg:
14680 s = names_seg[code - es_reg];
14681 break;
14682 case al_reg: case ah_reg: case cl_reg: case ch_reg:
14683 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
52b15da3
JH
14684 USED_REX (0);
14685 if (rex)
14686 s = names8rex[code - al_reg];
14687 else
14688 s = names8[code - al_reg];
252b5132
RH
14689 break;
14690 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
14691 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
14692 USED_REX (REX_W);
14693 if (rex & REX_W)
52b15da3 14694 s = names64[code - eAX_reg];
252b5132 14695 else
f16cd0d5
L
14696 {
14697 if (sizeflag & DFLAG)
14698 s = names32[code - eAX_reg];
14699 else
14700 s = names16[code - eAX_reg];
14701 used_prefixes |= (prefixes & PREFIX_DATA);
14702 }
252b5132 14703 break;
52fd6d94 14704 case z_mode_ax_reg:
161a04f6 14705 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
14706 s = *names32;
14707 else
14708 s = *names16;
161a04f6 14709 if (!(rex & REX_W))
52fd6d94
JB
14710 used_prefixes |= (prefixes & PREFIX_DATA);
14711 break;
252b5132
RH
14712 default:
14713 s = INTERNAL_DISASSEMBLER_ERROR;
14714 break;
14715 }
14716 oappend (s);
14717}
14718
14719static void
26ca5450 14720OP_I (int bytemode, int sizeflag)
252b5132 14721{
52b15da3
JH
14722 bfd_signed_vma op;
14723 bfd_signed_vma mask = -1;
252b5132
RH
14724
14725 switch (bytemode)
14726 {
14727 case b_mode:
14728 FETCH_DATA (the_info, codep + 1);
52b15da3
JH
14729 op = *codep++;
14730 mask = 0xff;
14731 break;
14732 case q_mode:
cb712a9e 14733 if (address_mode == mode_64bit)
6439fc28
AM
14734 {
14735 op = get32s ();
14736 break;
14737 }
6608db57 14738 /* Fall through. */
252b5132 14739 case v_mode:
161a04f6
L
14740 USED_REX (REX_W);
14741 if (rex & REX_W)
52b15da3 14742 op = get32s ();
252b5132 14743 else
52b15da3 14744 {
f16cd0d5
L
14745 if (sizeflag & DFLAG)
14746 {
14747 op = get32 ();
14748 mask = 0xffffffff;
14749 }
14750 else
14751 {
14752 op = get16 ();
14753 mask = 0xfffff;
14754 }
14755 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 14756 }
252b5132
RH
14757 break;
14758 case w_mode:
52b15da3 14759 mask = 0xfffff;
252b5132
RH
14760 op = get16 ();
14761 break;
9306ca4a
JB
14762 case const_1_mode:
14763 if (intel_syntax)
6c067bbb 14764 oappend ("1");
9306ca4a 14765 return;
252b5132
RH
14766 default:
14767 oappend (INTERNAL_DISASSEMBLER_ERROR);
14768 return;
14769 }
14770
52b15da3
JH
14771 op &= mask;
14772 scratchbuf[0] = '$';
d708bcba 14773 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 14774 oappend_maybe_intel (scratchbuf);
52b15da3
JH
14775 scratchbuf[0] = '\0';
14776}
14777
14778static void
26ca5450 14779OP_I64 (int bytemode, int sizeflag)
52b15da3 14780{
a280ab8e 14781 if (bytemode != v_mode || address_mode != mode_64bit || !(rex & REX_W))
6439fc28
AM
14782 {
14783 OP_I (bytemode, sizeflag);
14784 return;
14785 }
14786
a280ab8e 14787 USED_REX (REX_W);
52b15da3 14788
52b15da3 14789 scratchbuf[0] = '$';
a280ab8e 14790 print_operand_value (scratchbuf + 1, 1, get64 ());
9ce09ba2 14791 oappend_maybe_intel (scratchbuf);
252b5132
RH
14792 scratchbuf[0] = '\0';
14793}
14794
14795static void
26ca5450 14796OP_sI (int bytemode, int sizeflag)
252b5132 14797{
52b15da3 14798 bfd_signed_vma op;
252b5132
RH
14799
14800 switch (bytemode)
14801 {
14802 case b_mode:
e3949f17 14803 case b_T_mode:
252b5132
RH
14804 FETCH_DATA (the_info, codep + 1);
14805 op = *codep++;
14806 if ((op & 0x80) != 0)
14807 op -= 0x100;
e3949f17
L
14808 if (bytemode == b_T_mode)
14809 {
14810 if (address_mode != mode_64bit
7bb15c6f 14811 || !((sizeflag & DFLAG) || (rex & REX_W)))
e3949f17 14812 {
6c067bbb
RM
14813 /* The operand-size prefix is overridden by a REX prefix. */
14814 if ((sizeflag & DFLAG) || (rex & REX_W))
e3949f17
L
14815 op &= 0xffffffff;
14816 else
14817 op &= 0xffff;
14818 }
14819 }
14820 else
14821 {
14822 if (!(rex & REX_W))
14823 {
14824 if (sizeflag & DFLAG)
14825 op &= 0xffffffff;
14826 else
14827 op &= 0xffff;
14828 }
14829 }
252b5132
RH
14830 break;
14831 case v_mode:
7bb15c6f
RM
14832 /* The operand-size prefix is overridden by a REX prefix. */
14833 if ((sizeflag & DFLAG) || (rex & REX_W))
52b15da3 14834 op = get32s ();
252b5132 14835 else
d9e3625e 14836 op = get16 ();
252b5132
RH
14837 break;
14838 default:
14839 oappend (INTERNAL_DISASSEMBLER_ERROR);
14840 return;
14841 }
52b15da3
JH
14842
14843 scratchbuf[0] = '$';
14844 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 14845 oappend_maybe_intel (scratchbuf);
252b5132
RH
14846}
14847
14848static void
26ca5450 14849OP_J (int bytemode, int sizeflag)
252b5132 14850{
52b15da3 14851 bfd_vma disp;
7081ff04 14852 bfd_vma mask = -1;
65ca155d 14853 bfd_vma segment = 0;
252b5132
RH
14854
14855 switch (bytemode)
14856 {
14857 case b_mode:
14858 FETCH_DATA (the_info, codep + 1);
14859 disp = *codep++;
14860 if ((disp & 0x80) != 0)
14861 disp -= 0x100;
14862 break;
14863 case v_mode:
5db04b09
L
14864 if (isa64 == amd64)
14865 USED_REX (REX_W);
14866 if ((sizeflag & DFLAG)
14867 || (address_mode == mode_64bit
14868 && (isa64 != amd64 || (rex & REX_W))))
52b15da3 14869 disp = get32s ();
252b5132
RH
14870 else
14871 {
14872 disp = get16 ();
206717e8
L
14873 if ((disp & 0x8000) != 0)
14874 disp -= 0x10000;
65ca155d
L
14875 /* In 16bit mode, address is wrapped around at 64k within
14876 the same segment. Otherwise, a data16 prefix on a jump
14877 instruction means that the pc is masked to 16 bits after
14878 the displacement is added! */
14879 mask = 0xffff;
14880 if ((prefixes & PREFIX_DATA) == 0)
4fd7268a 14881 segment = ((start_pc + (codep - start_codep))
65ca155d 14882 & ~((bfd_vma) 0xffff));
252b5132 14883 }
5db04b09
L
14884 if (address_mode != mode_64bit
14885 || (isa64 == amd64 && !(rex & REX_W)))
f16cd0d5 14886 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132
RH
14887 break;
14888 default:
14889 oappend (INTERNAL_DISASSEMBLER_ERROR);
14890 return;
14891 }
42d5f9c6 14892 disp = ((start_pc + (codep - start_codep) + disp) & mask) | segment;
52b15da3
JH
14893 set_op (disp, 0);
14894 print_operand_value (scratchbuf, 1, disp);
252b5132
RH
14895 oappend (scratchbuf);
14896}
14897
252b5132 14898static void
ed7841b3 14899OP_SEG (int bytemode, int sizeflag)
252b5132 14900{
ed7841b3 14901 if (bytemode == w_mode)
7967e09e 14902 oappend (names_seg[modrm.reg]);
ed7841b3 14903 else
7967e09e 14904 OP_E (modrm.mod == 3 ? bytemode : w_mode, sizeflag);
252b5132
RH
14905}
14906
14907static void
26ca5450 14908OP_DIR (int dummy ATTRIBUTE_UNUSED, int sizeflag)
252b5132
RH
14909{
14910 int seg, offset;
14911
c608c12e 14912 if (sizeflag & DFLAG)
252b5132 14913 {
c608c12e
AM
14914 offset = get32 ();
14915 seg = get16 ();
252b5132 14916 }
c608c12e
AM
14917 else
14918 {
14919 offset = get16 ();
14920 seg = get16 ();
14921 }
7d421014 14922 used_prefixes |= (prefixes & PREFIX_DATA);
d708bcba 14923 if (intel_syntax)
3f31e633 14924 sprintf (scratchbuf, "0x%x:0x%x", seg, offset);
d708bcba
AM
14925 else
14926 sprintf (scratchbuf, "$0x%x,$0x%x", seg, offset);
c608c12e 14927 oappend (scratchbuf);
252b5132
RH
14928}
14929
252b5132 14930static void
3f31e633 14931OP_OFF (int bytemode, int sizeflag)
252b5132 14932{
52b15da3 14933 bfd_vma off;
252b5132 14934
3f31e633
JB
14935 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
14936 intel_operand_size (bytemode, sizeflag);
252b5132
RH
14937 append_seg ();
14938
cb712a9e 14939 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132
RH
14940 off = get32 ();
14941 else
14942 off = get16 ();
14943
14944 if (intel_syntax)
14945 {
285ca992 14946 if (!active_seg_prefix)
252b5132 14947 {
d708bcba 14948 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
14949 oappend (":");
14950 }
14951 }
52b15da3
JH
14952 print_operand_value (scratchbuf, 1, off);
14953 oappend (scratchbuf);
14954}
6439fc28 14955
52b15da3 14956static void
3f31e633 14957OP_OFF64 (int bytemode, int sizeflag)
52b15da3
JH
14958{
14959 bfd_vma off;
14960
539e75ad
L
14961 if (address_mode != mode_64bit
14962 || (prefixes & PREFIX_ADDR))
6439fc28
AM
14963 {
14964 OP_OFF (bytemode, sizeflag);
14965 return;
14966 }
14967
3f31e633
JB
14968 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
14969 intel_operand_size (bytemode, sizeflag);
52b15da3
JH
14970 append_seg ();
14971
6608db57 14972 off = get64 ();
52b15da3
JH
14973
14974 if (intel_syntax)
14975 {
285ca992 14976 if (!active_seg_prefix)
52b15da3 14977 {
d708bcba 14978 oappend (names_seg[ds_reg - es_reg]);
52b15da3
JH
14979 oappend (":");
14980 }
14981 }
14982 print_operand_value (scratchbuf, 1, off);
252b5132
RH
14983 oappend (scratchbuf);
14984}
14985
14986static void
26ca5450 14987ptr_reg (int code, int sizeflag)
252b5132 14988{
2da11e11 14989 const char *s;
d708bcba 14990
1d9f512f 14991 *obufp++ = open_char;
20f0a1fc 14992 used_prefixes |= (prefixes & PREFIX_ADDR);
cb712a9e 14993 if (address_mode == mode_64bit)
c1a64871
JH
14994 {
14995 if (!(sizeflag & AFLAG))
db6eb5be 14996 s = names32[code - eAX_reg];
c1a64871 14997 else
db6eb5be 14998 s = names64[code - eAX_reg];
c1a64871 14999 }
52b15da3 15000 else if (sizeflag & AFLAG)
252b5132
RH
15001 s = names32[code - eAX_reg];
15002 else
15003 s = names16[code - eAX_reg];
15004 oappend (s);
1d9f512f
AM
15005 *obufp++ = close_char;
15006 *obufp = 0;
252b5132
RH
15007}
15008
15009static void
26ca5450 15010OP_ESreg (int code, int sizeflag)
252b5132 15011{
9306ca4a 15012 if (intel_syntax)
52fd6d94
JB
15013 {
15014 switch (codep[-1])
15015 {
15016 case 0x6d: /* insw/insl */
15017 intel_operand_size (z_mode, sizeflag);
15018 break;
15019 case 0xa5: /* movsw/movsl/movsq */
15020 case 0xa7: /* cmpsw/cmpsl/cmpsq */
15021 case 0xab: /* stosw/stosl */
15022 case 0xaf: /* scasw/scasl */
15023 intel_operand_size (v_mode, sizeflag);
15024 break;
15025 default:
15026 intel_operand_size (b_mode, sizeflag);
15027 }
15028 }
9ce09ba2 15029 oappend_maybe_intel ("%es:");
252b5132
RH
15030 ptr_reg (code, sizeflag);
15031}
15032
15033static void
26ca5450 15034OP_DSreg (int code, int sizeflag)
252b5132 15035{
9306ca4a 15036 if (intel_syntax)
52fd6d94
JB
15037 {
15038 switch (codep[-1])
15039 {
15040 case 0x6f: /* outsw/outsl */
15041 intel_operand_size (z_mode, sizeflag);
15042 break;
15043 case 0xa5: /* movsw/movsl/movsq */
15044 case 0xa7: /* cmpsw/cmpsl/cmpsq */
15045 case 0xad: /* lodsw/lodsl/lodsq */
15046 intel_operand_size (v_mode, sizeflag);
15047 break;
15048 default:
15049 intel_operand_size (b_mode, sizeflag);
15050 }
15051 }
285ca992
L
15052 /* Set active_seg_prefix to PREFIX_DS if it is unset so that the
15053 default segment register DS is printed. */
15054 if (!active_seg_prefix)
15055 active_seg_prefix = PREFIX_DS;
6608db57 15056 append_seg ();
252b5132
RH
15057 ptr_reg (code, sizeflag);
15058}
15059
252b5132 15060static void
26ca5450 15061OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15062{
9b60702d 15063 int add;
161a04f6 15064 if (rex & REX_R)
c4a530c5 15065 {
161a04f6 15066 USED_REX (REX_R);
c4a530c5
JB
15067 add = 8;
15068 }
cb712a9e 15069 else if (address_mode != mode_64bit && (prefixes & PREFIX_LOCK))
c4a530c5 15070 {
f16cd0d5 15071 all_prefixes[last_lock_prefix] = 0;
c4a530c5
JB
15072 used_prefixes |= PREFIX_LOCK;
15073 add = 8;
15074 }
9b60702d
L
15075 else
15076 add = 0;
7967e09e 15077 sprintf (scratchbuf, "%%cr%d", modrm.reg + add);
9ce09ba2 15078 oappend_maybe_intel (scratchbuf);
252b5132
RH
15079}
15080
252b5132 15081static void
26ca5450 15082OP_D (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15083{
9b60702d 15084 int add;
161a04f6
L
15085 USED_REX (REX_R);
15086 if (rex & REX_R)
52b15da3 15087 add = 8;
9b60702d
L
15088 else
15089 add = 0;
d708bcba 15090 if (intel_syntax)
7967e09e 15091 sprintf (scratchbuf, "db%d", modrm.reg + add);
d708bcba 15092 else
7967e09e 15093 sprintf (scratchbuf, "%%db%d", modrm.reg + add);
252b5132
RH
15094 oappend (scratchbuf);
15095}
15096
252b5132 15097static void
26ca5450 15098OP_T (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15099{
7967e09e 15100 sprintf (scratchbuf, "%%tr%d", modrm.reg);
9ce09ba2 15101 oappend_maybe_intel (scratchbuf);
252b5132
RH
15102}
15103
15104static void
6f74c397 15105OP_R (int bytemode, int sizeflag)
252b5132 15106{
68f34464
L
15107 /* Skip mod/rm byte. */
15108 MODRM_CHECK;
15109 codep++;
15110 OP_E_register (bytemode, sizeflag);
252b5132
RH
15111}
15112
15113static void
26ca5450 15114OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15115{
b9733481
L
15116 int reg = modrm.reg;
15117 const char **names;
15118
041bd2e0
JH
15119 used_prefixes |= (prefixes & PREFIX_DATA);
15120 if (prefixes & PREFIX_DATA)
20f0a1fc 15121 {
b9733481 15122 names = names_xmm;
161a04f6
L
15123 USED_REX (REX_R);
15124 if (rex & REX_R)
b9733481 15125 reg += 8;
20f0a1fc 15126 }
041bd2e0 15127 else
b9733481
L
15128 names = names_mm;
15129 oappend (names[reg]);
252b5132
RH
15130}
15131
c608c12e 15132static void
c0f3af97 15133OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
c608c12e 15134{
b9733481
L
15135 int reg = modrm.reg;
15136 const char **names;
15137
161a04f6
L
15138 USED_REX (REX_R);
15139 if (rex & REX_R)
b9733481 15140 reg += 8;
43234a1e
L
15141 if (vex.evex)
15142 {
15143 if (!vex.r)
15144 reg += 16;
15145 }
15146
539f890d
L
15147 if (need_vex
15148 && bytemode != xmm_mode
43234a1e
L
15149 && bytemode != xmmq_mode
15150 && bytemode != evex_half_bcst_xmmq_mode
15151 && bytemode != ymm_mode
539f890d 15152 && bytemode != scalar_mode)
c0f3af97
L
15153 {
15154 switch (vex.length)
15155 {
15156 case 128:
b9733481 15157 names = names_xmm;
c0f3af97
L
15158 break;
15159 case 256:
5fc35d96
IT
15160 if (vex.w
15161 || (bytemode != vex_vsib_q_w_dq_mode
15162 && bytemode != vex_vsib_q_w_d_mode))
6c30d220
L
15163 names = names_ymm;
15164 else
15165 names = names_xmm;
c0f3af97 15166 break;
43234a1e
L
15167 case 512:
15168 names = names_zmm;
15169 break;
c0f3af97
L
15170 default:
15171 abort ();
15172 }
15173 }
43234a1e
L
15174 else if (bytemode == xmmq_mode
15175 || bytemode == evex_half_bcst_xmmq_mode)
15176 {
15177 switch (vex.length)
15178 {
15179 case 128:
15180 case 256:
15181 names = names_xmm;
15182 break;
15183 case 512:
15184 names = names_ymm;
15185 break;
15186 default:
15187 abort ();
15188 }
15189 }
15190 else if (bytemode == ymm_mode)
15191 names = names_ymm;
c0f3af97 15192 else
b9733481
L
15193 names = names_xmm;
15194 oappend (names[reg]);
c608c12e
AM
15195}
15196
252b5132 15197static void
26ca5450 15198OP_EM (int bytemode, int sizeflag)
252b5132 15199{
b9733481
L
15200 int reg;
15201 const char **names;
15202
7967e09e 15203 if (modrm.mod != 3)
252b5132 15204 {
b6169b20
L
15205 if (intel_syntax
15206 && (bytemode == v_mode || bytemode == v_swap_mode))
9306ca4a
JB
15207 {
15208 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
15209 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 15210 }
252b5132
RH
15211 OP_E (bytemode, sizeflag);
15212 return;
15213 }
15214
b6169b20
L
15215 if ((sizeflag & SUFFIX_ALWAYS) && bytemode == v_swap_mode)
15216 swap_operand ();
15217
6608db57 15218 /* Skip mod/rm byte. */
4bba6815 15219 MODRM_CHECK;
252b5132 15220 codep++;
041bd2e0 15221 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 15222 reg = modrm.rm;
041bd2e0 15223 if (prefixes & PREFIX_DATA)
20f0a1fc 15224 {
b9733481 15225 names = names_xmm;
161a04f6
L
15226 USED_REX (REX_B);
15227 if (rex & REX_B)
b9733481 15228 reg += 8;
20f0a1fc 15229 }
041bd2e0 15230 else
b9733481
L
15231 names = names_mm;
15232 oappend (names[reg]);
252b5132
RH
15233}
15234
246c51aa
L
15235/* cvt* are the only instructions in sse2 which have
15236 both SSE and MMX operands and also have 0x66 prefix
15237 in their opcode. 0x66 was originally used to differentiate
15238 between SSE and MMX instruction(operands). So we have to handle the
4d9567e0
MM
15239 cvt* separately using OP_EMC and OP_MXC */
15240static void
15241OP_EMC (int bytemode, int sizeflag)
15242{
7967e09e 15243 if (modrm.mod != 3)
4d9567e0
MM
15244 {
15245 if (intel_syntax && bytemode == v_mode)
15246 {
15247 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
15248 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 15249 }
4d9567e0
MM
15250 OP_E (bytemode, sizeflag);
15251 return;
15252 }
246c51aa 15253
4d9567e0
MM
15254 /* Skip mod/rm byte. */
15255 MODRM_CHECK;
15256 codep++;
15257 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 15258 oappend (names_mm[modrm.rm]);
4d9567e0
MM
15259}
15260
15261static void
15262OP_MXC (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15263{
15264 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 15265 oappend (names_mm[modrm.reg]);
4d9567e0
MM
15266}
15267
c608c12e 15268static void
26ca5450 15269OP_EX (int bytemode, int sizeflag)
c608c12e 15270{
b9733481
L
15271 int reg;
15272 const char **names;
d6f574e0
L
15273
15274 /* Skip mod/rm byte. */
15275 MODRM_CHECK;
15276 codep++;
15277
7967e09e 15278 if (modrm.mod != 3)
c608c12e 15279 {
c1e679ec 15280 OP_E_memory (bytemode, sizeflag);
c608c12e
AM
15281 return;
15282 }
d6f574e0 15283
b9733481 15284 reg = modrm.rm;
161a04f6
L
15285 USED_REX (REX_B);
15286 if (rex & REX_B)
b9733481 15287 reg += 8;
43234a1e
L
15288 if (vex.evex)
15289 {
15290 USED_REX (REX_X);
15291 if ((rex & REX_X))
15292 reg += 16;
15293 }
c608c12e 15294
b6169b20 15295 if ((sizeflag & SUFFIX_ALWAYS)
fa99fab2
L
15296 && (bytemode == x_swap_mode
15297 || bytemode == d_swap_mode
7bb15c6f 15298 || bytemode == d_scalar_swap_mode
539f890d
L
15299 || bytemode == q_swap_mode
15300 || bytemode == q_scalar_swap_mode))
b6169b20
L
15301 swap_operand ();
15302
c0f3af97
L
15303 if (need_vex
15304 && bytemode != xmm_mode
6c30d220
L
15305 && bytemode != xmmdw_mode
15306 && bytemode != xmmqd_mode
15307 && bytemode != xmm_mb_mode
15308 && bytemode != xmm_mw_mode
15309 && bytemode != xmm_md_mode
15310 && bytemode != xmm_mq_mode
43234a1e 15311 && bytemode != xmm_mdq_mode
539f890d 15312 && bytemode != xmmq_mode
43234a1e
L
15313 && bytemode != evex_half_bcst_xmmq_mode
15314 && bytemode != ymm_mode
539f890d 15315 && bytemode != d_scalar_mode
7bb15c6f 15316 && bytemode != d_scalar_swap_mode
539f890d 15317 && bytemode != q_scalar_mode
1c480963
L
15318 && bytemode != q_scalar_swap_mode
15319 && bytemode != vex_scalar_w_dq_mode)
c0f3af97
L
15320 {
15321 switch (vex.length)
15322 {
15323 case 128:
b9733481 15324 names = names_xmm;
c0f3af97
L
15325 break;
15326 case 256:
b9733481 15327 names = names_ymm;
c0f3af97 15328 break;
43234a1e
L
15329 case 512:
15330 names = names_zmm;
15331 break;
c0f3af97
L
15332 default:
15333 abort ();
15334 }
15335 }
43234a1e
L
15336 else if (bytemode == xmmq_mode
15337 || bytemode == evex_half_bcst_xmmq_mode)
15338 {
15339 switch (vex.length)
15340 {
15341 case 128:
15342 case 256:
15343 names = names_xmm;
15344 break;
15345 case 512:
15346 names = names_ymm;
15347 break;
15348 default:
15349 abort ();
15350 }
15351 }
15352 else if (bytemode == ymm_mode)
15353 names = names_ymm;
c0f3af97 15354 else
b9733481
L
15355 names = names_xmm;
15356 oappend (names[reg]);
c608c12e
AM
15357}
15358
252b5132 15359static void
26ca5450 15360OP_MS (int bytemode, int sizeflag)
252b5132 15361{
7967e09e 15362 if (modrm.mod == 3)
2da11e11
AM
15363 OP_EM (bytemode, sizeflag);
15364 else
6608db57 15365 BadOp ();
252b5132
RH
15366}
15367
992aaec9 15368static void
26ca5450 15369OP_XS (int bytemode, int sizeflag)
992aaec9 15370{
7967e09e 15371 if (modrm.mod == 3)
992aaec9
AM
15372 OP_EX (bytemode, sizeflag);
15373 else
6608db57 15374 BadOp ();
992aaec9
AM
15375}
15376
cc0ec051
AM
15377static void
15378OP_M (int bytemode, int sizeflag)
15379{
7967e09e 15380 if (modrm.mod == 3)
75413a22
L
15381 /* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */
15382 BadOp ();
cc0ec051
AM
15383 else
15384 OP_E (bytemode, sizeflag);
15385}
15386
15387static void
15388OP_0f07 (int bytemode, int sizeflag)
15389{
7967e09e 15390 if (modrm.mod != 3 || modrm.rm != 0)
cc0ec051
AM
15391 BadOp ();
15392 else
15393 OP_E (bytemode, sizeflag);
15394}
15395
46e883c5 15396/* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
246c51aa 15397 32bit mode and "xchg %rax,%rax" in 64bit mode. */
46e883c5 15398
cc0ec051 15399static void
46e883c5 15400NOP_Fixup1 (int bytemode, int sizeflag)
cc0ec051 15401{
8b38ad71
L
15402 if ((prefixes & PREFIX_DATA) != 0
15403 || (rex != 0
15404 && rex != 0x48
15405 && address_mode == mode_64bit))
46e883c5
L
15406 OP_REG (bytemode, sizeflag);
15407 else
15408 strcpy (obuf, "nop");
15409}
15410
15411static void
15412NOP_Fixup2 (int bytemode, int sizeflag)
15413{
8b38ad71
L
15414 if ((prefixes & PREFIX_DATA) != 0
15415 || (rex != 0
15416 && rex != 0x48
15417 && address_mode == mode_64bit))
46e883c5 15418 OP_IMREG (bytemode, sizeflag);
cc0ec051
AM
15419}
15420
84037f8c 15421static const char *const Suffix3DNow[] = {
252b5132
RH
15422/* 00 */ NULL, NULL, NULL, NULL,
15423/* 04 */ NULL, NULL, NULL, NULL,
15424/* 08 */ NULL, NULL, NULL, NULL,
9e525108 15425/* 0C */ "pi2fw", "pi2fd", NULL, NULL,
252b5132
RH
15426/* 10 */ NULL, NULL, NULL, NULL,
15427/* 14 */ NULL, NULL, NULL, NULL,
15428/* 18 */ NULL, NULL, NULL, NULL,
9e525108 15429/* 1C */ "pf2iw", "pf2id", NULL, NULL,
252b5132
RH
15430/* 20 */ NULL, NULL, NULL, NULL,
15431/* 24 */ NULL, NULL, NULL, NULL,
15432/* 28 */ NULL, NULL, NULL, NULL,
15433/* 2C */ NULL, NULL, NULL, NULL,
15434/* 30 */ NULL, NULL, NULL, NULL,
15435/* 34 */ NULL, NULL, NULL, NULL,
15436/* 38 */ NULL, NULL, NULL, NULL,
15437/* 3C */ NULL, NULL, NULL, NULL,
15438/* 40 */ NULL, NULL, NULL, NULL,
15439/* 44 */ NULL, NULL, NULL, NULL,
15440/* 48 */ NULL, NULL, NULL, NULL,
15441/* 4C */ NULL, NULL, NULL, NULL,
15442/* 50 */ NULL, NULL, NULL, NULL,
15443/* 54 */ NULL, NULL, NULL, NULL,
15444/* 58 */ NULL, NULL, NULL, NULL,
15445/* 5C */ NULL, NULL, NULL, NULL,
15446/* 60 */ NULL, NULL, NULL, NULL,
15447/* 64 */ NULL, NULL, NULL, NULL,
15448/* 68 */ NULL, NULL, NULL, NULL,
15449/* 6C */ NULL, NULL, NULL, NULL,
15450/* 70 */ NULL, NULL, NULL, NULL,
15451/* 74 */ NULL, NULL, NULL, NULL,
15452/* 78 */ NULL, NULL, NULL, NULL,
15453/* 7C */ NULL, NULL, NULL, NULL,
15454/* 80 */ NULL, NULL, NULL, NULL,
15455/* 84 */ NULL, NULL, NULL, NULL,
9e525108
AM
15456/* 88 */ NULL, NULL, "pfnacc", NULL,
15457/* 8C */ NULL, NULL, "pfpnacc", NULL,
252b5132
RH
15458/* 90 */ "pfcmpge", NULL, NULL, NULL,
15459/* 94 */ "pfmin", NULL, "pfrcp", "pfrsqrt",
15460/* 98 */ NULL, NULL, "pfsub", NULL,
15461/* 9C */ NULL, NULL, "pfadd", NULL,
15462/* A0 */ "pfcmpgt", NULL, NULL, NULL,
15463/* A4 */ "pfmax", NULL, "pfrcpit1", "pfrsqit1",
15464/* A8 */ NULL, NULL, "pfsubr", NULL,
15465/* AC */ NULL, NULL, "pfacc", NULL,
15466/* B0 */ "pfcmpeq", NULL, NULL, NULL,
9beff690 15467/* B4 */ "pfmul", NULL, "pfrcpit2", "pmulhrw",
9e525108 15468/* B8 */ NULL, NULL, NULL, "pswapd",
252b5132
RH
15469/* BC */ NULL, NULL, NULL, "pavgusb",
15470/* C0 */ NULL, NULL, NULL, NULL,
15471/* C4 */ NULL, NULL, NULL, NULL,
15472/* C8 */ NULL, NULL, NULL, NULL,
15473/* CC */ NULL, NULL, NULL, NULL,
15474/* D0 */ NULL, NULL, NULL, NULL,
15475/* D4 */ NULL, NULL, NULL, NULL,
15476/* D8 */ NULL, NULL, NULL, NULL,
15477/* DC */ NULL, NULL, NULL, NULL,
15478/* E0 */ NULL, NULL, NULL, NULL,
15479/* E4 */ NULL, NULL, NULL, NULL,
15480/* E8 */ NULL, NULL, NULL, NULL,
15481/* EC */ NULL, NULL, NULL, NULL,
15482/* F0 */ NULL, NULL, NULL, NULL,
15483/* F4 */ NULL, NULL, NULL, NULL,
15484/* F8 */ NULL, NULL, NULL, NULL,
15485/* FC */ NULL, NULL, NULL, NULL,
15486};
15487
15488static void
26ca5450 15489OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132
RH
15490{
15491 const char *mnemonic;
15492
15493 FETCH_DATA (the_info, codep + 1);
15494 /* AMD 3DNow! instructions are specified by an opcode suffix in the
15495 place where an 8-bit immediate would normally go. ie. the last
15496 byte of the instruction. */
ea397f5b 15497 obufp = mnemonicendp;
c608c12e 15498 mnemonic = Suffix3DNow[*codep++ & 0xff];
252b5132 15499 if (mnemonic)
2da11e11 15500 oappend (mnemonic);
252b5132
RH
15501 else
15502 {
15503 /* Since a variable sized modrm/sib chunk is between the start
15504 of the opcode (0x0f0f) and the opcode suffix, we need to do
15505 all the modrm processing first, and don't know until now that
15506 we have a bad opcode. This necessitates some cleaning up. */
ce518a5f
L
15507 op_out[0][0] = '\0';
15508 op_out[1][0] = '\0';
6608db57 15509 BadOp ();
252b5132 15510 }
ea397f5b 15511 mnemonicendp = obufp;
252b5132 15512}
c608c12e 15513
ea397f5b
L
15514static struct op simd_cmp_op[] =
15515{
15516 { STRING_COMMA_LEN ("eq") },
15517 { STRING_COMMA_LEN ("lt") },
15518 { STRING_COMMA_LEN ("le") },
15519 { STRING_COMMA_LEN ("unord") },
15520 { STRING_COMMA_LEN ("neq") },
15521 { STRING_COMMA_LEN ("nlt") },
15522 { STRING_COMMA_LEN ("nle") },
15523 { STRING_COMMA_LEN ("ord") }
c608c12e
AM
15524};
15525
15526static void
ad19981d 15527CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
c608c12e
AM
15528{
15529 unsigned int cmp_type;
15530
15531 FETCH_DATA (the_info, codep + 1);
15532 cmp_type = *codep++ & 0xff;
c0f3af97 15533 if (cmp_type < ARRAY_SIZE (simd_cmp_op))
c608c12e 15534 {
ad19981d 15535 char suffix [3];
ea397f5b 15536 char *p = mnemonicendp - 2;
ad19981d
L
15537 suffix[0] = p[0];
15538 suffix[1] = p[1];
15539 suffix[2] = '\0';
ea397f5b
L
15540 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
15541 mnemonicendp += simd_cmp_op[cmp_type].len;
c608c12e
AM
15542 }
15543 else
15544 {
ad19981d
L
15545 /* We have a reserved extension byte. Output it directly. */
15546 scratchbuf[0] = '$';
15547 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 15548 oappend_maybe_intel (scratchbuf);
ad19981d 15549 scratchbuf[0] = '\0';
c608c12e
AM
15550 }
15551}
15552
9916071f
AP
15553static void
15554OP_Mwaitx (int bytemode ATTRIBUTE_UNUSED,
15555 int sizeflag ATTRIBUTE_UNUSED)
15556{
15557 /* mwaitx %eax,%ecx,%ebx */
15558 if (!intel_syntax)
15559 {
15560 const char **names = (address_mode == mode_64bit
15561 ? names64 : names32);
15562 strcpy (op_out[0], names[0]);
15563 strcpy (op_out[1], names[1]);
15564 strcpy (op_out[2], names[3]);
15565 two_source_ops = 1;
15566 }
15567 /* Skip mod/rm byte. */
15568 MODRM_CHECK;
15569 codep++;
15570}
15571
ca164297 15572static void
b844680a
L
15573OP_Mwait (int bytemode ATTRIBUTE_UNUSED,
15574 int sizeflag ATTRIBUTE_UNUSED)
15575{
15576 /* mwait %eax,%ecx */
15577 if (!intel_syntax)
15578 {
15579 const char **names = (address_mode == mode_64bit
15580 ? names64 : names32);
15581 strcpy (op_out[0], names[0]);
15582 strcpy (op_out[1], names[1]);
15583 two_source_ops = 1;
15584 }
15585 /* Skip mod/rm byte. */
15586 MODRM_CHECK;
15587 codep++;
15588}
15589
15590static void
15591OP_Monitor (int bytemode ATTRIBUTE_UNUSED,
15592 int sizeflag ATTRIBUTE_UNUSED)
ca164297 15593{
b844680a
L
15594 /* monitor %eax,%ecx,%edx" */
15595 if (!intel_syntax)
ca164297 15596 {
b844680a 15597 const char **op1_names;
cb712a9e
L
15598 const char **names = (address_mode == mode_64bit
15599 ? names64 : names32);
1d9f512f 15600
b844680a
L
15601 if (!(prefixes & PREFIX_ADDR))
15602 op1_names = (address_mode == mode_16bit
15603 ? names16 : names);
ca164297
L
15604 else
15605 {
b844680a 15606 /* Remove "addr16/addr32". */
f16cd0d5 15607 all_prefixes[last_addr_prefix] = 0;
b844680a
L
15608 op1_names = (address_mode != mode_32bit
15609 ? names32 : names16);
15610 used_prefixes |= PREFIX_ADDR;
ca164297 15611 }
b844680a
L
15612 strcpy (op_out[0], op1_names[0]);
15613 strcpy (op_out[1], names[1]);
15614 strcpy (op_out[2], names[2]);
15615 two_source_ops = 1;
ca164297 15616 }
b844680a
L
15617 /* Skip mod/rm byte. */
15618 MODRM_CHECK;
15619 codep++;
30123838
JB
15620}
15621
6608db57
KH
15622static void
15623BadOp (void)
2da11e11 15624{
6608db57
KH
15625 /* Throw away prefixes and 1st. opcode byte. */
15626 codep = insn_codep + 1;
2da11e11
AM
15627 oappend ("(bad)");
15628}
4cc91dba 15629
35c52694
L
15630static void
15631REP_Fixup (int bytemode, int sizeflag)
15632{
15633 /* The 0xf3 prefix should be displayed as "rep" for ins, outs, movs,
15634 lods and stos. */
35c52694 15635 if (prefixes & PREFIX_REPZ)
f16cd0d5 15636 all_prefixes[last_repz_prefix] = REP_PREFIX;
35c52694
L
15637
15638 switch (bytemode)
15639 {
15640 case al_reg:
15641 case eAX_reg:
15642 case indir_dx_reg:
15643 OP_IMREG (bytemode, sizeflag);
15644 break;
15645 case eDI_reg:
15646 OP_ESreg (bytemode, sizeflag);
15647 break;
15648 case eSI_reg:
15649 OP_DSreg (bytemode, sizeflag);
15650 break;
15651 default:
15652 abort ();
15653 break;
15654 }
15655}
f5804c90 15656
7e8b059b
L
15657/* For BND-prefixed instructions 0xF2 prefix should be displayed as
15658 "bnd". */
15659
15660static void
15661BND_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15662{
15663 if (prefixes & PREFIX_REPNZ)
15664 all_prefixes[last_repnz_prefix] = BND_PREFIX;
15665}
15666
04ef582a
L
15667/* For NOTRACK-prefixed instructions, 0x3E prefix should be displayed as
15668 "notrack". */
15669
15670static void
15671NOTRACK_Fixup (int bytemode ATTRIBUTE_UNUSED,
15672 int sizeflag ATTRIBUTE_UNUSED)
15673{
9fef80d6 15674 if (active_seg_prefix == PREFIX_DS
04ef582a
L
15675 && (address_mode != mode_64bit || last_data_prefix < 0))
15676 {
4e9ac44a 15677 /* NOTRACK prefix is only valid on indirect branch instructions.
9fef80d6 15678 NB: DATA prefix is unsupported for Intel64. */
04ef582a
L
15679 active_seg_prefix = 0;
15680 all_prefixes[last_seg_prefix] = NOTRACK_PREFIX;
15681 }
15682}
15683
42164a71
L
15684/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
15685 "xacquire"/"xrelease" for memory operand if there is a LOCK prefix.
15686 */
15687
15688static void
15689HLE_Fixup1 (int bytemode, int sizeflag)
15690{
15691 if (modrm.mod != 3
15692 && (prefixes & PREFIX_LOCK) != 0)
15693 {
15694 if (prefixes & PREFIX_REPZ)
15695 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15696 if (prefixes & PREFIX_REPNZ)
15697 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
15698 }
15699
15700 OP_E (bytemode, sizeflag);
15701}
15702
15703/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
15704 "xacquire"/"xrelease" for memory operand. No check for LOCK prefix.
15705 */
15706
15707static void
15708HLE_Fixup2 (int bytemode, int sizeflag)
15709{
15710 if (modrm.mod != 3)
15711 {
15712 if (prefixes & PREFIX_REPZ)
15713 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15714 if (prefixes & PREFIX_REPNZ)
15715 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
15716 }
15717
15718 OP_E (bytemode, sizeflag);
15719}
15720
15721/* Similar to OP_E. But the 0xf3 prefixes should be displayed as
15722 "xrelease" for memory operand. No check for LOCK prefix. */
15723
15724static void
15725HLE_Fixup3 (int bytemode, int sizeflag)
15726{
15727 if (modrm.mod != 3
15728 && last_repz_prefix > last_repnz_prefix
15729 && (prefixes & PREFIX_REPZ) != 0)
15730 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15731
15732 OP_E (bytemode, sizeflag);
15733}
15734
f5804c90
L
15735static void
15736CMPXCHG8B_Fixup (int bytemode, int sizeflag)
15737{
161a04f6
L
15738 USED_REX (REX_W);
15739 if (rex & REX_W)
f5804c90
L
15740 {
15741 /* Change cmpxchg8b to cmpxchg16b. */
ea397f5b
L
15742 char *p = mnemonicendp - 2;
15743 mnemonicendp = stpcpy (p, "16b");
fb9c77c7 15744 bytemode = o_mode;
f5804c90 15745 }
42164a71
L
15746 else if ((prefixes & PREFIX_LOCK) != 0)
15747 {
15748 if (prefixes & PREFIX_REPZ)
15749 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15750 if (prefixes & PREFIX_REPNZ)
15751 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
15752 }
15753
f5804c90
L
15754 OP_M (bytemode, sizeflag);
15755}
42903f7f
L
15756
15757static void
15758XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED)
15759{
b9733481
L
15760 const char **names;
15761
c0f3af97
L
15762 if (need_vex)
15763 {
15764 switch (vex.length)
15765 {
15766 case 128:
b9733481 15767 names = names_xmm;
c0f3af97
L
15768 break;
15769 case 256:
b9733481 15770 names = names_ymm;
c0f3af97
L
15771 break;
15772 default:
15773 abort ();
15774 }
15775 }
15776 else
b9733481
L
15777 names = names_xmm;
15778 oappend (names[reg]);
42903f7f 15779}
381d071f
L
15780
15781static void
15782CRC32_Fixup (int bytemode, int sizeflag)
15783{
15784 /* Add proper suffix to "crc32". */
ea397f5b 15785 char *p = mnemonicendp;
381d071f
L
15786
15787 switch (bytemode)
15788 {
15789 case b_mode:
20592a94 15790 if (intel_syntax)
ea397f5b 15791 goto skip;
20592a94 15792
381d071f
L
15793 *p++ = 'b';
15794 break;
15795 case v_mode:
20592a94 15796 if (intel_syntax)
ea397f5b 15797 goto skip;
20592a94 15798
381d071f
L
15799 USED_REX (REX_W);
15800 if (rex & REX_W)
15801 *p++ = 'q';
7bb15c6f 15802 else
f16cd0d5
L
15803 {
15804 if (sizeflag & DFLAG)
15805 *p++ = 'l';
15806 else
15807 *p++ = 'w';
15808 used_prefixes |= (prefixes & PREFIX_DATA);
15809 }
381d071f
L
15810 break;
15811 default:
15812 oappend (INTERNAL_DISASSEMBLER_ERROR);
15813 break;
15814 }
ea397f5b 15815 mnemonicendp = p;
381d071f
L
15816 *p = '\0';
15817
ea397f5b 15818skip:
381d071f
L
15819 if (modrm.mod == 3)
15820 {
15821 int add;
15822
15823 /* Skip mod/rm byte. */
15824 MODRM_CHECK;
15825 codep++;
15826
15827 USED_REX (REX_B);
15828 add = (rex & REX_B) ? 8 : 0;
15829 if (bytemode == b_mode)
15830 {
15831 USED_REX (0);
15832 if (rex)
15833 oappend (names8rex[modrm.rm + add]);
15834 else
15835 oappend (names8[modrm.rm + add]);
15836 }
15837 else
15838 {
15839 USED_REX (REX_W);
15840 if (rex & REX_W)
15841 oappend (names64[modrm.rm + add]);
15842 else if ((prefixes & PREFIX_DATA))
15843 oappend (names16[modrm.rm + add]);
15844 else
15845 oappend (names32[modrm.rm + add]);
15846 }
15847 }
15848 else
9344ff29 15849 OP_E (bytemode, sizeflag);
381d071f 15850}
85f10a01 15851
eacc9c89
L
15852static void
15853FXSAVE_Fixup (int bytemode, int sizeflag)
15854{
15855 /* Add proper suffix to "fxsave" and "fxrstor". */
15856 USED_REX (REX_W);
15857 if (rex & REX_W)
15858 {
15859 char *p = mnemonicendp;
15860 *p++ = '6';
15861 *p++ = '4';
15862 *p = '\0';
15863 mnemonicendp = p;
15864 }
15865 OP_M (bytemode, sizeflag);
15866}
15867
15c7c1d8
JB
15868static void
15869PCMPESTR_Fixup (int bytemode, int sizeflag)
15870{
15871 /* Add proper suffix to "{,v}pcmpestr{i,m}". */
15872 if (!intel_syntax)
15873 {
15874 char *p = mnemonicendp;
15875
15876 USED_REX (REX_W);
15877 if (rex & REX_W)
15878 *p++ = 'q';
15879 else if (sizeflag & SUFFIX_ALWAYS)
15880 *p++ = 'l';
15881
15882 *p = '\0';
15883 mnemonicendp = p;
15884 }
15885
15886 OP_EX (bytemode, sizeflag);
15887}
15888
c0f3af97
L
15889/* Display the destination register operand for instructions with
15890 VEX. */
15891
15892static void
15893OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
15894{
539f890d 15895 int reg;
b9733481
L
15896 const char **names;
15897
c0f3af97
L
15898 if (!need_vex)
15899 abort ();
15900
15901 if (!need_vex_reg)
15902 return;
15903
539f890d 15904 reg = vex.register_specifier;
63c6fc6c 15905 vex.register_specifier = 0;
5f847646
JB
15906 if (address_mode != mode_64bit)
15907 reg &= 7;
15908 else if (vex.evex && !vex.v)
15909 reg += 16;
43234a1e 15910
539f890d
L
15911 if (bytemode == vex_scalar_mode)
15912 {
15913 oappend (names_xmm[reg]);
15914 return;
15915 }
15916
c0f3af97
L
15917 switch (vex.length)
15918 {
15919 case 128:
15920 switch (bytemode)
15921 {
15922 case vex_mode:
15923 case vex128_mode:
6c30d220 15924 case vex_vsib_q_w_dq_mode:
5fc35d96 15925 case vex_vsib_q_w_d_mode:
cb21baef
L
15926 names = names_xmm;
15927 break;
15928 case dq_mode:
390a6789 15929 if (rex & REX_W)
cb21baef
L
15930 names = names64;
15931 else
15932 names = names32;
c0f3af97 15933 break;
1ba585e8 15934 case mask_bd_mode:
43234a1e 15935 case mask_mode:
9889cbb1
L
15936 if (reg > 0x7)
15937 {
15938 oappend ("(bad)");
15939 return;
15940 }
43234a1e
L
15941 names = names_mask;
15942 break;
c0f3af97
L
15943 default:
15944 abort ();
15945 return;
15946 }
c0f3af97
L
15947 break;
15948 case 256:
15949 switch (bytemode)
15950 {
15951 case vex_mode:
15952 case vex256_mode:
6c30d220
L
15953 names = names_ymm;
15954 break;
15955 case vex_vsib_q_w_dq_mode:
5fc35d96 15956 case vex_vsib_q_w_d_mode:
6c30d220 15957 names = vex.w ? names_ymm : names_xmm;
c0f3af97 15958 break;
1ba585e8 15959 case mask_bd_mode:
43234a1e 15960 case mask_mode:
9889cbb1
L
15961 if (reg > 0x7)
15962 {
15963 oappend ("(bad)");
15964 return;
15965 }
43234a1e
L
15966 names = names_mask;
15967 break;
c0f3af97 15968 default:
a37a2806
NC
15969 /* See PR binutils/20893 for a reproducer. */
15970 oappend ("(bad)");
c0f3af97
L
15971 return;
15972 }
c0f3af97 15973 break;
43234a1e
L
15974 case 512:
15975 names = names_zmm;
15976 break;
c0f3af97
L
15977 default:
15978 abort ();
15979 break;
15980 }
539f890d 15981 oappend (names[reg]);
c0f3af97
L
15982}
15983
922d8de8
DR
15984/* Get the VEX immediate byte without moving codep. */
15985
15986static unsigned char
ccc5981b 15987get_vex_imm8 (int sizeflag, int opnum)
922d8de8
DR
15988{
15989 int bytes_before_imm = 0;
15990
922d8de8
DR
15991 if (modrm.mod != 3)
15992 {
15993 /* There are SIB/displacement bytes. */
15994 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
6c067bbb 15995 {
922d8de8 15996 /* 32/64 bit address mode */
6c067bbb 15997 int base = modrm.rm;
922d8de8
DR
15998
15999 /* Check SIB byte. */
6c067bbb
RM
16000 if (base == 4)
16001 {
16002 FETCH_DATA (the_info, codep + 1);
16003 base = *codep & 7;
16004 /* When decoding the third source, don't increase
16005 bytes_before_imm as this has already been incremented
16006 by one in OP_E_memory while decoding the second
16007 source operand. */
16008 if (opnum == 0)
16009 bytes_before_imm++;
16010 }
16011
16012 /* Don't increase bytes_before_imm when decoding the third source,
16013 it has already been incremented by OP_E_memory while decoding
16014 the second source operand. */
16015 if (opnum == 0)
16016 {
16017 switch (modrm.mod)
16018 {
16019 case 0:
16020 /* When modrm.rm == 5 or modrm.rm == 4 and base in
16021 SIB == 5, there is a 4 byte displacement. */
16022 if (base != 5)
16023 /* No displacement. */
16024 break;
1a0670f3 16025 /* Fall through. */
6c067bbb
RM
16026 case 2:
16027 /* 4 byte displacement. */
16028 bytes_before_imm += 4;
16029 break;
16030 case 1:
16031 /* 1 byte displacement. */
16032 bytes_before_imm++;
16033 break;
16034 }
16035 }
16036 }
922d8de8 16037 else
02e647f9
SP
16038 {
16039 /* 16 bit address mode */
6c067bbb
RM
16040 /* Don't increase bytes_before_imm when decoding the third source,
16041 it has already been incremented by OP_E_memory while decoding
16042 the second source operand. */
16043 if (opnum == 0)
16044 {
02e647f9
SP
16045 switch (modrm.mod)
16046 {
16047 case 0:
16048 /* When modrm.rm == 6, there is a 2 byte displacement. */
16049 if (modrm.rm != 6)
16050 /* No displacement. */
16051 break;
1a0670f3 16052 /* Fall through. */
02e647f9
SP
16053 case 2:
16054 /* 2 byte displacement. */
16055 bytes_before_imm += 2;
16056 break;
16057 case 1:
16058 /* 1 byte displacement: when decoding the third source,
16059 don't increase bytes_before_imm as this has already
16060 been incremented by one in OP_E_memory while decoding
16061 the second source operand. */
16062 if (opnum == 0)
16063 bytes_before_imm++;
ccc5981b 16064
02e647f9
SP
16065 break;
16066 }
922d8de8
DR
16067 }
16068 }
16069 }
16070
16071 FETCH_DATA (the_info, codep + bytes_before_imm + 1);
16072 return codep [bytes_before_imm];
16073}
16074
16075static void
16076OP_EX_VexReg (int bytemode, int sizeflag, int reg)
16077{
b9733481
L
16078 const char **names;
16079
922d8de8
DR
16080 if (reg == -1 && modrm.mod != 3)
16081 {
16082 OP_E_memory (bytemode, sizeflag);
16083 return;
16084 }
16085 else
16086 {
16087 if (reg == -1)
16088 {
16089 reg = modrm.rm;
16090 USED_REX (REX_B);
16091 if (rex & REX_B)
16092 reg += 8;
16093 }
5f847646
JB
16094 if (address_mode != mode_64bit)
16095 reg &= 7;
922d8de8
DR
16096 }
16097
16098 switch (vex.length)
16099 {
16100 case 128:
b9733481 16101 names = names_xmm;
922d8de8
DR
16102 break;
16103 case 256:
b9733481 16104 names = names_ymm;
922d8de8
DR
16105 break;
16106 default:
16107 abort ();
16108 }
b9733481 16109 oappend (names[reg]);
922d8de8
DR
16110}
16111
a683cc34
SP
16112static void
16113OP_EX_VexImmW (int bytemode, int sizeflag)
16114{
16115 int reg = -1;
16116 static unsigned char vex_imm8;
16117
16118 if (vex_w_done == 0)
16119 {
16120 vex_w_done = 1;
16121
16122 /* Skip mod/rm byte. */
16123 MODRM_CHECK;
16124 codep++;
16125
16126 vex_imm8 = get_vex_imm8 (sizeflag, 0);
16127
16128 if (vex.w)
16129 reg = vex_imm8 >> 4;
16130
16131 OP_EX_VexReg (bytemode, sizeflag, reg);
16132 }
16133 else if (vex_w_done == 1)
16134 {
16135 vex_w_done = 2;
16136
16137 if (!vex.w)
16138 reg = vex_imm8 >> 4;
16139
16140 OP_EX_VexReg (bytemode, sizeflag, reg);
16141 }
16142 else
16143 {
16144 /* Output the imm8 directly. */
16145 scratchbuf[0] = '$';
16146 print_operand_value (scratchbuf + 1, 1, vex_imm8 & 0xf);
9ce09ba2 16147 oappend_maybe_intel (scratchbuf);
a683cc34
SP
16148 scratchbuf[0] = '\0';
16149 codep++;
16150 }
16151}
16152
5dd85c99
SP
16153static void
16154OP_Vex_2src (int bytemode, int sizeflag)
16155{
16156 if (modrm.mod == 3)
16157 {
b9733481 16158 int reg = modrm.rm;
5dd85c99 16159 USED_REX (REX_B);
b9733481
L
16160 if (rex & REX_B)
16161 reg += 8;
16162 oappend (names_xmm[reg]);
5dd85c99
SP
16163 }
16164 else
16165 {
16166 if (intel_syntax
16167 && (bytemode == v_mode || bytemode == v_swap_mode))
16168 {
16169 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
16170 used_prefixes |= (prefixes & PREFIX_DATA);
16171 }
16172 OP_E (bytemode, sizeflag);
16173 }
16174}
16175
16176static void
16177OP_Vex_2src_1 (int bytemode, int sizeflag)
16178{
16179 if (modrm.mod == 3)
16180 {
16181 /* Skip mod/rm byte. */
16182 MODRM_CHECK;
16183 codep++;
16184 }
16185
16186 if (vex.w)
5f847646
JB
16187 {
16188 unsigned int reg = vex.register_specifier;
63c6fc6c 16189 vex.register_specifier = 0;
5f847646
JB
16190
16191 if (address_mode != mode_64bit)
16192 reg &= 7;
16193 oappend (names_xmm[reg]);
16194 }
5dd85c99
SP
16195 else
16196 OP_Vex_2src (bytemode, sizeflag);
16197}
16198
16199static void
16200OP_Vex_2src_2 (int bytemode, int sizeflag)
16201{
16202 if (vex.w)
16203 OP_Vex_2src (bytemode, sizeflag);
16204 else
5f847646
JB
16205 {
16206 unsigned int reg = vex.register_specifier;
63c6fc6c 16207 vex.register_specifier = 0;
5f847646
JB
16208
16209 if (address_mode != mode_64bit)
16210 reg &= 7;
16211 oappend (names_xmm[reg]);
16212 }
5dd85c99
SP
16213}
16214
922d8de8
DR
16215static void
16216OP_EX_VexW (int bytemode, int sizeflag)
16217{
16218 int reg = -1;
16219
16220 if (!vex_w_done)
16221 {
41effecb
SP
16222 /* Skip mod/rm byte. */
16223 MODRM_CHECK;
16224 codep++;
16225
922d8de8 16226 if (vex.w)
ccc5981b 16227 reg = get_vex_imm8 (sizeflag, 0) >> 4;
922d8de8
DR
16228 }
16229 else
16230 {
16231 if (!vex.w)
ccc5981b 16232 reg = get_vex_imm8 (sizeflag, 1) >> 4;
922d8de8
DR
16233 }
16234
16235 OP_EX_VexReg (bytemode, sizeflag, reg);
922d8de8 16236
3a2430e0
JB
16237 if (vex_w_done)
16238 codep++;
16239 vex_w_done = 1;
922d8de8
DR
16240}
16241
c0f3af97
L
16242static void
16243OP_REG_VexI4 (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16244{
16245 int reg;
b9733481
L
16246 const char **names;
16247
c0f3af97
L
16248 FETCH_DATA (the_info, codep + 1);
16249 reg = *codep++;
16250
16251 if (bytemode != x_mode)
16252 abort ();
16253
c0f3af97 16254 reg >>= 4;
5f847646
JB
16255 if (address_mode != mode_64bit)
16256 reg &= 7;
dae39acc 16257
c0f3af97
L
16258 switch (vex.length)
16259 {
16260 case 128:
b9733481 16261 names = names_xmm;
c0f3af97
L
16262 break;
16263 case 256:
b9733481 16264 names = names_ymm;
c0f3af97
L
16265 break;
16266 default:
16267 abort ();
16268 }
b9733481 16269 oappend (names[reg]);
c0f3af97
L
16270}
16271
922d8de8
DR
16272static void
16273OP_XMM_VexW (int bytemode, int sizeflag)
16274{
16275 /* Turn off the REX.W bit since it is used for swapping operands
16276 now. */
16277 rex &= ~REX_W;
16278 OP_XMM (bytemode, sizeflag);
16279}
16280
c0f3af97
L
16281static void
16282OP_EX_Vex (int bytemode, int sizeflag)
16283{
16284 if (modrm.mod != 3)
63c6fc6c 16285 need_vex_reg = 0;
c0f3af97
L
16286 OP_EX (bytemode, sizeflag);
16287}
16288
16289static void
16290OP_XMM_Vex (int bytemode, int sizeflag)
16291{
16292 if (modrm.mod != 3)
63c6fc6c 16293 need_vex_reg = 0;
c0f3af97
L
16294 OP_XMM (bytemode, sizeflag);
16295}
16296
ea397f5b
L
16297static struct op vex_cmp_op[] =
16298{
16299 { STRING_COMMA_LEN ("eq") },
16300 { STRING_COMMA_LEN ("lt") },
16301 { STRING_COMMA_LEN ("le") },
16302 { STRING_COMMA_LEN ("unord") },
16303 { STRING_COMMA_LEN ("neq") },
16304 { STRING_COMMA_LEN ("nlt") },
16305 { STRING_COMMA_LEN ("nle") },
16306 { STRING_COMMA_LEN ("ord") },
16307 { STRING_COMMA_LEN ("eq_uq") },
16308 { STRING_COMMA_LEN ("nge") },
16309 { STRING_COMMA_LEN ("ngt") },
16310 { STRING_COMMA_LEN ("false") },
16311 { STRING_COMMA_LEN ("neq_oq") },
16312 { STRING_COMMA_LEN ("ge") },
16313 { STRING_COMMA_LEN ("gt") },
16314 { STRING_COMMA_LEN ("true") },
16315 { STRING_COMMA_LEN ("eq_os") },
16316 { STRING_COMMA_LEN ("lt_oq") },
16317 { STRING_COMMA_LEN ("le_oq") },
16318 { STRING_COMMA_LEN ("unord_s") },
16319 { STRING_COMMA_LEN ("neq_us") },
16320 { STRING_COMMA_LEN ("nlt_uq") },
16321 { STRING_COMMA_LEN ("nle_uq") },
16322 { STRING_COMMA_LEN ("ord_s") },
16323 { STRING_COMMA_LEN ("eq_us") },
16324 { STRING_COMMA_LEN ("nge_uq") },
16325 { STRING_COMMA_LEN ("ngt_uq") },
16326 { STRING_COMMA_LEN ("false_os") },
16327 { STRING_COMMA_LEN ("neq_os") },
16328 { STRING_COMMA_LEN ("ge_oq") },
16329 { STRING_COMMA_LEN ("gt_oq") },
16330 { STRING_COMMA_LEN ("true_us") },
c0f3af97
L
16331};
16332
16333static void
16334VCMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16335{
16336 unsigned int cmp_type;
16337
16338 FETCH_DATA (the_info, codep + 1);
16339 cmp_type = *codep++ & 0xff;
16340 if (cmp_type < ARRAY_SIZE (vex_cmp_op))
16341 {
16342 char suffix [3];
ea397f5b 16343 char *p = mnemonicendp - 2;
c0f3af97
L
16344 suffix[0] = p[0];
16345 suffix[1] = p[1];
16346 suffix[2] = '\0';
ea397f5b
L
16347 sprintf (p, "%s%s", vex_cmp_op[cmp_type].name, suffix);
16348 mnemonicendp += vex_cmp_op[cmp_type].len;
c0f3af97
L
16349 }
16350 else
16351 {
16352 /* We have a reserved extension byte. Output it directly. */
16353 scratchbuf[0] = '$';
16354 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 16355 oappend_maybe_intel (scratchbuf);
c0f3af97
L
16356 scratchbuf[0] = '\0';
16357 }
16358}
16359
43234a1e
L
16360static void
16361VPCMP_Fixup (int bytemode ATTRIBUTE_UNUSED,
16362 int sizeflag ATTRIBUTE_UNUSED)
16363{
16364 unsigned int cmp_type;
16365
16366 if (!vex.evex)
16367 abort ();
16368
16369 FETCH_DATA (the_info, codep + 1);
16370 cmp_type = *codep++ & 0xff;
16371 /* There are aliases for immediates 0, 1, 2, 4, 5, 6.
16372 If it's the case, print suffix, otherwise - print the immediate. */
16373 if (cmp_type < ARRAY_SIZE (simd_cmp_op)
16374 && cmp_type != 3
16375 && cmp_type != 7)
16376 {
16377 char suffix [3];
16378 char *p = mnemonicendp - 2;
16379
16380 /* vpcmp* can have both one- and two-lettered suffix. */
16381 if (p[0] == 'p')
16382 {
16383 p++;
16384 suffix[0] = p[0];
16385 suffix[1] = '\0';
16386 }
16387 else
16388 {
16389 suffix[0] = p[0];
16390 suffix[1] = p[1];
16391 suffix[2] = '\0';
16392 }
16393
16394 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
16395 mnemonicendp += simd_cmp_op[cmp_type].len;
16396 }
be92cb14
JB
16397 else
16398 {
16399 /* We have a reserved extension byte. Output it directly. */
16400 scratchbuf[0] = '$';
16401 print_operand_value (scratchbuf + 1, 1, cmp_type);
16402 oappend_maybe_intel (scratchbuf);
16403 scratchbuf[0] = '\0';
16404 }
16405}
16406
16407static const struct op xop_cmp_op[] =
16408{
16409 { STRING_COMMA_LEN ("lt") },
16410 { STRING_COMMA_LEN ("le") },
16411 { STRING_COMMA_LEN ("gt") },
16412 { STRING_COMMA_LEN ("ge") },
16413 { STRING_COMMA_LEN ("eq") },
16414 { STRING_COMMA_LEN ("neq") },
16415 { STRING_COMMA_LEN ("false") },
16416 { STRING_COMMA_LEN ("true") }
16417};
16418
16419static void
16420VPCOM_Fixup (int bytemode ATTRIBUTE_UNUSED,
16421 int sizeflag ATTRIBUTE_UNUSED)
16422{
16423 unsigned int cmp_type;
16424
16425 FETCH_DATA (the_info, codep + 1);
16426 cmp_type = *codep++ & 0xff;
16427 if (cmp_type < ARRAY_SIZE (xop_cmp_op))
16428 {
16429 char suffix[3];
16430 char *p = mnemonicendp - 2;
16431
16432 /* vpcom* can have both one- and two-lettered suffix. */
16433 if (p[0] == 'm')
16434 {
16435 p++;
16436 suffix[0] = p[0];
16437 suffix[1] = '\0';
16438 }
16439 else
16440 {
16441 suffix[0] = p[0];
16442 suffix[1] = p[1];
16443 suffix[2] = '\0';
16444 }
16445
16446 sprintf (p, "%s%s", xop_cmp_op[cmp_type].name, suffix);
16447 mnemonicendp += xop_cmp_op[cmp_type].len;
16448 }
43234a1e
L
16449 else
16450 {
16451 /* We have a reserved extension byte. Output it directly. */
16452 scratchbuf[0] = '$';
16453 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 16454 oappend_maybe_intel (scratchbuf);
43234a1e
L
16455 scratchbuf[0] = '\0';
16456 }
16457}
16458
ea397f5b
L
16459static const struct op pclmul_op[] =
16460{
16461 { STRING_COMMA_LEN ("lql") },
16462 { STRING_COMMA_LEN ("hql") },
16463 { STRING_COMMA_LEN ("lqh") },
16464 { STRING_COMMA_LEN ("hqh") }
c0f3af97
L
16465};
16466
16467static void
16468PCLMUL_Fixup (int bytemode ATTRIBUTE_UNUSED,
16469 int sizeflag ATTRIBUTE_UNUSED)
16470{
16471 unsigned int pclmul_type;
16472
16473 FETCH_DATA (the_info, codep + 1);
16474 pclmul_type = *codep++ & 0xff;
16475 switch (pclmul_type)
16476 {
16477 case 0x10:
16478 pclmul_type = 2;
16479 break;
16480 case 0x11:
16481 pclmul_type = 3;
16482 break;
16483 default:
16484 break;
7bb15c6f 16485 }
c0f3af97
L
16486 if (pclmul_type < ARRAY_SIZE (pclmul_op))
16487 {
16488 char suffix [4];
ea397f5b 16489 char *p = mnemonicendp - 3;
c0f3af97
L
16490 suffix[0] = p[0];
16491 suffix[1] = p[1];
16492 suffix[2] = p[2];
16493 suffix[3] = '\0';
ea397f5b
L
16494 sprintf (p, "%s%s", pclmul_op[pclmul_type].name, suffix);
16495 mnemonicendp += pclmul_op[pclmul_type].len;
c0f3af97
L
16496 }
16497 else
16498 {
16499 /* We have a reserved extension byte. Output it directly. */
16500 scratchbuf[0] = '$';
16501 print_operand_value (scratchbuf + 1, 1, pclmul_type);
9ce09ba2 16502 oappend_maybe_intel (scratchbuf);
c0f3af97
L
16503 scratchbuf[0] = '\0';
16504 }
16505}
16506
f1f8f695
L
16507static void
16508MOVBE_Fixup (int bytemode, int sizeflag)
16509{
16510 /* Add proper suffix to "movbe". */
ea397f5b 16511 char *p = mnemonicendp;
f1f8f695
L
16512
16513 switch (bytemode)
16514 {
16515 case v_mode:
16516 if (intel_syntax)
ea397f5b 16517 goto skip;
f1f8f695
L
16518
16519 USED_REX (REX_W);
16520 if (sizeflag & SUFFIX_ALWAYS)
16521 {
16522 if (rex & REX_W)
16523 *p++ = 'q';
f1f8f695 16524 else
f16cd0d5
L
16525 {
16526 if (sizeflag & DFLAG)
16527 *p++ = 'l';
16528 else
16529 *p++ = 'w';
16530 used_prefixes |= (prefixes & PREFIX_DATA);
16531 }
f1f8f695 16532 }
f1f8f695
L
16533 break;
16534 default:
16535 oappend (INTERNAL_DISASSEMBLER_ERROR);
16536 break;
16537 }
ea397f5b 16538 mnemonicendp = p;
f1f8f695
L
16539 *p = '\0';
16540
ea397f5b 16541skip:
f1f8f695
L
16542 OP_M (bytemode, sizeflag);
16543}
f88c9eb0
SP
16544
16545static void
16546OP_LWPCB_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16547{
16548 int reg;
16549 const char **names;
16550
16551 /* Skip mod/rm byte. */
16552 MODRM_CHECK;
16553 codep++;
16554
390a6789 16555 if (rex & REX_W)
f88c9eb0 16556 names = names64;
f88c9eb0 16557 else
ce7d077e 16558 names = names32;
f88c9eb0
SP
16559
16560 reg = modrm.rm;
16561 USED_REX (REX_B);
16562 if (rex & REX_B)
16563 reg += 8;
16564
16565 oappend (names[reg]);
16566}
16567
16568static void
16569OP_LWP_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16570{
16571 const char **names;
5f847646 16572 unsigned int reg = vex.register_specifier;
63c6fc6c 16573 vex.register_specifier = 0;
f88c9eb0 16574
390a6789 16575 if (rex & REX_W)
f88c9eb0 16576 names = names64;
f88c9eb0 16577 else
ce7d077e 16578 names = names32;
f88c9eb0 16579
5f847646
JB
16580 if (address_mode != mode_64bit)
16581 reg &= 7;
16582 oappend (names[reg]);
f88c9eb0 16583}
43234a1e
L
16584
16585static void
16586OP_Mask (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16587{
16588 if (!vex.evex
1ba585e8 16589 || (bytemode != mask_mode && bytemode != mask_bd_mode))
43234a1e
L
16590 abort ();
16591
16592 USED_REX (REX_R);
16593 if ((rex & REX_R) != 0 || !vex.r)
16594 {
16595 BadOp ();
16596 return;
16597 }
16598
16599 oappend (names_mask [modrm.reg]);
16600}
16601
16602static void
16603OP_Rounding (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16604{
16605 if (!vex.evex
16606 || (bytemode != evex_rounding_mode
70df6fc9 16607 && bytemode != evex_rounding_64_mode
43234a1e
L
16608 && bytemode != evex_sae_mode))
16609 abort ();
16610 if (modrm.mod == 3 && vex.b)
16611 switch (bytemode)
16612 {
70df6fc9
L
16613 case evex_rounding_64_mode:
16614 if (address_mode != mode_64bit)
16615 {
16616 oappend ("(bad)");
16617 break;
16618 }
16619 /* Fall through. */
43234a1e
L
16620 case evex_rounding_mode:
16621 oappend (names_rounding[vex.ll]);
16622 break;
16623 case evex_sae_mode:
16624 oappend ("{sae}");
16625 break;
16626 default:
16627 break;
16628 }
16629}
This page took 2.297746 seconds and 4 git commands to generate.