Update year range in copyright notice of binutils files
[deliverable/binutils-gdb.git] / opcodes / i386-dis.c
CommitLineData
252b5132 1/* Print i386 instructions for GDB, the GNU debugger.
82704155 2 Copyright (C) 1988-2019 Free Software Foundation, Inc.
252b5132 3
9b201bb5 4 This file is part of the GNU opcodes library.
20f0a1fc 5
9b201bb5 6 This library is free software; you can redistribute it and/or modify
20f0a1fc 7 it under the terms of the GNU General Public License as published by
9b201bb5
NC
8 the Free Software Foundation; either version 3, or (at your option)
9 any later version.
20f0a1fc 10
9b201bb5
NC
11 It is distributed in the hope that it will be useful, but WITHOUT
12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
14 License for more details.
20f0a1fc
NC
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
9b201bb5
NC
18 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
19 MA 02110-1301, USA. */
20
20f0a1fc
NC
21
22/* 80386 instruction printer by Pace Willisson (pace@prep.ai.mit.edu)
23 July 1988
24 modified by John Hassey (hassey@dg-rtp.dg.com)
25 x86-64 support added by Jan Hubicka (jh@suse.cz)
26 VIA PadLock support by Michal Ludvig (mludvig@suse.cz). */
27
28/* The main tables describing the instructions is essentially a copy
29 of the "Opcode Map" chapter (Appendix A) of the Intel 80386
30 Programmers Manual. Usually, there is a capital letter, followed
31 by a small letter. The capital letter tell the addressing mode,
32 and the small letter tells about the operand size. Refer to
33 the Intel manual for details. */
252b5132 34
252b5132 35#include "sysdep.h"
88c1242d 36#include "disassemble.h"
252b5132 37#include "opintl.h"
0b1cf022 38#include "opcode/i386.h"
85f10a01 39#include "libiberty.h"
252b5132
RH
40
41#include <setjmp.h>
42
26ca5450
AJ
43static int print_insn (bfd_vma, disassemble_info *);
44static void dofloat (int);
45static void OP_ST (int, int);
46static void OP_STi (int, int);
47static int putop (const char *, int);
48static void oappend (const char *);
49static void append_seg (void);
50static void OP_indirE (int, int);
51static void print_operand_value (char *, int, bfd_vma);
c0f3af97 52static void OP_E_register (int, int);
c1e679ec 53static void OP_E_memory (int, int);
5d669648 54static void print_displacement (char *, bfd_vma);
26ca5450
AJ
55static void OP_E (int, int);
56static void OP_G (int, int);
57static bfd_vma get64 (void);
58static bfd_signed_vma get32 (void);
59static bfd_signed_vma get32s (void);
60static int get16 (void);
61static void set_op (bfd_vma, int);
b844680a 62static void OP_Skip_MODRM (int, int);
26ca5450
AJ
63static void OP_REG (int, int);
64static void OP_IMREG (int, int);
65static void OP_I (int, int);
66static void OP_I64 (int, int);
67static void OP_sI (int, int);
68static void OP_J (int, int);
69static void OP_SEG (int, int);
70static void OP_DIR (int, int);
71static void OP_OFF (int, int);
72static void OP_OFF64 (int, int);
73static void ptr_reg (int, int);
74static void OP_ESreg (int, int);
75static void OP_DSreg (int, int);
76static void OP_C (int, int);
77static void OP_D (int, int);
78static void OP_T (int, int);
6f74c397 79static void OP_R (int, int);
26ca5450
AJ
80static void OP_MMX (int, int);
81static void OP_XMM (int, int);
82static void OP_EM (int, int);
83static void OP_EX (int, int);
4d9567e0
MM
84static void OP_EMC (int,int);
85static void OP_MXC (int,int);
26ca5450
AJ
86static void OP_MS (int, int);
87static void OP_XS (int, int);
cc0ec051 88static void OP_M (int, int);
c0f3af97
L
89static void OP_VEX (int, int);
90static void OP_EX_Vex (int, int);
922d8de8 91static void OP_EX_VexW (int, int);
a683cc34 92static void OP_EX_VexImmW (int, int);
c0f3af97 93static void OP_XMM_Vex (int, int);
922d8de8 94static void OP_XMM_VexW (int, int);
43234a1e 95static void OP_Rounding (int, int);
c0f3af97
L
96static void OP_REG_VexI4 (int, int);
97static void PCLMUL_Fixup (int, int);
c0f3af97 98static void VCMP_Fixup (int, int);
43234a1e 99static void VPCMP_Fixup (int, int);
be92cb14 100static void VPCOM_Fixup (int, int);
cc0ec051 101static void OP_0f07 (int, int);
b844680a
L
102static void OP_Monitor (int, int);
103static void OP_Mwait (int, int);
9916071f 104static void OP_Mwaitx (int, int);
46e883c5
L
105static void NOP_Fixup1 (int, int);
106static void NOP_Fixup2 (int, int);
26ca5450 107static void OP_3DNowSuffix (int, int);
ad19981d 108static void CMP_Fixup (int, int);
26ca5450 109static void BadOp (void);
35c52694 110static void REP_Fixup (int, int);
7e8b059b 111static void BND_Fixup (int, int);
04ef582a 112static void NOTRACK_Fixup (int, int);
42164a71
L
113static void HLE_Fixup1 (int, int);
114static void HLE_Fixup2 (int, int);
115static void HLE_Fixup3 (int, int);
f5804c90 116static void CMPXCHG8B_Fixup (int, int);
42903f7f 117static void XMM_Fixup (int, int);
381d071f 118static void CRC32_Fixup (int, int);
eacc9c89 119static void FXSAVE_Fixup (int, int);
15c7c1d8 120static void PCMPESTR_Fixup (int, int);
f88c9eb0
SP
121static void OP_LWPCB_E (int, int);
122static void OP_LWP_E (int, int);
5dd85c99
SP
123static void OP_Vex_2src_1 (int, int);
124static void OP_Vex_2src_2 (int, int);
c1e679ec 125
f1f8f695 126static void MOVBE_Fixup (int, int);
252b5132 127
43234a1e
L
128static void OP_Mask (int, int);
129
6608db57 130struct dis_private {
252b5132
RH
131 /* Points to first byte not fetched. */
132 bfd_byte *max_fetched;
0b1cf022 133 bfd_byte the_buffer[MAX_MNEM_SIZE];
252b5132 134 bfd_vma insn_start;
e396998b 135 int orig_sizeflag;
8df14d78 136 OPCODES_SIGJMP_BUF bailout;
252b5132
RH
137};
138
cb712a9e
L
139enum address_mode
140{
141 mode_16bit,
142 mode_32bit,
143 mode_64bit
144};
145
146enum address_mode address_mode;
52b15da3 147
5076851f
ILT
148/* Flags for the prefixes for the current instruction. See below. */
149static int prefixes;
150
52b15da3
JH
151/* REX prefix the current instruction. See below. */
152static int rex;
153/* Bits of REX we've already used. */
154static int rex_used;
d869730d 155/* REX bits in original REX prefix ignored. */
c0f3af97 156static int rex_ignored;
52b15da3
JH
157/* Mark parts used in the REX prefix. When we are testing for
158 empty prefix (for 8bit register REX extension), just mask it
159 out. Otherwise test for REX bit is excuse for existence of REX
160 only in case value is nonzero. */
161#define USED_REX(value) \
162 { \
163 if (value) \
161a04f6
L
164 { \
165 if ((rex & value)) \
166 rex_used |= (value) | REX_OPCODE; \
167 } \
52b15da3 168 else \
161a04f6 169 rex_used |= REX_OPCODE; \
52b15da3
JH
170 }
171
7d421014
ILT
172/* Flags for prefixes which we somehow handled when printing the
173 current instruction. */
174static int used_prefixes;
175
5076851f
ILT
176/* Flags stored in PREFIXES. */
177#define PREFIX_REPZ 1
178#define PREFIX_REPNZ 2
179#define PREFIX_LOCK 4
180#define PREFIX_CS 8
181#define PREFIX_SS 0x10
182#define PREFIX_DS 0x20
183#define PREFIX_ES 0x40
184#define PREFIX_FS 0x80
185#define PREFIX_GS 0x100
186#define PREFIX_DATA 0x200
187#define PREFIX_ADDR 0x400
188#define PREFIX_FWAIT 0x800
189
252b5132
RH
190/* Make sure that bytes from INFO->PRIVATE_DATA->BUFFER (inclusive)
191 to ADDR (exclusive) are valid. Returns 1 for success, longjmps
192 on error. */
193#define FETCH_DATA(info, addr) \
6608db57 194 ((addr) <= ((struct dis_private *) (info->private_data))->max_fetched \
252b5132
RH
195 ? 1 : fetch_data ((info), (addr)))
196
197static int
26ca5450 198fetch_data (struct disassemble_info *info, bfd_byte *addr)
252b5132
RH
199{
200 int status;
6608db57 201 struct dis_private *priv = (struct dis_private *) info->private_data;
252b5132
RH
202 bfd_vma start = priv->insn_start + (priv->max_fetched - priv->the_buffer);
203
0b1cf022 204 if (addr <= priv->the_buffer + MAX_MNEM_SIZE)
272c9217
JB
205 status = (*info->read_memory_func) (start,
206 priv->max_fetched,
207 addr - priv->max_fetched,
208 info);
209 else
210 status = -1;
252b5132
RH
211 if (status != 0)
212 {
7d421014 213 /* If we did manage to read at least one byte, then
db6eb5be
AM
214 print_insn_i386 will do something sensible. Otherwise, print
215 an error. We do that here because this is where we know
216 STATUS. */
7d421014 217 if (priv->max_fetched == priv->the_buffer)
5076851f 218 (*info->memory_error_func) (status, start, info);
8df14d78 219 OPCODES_SIGLONGJMP (priv->bailout, 1);
252b5132
RH
220 }
221 else
222 priv->max_fetched = addr;
223 return 1;
224}
225
bf890a93 226/* Possible values for prefix requirement. */
507bd325
L
227#define PREFIX_IGNORED_SHIFT 16
228#define PREFIX_IGNORED_REPZ (PREFIX_REPZ << PREFIX_IGNORED_SHIFT)
229#define PREFIX_IGNORED_REPNZ (PREFIX_REPNZ << PREFIX_IGNORED_SHIFT)
230#define PREFIX_IGNORED_DATA (PREFIX_DATA << PREFIX_IGNORED_SHIFT)
231#define PREFIX_IGNORED_ADDR (PREFIX_ADDR << PREFIX_IGNORED_SHIFT)
232#define PREFIX_IGNORED_LOCK (PREFIX_LOCK << PREFIX_IGNORED_SHIFT)
233
234/* Opcode prefixes. */
235#define PREFIX_OPCODE (PREFIX_REPZ \
236 | PREFIX_REPNZ \
237 | PREFIX_DATA)
238
239/* Prefixes ignored. */
240#define PREFIX_IGNORED (PREFIX_IGNORED_REPZ \
241 | PREFIX_IGNORED_REPNZ \
242 | PREFIX_IGNORED_DATA)
bf890a93 243
ce518a5f 244#define XX { NULL, 0 }
507bd325 245#define Bad_Opcode NULL, { { NULL, 0 } }, 0
ce518a5f
L
246
247#define Eb { OP_E, b_mode }
7e8b059b 248#define Ebnd { OP_E, bnd_mode }
b6169b20 249#define EbS { OP_E, b_swap_mode }
9f79e886 250#define EbndS { OP_E, bnd_swap_mode }
ce518a5f 251#define Ev { OP_E, v_mode }
de89d0a3 252#define Eva { OP_E, va_mode }
7e8b059b 253#define Ev_bnd { OP_E, v_bnd_mode }
b6169b20 254#define EvS { OP_E, v_swap_mode }
ce518a5f
L
255#define Ed { OP_E, d_mode }
256#define Edq { OP_E, dq_mode }
257#define Edqw { OP_E, dqw_mode }
42903f7f 258#define Edqb { OP_E, dqb_mode }
1ba585e8
IT
259#define Edb { OP_E, db_mode }
260#define Edw { OP_E, dw_mode }
42903f7f 261#define Edqd { OP_E, dqd_mode }
d20dee9e 262#define Edqa { OP_E, dqa_mode }
09335d05 263#define Eq { OP_E, q_mode }
07f5af7d 264#define indirEv { OP_indirE, indir_v_mode }
ce518a5f
L
265#define indirEp { OP_indirE, f_mode }
266#define stackEv { OP_E, stack_v_mode }
267#define Em { OP_E, m_mode }
268#define Ew { OP_E, w_mode }
269#define M { OP_M, 0 } /* lea, lgdt, etc. */
34b772a6 270#define Ma { OP_M, a_mode }
b844680a 271#define Mb { OP_M, b_mode }
d9a5e5e5 272#define Md { OP_M, d_mode }
f1f8f695 273#define Mo { OP_M, o_mode }
ce518a5f
L
274#define Mp { OP_M, f_mode } /* 32 or 48 bit memory operand for LDS, LES etc */
275#define Mq { OP_M, q_mode }
d276ec69 276#define Mv_bnd { OP_M, v_bndmk_mode }
4ee52178 277#define Mx { OP_M, x_mode }
c0f3af97 278#define Mxmm { OP_M, xmm_mode }
ce518a5f 279#define Gb { OP_G, b_mode }
7e8b059b 280#define Gbnd { OP_G, bnd_mode }
ce518a5f
L
281#define Gv { OP_G, v_mode }
282#define Gd { OP_G, d_mode }
283#define Gdq { OP_G, dq_mode }
284#define Gm { OP_G, m_mode }
c0a30a9f 285#define Gva { OP_G, va_mode }
ce518a5f 286#define Gw { OP_G, w_mode }
6f74c397 287#define Rd { OP_R, d_mode }
43234a1e 288#define Rdq { OP_R, dq_mode }
6f74c397 289#define Rm { OP_R, m_mode }
ce518a5f
L
290#define Ib { OP_I, b_mode }
291#define sIb { OP_sI, b_mode } /* sign extened byte */
e3949f17 292#define sIbT { OP_sI, b_T_mode } /* sign extened byte like 'T' */
ce518a5f 293#define Iv { OP_I, v_mode }
7bb15c6f 294#define sIv { OP_sI, v_mode }
ce518a5f
L
295#define Iq { OP_I, q_mode }
296#define Iv64 { OP_I64, v_mode }
297#define Iw { OP_I, w_mode }
298#define I1 { OP_I, const_1_mode }
299#define Jb { OP_J, b_mode }
300#define Jv { OP_J, v_mode }
301#define Cm { OP_C, m_mode }
302#define Dm { OP_D, m_mode }
303#define Td { OP_T, d_mode }
b844680a 304#define Skip_MODRM { OP_Skip_MODRM, 0 }
ce518a5f
L
305
306#define RMeAX { OP_REG, eAX_reg }
307#define RMeBX { OP_REG, eBX_reg }
308#define RMeCX { OP_REG, eCX_reg }
309#define RMeDX { OP_REG, eDX_reg }
310#define RMeSP { OP_REG, eSP_reg }
311#define RMeBP { OP_REG, eBP_reg }
312#define RMeSI { OP_REG, eSI_reg }
313#define RMeDI { OP_REG, eDI_reg }
314#define RMrAX { OP_REG, rAX_reg }
315#define RMrBX { OP_REG, rBX_reg }
316#define RMrCX { OP_REG, rCX_reg }
317#define RMrDX { OP_REG, rDX_reg }
318#define RMrSP { OP_REG, rSP_reg }
319#define RMrBP { OP_REG, rBP_reg }
320#define RMrSI { OP_REG, rSI_reg }
321#define RMrDI { OP_REG, rDI_reg }
322#define RMAL { OP_REG, al_reg }
ce518a5f
L
323#define RMCL { OP_REG, cl_reg }
324#define RMDL { OP_REG, dl_reg }
325#define RMBL { OP_REG, bl_reg }
326#define RMAH { OP_REG, ah_reg }
327#define RMCH { OP_REG, ch_reg }
328#define RMDH { OP_REG, dh_reg }
329#define RMBH { OP_REG, bh_reg }
330#define RMAX { OP_REG, ax_reg }
331#define RMDX { OP_REG, dx_reg }
332
333#define eAX { OP_IMREG, eAX_reg }
334#define eBX { OP_IMREG, eBX_reg }
335#define eCX { OP_IMREG, eCX_reg }
336#define eDX { OP_IMREG, eDX_reg }
337#define eSP { OP_IMREG, eSP_reg }
338#define eBP { OP_IMREG, eBP_reg }
339#define eSI { OP_IMREG, eSI_reg }
340#define eDI { OP_IMREG, eDI_reg }
341#define AL { OP_IMREG, al_reg }
342#define CL { OP_IMREG, cl_reg }
343#define DL { OP_IMREG, dl_reg }
344#define BL { OP_IMREG, bl_reg }
345#define AH { OP_IMREG, ah_reg }
346#define CH { OP_IMREG, ch_reg }
347#define DH { OP_IMREG, dh_reg }
348#define BH { OP_IMREG, bh_reg }
349#define AX { OP_IMREG, ax_reg }
350#define DX { OP_IMREG, dx_reg }
351#define zAX { OP_IMREG, z_mode_ax_reg }
352#define indirDX { OP_IMREG, indir_dx_reg }
353
354#define Sw { OP_SEG, w_mode }
355#define Sv { OP_SEG, v_mode }
356#define Ap { OP_DIR, 0 }
357#define Ob { OP_OFF64, b_mode }
358#define Ov { OP_OFF64, v_mode }
359#define Xb { OP_DSreg, eSI_reg }
360#define Xv { OP_DSreg, eSI_reg }
361#define Xz { OP_DSreg, eSI_reg }
362#define Yb { OP_ESreg, eDI_reg }
363#define Yv { OP_ESreg, eDI_reg }
364#define DSBX { OP_DSreg, eBX_reg }
365
366#define es { OP_REG, es_reg }
367#define ss { OP_REG, ss_reg }
368#define cs { OP_REG, cs_reg }
369#define ds { OP_REG, ds_reg }
370#define fs { OP_REG, fs_reg }
371#define gs { OP_REG, gs_reg }
372
373#define MX { OP_MMX, 0 }
374#define XM { OP_XMM, 0 }
539f890d 375#define XMScalar { OP_XMM, scalar_mode }
6c30d220 376#define XMGatherQ { OP_XMM, vex_vsib_q_w_dq_mode }
c0f3af97 377#define XMM { OP_XMM, xmm_mode }
43234a1e 378#define XMxmmq { OP_XMM, xmmq_mode }
ce518a5f 379#define EM { OP_EM, v_mode }
b6169b20 380#define EMS { OP_EM, v_swap_mode }
09a2c6cf 381#define EMd { OP_EM, d_mode }
14051056 382#define EMx { OP_EM, x_mode }
53467f57 383#define EXbScalar { OP_EX, b_scalar_mode }
8976381e 384#define EXw { OP_EX, w_mode }
53467f57 385#define EXwScalar { OP_EX, w_scalar_mode }
09a2c6cf 386#define EXd { OP_EX, d_mode }
539f890d 387#define EXdScalar { OP_EX, d_scalar_mode }
fa99fab2 388#define EXdS { OP_EX, d_swap_mode }
43234a1e 389#define EXdScalarS { OP_EX, d_scalar_swap_mode }
09a2c6cf 390#define EXq { OP_EX, q_mode }
539f890d
L
391#define EXqScalar { OP_EX, q_scalar_mode }
392#define EXqScalarS { OP_EX, q_scalar_swap_mode }
b6169b20 393#define EXqS { OP_EX, q_swap_mode }
09a2c6cf 394#define EXx { OP_EX, x_mode }
b6169b20 395#define EXxS { OP_EX, x_swap_mode }
c0f3af97 396#define EXxmm { OP_EX, xmm_mode }
43234a1e 397#define EXymm { OP_EX, ymm_mode }
c0f3af97 398#define EXxmmq { OP_EX, xmmq_mode }
43234a1e 399#define EXEvexHalfBcstXmmq { OP_EX, evex_half_bcst_xmmq_mode }
6c30d220
L
400#define EXxmm_mb { OP_EX, xmm_mb_mode }
401#define EXxmm_mw { OP_EX, xmm_mw_mode }
402#define EXxmm_md { OP_EX, xmm_md_mode }
403#define EXxmm_mq { OP_EX, xmm_mq_mode }
43234a1e 404#define EXxmm_mdq { OP_EX, xmm_mdq_mode }
6c30d220
L
405#define EXxmmdw { OP_EX, xmmdw_mode }
406#define EXxmmqd { OP_EX, xmmqd_mode }
c0f3af97 407#define EXymmq { OP_EX, ymmq_mode }
0bfee649 408#define EXVexWdq { OP_EX, vex_w_dq_mode }
1c480963 409#define EXVexWdqScalar { OP_EX, vex_scalar_w_dq_mode }
43234a1e
L
410#define EXEvexXGscat { OP_EX, evex_x_gscat_mode }
411#define EXEvexXNoBcst { OP_EX, evex_x_nobcst_mode }
ce518a5f
L
412#define MS { OP_MS, v_mode }
413#define XS { OP_XS, v_mode }
09335d05 414#define EMCq { OP_EMC, q_mode }
ce518a5f 415#define MXC { OP_MXC, 0 }
ce518a5f 416#define OPSUF { OP_3DNowSuffix, 0 }
ad19981d 417#define CMP { CMP_Fixup, 0 }
42903f7f 418#define XMM0 { XMM_Fixup, 0 }
eacc9c89 419#define FXSAVE { FXSAVE_Fixup, 0 }
5dd85c99
SP
420#define Vex_2src_1 { OP_Vex_2src_1, 0 }
421#define Vex_2src_2 { OP_Vex_2src_2, 0 }
252b5132 422
c0f3af97 423#define Vex { OP_VEX, vex_mode }
539f890d 424#define VexScalar { OP_VEX, vex_scalar_mode }
6c30d220 425#define VexGatherQ { OP_VEX, vex_vsib_q_w_dq_mode }
c0f3af97
L
426#define Vex128 { OP_VEX, vex128_mode }
427#define Vex256 { OP_VEX, vex256_mode }
cb21baef 428#define VexGdq { OP_VEX, dq_mode }
c0f3af97 429#define EXdVex { OP_EX_Vex, d_mode }
fa99fab2 430#define EXdVexS { OP_EX_Vex, d_swap_mode }
539f890d 431#define EXdVexScalarS { OP_EX_Vex, d_scalar_swap_mode }
c0f3af97 432#define EXqVex { OP_EX_Vex, q_mode }
fa99fab2 433#define EXqVexS { OP_EX_Vex, q_swap_mode }
539f890d 434#define EXqVexScalarS { OP_EX_Vex, q_scalar_swap_mode }
922d8de8
DR
435#define EXVexW { OP_EX_VexW, x_mode }
436#define EXdVexW { OP_EX_VexW, d_mode }
437#define EXqVexW { OP_EX_VexW, q_mode }
a683cc34 438#define EXVexImmW { OP_EX_VexImmW, x_mode }
c0f3af97 439#define XMVex { OP_XMM_Vex, 0 }
539f890d 440#define XMVexScalar { OP_XMM_Vex, scalar_mode }
922d8de8 441#define XMVexW { OP_XMM_VexW, 0 }
c0f3af97
L
442#define XMVexI4 { OP_REG_VexI4, x_mode }
443#define PCLMUL { PCLMUL_Fixup, 0 }
c0f3af97 444#define VCMP { VCMP_Fixup, 0 }
43234a1e 445#define VPCMP { VPCMP_Fixup, 0 }
be92cb14 446#define VPCOM { VPCOM_Fixup, 0 }
43234a1e
L
447
448#define EXxEVexR { OP_Rounding, evex_rounding_mode }
70df6fc9 449#define EXxEVexR64 { OP_Rounding, evex_rounding_64_mode }
43234a1e
L
450#define EXxEVexS { OP_Rounding, evex_sae_mode }
451
452#define XMask { OP_Mask, mask_mode }
453#define MaskG { OP_G, mask_mode }
454#define MaskE { OP_E, mask_mode }
1ba585e8 455#define MaskBDE { OP_E, mask_bd_mode }
43234a1e
L
456#define MaskR { OP_R, mask_mode }
457#define MaskVex { OP_VEX, mask_mode }
c0f3af97 458
6c30d220 459#define MVexVSIBDWpX { OP_M, vex_vsib_d_w_dq_mode }
5fc35d96 460#define MVexVSIBDQWpX { OP_M, vex_vsib_d_w_d_mode }
6c30d220 461#define MVexVSIBQWpX { OP_M, vex_vsib_q_w_dq_mode }
5fc35d96 462#define MVexVSIBQDWpX { OP_M, vex_vsib_q_w_d_mode }
6c30d220 463
35c52694 464/* Used handle "rep" prefix for string instructions. */
ce518a5f
L
465#define Xbr { REP_Fixup, eSI_reg }
466#define Xvr { REP_Fixup, eSI_reg }
467#define Ybr { REP_Fixup, eDI_reg }
468#define Yvr { REP_Fixup, eDI_reg }
469#define Yzr { REP_Fixup, eDI_reg }
470#define indirDXr { REP_Fixup, indir_dx_reg }
471#define ALr { REP_Fixup, al_reg }
472#define eAXr { REP_Fixup, eAX_reg }
473
42164a71
L
474/* Used handle HLE prefix for lockable instructions. */
475#define Ebh1 { HLE_Fixup1, b_mode }
476#define Evh1 { HLE_Fixup1, v_mode }
477#define Ebh2 { HLE_Fixup2, b_mode }
478#define Evh2 { HLE_Fixup2, v_mode }
479#define Ebh3 { HLE_Fixup3, b_mode }
480#define Evh3 { HLE_Fixup3, v_mode }
481
7e8b059b 482#define BND { BND_Fixup, 0 }
04ef582a 483#define NOTRACK { NOTRACK_Fixup, 0 }
7e8b059b 484
ce518a5f
L
485#define cond_jump_flag { NULL, cond_jump_mode }
486#define loop_jcxz_flag { NULL, loop_jcxz_mode }
3ffd33cf 487
252b5132 488/* bits in sizeflag */
252b5132 489#define SUFFIX_ALWAYS 4
252b5132
RH
490#define AFLAG 2
491#define DFLAG 1
492
51e7da1b
L
493enum
494{
495 /* byte operand */
496 b_mode = 1,
497 /* byte operand with operand swapped */
3873ba12 498 b_swap_mode,
e3949f17
L
499 /* byte operand, sign extend like 'T' suffix */
500 b_T_mode,
51e7da1b 501 /* operand size depends on prefixes */
3873ba12 502 v_mode,
51e7da1b 503 /* operand size depends on prefixes with operand swapped */
3873ba12 504 v_swap_mode,
de89d0a3
IT
505 /* operand size depends on address prefix */
506 va_mode,
51e7da1b 507 /* word operand */
3873ba12 508 w_mode,
51e7da1b 509 /* double word operand */
3873ba12 510 d_mode,
51e7da1b 511 /* double word operand with operand swapped */
3873ba12 512 d_swap_mode,
51e7da1b 513 /* quad word operand */
3873ba12 514 q_mode,
51e7da1b 515 /* quad word operand with operand swapped */
3873ba12 516 q_swap_mode,
51e7da1b 517 /* ten-byte operand */
3873ba12 518 t_mode,
43234a1e
L
519 /* 16-byte XMM, 32-byte YMM or 64-byte ZMM operand. In EVEX with
520 broadcast enabled. */
3873ba12 521 x_mode,
43234a1e
L
522 /* Similar to x_mode, but with different EVEX mem shifts. */
523 evex_x_gscat_mode,
524 /* Similar to x_mode, but with disabled broadcast. */
525 evex_x_nobcst_mode,
526 /* Similar to x_mode, but with operands swapped and disabled broadcast
527 in EVEX. */
3873ba12 528 x_swap_mode,
51e7da1b 529 /* 16-byte XMM operand */
3873ba12 530 xmm_mode,
43234a1e
L
531 /* XMM, XMM or YMM register operand, or quad word, xmmword or ymmword
532 memory operand (depending on vector length). Broadcast isn't
533 allowed. */
3873ba12 534 xmmq_mode,
43234a1e
L
535 /* Same as xmmq_mode, but broadcast is allowed. */
536 evex_half_bcst_xmmq_mode,
6c30d220
L
537 /* XMM register or byte memory operand */
538 xmm_mb_mode,
539 /* XMM register or word memory operand */
540 xmm_mw_mode,
541 /* XMM register or double word memory operand */
542 xmm_md_mode,
543 /* XMM register or quad word memory operand */
544 xmm_mq_mode,
43234a1e
L
545 /* XMM register or double/quad word memory operand, depending on
546 VEX.W. */
547 xmm_mdq_mode,
548 /* 16-byte XMM, word, double word or quad word operand. */
6c30d220 549 xmmdw_mode,
43234a1e 550 /* 16-byte XMM, double word, quad word operand or xmm word operand. */
6c30d220 551 xmmqd_mode,
43234a1e
L
552 /* 32-byte YMM operand */
553 ymm_mode,
554 /* quad word, ymmword or zmmword memory operand. */
3873ba12 555 ymmq_mode,
6c30d220
L
556 /* 32-byte YMM or 16-byte word operand */
557 ymmxmm_mode,
51e7da1b 558 /* d_mode in 32bit, q_mode in 64bit mode. */
3873ba12 559 m_mode,
51e7da1b 560 /* pair of v_mode operands */
3873ba12
L
561 a_mode,
562 cond_jump_mode,
563 loop_jcxz_mode,
7e8b059b 564 v_bnd_mode,
d276ec69
JB
565 /* like v_bnd_mode in 32bit, no RIP-rel in 64bit mode. */
566 v_bndmk_mode,
51e7da1b 567 /* operand size depends on REX prefixes. */
3873ba12 568 dq_mode,
51e7da1b 569 /* registers like dq_mode, memory like w_mode. */
3873ba12 570 dqw_mode,
9f79e886 571 /* bounds operand */
7e8b059b 572 bnd_mode,
9f79e886
JB
573 /* bounds operand with operand swapped */
574 bnd_swap_mode,
51e7da1b 575 /* 4- or 6-byte pointer operand */
3873ba12
L
576 f_mode,
577 const_1_mode,
07f5af7d
L
578 /* v_mode for indirect branch opcodes. */
579 indir_v_mode,
51e7da1b 580 /* v_mode for stack-related opcodes. */
3873ba12 581 stack_v_mode,
51e7da1b 582 /* non-quad operand size depends on prefixes */
3873ba12 583 z_mode,
51e7da1b 584 /* 16-byte operand */
3873ba12 585 o_mode,
51e7da1b 586 /* registers like dq_mode, memory like b_mode. */
3873ba12 587 dqb_mode,
1ba585e8
IT
588 /* registers like d_mode, memory like b_mode. */
589 db_mode,
590 /* registers like d_mode, memory like w_mode. */
591 dw_mode,
51e7da1b 592 /* registers like dq_mode, memory like d_mode. */
3873ba12 593 dqd_mode,
d20dee9e
L
594 /* operand size depends on the W bit as well as address mode. */
595 dqa_mode,
51e7da1b 596 /* normal vex mode */
3873ba12 597 vex_mode,
51e7da1b 598 /* 128bit vex mode */
3873ba12 599 vex128_mode,
51e7da1b 600 /* 256bit vex mode */
3873ba12 601 vex256_mode,
51e7da1b 602 /* operand size depends on the VEX.W bit. */
3873ba12 603 vex_w_dq_mode,
d55ee72f 604
6c30d220
L
605 /* Similar to vex_w_dq_mode, with VSIB dword indices. */
606 vex_vsib_d_w_dq_mode,
5fc35d96
IT
607 /* Similar to vex_vsib_d_w_dq_mode, with smaller memory. */
608 vex_vsib_d_w_d_mode,
6c30d220
L
609 /* Similar to vex_w_dq_mode, with VSIB qword indices. */
610 vex_vsib_q_w_dq_mode,
5fc35d96
IT
611 /* Similar to vex_vsib_q_w_dq_mode, with smaller memory. */
612 vex_vsib_q_w_d_mode,
6c30d220 613
539f890d
L
614 /* scalar, ignore vector length. */
615 scalar_mode,
53467f57
IT
616 /* like b_mode, ignore vector length. */
617 b_scalar_mode,
618 /* like w_mode, ignore vector length. */
619 w_scalar_mode,
539f890d
L
620 /* like d_mode, ignore vector length. */
621 d_scalar_mode,
622 /* like d_swap_mode, ignore vector length. */
623 d_scalar_swap_mode,
624 /* like q_mode, ignore vector length. */
625 q_scalar_mode,
626 /* like q_swap_mode, ignore vector length. */
627 q_scalar_swap_mode,
628 /* like vex_mode, ignore vector length. */
629 vex_scalar_mode,
1c480963
L
630 /* like vex_w_dq_mode, ignore vector length. */
631 vex_scalar_w_dq_mode,
539f890d 632
43234a1e
L
633 /* Static rounding. */
634 evex_rounding_mode,
70df6fc9
L
635 /* Static rounding, 64-bit mode only. */
636 evex_rounding_64_mode,
43234a1e
L
637 /* Supress all exceptions. */
638 evex_sae_mode,
639
640 /* Mask register operand. */
641 mask_mode,
1ba585e8
IT
642 /* Mask register operand. */
643 mask_bd_mode,
43234a1e 644
3873ba12
L
645 es_reg,
646 cs_reg,
647 ss_reg,
648 ds_reg,
649 fs_reg,
650 gs_reg,
d55ee72f 651
3873ba12
L
652 eAX_reg,
653 eCX_reg,
654 eDX_reg,
655 eBX_reg,
656 eSP_reg,
657 eBP_reg,
658 eSI_reg,
659 eDI_reg,
d55ee72f 660
3873ba12
L
661 al_reg,
662 cl_reg,
663 dl_reg,
664 bl_reg,
665 ah_reg,
666 ch_reg,
667 dh_reg,
668 bh_reg,
d55ee72f 669
3873ba12
L
670 ax_reg,
671 cx_reg,
672 dx_reg,
673 bx_reg,
674 sp_reg,
675 bp_reg,
676 si_reg,
677 di_reg,
d55ee72f 678
3873ba12
L
679 rAX_reg,
680 rCX_reg,
681 rDX_reg,
682 rBX_reg,
683 rSP_reg,
684 rBP_reg,
685 rSI_reg,
686 rDI_reg,
d55ee72f 687
3873ba12
L
688 z_mode_ax_reg,
689 indir_dx_reg
51e7da1b 690};
252b5132 691
51e7da1b
L
692enum
693{
694 FLOATCODE = 1,
3873ba12
L
695 USE_REG_TABLE,
696 USE_MOD_TABLE,
697 USE_RM_TABLE,
698 USE_PREFIX_TABLE,
699 USE_X86_64_TABLE,
700 USE_3BYTE_TABLE,
f88c9eb0 701 USE_XOP_8F_TABLE,
3873ba12
L
702 USE_VEX_C4_TABLE,
703 USE_VEX_C5_TABLE,
9e30b8e0 704 USE_VEX_LEN_TABLE,
43234a1e 705 USE_VEX_W_TABLE,
04e2a182
L
706 USE_EVEX_TABLE,
707 USE_EVEX_LEN_TABLE
51e7da1b 708};
6439fc28 709
bf890a93 710#define FLOAT NULL, { { NULL, FLOATCODE } }, 0
4efba78c 711
bf890a93
IT
712#define DIS386(T, I) NULL, { { NULL, (T)}, { NULL, (I) } }, 0
713#define DIS386_PREFIX(T, I, P) NULL, { { NULL, (T)}, { NULL, (I) } }, P
1ceb70f8
L
714#define REG_TABLE(I) DIS386 (USE_REG_TABLE, (I))
715#define MOD_TABLE(I) DIS386 (USE_MOD_TABLE, (I))
716#define RM_TABLE(I) DIS386 (USE_RM_TABLE, (I))
717#define PREFIX_TABLE(I) DIS386 (USE_PREFIX_TABLE, (I))
4e7d34a6
L
718#define X86_64_TABLE(I) DIS386 (USE_X86_64_TABLE, (I))
719#define THREE_BYTE_TABLE(I) DIS386 (USE_3BYTE_TABLE, (I))
bf890a93 720#define THREE_BYTE_TABLE_PREFIX(I, P) DIS386_PREFIX (USE_3BYTE_TABLE, (I), P)
f88c9eb0 721#define XOP_8F_TABLE(I) DIS386 (USE_XOP_8F_TABLE, (I))
c0f3af97
L
722#define VEX_C4_TABLE(I) DIS386 (USE_VEX_C4_TABLE, (I))
723#define VEX_C5_TABLE(I) DIS386 (USE_VEX_C5_TABLE, (I))
724#define VEX_LEN_TABLE(I) DIS386 (USE_VEX_LEN_TABLE, (I))
9e30b8e0 725#define VEX_W_TABLE(I) DIS386 (USE_VEX_W_TABLE, (I))
43234a1e 726#define EVEX_TABLE(I) DIS386 (USE_EVEX_TABLE, (I))
04e2a182 727#define EVEX_LEN_TABLE(I) DIS386 (USE_EVEX_LEN_TABLE, (I))
1ceb70f8 728
51e7da1b
L
729enum
730{
731 REG_80 = 0,
3873ba12 732 REG_81,
7148c369 733 REG_83,
3873ba12
L
734 REG_8F,
735 REG_C0,
736 REG_C1,
737 REG_C6,
738 REG_C7,
739 REG_D0,
740 REG_D1,
741 REG_D2,
742 REG_D3,
743 REG_F6,
744 REG_F7,
745 REG_FE,
746 REG_FF,
747 REG_0F00,
748 REG_0F01,
749 REG_0F0D,
750 REG_0F18,
c48935d7 751 REG_0F1C_MOD_0,
603555e5 752 REG_0F1E_MOD_3,
3873ba12
L
753 REG_0F71,
754 REG_0F72,
755 REG_0F73,
756 REG_0FA6,
757 REG_0FA7,
758 REG_0FAE,
759 REG_0FBA,
760 REG_0FC7,
592a252b
L
761 REG_VEX_0F71,
762 REG_VEX_0F72,
763 REG_VEX_0F73,
764 REG_VEX_0FAE,
f12dc422 765 REG_VEX_0F38F3,
f88c9eb0 766 REG_XOP_LWPCB,
2a2a0f38
QN
767 REG_XOP_LWP,
768 REG_XOP_TBM_01,
43234a1e
L
769 REG_XOP_TBM_02,
770
1ba585e8 771 REG_EVEX_0F71,
43234a1e
L
772 REG_EVEX_0F72,
773 REG_EVEX_0F73,
774 REG_EVEX_0F38C6,
775 REG_EVEX_0F38C7
51e7da1b 776};
1ceb70f8 777
51e7da1b
L
778enum
779{
780 MOD_8D = 0,
42164a71
L
781 MOD_C6_REG_7,
782 MOD_C7_REG_7,
4a357820
MZ
783 MOD_FF_REG_3,
784 MOD_FF_REG_5,
3873ba12
L
785 MOD_0F01_REG_0,
786 MOD_0F01_REG_1,
787 MOD_0F01_REG_2,
788 MOD_0F01_REG_3,
8eab4136 789 MOD_0F01_REG_5,
3873ba12
L
790 MOD_0F01_REG_7,
791 MOD_0F12_PREFIX_0,
792 MOD_0F13,
793 MOD_0F16_PREFIX_0,
794 MOD_0F17,
795 MOD_0F18_REG_0,
796 MOD_0F18_REG_1,
797 MOD_0F18_REG_2,
798 MOD_0F18_REG_3,
d7189fa5
RM
799 MOD_0F18_REG_4,
800 MOD_0F18_REG_5,
801 MOD_0F18_REG_6,
802 MOD_0F18_REG_7,
7e8b059b
L
803 MOD_0F1A_PREFIX_0,
804 MOD_0F1B_PREFIX_0,
805 MOD_0F1B_PREFIX_1,
c48935d7 806 MOD_0F1C_PREFIX_0,
603555e5 807 MOD_0F1E_PREFIX_1,
3873ba12
L
808 MOD_0F24,
809 MOD_0F26,
810 MOD_0F2B_PREFIX_0,
811 MOD_0F2B_PREFIX_1,
812 MOD_0F2B_PREFIX_2,
813 MOD_0F2B_PREFIX_3,
814 MOD_0F51,
815 MOD_0F71_REG_2,
816 MOD_0F71_REG_4,
817 MOD_0F71_REG_6,
818 MOD_0F72_REG_2,
819 MOD_0F72_REG_4,
820 MOD_0F72_REG_6,
821 MOD_0F73_REG_2,
822 MOD_0F73_REG_3,
823 MOD_0F73_REG_6,
824 MOD_0F73_REG_7,
825 MOD_0FAE_REG_0,
826 MOD_0FAE_REG_1,
827 MOD_0FAE_REG_2,
828 MOD_0FAE_REG_3,
829 MOD_0FAE_REG_4,
830 MOD_0FAE_REG_5,
831 MOD_0FAE_REG_6,
832 MOD_0FAE_REG_7,
833 MOD_0FB2,
834 MOD_0FB4,
835 MOD_0FB5,
a8484f96 836 MOD_0FC3,
963f3586
IT
837 MOD_0FC7_REG_3,
838 MOD_0FC7_REG_4,
839 MOD_0FC7_REG_5,
3873ba12
L
840 MOD_0FC7_REG_6,
841 MOD_0FC7_REG_7,
842 MOD_0FD7,
843 MOD_0FE7_PREFIX_2,
844 MOD_0FF0_PREFIX_3,
845 MOD_0F382A_PREFIX_2,
603555e5
L
846 MOD_0F38F5_PREFIX_2,
847 MOD_0F38F6_PREFIX_0,
c0a30a9f
L
848 MOD_0F38F8_PREFIX_2,
849 MOD_0F38F9_PREFIX_0,
3873ba12
L
850 MOD_62_32BIT,
851 MOD_C4_32BIT,
852 MOD_C5_32BIT,
592a252b
L
853 MOD_VEX_0F12_PREFIX_0,
854 MOD_VEX_0F13,
855 MOD_VEX_0F16_PREFIX_0,
856 MOD_VEX_0F17,
857 MOD_VEX_0F2B,
ab4e4ed5
AF
858 MOD_VEX_W_0_0F41_P_0_LEN_1,
859 MOD_VEX_W_1_0F41_P_0_LEN_1,
860 MOD_VEX_W_0_0F41_P_2_LEN_1,
861 MOD_VEX_W_1_0F41_P_2_LEN_1,
862 MOD_VEX_W_0_0F42_P_0_LEN_1,
863 MOD_VEX_W_1_0F42_P_0_LEN_1,
864 MOD_VEX_W_0_0F42_P_2_LEN_1,
865 MOD_VEX_W_1_0F42_P_2_LEN_1,
866 MOD_VEX_W_0_0F44_P_0_LEN_1,
867 MOD_VEX_W_1_0F44_P_0_LEN_1,
868 MOD_VEX_W_0_0F44_P_2_LEN_1,
869 MOD_VEX_W_1_0F44_P_2_LEN_1,
870 MOD_VEX_W_0_0F45_P_0_LEN_1,
871 MOD_VEX_W_1_0F45_P_0_LEN_1,
872 MOD_VEX_W_0_0F45_P_2_LEN_1,
873 MOD_VEX_W_1_0F45_P_2_LEN_1,
874 MOD_VEX_W_0_0F46_P_0_LEN_1,
875 MOD_VEX_W_1_0F46_P_0_LEN_1,
876 MOD_VEX_W_0_0F46_P_2_LEN_1,
877 MOD_VEX_W_1_0F46_P_2_LEN_1,
878 MOD_VEX_W_0_0F47_P_0_LEN_1,
879 MOD_VEX_W_1_0F47_P_0_LEN_1,
880 MOD_VEX_W_0_0F47_P_2_LEN_1,
881 MOD_VEX_W_1_0F47_P_2_LEN_1,
882 MOD_VEX_W_0_0F4A_P_0_LEN_1,
883 MOD_VEX_W_1_0F4A_P_0_LEN_1,
884 MOD_VEX_W_0_0F4A_P_2_LEN_1,
885 MOD_VEX_W_1_0F4A_P_2_LEN_1,
886 MOD_VEX_W_0_0F4B_P_0_LEN_1,
887 MOD_VEX_W_1_0F4B_P_0_LEN_1,
888 MOD_VEX_W_0_0F4B_P_2_LEN_1,
592a252b
L
889 MOD_VEX_0F50,
890 MOD_VEX_0F71_REG_2,
891 MOD_VEX_0F71_REG_4,
892 MOD_VEX_0F71_REG_6,
893 MOD_VEX_0F72_REG_2,
894 MOD_VEX_0F72_REG_4,
895 MOD_VEX_0F72_REG_6,
896 MOD_VEX_0F73_REG_2,
897 MOD_VEX_0F73_REG_3,
898 MOD_VEX_0F73_REG_6,
899 MOD_VEX_0F73_REG_7,
ab4e4ed5
AF
900 MOD_VEX_W_0_0F91_P_0_LEN_0,
901 MOD_VEX_W_1_0F91_P_0_LEN_0,
902 MOD_VEX_W_0_0F91_P_2_LEN_0,
903 MOD_VEX_W_1_0F91_P_2_LEN_0,
904 MOD_VEX_W_0_0F92_P_0_LEN_0,
905 MOD_VEX_W_0_0F92_P_2_LEN_0,
58a211d2 906 MOD_VEX_0F92_P_3_LEN_0,
ab4e4ed5
AF
907 MOD_VEX_W_0_0F93_P_0_LEN_0,
908 MOD_VEX_W_0_0F93_P_2_LEN_0,
58a211d2 909 MOD_VEX_0F93_P_3_LEN_0,
ab4e4ed5
AF
910 MOD_VEX_W_0_0F98_P_0_LEN_0,
911 MOD_VEX_W_1_0F98_P_0_LEN_0,
912 MOD_VEX_W_0_0F98_P_2_LEN_0,
913 MOD_VEX_W_1_0F98_P_2_LEN_0,
914 MOD_VEX_W_0_0F99_P_0_LEN_0,
915 MOD_VEX_W_1_0F99_P_0_LEN_0,
916 MOD_VEX_W_0_0F99_P_2_LEN_0,
917 MOD_VEX_W_1_0F99_P_2_LEN_0,
592a252b
L
918 MOD_VEX_0FAE_REG_2,
919 MOD_VEX_0FAE_REG_3,
920 MOD_VEX_0FD7_PREFIX_2,
921 MOD_VEX_0FE7_PREFIX_2,
922 MOD_VEX_0FF0_PREFIX_3,
592a252b
L
923 MOD_VEX_0F381A_PREFIX_2,
924 MOD_VEX_0F382A_PREFIX_2,
925 MOD_VEX_0F382C_PREFIX_2,
926 MOD_VEX_0F382D_PREFIX_2,
927 MOD_VEX_0F382E_PREFIX_2,
6c30d220
L
928 MOD_VEX_0F382F_PREFIX_2,
929 MOD_VEX_0F385A_PREFIX_2,
930 MOD_VEX_0F388C_PREFIX_2,
931 MOD_VEX_0F388E_PREFIX_2,
ab4e4ed5
AF
932 MOD_VEX_W_0_0F3A30_P_2_LEN_0,
933 MOD_VEX_W_1_0F3A30_P_2_LEN_0,
934 MOD_VEX_W_0_0F3A31_P_2_LEN_0,
935 MOD_VEX_W_1_0F3A31_P_2_LEN_0,
936 MOD_VEX_W_0_0F3A32_P_2_LEN_0,
937 MOD_VEX_W_1_0F3A32_P_2_LEN_0,
938 MOD_VEX_W_0_0F3A33_P_2_LEN_0,
939 MOD_VEX_W_1_0F3A33_P_2_LEN_0,
43234a1e
L
940
941 MOD_EVEX_0F10_PREFIX_1,
942 MOD_EVEX_0F10_PREFIX_3,
943 MOD_EVEX_0F11_PREFIX_1,
944 MOD_EVEX_0F11_PREFIX_3,
945 MOD_EVEX_0F12_PREFIX_0,
946 MOD_EVEX_0F16_PREFIX_0,
947 MOD_EVEX_0F38C6_REG_1,
948 MOD_EVEX_0F38C6_REG_2,
949 MOD_EVEX_0F38C6_REG_5,
950 MOD_EVEX_0F38C6_REG_6,
951 MOD_EVEX_0F38C7_REG_1,
952 MOD_EVEX_0F38C7_REG_2,
953 MOD_EVEX_0F38C7_REG_5,
954 MOD_EVEX_0F38C7_REG_6
51e7da1b 955};
1ceb70f8 956
51e7da1b
L
957enum
958{
42164a71
L
959 RM_C6_REG_7 = 0,
960 RM_C7_REG_7,
961 RM_0F01_REG_0,
3873ba12
L
962 RM_0F01_REG_1,
963 RM_0F01_REG_2,
964 RM_0F01_REG_3,
8eab4136 965 RM_0F01_REG_5,
3873ba12 966 RM_0F01_REG_7,
603555e5 967 RM_0F1E_MOD_3_REG_7,
3873ba12
L
968 RM_0FAE_REG_6,
969 RM_0FAE_REG_7
51e7da1b 970};
1ceb70f8 971
51e7da1b
L
972enum
973{
974 PREFIX_90 = 0,
603555e5 975 PREFIX_MOD_0_0F01_REG_5,
2234eee6 976 PREFIX_MOD_3_0F01_REG_5_RM_0,
603555e5 977 PREFIX_MOD_3_0F01_REG_5_RM_2,
3233d7d0 978 PREFIX_0F09,
3873ba12
L
979 PREFIX_0F10,
980 PREFIX_0F11,
981 PREFIX_0F12,
982 PREFIX_0F16,
7e8b059b
L
983 PREFIX_0F1A,
984 PREFIX_0F1B,
c48935d7 985 PREFIX_0F1C,
603555e5 986 PREFIX_0F1E,
3873ba12
L
987 PREFIX_0F2A,
988 PREFIX_0F2B,
989 PREFIX_0F2C,
990 PREFIX_0F2D,
991 PREFIX_0F2E,
992 PREFIX_0F2F,
993 PREFIX_0F51,
994 PREFIX_0F52,
995 PREFIX_0F53,
996 PREFIX_0F58,
997 PREFIX_0F59,
998 PREFIX_0F5A,
999 PREFIX_0F5B,
1000 PREFIX_0F5C,
1001 PREFIX_0F5D,
1002 PREFIX_0F5E,
1003 PREFIX_0F5F,
1004 PREFIX_0F60,
1005 PREFIX_0F61,
1006 PREFIX_0F62,
1007 PREFIX_0F6C,
1008 PREFIX_0F6D,
1009 PREFIX_0F6F,
1010 PREFIX_0F70,
1011 PREFIX_0F73_REG_3,
1012 PREFIX_0F73_REG_7,
1013 PREFIX_0F78,
1014 PREFIX_0F79,
1015 PREFIX_0F7C,
1016 PREFIX_0F7D,
1017 PREFIX_0F7E,
1018 PREFIX_0F7F,
c7b8aa3a
L
1019 PREFIX_0FAE_REG_0,
1020 PREFIX_0FAE_REG_1,
1021 PREFIX_0FAE_REG_2,
1022 PREFIX_0FAE_REG_3,
6b40c462
L
1023 PREFIX_MOD_0_0FAE_REG_4,
1024 PREFIX_MOD_3_0FAE_REG_4,
603555e5 1025 PREFIX_MOD_0_0FAE_REG_5,
2234eee6 1026 PREFIX_MOD_3_0FAE_REG_5,
de89d0a3
IT
1027 PREFIX_MOD_0_0FAE_REG_6,
1028 PREFIX_MOD_1_0FAE_REG_6,
963f3586 1029 PREFIX_0FAE_REG_7,
3873ba12 1030 PREFIX_0FB8,
f12dc422 1031 PREFIX_0FBC,
3873ba12
L
1032 PREFIX_0FBD,
1033 PREFIX_0FC2,
a8484f96 1034 PREFIX_MOD_0_0FC3,
f24bcbaa
L
1035 PREFIX_MOD_0_0FC7_REG_6,
1036 PREFIX_MOD_3_0FC7_REG_6,
1037 PREFIX_MOD_3_0FC7_REG_7,
3873ba12
L
1038 PREFIX_0FD0,
1039 PREFIX_0FD6,
1040 PREFIX_0FE6,
1041 PREFIX_0FE7,
1042 PREFIX_0FF0,
1043 PREFIX_0FF7,
1044 PREFIX_0F3810,
1045 PREFIX_0F3814,
1046 PREFIX_0F3815,
1047 PREFIX_0F3817,
1048 PREFIX_0F3820,
1049 PREFIX_0F3821,
1050 PREFIX_0F3822,
1051 PREFIX_0F3823,
1052 PREFIX_0F3824,
1053 PREFIX_0F3825,
1054 PREFIX_0F3828,
1055 PREFIX_0F3829,
1056 PREFIX_0F382A,
1057 PREFIX_0F382B,
1058 PREFIX_0F3830,
1059 PREFIX_0F3831,
1060 PREFIX_0F3832,
1061 PREFIX_0F3833,
1062 PREFIX_0F3834,
1063 PREFIX_0F3835,
1064 PREFIX_0F3837,
1065 PREFIX_0F3838,
1066 PREFIX_0F3839,
1067 PREFIX_0F383A,
1068 PREFIX_0F383B,
1069 PREFIX_0F383C,
1070 PREFIX_0F383D,
1071 PREFIX_0F383E,
1072 PREFIX_0F383F,
1073 PREFIX_0F3840,
1074 PREFIX_0F3841,
1075 PREFIX_0F3880,
1076 PREFIX_0F3881,
6c30d220 1077 PREFIX_0F3882,
a0046408
L
1078 PREFIX_0F38C8,
1079 PREFIX_0F38C9,
1080 PREFIX_0F38CA,
1081 PREFIX_0F38CB,
1082 PREFIX_0F38CC,
1083 PREFIX_0F38CD,
48521003 1084 PREFIX_0F38CF,
3873ba12
L
1085 PREFIX_0F38DB,
1086 PREFIX_0F38DC,
1087 PREFIX_0F38DD,
1088 PREFIX_0F38DE,
1089 PREFIX_0F38DF,
1090 PREFIX_0F38F0,
1091 PREFIX_0F38F1,
603555e5 1092 PREFIX_0F38F5,
e2e1fcde 1093 PREFIX_0F38F6,
c0a30a9f
L
1094 PREFIX_0F38F8,
1095 PREFIX_0F38F9,
3873ba12
L
1096 PREFIX_0F3A08,
1097 PREFIX_0F3A09,
1098 PREFIX_0F3A0A,
1099 PREFIX_0F3A0B,
1100 PREFIX_0F3A0C,
1101 PREFIX_0F3A0D,
1102 PREFIX_0F3A0E,
1103 PREFIX_0F3A14,
1104 PREFIX_0F3A15,
1105 PREFIX_0F3A16,
1106 PREFIX_0F3A17,
1107 PREFIX_0F3A20,
1108 PREFIX_0F3A21,
1109 PREFIX_0F3A22,
1110 PREFIX_0F3A40,
1111 PREFIX_0F3A41,
1112 PREFIX_0F3A42,
1113 PREFIX_0F3A44,
1114 PREFIX_0F3A60,
1115 PREFIX_0F3A61,
1116 PREFIX_0F3A62,
1117 PREFIX_0F3A63,
a0046408 1118 PREFIX_0F3ACC,
48521003
IT
1119 PREFIX_0F3ACE,
1120 PREFIX_0F3ACF,
3873ba12 1121 PREFIX_0F3ADF,
592a252b
L
1122 PREFIX_VEX_0F10,
1123 PREFIX_VEX_0F11,
1124 PREFIX_VEX_0F12,
1125 PREFIX_VEX_0F16,
1126 PREFIX_VEX_0F2A,
1127 PREFIX_VEX_0F2C,
1128 PREFIX_VEX_0F2D,
1129 PREFIX_VEX_0F2E,
1130 PREFIX_VEX_0F2F,
43234a1e
L
1131 PREFIX_VEX_0F41,
1132 PREFIX_VEX_0F42,
1133 PREFIX_VEX_0F44,
1134 PREFIX_VEX_0F45,
1135 PREFIX_VEX_0F46,
1136 PREFIX_VEX_0F47,
1ba585e8 1137 PREFIX_VEX_0F4A,
43234a1e 1138 PREFIX_VEX_0F4B,
592a252b
L
1139 PREFIX_VEX_0F51,
1140 PREFIX_VEX_0F52,
1141 PREFIX_VEX_0F53,
1142 PREFIX_VEX_0F58,
1143 PREFIX_VEX_0F59,
1144 PREFIX_VEX_0F5A,
1145 PREFIX_VEX_0F5B,
1146 PREFIX_VEX_0F5C,
1147 PREFIX_VEX_0F5D,
1148 PREFIX_VEX_0F5E,
1149 PREFIX_VEX_0F5F,
1150 PREFIX_VEX_0F60,
1151 PREFIX_VEX_0F61,
1152 PREFIX_VEX_0F62,
1153 PREFIX_VEX_0F63,
1154 PREFIX_VEX_0F64,
1155 PREFIX_VEX_0F65,
1156 PREFIX_VEX_0F66,
1157 PREFIX_VEX_0F67,
1158 PREFIX_VEX_0F68,
1159 PREFIX_VEX_0F69,
1160 PREFIX_VEX_0F6A,
1161 PREFIX_VEX_0F6B,
1162 PREFIX_VEX_0F6C,
1163 PREFIX_VEX_0F6D,
1164 PREFIX_VEX_0F6E,
1165 PREFIX_VEX_0F6F,
1166 PREFIX_VEX_0F70,
1167 PREFIX_VEX_0F71_REG_2,
1168 PREFIX_VEX_0F71_REG_4,
1169 PREFIX_VEX_0F71_REG_6,
1170 PREFIX_VEX_0F72_REG_2,
1171 PREFIX_VEX_0F72_REG_4,
1172 PREFIX_VEX_0F72_REG_6,
1173 PREFIX_VEX_0F73_REG_2,
1174 PREFIX_VEX_0F73_REG_3,
1175 PREFIX_VEX_0F73_REG_6,
1176 PREFIX_VEX_0F73_REG_7,
1177 PREFIX_VEX_0F74,
1178 PREFIX_VEX_0F75,
1179 PREFIX_VEX_0F76,
1180 PREFIX_VEX_0F77,
1181 PREFIX_VEX_0F7C,
1182 PREFIX_VEX_0F7D,
1183 PREFIX_VEX_0F7E,
1184 PREFIX_VEX_0F7F,
43234a1e
L
1185 PREFIX_VEX_0F90,
1186 PREFIX_VEX_0F91,
1187 PREFIX_VEX_0F92,
1188 PREFIX_VEX_0F93,
1189 PREFIX_VEX_0F98,
1ba585e8 1190 PREFIX_VEX_0F99,
592a252b
L
1191 PREFIX_VEX_0FC2,
1192 PREFIX_VEX_0FC4,
1193 PREFIX_VEX_0FC5,
1194 PREFIX_VEX_0FD0,
1195 PREFIX_VEX_0FD1,
1196 PREFIX_VEX_0FD2,
1197 PREFIX_VEX_0FD3,
1198 PREFIX_VEX_0FD4,
1199 PREFIX_VEX_0FD5,
1200 PREFIX_VEX_0FD6,
1201 PREFIX_VEX_0FD7,
1202 PREFIX_VEX_0FD8,
1203 PREFIX_VEX_0FD9,
1204 PREFIX_VEX_0FDA,
1205 PREFIX_VEX_0FDB,
1206 PREFIX_VEX_0FDC,
1207 PREFIX_VEX_0FDD,
1208 PREFIX_VEX_0FDE,
1209 PREFIX_VEX_0FDF,
1210 PREFIX_VEX_0FE0,
1211 PREFIX_VEX_0FE1,
1212 PREFIX_VEX_0FE2,
1213 PREFIX_VEX_0FE3,
1214 PREFIX_VEX_0FE4,
1215 PREFIX_VEX_0FE5,
1216 PREFIX_VEX_0FE6,
1217 PREFIX_VEX_0FE7,
1218 PREFIX_VEX_0FE8,
1219 PREFIX_VEX_0FE9,
1220 PREFIX_VEX_0FEA,
1221 PREFIX_VEX_0FEB,
1222 PREFIX_VEX_0FEC,
1223 PREFIX_VEX_0FED,
1224 PREFIX_VEX_0FEE,
1225 PREFIX_VEX_0FEF,
1226 PREFIX_VEX_0FF0,
1227 PREFIX_VEX_0FF1,
1228 PREFIX_VEX_0FF2,
1229 PREFIX_VEX_0FF3,
1230 PREFIX_VEX_0FF4,
1231 PREFIX_VEX_0FF5,
1232 PREFIX_VEX_0FF6,
1233 PREFIX_VEX_0FF7,
1234 PREFIX_VEX_0FF8,
1235 PREFIX_VEX_0FF9,
1236 PREFIX_VEX_0FFA,
1237 PREFIX_VEX_0FFB,
1238 PREFIX_VEX_0FFC,
1239 PREFIX_VEX_0FFD,
1240 PREFIX_VEX_0FFE,
1241 PREFIX_VEX_0F3800,
1242 PREFIX_VEX_0F3801,
1243 PREFIX_VEX_0F3802,
1244 PREFIX_VEX_0F3803,
1245 PREFIX_VEX_0F3804,
1246 PREFIX_VEX_0F3805,
1247 PREFIX_VEX_0F3806,
1248 PREFIX_VEX_0F3807,
1249 PREFIX_VEX_0F3808,
1250 PREFIX_VEX_0F3809,
1251 PREFIX_VEX_0F380A,
1252 PREFIX_VEX_0F380B,
1253 PREFIX_VEX_0F380C,
1254 PREFIX_VEX_0F380D,
1255 PREFIX_VEX_0F380E,
1256 PREFIX_VEX_0F380F,
1257 PREFIX_VEX_0F3813,
6c30d220 1258 PREFIX_VEX_0F3816,
592a252b
L
1259 PREFIX_VEX_0F3817,
1260 PREFIX_VEX_0F3818,
1261 PREFIX_VEX_0F3819,
1262 PREFIX_VEX_0F381A,
1263 PREFIX_VEX_0F381C,
1264 PREFIX_VEX_0F381D,
1265 PREFIX_VEX_0F381E,
1266 PREFIX_VEX_0F3820,
1267 PREFIX_VEX_0F3821,
1268 PREFIX_VEX_0F3822,
1269 PREFIX_VEX_0F3823,
1270 PREFIX_VEX_0F3824,
1271 PREFIX_VEX_0F3825,
1272 PREFIX_VEX_0F3828,
1273 PREFIX_VEX_0F3829,
1274 PREFIX_VEX_0F382A,
1275 PREFIX_VEX_0F382B,
1276 PREFIX_VEX_0F382C,
1277 PREFIX_VEX_0F382D,
1278 PREFIX_VEX_0F382E,
1279 PREFIX_VEX_0F382F,
1280 PREFIX_VEX_0F3830,
1281 PREFIX_VEX_0F3831,
1282 PREFIX_VEX_0F3832,
1283 PREFIX_VEX_0F3833,
1284 PREFIX_VEX_0F3834,
1285 PREFIX_VEX_0F3835,
6c30d220 1286 PREFIX_VEX_0F3836,
592a252b
L
1287 PREFIX_VEX_0F3837,
1288 PREFIX_VEX_0F3838,
1289 PREFIX_VEX_0F3839,
1290 PREFIX_VEX_0F383A,
1291 PREFIX_VEX_0F383B,
1292 PREFIX_VEX_0F383C,
1293 PREFIX_VEX_0F383D,
1294 PREFIX_VEX_0F383E,
1295 PREFIX_VEX_0F383F,
1296 PREFIX_VEX_0F3840,
1297 PREFIX_VEX_0F3841,
6c30d220
L
1298 PREFIX_VEX_0F3845,
1299 PREFIX_VEX_0F3846,
1300 PREFIX_VEX_0F3847,
1301 PREFIX_VEX_0F3858,
1302 PREFIX_VEX_0F3859,
1303 PREFIX_VEX_0F385A,
1304 PREFIX_VEX_0F3878,
1305 PREFIX_VEX_0F3879,
1306 PREFIX_VEX_0F388C,
1307 PREFIX_VEX_0F388E,
1308 PREFIX_VEX_0F3890,
1309 PREFIX_VEX_0F3891,
1310 PREFIX_VEX_0F3892,
1311 PREFIX_VEX_0F3893,
592a252b
L
1312 PREFIX_VEX_0F3896,
1313 PREFIX_VEX_0F3897,
1314 PREFIX_VEX_0F3898,
1315 PREFIX_VEX_0F3899,
1316 PREFIX_VEX_0F389A,
1317 PREFIX_VEX_0F389B,
1318 PREFIX_VEX_0F389C,
1319 PREFIX_VEX_0F389D,
1320 PREFIX_VEX_0F389E,
1321 PREFIX_VEX_0F389F,
1322 PREFIX_VEX_0F38A6,
1323 PREFIX_VEX_0F38A7,
1324 PREFIX_VEX_0F38A8,
1325 PREFIX_VEX_0F38A9,
1326 PREFIX_VEX_0F38AA,
1327 PREFIX_VEX_0F38AB,
1328 PREFIX_VEX_0F38AC,
1329 PREFIX_VEX_0F38AD,
1330 PREFIX_VEX_0F38AE,
1331 PREFIX_VEX_0F38AF,
1332 PREFIX_VEX_0F38B6,
1333 PREFIX_VEX_0F38B7,
1334 PREFIX_VEX_0F38B8,
1335 PREFIX_VEX_0F38B9,
1336 PREFIX_VEX_0F38BA,
1337 PREFIX_VEX_0F38BB,
1338 PREFIX_VEX_0F38BC,
1339 PREFIX_VEX_0F38BD,
1340 PREFIX_VEX_0F38BE,
1341 PREFIX_VEX_0F38BF,
48521003 1342 PREFIX_VEX_0F38CF,
592a252b
L
1343 PREFIX_VEX_0F38DB,
1344 PREFIX_VEX_0F38DC,
1345 PREFIX_VEX_0F38DD,
1346 PREFIX_VEX_0F38DE,
1347 PREFIX_VEX_0F38DF,
f12dc422
L
1348 PREFIX_VEX_0F38F2,
1349 PREFIX_VEX_0F38F3_REG_1,
1350 PREFIX_VEX_0F38F3_REG_2,
1351 PREFIX_VEX_0F38F3_REG_3,
6c30d220
L
1352 PREFIX_VEX_0F38F5,
1353 PREFIX_VEX_0F38F6,
f12dc422 1354 PREFIX_VEX_0F38F7,
6c30d220
L
1355 PREFIX_VEX_0F3A00,
1356 PREFIX_VEX_0F3A01,
1357 PREFIX_VEX_0F3A02,
592a252b
L
1358 PREFIX_VEX_0F3A04,
1359 PREFIX_VEX_0F3A05,
1360 PREFIX_VEX_0F3A06,
1361 PREFIX_VEX_0F3A08,
1362 PREFIX_VEX_0F3A09,
1363 PREFIX_VEX_0F3A0A,
1364 PREFIX_VEX_0F3A0B,
1365 PREFIX_VEX_0F3A0C,
1366 PREFIX_VEX_0F3A0D,
1367 PREFIX_VEX_0F3A0E,
1368 PREFIX_VEX_0F3A0F,
1369 PREFIX_VEX_0F3A14,
1370 PREFIX_VEX_0F3A15,
1371 PREFIX_VEX_0F3A16,
1372 PREFIX_VEX_0F3A17,
1373 PREFIX_VEX_0F3A18,
1374 PREFIX_VEX_0F3A19,
1375 PREFIX_VEX_0F3A1D,
1376 PREFIX_VEX_0F3A20,
1377 PREFIX_VEX_0F3A21,
1378 PREFIX_VEX_0F3A22,
43234a1e 1379 PREFIX_VEX_0F3A30,
1ba585e8 1380 PREFIX_VEX_0F3A31,
43234a1e 1381 PREFIX_VEX_0F3A32,
1ba585e8 1382 PREFIX_VEX_0F3A33,
6c30d220
L
1383 PREFIX_VEX_0F3A38,
1384 PREFIX_VEX_0F3A39,
592a252b
L
1385 PREFIX_VEX_0F3A40,
1386 PREFIX_VEX_0F3A41,
1387 PREFIX_VEX_0F3A42,
1388 PREFIX_VEX_0F3A44,
6c30d220 1389 PREFIX_VEX_0F3A46,
592a252b
L
1390 PREFIX_VEX_0F3A48,
1391 PREFIX_VEX_0F3A49,
1392 PREFIX_VEX_0F3A4A,
1393 PREFIX_VEX_0F3A4B,
1394 PREFIX_VEX_0F3A4C,
1395 PREFIX_VEX_0F3A5C,
1396 PREFIX_VEX_0F3A5D,
1397 PREFIX_VEX_0F3A5E,
1398 PREFIX_VEX_0F3A5F,
1399 PREFIX_VEX_0F3A60,
1400 PREFIX_VEX_0F3A61,
1401 PREFIX_VEX_0F3A62,
1402 PREFIX_VEX_0F3A63,
1403 PREFIX_VEX_0F3A68,
1404 PREFIX_VEX_0F3A69,
1405 PREFIX_VEX_0F3A6A,
1406 PREFIX_VEX_0F3A6B,
1407 PREFIX_VEX_0F3A6C,
1408 PREFIX_VEX_0F3A6D,
1409 PREFIX_VEX_0F3A6E,
1410 PREFIX_VEX_0F3A6F,
1411 PREFIX_VEX_0F3A78,
1412 PREFIX_VEX_0F3A79,
1413 PREFIX_VEX_0F3A7A,
1414 PREFIX_VEX_0F3A7B,
1415 PREFIX_VEX_0F3A7C,
1416 PREFIX_VEX_0F3A7D,
1417 PREFIX_VEX_0F3A7E,
1418 PREFIX_VEX_0F3A7F,
48521003
IT
1419 PREFIX_VEX_0F3ACE,
1420 PREFIX_VEX_0F3ACF,
6c30d220 1421 PREFIX_VEX_0F3ADF,
43234a1e
L
1422 PREFIX_VEX_0F3AF0,
1423
1424 PREFIX_EVEX_0F10,
1425 PREFIX_EVEX_0F11,
1426 PREFIX_EVEX_0F12,
1427 PREFIX_EVEX_0F13,
1428 PREFIX_EVEX_0F14,
1429 PREFIX_EVEX_0F15,
1430 PREFIX_EVEX_0F16,
1431 PREFIX_EVEX_0F17,
1432 PREFIX_EVEX_0F28,
1433 PREFIX_EVEX_0F29,
1434 PREFIX_EVEX_0F2A,
1435 PREFIX_EVEX_0F2B,
1436 PREFIX_EVEX_0F2C,
1437 PREFIX_EVEX_0F2D,
1438 PREFIX_EVEX_0F2E,
1439 PREFIX_EVEX_0F2F,
1440 PREFIX_EVEX_0F51,
90a915bf
IT
1441 PREFIX_EVEX_0F54,
1442 PREFIX_EVEX_0F55,
1443 PREFIX_EVEX_0F56,
1444 PREFIX_EVEX_0F57,
43234a1e
L
1445 PREFIX_EVEX_0F58,
1446 PREFIX_EVEX_0F59,
1447 PREFIX_EVEX_0F5A,
1448 PREFIX_EVEX_0F5B,
1449 PREFIX_EVEX_0F5C,
1450 PREFIX_EVEX_0F5D,
1451 PREFIX_EVEX_0F5E,
1452 PREFIX_EVEX_0F5F,
1ba585e8
IT
1453 PREFIX_EVEX_0F60,
1454 PREFIX_EVEX_0F61,
43234a1e 1455 PREFIX_EVEX_0F62,
1ba585e8
IT
1456 PREFIX_EVEX_0F63,
1457 PREFIX_EVEX_0F64,
1458 PREFIX_EVEX_0F65,
43234a1e 1459 PREFIX_EVEX_0F66,
1ba585e8
IT
1460 PREFIX_EVEX_0F67,
1461 PREFIX_EVEX_0F68,
1462 PREFIX_EVEX_0F69,
43234a1e 1463 PREFIX_EVEX_0F6A,
1ba585e8 1464 PREFIX_EVEX_0F6B,
43234a1e
L
1465 PREFIX_EVEX_0F6C,
1466 PREFIX_EVEX_0F6D,
1467 PREFIX_EVEX_0F6E,
1468 PREFIX_EVEX_0F6F,
1469 PREFIX_EVEX_0F70,
1ba585e8
IT
1470 PREFIX_EVEX_0F71_REG_2,
1471 PREFIX_EVEX_0F71_REG_4,
1472 PREFIX_EVEX_0F71_REG_6,
43234a1e
L
1473 PREFIX_EVEX_0F72_REG_0,
1474 PREFIX_EVEX_0F72_REG_1,
1475 PREFIX_EVEX_0F72_REG_2,
1476 PREFIX_EVEX_0F72_REG_4,
1477 PREFIX_EVEX_0F72_REG_6,
1478 PREFIX_EVEX_0F73_REG_2,
1ba585e8 1479 PREFIX_EVEX_0F73_REG_3,
43234a1e 1480 PREFIX_EVEX_0F73_REG_6,
1ba585e8
IT
1481 PREFIX_EVEX_0F73_REG_7,
1482 PREFIX_EVEX_0F74,
1483 PREFIX_EVEX_0F75,
43234a1e
L
1484 PREFIX_EVEX_0F76,
1485 PREFIX_EVEX_0F78,
1486 PREFIX_EVEX_0F79,
1487 PREFIX_EVEX_0F7A,
1488 PREFIX_EVEX_0F7B,
1489 PREFIX_EVEX_0F7E,
1490 PREFIX_EVEX_0F7F,
1491 PREFIX_EVEX_0FC2,
1ba585e8
IT
1492 PREFIX_EVEX_0FC4,
1493 PREFIX_EVEX_0FC5,
43234a1e 1494 PREFIX_EVEX_0FC6,
1ba585e8 1495 PREFIX_EVEX_0FD1,
43234a1e
L
1496 PREFIX_EVEX_0FD2,
1497 PREFIX_EVEX_0FD3,
1498 PREFIX_EVEX_0FD4,
1ba585e8 1499 PREFIX_EVEX_0FD5,
43234a1e 1500 PREFIX_EVEX_0FD6,
1ba585e8
IT
1501 PREFIX_EVEX_0FD8,
1502 PREFIX_EVEX_0FD9,
1503 PREFIX_EVEX_0FDA,
43234a1e 1504 PREFIX_EVEX_0FDB,
1ba585e8
IT
1505 PREFIX_EVEX_0FDC,
1506 PREFIX_EVEX_0FDD,
1507 PREFIX_EVEX_0FDE,
43234a1e 1508 PREFIX_EVEX_0FDF,
1ba585e8
IT
1509 PREFIX_EVEX_0FE0,
1510 PREFIX_EVEX_0FE1,
43234a1e 1511 PREFIX_EVEX_0FE2,
1ba585e8
IT
1512 PREFIX_EVEX_0FE3,
1513 PREFIX_EVEX_0FE4,
1514 PREFIX_EVEX_0FE5,
43234a1e
L
1515 PREFIX_EVEX_0FE6,
1516 PREFIX_EVEX_0FE7,
1ba585e8
IT
1517 PREFIX_EVEX_0FE8,
1518 PREFIX_EVEX_0FE9,
1519 PREFIX_EVEX_0FEA,
43234a1e 1520 PREFIX_EVEX_0FEB,
1ba585e8
IT
1521 PREFIX_EVEX_0FEC,
1522 PREFIX_EVEX_0FED,
1523 PREFIX_EVEX_0FEE,
43234a1e 1524 PREFIX_EVEX_0FEF,
1ba585e8 1525 PREFIX_EVEX_0FF1,
43234a1e
L
1526 PREFIX_EVEX_0FF2,
1527 PREFIX_EVEX_0FF3,
1528 PREFIX_EVEX_0FF4,
1ba585e8
IT
1529 PREFIX_EVEX_0FF5,
1530 PREFIX_EVEX_0FF6,
1531 PREFIX_EVEX_0FF8,
1532 PREFIX_EVEX_0FF9,
43234a1e
L
1533 PREFIX_EVEX_0FFA,
1534 PREFIX_EVEX_0FFB,
1ba585e8
IT
1535 PREFIX_EVEX_0FFC,
1536 PREFIX_EVEX_0FFD,
43234a1e 1537 PREFIX_EVEX_0FFE,
1ba585e8
IT
1538 PREFIX_EVEX_0F3800,
1539 PREFIX_EVEX_0F3804,
1540 PREFIX_EVEX_0F380B,
43234a1e
L
1541 PREFIX_EVEX_0F380C,
1542 PREFIX_EVEX_0F380D,
1ba585e8 1543 PREFIX_EVEX_0F3810,
43234a1e
L
1544 PREFIX_EVEX_0F3811,
1545 PREFIX_EVEX_0F3812,
1546 PREFIX_EVEX_0F3813,
1547 PREFIX_EVEX_0F3814,
1548 PREFIX_EVEX_0F3815,
1549 PREFIX_EVEX_0F3816,
1550 PREFIX_EVEX_0F3818,
1551 PREFIX_EVEX_0F3819,
1552 PREFIX_EVEX_0F381A,
1553 PREFIX_EVEX_0F381B,
1ba585e8
IT
1554 PREFIX_EVEX_0F381C,
1555 PREFIX_EVEX_0F381D,
43234a1e
L
1556 PREFIX_EVEX_0F381E,
1557 PREFIX_EVEX_0F381F,
1ba585e8 1558 PREFIX_EVEX_0F3820,
43234a1e
L
1559 PREFIX_EVEX_0F3821,
1560 PREFIX_EVEX_0F3822,
1561 PREFIX_EVEX_0F3823,
1562 PREFIX_EVEX_0F3824,
1563 PREFIX_EVEX_0F3825,
1ba585e8 1564 PREFIX_EVEX_0F3826,
43234a1e
L
1565 PREFIX_EVEX_0F3827,
1566 PREFIX_EVEX_0F3828,
1567 PREFIX_EVEX_0F3829,
1568 PREFIX_EVEX_0F382A,
1ba585e8 1569 PREFIX_EVEX_0F382B,
43234a1e
L
1570 PREFIX_EVEX_0F382C,
1571 PREFIX_EVEX_0F382D,
1ba585e8 1572 PREFIX_EVEX_0F3830,
43234a1e
L
1573 PREFIX_EVEX_0F3831,
1574 PREFIX_EVEX_0F3832,
1575 PREFIX_EVEX_0F3833,
1576 PREFIX_EVEX_0F3834,
1577 PREFIX_EVEX_0F3835,
1578 PREFIX_EVEX_0F3836,
1579 PREFIX_EVEX_0F3837,
1ba585e8 1580 PREFIX_EVEX_0F3838,
43234a1e
L
1581 PREFIX_EVEX_0F3839,
1582 PREFIX_EVEX_0F383A,
1583 PREFIX_EVEX_0F383B,
1ba585e8 1584 PREFIX_EVEX_0F383C,
43234a1e 1585 PREFIX_EVEX_0F383D,
1ba585e8 1586 PREFIX_EVEX_0F383E,
43234a1e
L
1587 PREFIX_EVEX_0F383F,
1588 PREFIX_EVEX_0F3840,
1589 PREFIX_EVEX_0F3842,
1590 PREFIX_EVEX_0F3843,
1591 PREFIX_EVEX_0F3844,
1592 PREFIX_EVEX_0F3845,
1593 PREFIX_EVEX_0F3846,
1594 PREFIX_EVEX_0F3847,
1595 PREFIX_EVEX_0F384C,
1596 PREFIX_EVEX_0F384D,
1597 PREFIX_EVEX_0F384E,
1598 PREFIX_EVEX_0F384F,
8cfcb765
IT
1599 PREFIX_EVEX_0F3850,
1600 PREFIX_EVEX_0F3851,
47acf0bd
IT
1601 PREFIX_EVEX_0F3852,
1602 PREFIX_EVEX_0F3853,
ee6872be 1603 PREFIX_EVEX_0F3854,
620214f7 1604 PREFIX_EVEX_0F3855,
43234a1e
L
1605 PREFIX_EVEX_0F3858,
1606 PREFIX_EVEX_0F3859,
1607 PREFIX_EVEX_0F385A,
1608 PREFIX_EVEX_0F385B,
53467f57
IT
1609 PREFIX_EVEX_0F3862,
1610 PREFIX_EVEX_0F3863,
43234a1e
L
1611 PREFIX_EVEX_0F3864,
1612 PREFIX_EVEX_0F3865,
1ba585e8 1613 PREFIX_EVEX_0F3866,
53467f57
IT
1614 PREFIX_EVEX_0F3870,
1615 PREFIX_EVEX_0F3871,
1616 PREFIX_EVEX_0F3872,
1617 PREFIX_EVEX_0F3873,
1ba585e8 1618 PREFIX_EVEX_0F3875,
43234a1e
L
1619 PREFIX_EVEX_0F3876,
1620 PREFIX_EVEX_0F3877,
1ba585e8
IT
1621 PREFIX_EVEX_0F3878,
1622 PREFIX_EVEX_0F3879,
1623 PREFIX_EVEX_0F387A,
1624 PREFIX_EVEX_0F387B,
43234a1e 1625 PREFIX_EVEX_0F387C,
1ba585e8 1626 PREFIX_EVEX_0F387D,
43234a1e
L
1627 PREFIX_EVEX_0F387E,
1628 PREFIX_EVEX_0F387F,
14f195c9 1629 PREFIX_EVEX_0F3883,
43234a1e
L
1630 PREFIX_EVEX_0F3888,
1631 PREFIX_EVEX_0F3889,
1632 PREFIX_EVEX_0F388A,
1633 PREFIX_EVEX_0F388B,
1ba585e8 1634 PREFIX_EVEX_0F388D,
ee6872be 1635 PREFIX_EVEX_0F388F,
43234a1e
L
1636 PREFIX_EVEX_0F3890,
1637 PREFIX_EVEX_0F3891,
1638 PREFIX_EVEX_0F3892,
1639 PREFIX_EVEX_0F3893,
1640 PREFIX_EVEX_0F3896,
1641 PREFIX_EVEX_0F3897,
1642 PREFIX_EVEX_0F3898,
1643 PREFIX_EVEX_0F3899,
1644 PREFIX_EVEX_0F389A,
1645 PREFIX_EVEX_0F389B,
1646 PREFIX_EVEX_0F389C,
1647 PREFIX_EVEX_0F389D,
1648 PREFIX_EVEX_0F389E,
1649 PREFIX_EVEX_0F389F,
1650 PREFIX_EVEX_0F38A0,
1651 PREFIX_EVEX_0F38A1,
1652 PREFIX_EVEX_0F38A2,
1653 PREFIX_EVEX_0F38A3,
1654 PREFIX_EVEX_0F38A6,
1655 PREFIX_EVEX_0F38A7,
1656 PREFIX_EVEX_0F38A8,
1657 PREFIX_EVEX_0F38A9,
1658 PREFIX_EVEX_0F38AA,
1659 PREFIX_EVEX_0F38AB,
1660 PREFIX_EVEX_0F38AC,
1661 PREFIX_EVEX_0F38AD,
1662 PREFIX_EVEX_0F38AE,
1663 PREFIX_EVEX_0F38AF,
2cc1b5aa
IT
1664 PREFIX_EVEX_0F38B4,
1665 PREFIX_EVEX_0F38B5,
43234a1e
L
1666 PREFIX_EVEX_0F38B6,
1667 PREFIX_EVEX_0F38B7,
1668 PREFIX_EVEX_0F38B8,
1669 PREFIX_EVEX_0F38B9,
1670 PREFIX_EVEX_0F38BA,
1671 PREFIX_EVEX_0F38BB,
1672 PREFIX_EVEX_0F38BC,
1673 PREFIX_EVEX_0F38BD,
1674 PREFIX_EVEX_0F38BE,
1675 PREFIX_EVEX_0F38BF,
1676 PREFIX_EVEX_0F38C4,
1677 PREFIX_EVEX_0F38C6_REG_1,
1678 PREFIX_EVEX_0F38C6_REG_2,
1679 PREFIX_EVEX_0F38C6_REG_5,
1680 PREFIX_EVEX_0F38C6_REG_6,
1681 PREFIX_EVEX_0F38C7_REG_1,
1682 PREFIX_EVEX_0F38C7_REG_2,
1683 PREFIX_EVEX_0F38C7_REG_5,
1684 PREFIX_EVEX_0F38C7_REG_6,
1685 PREFIX_EVEX_0F38C8,
1686 PREFIX_EVEX_0F38CA,
1687 PREFIX_EVEX_0F38CB,
1688 PREFIX_EVEX_0F38CC,
1689 PREFIX_EVEX_0F38CD,
48521003 1690 PREFIX_EVEX_0F38CF,
8dcf1fad
IT
1691 PREFIX_EVEX_0F38DC,
1692 PREFIX_EVEX_0F38DD,
1693 PREFIX_EVEX_0F38DE,
1694 PREFIX_EVEX_0F38DF,
43234a1e
L
1695
1696 PREFIX_EVEX_0F3A00,
1697 PREFIX_EVEX_0F3A01,
1698 PREFIX_EVEX_0F3A03,
1699 PREFIX_EVEX_0F3A04,
1700 PREFIX_EVEX_0F3A05,
1701 PREFIX_EVEX_0F3A08,
1702 PREFIX_EVEX_0F3A09,
1703 PREFIX_EVEX_0F3A0A,
1704 PREFIX_EVEX_0F3A0B,
1ba585e8
IT
1705 PREFIX_EVEX_0F3A0F,
1706 PREFIX_EVEX_0F3A14,
1707 PREFIX_EVEX_0F3A15,
90a915bf 1708 PREFIX_EVEX_0F3A16,
43234a1e
L
1709 PREFIX_EVEX_0F3A17,
1710 PREFIX_EVEX_0F3A18,
1711 PREFIX_EVEX_0F3A19,
1712 PREFIX_EVEX_0F3A1A,
1713 PREFIX_EVEX_0F3A1B,
1714 PREFIX_EVEX_0F3A1D,
1715 PREFIX_EVEX_0F3A1E,
1716 PREFIX_EVEX_0F3A1F,
1ba585e8 1717 PREFIX_EVEX_0F3A20,
43234a1e 1718 PREFIX_EVEX_0F3A21,
90a915bf 1719 PREFIX_EVEX_0F3A22,
43234a1e
L
1720 PREFIX_EVEX_0F3A23,
1721 PREFIX_EVEX_0F3A25,
1722 PREFIX_EVEX_0F3A26,
1723 PREFIX_EVEX_0F3A27,
1724 PREFIX_EVEX_0F3A38,
1725 PREFIX_EVEX_0F3A39,
1726 PREFIX_EVEX_0F3A3A,
1727 PREFIX_EVEX_0F3A3B,
1ba585e8
IT
1728 PREFIX_EVEX_0F3A3E,
1729 PREFIX_EVEX_0F3A3F,
1730 PREFIX_EVEX_0F3A42,
43234a1e 1731 PREFIX_EVEX_0F3A43,
ff1982d5 1732 PREFIX_EVEX_0F3A44,
90a915bf
IT
1733 PREFIX_EVEX_0F3A50,
1734 PREFIX_EVEX_0F3A51,
43234a1e 1735 PREFIX_EVEX_0F3A54,
90a915bf
IT
1736 PREFIX_EVEX_0F3A55,
1737 PREFIX_EVEX_0F3A56,
1738 PREFIX_EVEX_0F3A57,
1739 PREFIX_EVEX_0F3A66,
53467f57
IT
1740 PREFIX_EVEX_0F3A67,
1741 PREFIX_EVEX_0F3A70,
1742 PREFIX_EVEX_0F3A71,
1743 PREFIX_EVEX_0F3A72,
48521003
IT
1744 PREFIX_EVEX_0F3A73,
1745 PREFIX_EVEX_0F3ACE,
1746 PREFIX_EVEX_0F3ACF
51e7da1b 1747};
4e7d34a6 1748
51e7da1b
L
1749enum
1750{
1751 X86_64_06 = 0,
3873ba12
L
1752 X86_64_07,
1753 X86_64_0D,
1754 X86_64_16,
1755 X86_64_17,
1756 X86_64_1E,
1757 X86_64_1F,
1758 X86_64_27,
1759 X86_64_2F,
1760 X86_64_37,
1761 X86_64_3F,
1762 X86_64_60,
1763 X86_64_61,
1764 X86_64_62,
1765 X86_64_63,
1766 X86_64_6D,
1767 X86_64_6F,
d039fef3 1768 X86_64_82,
3873ba12
L
1769 X86_64_9A,
1770 X86_64_C4,
1771 X86_64_C5,
1772 X86_64_CE,
1773 X86_64_D4,
1774 X86_64_D5,
a72d2af2
L
1775 X86_64_E8,
1776 X86_64_E9,
3873ba12
L
1777 X86_64_EA,
1778 X86_64_0F01_REG_0,
1779 X86_64_0F01_REG_1,
1780 X86_64_0F01_REG_2,
1781 X86_64_0F01_REG_3
51e7da1b 1782};
4e7d34a6 1783
51e7da1b
L
1784enum
1785{
1786 THREE_BYTE_0F38 = 0,
1f334aeb 1787 THREE_BYTE_0F3A
51e7da1b 1788};
4e7d34a6 1789
f88c9eb0
SP
1790enum
1791{
5dd85c99
SP
1792 XOP_08 = 0,
1793 XOP_09,
f88c9eb0
SP
1794 XOP_0A
1795};
1796
51e7da1b
L
1797enum
1798{
1799 VEX_0F = 0,
3873ba12
L
1800 VEX_0F38,
1801 VEX_0F3A
51e7da1b 1802};
c0f3af97 1803
43234a1e
L
1804enum
1805{
1806 EVEX_0F = 0,
1807 EVEX_0F38,
1808 EVEX_0F3A
1809};
1810
51e7da1b
L
1811enum
1812{
ec6f095a 1813 VEX_LEN_0F12_P_0_M_0 = 0,
592a252b
L
1814 VEX_LEN_0F12_P_0_M_1,
1815 VEX_LEN_0F12_P_2,
1816 VEX_LEN_0F13_M_0,
1817 VEX_LEN_0F16_P_0_M_0,
1818 VEX_LEN_0F16_P_0_M_1,
1819 VEX_LEN_0F16_P_2,
1820 VEX_LEN_0F17_M_0,
1821 VEX_LEN_0F2A_P_1,
1822 VEX_LEN_0F2A_P_3,
1823 VEX_LEN_0F2C_P_1,
1824 VEX_LEN_0F2C_P_3,
1825 VEX_LEN_0F2D_P_1,
1826 VEX_LEN_0F2D_P_3,
43234a1e 1827 VEX_LEN_0F41_P_0,
1ba585e8 1828 VEX_LEN_0F41_P_2,
43234a1e 1829 VEX_LEN_0F42_P_0,
1ba585e8 1830 VEX_LEN_0F42_P_2,
43234a1e 1831 VEX_LEN_0F44_P_0,
1ba585e8 1832 VEX_LEN_0F44_P_2,
43234a1e 1833 VEX_LEN_0F45_P_0,
1ba585e8 1834 VEX_LEN_0F45_P_2,
43234a1e 1835 VEX_LEN_0F46_P_0,
1ba585e8 1836 VEX_LEN_0F46_P_2,
43234a1e 1837 VEX_LEN_0F47_P_0,
1ba585e8
IT
1838 VEX_LEN_0F47_P_2,
1839 VEX_LEN_0F4A_P_0,
1840 VEX_LEN_0F4A_P_2,
1841 VEX_LEN_0F4B_P_0,
43234a1e 1842 VEX_LEN_0F4B_P_2,
592a252b 1843 VEX_LEN_0F6E_P_2,
ec6f095a 1844 VEX_LEN_0F77_P_0,
592a252b
L
1845 VEX_LEN_0F7E_P_1,
1846 VEX_LEN_0F7E_P_2,
43234a1e 1847 VEX_LEN_0F90_P_0,
1ba585e8 1848 VEX_LEN_0F90_P_2,
43234a1e 1849 VEX_LEN_0F91_P_0,
1ba585e8 1850 VEX_LEN_0F91_P_2,
43234a1e 1851 VEX_LEN_0F92_P_0,
90a915bf 1852 VEX_LEN_0F92_P_2,
1ba585e8 1853 VEX_LEN_0F92_P_3,
43234a1e 1854 VEX_LEN_0F93_P_0,
90a915bf 1855 VEX_LEN_0F93_P_2,
1ba585e8 1856 VEX_LEN_0F93_P_3,
43234a1e 1857 VEX_LEN_0F98_P_0,
1ba585e8
IT
1858 VEX_LEN_0F98_P_2,
1859 VEX_LEN_0F99_P_0,
1860 VEX_LEN_0F99_P_2,
592a252b
L
1861 VEX_LEN_0FAE_R_2_M_0,
1862 VEX_LEN_0FAE_R_3_M_0,
592a252b
L
1863 VEX_LEN_0FC4_P_2,
1864 VEX_LEN_0FC5_P_2,
592a252b 1865 VEX_LEN_0FD6_P_2,
592a252b 1866 VEX_LEN_0FF7_P_2,
6c30d220
L
1867 VEX_LEN_0F3816_P_2,
1868 VEX_LEN_0F3819_P_2,
592a252b 1869 VEX_LEN_0F381A_P_2_M_0,
6c30d220 1870 VEX_LEN_0F3836_P_2,
592a252b 1871 VEX_LEN_0F3841_P_2,
6c30d220 1872 VEX_LEN_0F385A_P_2_M_0,
592a252b 1873 VEX_LEN_0F38DB_P_2,
f12dc422
L
1874 VEX_LEN_0F38F2_P_0,
1875 VEX_LEN_0F38F3_R_1_P_0,
1876 VEX_LEN_0F38F3_R_2_P_0,
1877 VEX_LEN_0F38F3_R_3_P_0,
6c30d220
L
1878 VEX_LEN_0F38F5_P_0,
1879 VEX_LEN_0F38F5_P_1,
1880 VEX_LEN_0F38F5_P_3,
1881 VEX_LEN_0F38F6_P_3,
f12dc422 1882 VEX_LEN_0F38F7_P_0,
6c30d220
L
1883 VEX_LEN_0F38F7_P_1,
1884 VEX_LEN_0F38F7_P_2,
1885 VEX_LEN_0F38F7_P_3,
1886 VEX_LEN_0F3A00_P_2,
1887 VEX_LEN_0F3A01_P_2,
592a252b 1888 VEX_LEN_0F3A06_P_2,
592a252b
L
1889 VEX_LEN_0F3A14_P_2,
1890 VEX_LEN_0F3A15_P_2,
1891 VEX_LEN_0F3A16_P_2,
1892 VEX_LEN_0F3A17_P_2,
1893 VEX_LEN_0F3A18_P_2,
1894 VEX_LEN_0F3A19_P_2,
1895 VEX_LEN_0F3A20_P_2,
1896 VEX_LEN_0F3A21_P_2,
1897 VEX_LEN_0F3A22_P_2,
43234a1e 1898 VEX_LEN_0F3A30_P_2,
1ba585e8 1899 VEX_LEN_0F3A31_P_2,
43234a1e 1900 VEX_LEN_0F3A32_P_2,
1ba585e8 1901 VEX_LEN_0F3A33_P_2,
6c30d220
L
1902 VEX_LEN_0F3A38_P_2,
1903 VEX_LEN_0F3A39_P_2,
592a252b 1904 VEX_LEN_0F3A41_P_2,
6c30d220 1905 VEX_LEN_0F3A46_P_2,
592a252b
L
1906 VEX_LEN_0F3A60_P_2,
1907 VEX_LEN_0F3A61_P_2,
1908 VEX_LEN_0F3A62_P_2,
1909 VEX_LEN_0F3A63_P_2,
1910 VEX_LEN_0F3A6A_P_2,
1911 VEX_LEN_0F3A6B_P_2,
1912 VEX_LEN_0F3A6E_P_2,
1913 VEX_LEN_0F3A6F_P_2,
1914 VEX_LEN_0F3A7A_P_2,
1915 VEX_LEN_0F3A7B_P_2,
1916 VEX_LEN_0F3A7E_P_2,
1917 VEX_LEN_0F3A7F_P_2,
1918 VEX_LEN_0F3ADF_P_2,
6c30d220 1919 VEX_LEN_0F3AF0_P_3,
ff688e1f
L
1920 VEX_LEN_0FXOP_08_CC,
1921 VEX_LEN_0FXOP_08_CD,
1922 VEX_LEN_0FXOP_08_CE,
1923 VEX_LEN_0FXOP_08_CF,
1924 VEX_LEN_0FXOP_08_EC,
1925 VEX_LEN_0FXOP_08_ED,
1926 VEX_LEN_0FXOP_08_EE,
1927 VEX_LEN_0FXOP_08_EF,
592a252b
L
1928 VEX_LEN_0FXOP_09_80,
1929 VEX_LEN_0FXOP_09_81
51e7da1b 1930};
c0f3af97 1931
04e2a182
L
1932enum
1933{
1934 EVEX_LEN_0F6E_P_2 = 0,
1935 EVEX_LEN_0F7E_P_1,
1936 EVEX_LEN_0F7E_P_2,
1937 EVEX_LEN_0FD6_P_2
1938};
1939
9e30b8e0
L
1940enum
1941{
ec6f095a 1942 VEX_W_0F41_P_0_LEN_1 = 0,
1ba585e8 1943 VEX_W_0F41_P_2_LEN_1,
43234a1e 1944 VEX_W_0F42_P_0_LEN_1,
1ba585e8 1945 VEX_W_0F42_P_2_LEN_1,
43234a1e 1946 VEX_W_0F44_P_0_LEN_0,
1ba585e8 1947 VEX_W_0F44_P_2_LEN_0,
43234a1e 1948 VEX_W_0F45_P_0_LEN_1,
1ba585e8 1949 VEX_W_0F45_P_2_LEN_1,
43234a1e 1950 VEX_W_0F46_P_0_LEN_1,
1ba585e8 1951 VEX_W_0F46_P_2_LEN_1,
43234a1e 1952 VEX_W_0F47_P_0_LEN_1,
1ba585e8
IT
1953 VEX_W_0F47_P_2_LEN_1,
1954 VEX_W_0F4A_P_0_LEN_1,
1955 VEX_W_0F4A_P_2_LEN_1,
1956 VEX_W_0F4B_P_0_LEN_1,
43234a1e 1957 VEX_W_0F4B_P_2_LEN_1,
43234a1e 1958 VEX_W_0F90_P_0_LEN_0,
1ba585e8 1959 VEX_W_0F90_P_2_LEN_0,
43234a1e 1960 VEX_W_0F91_P_0_LEN_0,
1ba585e8 1961 VEX_W_0F91_P_2_LEN_0,
43234a1e 1962 VEX_W_0F92_P_0_LEN_0,
90a915bf 1963 VEX_W_0F92_P_2_LEN_0,
43234a1e 1964 VEX_W_0F93_P_0_LEN_0,
90a915bf 1965 VEX_W_0F93_P_2_LEN_0,
43234a1e 1966 VEX_W_0F98_P_0_LEN_0,
1ba585e8
IT
1967 VEX_W_0F98_P_2_LEN_0,
1968 VEX_W_0F99_P_0_LEN_0,
1969 VEX_W_0F99_P_2_LEN_0,
592a252b
L
1970 VEX_W_0F380C_P_2,
1971 VEX_W_0F380D_P_2,
1972 VEX_W_0F380E_P_2,
1973 VEX_W_0F380F_P_2,
6c30d220 1974 VEX_W_0F3816_P_2,
6c30d220
L
1975 VEX_W_0F3818_P_2,
1976 VEX_W_0F3819_P_2,
592a252b 1977 VEX_W_0F381A_P_2_M_0,
592a252b
L
1978 VEX_W_0F382C_P_2_M_0,
1979 VEX_W_0F382D_P_2_M_0,
1980 VEX_W_0F382E_P_2_M_0,
1981 VEX_W_0F382F_P_2_M_0,
6c30d220 1982 VEX_W_0F3836_P_2,
6c30d220
L
1983 VEX_W_0F3846_P_2,
1984 VEX_W_0F3858_P_2,
1985 VEX_W_0F3859_P_2,
1986 VEX_W_0F385A_P_2_M_0,
1987 VEX_W_0F3878_P_2,
1988 VEX_W_0F3879_P_2,
48521003 1989 VEX_W_0F38CF_P_2,
6c30d220
L
1990 VEX_W_0F3A00_P_2,
1991 VEX_W_0F3A01_P_2,
1992 VEX_W_0F3A02_P_2,
592a252b
L
1993 VEX_W_0F3A04_P_2,
1994 VEX_W_0F3A05_P_2,
1995 VEX_W_0F3A06_P_2,
592a252b
L
1996 VEX_W_0F3A18_P_2,
1997 VEX_W_0F3A19_P_2,
43234a1e 1998 VEX_W_0F3A30_P_2_LEN_0,
1ba585e8 1999 VEX_W_0F3A31_P_2_LEN_0,
43234a1e 2000 VEX_W_0F3A32_P_2_LEN_0,
1ba585e8 2001 VEX_W_0F3A33_P_2_LEN_0,
6c30d220
L
2002 VEX_W_0F3A38_P_2,
2003 VEX_W_0F3A39_P_2,
6c30d220 2004 VEX_W_0F3A46_P_2,
592a252b
L
2005 VEX_W_0F3A48_P_2,
2006 VEX_W_0F3A49_P_2,
2007 VEX_W_0F3A4A_P_2,
2008 VEX_W_0F3A4B_P_2,
2009 VEX_W_0F3A4C_P_2,
48521003
IT
2010 VEX_W_0F3ACE_P_2,
2011 VEX_W_0F3ACF_P_2,
43234a1e
L
2012
2013 EVEX_W_0F10_P_0,
2014 EVEX_W_0F10_P_1_M_0,
2015 EVEX_W_0F10_P_1_M_1,
2016 EVEX_W_0F10_P_2,
2017 EVEX_W_0F10_P_3_M_0,
2018 EVEX_W_0F10_P_3_M_1,
2019 EVEX_W_0F11_P_0,
2020 EVEX_W_0F11_P_1_M_0,
2021 EVEX_W_0F11_P_1_M_1,
2022 EVEX_W_0F11_P_2,
2023 EVEX_W_0F11_P_3_M_0,
2024 EVEX_W_0F11_P_3_M_1,
2025 EVEX_W_0F12_P_0_M_0,
2026 EVEX_W_0F12_P_0_M_1,
2027 EVEX_W_0F12_P_1,
2028 EVEX_W_0F12_P_2,
2029 EVEX_W_0F12_P_3,
2030 EVEX_W_0F13_P_0,
2031 EVEX_W_0F13_P_2,
2032 EVEX_W_0F14_P_0,
2033 EVEX_W_0F14_P_2,
2034 EVEX_W_0F15_P_0,
2035 EVEX_W_0F15_P_2,
2036 EVEX_W_0F16_P_0_M_0,
2037 EVEX_W_0F16_P_0_M_1,
2038 EVEX_W_0F16_P_1,
2039 EVEX_W_0F16_P_2,
2040 EVEX_W_0F17_P_0,
2041 EVEX_W_0F17_P_2,
2042 EVEX_W_0F28_P_0,
2043 EVEX_W_0F28_P_2,
2044 EVEX_W_0F29_P_0,
2045 EVEX_W_0F29_P_2,
2046 EVEX_W_0F2A_P_1,
2047 EVEX_W_0F2A_P_3,
2048 EVEX_W_0F2B_P_0,
2049 EVEX_W_0F2B_P_2,
2050 EVEX_W_0F2E_P_0,
2051 EVEX_W_0F2E_P_2,
2052 EVEX_W_0F2F_P_0,
2053 EVEX_W_0F2F_P_2,
2054 EVEX_W_0F51_P_0,
2055 EVEX_W_0F51_P_1,
2056 EVEX_W_0F51_P_2,
2057 EVEX_W_0F51_P_3,
90a915bf
IT
2058 EVEX_W_0F54_P_0,
2059 EVEX_W_0F54_P_2,
2060 EVEX_W_0F55_P_0,
2061 EVEX_W_0F55_P_2,
2062 EVEX_W_0F56_P_0,
2063 EVEX_W_0F56_P_2,
2064 EVEX_W_0F57_P_0,
2065 EVEX_W_0F57_P_2,
43234a1e
L
2066 EVEX_W_0F58_P_0,
2067 EVEX_W_0F58_P_1,
2068 EVEX_W_0F58_P_2,
2069 EVEX_W_0F58_P_3,
2070 EVEX_W_0F59_P_0,
2071 EVEX_W_0F59_P_1,
2072 EVEX_W_0F59_P_2,
2073 EVEX_W_0F59_P_3,
2074 EVEX_W_0F5A_P_0,
2075 EVEX_W_0F5A_P_1,
2076 EVEX_W_0F5A_P_2,
2077 EVEX_W_0F5A_P_3,
2078 EVEX_W_0F5B_P_0,
2079 EVEX_W_0F5B_P_1,
2080 EVEX_W_0F5B_P_2,
2081 EVEX_W_0F5C_P_0,
2082 EVEX_W_0F5C_P_1,
2083 EVEX_W_0F5C_P_2,
2084 EVEX_W_0F5C_P_3,
2085 EVEX_W_0F5D_P_0,
2086 EVEX_W_0F5D_P_1,
2087 EVEX_W_0F5D_P_2,
2088 EVEX_W_0F5D_P_3,
2089 EVEX_W_0F5E_P_0,
2090 EVEX_W_0F5E_P_1,
2091 EVEX_W_0F5E_P_2,
2092 EVEX_W_0F5E_P_3,
2093 EVEX_W_0F5F_P_0,
2094 EVEX_W_0F5F_P_1,
2095 EVEX_W_0F5F_P_2,
2096 EVEX_W_0F5F_P_3,
2097 EVEX_W_0F62_P_2,
2098 EVEX_W_0F66_P_2,
2099 EVEX_W_0F6A_P_2,
1ba585e8 2100 EVEX_W_0F6B_P_2,
43234a1e
L
2101 EVEX_W_0F6C_P_2,
2102 EVEX_W_0F6D_P_2,
43234a1e
L
2103 EVEX_W_0F6F_P_1,
2104 EVEX_W_0F6F_P_2,
1ba585e8 2105 EVEX_W_0F6F_P_3,
43234a1e
L
2106 EVEX_W_0F70_P_2,
2107 EVEX_W_0F72_R_2_P_2,
2108 EVEX_W_0F72_R_6_P_2,
2109 EVEX_W_0F73_R_2_P_2,
2110 EVEX_W_0F73_R_6_P_2,
2111 EVEX_W_0F76_P_2,
2112 EVEX_W_0F78_P_0,
90a915bf 2113 EVEX_W_0F78_P_2,
43234a1e 2114 EVEX_W_0F79_P_0,
90a915bf 2115 EVEX_W_0F79_P_2,
43234a1e 2116 EVEX_W_0F7A_P_1,
90a915bf 2117 EVEX_W_0F7A_P_2,
43234a1e
L
2118 EVEX_W_0F7A_P_3,
2119 EVEX_W_0F7B_P_1,
90a915bf 2120 EVEX_W_0F7B_P_2,
43234a1e
L
2121 EVEX_W_0F7B_P_3,
2122 EVEX_W_0F7E_P_1,
43234a1e
L
2123 EVEX_W_0F7F_P_1,
2124 EVEX_W_0F7F_P_2,
1ba585e8 2125 EVEX_W_0F7F_P_3,
43234a1e
L
2126 EVEX_W_0FC2_P_0,
2127 EVEX_W_0FC2_P_1,
2128 EVEX_W_0FC2_P_2,
2129 EVEX_W_0FC2_P_3,
2130 EVEX_W_0FC6_P_0,
2131 EVEX_W_0FC6_P_2,
2132 EVEX_W_0FD2_P_2,
2133 EVEX_W_0FD3_P_2,
2134 EVEX_W_0FD4_P_2,
2135 EVEX_W_0FD6_P_2,
2136 EVEX_W_0FE6_P_1,
2137 EVEX_W_0FE6_P_2,
2138 EVEX_W_0FE6_P_3,
2139 EVEX_W_0FE7_P_2,
2140 EVEX_W_0FF2_P_2,
2141 EVEX_W_0FF3_P_2,
2142 EVEX_W_0FF4_P_2,
2143 EVEX_W_0FFA_P_2,
2144 EVEX_W_0FFB_P_2,
2145 EVEX_W_0FFE_P_2,
2146 EVEX_W_0F380C_P_2,
2147 EVEX_W_0F380D_P_2,
1ba585e8
IT
2148 EVEX_W_0F3810_P_1,
2149 EVEX_W_0F3810_P_2,
43234a1e 2150 EVEX_W_0F3811_P_1,
1ba585e8 2151 EVEX_W_0F3811_P_2,
43234a1e 2152 EVEX_W_0F3812_P_1,
1ba585e8 2153 EVEX_W_0F3812_P_2,
43234a1e
L
2154 EVEX_W_0F3813_P_1,
2155 EVEX_W_0F3813_P_2,
2156 EVEX_W_0F3814_P_1,
2157 EVEX_W_0F3815_P_1,
2158 EVEX_W_0F3818_P_2,
2159 EVEX_W_0F3819_P_2,
2160 EVEX_W_0F381A_P_2,
2161 EVEX_W_0F381B_P_2,
2162 EVEX_W_0F381E_P_2,
2163 EVEX_W_0F381F_P_2,
1ba585e8 2164 EVEX_W_0F3820_P_1,
43234a1e
L
2165 EVEX_W_0F3821_P_1,
2166 EVEX_W_0F3822_P_1,
2167 EVEX_W_0F3823_P_1,
2168 EVEX_W_0F3824_P_1,
2169 EVEX_W_0F3825_P_1,
2170 EVEX_W_0F3825_P_2,
1ba585e8
IT
2171 EVEX_W_0F3826_P_1,
2172 EVEX_W_0F3826_P_2,
2173 EVEX_W_0F3828_P_1,
43234a1e 2174 EVEX_W_0F3828_P_2,
1ba585e8 2175 EVEX_W_0F3829_P_1,
43234a1e
L
2176 EVEX_W_0F3829_P_2,
2177 EVEX_W_0F382A_P_1,
2178 EVEX_W_0F382A_P_2,
1ba585e8
IT
2179 EVEX_W_0F382B_P_2,
2180 EVEX_W_0F3830_P_1,
43234a1e
L
2181 EVEX_W_0F3831_P_1,
2182 EVEX_W_0F3832_P_1,
2183 EVEX_W_0F3833_P_1,
2184 EVEX_W_0F3834_P_1,
2185 EVEX_W_0F3835_P_1,
2186 EVEX_W_0F3835_P_2,
2187 EVEX_W_0F3837_P_2,
90a915bf
IT
2188 EVEX_W_0F3838_P_1,
2189 EVEX_W_0F3839_P_1,
43234a1e
L
2190 EVEX_W_0F383A_P_1,
2191 EVEX_W_0F3840_P_2,
ee6872be 2192 EVEX_W_0F3854_P_2,
620214f7 2193 EVEX_W_0F3855_P_2,
43234a1e
L
2194 EVEX_W_0F3858_P_2,
2195 EVEX_W_0F3859_P_2,
2196 EVEX_W_0F385A_P_2,
2197 EVEX_W_0F385B_P_2,
53467f57
IT
2198 EVEX_W_0F3862_P_2,
2199 EVEX_W_0F3863_P_2,
1ba585e8 2200 EVEX_W_0F3866_P_2,
53467f57
IT
2201 EVEX_W_0F3870_P_2,
2202 EVEX_W_0F3871_P_2,
2203 EVEX_W_0F3872_P_2,
2204 EVEX_W_0F3873_P_2,
1ba585e8
IT
2205 EVEX_W_0F3875_P_2,
2206 EVEX_W_0F3878_P_2,
2207 EVEX_W_0F3879_P_2,
2208 EVEX_W_0F387A_P_2,
2209 EVEX_W_0F387B_P_2,
2210 EVEX_W_0F387D_P_2,
14f195c9 2211 EVEX_W_0F3883_P_2,
1ba585e8 2212 EVEX_W_0F388D_P_2,
43234a1e
L
2213 EVEX_W_0F3891_P_2,
2214 EVEX_W_0F3893_P_2,
2215 EVEX_W_0F38A1_P_2,
2216 EVEX_W_0F38A3_P_2,
2217 EVEX_W_0F38C7_R_1_P_2,
2218 EVEX_W_0F38C7_R_2_P_2,
2219 EVEX_W_0F38C7_R_5_P_2,
2220 EVEX_W_0F38C7_R_6_P_2,
2221
2222 EVEX_W_0F3A00_P_2,
2223 EVEX_W_0F3A01_P_2,
2224 EVEX_W_0F3A04_P_2,
2225 EVEX_W_0F3A05_P_2,
2226 EVEX_W_0F3A08_P_2,
2227 EVEX_W_0F3A09_P_2,
2228 EVEX_W_0F3A0A_P_2,
2229 EVEX_W_0F3A0B_P_2,
2230 EVEX_W_0F3A18_P_2,
2231 EVEX_W_0F3A19_P_2,
2232 EVEX_W_0F3A1A_P_2,
2233 EVEX_W_0F3A1B_P_2,
2234 EVEX_W_0F3A1D_P_2,
2235 EVEX_W_0F3A21_P_2,
2236 EVEX_W_0F3A23_P_2,
2237 EVEX_W_0F3A38_P_2,
2238 EVEX_W_0F3A39_P_2,
2239 EVEX_W_0F3A3A_P_2,
2240 EVEX_W_0F3A3B_P_2,
1ba585e8
IT
2241 EVEX_W_0F3A3E_P_2,
2242 EVEX_W_0F3A3F_P_2,
2243 EVEX_W_0F3A42_P_2,
90a915bf
IT
2244 EVEX_W_0F3A43_P_2,
2245 EVEX_W_0F3A50_P_2,
2246 EVEX_W_0F3A51_P_2,
2247 EVEX_W_0F3A56_P_2,
2248 EVEX_W_0F3A57_P_2,
2249 EVEX_W_0F3A66_P_2,
53467f57
IT
2250 EVEX_W_0F3A67_P_2,
2251 EVEX_W_0F3A70_P_2,
2252 EVEX_W_0F3A71_P_2,
2253 EVEX_W_0F3A72_P_2,
48521003
IT
2254 EVEX_W_0F3A73_P_2,
2255 EVEX_W_0F3ACE_P_2,
2256 EVEX_W_0F3ACF_P_2
9e30b8e0
L
2257};
2258
26ca5450 2259typedef void (*op_rtn) (int bytemode, int sizeflag);
252b5132
RH
2260
2261struct dis386 {
2da11e11 2262 const char *name;
ce518a5f
L
2263 struct
2264 {
2265 op_rtn rtn;
2266 int bytemode;
2267 } op[MAX_OPERANDS];
bf890a93 2268 unsigned int prefix_requirement;
252b5132
RH
2269};
2270
2271/* Upper case letters in the instruction names here are macros.
2272 'A' => print 'b' if no register operands or suffix_always is true
2273 'B' => print 'b' if suffix_always is true
9306ca4a 2274 'C' => print 's' or 'l' ('w' or 'd' in Intel mode) depending on operand
98b528ac 2275 size prefix
ed7841b3 2276 'D' => print 'w' if no register operands or 'w', 'l' or 'q', if
98b528ac 2277 suffix_always is true
252b5132 2278 'E' => print 'e' if 32-bit form of jcxz
3ffd33cf 2279 'F' => print 'w' or 'l' depending on address size prefix (loop insns)
52fd6d94 2280 'G' => print 'w' or 'l' depending on operand size prefix (i/o insns)
5dd0794d 2281 'H' => print ",pt" or ",pn" branch hint
9306ca4a 2282 'I' => honor following macro letter even in Intel mode (implemented only
98b528ac 2283 for some of the macro letters)
9306ca4a 2284 'J' => print 'l'
42903f7f 2285 'K' => print 'd' or 'q' if rex prefix is present.
252b5132 2286 'L' => print 'l' if suffix_always is true
9d141669 2287 'M' => print 'r' if intel_mnemonic is false.
252b5132 2288 'N' => print 'n' if instruction has no wait "prefix"
a35ca55a 2289 'O' => print 'd' or 'o' (or 'q' in Intel mode)
52b15da3 2290 'P' => print 'w', 'l' or 'q' if instruction has an operand size prefix,
98b528ac
L
2291 or suffix_always is true. print 'q' if rex prefix is present.
2292 'Q' => print 'w', 'l' or 'q' for memory operand or suffix_always
2293 is true
a35ca55a 2294 'R' => print 'w', 'l' or 'q' ('d' for 'l' and 'e' in Intel mode)
52b15da3 2295 'S' => print 'w', 'l' or 'q' if suffix_always is true
a72d2af2
L
2296 'T' => print 'q' in 64bit mode if instruction has no operand size
2297 prefix and behave as 'P' otherwise
2298 'U' => print 'q' in 64bit mode if instruction has no operand size
2299 prefix and behave as 'Q' otherwise
2300 'V' => print 'q' in 64bit mode if instruction has no operand size
2301 prefix and behave as 'S' otherwise
a35ca55a 2302 'W' => print 'b', 'w' or 'l' ('d' in Intel mode)
9306ca4a 2303 'X' => print 's', 'd' depending on data16 prefix (for XMM)
9646c87b 2304 'Y' unused.
6dd5059a 2305 'Z' => print 'q' in 64bit mode and behave as 'L' otherwise
9d141669 2306 '!' => change condition from true to false or from false to true.
98b528ac 2307 '%' => add 1 upper case letter to the macro.
a72d2af2
L
2308 '^' => print 'w' or 'l' depending on operand size prefix or
2309 suffix_always is true (lcall/ljmp).
5db04b09
L
2310 '@' => print 'q' for Intel64 ISA, 'w' or 'q' for AMD64 ISA depending
2311 on operand size prefix.
07f5af7d
L
2312 '&' => print 'q' in 64bit mode for Intel64 ISA or if instruction
2313 has no operand size prefix for AMD64 ISA, behave as 'P'
2314 otherwise
98b528ac
L
2315
2316 2 upper case letter macros:
04d824a4
JB
2317 "XY" => print 'x' or 'y' if suffix_always is true or no register
2318 operands and no broadcast.
2319 "XZ" => print 'x', 'y', or 'z' if suffix_always is true or no
2320 register operands and no broadcast.
4b06377f
L
2321 "XW" => print 's', 'd' depending on the VEX.W bit (for FMA)
2322 "LQ" => print 'l' ('d' in Intel mode) or 'q' for memory operand
98b528ac 2323 or suffix_always is true
4b06377f
L
2324 "LB" => print "abs" in 64bit mode and behave as 'B' otherwise
2325 "LS" => print "abs" in 64bit mode and behave as 'S' otherwise
2326 "LV" => print "abs" for 64bit operand and behave as 'S' otherwise
6c30d220 2327 "LW" => print 'd', 'q' depending on the VEX.W bit
4b4c407a
L
2328 "LP" => print 'w' or 'l' ('d' in Intel mode) if instruction has
2329 an operand size prefix, or suffix_always is true. print
2330 'q' if rex prefix is present.
52b15da3 2331
6439fc28
AM
2332 Many of the above letters print nothing in Intel mode. See "putop"
2333 for the details.
52b15da3 2334
6439fc28 2335 Braces '{' and '}', and vertical bars '|', indicate alternative
7c52e0e8 2336 mnemonic strings for AT&T and Intel. */
252b5132 2337
6439fc28 2338static const struct dis386 dis386[] = {
252b5132 2339 /* 00 */
bf890a93
IT
2340 { "addB", { Ebh1, Gb }, 0 },
2341 { "addS", { Evh1, Gv }, 0 },
2342 { "addB", { Gb, EbS }, 0 },
2343 { "addS", { Gv, EvS }, 0 },
2344 { "addB", { AL, Ib }, 0 },
2345 { "addS", { eAX, Iv }, 0 },
4e7d34a6
L
2346 { X86_64_TABLE (X86_64_06) },
2347 { X86_64_TABLE (X86_64_07) },
252b5132 2348 /* 08 */
bf890a93
IT
2349 { "orB", { Ebh1, Gb }, 0 },
2350 { "orS", { Evh1, Gv }, 0 },
2351 { "orB", { Gb, EbS }, 0 },
2352 { "orS", { Gv, EvS }, 0 },
2353 { "orB", { AL, Ib }, 0 },
2354 { "orS", { eAX, Iv }, 0 },
4e7d34a6 2355 { X86_64_TABLE (X86_64_0D) },
592d1631 2356 { Bad_Opcode }, /* 0x0f extended opcode escape */
252b5132 2357 /* 10 */
bf890a93
IT
2358 { "adcB", { Ebh1, Gb }, 0 },
2359 { "adcS", { Evh1, Gv }, 0 },
2360 { "adcB", { Gb, EbS }, 0 },
2361 { "adcS", { Gv, EvS }, 0 },
2362 { "adcB", { AL, Ib }, 0 },
2363 { "adcS", { eAX, Iv }, 0 },
4e7d34a6
L
2364 { X86_64_TABLE (X86_64_16) },
2365 { X86_64_TABLE (X86_64_17) },
252b5132 2366 /* 18 */
bf890a93
IT
2367 { "sbbB", { Ebh1, Gb }, 0 },
2368 { "sbbS", { Evh1, Gv }, 0 },
2369 { "sbbB", { Gb, EbS }, 0 },
2370 { "sbbS", { Gv, EvS }, 0 },
2371 { "sbbB", { AL, Ib }, 0 },
2372 { "sbbS", { eAX, Iv }, 0 },
4e7d34a6
L
2373 { X86_64_TABLE (X86_64_1E) },
2374 { X86_64_TABLE (X86_64_1F) },
252b5132 2375 /* 20 */
bf890a93
IT
2376 { "andB", { Ebh1, Gb }, 0 },
2377 { "andS", { Evh1, Gv }, 0 },
2378 { "andB", { Gb, EbS }, 0 },
2379 { "andS", { Gv, EvS }, 0 },
2380 { "andB", { AL, Ib }, 0 },
2381 { "andS", { eAX, Iv }, 0 },
592d1631 2382 { Bad_Opcode }, /* SEG ES prefix */
4e7d34a6 2383 { X86_64_TABLE (X86_64_27) },
252b5132 2384 /* 28 */
bf890a93
IT
2385 { "subB", { Ebh1, Gb }, 0 },
2386 { "subS", { Evh1, Gv }, 0 },
2387 { "subB", { Gb, EbS }, 0 },
2388 { "subS", { Gv, EvS }, 0 },
2389 { "subB", { AL, Ib }, 0 },
2390 { "subS", { eAX, Iv }, 0 },
592d1631 2391 { Bad_Opcode }, /* SEG CS prefix */
4e7d34a6 2392 { X86_64_TABLE (X86_64_2F) },
252b5132 2393 /* 30 */
bf890a93
IT
2394 { "xorB", { Ebh1, Gb }, 0 },
2395 { "xorS", { Evh1, Gv }, 0 },
2396 { "xorB", { Gb, EbS }, 0 },
2397 { "xorS", { Gv, EvS }, 0 },
2398 { "xorB", { AL, Ib }, 0 },
2399 { "xorS", { eAX, Iv }, 0 },
592d1631 2400 { Bad_Opcode }, /* SEG SS prefix */
4e7d34a6 2401 { X86_64_TABLE (X86_64_37) },
252b5132 2402 /* 38 */
bf890a93
IT
2403 { "cmpB", { Eb, Gb }, 0 },
2404 { "cmpS", { Ev, Gv }, 0 },
2405 { "cmpB", { Gb, EbS }, 0 },
2406 { "cmpS", { Gv, EvS }, 0 },
2407 { "cmpB", { AL, Ib }, 0 },
2408 { "cmpS", { eAX, Iv }, 0 },
592d1631 2409 { Bad_Opcode }, /* SEG DS prefix */
4e7d34a6 2410 { X86_64_TABLE (X86_64_3F) },
252b5132 2411 /* 40 */
bf890a93
IT
2412 { "inc{S|}", { RMeAX }, 0 },
2413 { "inc{S|}", { RMeCX }, 0 },
2414 { "inc{S|}", { RMeDX }, 0 },
2415 { "inc{S|}", { RMeBX }, 0 },
2416 { "inc{S|}", { RMeSP }, 0 },
2417 { "inc{S|}", { RMeBP }, 0 },
2418 { "inc{S|}", { RMeSI }, 0 },
2419 { "inc{S|}", { RMeDI }, 0 },
252b5132 2420 /* 48 */
bf890a93
IT
2421 { "dec{S|}", { RMeAX }, 0 },
2422 { "dec{S|}", { RMeCX }, 0 },
2423 { "dec{S|}", { RMeDX }, 0 },
2424 { "dec{S|}", { RMeBX }, 0 },
2425 { "dec{S|}", { RMeSP }, 0 },
2426 { "dec{S|}", { RMeBP }, 0 },
2427 { "dec{S|}", { RMeSI }, 0 },
2428 { "dec{S|}", { RMeDI }, 0 },
252b5132 2429 /* 50 */
bf890a93
IT
2430 { "pushV", { RMrAX }, 0 },
2431 { "pushV", { RMrCX }, 0 },
2432 { "pushV", { RMrDX }, 0 },
2433 { "pushV", { RMrBX }, 0 },
2434 { "pushV", { RMrSP }, 0 },
2435 { "pushV", { RMrBP }, 0 },
2436 { "pushV", { RMrSI }, 0 },
2437 { "pushV", { RMrDI }, 0 },
252b5132 2438 /* 58 */
bf890a93
IT
2439 { "popV", { RMrAX }, 0 },
2440 { "popV", { RMrCX }, 0 },
2441 { "popV", { RMrDX }, 0 },
2442 { "popV", { RMrBX }, 0 },
2443 { "popV", { RMrSP }, 0 },
2444 { "popV", { RMrBP }, 0 },
2445 { "popV", { RMrSI }, 0 },
2446 { "popV", { RMrDI }, 0 },
252b5132 2447 /* 60 */
4e7d34a6
L
2448 { X86_64_TABLE (X86_64_60) },
2449 { X86_64_TABLE (X86_64_61) },
2450 { X86_64_TABLE (X86_64_62) },
2451 { X86_64_TABLE (X86_64_63) },
592d1631
L
2452 { Bad_Opcode }, /* seg fs */
2453 { Bad_Opcode }, /* seg gs */
2454 { Bad_Opcode }, /* op size prefix */
2455 { Bad_Opcode }, /* adr size prefix */
252b5132 2456 /* 68 */
bf890a93
IT
2457 { "pushT", { sIv }, 0 },
2458 { "imulS", { Gv, Ev, Iv }, 0 },
2459 { "pushT", { sIbT }, 0 },
2460 { "imulS", { Gv, Ev, sIb }, 0 },
2461 { "ins{b|}", { Ybr, indirDX }, 0 },
4e7d34a6 2462 { X86_64_TABLE (X86_64_6D) },
bf890a93 2463 { "outs{b|}", { indirDXr, Xb }, 0 },
4e7d34a6 2464 { X86_64_TABLE (X86_64_6F) },
252b5132 2465 /* 70 */
bf890a93
IT
2466 { "joH", { Jb, BND, cond_jump_flag }, 0 },
2467 { "jnoH", { Jb, BND, cond_jump_flag }, 0 },
2468 { "jbH", { Jb, BND, cond_jump_flag }, 0 },
2469 { "jaeH", { Jb, BND, cond_jump_flag }, 0 },
2470 { "jeH", { Jb, BND, cond_jump_flag }, 0 },
2471 { "jneH", { Jb, BND, cond_jump_flag }, 0 },
2472 { "jbeH", { Jb, BND, cond_jump_flag }, 0 },
2473 { "jaH", { Jb, BND, cond_jump_flag }, 0 },
252b5132 2474 /* 78 */
bf890a93
IT
2475 { "jsH", { Jb, BND, cond_jump_flag }, 0 },
2476 { "jnsH", { Jb, BND, cond_jump_flag }, 0 },
2477 { "jpH", { Jb, BND, cond_jump_flag }, 0 },
2478 { "jnpH", { Jb, BND, cond_jump_flag }, 0 },
2479 { "jlH", { Jb, BND, cond_jump_flag }, 0 },
2480 { "jgeH", { Jb, BND, cond_jump_flag }, 0 },
2481 { "jleH", { Jb, BND, cond_jump_flag }, 0 },
2482 { "jgH", { Jb, BND, cond_jump_flag }, 0 },
252b5132 2483 /* 80 */
1ceb70f8
L
2484 { REG_TABLE (REG_80) },
2485 { REG_TABLE (REG_81) },
d039fef3 2486 { X86_64_TABLE (X86_64_82) },
7148c369 2487 { REG_TABLE (REG_83) },
bf890a93
IT
2488 { "testB", { Eb, Gb }, 0 },
2489 { "testS", { Ev, Gv }, 0 },
2490 { "xchgB", { Ebh2, Gb }, 0 },
2491 { "xchgS", { Evh2, Gv }, 0 },
252b5132 2492 /* 88 */
bf890a93
IT
2493 { "movB", { Ebh3, Gb }, 0 },
2494 { "movS", { Evh3, Gv }, 0 },
2495 { "movB", { Gb, EbS }, 0 },
2496 { "movS", { Gv, EvS }, 0 },
2497 { "movD", { Sv, Sw }, 0 },
1ceb70f8 2498 { MOD_TABLE (MOD_8D) },
bf890a93 2499 { "movD", { Sw, Sv }, 0 },
1ceb70f8 2500 { REG_TABLE (REG_8F) },
252b5132 2501 /* 90 */
1ceb70f8 2502 { PREFIX_TABLE (PREFIX_90) },
bf890a93
IT
2503 { "xchgS", { RMeCX, eAX }, 0 },
2504 { "xchgS", { RMeDX, eAX }, 0 },
2505 { "xchgS", { RMeBX, eAX }, 0 },
2506 { "xchgS", { RMeSP, eAX }, 0 },
2507 { "xchgS", { RMeBP, eAX }, 0 },
2508 { "xchgS", { RMeSI, eAX }, 0 },
2509 { "xchgS", { RMeDI, eAX }, 0 },
252b5132 2510 /* 98 */
bf890a93
IT
2511 { "cW{t|}R", { XX }, 0 },
2512 { "cR{t|}O", { XX }, 0 },
4e7d34a6 2513 { X86_64_TABLE (X86_64_9A) },
592d1631 2514 { Bad_Opcode }, /* fwait */
bf890a93
IT
2515 { "pushfT", { XX }, 0 },
2516 { "popfT", { XX }, 0 },
2517 { "sahf", { XX }, 0 },
2518 { "lahf", { XX }, 0 },
252b5132 2519 /* a0 */
bf890a93
IT
2520 { "mov%LB", { AL, Ob }, 0 },
2521 { "mov%LS", { eAX, Ov }, 0 },
2522 { "mov%LB", { Ob, AL }, 0 },
2523 { "mov%LS", { Ov, eAX }, 0 },
2524 { "movs{b|}", { Ybr, Xb }, 0 },
2525 { "movs{R|}", { Yvr, Xv }, 0 },
2526 { "cmps{b|}", { Xb, Yb }, 0 },
2527 { "cmps{R|}", { Xv, Yv }, 0 },
252b5132 2528 /* a8 */
bf890a93
IT
2529 { "testB", { AL, Ib }, 0 },
2530 { "testS", { eAX, Iv }, 0 },
2531 { "stosB", { Ybr, AL }, 0 },
2532 { "stosS", { Yvr, eAX }, 0 },
2533 { "lodsB", { ALr, Xb }, 0 },
2534 { "lodsS", { eAXr, Xv }, 0 },
2535 { "scasB", { AL, Yb }, 0 },
2536 { "scasS", { eAX, Yv }, 0 },
252b5132 2537 /* b0 */
bf890a93
IT
2538 { "movB", { RMAL, Ib }, 0 },
2539 { "movB", { RMCL, Ib }, 0 },
2540 { "movB", { RMDL, Ib }, 0 },
2541 { "movB", { RMBL, Ib }, 0 },
2542 { "movB", { RMAH, Ib }, 0 },
2543 { "movB", { RMCH, Ib }, 0 },
2544 { "movB", { RMDH, Ib }, 0 },
2545 { "movB", { RMBH, Ib }, 0 },
252b5132 2546 /* b8 */
bf890a93
IT
2547 { "mov%LV", { RMeAX, Iv64 }, 0 },
2548 { "mov%LV", { RMeCX, Iv64 }, 0 },
2549 { "mov%LV", { RMeDX, Iv64 }, 0 },
2550 { "mov%LV", { RMeBX, Iv64 }, 0 },
2551 { "mov%LV", { RMeSP, Iv64 }, 0 },
2552 { "mov%LV", { RMeBP, Iv64 }, 0 },
2553 { "mov%LV", { RMeSI, Iv64 }, 0 },
2554 { "mov%LV", { RMeDI, Iv64 }, 0 },
252b5132 2555 /* c0 */
1ceb70f8
L
2556 { REG_TABLE (REG_C0) },
2557 { REG_TABLE (REG_C1) },
bf890a93
IT
2558 { "retT", { Iw, BND }, 0 },
2559 { "retT", { BND }, 0 },
4e7d34a6
L
2560 { X86_64_TABLE (X86_64_C4) },
2561 { X86_64_TABLE (X86_64_C5) },
1ceb70f8
L
2562 { REG_TABLE (REG_C6) },
2563 { REG_TABLE (REG_C7) },
252b5132 2564 /* c8 */
bf890a93
IT
2565 { "enterT", { Iw, Ib }, 0 },
2566 { "leaveT", { XX }, 0 },
2567 { "Jret{|f}P", { Iw }, 0 },
2568 { "Jret{|f}P", { XX }, 0 },
2569 { "int3", { XX }, 0 },
2570 { "int", { Ib }, 0 },
4e7d34a6 2571 { X86_64_TABLE (X86_64_CE) },
bf890a93 2572 { "iret%LP", { XX }, 0 },
252b5132 2573 /* d0 */
1ceb70f8
L
2574 { REG_TABLE (REG_D0) },
2575 { REG_TABLE (REG_D1) },
2576 { REG_TABLE (REG_D2) },
2577 { REG_TABLE (REG_D3) },
4e7d34a6
L
2578 { X86_64_TABLE (X86_64_D4) },
2579 { X86_64_TABLE (X86_64_D5) },
592d1631 2580 { Bad_Opcode },
bf890a93 2581 { "xlat", { DSBX }, 0 },
252b5132
RH
2582 /* d8 */
2583 { FLOAT },
2584 { FLOAT },
2585 { FLOAT },
2586 { FLOAT },
2587 { FLOAT },
2588 { FLOAT },
2589 { FLOAT },
2590 { FLOAT },
2591 /* e0 */
bf890a93
IT
2592 { "loopneFH", { Jb, XX, loop_jcxz_flag }, 0 },
2593 { "loopeFH", { Jb, XX, loop_jcxz_flag }, 0 },
2594 { "loopFH", { Jb, XX, loop_jcxz_flag }, 0 },
2595 { "jEcxzH", { Jb, XX, loop_jcxz_flag }, 0 },
2596 { "inB", { AL, Ib }, 0 },
2597 { "inG", { zAX, Ib }, 0 },
2598 { "outB", { Ib, AL }, 0 },
2599 { "outG", { Ib, zAX }, 0 },
252b5132 2600 /* e8 */
a72d2af2
L
2601 { X86_64_TABLE (X86_64_E8) },
2602 { X86_64_TABLE (X86_64_E9) },
4e7d34a6 2603 { X86_64_TABLE (X86_64_EA) },
bf890a93
IT
2604 { "jmp", { Jb, BND }, 0 },
2605 { "inB", { AL, indirDX }, 0 },
2606 { "inG", { zAX, indirDX }, 0 },
2607 { "outB", { indirDX, AL }, 0 },
2608 { "outG", { indirDX, zAX }, 0 },
252b5132 2609 /* f0 */
592d1631 2610 { Bad_Opcode }, /* lock prefix */
bf890a93 2611 { "icebp", { XX }, 0 },
592d1631
L
2612 { Bad_Opcode }, /* repne */
2613 { Bad_Opcode }, /* repz */
bf890a93
IT
2614 { "hlt", { XX }, 0 },
2615 { "cmc", { XX }, 0 },
1ceb70f8
L
2616 { REG_TABLE (REG_F6) },
2617 { REG_TABLE (REG_F7) },
252b5132 2618 /* f8 */
bf890a93
IT
2619 { "clc", { XX }, 0 },
2620 { "stc", { XX }, 0 },
2621 { "cli", { XX }, 0 },
2622 { "sti", { XX }, 0 },
2623 { "cld", { XX }, 0 },
2624 { "std", { XX }, 0 },
1ceb70f8
L
2625 { REG_TABLE (REG_FE) },
2626 { REG_TABLE (REG_FF) },
252b5132
RH
2627};
2628
6439fc28 2629static const struct dis386 dis386_twobyte[] = {
252b5132 2630 /* 00 */
1ceb70f8
L
2631 { REG_TABLE (REG_0F00 ) },
2632 { REG_TABLE (REG_0F01 ) },
bf890a93
IT
2633 { "larS", { Gv, Ew }, 0 },
2634 { "lslS", { Gv, Ew }, 0 },
592d1631 2635 { Bad_Opcode },
bf890a93
IT
2636 { "syscall", { XX }, 0 },
2637 { "clts", { XX }, 0 },
2638 { "sysret%LP", { XX }, 0 },
252b5132 2639 /* 08 */
bf890a93 2640 { "invd", { XX }, 0 },
3233d7d0 2641 { PREFIX_TABLE (PREFIX_0F09) },
592d1631 2642 { Bad_Opcode },
bf890a93 2643 { "ud2", { XX }, 0 },
592d1631 2644 { Bad_Opcode },
b5b1fc4f 2645 { REG_TABLE (REG_0F0D) },
bf890a93
IT
2646 { "femms", { XX }, 0 },
2647 { "", { MX, EM, OPSUF }, 0 }, /* See OP_3DNowSuffix. */
252b5132 2648 /* 10 */
1ceb70f8
L
2649 { PREFIX_TABLE (PREFIX_0F10) },
2650 { PREFIX_TABLE (PREFIX_0F11) },
2651 { PREFIX_TABLE (PREFIX_0F12) },
2652 { MOD_TABLE (MOD_0F13) },
507bd325
L
2653 { "unpcklpX", { XM, EXx }, PREFIX_OPCODE },
2654 { "unpckhpX", { XM, EXx }, PREFIX_OPCODE },
1ceb70f8
L
2655 { PREFIX_TABLE (PREFIX_0F16) },
2656 { MOD_TABLE (MOD_0F17) },
252b5132 2657 /* 18 */
1ceb70f8 2658 { REG_TABLE (REG_0F18) },
bf890a93 2659 { "nopQ", { Ev }, 0 },
7e8b059b
L
2660 { PREFIX_TABLE (PREFIX_0F1A) },
2661 { PREFIX_TABLE (PREFIX_0F1B) },
c48935d7 2662 { PREFIX_TABLE (PREFIX_0F1C) },
bf890a93 2663 { "nopQ", { Ev }, 0 },
603555e5 2664 { PREFIX_TABLE (PREFIX_0F1E) },
bf890a93 2665 { "nopQ", { Ev }, 0 },
252b5132 2666 /* 20 */
bf890a93
IT
2667 { "movZ", { Rm, Cm }, 0 },
2668 { "movZ", { Rm, Dm }, 0 },
2669 { "movZ", { Cm, Rm }, 0 },
2670 { "movZ", { Dm, Rm }, 0 },
1ceb70f8 2671 { MOD_TABLE (MOD_0F24) },
592d1631 2672 { Bad_Opcode },
1ceb70f8 2673 { MOD_TABLE (MOD_0F26) },
592d1631 2674 { Bad_Opcode },
252b5132 2675 /* 28 */
507bd325
L
2676 { "movapX", { XM, EXx }, PREFIX_OPCODE },
2677 { "movapX", { EXxS, XM }, PREFIX_OPCODE },
1ceb70f8
L
2678 { PREFIX_TABLE (PREFIX_0F2A) },
2679 { PREFIX_TABLE (PREFIX_0F2B) },
2680 { PREFIX_TABLE (PREFIX_0F2C) },
2681 { PREFIX_TABLE (PREFIX_0F2D) },
2682 { PREFIX_TABLE (PREFIX_0F2E) },
2683 { PREFIX_TABLE (PREFIX_0F2F) },
252b5132 2684 /* 30 */
bf890a93
IT
2685 { "wrmsr", { XX }, 0 },
2686 { "rdtsc", { XX }, 0 },
2687 { "rdmsr", { XX }, 0 },
2688 { "rdpmc", { XX }, 0 },
2689 { "sysenter", { XX }, 0 },
2690 { "sysexit", { XX }, 0 },
592d1631 2691 { Bad_Opcode },
bf890a93 2692 { "getsec", { XX }, 0 },
252b5132 2693 /* 38 */
507bd325 2694 { THREE_BYTE_TABLE_PREFIX (THREE_BYTE_0F38, PREFIX_OPCODE) },
592d1631 2695 { Bad_Opcode },
507bd325 2696 { THREE_BYTE_TABLE_PREFIX (THREE_BYTE_0F3A, PREFIX_OPCODE) },
592d1631
L
2697 { Bad_Opcode },
2698 { Bad_Opcode },
2699 { Bad_Opcode },
2700 { Bad_Opcode },
2701 { Bad_Opcode },
252b5132 2702 /* 40 */
bf890a93
IT
2703 { "cmovoS", { Gv, Ev }, 0 },
2704 { "cmovnoS", { Gv, Ev }, 0 },
2705 { "cmovbS", { Gv, Ev }, 0 },
2706 { "cmovaeS", { Gv, Ev }, 0 },
2707 { "cmoveS", { Gv, Ev }, 0 },
2708 { "cmovneS", { Gv, Ev }, 0 },
2709 { "cmovbeS", { Gv, Ev }, 0 },
2710 { "cmovaS", { Gv, Ev }, 0 },
252b5132 2711 /* 48 */
bf890a93
IT
2712 { "cmovsS", { Gv, Ev }, 0 },
2713 { "cmovnsS", { Gv, Ev }, 0 },
2714 { "cmovpS", { Gv, Ev }, 0 },
2715 { "cmovnpS", { Gv, Ev }, 0 },
2716 { "cmovlS", { Gv, Ev }, 0 },
2717 { "cmovgeS", { Gv, Ev }, 0 },
2718 { "cmovleS", { Gv, Ev }, 0 },
2719 { "cmovgS", { Gv, Ev }, 0 },
252b5132 2720 /* 50 */
75c135a8 2721 { MOD_TABLE (MOD_0F51) },
1ceb70f8
L
2722 { PREFIX_TABLE (PREFIX_0F51) },
2723 { PREFIX_TABLE (PREFIX_0F52) },
2724 { PREFIX_TABLE (PREFIX_0F53) },
507bd325
L
2725 { "andpX", { XM, EXx }, PREFIX_OPCODE },
2726 { "andnpX", { XM, EXx }, PREFIX_OPCODE },
2727 { "orpX", { XM, EXx }, PREFIX_OPCODE },
2728 { "xorpX", { XM, EXx }, PREFIX_OPCODE },
252b5132 2729 /* 58 */
1ceb70f8
L
2730 { PREFIX_TABLE (PREFIX_0F58) },
2731 { PREFIX_TABLE (PREFIX_0F59) },
2732 { PREFIX_TABLE (PREFIX_0F5A) },
2733 { PREFIX_TABLE (PREFIX_0F5B) },
2734 { PREFIX_TABLE (PREFIX_0F5C) },
2735 { PREFIX_TABLE (PREFIX_0F5D) },
2736 { PREFIX_TABLE (PREFIX_0F5E) },
2737 { PREFIX_TABLE (PREFIX_0F5F) },
252b5132 2738 /* 60 */
1ceb70f8
L
2739 { PREFIX_TABLE (PREFIX_0F60) },
2740 { PREFIX_TABLE (PREFIX_0F61) },
2741 { PREFIX_TABLE (PREFIX_0F62) },
507bd325
L
2742 { "packsswb", { MX, EM }, PREFIX_OPCODE },
2743 { "pcmpgtb", { MX, EM }, PREFIX_OPCODE },
2744 { "pcmpgtw", { MX, EM }, PREFIX_OPCODE },
2745 { "pcmpgtd", { MX, EM }, PREFIX_OPCODE },
2746 { "packuswb", { MX, EM }, PREFIX_OPCODE },
252b5132 2747 /* 68 */
507bd325
L
2748 { "punpckhbw", { MX, EM }, PREFIX_OPCODE },
2749 { "punpckhwd", { MX, EM }, PREFIX_OPCODE },
2750 { "punpckhdq", { MX, EM }, PREFIX_OPCODE },
2751 { "packssdw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8
L
2752 { PREFIX_TABLE (PREFIX_0F6C) },
2753 { PREFIX_TABLE (PREFIX_0F6D) },
507bd325 2754 { "movK", { MX, Edq }, PREFIX_OPCODE },
1ceb70f8 2755 { PREFIX_TABLE (PREFIX_0F6F) },
252b5132 2756 /* 70 */
1ceb70f8
L
2757 { PREFIX_TABLE (PREFIX_0F70) },
2758 { REG_TABLE (REG_0F71) },
2759 { REG_TABLE (REG_0F72) },
2760 { REG_TABLE (REG_0F73) },
507bd325
L
2761 { "pcmpeqb", { MX, EM }, PREFIX_OPCODE },
2762 { "pcmpeqw", { MX, EM }, PREFIX_OPCODE },
2763 { "pcmpeqd", { MX, EM }, PREFIX_OPCODE },
2764 { "emms", { XX }, PREFIX_OPCODE },
252b5132 2765 /* 78 */
1ceb70f8
L
2766 { PREFIX_TABLE (PREFIX_0F78) },
2767 { PREFIX_TABLE (PREFIX_0F79) },
1f334aeb 2768 { Bad_Opcode },
592d1631 2769 { Bad_Opcode },
1ceb70f8
L
2770 { PREFIX_TABLE (PREFIX_0F7C) },
2771 { PREFIX_TABLE (PREFIX_0F7D) },
2772 { PREFIX_TABLE (PREFIX_0F7E) },
2773 { PREFIX_TABLE (PREFIX_0F7F) },
252b5132 2774 /* 80 */
bf890a93
IT
2775 { "joH", { Jv, BND, cond_jump_flag }, 0 },
2776 { "jnoH", { Jv, BND, cond_jump_flag }, 0 },
2777 { "jbH", { Jv, BND, cond_jump_flag }, 0 },
2778 { "jaeH", { Jv, BND, cond_jump_flag }, 0 },
2779 { "jeH", { Jv, BND, cond_jump_flag }, 0 },
2780 { "jneH", { Jv, BND, cond_jump_flag }, 0 },
2781 { "jbeH", { Jv, BND, cond_jump_flag }, 0 },
2782 { "jaH", { Jv, BND, cond_jump_flag }, 0 },
252b5132 2783 /* 88 */
bf890a93
IT
2784 { "jsH", { Jv, BND, cond_jump_flag }, 0 },
2785 { "jnsH", { Jv, BND, cond_jump_flag }, 0 },
2786 { "jpH", { Jv, BND, cond_jump_flag }, 0 },
2787 { "jnpH", { Jv, BND, cond_jump_flag }, 0 },
2788 { "jlH", { Jv, BND, cond_jump_flag }, 0 },
2789 { "jgeH", { Jv, BND, cond_jump_flag }, 0 },
2790 { "jleH", { Jv, BND, cond_jump_flag }, 0 },
2791 { "jgH", { Jv, BND, cond_jump_flag }, 0 },
252b5132 2792 /* 90 */
bf890a93
IT
2793 { "seto", { Eb }, 0 },
2794 { "setno", { Eb }, 0 },
2795 { "setb", { Eb }, 0 },
2796 { "setae", { Eb }, 0 },
2797 { "sete", { Eb }, 0 },
2798 { "setne", { Eb }, 0 },
2799 { "setbe", { Eb }, 0 },
2800 { "seta", { Eb }, 0 },
252b5132 2801 /* 98 */
bf890a93
IT
2802 { "sets", { Eb }, 0 },
2803 { "setns", { Eb }, 0 },
2804 { "setp", { Eb }, 0 },
2805 { "setnp", { Eb }, 0 },
2806 { "setl", { Eb }, 0 },
2807 { "setge", { Eb }, 0 },
2808 { "setle", { Eb }, 0 },
2809 { "setg", { Eb }, 0 },
252b5132 2810 /* a0 */
bf890a93
IT
2811 { "pushT", { fs }, 0 },
2812 { "popT", { fs }, 0 },
2813 { "cpuid", { XX }, 0 },
2814 { "btS", { Ev, Gv }, 0 },
2815 { "shldS", { Ev, Gv, Ib }, 0 },
2816 { "shldS", { Ev, Gv, CL }, 0 },
1ceb70f8
L
2817 { REG_TABLE (REG_0FA6) },
2818 { REG_TABLE (REG_0FA7) },
252b5132 2819 /* a8 */
bf890a93
IT
2820 { "pushT", { gs }, 0 },
2821 { "popT", { gs }, 0 },
2822 { "rsm", { XX }, 0 },
2823 { "btsS", { Evh1, Gv }, 0 },
2824 { "shrdS", { Ev, Gv, Ib }, 0 },
2825 { "shrdS", { Ev, Gv, CL }, 0 },
1ceb70f8 2826 { REG_TABLE (REG_0FAE) },
bf890a93 2827 { "imulS", { Gv, Ev }, 0 },
252b5132 2828 /* b0 */
bf890a93
IT
2829 { "cmpxchgB", { Ebh1, Gb }, 0 },
2830 { "cmpxchgS", { Evh1, Gv }, 0 },
1ceb70f8 2831 { MOD_TABLE (MOD_0FB2) },
bf890a93 2832 { "btrS", { Evh1, Gv }, 0 },
1ceb70f8
L
2833 { MOD_TABLE (MOD_0FB4) },
2834 { MOD_TABLE (MOD_0FB5) },
bf890a93
IT
2835 { "movz{bR|x}", { Gv, Eb }, 0 },
2836 { "movz{wR|x}", { Gv, Ew }, 0 }, /* yes, there really is movzww ! */
252b5132 2837 /* b8 */
1ceb70f8 2838 { PREFIX_TABLE (PREFIX_0FB8) },
66f1eba0 2839 { "ud1S", { Gv, Ev }, 0 },
1ceb70f8 2840 { REG_TABLE (REG_0FBA) },
bf890a93 2841 { "btcS", { Evh1, Gv }, 0 },
f12dc422 2842 { PREFIX_TABLE (PREFIX_0FBC) },
1ceb70f8 2843 { PREFIX_TABLE (PREFIX_0FBD) },
bf890a93
IT
2844 { "movs{bR|x}", { Gv, Eb }, 0 },
2845 { "movs{wR|x}", { Gv, Ew }, 0 }, /* yes, there really is movsww ! */
252b5132 2846 /* c0 */
bf890a93
IT
2847 { "xaddB", { Ebh1, Gb }, 0 },
2848 { "xaddS", { Evh1, Gv }, 0 },
1ceb70f8 2849 { PREFIX_TABLE (PREFIX_0FC2) },
a8484f96 2850 { MOD_TABLE (MOD_0FC3) },
507bd325
L
2851 { "pinsrw", { MX, Edqw, Ib }, PREFIX_OPCODE },
2852 { "pextrw", { Gdq, MS, Ib }, PREFIX_OPCODE },
2853 { "shufpX", { XM, EXx, Ib }, PREFIX_OPCODE },
1ceb70f8 2854 { REG_TABLE (REG_0FC7) },
252b5132 2855 /* c8 */
bf890a93
IT
2856 { "bswap", { RMeAX }, 0 },
2857 { "bswap", { RMeCX }, 0 },
2858 { "bswap", { RMeDX }, 0 },
2859 { "bswap", { RMeBX }, 0 },
2860 { "bswap", { RMeSP }, 0 },
2861 { "bswap", { RMeBP }, 0 },
2862 { "bswap", { RMeSI }, 0 },
2863 { "bswap", { RMeDI }, 0 },
252b5132 2864 /* d0 */
1ceb70f8 2865 { PREFIX_TABLE (PREFIX_0FD0) },
507bd325
L
2866 { "psrlw", { MX, EM }, PREFIX_OPCODE },
2867 { "psrld", { MX, EM }, PREFIX_OPCODE },
2868 { "psrlq", { MX, EM }, PREFIX_OPCODE },
2869 { "paddq", { MX, EM }, PREFIX_OPCODE },
2870 { "pmullw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8 2871 { PREFIX_TABLE (PREFIX_0FD6) },
75c135a8 2872 { MOD_TABLE (MOD_0FD7) },
252b5132 2873 /* d8 */
507bd325
L
2874 { "psubusb", { MX, EM }, PREFIX_OPCODE },
2875 { "psubusw", { MX, EM }, PREFIX_OPCODE },
2876 { "pminub", { MX, EM }, PREFIX_OPCODE },
2877 { "pand", { MX, EM }, PREFIX_OPCODE },
2878 { "paddusb", { MX, EM }, PREFIX_OPCODE },
2879 { "paddusw", { MX, EM }, PREFIX_OPCODE },
2880 { "pmaxub", { MX, EM }, PREFIX_OPCODE },
2881 { "pandn", { MX, EM }, PREFIX_OPCODE },
252b5132 2882 /* e0 */
507bd325
L
2883 { "pavgb", { MX, EM }, PREFIX_OPCODE },
2884 { "psraw", { MX, EM }, PREFIX_OPCODE },
2885 { "psrad", { MX, EM }, PREFIX_OPCODE },
2886 { "pavgw", { MX, EM }, PREFIX_OPCODE },
2887 { "pmulhuw", { MX, EM }, PREFIX_OPCODE },
2888 { "pmulhw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8
L
2889 { PREFIX_TABLE (PREFIX_0FE6) },
2890 { PREFIX_TABLE (PREFIX_0FE7) },
252b5132 2891 /* e8 */
507bd325
L
2892 { "psubsb", { MX, EM }, PREFIX_OPCODE },
2893 { "psubsw", { MX, EM }, PREFIX_OPCODE },
2894 { "pminsw", { MX, EM }, PREFIX_OPCODE },
2895 { "por", { MX, EM }, PREFIX_OPCODE },
2896 { "paddsb", { MX, EM }, PREFIX_OPCODE },
2897 { "paddsw", { MX, EM }, PREFIX_OPCODE },
2898 { "pmaxsw", { MX, EM }, PREFIX_OPCODE },
2899 { "pxor", { MX, EM }, PREFIX_OPCODE },
252b5132 2900 /* f0 */
1ceb70f8 2901 { PREFIX_TABLE (PREFIX_0FF0) },
507bd325
L
2902 { "psllw", { MX, EM }, PREFIX_OPCODE },
2903 { "pslld", { MX, EM }, PREFIX_OPCODE },
2904 { "psllq", { MX, EM }, PREFIX_OPCODE },
2905 { "pmuludq", { MX, EM }, PREFIX_OPCODE },
2906 { "pmaddwd", { MX, EM }, PREFIX_OPCODE },
2907 { "psadbw", { MX, EM }, PREFIX_OPCODE },
1ceb70f8 2908 { PREFIX_TABLE (PREFIX_0FF7) },
252b5132 2909 /* f8 */
507bd325
L
2910 { "psubb", { MX, EM }, PREFIX_OPCODE },
2911 { "psubw", { MX, EM }, PREFIX_OPCODE },
2912 { "psubd", { MX, EM }, PREFIX_OPCODE },
2913 { "psubq", { MX, EM }, PREFIX_OPCODE },
2914 { "paddb", { MX, EM }, PREFIX_OPCODE },
2915 { "paddw", { MX, EM }, PREFIX_OPCODE },
2916 { "paddd", { MX, EM }, PREFIX_OPCODE },
66f1eba0 2917 { "ud0S", { Gv, Ev }, 0 },
252b5132
RH
2918};
2919
2920static const unsigned char onebyte_has_modrm[256] = {
c608c12e
AM
2921 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2922 /* ------------------------------- */
2923 /* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 00 */
2924 /* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 10 */
2925 /* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 20 */
2926 /* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 30 */
2927 /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40 */
2928 /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50 */
2929 /* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, /* 60 */
2930 /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70 */
2931 /* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 80 */
2932 /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 90 */
2933 /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* a0 */
2934 /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* b0 */
2935 /* c0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* c0 */
2936 /* d0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* d0 */
2937 /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* e0 */
2938 /* f0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1 /* f0 */
2939 /* ------------------------------- */
2940 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
252b5132
RH
2941};
2942
2943static const unsigned char twobyte_has_modrm[256] = {
c608c12e
AM
2944 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2945 /* ------------------------------- */
252b5132 2946 /* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */
b5b1fc4f 2947 /* 10 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1f */
85f10a01 2948 /* 20 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 2f */
331d2d0d 2949 /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
252b5132 2950 /* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */
4bba6815
AM
2951 /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */
2952 /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */
85f10a01 2953 /* 70 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 7f */
252b5132
RH
2954 /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
2955 /* 90 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9f */
30d1c836 2956 /* a0 */ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1, /* af */
66f1eba0 2957 /* b0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* bf */
252b5132 2958 /* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */
ca164297 2959 /* d0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
4bba6815 2960 /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
66f1eba0 2961 /* f0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 /* ff */
c608c12e
AM
2962 /* ------------------------------- */
2963 /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2964};
2965
252b5132
RH
2966static char obuf[100];
2967static char *obufp;
ea397f5b 2968static char *mnemonicendp;
252b5132
RH
2969static char scratchbuf[100];
2970static unsigned char *start_codep;
2971static unsigned char *insn_codep;
2972static unsigned char *codep;
285ca992 2973static unsigned char *end_codep;
f16cd0d5
L
2974static int last_lock_prefix;
2975static int last_repz_prefix;
2976static int last_repnz_prefix;
2977static int last_data_prefix;
2978static int last_addr_prefix;
2979static int last_rex_prefix;
2980static int last_seg_prefix;
d9949a36 2981static int fwait_prefix;
285ca992
L
2982/* The active segment register prefix. */
2983static int active_seg_prefix;
f16cd0d5
L
2984#define MAX_CODE_LENGTH 15
2985/* We can up to 14 prefixes since the maximum instruction length is
2986 15bytes. */
2987static int all_prefixes[MAX_CODE_LENGTH - 1];
252b5132 2988static disassemble_info *the_info;
7967e09e
L
2989static struct
2990 {
2991 int mod;
7967e09e 2992 int reg;
484c222e 2993 int rm;
7967e09e
L
2994 }
2995modrm;
4bba6815 2996static unsigned char need_modrm;
dfc8cf43
L
2997static struct
2998 {
2999 int scale;
3000 int index;
3001 int base;
3002 }
3003sib;
c0f3af97
L
3004static struct
3005 {
3006 int register_specifier;
3007 int length;
3008 int prefix;
3009 int w;
43234a1e
L
3010 int evex;
3011 int r;
3012 int v;
3013 int mask_register_specifier;
3014 int zeroing;
3015 int ll;
3016 int b;
c0f3af97
L
3017 }
3018vex;
3019static unsigned char need_vex;
3020static unsigned char need_vex_reg;
dae39acc 3021static unsigned char vex_w_done;
252b5132 3022
ea397f5b
L
3023struct op
3024 {
3025 const char *name;
3026 unsigned int len;
3027 };
3028
4bba6815
AM
3029/* If we are accessing mod/rm/reg without need_modrm set, then the
3030 values are stale. Hitting this abort likely indicates that you
3031 need to update onebyte_has_modrm or twobyte_has_modrm. */
3032#define MODRM_CHECK if (!need_modrm) abort ()
3033
d708bcba
AM
3034static const char **names64;
3035static const char **names32;
3036static const char **names16;
3037static const char **names8;
3038static const char **names8rex;
3039static const char **names_seg;
db51cc60
L
3040static const char *index64;
3041static const char *index32;
d708bcba 3042static const char **index16;
7e8b059b 3043static const char **names_bnd;
d708bcba
AM
3044
3045static const char *intel_names64[] = {
3046 "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
3047 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
3048};
3049static const char *intel_names32[] = {
3050 "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
3051 "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"
3052};
3053static const char *intel_names16[] = {
3054 "ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
3055 "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
3056};
3057static const char *intel_names8[] = {
3058 "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh",
3059};
3060static const char *intel_names8rex[] = {
3061 "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
3062 "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"
3063};
3064static const char *intel_names_seg[] = {
3065 "es", "cs", "ss", "ds", "fs", "gs", "?", "?",
3066};
db51cc60
L
3067static const char *intel_index64 = "riz";
3068static const char *intel_index32 = "eiz";
d708bcba
AM
3069static const char *intel_index16[] = {
3070 "bx+si", "bx+di", "bp+si", "bp+di", "si", "di", "bp", "bx"
3071};
3072
3073static const char *att_names64[] = {
3074 "%rax", "%rcx", "%rdx", "%rbx", "%rsp", "%rbp", "%rsi", "%rdi",
52b15da3
JH
3075 "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
3076};
d708bcba
AM
3077static const char *att_names32[] = {
3078 "%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi",
52b15da3 3079 "%r8d", "%r9d", "%r10d", "%r11d", "%r12d", "%r13d", "%r14d", "%r15d"
252b5132 3080};
d708bcba
AM
3081static const char *att_names16[] = {
3082 "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di",
52b15da3 3083 "%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w"
252b5132 3084};
d708bcba
AM
3085static const char *att_names8[] = {
3086 "%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh",
252b5132 3087};
d708bcba
AM
3088static const char *att_names8rex[] = {
3089 "%al", "%cl", "%dl", "%bl", "%spl", "%bpl", "%sil", "%dil",
52b15da3
JH
3090 "%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b"
3091};
d708bcba
AM
3092static const char *att_names_seg[] = {
3093 "%es", "%cs", "%ss", "%ds", "%fs", "%gs", "%?", "%?",
252b5132 3094};
db51cc60
L
3095static const char *att_index64 = "%riz";
3096static const char *att_index32 = "%eiz";
d708bcba
AM
3097static const char *att_index16[] = {
3098 "%bx,%si", "%bx,%di", "%bp,%si", "%bp,%di", "%si", "%di", "%bp", "%bx"
252b5132
RH
3099};
3100
b9733481
L
3101static const char **names_mm;
3102static const char *intel_names_mm[] = {
3103 "mm0", "mm1", "mm2", "mm3",
3104 "mm4", "mm5", "mm6", "mm7"
3105};
3106static const char *att_names_mm[] = {
3107 "%mm0", "%mm1", "%mm2", "%mm3",
3108 "%mm4", "%mm5", "%mm6", "%mm7"
3109};
3110
7e8b059b
L
3111static const char *intel_names_bnd[] = {
3112 "bnd0", "bnd1", "bnd2", "bnd3"
3113};
3114
3115static const char *att_names_bnd[] = {
3116 "%bnd0", "%bnd1", "%bnd2", "%bnd3"
3117};
3118
b9733481
L
3119static const char **names_xmm;
3120static const char *intel_names_xmm[] = {
3121 "xmm0", "xmm1", "xmm2", "xmm3",
3122 "xmm4", "xmm5", "xmm6", "xmm7",
3123 "xmm8", "xmm9", "xmm10", "xmm11",
43234a1e
L
3124 "xmm12", "xmm13", "xmm14", "xmm15",
3125 "xmm16", "xmm17", "xmm18", "xmm19",
3126 "xmm20", "xmm21", "xmm22", "xmm23",
3127 "xmm24", "xmm25", "xmm26", "xmm27",
3128 "xmm28", "xmm29", "xmm30", "xmm31"
b9733481
L
3129};
3130static const char *att_names_xmm[] = {
3131 "%xmm0", "%xmm1", "%xmm2", "%xmm3",
3132 "%xmm4", "%xmm5", "%xmm6", "%xmm7",
3133 "%xmm8", "%xmm9", "%xmm10", "%xmm11",
43234a1e
L
3134 "%xmm12", "%xmm13", "%xmm14", "%xmm15",
3135 "%xmm16", "%xmm17", "%xmm18", "%xmm19",
3136 "%xmm20", "%xmm21", "%xmm22", "%xmm23",
3137 "%xmm24", "%xmm25", "%xmm26", "%xmm27",
3138 "%xmm28", "%xmm29", "%xmm30", "%xmm31"
b9733481
L
3139};
3140
3141static const char **names_ymm;
3142static const char *intel_names_ymm[] = {
3143 "ymm0", "ymm1", "ymm2", "ymm3",
3144 "ymm4", "ymm5", "ymm6", "ymm7",
3145 "ymm8", "ymm9", "ymm10", "ymm11",
43234a1e
L
3146 "ymm12", "ymm13", "ymm14", "ymm15",
3147 "ymm16", "ymm17", "ymm18", "ymm19",
3148 "ymm20", "ymm21", "ymm22", "ymm23",
3149 "ymm24", "ymm25", "ymm26", "ymm27",
3150 "ymm28", "ymm29", "ymm30", "ymm31"
b9733481
L
3151};
3152static const char *att_names_ymm[] = {
3153 "%ymm0", "%ymm1", "%ymm2", "%ymm3",
3154 "%ymm4", "%ymm5", "%ymm6", "%ymm7",
3155 "%ymm8", "%ymm9", "%ymm10", "%ymm11",
43234a1e
L
3156 "%ymm12", "%ymm13", "%ymm14", "%ymm15",
3157 "%ymm16", "%ymm17", "%ymm18", "%ymm19",
3158 "%ymm20", "%ymm21", "%ymm22", "%ymm23",
3159 "%ymm24", "%ymm25", "%ymm26", "%ymm27",
3160 "%ymm28", "%ymm29", "%ymm30", "%ymm31"
3161};
3162
3163static const char **names_zmm;
3164static const char *intel_names_zmm[] = {
3165 "zmm0", "zmm1", "zmm2", "zmm3",
3166 "zmm4", "zmm5", "zmm6", "zmm7",
3167 "zmm8", "zmm9", "zmm10", "zmm11",
3168 "zmm12", "zmm13", "zmm14", "zmm15",
3169 "zmm16", "zmm17", "zmm18", "zmm19",
3170 "zmm20", "zmm21", "zmm22", "zmm23",
3171 "zmm24", "zmm25", "zmm26", "zmm27",
3172 "zmm28", "zmm29", "zmm30", "zmm31"
3173};
3174static const char *att_names_zmm[] = {
3175 "%zmm0", "%zmm1", "%zmm2", "%zmm3",
3176 "%zmm4", "%zmm5", "%zmm6", "%zmm7",
3177 "%zmm8", "%zmm9", "%zmm10", "%zmm11",
3178 "%zmm12", "%zmm13", "%zmm14", "%zmm15",
3179 "%zmm16", "%zmm17", "%zmm18", "%zmm19",
3180 "%zmm20", "%zmm21", "%zmm22", "%zmm23",
3181 "%zmm24", "%zmm25", "%zmm26", "%zmm27",
3182 "%zmm28", "%zmm29", "%zmm30", "%zmm31"
3183};
3184
3185static const char **names_mask;
3186static const char *intel_names_mask[] = {
3187 "k0", "k1", "k2", "k3", "k4", "k5", "k6", "k7"
3188};
3189static const char *att_names_mask[] = {
3190 "%k0", "%k1", "%k2", "%k3", "%k4", "%k5", "%k6", "%k7"
3191};
3192
3193static const char *names_rounding[] =
3194{
3195 "{rn-sae}",
3196 "{rd-sae}",
3197 "{ru-sae}",
3198 "{rz-sae}"
b9733481
L
3199};
3200
1ceb70f8
L
3201static const struct dis386 reg_table[][8] = {
3202 /* REG_80 */
252b5132 3203 {
bf890a93
IT
3204 { "addA", { Ebh1, Ib }, 0 },
3205 { "orA", { Ebh1, Ib }, 0 },
3206 { "adcA", { Ebh1, Ib }, 0 },
3207 { "sbbA", { Ebh1, Ib }, 0 },
3208 { "andA", { Ebh1, Ib }, 0 },
3209 { "subA", { Ebh1, Ib }, 0 },
3210 { "xorA", { Ebh1, Ib }, 0 },
3211 { "cmpA", { Eb, Ib }, 0 },
252b5132 3212 },
1ceb70f8 3213 /* REG_81 */
252b5132 3214 {
bf890a93
IT
3215 { "addQ", { Evh1, Iv }, 0 },
3216 { "orQ", { Evh1, Iv }, 0 },
3217 { "adcQ", { Evh1, Iv }, 0 },
3218 { "sbbQ", { Evh1, Iv }, 0 },
3219 { "andQ", { Evh1, Iv }, 0 },
3220 { "subQ", { Evh1, Iv }, 0 },
3221 { "xorQ", { Evh1, Iv }, 0 },
3222 { "cmpQ", { Ev, Iv }, 0 },
252b5132 3223 },
7148c369 3224 /* REG_83 */
252b5132 3225 {
bf890a93
IT
3226 { "addQ", { Evh1, sIb }, 0 },
3227 { "orQ", { Evh1, sIb }, 0 },
3228 { "adcQ", { Evh1, sIb }, 0 },
3229 { "sbbQ", { Evh1, sIb }, 0 },
3230 { "andQ", { Evh1, sIb }, 0 },
3231 { "subQ", { Evh1, sIb }, 0 },
3232 { "xorQ", { Evh1, sIb }, 0 },
3233 { "cmpQ", { Ev, sIb }, 0 },
252b5132 3234 },
1ceb70f8 3235 /* REG_8F */
4e7d34a6 3236 {
bf890a93 3237 { "popU", { stackEv }, 0 },
c48244a5 3238 { XOP_8F_TABLE (XOP_09) },
592d1631
L
3239 { Bad_Opcode },
3240 { Bad_Opcode },
3241 { Bad_Opcode },
f88c9eb0 3242 { XOP_8F_TABLE (XOP_09) },
4e7d34a6 3243 },
1ceb70f8 3244 /* REG_C0 */
252b5132 3245 {
bf890a93
IT
3246 { "rolA", { Eb, Ib }, 0 },
3247 { "rorA", { Eb, Ib }, 0 },
3248 { "rclA", { Eb, Ib }, 0 },
3249 { "rcrA", { Eb, Ib }, 0 },
3250 { "shlA", { Eb, Ib }, 0 },
3251 { "shrA", { Eb, Ib }, 0 },
e4bdd679 3252 { "shlA", { Eb, Ib }, 0 },
bf890a93 3253 { "sarA", { Eb, Ib }, 0 },
252b5132 3254 },
1ceb70f8 3255 /* REG_C1 */
252b5132 3256 {
bf890a93
IT
3257 { "rolQ", { Ev, Ib }, 0 },
3258 { "rorQ", { Ev, Ib }, 0 },
3259 { "rclQ", { Ev, Ib }, 0 },
3260 { "rcrQ", { Ev, Ib }, 0 },
3261 { "shlQ", { Ev, Ib }, 0 },
3262 { "shrQ", { Ev, Ib }, 0 },
e4bdd679 3263 { "shlQ", { Ev, Ib }, 0 },
bf890a93 3264 { "sarQ", { Ev, Ib }, 0 },
252b5132 3265 },
1ceb70f8 3266 /* REG_C6 */
4e7d34a6 3267 {
bf890a93 3268 { "movA", { Ebh3, Ib }, 0 },
42164a71
L
3269 { Bad_Opcode },
3270 { Bad_Opcode },
3271 { Bad_Opcode },
3272 { Bad_Opcode },
3273 { Bad_Opcode },
3274 { Bad_Opcode },
3275 { MOD_TABLE (MOD_C6_REG_7) },
4e7d34a6 3276 },
1ceb70f8 3277 /* REG_C7 */
4e7d34a6 3278 {
bf890a93 3279 { "movQ", { Evh3, Iv }, 0 },
42164a71
L
3280 { Bad_Opcode },
3281 { Bad_Opcode },
3282 { Bad_Opcode },
3283 { Bad_Opcode },
3284 { Bad_Opcode },
3285 { Bad_Opcode },
3286 { MOD_TABLE (MOD_C7_REG_7) },
4e7d34a6 3287 },
1ceb70f8 3288 /* REG_D0 */
252b5132 3289 {
bf890a93
IT
3290 { "rolA", { Eb, I1 }, 0 },
3291 { "rorA", { Eb, I1 }, 0 },
3292 { "rclA", { Eb, I1 }, 0 },
3293 { "rcrA", { Eb, I1 }, 0 },
3294 { "shlA", { Eb, I1 }, 0 },
3295 { "shrA", { Eb, I1 }, 0 },
e4bdd679 3296 { "shlA", { Eb, I1 }, 0 },
bf890a93 3297 { "sarA", { Eb, I1 }, 0 },
252b5132 3298 },
1ceb70f8 3299 /* REG_D1 */
252b5132 3300 {
bf890a93
IT
3301 { "rolQ", { Ev, I1 }, 0 },
3302 { "rorQ", { Ev, I1 }, 0 },
3303 { "rclQ", { Ev, I1 }, 0 },
3304 { "rcrQ", { Ev, I1 }, 0 },
3305 { "shlQ", { Ev, I1 }, 0 },
3306 { "shrQ", { Ev, I1 }, 0 },
e4bdd679 3307 { "shlQ", { Ev, I1 }, 0 },
bf890a93 3308 { "sarQ", { Ev, I1 }, 0 },
252b5132 3309 },
1ceb70f8 3310 /* REG_D2 */
252b5132 3311 {
bf890a93
IT
3312 { "rolA", { Eb, CL }, 0 },
3313 { "rorA", { Eb, CL }, 0 },
3314 { "rclA", { Eb, CL }, 0 },
3315 { "rcrA", { Eb, CL }, 0 },
3316 { "shlA", { Eb, CL }, 0 },
3317 { "shrA", { Eb, CL }, 0 },
e4bdd679 3318 { "shlA", { Eb, CL }, 0 },
bf890a93 3319 { "sarA", { Eb, CL }, 0 },
252b5132 3320 },
1ceb70f8 3321 /* REG_D3 */
252b5132 3322 {
bf890a93
IT
3323 { "rolQ", { Ev, CL }, 0 },
3324 { "rorQ", { Ev, CL }, 0 },
3325 { "rclQ", { Ev, CL }, 0 },
3326 { "rcrQ", { Ev, CL }, 0 },
3327 { "shlQ", { Ev, CL }, 0 },
3328 { "shrQ", { Ev, CL }, 0 },
e4bdd679 3329 { "shlQ", { Ev, CL }, 0 },
bf890a93 3330 { "sarQ", { Ev, CL }, 0 },
252b5132 3331 },
1ceb70f8 3332 /* REG_F6 */
252b5132 3333 {
bf890a93 3334 { "testA", { Eb, Ib }, 0 },
7db2c588 3335 { "testA", { Eb, Ib }, 0 },
bf890a93
IT
3336 { "notA", { Ebh1 }, 0 },
3337 { "negA", { Ebh1 }, 0 },
3338 { "mulA", { Eb }, 0 }, /* Don't print the implicit %al register, */
3339 { "imulA", { Eb }, 0 }, /* to distinguish these opcodes from other */
3340 { "divA", { Eb }, 0 }, /* mul/imul opcodes. Do the same for div */
3341 { "idivA", { Eb }, 0 }, /* and idiv for consistency. */
252b5132 3342 },
1ceb70f8 3343 /* REG_F7 */
252b5132 3344 {
bf890a93 3345 { "testQ", { Ev, Iv }, 0 },
7db2c588 3346 { "testQ", { Ev, Iv }, 0 },
bf890a93
IT
3347 { "notQ", { Evh1 }, 0 },
3348 { "negQ", { Evh1 }, 0 },
3349 { "mulQ", { Ev }, 0 }, /* Don't print the implicit register. */
3350 { "imulQ", { Ev }, 0 },
3351 { "divQ", { Ev }, 0 },
3352 { "idivQ", { Ev }, 0 },
252b5132 3353 },
1ceb70f8 3354 /* REG_FE */
252b5132 3355 {
bf890a93
IT
3356 { "incA", { Ebh1 }, 0 },
3357 { "decA", { Ebh1 }, 0 },
252b5132 3358 },
1ceb70f8 3359 /* REG_FF */
252b5132 3360 {
bf890a93
IT
3361 { "incQ", { Evh1 }, 0 },
3362 { "decQ", { Evh1 }, 0 },
9fef80d6 3363 { "call{&|}", { NOTRACK, indirEv, BND }, 0 },
4a357820 3364 { MOD_TABLE (MOD_FF_REG_3) },
9fef80d6 3365 { "jmp{&|}", { NOTRACK, indirEv, BND }, 0 },
4a357820 3366 { MOD_TABLE (MOD_FF_REG_5) },
bf890a93 3367 { "pushU", { stackEv }, 0 },
592d1631 3368 { Bad_Opcode },
252b5132 3369 },
1ceb70f8 3370 /* REG_0F00 */
252b5132 3371 {
bf890a93
IT
3372 { "sldtD", { Sv }, 0 },
3373 { "strD", { Sv }, 0 },
3374 { "lldt", { Ew }, 0 },
3375 { "ltr", { Ew }, 0 },
3376 { "verr", { Ew }, 0 },
3377 { "verw", { Ew }, 0 },
592d1631
L
3378 { Bad_Opcode },
3379 { Bad_Opcode },
252b5132 3380 },
1ceb70f8 3381 /* REG_0F01 */
252b5132 3382 {
1ceb70f8
L
3383 { MOD_TABLE (MOD_0F01_REG_0) },
3384 { MOD_TABLE (MOD_0F01_REG_1) },
3385 { MOD_TABLE (MOD_0F01_REG_2) },
3386 { MOD_TABLE (MOD_0F01_REG_3) },
bf890a93 3387 { "smswD", { Sv }, 0 },
8eab4136 3388 { MOD_TABLE (MOD_0F01_REG_5) },
bf890a93 3389 { "lmsw", { Ew }, 0 },
1ceb70f8 3390 { MOD_TABLE (MOD_0F01_REG_7) },
252b5132 3391 },
b5b1fc4f 3392 /* REG_0F0D */
252b5132 3393 {
bf890a93
IT
3394 { "prefetch", { Mb }, 0 },
3395 { "prefetchw", { Mb }, 0 },
3396 { "prefetchwt1", { Mb }, 0 },
3397 { "prefetch", { Mb }, 0 },
3398 { "prefetch", { Mb }, 0 },
3399 { "prefetch", { Mb }, 0 },
3400 { "prefetch", { Mb }, 0 },
3401 { "prefetch", { Mb }, 0 },
252b5132 3402 },
1ceb70f8 3403 /* REG_0F18 */
252b5132 3404 {
1ceb70f8
L
3405 { MOD_TABLE (MOD_0F18_REG_0) },
3406 { MOD_TABLE (MOD_0F18_REG_1) },
3407 { MOD_TABLE (MOD_0F18_REG_2) },
3408 { MOD_TABLE (MOD_0F18_REG_3) },
d7189fa5
RM
3409 { MOD_TABLE (MOD_0F18_REG_4) },
3410 { MOD_TABLE (MOD_0F18_REG_5) },
3411 { MOD_TABLE (MOD_0F18_REG_6) },
3412 { MOD_TABLE (MOD_0F18_REG_7) },
252b5132 3413 },
c48935d7
IT
3414 /* REG_0F1C_MOD_0 */
3415 {
3416 { "cldemote", { Mb }, 0 },
3417 { "nopQ", { Ev }, 0 },
3418 { "nopQ", { Ev }, 0 },
3419 { "nopQ", { Ev }, 0 },
3420 { "nopQ", { Ev }, 0 },
3421 { "nopQ", { Ev }, 0 },
3422 { "nopQ", { Ev }, 0 },
3423 { "nopQ", { Ev }, 0 },
3424 },
603555e5
L
3425 /* REG_0F1E_MOD_3 */
3426 {
3427 { "nopQ", { Ev }, 0 },
3428 { "rdsspK", { Rdq }, PREFIX_OPCODE },
3429 { "nopQ", { Ev }, 0 },
3430 { "nopQ", { Ev }, 0 },
3431 { "nopQ", { Ev }, 0 },
3432 { "nopQ", { Ev }, 0 },
3433 { "nopQ", { Ev }, 0 },
3434 { RM_TABLE (RM_0F1E_MOD_3_REG_7) },
3435 },
1ceb70f8 3436 /* REG_0F71 */
a6bd098c 3437 {
592d1631
L
3438 { Bad_Opcode },
3439 { Bad_Opcode },
1ceb70f8 3440 { MOD_TABLE (MOD_0F71_REG_2) },
592d1631 3441 { Bad_Opcode },
1ceb70f8 3442 { MOD_TABLE (MOD_0F71_REG_4) },
592d1631 3443 { Bad_Opcode },
1ceb70f8 3444 { MOD_TABLE (MOD_0F71_REG_6) },
a6bd098c 3445 },
1ceb70f8 3446 /* REG_0F72 */
a6bd098c 3447 {
592d1631
L
3448 { Bad_Opcode },
3449 { Bad_Opcode },
1ceb70f8 3450 { MOD_TABLE (MOD_0F72_REG_2) },
592d1631 3451 { Bad_Opcode },
1ceb70f8 3452 { MOD_TABLE (MOD_0F72_REG_4) },
592d1631 3453 { Bad_Opcode },
1ceb70f8 3454 { MOD_TABLE (MOD_0F72_REG_6) },
a6bd098c 3455 },
1ceb70f8 3456 /* REG_0F73 */
252b5132 3457 {
592d1631
L
3458 { Bad_Opcode },
3459 { Bad_Opcode },
1ceb70f8
L
3460 { MOD_TABLE (MOD_0F73_REG_2) },
3461 { MOD_TABLE (MOD_0F73_REG_3) },
592d1631
L
3462 { Bad_Opcode },
3463 { Bad_Opcode },
1ceb70f8
L
3464 { MOD_TABLE (MOD_0F73_REG_6) },
3465 { MOD_TABLE (MOD_0F73_REG_7) },
252b5132 3466 },
1ceb70f8 3467 /* REG_0FA6 */
252b5132 3468 {
bf890a93
IT
3469 { "montmul", { { OP_0f07, 0 } }, 0 },
3470 { "xsha1", { { OP_0f07, 0 } }, 0 },
3471 { "xsha256", { { OP_0f07, 0 } }, 0 },
4e7d34a6 3472 },
1ceb70f8 3473 /* REG_0FA7 */
4e7d34a6 3474 {
bf890a93
IT
3475 { "xstore-rng", { { OP_0f07, 0 } }, 0 },
3476 { "xcrypt-ecb", { { OP_0f07, 0 } }, 0 },
3477 { "xcrypt-cbc", { { OP_0f07, 0 } }, 0 },
3478 { "xcrypt-ctr", { { OP_0f07, 0 } }, 0 },
3479 { "xcrypt-cfb", { { OP_0f07, 0 } }, 0 },
3480 { "xcrypt-ofb", { { OP_0f07, 0 } }, 0 },
4e7d34a6 3481 },
1ceb70f8 3482 /* REG_0FAE */
4e7d34a6 3483 {
1ceb70f8
L
3484 { MOD_TABLE (MOD_0FAE_REG_0) },
3485 { MOD_TABLE (MOD_0FAE_REG_1) },
3486 { MOD_TABLE (MOD_0FAE_REG_2) },
3487 { MOD_TABLE (MOD_0FAE_REG_3) },
475a2301 3488 { MOD_TABLE (MOD_0FAE_REG_4) },
1ceb70f8
L
3489 { MOD_TABLE (MOD_0FAE_REG_5) },
3490 { MOD_TABLE (MOD_0FAE_REG_6) },
3491 { MOD_TABLE (MOD_0FAE_REG_7) },
252b5132 3492 },
1ceb70f8 3493 /* REG_0FBA */
252b5132 3494 {
592d1631
L
3495 { Bad_Opcode },
3496 { Bad_Opcode },
3497 { Bad_Opcode },
3498 { Bad_Opcode },
bf890a93
IT
3499 { "btQ", { Ev, Ib }, 0 },
3500 { "btsQ", { Evh1, Ib }, 0 },
3501 { "btrQ", { Evh1, Ib }, 0 },
3502 { "btcQ", { Evh1, Ib }, 0 },
c608c12e 3503 },
1ceb70f8 3504 /* REG_0FC7 */
c608c12e 3505 {
592d1631 3506 { Bad_Opcode },
bf890a93 3507 { "cmpxchg8b", { { CMPXCHG8B_Fixup, q_mode } }, 0 },
592d1631 3508 { Bad_Opcode },
963f3586
IT
3509 { MOD_TABLE (MOD_0FC7_REG_3) },
3510 { MOD_TABLE (MOD_0FC7_REG_4) },
3511 { MOD_TABLE (MOD_0FC7_REG_5) },
1ceb70f8
L
3512 { MOD_TABLE (MOD_0FC7_REG_6) },
3513 { MOD_TABLE (MOD_0FC7_REG_7) },
252b5132 3514 },
592a252b 3515 /* REG_VEX_0F71 */
c0f3af97 3516 {
592d1631
L
3517 { Bad_Opcode },
3518 { Bad_Opcode },
592a252b 3519 { MOD_TABLE (MOD_VEX_0F71_REG_2) },
592d1631 3520 { Bad_Opcode },
592a252b 3521 { MOD_TABLE (MOD_VEX_0F71_REG_4) },
592d1631 3522 { Bad_Opcode },
592a252b 3523 { MOD_TABLE (MOD_VEX_0F71_REG_6) },
c0f3af97 3524 },
592a252b 3525 /* REG_VEX_0F72 */
c0f3af97 3526 {
592d1631
L
3527 { Bad_Opcode },
3528 { Bad_Opcode },
592a252b 3529 { MOD_TABLE (MOD_VEX_0F72_REG_2) },
592d1631 3530 { Bad_Opcode },
592a252b 3531 { MOD_TABLE (MOD_VEX_0F72_REG_4) },
592d1631 3532 { Bad_Opcode },
592a252b 3533 { MOD_TABLE (MOD_VEX_0F72_REG_6) },
c0f3af97 3534 },
592a252b 3535 /* REG_VEX_0F73 */
c0f3af97 3536 {
592d1631
L
3537 { Bad_Opcode },
3538 { Bad_Opcode },
592a252b
L
3539 { MOD_TABLE (MOD_VEX_0F73_REG_2) },
3540 { MOD_TABLE (MOD_VEX_0F73_REG_3) },
592d1631
L
3541 { Bad_Opcode },
3542 { Bad_Opcode },
592a252b
L
3543 { MOD_TABLE (MOD_VEX_0F73_REG_6) },
3544 { MOD_TABLE (MOD_VEX_0F73_REG_7) },
c0f3af97 3545 },
592a252b 3546 /* REG_VEX_0FAE */
c0f3af97 3547 {
592d1631
L
3548 { Bad_Opcode },
3549 { Bad_Opcode },
592a252b
L
3550 { MOD_TABLE (MOD_VEX_0FAE_REG_2) },
3551 { MOD_TABLE (MOD_VEX_0FAE_REG_3) },
c0f3af97 3552 },
f12dc422
L
3553 /* REG_VEX_0F38F3 */
3554 {
3555 { Bad_Opcode },
3556 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_1) },
3557 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_2) },
3558 { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_3) },
3559 },
f88c9eb0
SP
3560 /* REG_XOP_LWPCB */
3561 {
bf890a93
IT
3562 { "llwpcb", { { OP_LWPCB_E, 0 } }, 0 },
3563 { "slwpcb", { { OP_LWPCB_E, 0 } }, 0 },
f88c9eb0
SP
3564 },
3565 /* REG_XOP_LWP */
3566 {
bf890a93
IT
3567 { "lwpins", { { OP_LWP_E, 0 }, Ed, Iq }, 0 },
3568 { "lwpval", { { OP_LWP_E, 0 }, Ed, Iq }, 0 },
f88c9eb0 3569 },
2a2a0f38
QN
3570 /* REG_XOP_TBM_01 */
3571 {
3572 { Bad_Opcode },
bf890a93
IT
3573 { "blcfill", { { OP_LWP_E, 0 }, Ev }, 0 },
3574 { "blsfill", { { OP_LWP_E, 0 }, Ev }, 0 },
3575 { "blcs", { { OP_LWP_E, 0 }, Ev }, 0 },
3576 { "tzmsk", { { OP_LWP_E, 0 }, Ev }, 0 },
3577 { "blcic", { { OP_LWP_E, 0 }, Ev }, 0 },
3578 { "blsic", { { OP_LWP_E, 0 }, Ev }, 0 },
3579 { "t1mskc", { { OP_LWP_E, 0 }, Ev }, 0 },
2a2a0f38
QN
3580 },
3581 /* REG_XOP_TBM_02 */
3582 {
3583 { Bad_Opcode },
bf890a93 3584 { "blcmsk", { { OP_LWP_E, 0 }, Ev }, 0 },
2a2a0f38
QN
3585 { Bad_Opcode },
3586 { Bad_Opcode },
3587 { Bad_Opcode },
3588 { Bad_Opcode },
bf890a93 3589 { "blci", { { OP_LWP_E, 0 }, Ev }, 0 },
2a2a0f38 3590 },
43234a1e
L
3591#define NEED_REG_TABLE
3592#include "i386-dis-evex.h"
3593#undef NEED_REG_TABLE
4e7d34a6
L
3594};
3595
1ceb70f8
L
3596static const struct dis386 prefix_table[][4] = {
3597 /* PREFIX_90 */
252b5132 3598 {
bf890a93
IT
3599 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } }, 0 },
3600 { "pause", { XX }, 0 },
3601 { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } }, 0 },
507bd325 3602 { NULL, { { NULL, 0 } }, PREFIX_IGNORED }
0f10071e 3603 },
4e7d34a6 3604
603555e5
L
3605 /* PREFIX_MOD_0_0F01_REG_5 */
3606 {
3607 { Bad_Opcode },
3608 { "rstorssp", { Mq }, PREFIX_OPCODE },
3609 },
3610
2234eee6 3611 /* PREFIX_MOD_3_0F01_REG_5_RM_0 */
603555e5
L
3612 {
3613 { Bad_Opcode },
2234eee6 3614 { "setssbsy", { Skip_MODRM }, PREFIX_OPCODE },
603555e5
L
3615 },
3616
3617 /* PREFIX_MOD_3_0F01_REG_5_RM_2 */
3618 {
3619 { Bad_Opcode },
c2f76402 3620 { "saveprevssp", { Skip_MODRM }, PREFIX_OPCODE },
603555e5
L
3621 },
3622
3233d7d0
IT
3623 /* PREFIX_0F09 */
3624 {
3625 { "wbinvd", { XX }, 0 },
3626 { "wbnoinvd", { XX }, 0 },
3627 },
3628
1ceb70f8 3629 /* PREFIX_0F10 */
cc0ec051 3630 {
507bd325
L
3631 { "movups", { XM, EXx }, PREFIX_OPCODE },
3632 { "movss", { XM, EXd }, PREFIX_OPCODE },
3633 { "movupd", { XM, EXx }, PREFIX_OPCODE },
3634 { "movsd", { XM, EXq }, PREFIX_OPCODE },
30d1c836 3635 },
4e7d34a6 3636
1ceb70f8 3637 /* PREFIX_0F11 */
30d1c836 3638 {
507bd325
L
3639 { "movups", { EXxS, XM }, PREFIX_OPCODE },
3640 { "movss", { EXdS, XM }, PREFIX_OPCODE },
3641 { "movupd", { EXxS, XM }, PREFIX_OPCODE },
3642 { "movsd", { EXqS, XM }, PREFIX_OPCODE },
4e7d34a6 3643 },
252b5132 3644
1ceb70f8 3645 /* PREFIX_0F12 */
c608c12e 3646 {
1ceb70f8 3647 { MOD_TABLE (MOD_0F12_PREFIX_0) },
507bd325
L
3648 { "movsldup", { XM, EXx }, PREFIX_OPCODE },
3649 { "movlpd", { XM, EXq }, PREFIX_OPCODE },
3650 { "movddup", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3651 },
4e7d34a6 3652
1ceb70f8 3653 /* PREFIX_0F16 */
c608c12e 3654 {
1ceb70f8 3655 { MOD_TABLE (MOD_0F16_PREFIX_0) },
507bd325
L
3656 { "movshdup", { XM, EXx }, PREFIX_OPCODE },
3657 { "movhpd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3658 },
4e7d34a6 3659
7e8b059b
L
3660 /* PREFIX_0F1A */
3661 {
3662 { MOD_TABLE (MOD_0F1A_PREFIX_0) },
bf890a93
IT
3663 { "bndcl", { Gbnd, Ev_bnd }, 0 },
3664 { "bndmov", { Gbnd, Ebnd }, 0 },
3665 { "bndcu", { Gbnd, Ev_bnd }, 0 },
7e8b059b
L
3666 },
3667
3668 /* PREFIX_0F1B */
3669 {
3670 { MOD_TABLE (MOD_0F1B_PREFIX_0) },
3671 { MOD_TABLE (MOD_0F1B_PREFIX_1) },
9f79e886 3672 { "bndmov", { EbndS, Gbnd }, 0 },
bf890a93 3673 { "bndcn", { Gbnd, Ev_bnd }, 0 },
7e8b059b
L
3674 },
3675
c48935d7
IT
3676 /* PREFIX_0F1C */
3677 {
3678 { MOD_TABLE (MOD_0F1C_PREFIX_0) },
3679 { "nopQ", { Ev }, PREFIX_OPCODE },
3680 { "nopQ", { Ev }, PREFIX_OPCODE },
3681 { "nopQ", { Ev }, PREFIX_OPCODE },
3682 },
3683
603555e5
L
3684 /* PREFIX_0F1E */
3685 {
3686 { "nopQ", { Ev }, PREFIX_OPCODE },
3687 { MOD_TABLE (MOD_0F1E_PREFIX_1) },
3688 { "nopQ", { Ev }, PREFIX_OPCODE },
3689 { "nopQ", { Ev }, PREFIX_OPCODE },
3690 },
3691
1ceb70f8 3692 /* PREFIX_0F2A */
c608c12e 3693 {
507bd325
L
3694 { "cvtpi2ps", { XM, EMCq }, PREFIX_OPCODE },
3695 { "cvtsi2ss%LQ", { XM, Ev }, PREFIX_OPCODE },
3696 { "cvtpi2pd", { XM, EMCq }, PREFIX_OPCODE },
bf890a93 3697 { "cvtsi2sd%LQ", { XM, Ev }, 0 },
c608c12e 3698 },
4e7d34a6 3699
1ceb70f8 3700 /* PREFIX_0F2B */
c608c12e 3701 {
75c135a8
L
3702 { MOD_TABLE (MOD_0F2B_PREFIX_0) },
3703 { MOD_TABLE (MOD_0F2B_PREFIX_1) },
3704 { MOD_TABLE (MOD_0F2B_PREFIX_2) },
3705 { MOD_TABLE (MOD_0F2B_PREFIX_3) },
c608c12e 3706 },
4e7d34a6 3707
1ceb70f8 3708 /* PREFIX_0F2C */
c608c12e 3709 {
507bd325 3710 { "cvttps2pi", { MXC, EXq }, PREFIX_OPCODE },
9646c87b 3711 { "cvttss2si", { Gv, EXd }, PREFIX_OPCODE },
507bd325 3712 { "cvttpd2pi", { MXC, EXx }, PREFIX_OPCODE },
9646c87b 3713 { "cvttsd2si", { Gv, EXq }, PREFIX_OPCODE },
c608c12e 3714 },
4e7d34a6 3715
1ceb70f8 3716 /* PREFIX_0F2D */
c608c12e 3717 {
507bd325 3718 { "cvtps2pi", { MXC, EXq }, PREFIX_OPCODE },
9646c87b 3719 { "cvtss2si", { Gv, EXd }, PREFIX_OPCODE },
507bd325 3720 { "cvtpd2pi", { MXC, EXx }, PREFIX_OPCODE },
9646c87b 3721 { "cvtsd2si", { Gv, EXq }, PREFIX_OPCODE },
c608c12e 3722 },
4e7d34a6 3723
1ceb70f8 3724 /* PREFIX_0F2E */
c608c12e 3725 {
bf890a93 3726 { "ucomiss",{ XM, EXd }, 0 },
592d1631 3727 { Bad_Opcode },
bf890a93 3728 { "ucomisd",{ XM, EXq }, 0 },
c608c12e 3729 },
4e7d34a6 3730
1ceb70f8 3731 /* PREFIX_0F2F */
c608c12e 3732 {
bf890a93 3733 { "comiss", { XM, EXd }, 0 },
592d1631 3734 { Bad_Opcode },
bf890a93 3735 { "comisd", { XM, EXq }, 0 },
c608c12e 3736 },
4e7d34a6 3737
1ceb70f8 3738 /* PREFIX_0F51 */
c608c12e 3739 {
507bd325
L
3740 { "sqrtps", { XM, EXx }, PREFIX_OPCODE },
3741 { "sqrtss", { XM, EXd }, PREFIX_OPCODE },
3742 { "sqrtpd", { XM, EXx }, PREFIX_OPCODE },
3743 { "sqrtsd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3744 },
4e7d34a6 3745
1ceb70f8 3746 /* PREFIX_0F52 */
c608c12e 3747 {
507bd325
L
3748 { "rsqrtps",{ XM, EXx }, PREFIX_OPCODE },
3749 { "rsqrtss",{ XM, EXd }, PREFIX_OPCODE },
c608c12e 3750 },
4e7d34a6 3751
1ceb70f8 3752 /* PREFIX_0F53 */
c608c12e 3753 {
507bd325
L
3754 { "rcpps", { XM, EXx }, PREFIX_OPCODE },
3755 { "rcpss", { XM, EXd }, PREFIX_OPCODE },
c608c12e 3756 },
4e7d34a6 3757
1ceb70f8 3758 /* PREFIX_0F58 */
c608c12e 3759 {
507bd325
L
3760 { "addps", { XM, EXx }, PREFIX_OPCODE },
3761 { "addss", { XM, EXd }, PREFIX_OPCODE },
3762 { "addpd", { XM, EXx }, PREFIX_OPCODE },
3763 { "addsd", { XM, EXq }, PREFIX_OPCODE },
c608c12e 3764 },
4e7d34a6 3765
1ceb70f8 3766 /* PREFIX_0F59 */
c608c12e 3767 {
507bd325
L
3768 { "mulps", { XM, EXx }, PREFIX_OPCODE },
3769 { "mulss", { XM, EXd }, PREFIX_OPCODE },
3770 { "mulpd", { XM, EXx }, PREFIX_OPCODE },
3771 { "mulsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3772 },
4e7d34a6 3773
1ceb70f8 3774 /* PREFIX_0F5A */
041bd2e0 3775 {
507bd325
L
3776 { "cvtps2pd", { XM, EXq }, PREFIX_OPCODE },
3777 { "cvtss2sd", { XM, EXd }, PREFIX_OPCODE },
3778 { "cvtpd2ps", { XM, EXx }, PREFIX_OPCODE },
3779 { "cvtsd2ss", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3780 },
4e7d34a6 3781
1ceb70f8 3782 /* PREFIX_0F5B */
041bd2e0 3783 {
507bd325
L
3784 { "cvtdq2ps", { XM, EXx }, PREFIX_OPCODE },
3785 { "cvttps2dq", { XM, EXx }, PREFIX_OPCODE },
3786 { "cvtps2dq", { XM, EXx }, PREFIX_OPCODE },
041bd2e0 3787 },
4e7d34a6 3788
1ceb70f8 3789 /* PREFIX_0F5C */
041bd2e0 3790 {
507bd325
L
3791 { "subps", { XM, EXx }, PREFIX_OPCODE },
3792 { "subss", { XM, EXd }, PREFIX_OPCODE },
3793 { "subpd", { XM, EXx }, PREFIX_OPCODE },
3794 { "subsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3795 },
4e7d34a6 3796
1ceb70f8 3797 /* PREFIX_0F5D */
041bd2e0 3798 {
507bd325
L
3799 { "minps", { XM, EXx }, PREFIX_OPCODE },
3800 { "minss", { XM, EXd }, PREFIX_OPCODE },
3801 { "minpd", { XM, EXx }, PREFIX_OPCODE },
3802 { "minsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3803 },
4e7d34a6 3804
1ceb70f8 3805 /* PREFIX_0F5E */
041bd2e0 3806 {
507bd325
L
3807 { "divps", { XM, EXx }, PREFIX_OPCODE },
3808 { "divss", { XM, EXd }, PREFIX_OPCODE },
3809 { "divpd", { XM, EXx }, PREFIX_OPCODE },
3810 { "divsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3811 },
4e7d34a6 3812
1ceb70f8 3813 /* PREFIX_0F5F */
041bd2e0 3814 {
507bd325
L
3815 { "maxps", { XM, EXx }, PREFIX_OPCODE },
3816 { "maxss", { XM, EXd }, PREFIX_OPCODE },
3817 { "maxpd", { XM, EXx }, PREFIX_OPCODE },
3818 { "maxsd", { XM, EXq }, PREFIX_OPCODE },
041bd2e0 3819 },
4e7d34a6 3820
1ceb70f8 3821 /* PREFIX_0F60 */
041bd2e0 3822 {
507bd325 3823 { "punpcklbw",{ MX, EMd }, PREFIX_OPCODE },
592d1631 3824 { Bad_Opcode },
507bd325 3825 { "punpcklbw",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 3826 },
4e7d34a6 3827
1ceb70f8 3828 /* PREFIX_0F61 */
041bd2e0 3829 {
507bd325 3830 { "punpcklwd",{ MX, EMd }, PREFIX_OPCODE },
592d1631 3831 { Bad_Opcode },
507bd325 3832 { "punpcklwd",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 3833 },
4e7d34a6 3834
1ceb70f8 3835 /* PREFIX_0F62 */
041bd2e0 3836 {
507bd325 3837 { "punpckldq",{ MX, EMd }, PREFIX_OPCODE },
592d1631 3838 { Bad_Opcode },
507bd325 3839 { "punpckldq",{ MX, EMx }, PREFIX_OPCODE },
041bd2e0 3840 },
4e7d34a6 3841
1ceb70f8 3842 /* PREFIX_0F6C */
041bd2e0 3843 {
592d1631
L
3844 { Bad_Opcode },
3845 { Bad_Opcode },
507bd325 3846 { "punpcklqdq", { XM, EXx }, PREFIX_OPCODE },
0f17484f 3847 },
4e7d34a6 3848
1ceb70f8 3849 /* PREFIX_0F6D */
0f17484f 3850 {
592d1631
L
3851 { Bad_Opcode },
3852 { Bad_Opcode },
507bd325 3853 { "punpckhqdq", { XM, EXx }, PREFIX_OPCODE },
041bd2e0 3854 },
4e7d34a6 3855
1ceb70f8 3856 /* PREFIX_0F6F */
ca164297 3857 {
507bd325
L
3858 { "movq", { MX, EM }, PREFIX_OPCODE },
3859 { "movdqu", { XM, EXx }, PREFIX_OPCODE },
3860 { "movdqa", { XM, EXx }, PREFIX_OPCODE },
ca164297 3861 },
4e7d34a6 3862
1ceb70f8 3863 /* PREFIX_0F70 */
4e7d34a6 3864 {
507bd325
L
3865 { "pshufw", { MX, EM, Ib }, PREFIX_OPCODE },
3866 { "pshufhw",{ XM, EXx, Ib }, PREFIX_OPCODE },
3867 { "pshufd", { XM, EXx, Ib }, PREFIX_OPCODE },
3868 { "pshuflw",{ XM, EXx, Ib }, PREFIX_OPCODE },
4e7d34a6
L
3869 },
3870
92fddf8e
L
3871 /* PREFIX_0F73_REG_3 */
3872 {
592d1631
L
3873 { Bad_Opcode },
3874 { Bad_Opcode },
bf890a93 3875 { "psrldq", { XS, Ib }, 0 },
92fddf8e
L
3876 },
3877
3878 /* PREFIX_0F73_REG_7 */
3879 {
592d1631
L
3880 { Bad_Opcode },
3881 { Bad_Opcode },
bf890a93 3882 { "pslldq", { XS, Ib }, 0 },
92fddf8e
L
3883 },
3884
1ceb70f8 3885 /* PREFIX_0F78 */
4e7d34a6 3886 {
bf890a93 3887 {"vmread", { Em, Gm }, 0 },
592d1631 3888 { Bad_Opcode },
bf890a93
IT
3889 {"extrq", { XS, Ib, Ib }, 0 },
3890 {"insertq", { XM, XS, Ib, Ib }, 0 },
4e7d34a6
L
3891 },
3892
1ceb70f8 3893 /* PREFIX_0F79 */
4e7d34a6 3894 {
bf890a93 3895 {"vmwrite", { Gm, Em }, 0 },
592d1631 3896 { Bad_Opcode },
bf890a93
IT
3897 {"extrq", { XM, XS }, 0 },
3898 {"insertq", { XM, XS }, 0 },
4e7d34a6
L
3899 },
3900
1ceb70f8 3901 /* PREFIX_0F7C */
ca164297 3902 {
592d1631
L
3903 { Bad_Opcode },
3904 { Bad_Opcode },
507bd325
L
3905 { "haddpd", { XM, EXx }, PREFIX_OPCODE },
3906 { "haddps", { XM, EXx }, PREFIX_OPCODE },
ca164297 3907 },
4e7d34a6 3908
1ceb70f8 3909 /* PREFIX_0F7D */
ca164297 3910 {
592d1631
L
3911 { Bad_Opcode },
3912 { Bad_Opcode },
507bd325
L
3913 { "hsubpd", { XM, EXx }, PREFIX_OPCODE },
3914 { "hsubps", { XM, EXx }, PREFIX_OPCODE },
ca164297 3915 },
4e7d34a6 3916
1ceb70f8 3917 /* PREFIX_0F7E */
ca164297 3918 {
507bd325
L
3919 { "movK", { Edq, MX }, PREFIX_OPCODE },
3920 { "movq", { XM, EXq }, PREFIX_OPCODE },
3921 { "movK", { Edq, XM }, PREFIX_OPCODE },
ca164297 3922 },
4e7d34a6 3923
1ceb70f8 3924 /* PREFIX_0F7F */
ca164297 3925 {
507bd325
L
3926 { "movq", { EMS, MX }, PREFIX_OPCODE },
3927 { "movdqu", { EXxS, XM }, PREFIX_OPCODE },
3928 { "movdqa", { EXxS, XM }, PREFIX_OPCODE },
ca164297 3929 },
4e7d34a6 3930
c7b8aa3a
L
3931 /* PREFIX_0FAE_REG_0 */
3932 {
3933 { Bad_Opcode },
bf890a93 3934 { "rdfsbase", { Ev }, 0 },
c7b8aa3a
L
3935 },
3936
3937 /* PREFIX_0FAE_REG_1 */
3938 {
3939 { Bad_Opcode },
bf890a93 3940 { "rdgsbase", { Ev }, 0 },
c7b8aa3a
L
3941 },
3942
3943 /* PREFIX_0FAE_REG_2 */
3944 {
3945 { Bad_Opcode },
bf890a93 3946 { "wrfsbase", { Ev }, 0 },
c7b8aa3a
L
3947 },
3948
3949 /* PREFIX_0FAE_REG_3 */
3950 {
3951 { Bad_Opcode },
bf890a93 3952 { "wrgsbase", { Ev }, 0 },
c7b8aa3a
L
3953 },
3954
6b40c462
L
3955 /* PREFIX_MOD_0_0FAE_REG_4 */
3956 {
3957 { "xsave", { FXSAVE }, 0 },
3958 { "ptwrite%LQ", { Edq }, 0 },
3959 },
3960
3961 /* PREFIX_MOD_3_0FAE_REG_4 */
3962 {
3963 { Bad_Opcode },
3964 { "ptwrite%LQ", { Edq }, 0 },
3965 },
3966
603555e5
L
3967 /* PREFIX_MOD_0_0FAE_REG_5 */
3968 {
3969 { "xrstor", { FXSAVE }, PREFIX_OPCODE },
2234eee6
L
3970 },
3971
3972 /* PREFIX_MOD_3_0FAE_REG_5 */
3973 {
3974 { "lfence", { Skip_MODRM }, 0 },
3975 { "incsspK", { Rdq }, PREFIX_OPCODE },
603555e5
L
3976 },
3977
de89d0a3 3978 /* PREFIX_MOD_0_0FAE_REG_6 */
c5e7287a 3979 {
603555e5
L
3980 { "xsaveopt", { FXSAVE }, PREFIX_OPCODE },
3981 { "clrssbsy", { Mq }, PREFIX_OPCODE },
3982 { "clwb", { Mb }, PREFIX_OPCODE },
c5e7287a
IT
3983 },
3984
de89d0a3
IT
3985 /* PREFIX_MOD_1_0FAE_REG_6 */
3986 {
3987 { RM_TABLE (RM_0FAE_REG_6) },
3988 { "umonitor", { Eva }, PREFIX_OPCODE },
ae1d3843
L
3989 { "tpause", { Edq }, PREFIX_OPCODE },
3990 { "umwait", { Edq }, PREFIX_OPCODE },
de89d0a3
IT
3991 },
3992
963f3586
IT
3993 /* PREFIX_0FAE_REG_7 */
3994 {
bf890a93 3995 { "clflush", { Mb }, 0 },
963f3586 3996 { Bad_Opcode },
bf890a93 3997 { "clflushopt", { Mb }, 0 },
963f3586
IT
3998 },
3999
1ceb70f8 4000 /* PREFIX_0FB8 */
ca164297 4001 {
592d1631 4002 { Bad_Opcode },
bf890a93 4003 { "popcntS", { Gv, Ev }, 0 },
ca164297 4004 },
4e7d34a6 4005
f12dc422
L
4006 /* PREFIX_0FBC */
4007 {
bf890a93
IT
4008 { "bsfS", { Gv, Ev }, 0 },
4009 { "tzcntS", { Gv, Ev }, 0 },
4010 { "bsfS", { Gv, Ev }, 0 },
f12dc422
L
4011 },
4012
1ceb70f8 4013 /* PREFIX_0FBD */
050dfa73 4014 {
bf890a93
IT
4015 { "bsrS", { Gv, Ev }, 0 },
4016 { "lzcntS", { Gv, Ev }, 0 },
4017 { "bsrS", { Gv, Ev }, 0 },
050dfa73
MM
4018 },
4019
1ceb70f8 4020 /* PREFIX_0FC2 */
050dfa73 4021 {
507bd325
L
4022 { "cmpps", { XM, EXx, CMP }, PREFIX_OPCODE },
4023 { "cmpss", { XM, EXd, CMP }, PREFIX_OPCODE },
4024 { "cmppd", { XM, EXx, CMP }, PREFIX_OPCODE },
4025 { "cmpsd", { XM, EXq, CMP }, PREFIX_OPCODE },
050dfa73 4026 },
246c51aa 4027
a8484f96 4028 /* PREFIX_MOD_0_0FC3 */
4ee52178 4029 {
a8484f96 4030 { "movntiS", { Ev, Gv }, PREFIX_OPCODE },
4ee52178
L
4031 },
4032
f24bcbaa 4033 /* PREFIX_MOD_0_0FC7_REG_6 */
92fddf8e 4034 {
bf890a93
IT
4035 { "vmptrld",{ Mq }, 0 },
4036 { "vmxon", { Mq }, 0 },
4037 { "vmclear",{ Mq }, 0 },
92fddf8e
L
4038 },
4039
f24bcbaa
L
4040 /* PREFIX_MOD_3_0FC7_REG_6 */
4041 {
4042 { "rdrand", { Ev }, 0 },
4043 { Bad_Opcode },
4044 { "rdrand", { Ev }, 0 }
4045 },
4046
4047 /* PREFIX_MOD_3_0FC7_REG_7 */
4048 {
4049 { "rdseed", { Ev }, 0 },
8bc52696 4050 { "rdpid", { Em }, 0 },
f24bcbaa
L
4051 { "rdseed", { Ev }, 0 },
4052 },
4053
1ceb70f8 4054 /* PREFIX_0FD0 */
050dfa73 4055 {
592d1631
L
4056 { Bad_Opcode },
4057 { Bad_Opcode },
bf890a93
IT
4058 { "addsubpd", { XM, EXx }, 0 },
4059 { "addsubps", { XM, EXx }, 0 },
246c51aa 4060 },
050dfa73 4061
1ceb70f8 4062 /* PREFIX_0FD6 */
050dfa73 4063 {
592d1631 4064 { Bad_Opcode },
bf890a93
IT
4065 { "movq2dq",{ XM, MS }, 0 },
4066 { "movq", { EXqS, XM }, 0 },
4067 { "movdq2q",{ MX, XS }, 0 },
050dfa73
MM
4068 },
4069
1ceb70f8 4070 /* PREFIX_0FE6 */
7918206c 4071 {
592d1631 4072 { Bad_Opcode },
507bd325
L
4073 { "cvtdq2pd", { XM, EXq }, PREFIX_OPCODE },
4074 { "cvttpd2dq", { XM, EXx }, PREFIX_OPCODE },
4075 { "cvtpd2dq", { XM, EXx }, PREFIX_OPCODE },
7918206c 4076 },
8b38ad71 4077
1ceb70f8 4078 /* PREFIX_0FE7 */
8b38ad71 4079 {
507bd325 4080 { "movntq", { Mq, MX }, PREFIX_OPCODE },
592d1631 4081 { Bad_Opcode },
75c135a8 4082 { MOD_TABLE (MOD_0FE7_PREFIX_2) },
4e7d34a6
L
4083 },
4084
1ceb70f8 4085 /* PREFIX_0FF0 */
4e7d34a6 4086 {
592d1631
L
4087 { Bad_Opcode },
4088 { Bad_Opcode },
4089 { Bad_Opcode },
1ceb70f8 4090 { MOD_TABLE (MOD_0FF0_PREFIX_3) },
4e7d34a6
L
4091 },
4092
1ceb70f8 4093 /* PREFIX_0FF7 */
4e7d34a6 4094 {
507bd325 4095 { "maskmovq", { MX, MS }, PREFIX_OPCODE },
592d1631 4096 { Bad_Opcode },
507bd325 4097 { "maskmovdqu", { XM, XS }, PREFIX_OPCODE },
8b38ad71 4098 },
42903f7f 4099
1ceb70f8 4100 /* PREFIX_0F3810 */
42903f7f 4101 {
592d1631
L
4102 { Bad_Opcode },
4103 { Bad_Opcode },
507bd325 4104 { "pblendvb", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4105 },
4106
1ceb70f8 4107 /* PREFIX_0F3814 */
42903f7f 4108 {
592d1631
L
4109 { Bad_Opcode },
4110 { Bad_Opcode },
507bd325 4111 { "blendvps", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4112 },
4113
1ceb70f8 4114 /* PREFIX_0F3815 */
42903f7f 4115 {
592d1631
L
4116 { Bad_Opcode },
4117 { Bad_Opcode },
507bd325 4118 { "blendvpd", { XM, EXx, XMM0 }, PREFIX_OPCODE },
42903f7f
L
4119 },
4120
1ceb70f8 4121 /* PREFIX_0F3817 */
42903f7f 4122 {
592d1631
L
4123 { Bad_Opcode },
4124 { Bad_Opcode },
507bd325 4125 { "ptest", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4126 },
4127
1ceb70f8 4128 /* PREFIX_0F3820 */
42903f7f 4129 {
592d1631
L
4130 { Bad_Opcode },
4131 { Bad_Opcode },
507bd325 4132 { "pmovsxbw", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4133 },
4134
1ceb70f8 4135 /* PREFIX_0F3821 */
42903f7f 4136 {
592d1631
L
4137 { Bad_Opcode },
4138 { Bad_Opcode },
507bd325 4139 { "pmovsxbd", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4140 },
4141
1ceb70f8 4142 /* PREFIX_0F3822 */
42903f7f 4143 {
592d1631
L
4144 { Bad_Opcode },
4145 { Bad_Opcode },
507bd325 4146 { "pmovsxbq", { XM, EXw }, PREFIX_OPCODE },
42903f7f
L
4147 },
4148
1ceb70f8 4149 /* PREFIX_0F3823 */
42903f7f 4150 {
592d1631
L
4151 { Bad_Opcode },
4152 { Bad_Opcode },
507bd325 4153 { "pmovsxwd", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4154 },
4155
1ceb70f8 4156 /* PREFIX_0F3824 */
42903f7f 4157 {
592d1631
L
4158 { Bad_Opcode },
4159 { Bad_Opcode },
507bd325 4160 { "pmovsxwq", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4161 },
4162
1ceb70f8 4163 /* PREFIX_0F3825 */
42903f7f 4164 {
592d1631
L
4165 { Bad_Opcode },
4166 { Bad_Opcode },
507bd325 4167 { "pmovsxdq", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4168 },
4169
1ceb70f8 4170 /* PREFIX_0F3828 */
42903f7f 4171 {
592d1631
L
4172 { Bad_Opcode },
4173 { Bad_Opcode },
507bd325 4174 { "pmuldq", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4175 },
4176
1ceb70f8 4177 /* PREFIX_0F3829 */
42903f7f 4178 {
592d1631
L
4179 { Bad_Opcode },
4180 { Bad_Opcode },
507bd325 4181 { "pcmpeqq", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4182 },
4183
1ceb70f8 4184 /* PREFIX_0F382A */
42903f7f 4185 {
592d1631
L
4186 { Bad_Opcode },
4187 { Bad_Opcode },
75c135a8 4188 { MOD_TABLE (MOD_0F382A_PREFIX_2) },
42903f7f
L
4189 },
4190
1ceb70f8 4191 /* PREFIX_0F382B */
42903f7f 4192 {
592d1631
L
4193 { Bad_Opcode },
4194 { Bad_Opcode },
507bd325 4195 { "packusdw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4196 },
4197
1ceb70f8 4198 /* PREFIX_0F3830 */
42903f7f 4199 {
592d1631
L
4200 { Bad_Opcode },
4201 { Bad_Opcode },
507bd325 4202 { "pmovzxbw", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4203 },
4204
1ceb70f8 4205 /* PREFIX_0F3831 */
42903f7f 4206 {
592d1631
L
4207 { Bad_Opcode },
4208 { Bad_Opcode },
507bd325 4209 { "pmovzxbd", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4210 },
4211
1ceb70f8 4212 /* PREFIX_0F3832 */
42903f7f 4213 {
592d1631
L
4214 { Bad_Opcode },
4215 { Bad_Opcode },
507bd325 4216 { "pmovzxbq", { XM, EXw }, PREFIX_OPCODE },
42903f7f
L
4217 },
4218
1ceb70f8 4219 /* PREFIX_0F3833 */
42903f7f 4220 {
592d1631
L
4221 { Bad_Opcode },
4222 { Bad_Opcode },
507bd325 4223 { "pmovzxwd", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4224 },
4225
1ceb70f8 4226 /* PREFIX_0F3834 */
42903f7f 4227 {
592d1631
L
4228 { Bad_Opcode },
4229 { Bad_Opcode },
507bd325 4230 { "pmovzxwq", { XM, EXd }, PREFIX_OPCODE },
42903f7f
L
4231 },
4232
1ceb70f8 4233 /* PREFIX_0F3835 */
42903f7f 4234 {
592d1631
L
4235 { Bad_Opcode },
4236 { Bad_Opcode },
507bd325 4237 { "pmovzxdq", { XM, EXq }, PREFIX_OPCODE },
42903f7f
L
4238 },
4239
1ceb70f8 4240 /* PREFIX_0F3837 */
4e7d34a6 4241 {
592d1631
L
4242 { Bad_Opcode },
4243 { Bad_Opcode },
507bd325 4244 { "pcmpgtq", { XM, EXx }, PREFIX_OPCODE },
4e7d34a6
L
4245 },
4246
1ceb70f8 4247 /* PREFIX_0F3838 */
42903f7f 4248 {
592d1631
L
4249 { Bad_Opcode },
4250 { Bad_Opcode },
507bd325 4251 { "pminsb", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4252 },
4253
1ceb70f8 4254 /* PREFIX_0F3839 */
42903f7f 4255 {
592d1631
L
4256 { Bad_Opcode },
4257 { Bad_Opcode },
507bd325 4258 { "pminsd", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4259 },
4260
1ceb70f8 4261 /* PREFIX_0F383A */
42903f7f 4262 {
592d1631
L
4263 { Bad_Opcode },
4264 { Bad_Opcode },
507bd325 4265 { "pminuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4266 },
4267
1ceb70f8 4268 /* PREFIX_0F383B */
42903f7f 4269 {
592d1631
L
4270 { Bad_Opcode },
4271 { Bad_Opcode },
507bd325 4272 { "pminud", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4273 },
4274
1ceb70f8 4275 /* PREFIX_0F383C */
42903f7f 4276 {
592d1631
L
4277 { Bad_Opcode },
4278 { Bad_Opcode },
507bd325 4279 { "pmaxsb", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4280 },
4281
1ceb70f8 4282 /* PREFIX_0F383D */
42903f7f 4283 {
592d1631
L
4284 { Bad_Opcode },
4285 { Bad_Opcode },
507bd325 4286 { "pmaxsd", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4287 },
4288
1ceb70f8 4289 /* PREFIX_0F383E */
42903f7f 4290 {
592d1631
L
4291 { Bad_Opcode },
4292 { Bad_Opcode },
507bd325 4293 { "pmaxuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4294 },
4295
1ceb70f8 4296 /* PREFIX_0F383F */
42903f7f 4297 {
592d1631
L
4298 { Bad_Opcode },
4299 { Bad_Opcode },
507bd325 4300 { "pmaxud", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4301 },
4302
1ceb70f8 4303 /* PREFIX_0F3840 */
42903f7f 4304 {
592d1631
L
4305 { Bad_Opcode },
4306 { Bad_Opcode },
507bd325 4307 { "pmulld", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4308 },
4309
1ceb70f8 4310 /* PREFIX_0F3841 */
42903f7f 4311 {
592d1631
L
4312 { Bad_Opcode },
4313 { Bad_Opcode },
507bd325 4314 { "phminposuw", { XM, EXx }, PREFIX_OPCODE },
42903f7f
L
4315 },
4316
f1f8f695
L
4317 /* PREFIX_0F3880 */
4318 {
592d1631
L
4319 { Bad_Opcode },
4320 { Bad_Opcode },
507bd325 4321 { "invept", { Gm, Mo }, PREFIX_OPCODE },
f1f8f695
L
4322 },
4323
4324 /* PREFIX_0F3881 */
4325 {
592d1631
L
4326 { Bad_Opcode },
4327 { Bad_Opcode },
507bd325 4328 { "invvpid", { Gm, Mo }, PREFIX_OPCODE },
f1f8f695
L
4329 },
4330
6c30d220
L
4331 /* PREFIX_0F3882 */
4332 {
4333 { Bad_Opcode },
4334 { Bad_Opcode },
507bd325 4335 { "invpcid", { Gm, M }, PREFIX_OPCODE },
6c30d220
L
4336 },
4337
a0046408
L
4338 /* PREFIX_0F38C8 */
4339 {
507bd325 4340 { "sha1nexte", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4341 },
4342
4343 /* PREFIX_0F38C9 */
4344 {
507bd325 4345 { "sha1msg1", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4346 },
4347
4348 /* PREFIX_0F38CA */
4349 {
507bd325 4350 { "sha1msg2", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4351 },
4352
4353 /* PREFIX_0F38CB */
4354 {
507bd325 4355 { "sha256rnds2", { XM, EXxmm, XMM0 }, PREFIX_OPCODE },
a0046408
L
4356 },
4357
4358 /* PREFIX_0F38CC */
4359 {
507bd325 4360 { "sha256msg1", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4361 },
4362
4363 /* PREFIX_0F38CD */
4364 {
507bd325 4365 { "sha256msg2", { XM, EXxmm }, PREFIX_OPCODE },
a0046408
L
4366 },
4367
48521003
IT
4368 /* PREFIX_0F38CF */
4369 {
4370 { Bad_Opcode },
4371 { Bad_Opcode },
4372 { "gf2p8mulb", { XM, EXxmm }, PREFIX_OPCODE },
4373 },
4374
c0f3af97
L
4375 /* PREFIX_0F38DB */
4376 {
592d1631
L
4377 { Bad_Opcode },
4378 { Bad_Opcode },
507bd325 4379 { "aesimc", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4380 },
4381
4382 /* PREFIX_0F38DC */
4383 {
592d1631
L
4384 { Bad_Opcode },
4385 { Bad_Opcode },
507bd325 4386 { "aesenc", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4387 },
4388
4389 /* PREFIX_0F38DD */
4390 {
592d1631
L
4391 { Bad_Opcode },
4392 { Bad_Opcode },
507bd325 4393 { "aesenclast", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4394 },
4395
4396 /* PREFIX_0F38DE */
4397 {
592d1631
L
4398 { Bad_Opcode },
4399 { Bad_Opcode },
507bd325 4400 { "aesdec", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4401 },
4402
4403 /* PREFIX_0F38DF */
4404 {
592d1631
L
4405 { Bad_Opcode },
4406 { Bad_Opcode },
507bd325 4407 { "aesdeclast", { XM, EXx }, PREFIX_OPCODE },
c0f3af97
L
4408 },
4409
1ceb70f8 4410 /* PREFIX_0F38F0 */
4e7d34a6 4411 {
507bd325 4412 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } }, PREFIX_OPCODE },
592d1631 4413 { Bad_Opcode },
507bd325
L
4414 { "movbeS", { Gv, { MOVBE_Fixup, v_mode } }, PREFIX_OPCODE },
4415 { "crc32", { Gdq, { CRC32_Fixup, b_mode } }, PREFIX_OPCODE },
4e7d34a6
L
4416 },
4417
1ceb70f8 4418 /* PREFIX_0F38F1 */
4e7d34a6 4419 {
507bd325 4420 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv }, PREFIX_OPCODE },
592d1631 4421 { Bad_Opcode },
507bd325
L
4422 { "movbeS", { { MOVBE_Fixup, v_mode }, Gv }, PREFIX_OPCODE },
4423 { "crc32", { Gdq, { CRC32_Fixup, v_mode } }, PREFIX_OPCODE },
4e7d34a6
L
4424 },
4425
603555e5 4426 /* PREFIX_0F38F5 */
e2e1fcde
L
4427 {
4428 { Bad_Opcode },
603555e5
L
4429 { Bad_Opcode },
4430 { MOD_TABLE (MOD_0F38F5_PREFIX_2) },
4431 },
4432
4433 /* PREFIX_0F38F6 */
4434 {
4435 { MOD_TABLE (MOD_0F38F6_PREFIX_0) },
507bd325
L
4436 { "adoxS", { Gdq, Edq}, PREFIX_OPCODE },
4437 { "adcxS", { Gdq, Edq}, PREFIX_OPCODE },
e2e1fcde
L
4438 { Bad_Opcode },
4439 },
4440
c0a30a9f
L
4441 /* PREFIX_0F38F8 */
4442 {
4443 { Bad_Opcode },
4444 { Bad_Opcode },
4445 { MOD_TABLE (MOD_0F38F8_PREFIX_2) },
4446 },
4447
4448 /* PREFIX_0F38F9 */
4449 {
4450 { MOD_TABLE (MOD_0F38F9_PREFIX_0) },
4451 },
4452
1ceb70f8 4453 /* PREFIX_0F3A08 */
42903f7f 4454 {
592d1631
L
4455 { Bad_Opcode },
4456 { Bad_Opcode },
507bd325 4457 { "roundps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4458 },
4459
1ceb70f8 4460 /* PREFIX_0F3A09 */
42903f7f 4461 {
592d1631
L
4462 { Bad_Opcode },
4463 { Bad_Opcode },
507bd325 4464 { "roundpd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4465 },
4466
1ceb70f8 4467 /* PREFIX_0F3A0A */
42903f7f 4468 {
592d1631
L
4469 { Bad_Opcode },
4470 { Bad_Opcode },
507bd325 4471 { "roundss", { XM, EXd, Ib }, PREFIX_OPCODE },
42903f7f
L
4472 },
4473
1ceb70f8 4474 /* PREFIX_0F3A0B */
42903f7f 4475 {
592d1631
L
4476 { Bad_Opcode },
4477 { Bad_Opcode },
507bd325 4478 { "roundsd", { XM, EXq, Ib }, PREFIX_OPCODE },
42903f7f
L
4479 },
4480
1ceb70f8 4481 /* PREFIX_0F3A0C */
42903f7f 4482 {
592d1631
L
4483 { Bad_Opcode },
4484 { Bad_Opcode },
507bd325 4485 { "blendps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4486 },
4487
1ceb70f8 4488 /* PREFIX_0F3A0D */
42903f7f 4489 {
592d1631
L
4490 { Bad_Opcode },
4491 { Bad_Opcode },
507bd325 4492 { "blendpd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4493 },
4494
1ceb70f8 4495 /* PREFIX_0F3A0E */
42903f7f 4496 {
592d1631
L
4497 { Bad_Opcode },
4498 { Bad_Opcode },
507bd325 4499 { "pblendw", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4500 },
4501
1ceb70f8 4502 /* PREFIX_0F3A14 */
42903f7f 4503 {
592d1631
L
4504 { Bad_Opcode },
4505 { Bad_Opcode },
507bd325 4506 { "pextrb", { Edqb, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4507 },
4508
1ceb70f8 4509 /* PREFIX_0F3A15 */
42903f7f 4510 {
592d1631
L
4511 { Bad_Opcode },
4512 { Bad_Opcode },
507bd325 4513 { "pextrw", { Edqw, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4514 },
4515
1ceb70f8 4516 /* PREFIX_0F3A16 */
42903f7f 4517 {
592d1631
L
4518 { Bad_Opcode },
4519 { Bad_Opcode },
507bd325 4520 { "pextrK", { Edq, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4521 },
4522
1ceb70f8 4523 /* PREFIX_0F3A17 */
42903f7f 4524 {
592d1631
L
4525 { Bad_Opcode },
4526 { Bad_Opcode },
507bd325 4527 { "extractps", { Edqd, XM, Ib }, PREFIX_OPCODE },
42903f7f
L
4528 },
4529
1ceb70f8 4530 /* PREFIX_0F3A20 */
42903f7f 4531 {
592d1631
L
4532 { Bad_Opcode },
4533 { Bad_Opcode },
507bd325 4534 { "pinsrb", { XM, Edqb, Ib }, PREFIX_OPCODE },
42903f7f
L
4535 },
4536
1ceb70f8 4537 /* PREFIX_0F3A21 */
42903f7f 4538 {
592d1631
L
4539 { Bad_Opcode },
4540 { Bad_Opcode },
507bd325 4541 { "insertps", { XM, EXd, Ib }, PREFIX_OPCODE },
42903f7f
L
4542 },
4543
1ceb70f8 4544 /* PREFIX_0F3A22 */
42903f7f 4545 {
592d1631
L
4546 { Bad_Opcode },
4547 { Bad_Opcode },
507bd325 4548 { "pinsrK", { XM, Edq, Ib }, PREFIX_OPCODE },
42903f7f
L
4549 },
4550
1ceb70f8 4551 /* PREFIX_0F3A40 */
42903f7f 4552 {
592d1631
L
4553 { Bad_Opcode },
4554 { Bad_Opcode },
507bd325 4555 { "dpps", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4556 },
4557
1ceb70f8 4558 /* PREFIX_0F3A41 */
42903f7f 4559 {
592d1631
L
4560 { Bad_Opcode },
4561 { Bad_Opcode },
507bd325 4562 { "dppd", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f
L
4563 },
4564
1ceb70f8 4565 /* PREFIX_0F3A42 */
42903f7f 4566 {
592d1631
L
4567 { Bad_Opcode },
4568 { Bad_Opcode },
507bd325 4569 { "mpsadbw", { XM, EXx, Ib }, PREFIX_OPCODE },
42903f7f 4570 },
381d071f 4571
c0f3af97
L
4572 /* PREFIX_0F3A44 */
4573 {
592d1631
L
4574 { Bad_Opcode },
4575 { Bad_Opcode },
507bd325 4576 { "pclmulqdq", { XM, EXx, PCLMUL }, PREFIX_OPCODE },
c0f3af97
L
4577 },
4578
1ceb70f8 4579 /* PREFIX_0F3A60 */
381d071f 4580 {
592d1631
L
4581 { Bad_Opcode },
4582 { Bad_Opcode },
15c7c1d8 4583 { "pcmpestrm", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, PREFIX_OPCODE },
381d071f
L
4584 },
4585
1ceb70f8 4586 /* PREFIX_0F3A61 */
381d071f 4587 {
592d1631
L
4588 { Bad_Opcode },
4589 { Bad_Opcode },
15c7c1d8 4590 { "pcmpestri", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, PREFIX_OPCODE },
381d071f
L
4591 },
4592
1ceb70f8 4593 /* PREFIX_0F3A62 */
381d071f 4594 {
592d1631
L
4595 { Bad_Opcode },
4596 { Bad_Opcode },
507bd325 4597 { "pcmpistrm", { XM, EXx, Ib }, PREFIX_OPCODE },
381d071f
L
4598 },
4599
1ceb70f8 4600 /* PREFIX_0F3A63 */
381d071f 4601 {
592d1631
L
4602 { Bad_Opcode },
4603 { Bad_Opcode },
507bd325 4604 { "pcmpistri", { XM, EXx, Ib }, PREFIX_OPCODE },
381d071f 4605 },
09a2c6cf 4606
a0046408
L
4607 /* PREFIX_0F3ACC */
4608 {
507bd325 4609 { "sha1rnds4", { XM, EXxmm, Ib }, PREFIX_OPCODE },
a0046408
L
4610 },
4611
48521003
IT
4612 /* PREFIX_0F3ACE */
4613 {
4614 { Bad_Opcode },
4615 { Bad_Opcode },
4616 { "gf2p8affineqb", { XM, EXxmm, Ib }, PREFIX_OPCODE },
4617 },
4618
4619 /* PREFIX_0F3ACF */
4620 {
4621 { Bad_Opcode },
4622 { Bad_Opcode },
4623 { "gf2p8affineinvqb", { XM, EXxmm, Ib }, PREFIX_OPCODE },
4624 },
4625
c0f3af97 4626 /* PREFIX_0F3ADF */
09a2c6cf 4627 {
592d1631
L
4628 { Bad_Opcode },
4629 { Bad_Opcode },
507bd325 4630 { "aeskeygenassist", { XM, EXx, Ib }, PREFIX_OPCODE },
09a2c6cf
L
4631 },
4632
592a252b 4633 /* PREFIX_VEX_0F10 */
09a2c6cf 4634 {
ec6f095a
L
4635 { "vmovups", { XM, EXx }, 0 },
4636 { "vmovss", { XMVexScalar, VexScalar, EXdScalar }, 0 },
4637 { "vmovupd", { XM, EXx }, 0 },
4638 { "vmovsd", { XMVexScalar, VexScalar, EXqScalar }, 0 },
09a2c6cf
L
4639 },
4640
592a252b 4641 /* PREFIX_VEX_0F11 */
09a2c6cf 4642 {
ec6f095a
L
4643 { "vmovups", { EXxS, XM }, 0 },
4644 { "vmovss", { EXdVexScalarS, VexScalar, XMScalar }, 0 },
4645 { "vmovupd", { EXxS, XM }, 0 },
4646 { "vmovsd", { EXqVexScalarS, VexScalar, XMScalar }, 0 },
09a2c6cf
L
4647 },
4648
592a252b 4649 /* PREFIX_VEX_0F12 */
09a2c6cf 4650 {
592a252b 4651 { MOD_TABLE (MOD_VEX_0F12_PREFIX_0) },
ec6f095a 4652 { "vmovsldup", { XM, EXx }, 0 },
592a252b 4653 { VEX_LEN_TABLE (VEX_LEN_0F12_P_2) },
ec6f095a 4654 { "vmovddup", { XM, EXymmq }, 0 },
09a2c6cf
L
4655 },
4656
592a252b 4657 /* PREFIX_VEX_0F16 */
09a2c6cf 4658 {
592a252b 4659 { MOD_TABLE (MOD_VEX_0F16_PREFIX_0) },
ec6f095a 4660 { "vmovshdup", { XM, EXx }, 0 },
592a252b 4661 { VEX_LEN_TABLE (VEX_LEN_0F16_P_2) },
5f754f58 4662 },
7c52e0e8 4663
592a252b 4664 /* PREFIX_VEX_0F2A */
5f754f58 4665 {
592d1631 4666 { Bad_Opcode },
592a252b 4667 { VEX_LEN_TABLE (VEX_LEN_0F2A_P_1) },
592d1631 4668 { Bad_Opcode },
592a252b 4669 { VEX_LEN_TABLE (VEX_LEN_0F2A_P_3) },
5f754f58 4670 },
7c52e0e8 4671
592a252b 4672 /* PREFIX_VEX_0F2C */
5f754f58 4673 {
592d1631 4674 { Bad_Opcode },
592a252b 4675 { VEX_LEN_TABLE (VEX_LEN_0F2C_P_1) },
592d1631 4676 { Bad_Opcode },
592a252b 4677 { VEX_LEN_TABLE (VEX_LEN_0F2C_P_3) },
5f754f58 4678 },
7c52e0e8 4679
592a252b 4680 /* PREFIX_VEX_0F2D */
7c52e0e8 4681 {
592d1631 4682 { Bad_Opcode },
592a252b 4683 { VEX_LEN_TABLE (VEX_LEN_0F2D_P_1) },
592d1631 4684 { Bad_Opcode },
592a252b 4685 { VEX_LEN_TABLE (VEX_LEN_0F2D_P_3) },
7c52e0e8
L
4686 },
4687
592a252b 4688 /* PREFIX_VEX_0F2E */
7c52e0e8 4689 {
ec6f095a 4690 { "vucomiss", { XMScalar, EXdScalar }, 0 },
592d1631 4691 { Bad_Opcode },
ec6f095a 4692 { "vucomisd", { XMScalar, EXqScalar }, 0 },
7c52e0e8
L
4693 },
4694
592a252b 4695 /* PREFIX_VEX_0F2F */
7c52e0e8 4696 {
ec6f095a 4697 { "vcomiss", { XMScalar, EXdScalar }, 0 },
592d1631 4698 { Bad_Opcode },
ec6f095a 4699 { "vcomisd", { XMScalar, EXqScalar }, 0 },
7c52e0e8
L
4700 },
4701
43234a1e
L
4702 /* PREFIX_VEX_0F41 */
4703 {
4704 { VEX_LEN_TABLE (VEX_LEN_0F41_P_0) },
1ba585e8
IT
4705 { Bad_Opcode },
4706 { VEX_LEN_TABLE (VEX_LEN_0F41_P_2) },
43234a1e
L
4707 },
4708
4709 /* PREFIX_VEX_0F42 */
4710 {
4711 { VEX_LEN_TABLE (VEX_LEN_0F42_P_0) },
1ba585e8
IT
4712 { Bad_Opcode },
4713 { VEX_LEN_TABLE (VEX_LEN_0F42_P_2) },
43234a1e
L
4714 },
4715
4716 /* PREFIX_VEX_0F44 */
4717 {
4718 { VEX_LEN_TABLE (VEX_LEN_0F44_P_0) },
1ba585e8
IT
4719 { Bad_Opcode },
4720 { VEX_LEN_TABLE (VEX_LEN_0F44_P_2) },
43234a1e
L
4721 },
4722
4723 /* PREFIX_VEX_0F45 */
4724 {
4725 { VEX_LEN_TABLE (VEX_LEN_0F45_P_0) },
1ba585e8
IT
4726 { Bad_Opcode },
4727 { VEX_LEN_TABLE (VEX_LEN_0F45_P_2) },
43234a1e
L
4728 },
4729
4730 /* PREFIX_VEX_0F46 */
4731 {
4732 { VEX_LEN_TABLE (VEX_LEN_0F46_P_0) },
1ba585e8
IT
4733 { Bad_Opcode },
4734 { VEX_LEN_TABLE (VEX_LEN_0F46_P_2) },
43234a1e
L
4735 },
4736
4737 /* PREFIX_VEX_0F47 */
4738 {
4739 { VEX_LEN_TABLE (VEX_LEN_0F47_P_0) },
1ba585e8
IT
4740 { Bad_Opcode },
4741 { VEX_LEN_TABLE (VEX_LEN_0F47_P_2) },
43234a1e
L
4742 },
4743
1ba585e8 4744 /* PREFIX_VEX_0F4A */
43234a1e 4745 {
1ba585e8 4746 { VEX_LEN_TABLE (VEX_LEN_0F4A_P_0) },
43234a1e 4747 { Bad_Opcode },
1ba585e8
IT
4748 { VEX_LEN_TABLE (VEX_LEN_0F4A_P_2) },
4749 },
4750
4751 /* PREFIX_VEX_0F4B */
4752 {
4753 { VEX_LEN_TABLE (VEX_LEN_0F4B_P_0) },
43234a1e
L
4754 { Bad_Opcode },
4755 { VEX_LEN_TABLE (VEX_LEN_0F4B_P_2) },
4756 },
4757
592a252b 4758 /* PREFIX_VEX_0F51 */
7c52e0e8 4759 {
ec6f095a
L
4760 { "vsqrtps", { XM, EXx }, 0 },
4761 { "vsqrtss", { XMScalar, VexScalar, EXdScalar }, 0 },
4762 { "vsqrtpd", { XM, EXx }, 0 },
4763 { "vsqrtsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4764 },
4765
592a252b 4766 /* PREFIX_VEX_0F52 */
7c52e0e8 4767 {
ec6f095a
L
4768 { "vrsqrtps", { XM, EXx }, 0 },
4769 { "vrsqrtss", { XMScalar, VexScalar, EXdScalar }, 0 },
7c52e0e8
L
4770 },
4771
592a252b 4772 /* PREFIX_VEX_0F53 */
7c52e0e8 4773 {
ec6f095a
L
4774 { "vrcpps", { XM, EXx }, 0 },
4775 { "vrcpss", { XMScalar, VexScalar, EXdScalar }, 0 },
7c52e0e8
L
4776 },
4777
592a252b 4778 /* PREFIX_VEX_0F58 */
7c52e0e8 4779 {
ec6f095a
L
4780 { "vaddps", { XM, Vex, EXx }, 0 },
4781 { "vaddss", { XMScalar, VexScalar, EXdScalar }, 0 },
4782 { "vaddpd", { XM, Vex, EXx }, 0 },
4783 { "vaddsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4784 },
4785
592a252b 4786 /* PREFIX_VEX_0F59 */
7c52e0e8 4787 {
ec6f095a
L
4788 { "vmulps", { XM, Vex, EXx }, 0 },
4789 { "vmulss", { XMScalar, VexScalar, EXdScalar }, 0 },
4790 { "vmulpd", { XM, Vex, EXx }, 0 },
4791 { "vmulsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4792 },
4793
592a252b 4794 /* PREFIX_VEX_0F5A */
7c52e0e8 4795 {
ec6f095a
L
4796 { "vcvtps2pd", { XM, EXxmmq }, 0 },
4797 { "vcvtss2sd", { XMScalar, VexScalar, EXdScalar }, 0 },
4798 { "vcvtpd2ps%XY",{ XMM, EXx }, 0 },
4799 { "vcvtsd2ss", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4800 },
4801
592a252b 4802 /* PREFIX_VEX_0F5B */
7c52e0e8 4803 {
ec6f095a
L
4804 { "vcvtdq2ps", { XM, EXx }, 0 },
4805 { "vcvttps2dq", { XM, EXx }, 0 },
4806 { "vcvtps2dq", { XM, EXx }, 0 },
7c52e0e8
L
4807 },
4808
592a252b 4809 /* PREFIX_VEX_0F5C */
7c52e0e8 4810 {
ec6f095a
L
4811 { "vsubps", { XM, Vex, EXx }, 0 },
4812 { "vsubss", { XMScalar, VexScalar, EXdScalar }, 0 },
4813 { "vsubpd", { XM, Vex, EXx }, 0 },
4814 { "vsubsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4815 },
4816
592a252b 4817 /* PREFIX_VEX_0F5D */
7c52e0e8 4818 {
ec6f095a
L
4819 { "vminps", { XM, Vex, EXx }, 0 },
4820 { "vminss", { XMScalar, VexScalar, EXdScalar }, 0 },
4821 { "vminpd", { XM, Vex, EXx }, 0 },
4822 { "vminsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4823 },
4824
592a252b 4825 /* PREFIX_VEX_0F5E */
7c52e0e8 4826 {
ec6f095a
L
4827 { "vdivps", { XM, Vex, EXx }, 0 },
4828 { "vdivss", { XMScalar, VexScalar, EXdScalar }, 0 },
4829 { "vdivpd", { XM, Vex, EXx }, 0 },
4830 { "vdivsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4831 },
4832
592a252b 4833 /* PREFIX_VEX_0F5F */
7c52e0e8 4834 {
ec6f095a
L
4835 { "vmaxps", { XM, Vex, EXx }, 0 },
4836 { "vmaxss", { XMScalar, VexScalar, EXdScalar }, 0 },
4837 { "vmaxpd", { XM, Vex, EXx }, 0 },
4838 { "vmaxsd", { XMScalar, VexScalar, EXqScalar }, 0 },
7c52e0e8
L
4839 },
4840
592a252b 4841 /* PREFIX_VEX_0F60 */
7c52e0e8 4842 {
592d1631
L
4843 { Bad_Opcode },
4844 { Bad_Opcode },
ec6f095a 4845 { "vpunpcklbw", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4846 },
4847
592a252b 4848 /* PREFIX_VEX_0F61 */
7c52e0e8 4849 {
592d1631
L
4850 { Bad_Opcode },
4851 { Bad_Opcode },
ec6f095a 4852 { "vpunpcklwd", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4853 },
4854
592a252b 4855 /* PREFIX_VEX_0F62 */
7c52e0e8 4856 {
592d1631
L
4857 { Bad_Opcode },
4858 { Bad_Opcode },
ec6f095a 4859 { "vpunpckldq", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4860 },
4861
592a252b 4862 /* PREFIX_VEX_0F63 */
7c52e0e8 4863 {
592d1631
L
4864 { Bad_Opcode },
4865 { Bad_Opcode },
ec6f095a 4866 { "vpacksswb", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4867 },
4868
592a252b 4869 /* PREFIX_VEX_0F64 */
7c52e0e8 4870 {
592d1631
L
4871 { Bad_Opcode },
4872 { Bad_Opcode },
ec6f095a 4873 { "vpcmpgtb", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4874 },
4875
592a252b 4876 /* PREFIX_VEX_0F65 */
7c52e0e8 4877 {
592d1631
L
4878 { Bad_Opcode },
4879 { Bad_Opcode },
ec6f095a 4880 { "vpcmpgtw", { XM, Vex, EXx }, 0 },
7c52e0e8
L
4881 },
4882
592a252b 4883 /* PREFIX_VEX_0F66 */
7c52e0e8 4884 {
592d1631
L
4885 { Bad_Opcode },
4886 { Bad_Opcode },
ec6f095a 4887 { "vpcmpgtd", { XM, Vex, EXx }, 0 },
7c52e0e8 4888 },
6439fc28 4889
592a252b 4890 /* PREFIX_VEX_0F67 */
331d2d0d 4891 {
592d1631
L
4892 { Bad_Opcode },
4893 { Bad_Opcode },
ec6f095a 4894 { "vpackuswb", { XM, Vex, EXx }, 0 },
c0f3af97
L
4895 },
4896
592a252b 4897 /* PREFIX_VEX_0F68 */
c0f3af97 4898 {
592d1631
L
4899 { Bad_Opcode },
4900 { Bad_Opcode },
ec6f095a 4901 { "vpunpckhbw", { XM, Vex, EXx }, 0 },
c0f3af97
L
4902 },
4903
592a252b 4904 /* PREFIX_VEX_0F69 */
c0f3af97 4905 {
592d1631
L
4906 { Bad_Opcode },
4907 { Bad_Opcode },
ec6f095a 4908 { "vpunpckhwd", { XM, Vex, EXx }, 0 },
c0f3af97
L
4909 },
4910
592a252b 4911 /* PREFIX_VEX_0F6A */
c0f3af97 4912 {
592d1631
L
4913 { Bad_Opcode },
4914 { Bad_Opcode },
ec6f095a 4915 { "vpunpckhdq", { XM, Vex, EXx }, 0 },
c0f3af97
L
4916 },
4917
592a252b 4918 /* PREFIX_VEX_0F6B */
c0f3af97 4919 {
592d1631
L
4920 { Bad_Opcode },
4921 { Bad_Opcode },
ec6f095a 4922 { "vpackssdw", { XM, Vex, EXx }, 0 },
c0f3af97
L
4923 },
4924
592a252b 4925 /* PREFIX_VEX_0F6C */
c0f3af97 4926 {
592d1631
L
4927 { Bad_Opcode },
4928 { Bad_Opcode },
ec6f095a 4929 { "vpunpcklqdq", { XM, Vex, EXx }, 0 },
c0f3af97
L
4930 },
4931
592a252b 4932 /* PREFIX_VEX_0F6D */
c0f3af97 4933 {
592d1631
L
4934 { Bad_Opcode },
4935 { Bad_Opcode },
ec6f095a 4936 { "vpunpckhqdq", { XM, Vex, EXx }, 0 },
c0f3af97
L
4937 },
4938
592a252b 4939 /* PREFIX_VEX_0F6E */
c0f3af97 4940 {
592d1631
L
4941 { Bad_Opcode },
4942 { Bad_Opcode },
592a252b 4943 { VEX_LEN_TABLE (VEX_LEN_0F6E_P_2) },
c0f3af97
L
4944 },
4945
592a252b 4946 /* PREFIX_VEX_0F6F */
c0f3af97 4947 {
592d1631 4948 { Bad_Opcode },
ec6f095a
L
4949 { "vmovdqu", { XM, EXx }, 0 },
4950 { "vmovdqa", { XM, EXx }, 0 },
c0f3af97
L
4951 },
4952
592a252b 4953 /* PREFIX_VEX_0F70 */
c0f3af97 4954 {
592d1631 4955 { Bad_Opcode },
ec6f095a
L
4956 { "vpshufhw", { XM, EXx, Ib }, 0 },
4957 { "vpshufd", { XM, EXx, Ib }, 0 },
4958 { "vpshuflw", { XM, EXx, Ib }, 0 },
c0f3af97
L
4959 },
4960
592a252b 4961 /* PREFIX_VEX_0F71_REG_2 */
c0f3af97 4962 {
592d1631
L
4963 { Bad_Opcode },
4964 { Bad_Opcode },
ec6f095a 4965 { "vpsrlw", { Vex, XS, Ib }, 0 },
c0f3af97
L
4966 },
4967
592a252b 4968 /* PREFIX_VEX_0F71_REG_4 */
c0f3af97 4969 {
592d1631
L
4970 { Bad_Opcode },
4971 { Bad_Opcode },
ec6f095a 4972 { "vpsraw", { Vex, XS, Ib }, 0 },
c0f3af97
L
4973 },
4974
592a252b 4975 /* PREFIX_VEX_0F71_REG_6 */
c0f3af97 4976 {
592d1631
L
4977 { Bad_Opcode },
4978 { Bad_Opcode },
ec6f095a 4979 { "vpsllw", { Vex, XS, Ib }, 0 },
c0f3af97
L
4980 },
4981
592a252b 4982 /* PREFIX_VEX_0F72_REG_2 */
c0f3af97 4983 {
592d1631
L
4984 { Bad_Opcode },
4985 { Bad_Opcode },
ec6f095a 4986 { "vpsrld", { Vex, XS, Ib }, 0 },
c0f3af97
L
4987 },
4988
592a252b 4989 /* PREFIX_VEX_0F72_REG_4 */
c0f3af97 4990 {
592d1631
L
4991 { Bad_Opcode },
4992 { Bad_Opcode },
ec6f095a 4993 { "vpsrad", { Vex, XS, Ib }, 0 },
c0f3af97
L
4994 },
4995
592a252b 4996 /* PREFIX_VEX_0F72_REG_6 */
c0f3af97 4997 {
592d1631
L
4998 { Bad_Opcode },
4999 { Bad_Opcode },
ec6f095a 5000 { "vpslld", { Vex, XS, Ib }, 0 },
c0f3af97
L
5001 },
5002
592a252b 5003 /* PREFIX_VEX_0F73_REG_2 */
c0f3af97 5004 {
592d1631
L
5005 { Bad_Opcode },
5006 { Bad_Opcode },
ec6f095a 5007 { "vpsrlq", { Vex, XS, Ib }, 0 },
c0f3af97
L
5008 },
5009
592a252b 5010 /* PREFIX_VEX_0F73_REG_3 */
c0f3af97 5011 {
592d1631
L
5012 { Bad_Opcode },
5013 { Bad_Opcode },
ec6f095a 5014 { "vpsrldq", { Vex, XS, Ib }, 0 },
c0f3af97
L
5015 },
5016
592a252b 5017 /* PREFIX_VEX_0F73_REG_6 */
c0f3af97 5018 {
592d1631
L
5019 { Bad_Opcode },
5020 { Bad_Opcode },
ec6f095a 5021 { "vpsllq", { Vex, XS, Ib }, 0 },
c0f3af97
L
5022 },
5023
592a252b 5024 /* PREFIX_VEX_0F73_REG_7 */
c0f3af97 5025 {
592d1631
L
5026 { Bad_Opcode },
5027 { Bad_Opcode },
ec6f095a 5028 { "vpslldq", { Vex, XS, Ib }, 0 },
c0f3af97
L
5029 },
5030
592a252b 5031 /* PREFIX_VEX_0F74 */
c0f3af97 5032 {
592d1631
L
5033 { Bad_Opcode },
5034 { Bad_Opcode },
ec6f095a 5035 { "vpcmpeqb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5036 },
5037
592a252b 5038 /* PREFIX_VEX_0F75 */
c0f3af97 5039 {
592d1631
L
5040 { Bad_Opcode },
5041 { Bad_Opcode },
ec6f095a 5042 { "vpcmpeqw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5043 },
5044
592a252b 5045 /* PREFIX_VEX_0F76 */
c0f3af97 5046 {
592d1631
L
5047 { Bad_Opcode },
5048 { Bad_Opcode },
ec6f095a 5049 { "vpcmpeqd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5050 },
5051
592a252b 5052 /* PREFIX_VEX_0F77 */
c0f3af97 5053 {
ec6f095a 5054 { VEX_LEN_TABLE (VEX_LEN_0F77_P_0) },
c0f3af97
L
5055 },
5056
592a252b 5057 /* PREFIX_VEX_0F7C */
c0f3af97 5058 {
592d1631
L
5059 { Bad_Opcode },
5060 { Bad_Opcode },
ec6f095a
L
5061 { "vhaddpd", { XM, Vex, EXx }, 0 },
5062 { "vhaddps", { XM, Vex, EXx }, 0 },
c0f3af97
L
5063 },
5064
592a252b 5065 /* PREFIX_VEX_0F7D */
c0f3af97 5066 {
592d1631
L
5067 { Bad_Opcode },
5068 { Bad_Opcode },
ec6f095a
L
5069 { "vhsubpd", { XM, Vex, EXx }, 0 },
5070 { "vhsubps", { XM, Vex, EXx }, 0 },
c0f3af97
L
5071 },
5072
592a252b 5073 /* PREFIX_VEX_0F7E */
c0f3af97 5074 {
592d1631 5075 { Bad_Opcode },
592a252b
L
5076 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_1) },
5077 { VEX_LEN_TABLE (VEX_LEN_0F7E_P_2) },
c0f3af97
L
5078 },
5079
592a252b 5080 /* PREFIX_VEX_0F7F */
c0f3af97 5081 {
592d1631 5082 { Bad_Opcode },
ec6f095a
L
5083 { "vmovdqu", { EXxS, XM }, 0 },
5084 { "vmovdqa", { EXxS, XM }, 0 },
c0f3af97
L
5085 },
5086
43234a1e
L
5087 /* PREFIX_VEX_0F90 */
5088 {
5089 { VEX_LEN_TABLE (VEX_LEN_0F90_P_0) },
1ba585e8
IT
5090 { Bad_Opcode },
5091 { VEX_LEN_TABLE (VEX_LEN_0F90_P_2) },
43234a1e
L
5092 },
5093
5094 /* PREFIX_VEX_0F91 */
5095 {
5096 { VEX_LEN_TABLE (VEX_LEN_0F91_P_0) },
1ba585e8
IT
5097 { Bad_Opcode },
5098 { VEX_LEN_TABLE (VEX_LEN_0F91_P_2) },
43234a1e
L
5099 },
5100
5101 /* PREFIX_VEX_0F92 */
5102 {
5103 { VEX_LEN_TABLE (VEX_LEN_0F92_P_0) },
1ba585e8 5104 { Bad_Opcode },
90a915bf 5105 { VEX_LEN_TABLE (VEX_LEN_0F92_P_2) },
1ba585e8 5106 { VEX_LEN_TABLE (VEX_LEN_0F92_P_3) },
43234a1e
L
5107 },
5108
5109 /* PREFIX_VEX_0F93 */
5110 {
5111 { VEX_LEN_TABLE (VEX_LEN_0F93_P_0) },
1ba585e8 5112 { Bad_Opcode },
90a915bf 5113 { VEX_LEN_TABLE (VEX_LEN_0F93_P_2) },
1ba585e8 5114 { VEX_LEN_TABLE (VEX_LEN_0F93_P_3) },
43234a1e
L
5115 },
5116
5117 /* PREFIX_VEX_0F98 */
5118 {
5119 { VEX_LEN_TABLE (VEX_LEN_0F98_P_0) },
1ba585e8
IT
5120 { Bad_Opcode },
5121 { VEX_LEN_TABLE (VEX_LEN_0F98_P_2) },
5122 },
5123
5124 /* PREFIX_VEX_0F99 */
5125 {
5126 { VEX_LEN_TABLE (VEX_LEN_0F99_P_0) },
5127 { Bad_Opcode },
5128 { VEX_LEN_TABLE (VEX_LEN_0F99_P_2) },
43234a1e
L
5129 },
5130
592a252b 5131 /* PREFIX_VEX_0FC2 */
c0f3af97 5132 {
ec6f095a
L
5133 { "vcmpps", { XM, Vex, EXx, VCMP }, 0 },
5134 { "vcmpss", { XMScalar, VexScalar, EXdScalar, VCMP }, 0 },
5135 { "vcmppd", { XM, Vex, EXx, VCMP }, 0 },
5136 { "vcmpsd", { XMScalar, VexScalar, EXqScalar, VCMP }, 0 },
c0f3af97
L
5137 },
5138
592a252b 5139 /* PREFIX_VEX_0FC4 */
c0f3af97 5140 {
592d1631
L
5141 { Bad_Opcode },
5142 { Bad_Opcode },
592a252b 5143 { VEX_LEN_TABLE (VEX_LEN_0FC4_P_2) },
c0f3af97
L
5144 },
5145
592a252b 5146 /* PREFIX_VEX_0FC5 */
c0f3af97 5147 {
592d1631
L
5148 { Bad_Opcode },
5149 { Bad_Opcode },
592a252b 5150 { VEX_LEN_TABLE (VEX_LEN_0FC5_P_2) },
c0f3af97
L
5151 },
5152
592a252b 5153 /* PREFIX_VEX_0FD0 */
c0f3af97 5154 {
592d1631
L
5155 { Bad_Opcode },
5156 { Bad_Opcode },
ec6f095a
L
5157 { "vaddsubpd", { XM, Vex, EXx }, 0 },
5158 { "vaddsubps", { XM, Vex, EXx }, 0 },
c0f3af97
L
5159 },
5160
592a252b 5161 /* PREFIX_VEX_0FD1 */
c0f3af97 5162 {
592d1631
L
5163 { Bad_Opcode },
5164 { Bad_Opcode },
ec6f095a 5165 { "vpsrlw", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5166 },
5167
592a252b 5168 /* PREFIX_VEX_0FD2 */
c0f3af97 5169 {
592d1631
L
5170 { Bad_Opcode },
5171 { Bad_Opcode },
ec6f095a 5172 { "vpsrld", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5173 },
5174
592a252b 5175 /* PREFIX_VEX_0FD3 */
c0f3af97 5176 {
592d1631
L
5177 { Bad_Opcode },
5178 { Bad_Opcode },
ec6f095a 5179 { "vpsrlq", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5180 },
5181
592a252b 5182 /* PREFIX_VEX_0FD4 */
c0f3af97 5183 {
592d1631
L
5184 { Bad_Opcode },
5185 { Bad_Opcode },
ec6f095a 5186 { "vpaddq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5187 },
5188
592a252b 5189 /* PREFIX_VEX_0FD5 */
c0f3af97 5190 {
592d1631
L
5191 { Bad_Opcode },
5192 { Bad_Opcode },
ec6f095a 5193 { "vpmullw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5194 },
5195
592a252b 5196 /* PREFIX_VEX_0FD6 */
c0f3af97 5197 {
592d1631
L
5198 { Bad_Opcode },
5199 { Bad_Opcode },
592a252b 5200 { VEX_LEN_TABLE (VEX_LEN_0FD6_P_2) },
c0f3af97
L
5201 },
5202
592a252b 5203 /* PREFIX_VEX_0FD7 */
c0f3af97 5204 {
592d1631
L
5205 { Bad_Opcode },
5206 { Bad_Opcode },
592a252b 5207 { MOD_TABLE (MOD_VEX_0FD7_PREFIX_2) },
c0f3af97
L
5208 },
5209
592a252b 5210 /* PREFIX_VEX_0FD8 */
c0f3af97 5211 {
592d1631
L
5212 { Bad_Opcode },
5213 { Bad_Opcode },
ec6f095a 5214 { "vpsubusb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5215 },
5216
592a252b 5217 /* PREFIX_VEX_0FD9 */
c0f3af97 5218 {
592d1631
L
5219 { Bad_Opcode },
5220 { Bad_Opcode },
ec6f095a 5221 { "vpsubusw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5222 },
5223
592a252b 5224 /* PREFIX_VEX_0FDA */
c0f3af97 5225 {
592d1631
L
5226 { Bad_Opcode },
5227 { Bad_Opcode },
ec6f095a 5228 { "vpminub", { XM, Vex, EXx }, 0 },
c0f3af97
L
5229 },
5230
592a252b 5231 /* PREFIX_VEX_0FDB */
c0f3af97 5232 {
592d1631
L
5233 { Bad_Opcode },
5234 { Bad_Opcode },
ec6f095a 5235 { "vpand", { XM, Vex, EXx }, 0 },
c0f3af97
L
5236 },
5237
592a252b 5238 /* PREFIX_VEX_0FDC */
c0f3af97 5239 {
592d1631
L
5240 { Bad_Opcode },
5241 { Bad_Opcode },
ec6f095a 5242 { "vpaddusb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5243 },
5244
592a252b 5245 /* PREFIX_VEX_0FDD */
c0f3af97 5246 {
592d1631
L
5247 { Bad_Opcode },
5248 { Bad_Opcode },
ec6f095a 5249 { "vpaddusw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5250 },
5251
592a252b 5252 /* PREFIX_VEX_0FDE */
c0f3af97 5253 {
592d1631
L
5254 { Bad_Opcode },
5255 { Bad_Opcode },
ec6f095a 5256 { "vpmaxub", { XM, Vex, EXx }, 0 },
c0f3af97
L
5257 },
5258
592a252b 5259 /* PREFIX_VEX_0FDF */
c0f3af97 5260 {
592d1631
L
5261 { Bad_Opcode },
5262 { Bad_Opcode },
ec6f095a 5263 { "vpandn", { XM, Vex, EXx }, 0 },
c0f3af97
L
5264 },
5265
592a252b 5266 /* PREFIX_VEX_0FE0 */
c0f3af97 5267 {
592d1631
L
5268 { Bad_Opcode },
5269 { Bad_Opcode },
ec6f095a 5270 { "vpavgb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5271 },
5272
592a252b 5273 /* PREFIX_VEX_0FE1 */
c0f3af97 5274 {
592d1631
L
5275 { Bad_Opcode },
5276 { Bad_Opcode },
ec6f095a 5277 { "vpsraw", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5278 },
5279
592a252b 5280 /* PREFIX_VEX_0FE2 */
c0f3af97 5281 {
592d1631
L
5282 { Bad_Opcode },
5283 { Bad_Opcode },
ec6f095a 5284 { "vpsrad", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5285 },
5286
592a252b 5287 /* PREFIX_VEX_0FE3 */
c0f3af97 5288 {
592d1631
L
5289 { Bad_Opcode },
5290 { Bad_Opcode },
ec6f095a 5291 { "vpavgw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5292 },
5293
592a252b 5294 /* PREFIX_VEX_0FE4 */
c0f3af97 5295 {
592d1631
L
5296 { Bad_Opcode },
5297 { Bad_Opcode },
ec6f095a 5298 { "vpmulhuw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5299 },
5300
592a252b 5301 /* PREFIX_VEX_0FE5 */
c0f3af97 5302 {
592d1631
L
5303 { Bad_Opcode },
5304 { Bad_Opcode },
ec6f095a 5305 { "vpmulhw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5306 },
5307
592a252b 5308 /* PREFIX_VEX_0FE6 */
c0f3af97 5309 {
592d1631 5310 { Bad_Opcode },
ec6f095a
L
5311 { "vcvtdq2pd", { XM, EXxmmq }, 0 },
5312 { "vcvttpd2dq%XY", { XMM, EXx }, 0 },
5313 { "vcvtpd2dq%XY", { XMM, EXx }, 0 },
c0f3af97
L
5314 },
5315
592a252b 5316 /* PREFIX_VEX_0FE7 */
c0f3af97 5317 {
592d1631
L
5318 { Bad_Opcode },
5319 { Bad_Opcode },
592a252b 5320 { MOD_TABLE (MOD_VEX_0FE7_PREFIX_2) },
c0f3af97
L
5321 },
5322
592a252b 5323 /* PREFIX_VEX_0FE8 */
c0f3af97 5324 {
592d1631
L
5325 { Bad_Opcode },
5326 { Bad_Opcode },
ec6f095a 5327 { "vpsubsb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5328 },
5329
592a252b 5330 /* PREFIX_VEX_0FE9 */
c0f3af97 5331 {
592d1631
L
5332 { Bad_Opcode },
5333 { Bad_Opcode },
ec6f095a 5334 { "vpsubsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5335 },
5336
592a252b 5337 /* PREFIX_VEX_0FEA */
c0f3af97 5338 {
592d1631
L
5339 { Bad_Opcode },
5340 { Bad_Opcode },
ec6f095a 5341 { "vpminsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5342 },
5343
592a252b 5344 /* PREFIX_VEX_0FEB */
c0f3af97 5345 {
592d1631
L
5346 { Bad_Opcode },
5347 { Bad_Opcode },
ec6f095a 5348 { "vpor", { XM, Vex, EXx }, 0 },
c0f3af97
L
5349 },
5350
592a252b 5351 /* PREFIX_VEX_0FEC */
c0f3af97 5352 {
592d1631
L
5353 { Bad_Opcode },
5354 { Bad_Opcode },
ec6f095a 5355 { "vpaddsb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5356 },
5357
592a252b 5358 /* PREFIX_VEX_0FED */
c0f3af97 5359 {
592d1631
L
5360 { Bad_Opcode },
5361 { Bad_Opcode },
ec6f095a 5362 { "vpaddsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5363 },
5364
592a252b 5365 /* PREFIX_VEX_0FEE */
c0f3af97 5366 {
592d1631
L
5367 { Bad_Opcode },
5368 { Bad_Opcode },
ec6f095a 5369 { "vpmaxsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5370 },
5371
592a252b 5372 /* PREFIX_VEX_0FEF */
c0f3af97 5373 {
592d1631
L
5374 { Bad_Opcode },
5375 { Bad_Opcode },
ec6f095a 5376 { "vpxor", { XM, Vex, EXx }, 0 },
c0f3af97
L
5377 },
5378
592a252b 5379 /* PREFIX_VEX_0FF0 */
c0f3af97 5380 {
592d1631
L
5381 { Bad_Opcode },
5382 { Bad_Opcode },
5383 { Bad_Opcode },
592a252b 5384 { MOD_TABLE (MOD_VEX_0FF0_PREFIX_3) },
c0f3af97
L
5385 },
5386
592a252b 5387 /* PREFIX_VEX_0FF1 */
c0f3af97 5388 {
592d1631
L
5389 { Bad_Opcode },
5390 { Bad_Opcode },
ec6f095a 5391 { "vpsllw", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5392 },
5393
592a252b 5394 /* PREFIX_VEX_0FF2 */
c0f3af97 5395 {
592d1631
L
5396 { Bad_Opcode },
5397 { Bad_Opcode },
ec6f095a 5398 { "vpslld", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5399 },
5400
592a252b 5401 /* PREFIX_VEX_0FF3 */
c0f3af97 5402 {
592d1631
L
5403 { Bad_Opcode },
5404 { Bad_Opcode },
ec6f095a 5405 { "vpsllq", { XM, Vex, EXxmm }, 0 },
c0f3af97
L
5406 },
5407
592a252b 5408 /* PREFIX_VEX_0FF4 */
c0f3af97 5409 {
592d1631
L
5410 { Bad_Opcode },
5411 { Bad_Opcode },
ec6f095a 5412 { "vpmuludq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5413 },
5414
592a252b 5415 /* PREFIX_VEX_0FF5 */
c0f3af97 5416 {
592d1631
L
5417 { Bad_Opcode },
5418 { Bad_Opcode },
ec6f095a 5419 { "vpmaddwd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5420 },
5421
592a252b 5422 /* PREFIX_VEX_0FF6 */
c0f3af97 5423 {
592d1631
L
5424 { Bad_Opcode },
5425 { Bad_Opcode },
ec6f095a 5426 { "vpsadbw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5427 },
5428
592a252b 5429 /* PREFIX_VEX_0FF7 */
c0f3af97 5430 {
592d1631
L
5431 { Bad_Opcode },
5432 { Bad_Opcode },
592a252b 5433 { VEX_LEN_TABLE (VEX_LEN_0FF7_P_2) },
c0f3af97
L
5434 },
5435
592a252b 5436 /* PREFIX_VEX_0FF8 */
c0f3af97 5437 {
592d1631
L
5438 { Bad_Opcode },
5439 { Bad_Opcode },
ec6f095a 5440 { "vpsubb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5441 },
5442
592a252b 5443 /* PREFIX_VEX_0FF9 */
c0f3af97 5444 {
592d1631
L
5445 { Bad_Opcode },
5446 { Bad_Opcode },
ec6f095a 5447 { "vpsubw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5448 },
5449
592a252b 5450 /* PREFIX_VEX_0FFA */
c0f3af97 5451 {
592d1631
L
5452 { Bad_Opcode },
5453 { Bad_Opcode },
ec6f095a 5454 { "vpsubd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5455 },
5456
592a252b 5457 /* PREFIX_VEX_0FFB */
c0f3af97 5458 {
592d1631
L
5459 { Bad_Opcode },
5460 { Bad_Opcode },
ec6f095a 5461 { "vpsubq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5462 },
5463
592a252b 5464 /* PREFIX_VEX_0FFC */
c0f3af97 5465 {
592d1631
L
5466 { Bad_Opcode },
5467 { Bad_Opcode },
ec6f095a 5468 { "vpaddb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5469 },
5470
592a252b 5471 /* PREFIX_VEX_0FFD */
c0f3af97 5472 {
592d1631
L
5473 { Bad_Opcode },
5474 { Bad_Opcode },
ec6f095a 5475 { "vpaddw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5476 },
5477
592a252b 5478 /* PREFIX_VEX_0FFE */
c0f3af97 5479 {
592d1631
L
5480 { Bad_Opcode },
5481 { Bad_Opcode },
ec6f095a 5482 { "vpaddd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5483 },
5484
592a252b 5485 /* PREFIX_VEX_0F3800 */
c0f3af97 5486 {
592d1631
L
5487 { Bad_Opcode },
5488 { Bad_Opcode },
ec6f095a 5489 { "vpshufb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5490 },
5491
592a252b 5492 /* PREFIX_VEX_0F3801 */
c0f3af97 5493 {
592d1631
L
5494 { Bad_Opcode },
5495 { Bad_Opcode },
ec6f095a 5496 { "vphaddw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5497 },
5498
592a252b 5499 /* PREFIX_VEX_0F3802 */
c0f3af97 5500 {
592d1631
L
5501 { Bad_Opcode },
5502 { Bad_Opcode },
ec6f095a 5503 { "vphaddd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5504 },
5505
592a252b 5506 /* PREFIX_VEX_0F3803 */
c0f3af97 5507 {
592d1631
L
5508 { Bad_Opcode },
5509 { Bad_Opcode },
ec6f095a 5510 { "vphaddsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5511 },
5512
592a252b 5513 /* PREFIX_VEX_0F3804 */
c0f3af97 5514 {
592d1631
L
5515 { Bad_Opcode },
5516 { Bad_Opcode },
ec6f095a 5517 { "vpmaddubsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5518 },
5519
592a252b 5520 /* PREFIX_VEX_0F3805 */
c0f3af97 5521 {
592d1631
L
5522 { Bad_Opcode },
5523 { Bad_Opcode },
ec6f095a 5524 { "vphsubw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5525 },
5526
592a252b 5527 /* PREFIX_VEX_0F3806 */
c0f3af97 5528 {
592d1631
L
5529 { Bad_Opcode },
5530 { Bad_Opcode },
ec6f095a 5531 { "vphsubd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5532 },
5533
592a252b 5534 /* PREFIX_VEX_0F3807 */
c0f3af97 5535 {
592d1631
L
5536 { Bad_Opcode },
5537 { Bad_Opcode },
ec6f095a 5538 { "vphsubsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5539 },
5540
592a252b 5541 /* PREFIX_VEX_0F3808 */
c0f3af97 5542 {
592d1631
L
5543 { Bad_Opcode },
5544 { Bad_Opcode },
ec6f095a 5545 { "vpsignb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5546 },
5547
592a252b 5548 /* PREFIX_VEX_0F3809 */
c0f3af97 5549 {
592d1631
L
5550 { Bad_Opcode },
5551 { Bad_Opcode },
ec6f095a 5552 { "vpsignw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5553 },
5554
592a252b 5555 /* PREFIX_VEX_0F380A */
c0f3af97 5556 {
592d1631
L
5557 { Bad_Opcode },
5558 { Bad_Opcode },
ec6f095a 5559 { "vpsignd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5560 },
5561
592a252b 5562 /* PREFIX_VEX_0F380B */
c0f3af97 5563 {
592d1631
L
5564 { Bad_Opcode },
5565 { Bad_Opcode },
ec6f095a 5566 { "vpmulhrsw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5567 },
5568
592a252b 5569 /* PREFIX_VEX_0F380C */
c0f3af97 5570 {
592d1631
L
5571 { Bad_Opcode },
5572 { Bad_Opcode },
592a252b 5573 { VEX_W_TABLE (VEX_W_0F380C_P_2) },
c0f3af97
L
5574 },
5575
592a252b 5576 /* PREFIX_VEX_0F380D */
c0f3af97 5577 {
592d1631
L
5578 { Bad_Opcode },
5579 { Bad_Opcode },
592a252b 5580 { VEX_W_TABLE (VEX_W_0F380D_P_2) },
c0f3af97
L
5581 },
5582
592a252b 5583 /* PREFIX_VEX_0F380E */
c0f3af97 5584 {
592d1631
L
5585 { Bad_Opcode },
5586 { Bad_Opcode },
592a252b 5587 { VEX_W_TABLE (VEX_W_0F380E_P_2) },
c0f3af97
L
5588 },
5589
592a252b 5590 /* PREFIX_VEX_0F380F */
c0f3af97 5591 {
592d1631
L
5592 { Bad_Opcode },
5593 { Bad_Opcode },
592a252b 5594 { VEX_W_TABLE (VEX_W_0F380F_P_2) },
c0f3af97
L
5595 },
5596
592a252b 5597 /* PREFIX_VEX_0F3813 */
c7b8aa3a
L
5598 {
5599 { Bad_Opcode },
5600 { Bad_Opcode },
bf890a93 5601 { "vcvtph2ps", { XM, EXxmmq }, 0 },
c7b8aa3a
L
5602 },
5603
6c30d220
L
5604 /* PREFIX_VEX_0F3816 */
5605 {
5606 { Bad_Opcode },
5607 { Bad_Opcode },
5608 { VEX_LEN_TABLE (VEX_LEN_0F3816_P_2) },
5609 },
5610
592a252b 5611 /* PREFIX_VEX_0F3817 */
c0f3af97 5612 {
592d1631
L
5613 { Bad_Opcode },
5614 { Bad_Opcode },
ec6f095a 5615 { "vptest", { XM, EXx }, 0 },
c0f3af97
L
5616 },
5617
592a252b 5618 /* PREFIX_VEX_0F3818 */
c0f3af97 5619 {
592d1631
L
5620 { Bad_Opcode },
5621 { Bad_Opcode },
6c30d220 5622 { VEX_W_TABLE (VEX_W_0F3818_P_2) },
c0f3af97
L
5623 },
5624
592a252b 5625 /* PREFIX_VEX_0F3819 */
c0f3af97 5626 {
592d1631
L
5627 { Bad_Opcode },
5628 { Bad_Opcode },
6c30d220 5629 { VEX_LEN_TABLE (VEX_LEN_0F3819_P_2) },
c0f3af97
L
5630 },
5631
592a252b 5632 /* PREFIX_VEX_0F381A */
c0f3af97 5633 {
592d1631
L
5634 { Bad_Opcode },
5635 { Bad_Opcode },
592a252b 5636 { MOD_TABLE (MOD_VEX_0F381A_PREFIX_2) },
c0f3af97
L
5637 },
5638
592a252b 5639 /* PREFIX_VEX_0F381C */
c0f3af97 5640 {
592d1631
L
5641 { Bad_Opcode },
5642 { Bad_Opcode },
ec6f095a 5643 { "vpabsb", { XM, EXx }, 0 },
c0f3af97
L
5644 },
5645
592a252b 5646 /* PREFIX_VEX_0F381D */
c0f3af97 5647 {
592d1631
L
5648 { Bad_Opcode },
5649 { Bad_Opcode },
ec6f095a 5650 { "vpabsw", { XM, EXx }, 0 },
c0f3af97
L
5651 },
5652
592a252b 5653 /* PREFIX_VEX_0F381E */
c0f3af97 5654 {
592d1631
L
5655 { Bad_Opcode },
5656 { Bad_Opcode },
ec6f095a 5657 { "vpabsd", { XM, EXx }, 0 },
c0f3af97
L
5658 },
5659
592a252b 5660 /* PREFIX_VEX_0F3820 */
c0f3af97 5661 {
592d1631
L
5662 { Bad_Opcode },
5663 { Bad_Opcode },
ec6f095a 5664 { "vpmovsxbw", { XM, EXxmmq }, 0 },
c0f3af97
L
5665 },
5666
592a252b 5667 /* PREFIX_VEX_0F3821 */
c0f3af97 5668 {
592d1631
L
5669 { Bad_Opcode },
5670 { Bad_Opcode },
ec6f095a 5671 { "vpmovsxbd", { XM, EXxmmqd }, 0 },
c0f3af97
L
5672 },
5673
592a252b 5674 /* PREFIX_VEX_0F3822 */
c0f3af97 5675 {
592d1631
L
5676 { Bad_Opcode },
5677 { Bad_Opcode },
ec6f095a 5678 { "vpmovsxbq", { XM, EXxmmdw }, 0 },
c0f3af97
L
5679 },
5680
592a252b 5681 /* PREFIX_VEX_0F3823 */
c0f3af97 5682 {
592d1631
L
5683 { Bad_Opcode },
5684 { Bad_Opcode },
ec6f095a 5685 { "vpmovsxwd", { XM, EXxmmq }, 0 },
c0f3af97
L
5686 },
5687
592a252b 5688 /* PREFIX_VEX_0F3824 */
c0f3af97 5689 {
592d1631
L
5690 { Bad_Opcode },
5691 { Bad_Opcode },
ec6f095a 5692 { "vpmovsxwq", { XM, EXxmmqd }, 0 },
c0f3af97
L
5693 },
5694
592a252b 5695 /* PREFIX_VEX_0F3825 */
c0f3af97 5696 {
592d1631
L
5697 { Bad_Opcode },
5698 { Bad_Opcode },
ec6f095a 5699 { "vpmovsxdq", { XM, EXxmmq }, 0 },
c0f3af97
L
5700 },
5701
592a252b 5702 /* PREFIX_VEX_0F3828 */
c0f3af97 5703 {
592d1631
L
5704 { Bad_Opcode },
5705 { Bad_Opcode },
ec6f095a 5706 { "vpmuldq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5707 },
5708
592a252b 5709 /* PREFIX_VEX_0F3829 */
c0f3af97 5710 {
592d1631
L
5711 { Bad_Opcode },
5712 { Bad_Opcode },
ec6f095a 5713 { "vpcmpeqq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5714 },
5715
592a252b 5716 /* PREFIX_VEX_0F382A */
c0f3af97 5717 {
592d1631
L
5718 { Bad_Opcode },
5719 { Bad_Opcode },
592a252b 5720 { MOD_TABLE (MOD_VEX_0F382A_PREFIX_2) },
c0f3af97
L
5721 },
5722
592a252b 5723 /* PREFIX_VEX_0F382B */
c0f3af97 5724 {
592d1631
L
5725 { Bad_Opcode },
5726 { Bad_Opcode },
ec6f095a 5727 { "vpackusdw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5728 },
5729
592a252b 5730 /* PREFIX_VEX_0F382C */
c0f3af97 5731 {
592d1631
L
5732 { Bad_Opcode },
5733 { Bad_Opcode },
592a252b 5734 { MOD_TABLE (MOD_VEX_0F382C_PREFIX_2) },
c0f3af97
L
5735 },
5736
592a252b 5737 /* PREFIX_VEX_0F382D */
c0f3af97 5738 {
592d1631
L
5739 { Bad_Opcode },
5740 { Bad_Opcode },
592a252b 5741 { MOD_TABLE (MOD_VEX_0F382D_PREFIX_2) },
c0f3af97
L
5742 },
5743
592a252b 5744 /* PREFIX_VEX_0F382E */
c0f3af97 5745 {
592d1631
L
5746 { Bad_Opcode },
5747 { Bad_Opcode },
592a252b 5748 { MOD_TABLE (MOD_VEX_0F382E_PREFIX_2) },
c0f3af97
L
5749 },
5750
592a252b 5751 /* PREFIX_VEX_0F382F */
c0f3af97 5752 {
592d1631
L
5753 { Bad_Opcode },
5754 { Bad_Opcode },
592a252b 5755 { MOD_TABLE (MOD_VEX_0F382F_PREFIX_2) },
c0f3af97
L
5756 },
5757
592a252b 5758 /* PREFIX_VEX_0F3830 */
c0f3af97 5759 {
592d1631
L
5760 { Bad_Opcode },
5761 { Bad_Opcode },
ec6f095a 5762 { "vpmovzxbw", { XM, EXxmmq }, 0 },
c0f3af97
L
5763 },
5764
592a252b 5765 /* PREFIX_VEX_0F3831 */
c0f3af97 5766 {
592d1631
L
5767 { Bad_Opcode },
5768 { Bad_Opcode },
ec6f095a 5769 { "vpmovzxbd", { XM, EXxmmqd }, 0 },
c0f3af97
L
5770 },
5771
592a252b 5772 /* PREFIX_VEX_0F3832 */
c0f3af97 5773 {
592d1631
L
5774 { Bad_Opcode },
5775 { Bad_Opcode },
ec6f095a 5776 { "vpmovzxbq", { XM, EXxmmdw }, 0 },
c0f3af97
L
5777 },
5778
592a252b 5779 /* PREFIX_VEX_0F3833 */
c0f3af97 5780 {
592d1631
L
5781 { Bad_Opcode },
5782 { Bad_Opcode },
ec6f095a 5783 { "vpmovzxwd", { XM, EXxmmq }, 0 },
c0f3af97
L
5784 },
5785
592a252b 5786 /* PREFIX_VEX_0F3834 */
c0f3af97 5787 {
592d1631
L
5788 { Bad_Opcode },
5789 { Bad_Opcode },
ec6f095a 5790 { "vpmovzxwq", { XM, EXxmmqd }, 0 },
c0f3af97
L
5791 },
5792
592a252b 5793 /* PREFIX_VEX_0F3835 */
c0f3af97 5794 {
592d1631
L
5795 { Bad_Opcode },
5796 { Bad_Opcode },
ec6f095a 5797 { "vpmovzxdq", { XM, EXxmmq }, 0 },
6c30d220
L
5798 },
5799
5800 /* PREFIX_VEX_0F3836 */
5801 {
5802 { Bad_Opcode },
5803 { Bad_Opcode },
5804 { VEX_LEN_TABLE (VEX_LEN_0F3836_P_2) },
c0f3af97
L
5805 },
5806
592a252b 5807 /* PREFIX_VEX_0F3837 */
c0f3af97 5808 {
592d1631
L
5809 { Bad_Opcode },
5810 { Bad_Opcode },
ec6f095a 5811 { "vpcmpgtq", { XM, Vex, EXx }, 0 },
c0f3af97
L
5812 },
5813
592a252b 5814 /* PREFIX_VEX_0F3838 */
c0f3af97 5815 {
592d1631
L
5816 { Bad_Opcode },
5817 { Bad_Opcode },
ec6f095a 5818 { "vpminsb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5819 },
5820
592a252b 5821 /* PREFIX_VEX_0F3839 */
c0f3af97 5822 {
592d1631
L
5823 { Bad_Opcode },
5824 { Bad_Opcode },
ec6f095a 5825 { "vpminsd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5826 },
5827
592a252b 5828 /* PREFIX_VEX_0F383A */
c0f3af97 5829 {
592d1631
L
5830 { Bad_Opcode },
5831 { Bad_Opcode },
ec6f095a 5832 { "vpminuw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5833 },
5834
592a252b 5835 /* PREFIX_VEX_0F383B */
c0f3af97 5836 {
592d1631
L
5837 { Bad_Opcode },
5838 { Bad_Opcode },
ec6f095a 5839 { "vpminud", { XM, Vex, EXx }, 0 },
c0f3af97
L
5840 },
5841
592a252b 5842 /* PREFIX_VEX_0F383C */
c0f3af97 5843 {
592d1631
L
5844 { Bad_Opcode },
5845 { Bad_Opcode },
ec6f095a 5846 { "vpmaxsb", { XM, Vex, EXx }, 0 },
c0f3af97
L
5847 },
5848
592a252b 5849 /* PREFIX_VEX_0F383D */
c0f3af97 5850 {
592d1631
L
5851 { Bad_Opcode },
5852 { Bad_Opcode },
ec6f095a 5853 { "vpmaxsd", { XM, Vex, EXx }, 0 },
c0f3af97
L
5854 },
5855
592a252b 5856 /* PREFIX_VEX_0F383E */
c0f3af97 5857 {
592d1631
L
5858 { Bad_Opcode },
5859 { Bad_Opcode },
ec6f095a 5860 { "vpmaxuw", { XM, Vex, EXx }, 0 },
c0f3af97
L
5861 },
5862
592a252b 5863 /* PREFIX_VEX_0F383F */
c0f3af97 5864 {
592d1631
L
5865 { Bad_Opcode },
5866 { Bad_Opcode },
ec6f095a 5867 { "vpmaxud", { XM, Vex, EXx }, 0 },
c0f3af97
L
5868 },
5869
592a252b 5870 /* PREFIX_VEX_0F3840 */
c0f3af97 5871 {
592d1631
L
5872 { Bad_Opcode },
5873 { Bad_Opcode },
ec6f095a 5874 { "vpmulld", { XM, Vex, EXx }, 0 },
c0f3af97
L
5875 },
5876
592a252b 5877 /* PREFIX_VEX_0F3841 */
c0f3af97 5878 {
592d1631
L
5879 { Bad_Opcode },
5880 { Bad_Opcode },
592a252b 5881 { VEX_LEN_TABLE (VEX_LEN_0F3841_P_2) },
c0f3af97
L
5882 },
5883
6c30d220
L
5884 /* PREFIX_VEX_0F3845 */
5885 {
5886 { Bad_Opcode },
5887 { Bad_Opcode },
bf890a93 5888 { "vpsrlv%LW", { XM, Vex, EXx }, 0 },
6c30d220
L
5889 },
5890
5891 /* PREFIX_VEX_0F3846 */
5892 {
5893 { Bad_Opcode },
5894 { Bad_Opcode },
5895 { VEX_W_TABLE (VEX_W_0F3846_P_2) },
5896 },
5897
5898 /* PREFIX_VEX_0F3847 */
5899 {
5900 { Bad_Opcode },
5901 { Bad_Opcode },
bf890a93 5902 { "vpsllv%LW", { XM, Vex, EXx }, 0 },
6c30d220
L
5903 },
5904
5905 /* PREFIX_VEX_0F3858 */
5906 {
5907 { Bad_Opcode },
5908 { Bad_Opcode },
5909 { VEX_W_TABLE (VEX_W_0F3858_P_2) },
5910 },
5911
5912 /* PREFIX_VEX_0F3859 */
5913 {
5914 { Bad_Opcode },
5915 { Bad_Opcode },
5916 { VEX_W_TABLE (VEX_W_0F3859_P_2) },
5917 },
5918
5919 /* PREFIX_VEX_0F385A */
5920 {
5921 { Bad_Opcode },
5922 { Bad_Opcode },
5923 { MOD_TABLE (MOD_VEX_0F385A_PREFIX_2) },
5924 },
5925
5926 /* PREFIX_VEX_0F3878 */
5927 {
5928 { Bad_Opcode },
5929 { Bad_Opcode },
5930 { VEX_W_TABLE (VEX_W_0F3878_P_2) },
5931 },
5932
5933 /* PREFIX_VEX_0F3879 */
5934 {
5935 { Bad_Opcode },
5936 { Bad_Opcode },
5937 { VEX_W_TABLE (VEX_W_0F3879_P_2) },
5938 },
5939
5940 /* PREFIX_VEX_0F388C */
5941 {
5942 { Bad_Opcode },
5943 { Bad_Opcode },
f7002f42 5944 { MOD_TABLE (MOD_VEX_0F388C_PREFIX_2) },
6c30d220
L
5945 },
5946
5947 /* PREFIX_VEX_0F388E */
5948 {
5949 { Bad_Opcode },
5950 { Bad_Opcode },
f7002f42 5951 { MOD_TABLE (MOD_VEX_0F388E_PREFIX_2) },
6c30d220
L
5952 },
5953
5954 /* PREFIX_VEX_0F3890 */
5955 {
5956 { Bad_Opcode },
5957 { Bad_Opcode },
bf890a93 5958 { "vpgatherd%LW", { XM, MVexVSIBDWpX, Vex }, 0 },
6c30d220
L
5959 },
5960
5961 /* PREFIX_VEX_0F3891 */
5962 {
5963 { Bad_Opcode },
5964 { Bad_Opcode },
bf890a93 5965 { "vpgatherq%LW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ }, 0 },
6c30d220
L
5966 },
5967
5968 /* PREFIX_VEX_0F3892 */
5969 {
5970 { Bad_Opcode },
5971 { Bad_Opcode },
bf890a93 5972 { "vgatherdp%XW", { XM, MVexVSIBDWpX, Vex }, 0 },
6c30d220
L
5973 },
5974
5975 /* PREFIX_VEX_0F3893 */
5976 {
5977 { Bad_Opcode },
5978 { Bad_Opcode },
bf890a93 5979 { "vgatherqp%XW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ }, 0 },
6c30d220
L
5980 },
5981
592a252b 5982 /* PREFIX_VEX_0F3896 */
a5ff0eb2 5983 {
592d1631
L
5984 { Bad_Opcode },
5985 { Bad_Opcode },
bf890a93 5986 { "vfmaddsub132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
5987 },
5988
592a252b 5989 /* PREFIX_VEX_0F3897 */
a5ff0eb2 5990 {
592d1631
L
5991 { Bad_Opcode },
5992 { Bad_Opcode },
bf890a93 5993 { "vfmsubadd132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
5994 },
5995
592a252b 5996 /* PREFIX_VEX_0F3898 */
a5ff0eb2 5997 {
592d1631
L
5998 { Bad_Opcode },
5999 { Bad_Opcode },
bf890a93 6000 { "vfmadd132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6001 },
6002
592a252b 6003 /* PREFIX_VEX_0F3899 */
a5ff0eb2 6004 {
592d1631
L
6005 { Bad_Opcode },
6006 { Bad_Opcode },
bf890a93 6007 { "vfmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
a5ff0eb2
L
6008 },
6009
592a252b 6010 /* PREFIX_VEX_0F389A */
a5ff0eb2 6011 {
592d1631
L
6012 { Bad_Opcode },
6013 { Bad_Opcode },
bf890a93 6014 { "vfmsub132p%XW", { XM, Vex, EXx }, 0 },
a5ff0eb2
L
6015 },
6016
592a252b 6017 /* PREFIX_VEX_0F389B */
c0f3af97 6018 {
592d1631
L
6019 { Bad_Opcode },
6020 { Bad_Opcode },
bf890a93 6021 { "vfmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6022 },
6023
592a252b 6024 /* PREFIX_VEX_0F389C */
c0f3af97 6025 {
592d1631
L
6026 { Bad_Opcode },
6027 { Bad_Opcode },
bf890a93 6028 { "vfnmadd132p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6029 },
6030
592a252b 6031 /* PREFIX_VEX_0F389D */
c0f3af97 6032 {
592d1631
L
6033 { Bad_Opcode },
6034 { Bad_Opcode },
bf890a93 6035 { "vfnmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6036 },
6037
592a252b 6038 /* PREFIX_VEX_0F389E */
c0f3af97 6039 {
592d1631
L
6040 { Bad_Opcode },
6041 { Bad_Opcode },
bf890a93 6042 { "vfnmsub132p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6043 },
6044
592a252b 6045 /* PREFIX_VEX_0F389F */
c0f3af97 6046 {
592d1631
L
6047 { Bad_Opcode },
6048 { Bad_Opcode },
bf890a93 6049 { "vfnmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6050 },
6051
592a252b 6052 /* PREFIX_VEX_0F38A6 */
c0f3af97 6053 {
592d1631
L
6054 { Bad_Opcode },
6055 { Bad_Opcode },
bf890a93 6056 { "vfmaddsub213p%XW", { XM, Vex, EXx }, 0 },
592d1631 6057 { Bad_Opcode },
c0f3af97
L
6058 },
6059
592a252b 6060 /* PREFIX_VEX_0F38A7 */
c0f3af97 6061 {
592d1631
L
6062 { Bad_Opcode },
6063 { Bad_Opcode },
bf890a93 6064 { "vfmsubadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6065 },
6066
592a252b 6067 /* PREFIX_VEX_0F38A8 */
c0f3af97 6068 {
592d1631
L
6069 { Bad_Opcode },
6070 { Bad_Opcode },
bf890a93 6071 { "vfmadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6072 },
6073
592a252b 6074 /* PREFIX_VEX_0F38A9 */
c0f3af97 6075 {
592d1631
L
6076 { Bad_Opcode },
6077 { Bad_Opcode },
bf890a93 6078 { "vfmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6079 },
6080
592a252b 6081 /* PREFIX_VEX_0F38AA */
c0f3af97 6082 {
592d1631
L
6083 { Bad_Opcode },
6084 { Bad_Opcode },
bf890a93 6085 { "vfmsub213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6086 },
6087
592a252b 6088 /* PREFIX_VEX_0F38AB */
c0f3af97 6089 {
592d1631
L
6090 { Bad_Opcode },
6091 { Bad_Opcode },
bf890a93 6092 { "vfmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6093 },
6094
592a252b 6095 /* PREFIX_VEX_0F38AC */
c0f3af97 6096 {
592d1631
L
6097 { Bad_Opcode },
6098 { Bad_Opcode },
bf890a93 6099 { "vfnmadd213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6100 },
6101
592a252b 6102 /* PREFIX_VEX_0F38AD */
c0f3af97 6103 {
592d1631
L
6104 { Bad_Opcode },
6105 { Bad_Opcode },
bf890a93 6106 { "vfnmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6107 },
6108
592a252b 6109 /* PREFIX_VEX_0F38AE */
c0f3af97 6110 {
592d1631
L
6111 { Bad_Opcode },
6112 { Bad_Opcode },
bf890a93 6113 { "vfnmsub213p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6114 },
6115
592a252b 6116 /* PREFIX_VEX_0F38AF */
c0f3af97 6117 {
592d1631
L
6118 { Bad_Opcode },
6119 { Bad_Opcode },
bf890a93 6120 { "vfnmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6121 },
6122
592a252b 6123 /* PREFIX_VEX_0F38B6 */
c0f3af97 6124 {
592d1631
L
6125 { Bad_Opcode },
6126 { Bad_Opcode },
bf890a93 6127 { "vfmaddsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6128 },
6129
592a252b 6130 /* PREFIX_VEX_0F38B7 */
c0f3af97 6131 {
592d1631
L
6132 { Bad_Opcode },
6133 { Bad_Opcode },
bf890a93 6134 { "vfmsubadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6135 },
6136
592a252b 6137 /* PREFIX_VEX_0F38B8 */
c0f3af97 6138 {
592d1631
L
6139 { Bad_Opcode },
6140 { Bad_Opcode },
bf890a93 6141 { "vfmadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6142 },
6143
592a252b 6144 /* PREFIX_VEX_0F38B9 */
c0f3af97 6145 {
592d1631
L
6146 { Bad_Opcode },
6147 { Bad_Opcode },
bf890a93 6148 { "vfmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6149 },
6150
592a252b 6151 /* PREFIX_VEX_0F38BA */
c0f3af97 6152 {
592d1631
L
6153 { Bad_Opcode },
6154 { Bad_Opcode },
bf890a93 6155 { "vfmsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6156 },
6157
592a252b 6158 /* PREFIX_VEX_0F38BB */
c0f3af97 6159 {
592d1631
L
6160 { Bad_Opcode },
6161 { Bad_Opcode },
bf890a93 6162 { "vfmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6163 },
6164
592a252b 6165 /* PREFIX_VEX_0F38BC */
c0f3af97 6166 {
592d1631
L
6167 { Bad_Opcode },
6168 { Bad_Opcode },
bf890a93 6169 { "vfnmadd231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6170 },
6171
592a252b 6172 /* PREFIX_VEX_0F38BD */
c0f3af97 6173 {
592d1631
L
6174 { Bad_Opcode },
6175 { Bad_Opcode },
bf890a93 6176 { "vfnmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6177 },
6178
592a252b 6179 /* PREFIX_VEX_0F38BE */
c0f3af97 6180 {
592d1631
L
6181 { Bad_Opcode },
6182 { Bad_Opcode },
bf890a93 6183 { "vfnmsub231p%XW", { XM, Vex, EXx }, 0 },
c0f3af97
L
6184 },
6185
592a252b 6186 /* PREFIX_VEX_0F38BF */
c0f3af97 6187 {
592d1631
L
6188 { Bad_Opcode },
6189 { Bad_Opcode },
bf890a93 6190 { "vfnmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar }, 0 },
c0f3af97
L
6191 },
6192
48521003
IT
6193 /* PREFIX_VEX_0F38CF */
6194 {
6195 { Bad_Opcode },
6196 { Bad_Opcode },
6197 { VEX_W_TABLE (VEX_W_0F38CF_P_2) },
6198 },
6199
592a252b 6200 /* PREFIX_VEX_0F38DB */
c0f3af97 6201 {
592d1631
L
6202 { Bad_Opcode },
6203 { Bad_Opcode },
592a252b 6204 { VEX_LEN_TABLE (VEX_LEN_0F38DB_P_2) },
c0f3af97
L
6205 },
6206
592a252b 6207 /* PREFIX_VEX_0F38DC */
c0f3af97 6208 {
592d1631
L
6209 { Bad_Opcode },
6210 { Bad_Opcode },
8dcf1fad 6211 { "vaesenc", { XM, Vex, EXx }, 0 },
c0f3af97
L
6212 },
6213
592a252b 6214 /* PREFIX_VEX_0F38DD */
c0f3af97 6215 {
592d1631
L
6216 { Bad_Opcode },
6217 { Bad_Opcode },
8dcf1fad 6218 { "vaesenclast", { XM, Vex, EXx }, 0 },
c0f3af97
L
6219 },
6220
592a252b 6221 /* PREFIX_VEX_0F38DE */
c0f3af97 6222 {
592d1631
L
6223 { Bad_Opcode },
6224 { Bad_Opcode },
8dcf1fad 6225 { "vaesdec", { XM, Vex, EXx }, 0 },
c0f3af97
L
6226 },
6227
592a252b 6228 /* PREFIX_VEX_0F38DF */
c0f3af97 6229 {
592d1631
L
6230 { Bad_Opcode },
6231 { Bad_Opcode },
8dcf1fad 6232 { "vaesdeclast", { XM, Vex, EXx }, 0 },
c0f3af97
L
6233 },
6234
f12dc422
L
6235 /* PREFIX_VEX_0F38F2 */
6236 {
6237 { VEX_LEN_TABLE (VEX_LEN_0F38F2_P_0) },
6238 },
6239
6240 /* PREFIX_VEX_0F38F3_REG_1 */
6241 {
6242 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_1_P_0) },
6243 },
6244
6245 /* PREFIX_VEX_0F38F3_REG_2 */
6246 {
6247 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_2_P_0) },
6248 },
6249
6250 /* PREFIX_VEX_0F38F3_REG_3 */
6251 {
6252 { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_3_P_0) },
6253 },
6254
6c30d220
L
6255 /* PREFIX_VEX_0F38F5 */
6256 {
6257 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_0) },
6258 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_1) },
6259 { Bad_Opcode },
6260 { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_3) },
6261 },
6262
6263 /* PREFIX_VEX_0F38F6 */
6264 {
6265 { Bad_Opcode },
6266 { Bad_Opcode },
6267 { Bad_Opcode },
6268 { VEX_LEN_TABLE (VEX_LEN_0F38F6_P_3) },
6269 },
6270
f12dc422
L
6271 /* PREFIX_VEX_0F38F7 */
6272 {
6273 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_0) },
6c30d220
L
6274 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_1) },
6275 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_2) },
6276 { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_3) },
6277 },
6278
6279 /* PREFIX_VEX_0F3A00 */
6280 {
6281 { Bad_Opcode },
6282 { Bad_Opcode },
6283 { VEX_LEN_TABLE (VEX_LEN_0F3A00_P_2) },
6284 },
6285
6286 /* PREFIX_VEX_0F3A01 */
6287 {
6288 { Bad_Opcode },
6289 { Bad_Opcode },
6290 { VEX_LEN_TABLE (VEX_LEN_0F3A01_P_2) },
6291 },
6292
6293 /* PREFIX_VEX_0F3A02 */
6294 {
6295 { Bad_Opcode },
6296 { Bad_Opcode },
6297 { VEX_W_TABLE (VEX_W_0F3A02_P_2) },
f12dc422
L
6298 },
6299
592a252b 6300 /* PREFIX_VEX_0F3A04 */
c0f3af97 6301 {
592d1631
L
6302 { Bad_Opcode },
6303 { Bad_Opcode },
592a252b 6304 { VEX_W_TABLE (VEX_W_0F3A04_P_2) },
c0f3af97
L
6305 },
6306
592a252b 6307 /* PREFIX_VEX_0F3A05 */
c0f3af97 6308 {
592d1631
L
6309 { Bad_Opcode },
6310 { Bad_Opcode },
592a252b 6311 { VEX_W_TABLE (VEX_W_0F3A05_P_2) },
c0f3af97
L
6312 },
6313
592a252b 6314 /* PREFIX_VEX_0F3A06 */
c0f3af97 6315 {
592d1631
L
6316 { Bad_Opcode },
6317 { Bad_Opcode },
592a252b 6318 { VEX_LEN_TABLE (VEX_LEN_0F3A06_P_2) },
c0f3af97
L
6319 },
6320
592a252b 6321 /* PREFIX_VEX_0F3A08 */
c0f3af97 6322 {
592d1631
L
6323 { Bad_Opcode },
6324 { Bad_Opcode },
ec6f095a 6325 { "vroundps", { XM, EXx, Ib }, 0 },
c0f3af97
L
6326 },
6327
592a252b 6328 /* PREFIX_VEX_0F3A09 */
c0f3af97 6329 {
592d1631
L
6330 { Bad_Opcode },
6331 { Bad_Opcode },
ec6f095a 6332 { "vroundpd", { XM, EXx, Ib }, 0 },
c0f3af97
L
6333 },
6334
592a252b 6335 /* PREFIX_VEX_0F3A0A */
c0f3af97 6336 {
592d1631
L
6337 { Bad_Opcode },
6338 { Bad_Opcode },
ec6f095a 6339 { "vroundss", { XMScalar, VexScalar, EXdScalar, Ib }, 0 },
0bfee649
L
6340 },
6341
592a252b 6342 /* PREFIX_VEX_0F3A0B */
0bfee649 6343 {
592d1631
L
6344 { Bad_Opcode },
6345 { Bad_Opcode },
ec6f095a 6346 { "vroundsd", { XMScalar, VexScalar, EXqScalar, Ib }, 0 },
0bfee649
L
6347 },
6348
592a252b 6349 /* PREFIX_VEX_0F3A0C */
0bfee649 6350 {
592d1631
L
6351 { Bad_Opcode },
6352 { Bad_Opcode },
ec6f095a 6353 { "vblendps", { XM, Vex, EXx, Ib }, 0 },
0bfee649
L
6354 },
6355
592a252b 6356 /* PREFIX_VEX_0F3A0D */
0bfee649 6357 {
592d1631
L
6358 { Bad_Opcode },
6359 { Bad_Opcode },
ec6f095a 6360 { "vblendpd", { XM, Vex, EXx, Ib }, 0 },
c0f3af97
L
6361 },
6362
592a252b 6363 /* PREFIX_VEX_0F3A0E */
0bfee649 6364 {
592d1631
L
6365 { Bad_Opcode },
6366 { Bad_Opcode },
ec6f095a 6367 { "vpblendw", { XM, Vex, EXx, Ib }, 0 },
0bfee649
L
6368 },
6369
592a252b 6370 /* PREFIX_VEX_0F3A0F */
0bfee649 6371 {
592d1631
L
6372 { Bad_Opcode },
6373 { Bad_Opcode },
ec6f095a 6374 { "vpalignr", { XM, Vex, EXx, Ib }, 0 },
0bfee649
L
6375 },
6376
592a252b 6377 /* PREFIX_VEX_0F3A14 */
0bfee649 6378 {
592d1631
L
6379 { Bad_Opcode },
6380 { Bad_Opcode },
592a252b 6381 { VEX_LEN_TABLE (VEX_LEN_0F3A14_P_2) },
0bfee649
L
6382 },
6383
592a252b 6384 /* PREFIX_VEX_0F3A15 */
0bfee649 6385 {
592d1631
L
6386 { Bad_Opcode },
6387 { Bad_Opcode },
592a252b 6388 { VEX_LEN_TABLE (VEX_LEN_0F3A15_P_2) },
0bfee649
L
6389 },
6390
592a252b 6391 /* PREFIX_VEX_0F3A16 */
c0f3af97 6392 {
592d1631
L
6393 { Bad_Opcode },
6394 { Bad_Opcode },
592a252b 6395 { VEX_LEN_TABLE (VEX_LEN_0F3A16_P_2) },
c0f3af97
L
6396 },
6397
592a252b 6398 /* PREFIX_VEX_0F3A17 */
c0f3af97 6399 {
592d1631
L
6400 { Bad_Opcode },
6401 { Bad_Opcode },
592a252b 6402 { VEX_LEN_TABLE (VEX_LEN_0F3A17_P_2) },
c0f3af97
L
6403 },
6404
592a252b 6405 /* PREFIX_VEX_0F3A18 */
c0f3af97 6406 {
592d1631
L
6407 { Bad_Opcode },
6408 { Bad_Opcode },
592a252b 6409 { VEX_LEN_TABLE (VEX_LEN_0F3A18_P_2) },
c0f3af97
L
6410 },
6411
592a252b 6412 /* PREFIX_VEX_0F3A19 */
c0f3af97 6413 {
592d1631
L
6414 { Bad_Opcode },
6415 { Bad_Opcode },
592a252b 6416 { VEX_LEN_TABLE (VEX_LEN_0F3A19_P_2) },
c0f3af97
L
6417 },
6418
592a252b 6419 /* PREFIX_VEX_0F3A1D */
c7b8aa3a
L
6420 {
6421 { Bad_Opcode },
6422 { Bad_Opcode },
bf890a93 6423 { "vcvtps2ph", { EXxmmq, XM, Ib }, 0 },
c7b8aa3a
L
6424 },
6425
592a252b 6426 /* PREFIX_VEX_0F3A20 */
c0f3af97 6427 {
592d1631
L
6428 { Bad_Opcode },
6429 { Bad_Opcode },
592a252b 6430 { VEX_LEN_TABLE (VEX_LEN_0F3A20_P_2) },
c0f3af97
L
6431 },
6432
592a252b 6433 /* PREFIX_VEX_0F3A21 */
c0f3af97 6434 {
592d1631
L
6435 { Bad_Opcode },
6436 { Bad_Opcode },
592a252b 6437 { VEX_LEN_TABLE (VEX_LEN_0F3A21_P_2) },
c0f3af97
L
6438 },
6439
592a252b 6440 /* PREFIX_VEX_0F3A22 */
0bfee649 6441 {
592d1631
L
6442 { Bad_Opcode },
6443 { Bad_Opcode },
592a252b 6444 { VEX_LEN_TABLE (VEX_LEN_0F3A22_P_2) },
0bfee649
L
6445 },
6446
43234a1e
L
6447 /* PREFIX_VEX_0F3A30 */
6448 {
6449 { Bad_Opcode },
6450 { Bad_Opcode },
6451 { VEX_LEN_TABLE (VEX_LEN_0F3A30_P_2) },
6452 },
6453
1ba585e8
IT
6454 /* PREFIX_VEX_0F3A31 */
6455 {
6456 { Bad_Opcode },
6457 { Bad_Opcode },
6458 { VEX_LEN_TABLE (VEX_LEN_0F3A31_P_2) },
6459 },
6460
43234a1e
L
6461 /* PREFIX_VEX_0F3A32 */
6462 {
6463 { Bad_Opcode },
6464 { Bad_Opcode },
6465 { VEX_LEN_TABLE (VEX_LEN_0F3A32_P_2) },
6466 },
6467
1ba585e8
IT
6468 /* PREFIX_VEX_0F3A33 */
6469 {
6470 { Bad_Opcode },
6471 { Bad_Opcode },
6472 { VEX_LEN_TABLE (VEX_LEN_0F3A33_P_2) },
6473 },
6474
6c30d220
L
6475 /* PREFIX_VEX_0F3A38 */
6476 {
6477 { Bad_Opcode },
6478 { Bad_Opcode },
6479 { VEX_LEN_TABLE (VEX_LEN_0F3A38_P_2) },
6480 },
6481
6482 /* PREFIX_VEX_0F3A39 */
6483 {
6484 { Bad_Opcode },
6485 { Bad_Opcode },
6486 { VEX_LEN_TABLE (VEX_LEN_0F3A39_P_2) },
6487 },
6488
592a252b 6489 /* PREFIX_VEX_0F3A40 */
c0f3af97 6490 {
592d1631
L
6491 { Bad_Opcode },
6492 { Bad_Opcode },
ec6f095a 6493 { "vdpps", { XM, Vex, EXx, Ib }, 0 },
c0f3af97
L
6494 },
6495
592a252b 6496 /* PREFIX_VEX_0F3A41 */
c0f3af97 6497 {
592d1631
L
6498 { Bad_Opcode },
6499 { Bad_Opcode },
592a252b 6500 { VEX_LEN_TABLE (VEX_LEN_0F3A41_P_2) },
c0f3af97
L
6501 },
6502
592a252b 6503 /* PREFIX_VEX_0F3A42 */
c0f3af97 6504 {
592d1631
L
6505 { Bad_Opcode },
6506 { Bad_Opcode },
ec6f095a 6507 { "vmpsadbw", { XM, Vex, EXx, Ib }, 0 },
c0f3af97
L
6508 },
6509
592a252b 6510 /* PREFIX_VEX_0F3A44 */
ce2f5b3c 6511 {
592d1631
L
6512 { Bad_Opcode },
6513 { Bad_Opcode },
ff1982d5 6514 { "vpclmulqdq", { XM, Vex, EXx, PCLMUL }, 0 },
ce2f5b3c
L
6515 },
6516
6c30d220
L
6517 /* PREFIX_VEX_0F3A46 */
6518 {
6519 { Bad_Opcode },
6520 { Bad_Opcode },
6521 { VEX_LEN_TABLE (VEX_LEN_0F3A46_P_2) },
6522 },
6523
592a252b 6524 /* PREFIX_VEX_0F3A48 */
a683cc34
SP
6525 {
6526 { Bad_Opcode },
6527 { Bad_Opcode },
592a252b 6528 { VEX_W_TABLE (VEX_W_0F3A48_P_2) },
a683cc34
SP
6529 },
6530
592a252b 6531 /* PREFIX_VEX_0F3A49 */
a683cc34
SP
6532 {
6533 { Bad_Opcode },
6534 { Bad_Opcode },
592a252b 6535 { VEX_W_TABLE (VEX_W_0F3A49_P_2) },
a683cc34
SP
6536 },
6537
592a252b 6538 /* PREFIX_VEX_0F3A4A */
c0f3af97 6539 {
592d1631
L
6540 { Bad_Opcode },
6541 { Bad_Opcode },
592a252b 6542 { VEX_W_TABLE (VEX_W_0F3A4A_P_2) },
c0f3af97
L
6543 },
6544
592a252b 6545 /* PREFIX_VEX_0F3A4B */
c0f3af97 6546 {
592d1631
L
6547 { Bad_Opcode },
6548 { Bad_Opcode },
592a252b 6549 { VEX_W_TABLE (VEX_W_0F3A4B_P_2) },
c0f3af97
L
6550 },
6551
592a252b 6552 /* PREFIX_VEX_0F3A4C */
c0f3af97 6553 {
592d1631
L
6554 { Bad_Opcode },
6555 { Bad_Opcode },
6c30d220 6556 { VEX_W_TABLE (VEX_W_0F3A4C_P_2) },
c0f3af97
L
6557 },
6558
592a252b 6559 /* PREFIX_VEX_0F3A5C */
922d8de8 6560 {
592d1631
L
6561 { Bad_Opcode },
6562 { Bad_Opcode },
3a2430e0 6563 { "vfmaddsubps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6564 },
6565
592a252b 6566 /* PREFIX_VEX_0F3A5D */
922d8de8 6567 {
592d1631
L
6568 { Bad_Opcode },
6569 { Bad_Opcode },
3a2430e0 6570 { "vfmaddsubpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6571 },
6572
592a252b 6573 /* PREFIX_VEX_0F3A5E */
922d8de8 6574 {
592d1631
L
6575 { Bad_Opcode },
6576 { Bad_Opcode },
3a2430e0 6577 { "vfmsubaddps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6578 },
6579
592a252b 6580 /* PREFIX_VEX_0F3A5F */
922d8de8 6581 {
592d1631
L
6582 { Bad_Opcode },
6583 { Bad_Opcode },
3a2430e0 6584 { "vfmsubaddpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6585 },
6586
592a252b 6587 /* PREFIX_VEX_0F3A60 */
c0f3af97 6588 {
592d1631
L
6589 { Bad_Opcode },
6590 { Bad_Opcode },
592a252b 6591 { VEX_LEN_TABLE (VEX_LEN_0F3A60_P_2) },
592d1631 6592 { Bad_Opcode },
c0f3af97
L
6593 },
6594
592a252b 6595 /* PREFIX_VEX_0F3A61 */
c0f3af97 6596 {
592d1631
L
6597 { Bad_Opcode },
6598 { Bad_Opcode },
592a252b 6599 { VEX_LEN_TABLE (VEX_LEN_0F3A61_P_2) },
c0f3af97
L
6600 },
6601
592a252b 6602 /* PREFIX_VEX_0F3A62 */
c0f3af97 6603 {
592d1631
L
6604 { Bad_Opcode },
6605 { Bad_Opcode },
592a252b 6606 { VEX_LEN_TABLE (VEX_LEN_0F3A62_P_2) },
c0f3af97
L
6607 },
6608
592a252b 6609 /* PREFIX_VEX_0F3A63 */
c0f3af97 6610 {
592d1631
L
6611 { Bad_Opcode },
6612 { Bad_Opcode },
592a252b 6613 { VEX_LEN_TABLE (VEX_LEN_0F3A63_P_2) },
c0f3af97 6614 },
a5ff0eb2 6615
592a252b 6616 /* PREFIX_VEX_0F3A68 */
922d8de8 6617 {
592d1631
L
6618 { Bad_Opcode },
6619 { Bad_Opcode },
3a2430e0 6620 { "vfmaddps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6621 },
6622
592a252b 6623 /* PREFIX_VEX_0F3A69 */
922d8de8 6624 {
592d1631
L
6625 { Bad_Opcode },
6626 { Bad_Opcode },
3a2430e0 6627 { "vfmaddpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6628 },
6629
592a252b 6630 /* PREFIX_VEX_0F3A6A */
922d8de8 6631 {
592d1631
L
6632 { Bad_Opcode },
6633 { Bad_Opcode },
592a252b 6634 { VEX_LEN_TABLE (VEX_LEN_0F3A6A_P_2) },
922d8de8
DR
6635 },
6636
592a252b 6637 /* PREFIX_VEX_0F3A6B */
922d8de8 6638 {
592d1631
L
6639 { Bad_Opcode },
6640 { Bad_Opcode },
592a252b 6641 { VEX_LEN_TABLE (VEX_LEN_0F3A6B_P_2) },
922d8de8
DR
6642 },
6643
592a252b 6644 /* PREFIX_VEX_0F3A6C */
922d8de8 6645 {
592d1631
L
6646 { Bad_Opcode },
6647 { Bad_Opcode },
3a2430e0 6648 { "vfmsubps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6649 },
6650
592a252b 6651 /* PREFIX_VEX_0F3A6D */
922d8de8 6652 {
592d1631
L
6653 { Bad_Opcode },
6654 { Bad_Opcode },
3a2430e0 6655 { "vfmsubpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6656 },
6657
592a252b 6658 /* PREFIX_VEX_0F3A6E */
922d8de8 6659 {
592d1631
L
6660 { Bad_Opcode },
6661 { Bad_Opcode },
592a252b 6662 { VEX_LEN_TABLE (VEX_LEN_0F3A6E_P_2) },
922d8de8
DR
6663 },
6664
592a252b 6665 /* PREFIX_VEX_0F3A6F */
922d8de8 6666 {
592d1631
L
6667 { Bad_Opcode },
6668 { Bad_Opcode },
592a252b 6669 { VEX_LEN_TABLE (VEX_LEN_0F3A6F_P_2) },
922d8de8
DR
6670 },
6671
592a252b 6672 /* PREFIX_VEX_0F3A78 */
922d8de8 6673 {
592d1631
L
6674 { Bad_Opcode },
6675 { Bad_Opcode },
3a2430e0 6676 { "vfnmaddps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6677 },
6678
592a252b 6679 /* PREFIX_VEX_0F3A79 */
922d8de8 6680 {
592d1631
L
6681 { Bad_Opcode },
6682 { Bad_Opcode },
3a2430e0 6683 { "vfnmaddpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6684 },
6685
592a252b 6686 /* PREFIX_VEX_0F3A7A */
922d8de8 6687 {
592d1631
L
6688 { Bad_Opcode },
6689 { Bad_Opcode },
592a252b 6690 { VEX_LEN_TABLE (VEX_LEN_0F3A7A_P_2) },
922d8de8
DR
6691 },
6692
592a252b 6693 /* PREFIX_VEX_0F3A7B */
922d8de8 6694 {
592d1631
L
6695 { Bad_Opcode },
6696 { Bad_Opcode },
592a252b 6697 { VEX_LEN_TABLE (VEX_LEN_0F3A7B_P_2) },
922d8de8
DR
6698 },
6699
592a252b 6700 /* PREFIX_VEX_0F3A7C */
922d8de8 6701 {
592d1631
L
6702 { Bad_Opcode },
6703 { Bad_Opcode },
3a2430e0 6704 { "vfnmsubps", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
592d1631 6705 { Bad_Opcode },
922d8de8
DR
6706 },
6707
592a252b 6708 /* PREFIX_VEX_0F3A7D */
922d8de8 6709 {
592d1631
L
6710 { Bad_Opcode },
6711 { Bad_Opcode },
3a2430e0 6712 { "vfnmsubpd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
922d8de8
DR
6713 },
6714
592a252b 6715 /* PREFIX_VEX_0F3A7E */
922d8de8 6716 {
592d1631
L
6717 { Bad_Opcode },
6718 { Bad_Opcode },
592a252b 6719 { VEX_LEN_TABLE (VEX_LEN_0F3A7E_P_2) },
922d8de8
DR
6720 },
6721
592a252b 6722 /* PREFIX_VEX_0F3A7F */
922d8de8 6723 {
592d1631
L
6724 { Bad_Opcode },
6725 { Bad_Opcode },
592a252b 6726 { VEX_LEN_TABLE (VEX_LEN_0F3A7F_P_2) },
922d8de8
DR
6727 },
6728
48521003
IT
6729 /* PREFIX_VEX_0F3ACE */
6730 {
6731 { Bad_Opcode },
6732 { Bad_Opcode },
6733 { VEX_W_TABLE (VEX_W_0F3ACE_P_2) },
6734 },
6735
6736 /* PREFIX_VEX_0F3ACF */
6737 {
6738 { Bad_Opcode },
6739 { Bad_Opcode },
6740 { VEX_W_TABLE (VEX_W_0F3ACF_P_2) },
6741 },
6742
592a252b 6743 /* PREFIX_VEX_0F3ADF */
a5ff0eb2 6744 {
592d1631
L
6745 { Bad_Opcode },
6746 { Bad_Opcode },
592a252b 6747 { VEX_LEN_TABLE (VEX_LEN_0F3ADF_P_2) },
a5ff0eb2 6748 },
6c30d220
L
6749
6750 /* PREFIX_VEX_0F3AF0 */
6751 {
6752 { Bad_Opcode },
6753 { Bad_Opcode },
6754 { Bad_Opcode },
6755 { VEX_LEN_TABLE (VEX_LEN_0F3AF0_P_3) },
6756 },
43234a1e
L
6757
6758#define NEED_PREFIX_TABLE
6759#include "i386-dis-evex.h"
6760#undef NEED_PREFIX_TABLE
c0f3af97
L
6761};
6762
6763static const struct dis386 x86_64_table[][2] = {
6764 /* X86_64_06 */
6765 {
bf890a93 6766 { "pushP", { es }, 0 },
c0f3af97
L
6767 },
6768
6769 /* X86_64_07 */
6770 {
bf890a93 6771 { "popP", { es }, 0 },
c0f3af97
L
6772 },
6773
6774 /* X86_64_0D */
6775 {
bf890a93 6776 { "pushP", { cs }, 0 },
c0f3af97
L
6777 },
6778
6779 /* X86_64_16 */
6780 {
bf890a93 6781 { "pushP", { ss }, 0 },
c0f3af97
L
6782 },
6783
6784 /* X86_64_17 */
6785 {
bf890a93 6786 { "popP", { ss }, 0 },
c0f3af97
L
6787 },
6788
6789 /* X86_64_1E */
6790 {
bf890a93 6791 { "pushP", { ds }, 0 },
c0f3af97
L
6792 },
6793
6794 /* X86_64_1F */
6795 {
bf890a93 6796 { "popP", { ds }, 0 },
c0f3af97
L
6797 },
6798
6799 /* X86_64_27 */
6800 {
bf890a93 6801 { "daa", { XX }, 0 },
c0f3af97
L
6802 },
6803
6804 /* X86_64_2F */
6805 {
bf890a93 6806 { "das", { XX }, 0 },
c0f3af97
L
6807 },
6808
6809 /* X86_64_37 */
6810 {
bf890a93 6811 { "aaa", { XX }, 0 },
c0f3af97
L
6812 },
6813
6814 /* X86_64_3F */
6815 {
bf890a93 6816 { "aas", { XX }, 0 },
c0f3af97
L
6817 },
6818
6819 /* X86_64_60 */
6820 {
bf890a93 6821 { "pushaP", { XX }, 0 },
c0f3af97
L
6822 },
6823
6824 /* X86_64_61 */
6825 {
bf890a93 6826 { "popaP", { XX }, 0 },
c0f3af97
L
6827 },
6828
6829 /* X86_64_62 */
6830 {
6831 { MOD_TABLE (MOD_62_32BIT) },
43234a1e 6832 { EVEX_TABLE (EVEX_0F) },
c0f3af97
L
6833 },
6834
6835 /* X86_64_63 */
6836 {
bf890a93
IT
6837 { "arpl", { Ew, Gw }, 0 },
6838 { "movs{lq|xd}", { Gv, Ed }, 0 },
c0f3af97
L
6839 },
6840
6841 /* X86_64_6D */
6842 {
bf890a93
IT
6843 { "ins{R|}", { Yzr, indirDX }, 0 },
6844 { "ins{G|}", { Yzr, indirDX }, 0 },
c0f3af97
L
6845 },
6846
6847 /* X86_64_6F */
6848 {
bf890a93
IT
6849 { "outs{R|}", { indirDXr, Xz }, 0 },
6850 { "outs{G|}", { indirDXr, Xz }, 0 },
c0f3af97
L
6851 },
6852
d039fef3 6853 /* X86_64_82 */
8b89fe14 6854 {
de194d85 6855 /* Opcode 0x82 is an alias of opcode 0x80 in 32-bit mode. */
d039fef3 6856 { REG_TABLE (REG_80) },
8b89fe14
L
6857 },
6858
c0f3af97
L
6859 /* X86_64_9A */
6860 {
bf890a93 6861 { "Jcall{T|}", { Ap }, 0 },
c0f3af97
L
6862 },
6863
6864 /* X86_64_C4 */
6865 {
6866 { MOD_TABLE (MOD_C4_32BIT) },
6867 { VEX_C4_TABLE (VEX_0F) },
6868 },
6869
6870 /* X86_64_C5 */
6871 {
6872 { MOD_TABLE (MOD_C5_32BIT) },
6873 { VEX_C5_TABLE (VEX_0F) },
6874 },
6875
6876 /* X86_64_CE */
6877 {
bf890a93 6878 { "into", { XX }, 0 },
c0f3af97
L
6879 },
6880
6881 /* X86_64_D4 */
6882 {
bf890a93 6883 { "aam", { Ib }, 0 },
c0f3af97
L
6884 },
6885
6886 /* X86_64_D5 */
6887 {
bf890a93 6888 { "aad", { Ib }, 0 },
c0f3af97
L
6889 },
6890
a72d2af2
L
6891 /* X86_64_E8 */
6892 {
6893 { "callP", { Jv, BND }, 0 },
5db04b09 6894 { "call@", { Jv, BND }, 0 }
a72d2af2
L
6895 },
6896
6897 /* X86_64_E9 */
6898 {
6899 { "jmpP", { Jv, BND }, 0 },
5db04b09 6900 { "jmp@", { Jv, BND }, 0 }
a72d2af2
L
6901 },
6902
c0f3af97
L
6903 /* X86_64_EA */
6904 {
bf890a93 6905 { "Jjmp{T|}", { Ap }, 0 },
c0f3af97
L
6906 },
6907
6908 /* X86_64_0F01_REG_0 */
6909 {
bf890a93
IT
6910 { "sgdt{Q|IQ}", { M }, 0 },
6911 { "sgdt", { M }, 0 },
c0f3af97
L
6912 },
6913
6914 /* X86_64_0F01_REG_1 */
6915 {
bf890a93
IT
6916 { "sidt{Q|IQ}", { M }, 0 },
6917 { "sidt", { M }, 0 },
c0f3af97
L
6918 },
6919
6920 /* X86_64_0F01_REG_2 */
6921 {
bf890a93
IT
6922 { "lgdt{Q|Q}", { M }, 0 },
6923 { "lgdt", { M }, 0 },
c0f3af97
L
6924 },
6925
6926 /* X86_64_0F01_REG_3 */
6927 {
bf890a93
IT
6928 { "lidt{Q|Q}", { M }, 0 },
6929 { "lidt", { M }, 0 },
c0f3af97
L
6930 },
6931};
6932
6933static const struct dis386 three_byte_table[][256] = {
c1e679ec
DR
6934
6935 /* THREE_BYTE_0F38 */
c0f3af97
L
6936 {
6937 /* 00 */
507bd325
L
6938 { "pshufb", { MX, EM }, PREFIX_OPCODE },
6939 { "phaddw", { MX, EM }, PREFIX_OPCODE },
6940 { "phaddd", { MX, EM }, PREFIX_OPCODE },
6941 { "phaddsw", { MX, EM }, PREFIX_OPCODE },
6942 { "pmaddubsw", { MX, EM }, PREFIX_OPCODE },
6943 { "phsubw", { MX, EM }, PREFIX_OPCODE },
6944 { "phsubd", { MX, EM }, PREFIX_OPCODE },
6945 { "phsubsw", { MX, EM }, PREFIX_OPCODE },
c0f3af97 6946 /* 08 */
507bd325
L
6947 { "psignb", { MX, EM }, PREFIX_OPCODE },
6948 { "psignw", { MX, EM }, PREFIX_OPCODE },
6949 { "psignd", { MX, EM }, PREFIX_OPCODE },
6950 { "pmulhrsw", { MX, EM }, PREFIX_OPCODE },
592d1631
L
6951 { Bad_Opcode },
6952 { Bad_Opcode },
6953 { Bad_Opcode },
6954 { Bad_Opcode },
f88c9eb0
SP
6955 /* 10 */
6956 { PREFIX_TABLE (PREFIX_0F3810) },
592d1631
L
6957 { Bad_Opcode },
6958 { Bad_Opcode },
6959 { Bad_Opcode },
f88c9eb0
SP
6960 { PREFIX_TABLE (PREFIX_0F3814) },
6961 { PREFIX_TABLE (PREFIX_0F3815) },
592d1631 6962 { Bad_Opcode },
f88c9eb0
SP
6963 { PREFIX_TABLE (PREFIX_0F3817) },
6964 /* 18 */
592d1631
L
6965 { Bad_Opcode },
6966 { Bad_Opcode },
6967 { Bad_Opcode },
6968 { Bad_Opcode },
507bd325
L
6969 { "pabsb", { MX, EM }, PREFIX_OPCODE },
6970 { "pabsw", { MX, EM }, PREFIX_OPCODE },
6971 { "pabsd", { MX, EM }, PREFIX_OPCODE },
592d1631 6972 { Bad_Opcode },
f88c9eb0
SP
6973 /* 20 */
6974 { PREFIX_TABLE (PREFIX_0F3820) },
6975 { PREFIX_TABLE (PREFIX_0F3821) },
6976 { PREFIX_TABLE (PREFIX_0F3822) },
6977 { PREFIX_TABLE (PREFIX_0F3823) },
6978 { PREFIX_TABLE (PREFIX_0F3824) },
6979 { PREFIX_TABLE (PREFIX_0F3825) },
592d1631
L
6980 { Bad_Opcode },
6981 { Bad_Opcode },
f88c9eb0
SP
6982 /* 28 */
6983 { PREFIX_TABLE (PREFIX_0F3828) },
6984 { PREFIX_TABLE (PREFIX_0F3829) },
6985 { PREFIX_TABLE (PREFIX_0F382A) },
6986 { PREFIX_TABLE (PREFIX_0F382B) },
592d1631
L
6987 { Bad_Opcode },
6988 { Bad_Opcode },
6989 { Bad_Opcode },
6990 { Bad_Opcode },
f88c9eb0
SP
6991 /* 30 */
6992 { PREFIX_TABLE (PREFIX_0F3830) },
6993 { PREFIX_TABLE (PREFIX_0F3831) },
6994 { PREFIX_TABLE (PREFIX_0F3832) },
6995 { PREFIX_TABLE (PREFIX_0F3833) },
6996 { PREFIX_TABLE (PREFIX_0F3834) },
6997 { PREFIX_TABLE (PREFIX_0F3835) },
592d1631 6998 { Bad_Opcode },
f88c9eb0
SP
6999 { PREFIX_TABLE (PREFIX_0F3837) },
7000 /* 38 */
7001 { PREFIX_TABLE (PREFIX_0F3838) },
7002 { PREFIX_TABLE (PREFIX_0F3839) },
7003 { PREFIX_TABLE (PREFIX_0F383A) },
7004 { PREFIX_TABLE (PREFIX_0F383B) },
7005 { PREFIX_TABLE (PREFIX_0F383C) },
7006 { PREFIX_TABLE (PREFIX_0F383D) },
7007 { PREFIX_TABLE (PREFIX_0F383E) },
7008 { PREFIX_TABLE (PREFIX_0F383F) },
7009 /* 40 */
7010 { PREFIX_TABLE (PREFIX_0F3840) },
7011 { PREFIX_TABLE (PREFIX_0F3841) },
592d1631
L
7012 { Bad_Opcode },
7013 { Bad_Opcode },
7014 { Bad_Opcode },
7015 { Bad_Opcode },
7016 { Bad_Opcode },
7017 { Bad_Opcode },
f88c9eb0 7018 /* 48 */
592d1631
L
7019 { Bad_Opcode },
7020 { Bad_Opcode },
7021 { Bad_Opcode },
7022 { Bad_Opcode },
7023 { Bad_Opcode },
7024 { Bad_Opcode },
7025 { Bad_Opcode },
7026 { Bad_Opcode },
f88c9eb0 7027 /* 50 */
592d1631
L
7028 { Bad_Opcode },
7029 { Bad_Opcode },
7030 { Bad_Opcode },
7031 { Bad_Opcode },
7032 { Bad_Opcode },
7033 { Bad_Opcode },
7034 { Bad_Opcode },
7035 { Bad_Opcode },
f88c9eb0 7036 /* 58 */
592d1631
L
7037 { Bad_Opcode },
7038 { Bad_Opcode },
7039 { Bad_Opcode },
7040 { Bad_Opcode },
7041 { Bad_Opcode },
7042 { Bad_Opcode },
7043 { Bad_Opcode },
7044 { Bad_Opcode },
f88c9eb0 7045 /* 60 */
592d1631
L
7046 { Bad_Opcode },
7047 { Bad_Opcode },
7048 { Bad_Opcode },
7049 { Bad_Opcode },
7050 { Bad_Opcode },
7051 { Bad_Opcode },
7052 { Bad_Opcode },
7053 { Bad_Opcode },
f88c9eb0 7054 /* 68 */
592d1631
L
7055 { Bad_Opcode },
7056 { Bad_Opcode },
7057 { Bad_Opcode },
7058 { Bad_Opcode },
7059 { Bad_Opcode },
7060 { Bad_Opcode },
7061 { Bad_Opcode },
7062 { Bad_Opcode },
f88c9eb0 7063 /* 70 */
592d1631
L
7064 { Bad_Opcode },
7065 { Bad_Opcode },
7066 { Bad_Opcode },
7067 { Bad_Opcode },
7068 { Bad_Opcode },
7069 { Bad_Opcode },
7070 { Bad_Opcode },
7071 { Bad_Opcode },
f88c9eb0 7072 /* 78 */
592d1631
L
7073 { Bad_Opcode },
7074 { Bad_Opcode },
7075 { Bad_Opcode },
7076 { Bad_Opcode },
7077 { Bad_Opcode },
7078 { Bad_Opcode },
7079 { Bad_Opcode },
7080 { Bad_Opcode },
f88c9eb0
SP
7081 /* 80 */
7082 { PREFIX_TABLE (PREFIX_0F3880) },
7083 { PREFIX_TABLE (PREFIX_0F3881) },
6c30d220 7084 { PREFIX_TABLE (PREFIX_0F3882) },
592d1631
L
7085 { Bad_Opcode },
7086 { Bad_Opcode },
7087 { Bad_Opcode },
7088 { Bad_Opcode },
7089 { Bad_Opcode },
f88c9eb0 7090 /* 88 */
592d1631
L
7091 { Bad_Opcode },
7092 { Bad_Opcode },
7093 { Bad_Opcode },
7094 { Bad_Opcode },
7095 { Bad_Opcode },
7096 { Bad_Opcode },
7097 { Bad_Opcode },
7098 { Bad_Opcode },
f88c9eb0 7099 /* 90 */
592d1631
L
7100 { Bad_Opcode },
7101 { Bad_Opcode },
7102 { Bad_Opcode },
7103 { Bad_Opcode },
7104 { Bad_Opcode },
7105 { Bad_Opcode },
7106 { Bad_Opcode },
7107 { Bad_Opcode },
f88c9eb0 7108 /* 98 */
592d1631
L
7109 { Bad_Opcode },
7110 { Bad_Opcode },
7111 { Bad_Opcode },
7112 { Bad_Opcode },
7113 { Bad_Opcode },
7114 { Bad_Opcode },
7115 { Bad_Opcode },
7116 { Bad_Opcode },
f88c9eb0 7117 /* a0 */
592d1631
L
7118 { Bad_Opcode },
7119 { Bad_Opcode },
7120 { Bad_Opcode },
7121 { Bad_Opcode },
7122 { Bad_Opcode },
7123 { Bad_Opcode },
7124 { Bad_Opcode },
7125 { Bad_Opcode },
f88c9eb0 7126 /* a8 */
592d1631
L
7127 { Bad_Opcode },
7128 { Bad_Opcode },
7129 { Bad_Opcode },
7130 { Bad_Opcode },
7131 { Bad_Opcode },
7132 { Bad_Opcode },
7133 { Bad_Opcode },
7134 { Bad_Opcode },
f88c9eb0 7135 /* b0 */
592d1631
L
7136 { Bad_Opcode },
7137 { Bad_Opcode },
7138 { Bad_Opcode },
7139 { Bad_Opcode },
7140 { Bad_Opcode },
7141 { Bad_Opcode },
7142 { Bad_Opcode },
7143 { Bad_Opcode },
f88c9eb0 7144 /* b8 */
592d1631
L
7145 { Bad_Opcode },
7146 { Bad_Opcode },
7147 { Bad_Opcode },
7148 { Bad_Opcode },
7149 { Bad_Opcode },
7150 { Bad_Opcode },
7151 { Bad_Opcode },
7152 { Bad_Opcode },
f88c9eb0 7153 /* c0 */
592d1631
L
7154 { Bad_Opcode },
7155 { Bad_Opcode },
7156 { Bad_Opcode },
7157 { Bad_Opcode },
7158 { Bad_Opcode },
7159 { Bad_Opcode },
7160 { Bad_Opcode },
7161 { Bad_Opcode },
f88c9eb0 7162 /* c8 */
a0046408
L
7163 { PREFIX_TABLE (PREFIX_0F38C8) },
7164 { PREFIX_TABLE (PREFIX_0F38C9) },
7165 { PREFIX_TABLE (PREFIX_0F38CA) },
7166 { PREFIX_TABLE (PREFIX_0F38CB) },
7167 { PREFIX_TABLE (PREFIX_0F38CC) },
7168 { PREFIX_TABLE (PREFIX_0F38CD) },
592d1631 7169 { Bad_Opcode },
48521003 7170 { PREFIX_TABLE (PREFIX_0F38CF) },
f88c9eb0 7171 /* d0 */
592d1631
L
7172 { Bad_Opcode },
7173 { Bad_Opcode },
7174 { Bad_Opcode },
7175 { Bad_Opcode },
7176 { Bad_Opcode },
7177 { Bad_Opcode },
7178 { Bad_Opcode },
7179 { Bad_Opcode },
f88c9eb0 7180 /* d8 */
592d1631
L
7181 { Bad_Opcode },
7182 { Bad_Opcode },
7183 { Bad_Opcode },
f88c9eb0
SP
7184 { PREFIX_TABLE (PREFIX_0F38DB) },
7185 { PREFIX_TABLE (PREFIX_0F38DC) },
7186 { PREFIX_TABLE (PREFIX_0F38DD) },
7187 { PREFIX_TABLE (PREFIX_0F38DE) },
7188 { PREFIX_TABLE (PREFIX_0F38DF) },
7189 /* e0 */
592d1631
L
7190 { Bad_Opcode },
7191 { Bad_Opcode },
7192 { Bad_Opcode },
7193 { Bad_Opcode },
7194 { Bad_Opcode },
7195 { Bad_Opcode },
7196 { Bad_Opcode },
7197 { Bad_Opcode },
f88c9eb0 7198 /* e8 */
592d1631
L
7199 { Bad_Opcode },
7200 { Bad_Opcode },
7201 { Bad_Opcode },
7202 { Bad_Opcode },
7203 { Bad_Opcode },
7204 { Bad_Opcode },
7205 { Bad_Opcode },
7206 { Bad_Opcode },
f88c9eb0
SP
7207 /* f0 */
7208 { PREFIX_TABLE (PREFIX_0F38F0) },
7209 { PREFIX_TABLE (PREFIX_0F38F1) },
592d1631
L
7210 { Bad_Opcode },
7211 { Bad_Opcode },
7212 { Bad_Opcode },
603555e5 7213 { PREFIX_TABLE (PREFIX_0F38F5) },
e2e1fcde 7214 { PREFIX_TABLE (PREFIX_0F38F6) },
592d1631 7215 { Bad_Opcode },
f88c9eb0 7216 /* f8 */
c0a30a9f
L
7217 { PREFIX_TABLE (PREFIX_0F38F8) },
7218 { PREFIX_TABLE (PREFIX_0F38F9) },
592d1631
L
7219 { Bad_Opcode },
7220 { Bad_Opcode },
7221 { Bad_Opcode },
7222 { Bad_Opcode },
7223 { Bad_Opcode },
7224 { Bad_Opcode },
f88c9eb0
SP
7225 },
7226 /* THREE_BYTE_0F3A */
7227 {
7228 /* 00 */
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 /* 08 */
7238 { PREFIX_TABLE (PREFIX_0F3A08) },
7239 { PREFIX_TABLE (PREFIX_0F3A09) },
7240 { PREFIX_TABLE (PREFIX_0F3A0A) },
7241 { PREFIX_TABLE (PREFIX_0F3A0B) },
7242 { PREFIX_TABLE (PREFIX_0F3A0C) },
7243 { PREFIX_TABLE (PREFIX_0F3A0D) },
7244 { PREFIX_TABLE (PREFIX_0F3A0E) },
507bd325 7245 { "palignr", { MX, EM, Ib }, PREFIX_OPCODE },
f88c9eb0 7246 /* 10 */
592d1631
L
7247 { Bad_Opcode },
7248 { Bad_Opcode },
7249 { Bad_Opcode },
7250 { Bad_Opcode },
f88c9eb0
SP
7251 { PREFIX_TABLE (PREFIX_0F3A14) },
7252 { PREFIX_TABLE (PREFIX_0F3A15) },
7253 { PREFIX_TABLE (PREFIX_0F3A16) },
7254 { PREFIX_TABLE (PREFIX_0F3A17) },
7255 /* 18 */
592d1631
L
7256 { Bad_Opcode },
7257 { Bad_Opcode },
7258 { Bad_Opcode },
7259 { Bad_Opcode },
7260 { Bad_Opcode },
7261 { Bad_Opcode },
7262 { Bad_Opcode },
7263 { Bad_Opcode },
f88c9eb0
SP
7264 /* 20 */
7265 { PREFIX_TABLE (PREFIX_0F3A20) },
7266 { PREFIX_TABLE (PREFIX_0F3A21) },
7267 { PREFIX_TABLE (PREFIX_0F3A22) },
592d1631
L
7268 { Bad_Opcode },
7269 { Bad_Opcode },
7270 { Bad_Opcode },
7271 { Bad_Opcode },
7272 { Bad_Opcode },
f88c9eb0 7273 /* 28 */
592d1631
L
7274 { Bad_Opcode },
7275 { Bad_Opcode },
7276 { Bad_Opcode },
7277 { Bad_Opcode },
7278 { Bad_Opcode },
7279 { Bad_Opcode },
7280 { Bad_Opcode },
7281 { Bad_Opcode },
f88c9eb0 7282 /* 30 */
592d1631
L
7283 { Bad_Opcode },
7284 { Bad_Opcode },
7285 { Bad_Opcode },
7286 { Bad_Opcode },
7287 { Bad_Opcode },
7288 { Bad_Opcode },
7289 { Bad_Opcode },
7290 { Bad_Opcode },
f88c9eb0 7291 /* 38 */
592d1631
L
7292 { Bad_Opcode },
7293 { Bad_Opcode },
7294 { Bad_Opcode },
7295 { Bad_Opcode },
7296 { Bad_Opcode },
7297 { Bad_Opcode },
7298 { Bad_Opcode },
7299 { Bad_Opcode },
f88c9eb0
SP
7300 /* 40 */
7301 { PREFIX_TABLE (PREFIX_0F3A40) },
7302 { PREFIX_TABLE (PREFIX_0F3A41) },
7303 { PREFIX_TABLE (PREFIX_0F3A42) },
592d1631 7304 { Bad_Opcode },
f88c9eb0 7305 { PREFIX_TABLE (PREFIX_0F3A44) },
592d1631
L
7306 { Bad_Opcode },
7307 { Bad_Opcode },
7308 { Bad_Opcode },
f88c9eb0 7309 /* 48 */
592d1631
L
7310 { Bad_Opcode },
7311 { Bad_Opcode },
7312 { Bad_Opcode },
7313 { Bad_Opcode },
7314 { Bad_Opcode },
7315 { Bad_Opcode },
7316 { Bad_Opcode },
7317 { Bad_Opcode },
f88c9eb0 7318 /* 50 */
592d1631
L
7319 { Bad_Opcode },
7320 { Bad_Opcode },
7321 { Bad_Opcode },
7322 { Bad_Opcode },
7323 { Bad_Opcode },
7324 { Bad_Opcode },
7325 { Bad_Opcode },
7326 { Bad_Opcode },
f88c9eb0 7327 /* 58 */
592d1631
L
7328 { Bad_Opcode },
7329 { Bad_Opcode },
7330 { Bad_Opcode },
7331 { Bad_Opcode },
7332 { Bad_Opcode },
7333 { Bad_Opcode },
7334 { Bad_Opcode },
7335 { Bad_Opcode },
f88c9eb0
SP
7336 /* 60 */
7337 { PREFIX_TABLE (PREFIX_0F3A60) },
7338 { PREFIX_TABLE (PREFIX_0F3A61) },
7339 { PREFIX_TABLE (PREFIX_0F3A62) },
7340 { PREFIX_TABLE (PREFIX_0F3A63) },
592d1631
L
7341 { Bad_Opcode },
7342 { Bad_Opcode },
7343 { Bad_Opcode },
7344 { Bad_Opcode },
f88c9eb0 7345 /* 68 */
592d1631
L
7346 { Bad_Opcode },
7347 { Bad_Opcode },
7348 { Bad_Opcode },
7349 { Bad_Opcode },
7350 { Bad_Opcode },
7351 { Bad_Opcode },
7352 { Bad_Opcode },
7353 { Bad_Opcode },
f88c9eb0 7354 /* 70 */
592d1631
L
7355 { Bad_Opcode },
7356 { Bad_Opcode },
7357 { Bad_Opcode },
7358 { Bad_Opcode },
7359 { Bad_Opcode },
7360 { Bad_Opcode },
7361 { Bad_Opcode },
7362 { Bad_Opcode },
f88c9eb0 7363 /* 78 */
592d1631
L
7364 { Bad_Opcode },
7365 { Bad_Opcode },
7366 { Bad_Opcode },
7367 { Bad_Opcode },
7368 { Bad_Opcode },
7369 { Bad_Opcode },
7370 { Bad_Opcode },
7371 { Bad_Opcode },
f88c9eb0 7372 /* 80 */
592d1631
L
7373 { Bad_Opcode },
7374 { Bad_Opcode },
7375 { Bad_Opcode },
7376 { Bad_Opcode },
7377 { Bad_Opcode },
7378 { Bad_Opcode },
7379 { Bad_Opcode },
7380 { Bad_Opcode },
f88c9eb0 7381 /* 88 */
592d1631
L
7382 { Bad_Opcode },
7383 { Bad_Opcode },
7384 { Bad_Opcode },
7385 { Bad_Opcode },
7386 { Bad_Opcode },
7387 { Bad_Opcode },
7388 { Bad_Opcode },
7389 { Bad_Opcode },
f88c9eb0 7390 /* 90 */
592d1631
L
7391 { Bad_Opcode },
7392 { Bad_Opcode },
7393 { Bad_Opcode },
7394 { Bad_Opcode },
7395 { Bad_Opcode },
7396 { Bad_Opcode },
7397 { Bad_Opcode },
7398 { Bad_Opcode },
f88c9eb0 7399 /* 98 */
592d1631
L
7400 { Bad_Opcode },
7401 { Bad_Opcode },
7402 { Bad_Opcode },
7403 { Bad_Opcode },
7404 { Bad_Opcode },
7405 { Bad_Opcode },
7406 { Bad_Opcode },
7407 { Bad_Opcode },
f88c9eb0 7408 /* a0 */
592d1631
L
7409 { Bad_Opcode },
7410 { Bad_Opcode },
7411 { Bad_Opcode },
7412 { Bad_Opcode },
7413 { Bad_Opcode },
7414 { Bad_Opcode },
7415 { Bad_Opcode },
7416 { Bad_Opcode },
f88c9eb0 7417 /* a8 */
592d1631
L
7418 { Bad_Opcode },
7419 { Bad_Opcode },
7420 { Bad_Opcode },
7421 { Bad_Opcode },
7422 { Bad_Opcode },
7423 { Bad_Opcode },
7424 { Bad_Opcode },
7425 { Bad_Opcode },
f88c9eb0 7426 /* b0 */
592d1631
L
7427 { Bad_Opcode },
7428 { Bad_Opcode },
7429 { Bad_Opcode },
7430 { Bad_Opcode },
7431 { Bad_Opcode },
7432 { Bad_Opcode },
7433 { Bad_Opcode },
7434 { Bad_Opcode },
f88c9eb0 7435 /* b8 */
592d1631
L
7436 { Bad_Opcode },
7437 { Bad_Opcode },
7438 { Bad_Opcode },
7439 { Bad_Opcode },
7440 { Bad_Opcode },
7441 { Bad_Opcode },
7442 { Bad_Opcode },
7443 { Bad_Opcode },
f88c9eb0 7444 /* c0 */
592d1631
L
7445 { Bad_Opcode },
7446 { Bad_Opcode },
7447 { Bad_Opcode },
7448 { Bad_Opcode },
7449 { Bad_Opcode },
7450 { Bad_Opcode },
7451 { Bad_Opcode },
7452 { Bad_Opcode },
f88c9eb0 7453 /* c8 */
592d1631
L
7454 { Bad_Opcode },
7455 { Bad_Opcode },
7456 { Bad_Opcode },
7457 { Bad_Opcode },
a0046408 7458 { PREFIX_TABLE (PREFIX_0F3ACC) },
592d1631 7459 { Bad_Opcode },
48521003
IT
7460 { PREFIX_TABLE (PREFIX_0F3ACE) },
7461 { PREFIX_TABLE (PREFIX_0F3ACF) },
f88c9eb0 7462 /* d0 */
592d1631
L
7463 { Bad_Opcode },
7464 { Bad_Opcode },
7465 { Bad_Opcode },
7466 { Bad_Opcode },
7467 { Bad_Opcode },
7468 { Bad_Opcode },
7469 { Bad_Opcode },
7470 { Bad_Opcode },
f88c9eb0 7471 /* d8 */
592d1631
L
7472 { Bad_Opcode },
7473 { Bad_Opcode },
7474 { Bad_Opcode },
7475 { Bad_Opcode },
7476 { Bad_Opcode },
7477 { Bad_Opcode },
7478 { Bad_Opcode },
f88c9eb0
SP
7479 { PREFIX_TABLE (PREFIX_0F3ADF) },
7480 /* e0 */
592d1631
L
7481 { Bad_Opcode },
7482 { Bad_Opcode },
7483 { Bad_Opcode },
7484 { Bad_Opcode },
7485 { Bad_Opcode },
592d1631
L
7486 { Bad_Opcode },
7487 { Bad_Opcode },
7488 { Bad_Opcode },
85f10a01 7489 /* e8 */
592d1631
L
7490 { Bad_Opcode },
7491 { Bad_Opcode },
7492 { Bad_Opcode },
7493 { Bad_Opcode },
7494 { Bad_Opcode },
7495 { Bad_Opcode },
7496 { Bad_Opcode },
7497 { Bad_Opcode },
85f10a01 7498 /* f0 */
592d1631
L
7499 { Bad_Opcode },
7500 { Bad_Opcode },
7501 { Bad_Opcode },
7502 { Bad_Opcode },
7503 { Bad_Opcode },
7504 { Bad_Opcode },
7505 { Bad_Opcode },
7506 { Bad_Opcode },
85f10a01 7507 /* f8 */
592d1631
L
7508 { Bad_Opcode },
7509 { Bad_Opcode },
7510 { Bad_Opcode },
7511 { Bad_Opcode },
7512 { Bad_Opcode },
7513 { Bad_Opcode },
7514 { Bad_Opcode },
7515 { Bad_Opcode },
85f10a01 7516 },
f88c9eb0
SP
7517};
7518
7519static const struct dis386 xop_table[][256] = {
5dd85c99 7520 /* XOP_08 */
85f10a01
MM
7521 {
7522 /* 00 */
592d1631
L
7523 { Bad_Opcode },
7524 { Bad_Opcode },
7525 { Bad_Opcode },
7526 { Bad_Opcode },
7527 { Bad_Opcode },
7528 { Bad_Opcode },
7529 { Bad_Opcode },
7530 { Bad_Opcode },
85f10a01 7531 /* 08 */
592d1631
L
7532 { Bad_Opcode },
7533 { Bad_Opcode },
7534 { Bad_Opcode },
7535 { Bad_Opcode },
7536 { Bad_Opcode },
7537 { Bad_Opcode },
7538 { Bad_Opcode },
7539 { Bad_Opcode },
85f10a01 7540 /* 10 */
3929df09 7541 { Bad_Opcode },
592d1631
L
7542 { Bad_Opcode },
7543 { Bad_Opcode },
7544 { Bad_Opcode },
7545 { Bad_Opcode },
7546 { Bad_Opcode },
7547 { Bad_Opcode },
7548 { Bad_Opcode },
85f10a01 7549 /* 18 */
592d1631
L
7550 { Bad_Opcode },
7551 { Bad_Opcode },
7552 { Bad_Opcode },
7553 { Bad_Opcode },
7554 { Bad_Opcode },
7555 { Bad_Opcode },
7556 { Bad_Opcode },
7557 { Bad_Opcode },
85f10a01 7558 /* 20 */
592d1631
L
7559 { Bad_Opcode },
7560 { Bad_Opcode },
7561 { Bad_Opcode },
7562 { Bad_Opcode },
7563 { Bad_Opcode },
7564 { Bad_Opcode },
7565 { Bad_Opcode },
7566 { Bad_Opcode },
85f10a01 7567 /* 28 */
592d1631
L
7568 { Bad_Opcode },
7569 { Bad_Opcode },
7570 { Bad_Opcode },
7571 { Bad_Opcode },
7572 { Bad_Opcode },
7573 { Bad_Opcode },
7574 { Bad_Opcode },
7575 { Bad_Opcode },
c0f3af97 7576 /* 30 */
592d1631
L
7577 { Bad_Opcode },
7578 { Bad_Opcode },
7579 { Bad_Opcode },
7580 { Bad_Opcode },
7581 { Bad_Opcode },
7582 { Bad_Opcode },
7583 { Bad_Opcode },
7584 { Bad_Opcode },
c0f3af97 7585 /* 38 */
592d1631
L
7586 { Bad_Opcode },
7587 { Bad_Opcode },
7588 { Bad_Opcode },
7589 { Bad_Opcode },
7590 { Bad_Opcode },
7591 { Bad_Opcode },
7592 { Bad_Opcode },
7593 { Bad_Opcode },
c0f3af97 7594 /* 40 */
592d1631
L
7595 { Bad_Opcode },
7596 { Bad_Opcode },
7597 { Bad_Opcode },
7598 { Bad_Opcode },
7599 { Bad_Opcode },
7600 { Bad_Opcode },
7601 { Bad_Opcode },
7602 { Bad_Opcode },
85f10a01 7603 /* 48 */
592d1631
L
7604 { Bad_Opcode },
7605 { Bad_Opcode },
7606 { Bad_Opcode },
7607 { Bad_Opcode },
7608 { Bad_Opcode },
7609 { Bad_Opcode },
7610 { Bad_Opcode },
7611 { Bad_Opcode },
c0f3af97 7612 /* 50 */
592d1631
L
7613 { Bad_Opcode },
7614 { Bad_Opcode },
7615 { Bad_Opcode },
7616 { Bad_Opcode },
7617 { Bad_Opcode },
7618 { Bad_Opcode },
7619 { Bad_Opcode },
7620 { Bad_Opcode },
85f10a01 7621 /* 58 */
592d1631
L
7622 { Bad_Opcode },
7623 { Bad_Opcode },
7624 { Bad_Opcode },
7625 { Bad_Opcode },
7626 { Bad_Opcode },
7627 { Bad_Opcode },
7628 { Bad_Opcode },
7629 { Bad_Opcode },
c1e679ec 7630 /* 60 */
592d1631
L
7631 { Bad_Opcode },
7632 { Bad_Opcode },
7633 { Bad_Opcode },
7634 { Bad_Opcode },
7635 { Bad_Opcode },
7636 { Bad_Opcode },
7637 { Bad_Opcode },
7638 { Bad_Opcode },
c0f3af97 7639 /* 68 */
592d1631
L
7640 { Bad_Opcode },
7641 { Bad_Opcode },
7642 { Bad_Opcode },
7643 { Bad_Opcode },
7644 { Bad_Opcode },
7645 { Bad_Opcode },
7646 { Bad_Opcode },
7647 { Bad_Opcode },
85f10a01 7648 /* 70 */
592d1631
L
7649 { Bad_Opcode },
7650 { Bad_Opcode },
7651 { Bad_Opcode },
7652 { Bad_Opcode },
7653 { Bad_Opcode },
7654 { Bad_Opcode },
7655 { Bad_Opcode },
7656 { Bad_Opcode },
85f10a01 7657 /* 78 */
592d1631
L
7658 { Bad_Opcode },
7659 { Bad_Opcode },
7660 { Bad_Opcode },
7661 { Bad_Opcode },
7662 { Bad_Opcode },
7663 { Bad_Opcode },
7664 { Bad_Opcode },
7665 { Bad_Opcode },
85f10a01 7666 /* 80 */
592d1631
L
7667 { Bad_Opcode },
7668 { Bad_Opcode },
7669 { Bad_Opcode },
7670 { Bad_Opcode },
7671 { Bad_Opcode },
3a2430e0
JB
7672 { "vpmacssww", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7673 { "vpmacsswd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7674 { "vpmacssdql", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
5dd85c99 7675 /* 88 */
592d1631
L
7676 { Bad_Opcode },
7677 { Bad_Opcode },
7678 { Bad_Opcode },
7679 { Bad_Opcode },
7680 { Bad_Opcode },
7681 { Bad_Opcode },
3a2430e0
JB
7682 { "vpmacssdd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7683 { "vpmacssdqh", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
5dd85c99 7684 /* 90 */
592d1631
L
7685 { Bad_Opcode },
7686 { Bad_Opcode },
7687 { Bad_Opcode },
7688 { Bad_Opcode },
7689 { Bad_Opcode },
3a2430e0
JB
7690 { "vpmacsww", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7691 { "vpmacswd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7692 { "vpmacsdql", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
5dd85c99 7693 /* 98 */
592d1631
L
7694 { Bad_Opcode },
7695 { Bad_Opcode },
7696 { Bad_Opcode },
7697 { Bad_Opcode },
7698 { Bad_Opcode },
7699 { Bad_Opcode },
3a2430e0
JB
7700 { "vpmacsdd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7701 { "vpmacsdqh", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
5dd85c99 7702 /* a0 */
592d1631
L
7703 { Bad_Opcode },
7704 { Bad_Opcode },
3a2430e0
JB
7705 { "vpcmov", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
7706 { "vpperm", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
592d1631
L
7707 { Bad_Opcode },
7708 { Bad_Opcode },
3a2430e0 7709 { "vpmadcsswd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
592d1631 7710 { Bad_Opcode },
5dd85c99 7711 /* a8 */
592d1631
L
7712 { Bad_Opcode },
7713 { Bad_Opcode },
7714 { Bad_Opcode },
7715 { Bad_Opcode },
7716 { Bad_Opcode },
7717 { Bad_Opcode },
7718 { Bad_Opcode },
7719 { Bad_Opcode },
5dd85c99 7720 /* b0 */
592d1631
L
7721 { Bad_Opcode },
7722 { Bad_Opcode },
7723 { Bad_Opcode },
7724 { Bad_Opcode },
7725 { Bad_Opcode },
7726 { Bad_Opcode },
3a2430e0 7727 { "vpmadcswd", { XMVexW, Vex, EXVexW, EXVexW }, 0 },
592d1631 7728 { Bad_Opcode },
5dd85c99 7729 /* b8 */
592d1631
L
7730 { Bad_Opcode },
7731 { Bad_Opcode },
7732 { Bad_Opcode },
7733 { Bad_Opcode },
7734 { Bad_Opcode },
7735 { Bad_Opcode },
7736 { Bad_Opcode },
7737 { Bad_Opcode },
5dd85c99 7738 /* c0 */
bf890a93
IT
7739 { "vprotb", { XM, Vex_2src_1, Ib }, 0 },
7740 { "vprotw", { XM, Vex_2src_1, Ib }, 0 },
7741 { "vprotd", { XM, Vex_2src_1, Ib }, 0 },
7742 { "vprotq", { XM, Vex_2src_1, Ib }, 0 },
592d1631
L
7743 { Bad_Opcode },
7744 { Bad_Opcode },
7745 { Bad_Opcode },
7746 { Bad_Opcode },
5dd85c99 7747 /* c8 */
592d1631
L
7748 { Bad_Opcode },
7749 { Bad_Opcode },
7750 { Bad_Opcode },
7751 { Bad_Opcode },
ff688e1f
L
7752 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CC) },
7753 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CD) },
7754 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CE) },
7755 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CF) },
5dd85c99 7756 /* d0 */
592d1631
L
7757 { Bad_Opcode },
7758 { Bad_Opcode },
7759 { Bad_Opcode },
7760 { Bad_Opcode },
7761 { Bad_Opcode },
7762 { Bad_Opcode },
7763 { Bad_Opcode },
7764 { Bad_Opcode },
5dd85c99 7765 /* d8 */
592d1631
L
7766 { Bad_Opcode },
7767 { Bad_Opcode },
7768 { Bad_Opcode },
7769 { Bad_Opcode },
7770 { Bad_Opcode },
7771 { Bad_Opcode },
7772 { Bad_Opcode },
7773 { Bad_Opcode },
5dd85c99 7774 /* e0 */
592d1631
L
7775 { Bad_Opcode },
7776 { Bad_Opcode },
7777 { Bad_Opcode },
7778 { Bad_Opcode },
7779 { Bad_Opcode },
7780 { Bad_Opcode },
7781 { Bad_Opcode },
7782 { Bad_Opcode },
5dd85c99 7783 /* e8 */
592d1631
L
7784 { Bad_Opcode },
7785 { Bad_Opcode },
7786 { Bad_Opcode },
7787 { Bad_Opcode },
ff688e1f
L
7788 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EC) },
7789 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_ED) },
7790 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EE) },
7791 { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EF) },
5dd85c99 7792 /* f0 */
592d1631
L
7793 { Bad_Opcode },
7794 { Bad_Opcode },
7795 { Bad_Opcode },
7796 { Bad_Opcode },
7797 { Bad_Opcode },
7798 { Bad_Opcode },
7799 { Bad_Opcode },
7800 { Bad_Opcode },
5dd85c99 7801 /* f8 */
592d1631
L
7802 { Bad_Opcode },
7803 { Bad_Opcode },
7804 { Bad_Opcode },
7805 { Bad_Opcode },
7806 { Bad_Opcode },
7807 { Bad_Opcode },
7808 { Bad_Opcode },
7809 { Bad_Opcode },
5dd85c99
SP
7810 },
7811 /* XOP_09 */
7812 {
7813 /* 00 */
592d1631 7814 { Bad_Opcode },
2a2a0f38
QN
7815 { REG_TABLE (REG_XOP_TBM_01) },
7816 { REG_TABLE (REG_XOP_TBM_02) },
592d1631
L
7817 { Bad_Opcode },
7818 { Bad_Opcode },
7819 { Bad_Opcode },
7820 { Bad_Opcode },
7821 { Bad_Opcode },
5dd85c99 7822 /* 08 */
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 /* 10 */
592d1631
L
7832 { Bad_Opcode },
7833 { Bad_Opcode },
5dd85c99 7834 { REG_TABLE (REG_XOP_LWPCB) },
592d1631
L
7835 { Bad_Opcode },
7836 { Bad_Opcode },
7837 { Bad_Opcode },
7838 { Bad_Opcode },
7839 { Bad_Opcode },
5dd85c99 7840 /* 18 */
592d1631
L
7841 { Bad_Opcode },
7842 { Bad_Opcode },
7843 { Bad_Opcode },
7844 { Bad_Opcode },
7845 { Bad_Opcode },
7846 { Bad_Opcode },
7847 { Bad_Opcode },
7848 { Bad_Opcode },
5dd85c99 7849 /* 20 */
592d1631
L
7850 { Bad_Opcode },
7851 { Bad_Opcode },
7852 { Bad_Opcode },
7853 { Bad_Opcode },
7854 { Bad_Opcode },
7855 { Bad_Opcode },
7856 { Bad_Opcode },
7857 { Bad_Opcode },
5dd85c99 7858 /* 28 */
592d1631
L
7859 { Bad_Opcode },
7860 { Bad_Opcode },
7861 { Bad_Opcode },
7862 { Bad_Opcode },
7863 { Bad_Opcode },
7864 { Bad_Opcode },
7865 { Bad_Opcode },
7866 { Bad_Opcode },
5dd85c99 7867 /* 30 */
592d1631
L
7868 { Bad_Opcode },
7869 { Bad_Opcode },
7870 { Bad_Opcode },
7871 { Bad_Opcode },
7872 { Bad_Opcode },
7873 { Bad_Opcode },
7874 { Bad_Opcode },
7875 { Bad_Opcode },
5dd85c99 7876 /* 38 */
592d1631
L
7877 { Bad_Opcode },
7878 { Bad_Opcode },
7879 { Bad_Opcode },
7880 { Bad_Opcode },
7881 { Bad_Opcode },
7882 { Bad_Opcode },
7883 { Bad_Opcode },
7884 { Bad_Opcode },
5dd85c99 7885 /* 40 */
592d1631
L
7886 { Bad_Opcode },
7887 { Bad_Opcode },
7888 { Bad_Opcode },
7889 { Bad_Opcode },
7890 { Bad_Opcode },
7891 { Bad_Opcode },
7892 { Bad_Opcode },
7893 { Bad_Opcode },
5dd85c99 7894 /* 48 */
592d1631
L
7895 { Bad_Opcode },
7896 { Bad_Opcode },
7897 { Bad_Opcode },
7898 { Bad_Opcode },
7899 { Bad_Opcode },
7900 { Bad_Opcode },
7901 { Bad_Opcode },
7902 { Bad_Opcode },
5dd85c99 7903 /* 50 */
592d1631
L
7904 { Bad_Opcode },
7905 { Bad_Opcode },
7906 { Bad_Opcode },
7907 { Bad_Opcode },
7908 { Bad_Opcode },
7909 { Bad_Opcode },
7910 { Bad_Opcode },
7911 { Bad_Opcode },
5dd85c99 7912 /* 58 */
592d1631
L
7913 { Bad_Opcode },
7914 { Bad_Opcode },
7915 { Bad_Opcode },
7916 { Bad_Opcode },
7917 { Bad_Opcode },
7918 { Bad_Opcode },
7919 { Bad_Opcode },
7920 { Bad_Opcode },
5dd85c99 7921 /* 60 */
592d1631
L
7922 { Bad_Opcode },
7923 { Bad_Opcode },
7924 { Bad_Opcode },
7925 { Bad_Opcode },
7926 { Bad_Opcode },
7927 { Bad_Opcode },
7928 { Bad_Opcode },
7929 { Bad_Opcode },
5dd85c99 7930 /* 68 */
592d1631
L
7931 { Bad_Opcode },
7932 { Bad_Opcode },
7933 { Bad_Opcode },
7934 { Bad_Opcode },
7935 { Bad_Opcode },
7936 { Bad_Opcode },
7937 { Bad_Opcode },
7938 { Bad_Opcode },
5dd85c99 7939 /* 70 */
592d1631
L
7940 { Bad_Opcode },
7941 { Bad_Opcode },
7942 { Bad_Opcode },
7943 { Bad_Opcode },
7944 { Bad_Opcode },
7945 { Bad_Opcode },
7946 { Bad_Opcode },
7947 { Bad_Opcode },
5dd85c99 7948 /* 78 */
592d1631
L
7949 { Bad_Opcode },
7950 { Bad_Opcode },
7951 { Bad_Opcode },
7952 { Bad_Opcode },
7953 { Bad_Opcode },
7954 { Bad_Opcode },
7955 { Bad_Opcode },
7956 { Bad_Opcode },
5dd85c99 7957 /* 80 */
592a252b
L
7958 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_80) },
7959 { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_81) },
bf890a93
IT
7960 { "vfrczss", { XM, EXd }, 0 },
7961 { "vfrczsd", { XM, EXq }, 0 },
592d1631
L
7962 { Bad_Opcode },
7963 { Bad_Opcode },
7964 { Bad_Opcode },
7965 { Bad_Opcode },
5dd85c99 7966 /* 88 */
592d1631
L
7967 { Bad_Opcode },
7968 { Bad_Opcode },
7969 { Bad_Opcode },
7970 { Bad_Opcode },
7971 { Bad_Opcode },
7972 { Bad_Opcode },
7973 { Bad_Opcode },
7974 { Bad_Opcode },
5dd85c99 7975 /* 90 */
bf890a93
IT
7976 { "vprotb", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
7977 { "vprotw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
7978 { "vprotd", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
7979 { "vprotq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
7980 { "vpshlb", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
7981 { "vpshlw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
7982 { "vpshld", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
7983 { "vpshlq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
5dd85c99 7984 /* 98 */
bf890a93
IT
7985 { "vpshab", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
7986 { "vpshaw", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
7987 { "vpshad", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
7988 { "vpshaq", { XM, Vex_2src_1, Vex_2src_2 }, 0 },
592d1631
L
7989 { Bad_Opcode },
7990 { Bad_Opcode },
7991 { Bad_Opcode },
7992 { Bad_Opcode },
5dd85c99 7993 /* a0 */
592d1631
L
7994 { Bad_Opcode },
7995 { Bad_Opcode },
7996 { Bad_Opcode },
7997 { Bad_Opcode },
7998 { Bad_Opcode },
7999 { Bad_Opcode },
8000 { Bad_Opcode },
8001 { Bad_Opcode },
5dd85c99 8002 /* a8 */
592d1631
L
8003 { Bad_Opcode },
8004 { Bad_Opcode },
8005 { Bad_Opcode },
8006 { Bad_Opcode },
8007 { Bad_Opcode },
8008 { Bad_Opcode },
8009 { Bad_Opcode },
8010 { Bad_Opcode },
5dd85c99 8011 /* b0 */
592d1631
L
8012 { Bad_Opcode },
8013 { Bad_Opcode },
8014 { Bad_Opcode },
8015 { Bad_Opcode },
8016 { Bad_Opcode },
8017 { Bad_Opcode },
8018 { Bad_Opcode },
8019 { Bad_Opcode },
5dd85c99 8020 /* b8 */
592d1631
L
8021 { Bad_Opcode },
8022 { Bad_Opcode },
8023 { Bad_Opcode },
8024 { Bad_Opcode },
8025 { Bad_Opcode },
8026 { Bad_Opcode },
8027 { Bad_Opcode },
8028 { Bad_Opcode },
5dd85c99 8029 /* c0 */
592d1631 8030 { Bad_Opcode },
bf890a93
IT
8031 { "vphaddbw", { XM, EXxmm }, 0 },
8032 { "vphaddbd", { XM, EXxmm }, 0 },
8033 { "vphaddbq", { XM, EXxmm }, 0 },
592d1631
L
8034 { Bad_Opcode },
8035 { Bad_Opcode },
bf890a93
IT
8036 { "vphaddwd", { XM, EXxmm }, 0 },
8037 { "vphaddwq", { XM, EXxmm }, 0 },
5dd85c99 8038 /* c8 */
592d1631
L
8039 { Bad_Opcode },
8040 { Bad_Opcode },
8041 { Bad_Opcode },
bf890a93 8042 { "vphadddq", { XM, EXxmm }, 0 },
592d1631
L
8043 { Bad_Opcode },
8044 { Bad_Opcode },
8045 { Bad_Opcode },
8046 { Bad_Opcode },
5dd85c99 8047 /* d0 */
592d1631 8048 { Bad_Opcode },
bf890a93
IT
8049 { "vphaddubw", { XM, EXxmm }, 0 },
8050 { "vphaddubd", { XM, EXxmm }, 0 },
8051 { "vphaddubq", { XM, EXxmm }, 0 },
592d1631
L
8052 { Bad_Opcode },
8053 { Bad_Opcode },
bf890a93
IT
8054 { "vphadduwd", { XM, EXxmm }, 0 },
8055 { "vphadduwq", { XM, EXxmm }, 0 },
5dd85c99 8056 /* d8 */
592d1631
L
8057 { Bad_Opcode },
8058 { Bad_Opcode },
8059 { Bad_Opcode },
bf890a93 8060 { "vphaddudq", { XM, EXxmm }, 0 },
592d1631
L
8061 { Bad_Opcode },
8062 { Bad_Opcode },
8063 { Bad_Opcode },
8064 { Bad_Opcode },
5dd85c99 8065 /* e0 */
592d1631 8066 { Bad_Opcode },
bf890a93
IT
8067 { "vphsubbw", { XM, EXxmm }, 0 },
8068 { "vphsubwd", { XM, EXxmm }, 0 },
8069 { "vphsubdq", { XM, EXxmm }, 0 },
592d1631
L
8070 { Bad_Opcode },
8071 { Bad_Opcode },
8072 { Bad_Opcode },
8073 { Bad_Opcode },
4e7d34a6 8074 /* e8 */
592d1631
L
8075 { Bad_Opcode },
8076 { Bad_Opcode },
8077 { Bad_Opcode },
8078 { Bad_Opcode },
8079 { Bad_Opcode },
8080 { Bad_Opcode },
8081 { Bad_Opcode },
8082 { Bad_Opcode },
4e7d34a6 8083 /* f0 */
592d1631
L
8084 { Bad_Opcode },
8085 { Bad_Opcode },
8086 { Bad_Opcode },
8087 { Bad_Opcode },
8088 { Bad_Opcode },
8089 { Bad_Opcode },
8090 { Bad_Opcode },
8091 { Bad_Opcode },
4e7d34a6 8092 /* f8 */
592d1631
L
8093 { Bad_Opcode },
8094 { Bad_Opcode },
8095 { Bad_Opcode },
8096 { Bad_Opcode },
8097 { Bad_Opcode },
8098 { Bad_Opcode },
8099 { Bad_Opcode },
8100 { Bad_Opcode },
4e7d34a6 8101 },
f88c9eb0 8102 /* XOP_0A */
4e7d34a6
L
8103 {
8104 /* 00 */
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 /* 08 */
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 /* 10 */
bf890a93 8123 { "bextr", { Gv, Ev, Iq }, 0 },
592d1631 8124 { Bad_Opcode },
f88c9eb0 8125 { REG_TABLE (REG_XOP_LWP) },
592d1631
L
8126 { Bad_Opcode },
8127 { Bad_Opcode },
8128 { Bad_Opcode },
8129 { Bad_Opcode },
8130 { Bad_Opcode },
4e7d34a6 8131 /* 18 */
592d1631
L
8132 { Bad_Opcode },
8133 { Bad_Opcode },
8134 { Bad_Opcode },
8135 { Bad_Opcode },
8136 { Bad_Opcode },
8137 { Bad_Opcode },
8138 { Bad_Opcode },
8139 { Bad_Opcode },
4e7d34a6 8140 /* 20 */
592d1631
L
8141 { Bad_Opcode },
8142 { Bad_Opcode },
8143 { Bad_Opcode },
8144 { Bad_Opcode },
8145 { Bad_Opcode },
8146 { Bad_Opcode },
8147 { Bad_Opcode },
8148 { Bad_Opcode },
4e7d34a6 8149 /* 28 */
592d1631
L
8150 { Bad_Opcode },
8151 { Bad_Opcode },
8152 { Bad_Opcode },
8153 { Bad_Opcode },
8154 { Bad_Opcode },
8155 { Bad_Opcode },
8156 { Bad_Opcode },
8157 { Bad_Opcode },
4e7d34a6 8158 /* 30 */
592d1631
L
8159 { Bad_Opcode },
8160 { Bad_Opcode },
8161 { Bad_Opcode },
8162 { Bad_Opcode },
8163 { Bad_Opcode },
8164 { Bad_Opcode },
8165 { Bad_Opcode },
8166 { Bad_Opcode },
c0f3af97 8167 /* 38 */
592d1631
L
8168 { Bad_Opcode },
8169 { Bad_Opcode },
8170 { Bad_Opcode },
8171 { Bad_Opcode },
8172 { Bad_Opcode },
8173 { Bad_Opcode },
8174 { Bad_Opcode },
8175 { Bad_Opcode },
c0f3af97 8176 /* 40 */
592d1631
L
8177 { Bad_Opcode },
8178 { Bad_Opcode },
8179 { Bad_Opcode },
8180 { Bad_Opcode },
8181 { Bad_Opcode },
8182 { Bad_Opcode },
8183 { Bad_Opcode },
8184 { Bad_Opcode },
c1e679ec 8185 /* 48 */
592d1631
L
8186 { Bad_Opcode },
8187 { Bad_Opcode },
8188 { Bad_Opcode },
8189 { Bad_Opcode },
8190 { Bad_Opcode },
8191 { Bad_Opcode },
8192 { Bad_Opcode },
8193 { Bad_Opcode },
c1e679ec 8194 /* 50 */
592d1631
L
8195 { Bad_Opcode },
8196 { Bad_Opcode },
8197 { Bad_Opcode },
8198 { Bad_Opcode },
8199 { Bad_Opcode },
8200 { Bad_Opcode },
8201 { Bad_Opcode },
8202 { Bad_Opcode },
4e7d34a6 8203 /* 58 */
592d1631
L
8204 { Bad_Opcode },
8205 { Bad_Opcode },
8206 { Bad_Opcode },
8207 { Bad_Opcode },
8208 { Bad_Opcode },
8209 { Bad_Opcode },
8210 { Bad_Opcode },
8211 { Bad_Opcode },
4e7d34a6 8212 /* 60 */
592d1631
L
8213 { Bad_Opcode },
8214 { Bad_Opcode },
8215 { Bad_Opcode },
8216 { Bad_Opcode },
8217 { Bad_Opcode },
8218 { Bad_Opcode },
8219 { Bad_Opcode },
8220 { Bad_Opcode },
4e7d34a6 8221 /* 68 */
592d1631
L
8222 { Bad_Opcode },
8223 { Bad_Opcode },
8224 { Bad_Opcode },
8225 { Bad_Opcode },
8226 { Bad_Opcode },
8227 { Bad_Opcode },
8228 { Bad_Opcode },
8229 { Bad_Opcode },
4e7d34a6 8230 /* 70 */
592d1631
L
8231 { Bad_Opcode },
8232 { Bad_Opcode },
8233 { Bad_Opcode },
8234 { Bad_Opcode },
8235 { Bad_Opcode },
8236 { Bad_Opcode },
8237 { Bad_Opcode },
8238 { Bad_Opcode },
4e7d34a6 8239 /* 78 */
592d1631
L
8240 { Bad_Opcode },
8241 { Bad_Opcode },
8242 { Bad_Opcode },
8243 { Bad_Opcode },
8244 { Bad_Opcode },
8245 { Bad_Opcode },
8246 { Bad_Opcode },
8247 { Bad_Opcode },
4e7d34a6 8248 /* 80 */
592d1631
L
8249 { Bad_Opcode },
8250 { Bad_Opcode },
8251 { Bad_Opcode },
8252 { Bad_Opcode },
8253 { Bad_Opcode },
8254 { Bad_Opcode },
8255 { Bad_Opcode },
8256 { Bad_Opcode },
4e7d34a6 8257 /* 88 */
592d1631
L
8258 { Bad_Opcode },
8259 { Bad_Opcode },
8260 { Bad_Opcode },
8261 { Bad_Opcode },
8262 { Bad_Opcode },
8263 { Bad_Opcode },
8264 { Bad_Opcode },
8265 { Bad_Opcode },
4e7d34a6 8266 /* 90 */
592d1631
L
8267 { Bad_Opcode },
8268 { Bad_Opcode },
8269 { Bad_Opcode },
8270 { Bad_Opcode },
8271 { Bad_Opcode },
8272 { Bad_Opcode },
8273 { Bad_Opcode },
8274 { Bad_Opcode },
4e7d34a6 8275 /* 98 */
592d1631
L
8276 { Bad_Opcode },
8277 { Bad_Opcode },
8278 { Bad_Opcode },
8279 { Bad_Opcode },
8280 { Bad_Opcode },
8281 { Bad_Opcode },
8282 { Bad_Opcode },
8283 { Bad_Opcode },
4e7d34a6 8284 /* a0 */
592d1631
L
8285 { Bad_Opcode },
8286 { Bad_Opcode },
8287 { Bad_Opcode },
8288 { Bad_Opcode },
8289 { Bad_Opcode },
8290 { Bad_Opcode },
8291 { Bad_Opcode },
8292 { Bad_Opcode },
4e7d34a6 8293 /* a8 */
592d1631
L
8294 { Bad_Opcode },
8295 { Bad_Opcode },
8296 { Bad_Opcode },
8297 { Bad_Opcode },
8298 { Bad_Opcode },
8299 { Bad_Opcode },
8300 { Bad_Opcode },
8301 { Bad_Opcode },
d5d7db8e 8302 /* b0 */
592d1631
L
8303 { Bad_Opcode },
8304 { Bad_Opcode },
8305 { Bad_Opcode },
8306 { Bad_Opcode },
8307 { Bad_Opcode },
8308 { Bad_Opcode },
8309 { Bad_Opcode },
8310 { Bad_Opcode },
85f10a01 8311 /* b8 */
592d1631
L
8312 { Bad_Opcode },
8313 { Bad_Opcode },
8314 { Bad_Opcode },
8315 { Bad_Opcode },
8316 { Bad_Opcode },
8317 { Bad_Opcode },
8318 { Bad_Opcode },
8319 { Bad_Opcode },
85f10a01 8320 /* c0 */
592d1631
L
8321 { Bad_Opcode },
8322 { Bad_Opcode },
8323 { Bad_Opcode },
8324 { Bad_Opcode },
8325 { Bad_Opcode },
8326 { Bad_Opcode },
8327 { Bad_Opcode },
8328 { Bad_Opcode },
85f10a01 8329 /* c8 */
592d1631
L
8330 { Bad_Opcode },
8331 { Bad_Opcode },
8332 { Bad_Opcode },
8333 { Bad_Opcode },
8334 { Bad_Opcode },
8335 { Bad_Opcode },
8336 { Bad_Opcode },
8337 { Bad_Opcode },
85f10a01 8338 /* d0 */
592d1631
L
8339 { Bad_Opcode },
8340 { Bad_Opcode },
8341 { Bad_Opcode },
8342 { Bad_Opcode },
8343 { Bad_Opcode },
8344 { Bad_Opcode },
8345 { Bad_Opcode },
8346 { Bad_Opcode },
85f10a01 8347 /* d8 */
592d1631
L
8348 { Bad_Opcode },
8349 { Bad_Opcode },
8350 { Bad_Opcode },
8351 { Bad_Opcode },
8352 { Bad_Opcode },
8353 { Bad_Opcode },
8354 { Bad_Opcode },
8355 { Bad_Opcode },
85f10a01 8356 /* e0 */
592d1631
L
8357 { Bad_Opcode },
8358 { Bad_Opcode },
8359 { Bad_Opcode },
8360 { Bad_Opcode },
8361 { Bad_Opcode },
8362 { Bad_Opcode },
8363 { Bad_Opcode },
8364 { Bad_Opcode },
85f10a01 8365 /* e8 */
592d1631
L
8366 { Bad_Opcode },
8367 { Bad_Opcode },
8368 { Bad_Opcode },
8369 { Bad_Opcode },
8370 { Bad_Opcode },
8371 { Bad_Opcode },
8372 { Bad_Opcode },
8373 { Bad_Opcode },
85f10a01 8374 /* f0 */
592d1631
L
8375 { Bad_Opcode },
8376 { Bad_Opcode },
8377 { Bad_Opcode },
8378 { Bad_Opcode },
8379 { Bad_Opcode },
8380 { Bad_Opcode },
8381 { Bad_Opcode },
8382 { Bad_Opcode },
85f10a01 8383 /* f8 */
592d1631
L
8384 { Bad_Opcode },
8385 { Bad_Opcode },
8386 { Bad_Opcode },
8387 { Bad_Opcode },
8388 { Bad_Opcode },
8389 { Bad_Opcode },
8390 { Bad_Opcode },
8391 { Bad_Opcode },
85f10a01 8392 },
c0f3af97
L
8393};
8394
8395static const struct dis386 vex_table[][256] = {
8396 /* VEX_0F */
85f10a01
MM
8397 {
8398 /* 00 */
592d1631
L
8399 { Bad_Opcode },
8400 { Bad_Opcode },
8401 { Bad_Opcode },
8402 { Bad_Opcode },
8403 { Bad_Opcode },
8404 { Bad_Opcode },
8405 { Bad_Opcode },
8406 { Bad_Opcode },
85f10a01 8407 /* 08 */
592d1631
L
8408 { Bad_Opcode },
8409 { Bad_Opcode },
8410 { Bad_Opcode },
8411 { Bad_Opcode },
8412 { Bad_Opcode },
8413 { Bad_Opcode },
8414 { Bad_Opcode },
8415 { Bad_Opcode },
c0f3af97 8416 /* 10 */
592a252b
L
8417 { PREFIX_TABLE (PREFIX_VEX_0F10) },
8418 { PREFIX_TABLE (PREFIX_VEX_0F11) },
8419 { PREFIX_TABLE (PREFIX_VEX_0F12) },
8420 { MOD_TABLE (MOD_VEX_0F13) },
ec6f095a
L
8421 { "vunpcklpX", { XM, Vex, EXx }, 0 },
8422 { "vunpckhpX", { XM, Vex, EXx }, 0 },
592a252b
L
8423 { PREFIX_TABLE (PREFIX_VEX_0F16) },
8424 { MOD_TABLE (MOD_VEX_0F17) },
c0f3af97 8425 /* 18 */
592d1631
L
8426 { Bad_Opcode },
8427 { Bad_Opcode },
8428 { Bad_Opcode },
8429 { Bad_Opcode },
8430 { Bad_Opcode },
8431 { Bad_Opcode },
8432 { Bad_Opcode },
8433 { Bad_Opcode },
c0f3af97 8434 /* 20 */
592d1631
L
8435 { Bad_Opcode },
8436 { Bad_Opcode },
8437 { Bad_Opcode },
8438 { Bad_Opcode },
8439 { Bad_Opcode },
8440 { Bad_Opcode },
8441 { Bad_Opcode },
8442 { Bad_Opcode },
c0f3af97 8443 /* 28 */
ec6f095a
L
8444 { "vmovapX", { XM, EXx }, 0 },
8445 { "vmovapX", { EXxS, XM }, 0 },
592a252b
L
8446 { PREFIX_TABLE (PREFIX_VEX_0F2A) },
8447 { MOD_TABLE (MOD_VEX_0F2B) },
8448 { PREFIX_TABLE (PREFIX_VEX_0F2C) },
8449 { PREFIX_TABLE (PREFIX_VEX_0F2D) },
8450 { PREFIX_TABLE (PREFIX_VEX_0F2E) },
8451 { PREFIX_TABLE (PREFIX_VEX_0F2F) },
85f10a01 8452 /* 30 */
592d1631
L
8453 { Bad_Opcode },
8454 { Bad_Opcode },
8455 { Bad_Opcode },
8456 { Bad_Opcode },
8457 { Bad_Opcode },
8458 { Bad_Opcode },
8459 { Bad_Opcode },
8460 { Bad_Opcode },
4e7d34a6 8461 /* 38 */
592d1631
L
8462 { Bad_Opcode },
8463 { Bad_Opcode },
8464 { Bad_Opcode },
8465 { Bad_Opcode },
8466 { Bad_Opcode },
8467 { Bad_Opcode },
8468 { Bad_Opcode },
8469 { Bad_Opcode },
d5d7db8e 8470 /* 40 */
592d1631 8471 { Bad_Opcode },
43234a1e
L
8472 { PREFIX_TABLE (PREFIX_VEX_0F41) },
8473 { PREFIX_TABLE (PREFIX_VEX_0F42) },
592d1631 8474 { Bad_Opcode },
43234a1e
L
8475 { PREFIX_TABLE (PREFIX_VEX_0F44) },
8476 { PREFIX_TABLE (PREFIX_VEX_0F45) },
8477 { PREFIX_TABLE (PREFIX_VEX_0F46) },
8478 { PREFIX_TABLE (PREFIX_VEX_0F47) },
85f10a01 8479 /* 48 */
592d1631
L
8480 { Bad_Opcode },
8481 { Bad_Opcode },
1ba585e8 8482 { PREFIX_TABLE (PREFIX_VEX_0F4A) },
43234a1e 8483 { PREFIX_TABLE (PREFIX_VEX_0F4B) },
592d1631
L
8484 { Bad_Opcode },
8485 { Bad_Opcode },
8486 { Bad_Opcode },
8487 { Bad_Opcode },
d5d7db8e 8488 /* 50 */
592a252b
L
8489 { MOD_TABLE (MOD_VEX_0F50) },
8490 { PREFIX_TABLE (PREFIX_VEX_0F51) },
8491 { PREFIX_TABLE (PREFIX_VEX_0F52) },
8492 { PREFIX_TABLE (PREFIX_VEX_0F53) },
bf890a93
IT
8493 { "vandpX", { XM, Vex, EXx }, 0 },
8494 { "vandnpX", { XM, Vex, EXx }, 0 },
8495 { "vorpX", { XM, Vex, EXx }, 0 },
8496 { "vxorpX", { XM, Vex, EXx }, 0 },
c0f3af97 8497 /* 58 */
592a252b
L
8498 { PREFIX_TABLE (PREFIX_VEX_0F58) },
8499 { PREFIX_TABLE (PREFIX_VEX_0F59) },
8500 { PREFIX_TABLE (PREFIX_VEX_0F5A) },
8501 { PREFIX_TABLE (PREFIX_VEX_0F5B) },
8502 { PREFIX_TABLE (PREFIX_VEX_0F5C) },
8503 { PREFIX_TABLE (PREFIX_VEX_0F5D) },
8504 { PREFIX_TABLE (PREFIX_VEX_0F5E) },
8505 { PREFIX_TABLE (PREFIX_VEX_0F5F) },
c0f3af97 8506 /* 60 */
592a252b
L
8507 { PREFIX_TABLE (PREFIX_VEX_0F60) },
8508 { PREFIX_TABLE (PREFIX_VEX_0F61) },
8509 { PREFIX_TABLE (PREFIX_VEX_0F62) },
8510 { PREFIX_TABLE (PREFIX_VEX_0F63) },
8511 { PREFIX_TABLE (PREFIX_VEX_0F64) },
8512 { PREFIX_TABLE (PREFIX_VEX_0F65) },
8513 { PREFIX_TABLE (PREFIX_VEX_0F66) },
8514 { PREFIX_TABLE (PREFIX_VEX_0F67) },
c0f3af97 8515 /* 68 */
592a252b
L
8516 { PREFIX_TABLE (PREFIX_VEX_0F68) },
8517 { PREFIX_TABLE (PREFIX_VEX_0F69) },
8518 { PREFIX_TABLE (PREFIX_VEX_0F6A) },
8519 { PREFIX_TABLE (PREFIX_VEX_0F6B) },
8520 { PREFIX_TABLE (PREFIX_VEX_0F6C) },
8521 { PREFIX_TABLE (PREFIX_VEX_0F6D) },
8522 { PREFIX_TABLE (PREFIX_VEX_0F6E) },
8523 { PREFIX_TABLE (PREFIX_VEX_0F6F) },
c0f3af97 8524 /* 70 */
592a252b
L
8525 { PREFIX_TABLE (PREFIX_VEX_0F70) },
8526 { REG_TABLE (REG_VEX_0F71) },
8527 { REG_TABLE (REG_VEX_0F72) },
8528 { REG_TABLE (REG_VEX_0F73) },
8529 { PREFIX_TABLE (PREFIX_VEX_0F74) },
8530 { PREFIX_TABLE (PREFIX_VEX_0F75) },
8531 { PREFIX_TABLE (PREFIX_VEX_0F76) },
8532 { PREFIX_TABLE (PREFIX_VEX_0F77) },
c0f3af97 8533 /* 78 */
592d1631
L
8534 { Bad_Opcode },
8535 { Bad_Opcode },
8536 { Bad_Opcode },
8537 { Bad_Opcode },
592a252b
L
8538 { PREFIX_TABLE (PREFIX_VEX_0F7C) },
8539 { PREFIX_TABLE (PREFIX_VEX_0F7D) },
8540 { PREFIX_TABLE (PREFIX_VEX_0F7E) },
8541 { PREFIX_TABLE (PREFIX_VEX_0F7F) },
c0f3af97 8542 /* 80 */
592d1631
L
8543 { Bad_Opcode },
8544 { Bad_Opcode },
8545 { Bad_Opcode },
8546 { Bad_Opcode },
8547 { Bad_Opcode },
8548 { Bad_Opcode },
8549 { Bad_Opcode },
8550 { Bad_Opcode },
c0f3af97 8551 /* 88 */
592d1631
L
8552 { Bad_Opcode },
8553 { Bad_Opcode },
8554 { Bad_Opcode },
8555 { Bad_Opcode },
8556 { Bad_Opcode },
8557 { Bad_Opcode },
8558 { Bad_Opcode },
8559 { Bad_Opcode },
c0f3af97 8560 /* 90 */
43234a1e
L
8561 { PREFIX_TABLE (PREFIX_VEX_0F90) },
8562 { PREFIX_TABLE (PREFIX_VEX_0F91) },
8563 { PREFIX_TABLE (PREFIX_VEX_0F92) },
8564 { PREFIX_TABLE (PREFIX_VEX_0F93) },
592d1631
L
8565 { Bad_Opcode },
8566 { Bad_Opcode },
8567 { Bad_Opcode },
8568 { Bad_Opcode },
c0f3af97 8569 /* 98 */
43234a1e 8570 { PREFIX_TABLE (PREFIX_VEX_0F98) },
1ba585e8 8571 { PREFIX_TABLE (PREFIX_VEX_0F99) },
592d1631
L
8572 { Bad_Opcode },
8573 { Bad_Opcode },
8574 { Bad_Opcode },
8575 { Bad_Opcode },
8576 { Bad_Opcode },
8577 { Bad_Opcode },
c0f3af97 8578 /* a0 */
592d1631
L
8579 { Bad_Opcode },
8580 { Bad_Opcode },
8581 { Bad_Opcode },
8582 { Bad_Opcode },
8583 { Bad_Opcode },
8584 { Bad_Opcode },
8585 { Bad_Opcode },
8586 { Bad_Opcode },
c0f3af97 8587 /* a8 */
592d1631
L
8588 { Bad_Opcode },
8589 { Bad_Opcode },
8590 { Bad_Opcode },
8591 { Bad_Opcode },
8592 { Bad_Opcode },
8593 { Bad_Opcode },
592a252b 8594 { REG_TABLE (REG_VEX_0FAE) },
592d1631 8595 { Bad_Opcode },
c0f3af97 8596 /* b0 */
592d1631
L
8597 { Bad_Opcode },
8598 { Bad_Opcode },
8599 { Bad_Opcode },
8600 { Bad_Opcode },
8601 { Bad_Opcode },
8602 { Bad_Opcode },
8603 { Bad_Opcode },
8604 { Bad_Opcode },
c0f3af97 8605 /* b8 */
592d1631
L
8606 { Bad_Opcode },
8607 { Bad_Opcode },
8608 { Bad_Opcode },
8609 { Bad_Opcode },
8610 { Bad_Opcode },
8611 { Bad_Opcode },
8612 { Bad_Opcode },
8613 { Bad_Opcode },
c0f3af97 8614 /* c0 */
592d1631
L
8615 { Bad_Opcode },
8616 { Bad_Opcode },
592a252b 8617 { PREFIX_TABLE (PREFIX_VEX_0FC2) },
592d1631 8618 { Bad_Opcode },
592a252b
L
8619 { PREFIX_TABLE (PREFIX_VEX_0FC4) },
8620 { PREFIX_TABLE (PREFIX_VEX_0FC5) },
bf890a93 8621 { "vshufpX", { XM, Vex, EXx, Ib }, 0 },
592d1631 8622 { Bad_Opcode },
c0f3af97 8623 /* c8 */
592d1631
L
8624 { Bad_Opcode },
8625 { Bad_Opcode },
8626 { Bad_Opcode },
8627 { Bad_Opcode },
8628 { Bad_Opcode },
8629 { Bad_Opcode },
8630 { Bad_Opcode },
8631 { Bad_Opcode },
c0f3af97 8632 /* d0 */
592a252b
L
8633 { PREFIX_TABLE (PREFIX_VEX_0FD0) },
8634 { PREFIX_TABLE (PREFIX_VEX_0FD1) },
8635 { PREFIX_TABLE (PREFIX_VEX_0FD2) },
8636 { PREFIX_TABLE (PREFIX_VEX_0FD3) },
8637 { PREFIX_TABLE (PREFIX_VEX_0FD4) },
8638 { PREFIX_TABLE (PREFIX_VEX_0FD5) },
8639 { PREFIX_TABLE (PREFIX_VEX_0FD6) },
8640 { PREFIX_TABLE (PREFIX_VEX_0FD7) },
c0f3af97 8641 /* d8 */
592a252b
L
8642 { PREFIX_TABLE (PREFIX_VEX_0FD8) },
8643 { PREFIX_TABLE (PREFIX_VEX_0FD9) },
8644 { PREFIX_TABLE (PREFIX_VEX_0FDA) },
8645 { PREFIX_TABLE (PREFIX_VEX_0FDB) },
8646 { PREFIX_TABLE (PREFIX_VEX_0FDC) },
8647 { PREFIX_TABLE (PREFIX_VEX_0FDD) },
8648 { PREFIX_TABLE (PREFIX_VEX_0FDE) },
8649 { PREFIX_TABLE (PREFIX_VEX_0FDF) },
c0f3af97 8650 /* e0 */
592a252b
L
8651 { PREFIX_TABLE (PREFIX_VEX_0FE0) },
8652 { PREFIX_TABLE (PREFIX_VEX_0FE1) },
8653 { PREFIX_TABLE (PREFIX_VEX_0FE2) },
8654 { PREFIX_TABLE (PREFIX_VEX_0FE3) },
8655 { PREFIX_TABLE (PREFIX_VEX_0FE4) },
8656 { PREFIX_TABLE (PREFIX_VEX_0FE5) },
8657 { PREFIX_TABLE (PREFIX_VEX_0FE6) },
8658 { PREFIX_TABLE (PREFIX_VEX_0FE7) },
c0f3af97 8659 /* e8 */
592a252b
L
8660 { PREFIX_TABLE (PREFIX_VEX_0FE8) },
8661 { PREFIX_TABLE (PREFIX_VEX_0FE9) },
8662 { PREFIX_TABLE (PREFIX_VEX_0FEA) },
8663 { PREFIX_TABLE (PREFIX_VEX_0FEB) },
8664 { PREFIX_TABLE (PREFIX_VEX_0FEC) },
8665 { PREFIX_TABLE (PREFIX_VEX_0FED) },
8666 { PREFIX_TABLE (PREFIX_VEX_0FEE) },
8667 { PREFIX_TABLE (PREFIX_VEX_0FEF) },
c0f3af97 8668 /* f0 */
592a252b
L
8669 { PREFIX_TABLE (PREFIX_VEX_0FF0) },
8670 { PREFIX_TABLE (PREFIX_VEX_0FF1) },
8671 { PREFIX_TABLE (PREFIX_VEX_0FF2) },
8672 { PREFIX_TABLE (PREFIX_VEX_0FF3) },
8673 { PREFIX_TABLE (PREFIX_VEX_0FF4) },
8674 { PREFIX_TABLE (PREFIX_VEX_0FF5) },
8675 { PREFIX_TABLE (PREFIX_VEX_0FF6) },
8676 { PREFIX_TABLE (PREFIX_VEX_0FF7) },
c0f3af97 8677 /* f8 */
592a252b
L
8678 { PREFIX_TABLE (PREFIX_VEX_0FF8) },
8679 { PREFIX_TABLE (PREFIX_VEX_0FF9) },
8680 { PREFIX_TABLE (PREFIX_VEX_0FFA) },
8681 { PREFIX_TABLE (PREFIX_VEX_0FFB) },
8682 { PREFIX_TABLE (PREFIX_VEX_0FFC) },
8683 { PREFIX_TABLE (PREFIX_VEX_0FFD) },
8684 { PREFIX_TABLE (PREFIX_VEX_0FFE) },
592d1631 8685 { Bad_Opcode },
c0f3af97
L
8686 },
8687 /* VEX_0F38 */
8688 {
8689 /* 00 */
592a252b
L
8690 { PREFIX_TABLE (PREFIX_VEX_0F3800) },
8691 { PREFIX_TABLE (PREFIX_VEX_0F3801) },
8692 { PREFIX_TABLE (PREFIX_VEX_0F3802) },
8693 { PREFIX_TABLE (PREFIX_VEX_0F3803) },
8694 { PREFIX_TABLE (PREFIX_VEX_0F3804) },
8695 { PREFIX_TABLE (PREFIX_VEX_0F3805) },
8696 { PREFIX_TABLE (PREFIX_VEX_0F3806) },
8697 { PREFIX_TABLE (PREFIX_VEX_0F3807) },
c0f3af97 8698 /* 08 */
592a252b
L
8699 { PREFIX_TABLE (PREFIX_VEX_0F3808) },
8700 { PREFIX_TABLE (PREFIX_VEX_0F3809) },
8701 { PREFIX_TABLE (PREFIX_VEX_0F380A) },
8702 { PREFIX_TABLE (PREFIX_VEX_0F380B) },
8703 { PREFIX_TABLE (PREFIX_VEX_0F380C) },
8704 { PREFIX_TABLE (PREFIX_VEX_0F380D) },
8705 { PREFIX_TABLE (PREFIX_VEX_0F380E) },
8706 { PREFIX_TABLE (PREFIX_VEX_0F380F) },
c0f3af97 8707 /* 10 */
592d1631
L
8708 { Bad_Opcode },
8709 { Bad_Opcode },
8710 { Bad_Opcode },
592a252b 8711 { PREFIX_TABLE (PREFIX_VEX_0F3813) },
592d1631
L
8712 { Bad_Opcode },
8713 { Bad_Opcode },
6c30d220 8714 { PREFIX_TABLE (PREFIX_VEX_0F3816) },
592a252b 8715 { PREFIX_TABLE (PREFIX_VEX_0F3817) },
c0f3af97 8716 /* 18 */
592a252b
L
8717 { PREFIX_TABLE (PREFIX_VEX_0F3818) },
8718 { PREFIX_TABLE (PREFIX_VEX_0F3819) },
8719 { PREFIX_TABLE (PREFIX_VEX_0F381A) },
592d1631 8720 { Bad_Opcode },
592a252b
L
8721 { PREFIX_TABLE (PREFIX_VEX_0F381C) },
8722 { PREFIX_TABLE (PREFIX_VEX_0F381D) },
8723 { PREFIX_TABLE (PREFIX_VEX_0F381E) },
592d1631 8724 { Bad_Opcode },
c0f3af97 8725 /* 20 */
592a252b
L
8726 { PREFIX_TABLE (PREFIX_VEX_0F3820) },
8727 { PREFIX_TABLE (PREFIX_VEX_0F3821) },
8728 { PREFIX_TABLE (PREFIX_VEX_0F3822) },
8729 { PREFIX_TABLE (PREFIX_VEX_0F3823) },
8730 { PREFIX_TABLE (PREFIX_VEX_0F3824) },
8731 { PREFIX_TABLE (PREFIX_VEX_0F3825) },
592d1631
L
8732 { Bad_Opcode },
8733 { Bad_Opcode },
c0f3af97 8734 /* 28 */
592a252b
L
8735 { PREFIX_TABLE (PREFIX_VEX_0F3828) },
8736 { PREFIX_TABLE (PREFIX_VEX_0F3829) },
8737 { PREFIX_TABLE (PREFIX_VEX_0F382A) },
8738 { PREFIX_TABLE (PREFIX_VEX_0F382B) },
8739 { PREFIX_TABLE (PREFIX_VEX_0F382C) },
8740 { PREFIX_TABLE (PREFIX_VEX_0F382D) },
8741 { PREFIX_TABLE (PREFIX_VEX_0F382E) },
8742 { PREFIX_TABLE (PREFIX_VEX_0F382F) },
c0f3af97 8743 /* 30 */
592a252b
L
8744 { PREFIX_TABLE (PREFIX_VEX_0F3830) },
8745 { PREFIX_TABLE (PREFIX_VEX_0F3831) },
8746 { PREFIX_TABLE (PREFIX_VEX_0F3832) },
8747 { PREFIX_TABLE (PREFIX_VEX_0F3833) },
8748 { PREFIX_TABLE (PREFIX_VEX_0F3834) },
8749 { PREFIX_TABLE (PREFIX_VEX_0F3835) },
6c30d220 8750 { PREFIX_TABLE (PREFIX_VEX_0F3836) },
592a252b 8751 { PREFIX_TABLE (PREFIX_VEX_0F3837) },
c0f3af97 8752 /* 38 */
592a252b
L
8753 { PREFIX_TABLE (PREFIX_VEX_0F3838) },
8754 { PREFIX_TABLE (PREFIX_VEX_0F3839) },
8755 { PREFIX_TABLE (PREFIX_VEX_0F383A) },
8756 { PREFIX_TABLE (PREFIX_VEX_0F383B) },
8757 { PREFIX_TABLE (PREFIX_VEX_0F383C) },
8758 { PREFIX_TABLE (PREFIX_VEX_0F383D) },
8759 { PREFIX_TABLE (PREFIX_VEX_0F383E) },
8760 { PREFIX_TABLE (PREFIX_VEX_0F383F) },
c0f3af97 8761 /* 40 */
592a252b
L
8762 { PREFIX_TABLE (PREFIX_VEX_0F3840) },
8763 { PREFIX_TABLE (PREFIX_VEX_0F3841) },
592d1631
L
8764 { Bad_Opcode },
8765 { Bad_Opcode },
8766 { Bad_Opcode },
6c30d220
L
8767 { PREFIX_TABLE (PREFIX_VEX_0F3845) },
8768 { PREFIX_TABLE (PREFIX_VEX_0F3846) },
8769 { PREFIX_TABLE (PREFIX_VEX_0F3847) },
c0f3af97 8770 /* 48 */
592d1631
L
8771 { Bad_Opcode },
8772 { Bad_Opcode },
8773 { Bad_Opcode },
8774 { Bad_Opcode },
8775 { Bad_Opcode },
8776 { Bad_Opcode },
8777 { Bad_Opcode },
8778 { Bad_Opcode },
c0f3af97 8779 /* 50 */
592d1631
L
8780 { Bad_Opcode },
8781 { Bad_Opcode },
8782 { Bad_Opcode },
8783 { Bad_Opcode },
8784 { Bad_Opcode },
8785 { Bad_Opcode },
8786 { Bad_Opcode },
8787 { Bad_Opcode },
c0f3af97 8788 /* 58 */
6c30d220
L
8789 { PREFIX_TABLE (PREFIX_VEX_0F3858) },
8790 { PREFIX_TABLE (PREFIX_VEX_0F3859) },
8791 { PREFIX_TABLE (PREFIX_VEX_0F385A) },
592d1631
L
8792 { Bad_Opcode },
8793 { Bad_Opcode },
8794 { Bad_Opcode },
8795 { Bad_Opcode },
8796 { Bad_Opcode },
c0f3af97 8797 /* 60 */
592d1631
L
8798 { Bad_Opcode },
8799 { Bad_Opcode },
8800 { Bad_Opcode },
8801 { Bad_Opcode },
8802 { Bad_Opcode },
8803 { Bad_Opcode },
8804 { Bad_Opcode },
8805 { Bad_Opcode },
c0f3af97 8806 /* 68 */
592d1631
L
8807 { Bad_Opcode },
8808 { Bad_Opcode },
8809 { Bad_Opcode },
8810 { Bad_Opcode },
8811 { Bad_Opcode },
8812 { Bad_Opcode },
8813 { Bad_Opcode },
8814 { Bad_Opcode },
c0f3af97 8815 /* 70 */
592d1631
L
8816 { Bad_Opcode },
8817 { Bad_Opcode },
8818 { Bad_Opcode },
8819 { Bad_Opcode },
8820 { Bad_Opcode },
8821 { Bad_Opcode },
8822 { Bad_Opcode },
8823 { Bad_Opcode },
c0f3af97 8824 /* 78 */
6c30d220
L
8825 { PREFIX_TABLE (PREFIX_VEX_0F3878) },
8826 { PREFIX_TABLE (PREFIX_VEX_0F3879) },
592d1631
L
8827 { Bad_Opcode },
8828 { Bad_Opcode },
8829 { Bad_Opcode },
8830 { Bad_Opcode },
8831 { Bad_Opcode },
8832 { Bad_Opcode },
c0f3af97 8833 /* 80 */
592d1631
L
8834 { Bad_Opcode },
8835 { Bad_Opcode },
8836 { Bad_Opcode },
8837 { Bad_Opcode },
8838 { Bad_Opcode },
8839 { Bad_Opcode },
8840 { Bad_Opcode },
8841 { Bad_Opcode },
c0f3af97 8842 /* 88 */
592d1631
L
8843 { Bad_Opcode },
8844 { Bad_Opcode },
8845 { Bad_Opcode },
8846 { Bad_Opcode },
6c30d220 8847 { PREFIX_TABLE (PREFIX_VEX_0F388C) },
592d1631 8848 { Bad_Opcode },
6c30d220 8849 { PREFIX_TABLE (PREFIX_VEX_0F388E) },
592d1631 8850 { Bad_Opcode },
c0f3af97 8851 /* 90 */
6c30d220
L
8852 { PREFIX_TABLE (PREFIX_VEX_0F3890) },
8853 { PREFIX_TABLE (PREFIX_VEX_0F3891) },
8854 { PREFIX_TABLE (PREFIX_VEX_0F3892) },
8855 { PREFIX_TABLE (PREFIX_VEX_0F3893) },
592d1631
L
8856 { Bad_Opcode },
8857 { Bad_Opcode },
592a252b
L
8858 { PREFIX_TABLE (PREFIX_VEX_0F3896) },
8859 { PREFIX_TABLE (PREFIX_VEX_0F3897) },
c0f3af97 8860 /* 98 */
592a252b
L
8861 { PREFIX_TABLE (PREFIX_VEX_0F3898) },
8862 { PREFIX_TABLE (PREFIX_VEX_0F3899) },
8863 { PREFIX_TABLE (PREFIX_VEX_0F389A) },
8864 { PREFIX_TABLE (PREFIX_VEX_0F389B) },
8865 { PREFIX_TABLE (PREFIX_VEX_0F389C) },
8866 { PREFIX_TABLE (PREFIX_VEX_0F389D) },
8867 { PREFIX_TABLE (PREFIX_VEX_0F389E) },
8868 { PREFIX_TABLE (PREFIX_VEX_0F389F) },
c0f3af97 8869 /* a0 */
592d1631
L
8870 { Bad_Opcode },
8871 { Bad_Opcode },
8872 { Bad_Opcode },
8873 { Bad_Opcode },
8874 { Bad_Opcode },
8875 { Bad_Opcode },
592a252b
L
8876 { PREFIX_TABLE (PREFIX_VEX_0F38A6) },
8877 { PREFIX_TABLE (PREFIX_VEX_0F38A7) },
c0f3af97 8878 /* a8 */
592a252b
L
8879 { PREFIX_TABLE (PREFIX_VEX_0F38A8) },
8880 { PREFIX_TABLE (PREFIX_VEX_0F38A9) },
8881 { PREFIX_TABLE (PREFIX_VEX_0F38AA) },
8882 { PREFIX_TABLE (PREFIX_VEX_0F38AB) },
8883 { PREFIX_TABLE (PREFIX_VEX_0F38AC) },
8884 { PREFIX_TABLE (PREFIX_VEX_0F38AD) },
8885 { PREFIX_TABLE (PREFIX_VEX_0F38AE) },
8886 { PREFIX_TABLE (PREFIX_VEX_0F38AF) },
c0f3af97 8887 /* b0 */
592d1631
L
8888 { Bad_Opcode },
8889 { Bad_Opcode },
8890 { Bad_Opcode },
8891 { Bad_Opcode },
8892 { Bad_Opcode },
8893 { Bad_Opcode },
592a252b
L
8894 { PREFIX_TABLE (PREFIX_VEX_0F38B6) },
8895 { PREFIX_TABLE (PREFIX_VEX_0F38B7) },
c0f3af97 8896 /* b8 */
592a252b
L
8897 { PREFIX_TABLE (PREFIX_VEX_0F38B8) },
8898 { PREFIX_TABLE (PREFIX_VEX_0F38B9) },
8899 { PREFIX_TABLE (PREFIX_VEX_0F38BA) },
8900 { PREFIX_TABLE (PREFIX_VEX_0F38BB) },
8901 { PREFIX_TABLE (PREFIX_VEX_0F38BC) },
8902 { PREFIX_TABLE (PREFIX_VEX_0F38BD) },
8903 { PREFIX_TABLE (PREFIX_VEX_0F38BE) },
8904 { PREFIX_TABLE (PREFIX_VEX_0F38BF) },
c0f3af97 8905 /* c0 */
592d1631
L
8906 { Bad_Opcode },
8907 { Bad_Opcode },
8908 { Bad_Opcode },
8909 { Bad_Opcode },
8910 { Bad_Opcode },
8911 { Bad_Opcode },
8912 { Bad_Opcode },
8913 { Bad_Opcode },
c0f3af97 8914 /* c8 */
592d1631
L
8915 { Bad_Opcode },
8916 { Bad_Opcode },
8917 { Bad_Opcode },
8918 { Bad_Opcode },
8919 { Bad_Opcode },
8920 { Bad_Opcode },
8921 { Bad_Opcode },
48521003 8922 { PREFIX_TABLE (PREFIX_VEX_0F38CF) },
c0f3af97 8923 /* d0 */
592d1631
L
8924 { Bad_Opcode },
8925 { Bad_Opcode },
8926 { Bad_Opcode },
8927 { Bad_Opcode },
8928 { Bad_Opcode },
8929 { Bad_Opcode },
8930 { Bad_Opcode },
8931 { Bad_Opcode },
c0f3af97 8932 /* d8 */
592d1631
L
8933 { Bad_Opcode },
8934 { Bad_Opcode },
8935 { Bad_Opcode },
592a252b
L
8936 { PREFIX_TABLE (PREFIX_VEX_0F38DB) },
8937 { PREFIX_TABLE (PREFIX_VEX_0F38DC) },
8938 { PREFIX_TABLE (PREFIX_VEX_0F38DD) },
8939 { PREFIX_TABLE (PREFIX_VEX_0F38DE) },
8940 { PREFIX_TABLE (PREFIX_VEX_0F38DF) },
c0f3af97 8941 /* e0 */
592d1631
L
8942 { Bad_Opcode },
8943 { Bad_Opcode },
8944 { Bad_Opcode },
8945 { Bad_Opcode },
8946 { Bad_Opcode },
8947 { Bad_Opcode },
8948 { Bad_Opcode },
8949 { Bad_Opcode },
c0f3af97 8950 /* e8 */
592d1631
L
8951 { Bad_Opcode },
8952 { Bad_Opcode },
8953 { Bad_Opcode },
8954 { Bad_Opcode },
8955 { Bad_Opcode },
8956 { Bad_Opcode },
8957 { Bad_Opcode },
8958 { Bad_Opcode },
c0f3af97 8959 /* f0 */
592d1631
L
8960 { Bad_Opcode },
8961 { Bad_Opcode },
f12dc422
L
8962 { PREFIX_TABLE (PREFIX_VEX_0F38F2) },
8963 { REG_TABLE (REG_VEX_0F38F3) },
592d1631 8964 { Bad_Opcode },
6c30d220
L
8965 { PREFIX_TABLE (PREFIX_VEX_0F38F5) },
8966 { PREFIX_TABLE (PREFIX_VEX_0F38F6) },
f12dc422 8967 { PREFIX_TABLE (PREFIX_VEX_0F38F7) },
c0f3af97 8968 /* f8 */
592d1631
L
8969 { Bad_Opcode },
8970 { Bad_Opcode },
8971 { Bad_Opcode },
8972 { Bad_Opcode },
8973 { Bad_Opcode },
8974 { Bad_Opcode },
8975 { Bad_Opcode },
8976 { Bad_Opcode },
c0f3af97
L
8977 },
8978 /* VEX_0F3A */
8979 {
8980 /* 00 */
6c30d220
L
8981 { PREFIX_TABLE (PREFIX_VEX_0F3A00) },
8982 { PREFIX_TABLE (PREFIX_VEX_0F3A01) },
8983 { PREFIX_TABLE (PREFIX_VEX_0F3A02) },
592d1631 8984 { Bad_Opcode },
592a252b
L
8985 { PREFIX_TABLE (PREFIX_VEX_0F3A04) },
8986 { PREFIX_TABLE (PREFIX_VEX_0F3A05) },
8987 { PREFIX_TABLE (PREFIX_VEX_0F3A06) },
592d1631 8988 { Bad_Opcode },
c0f3af97 8989 /* 08 */
592a252b
L
8990 { PREFIX_TABLE (PREFIX_VEX_0F3A08) },
8991 { PREFIX_TABLE (PREFIX_VEX_0F3A09) },
8992 { PREFIX_TABLE (PREFIX_VEX_0F3A0A) },
8993 { PREFIX_TABLE (PREFIX_VEX_0F3A0B) },
8994 { PREFIX_TABLE (PREFIX_VEX_0F3A0C) },
8995 { PREFIX_TABLE (PREFIX_VEX_0F3A0D) },
8996 { PREFIX_TABLE (PREFIX_VEX_0F3A0E) },
8997 { PREFIX_TABLE (PREFIX_VEX_0F3A0F) },
c0f3af97 8998 /* 10 */
592d1631
L
8999 { Bad_Opcode },
9000 { Bad_Opcode },
9001 { Bad_Opcode },
9002 { Bad_Opcode },
592a252b
L
9003 { PREFIX_TABLE (PREFIX_VEX_0F3A14) },
9004 { PREFIX_TABLE (PREFIX_VEX_0F3A15) },
9005 { PREFIX_TABLE (PREFIX_VEX_0F3A16) },
9006 { PREFIX_TABLE (PREFIX_VEX_0F3A17) },
c0f3af97 9007 /* 18 */
592a252b
L
9008 { PREFIX_TABLE (PREFIX_VEX_0F3A18) },
9009 { PREFIX_TABLE (PREFIX_VEX_0F3A19) },
592d1631
L
9010 { Bad_Opcode },
9011 { Bad_Opcode },
9012 { Bad_Opcode },
592a252b 9013 { PREFIX_TABLE (PREFIX_VEX_0F3A1D) },
592d1631
L
9014 { Bad_Opcode },
9015 { Bad_Opcode },
c0f3af97 9016 /* 20 */
592a252b
L
9017 { PREFIX_TABLE (PREFIX_VEX_0F3A20) },
9018 { PREFIX_TABLE (PREFIX_VEX_0F3A21) },
9019 { PREFIX_TABLE (PREFIX_VEX_0F3A22) },
592d1631
L
9020 { Bad_Opcode },
9021 { Bad_Opcode },
9022 { Bad_Opcode },
9023 { Bad_Opcode },
9024 { Bad_Opcode },
c0f3af97 9025 /* 28 */
592d1631
L
9026 { Bad_Opcode },
9027 { Bad_Opcode },
9028 { Bad_Opcode },
9029 { Bad_Opcode },
9030 { Bad_Opcode },
9031 { Bad_Opcode },
9032 { Bad_Opcode },
9033 { Bad_Opcode },
c0f3af97 9034 /* 30 */
43234a1e 9035 { PREFIX_TABLE (PREFIX_VEX_0F3A30) },
1ba585e8 9036 { PREFIX_TABLE (PREFIX_VEX_0F3A31) },
43234a1e 9037 { PREFIX_TABLE (PREFIX_VEX_0F3A32) },
1ba585e8 9038 { PREFIX_TABLE (PREFIX_VEX_0F3A33) },
592d1631
L
9039 { Bad_Opcode },
9040 { Bad_Opcode },
9041 { Bad_Opcode },
9042 { Bad_Opcode },
c0f3af97 9043 /* 38 */
6c30d220
L
9044 { PREFIX_TABLE (PREFIX_VEX_0F3A38) },
9045 { PREFIX_TABLE (PREFIX_VEX_0F3A39) },
592d1631
L
9046 { Bad_Opcode },
9047 { Bad_Opcode },
9048 { Bad_Opcode },
9049 { Bad_Opcode },
9050 { Bad_Opcode },
9051 { Bad_Opcode },
c0f3af97 9052 /* 40 */
592a252b
L
9053 { PREFIX_TABLE (PREFIX_VEX_0F3A40) },
9054 { PREFIX_TABLE (PREFIX_VEX_0F3A41) },
9055 { PREFIX_TABLE (PREFIX_VEX_0F3A42) },
592d1631 9056 { Bad_Opcode },
592a252b 9057 { PREFIX_TABLE (PREFIX_VEX_0F3A44) },
592d1631 9058 { Bad_Opcode },
6c30d220 9059 { PREFIX_TABLE (PREFIX_VEX_0F3A46) },
592d1631 9060 { Bad_Opcode },
c0f3af97 9061 /* 48 */
592a252b
L
9062 { PREFIX_TABLE (PREFIX_VEX_0F3A48) },
9063 { PREFIX_TABLE (PREFIX_VEX_0F3A49) },
9064 { PREFIX_TABLE (PREFIX_VEX_0F3A4A) },
9065 { PREFIX_TABLE (PREFIX_VEX_0F3A4B) },
9066 { PREFIX_TABLE (PREFIX_VEX_0F3A4C) },
592d1631
L
9067 { Bad_Opcode },
9068 { Bad_Opcode },
9069 { Bad_Opcode },
c0f3af97 9070 /* 50 */
592d1631
L
9071 { Bad_Opcode },
9072 { Bad_Opcode },
9073 { Bad_Opcode },
9074 { Bad_Opcode },
9075 { Bad_Opcode },
9076 { Bad_Opcode },
9077 { Bad_Opcode },
9078 { Bad_Opcode },
c0f3af97 9079 /* 58 */
592d1631
L
9080 { Bad_Opcode },
9081 { Bad_Opcode },
9082 { Bad_Opcode },
9083 { Bad_Opcode },
592a252b
L
9084 { PREFIX_TABLE (PREFIX_VEX_0F3A5C) },
9085 { PREFIX_TABLE (PREFIX_VEX_0F3A5D) },
9086 { PREFIX_TABLE (PREFIX_VEX_0F3A5E) },
9087 { PREFIX_TABLE (PREFIX_VEX_0F3A5F) },
c0f3af97 9088 /* 60 */
592a252b
L
9089 { PREFIX_TABLE (PREFIX_VEX_0F3A60) },
9090 { PREFIX_TABLE (PREFIX_VEX_0F3A61) },
9091 { PREFIX_TABLE (PREFIX_VEX_0F3A62) },
9092 { PREFIX_TABLE (PREFIX_VEX_0F3A63) },
592d1631
L
9093 { Bad_Opcode },
9094 { Bad_Opcode },
9095 { Bad_Opcode },
9096 { Bad_Opcode },
c0f3af97 9097 /* 68 */
592a252b
L
9098 { PREFIX_TABLE (PREFIX_VEX_0F3A68) },
9099 { PREFIX_TABLE (PREFIX_VEX_0F3A69) },
9100 { PREFIX_TABLE (PREFIX_VEX_0F3A6A) },
9101 { PREFIX_TABLE (PREFIX_VEX_0F3A6B) },
9102 { PREFIX_TABLE (PREFIX_VEX_0F3A6C) },
9103 { PREFIX_TABLE (PREFIX_VEX_0F3A6D) },
9104 { PREFIX_TABLE (PREFIX_VEX_0F3A6E) },
9105 { PREFIX_TABLE (PREFIX_VEX_0F3A6F) },
c0f3af97 9106 /* 70 */
592d1631
L
9107 { Bad_Opcode },
9108 { Bad_Opcode },
9109 { Bad_Opcode },
9110 { Bad_Opcode },
9111 { Bad_Opcode },
9112 { Bad_Opcode },
9113 { Bad_Opcode },
9114 { Bad_Opcode },
c0f3af97 9115 /* 78 */
592a252b
L
9116 { PREFIX_TABLE (PREFIX_VEX_0F3A78) },
9117 { PREFIX_TABLE (PREFIX_VEX_0F3A79) },
9118 { PREFIX_TABLE (PREFIX_VEX_0F3A7A) },
9119 { PREFIX_TABLE (PREFIX_VEX_0F3A7B) },
9120 { PREFIX_TABLE (PREFIX_VEX_0F3A7C) },
9121 { PREFIX_TABLE (PREFIX_VEX_0F3A7D) },
9122 { PREFIX_TABLE (PREFIX_VEX_0F3A7E) },
9123 { PREFIX_TABLE (PREFIX_VEX_0F3A7F) },
c0f3af97 9124 /* 80 */
592d1631
L
9125 { Bad_Opcode },
9126 { Bad_Opcode },
9127 { Bad_Opcode },
9128 { Bad_Opcode },
9129 { Bad_Opcode },
9130 { Bad_Opcode },
9131 { Bad_Opcode },
9132 { Bad_Opcode },
c0f3af97 9133 /* 88 */
592d1631
L
9134 { Bad_Opcode },
9135 { Bad_Opcode },
9136 { Bad_Opcode },
9137 { Bad_Opcode },
9138 { Bad_Opcode },
9139 { Bad_Opcode },
9140 { Bad_Opcode },
9141 { Bad_Opcode },
c0f3af97 9142 /* 90 */
592d1631
L
9143 { Bad_Opcode },
9144 { Bad_Opcode },
9145 { Bad_Opcode },
9146 { Bad_Opcode },
9147 { Bad_Opcode },
9148 { Bad_Opcode },
9149 { Bad_Opcode },
9150 { Bad_Opcode },
c0f3af97 9151 /* 98 */
592d1631
L
9152 { Bad_Opcode },
9153 { Bad_Opcode },
9154 { Bad_Opcode },
9155 { Bad_Opcode },
9156 { Bad_Opcode },
9157 { Bad_Opcode },
9158 { Bad_Opcode },
9159 { Bad_Opcode },
c0f3af97 9160 /* a0 */
592d1631
L
9161 { Bad_Opcode },
9162 { Bad_Opcode },
9163 { Bad_Opcode },
9164 { Bad_Opcode },
9165 { Bad_Opcode },
9166 { Bad_Opcode },
9167 { Bad_Opcode },
9168 { Bad_Opcode },
c0f3af97 9169 /* a8 */
592d1631
L
9170 { Bad_Opcode },
9171 { Bad_Opcode },
9172 { Bad_Opcode },
9173 { Bad_Opcode },
9174 { Bad_Opcode },
9175 { Bad_Opcode },
9176 { Bad_Opcode },
9177 { Bad_Opcode },
c0f3af97 9178 /* b0 */
592d1631
L
9179 { Bad_Opcode },
9180 { Bad_Opcode },
9181 { Bad_Opcode },
9182 { Bad_Opcode },
9183 { Bad_Opcode },
9184 { Bad_Opcode },
9185 { Bad_Opcode },
9186 { Bad_Opcode },
c0f3af97 9187 /* b8 */
592d1631
L
9188 { Bad_Opcode },
9189 { Bad_Opcode },
9190 { Bad_Opcode },
9191 { Bad_Opcode },
9192 { Bad_Opcode },
9193 { Bad_Opcode },
9194 { Bad_Opcode },
9195 { Bad_Opcode },
c0f3af97 9196 /* c0 */
592d1631
L
9197 { Bad_Opcode },
9198 { Bad_Opcode },
9199 { Bad_Opcode },
9200 { Bad_Opcode },
9201 { Bad_Opcode },
9202 { Bad_Opcode },
9203 { Bad_Opcode },
9204 { Bad_Opcode },
c0f3af97 9205 /* c8 */
592d1631
L
9206 { Bad_Opcode },
9207 { Bad_Opcode },
9208 { Bad_Opcode },
9209 { Bad_Opcode },
9210 { Bad_Opcode },
9211 { Bad_Opcode },
48521003
IT
9212 { PREFIX_TABLE(PREFIX_VEX_0F3ACE) },
9213 { PREFIX_TABLE(PREFIX_VEX_0F3ACF) },
c0f3af97 9214 /* d0 */
592d1631
L
9215 { Bad_Opcode },
9216 { Bad_Opcode },
9217 { Bad_Opcode },
9218 { Bad_Opcode },
9219 { Bad_Opcode },
9220 { Bad_Opcode },
9221 { Bad_Opcode },
9222 { Bad_Opcode },
c0f3af97 9223 /* d8 */
592d1631
L
9224 { Bad_Opcode },
9225 { Bad_Opcode },
9226 { Bad_Opcode },
9227 { Bad_Opcode },
9228 { Bad_Opcode },
9229 { Bad_Opcode },
9230 { Bad_Opcode },
592a252b 9231 { PREFIX_TABLE (PREFIX_VEX_0F3ADF) },
c0f3af97 9232 /* e0 */
592d1631
L
9233 { Bad_Opcode },
9234 { Bad_Opcode },
9235 { Bad_Opcode },
9236 { Bad_Opcode },
9237 { Bad_Opcode },
9238 { Bad_Opcode },
9239 { Bad_Opcode },
9240 { Bad_Opcode },
c0f3af97 9241 /* e8 */
592d1631
L
9242 { Bad_Opcode },
9243 { Bad_Opcode },
9244 { Bad_Opcode },
9245 { Bad_Opcode },
9246 { Bad_Opcode },
9247 { Bad_Opcode },
9248 { Bad_Opcode },
9249 { Bad_Opcode },
c0f3af97 9250 /* f0 */
6c30d220 9251 { PREFIX_TABLE (PREFIX_VEX_0F3AF0) },
592d1631
L
9252 { Bad_Opcode },
9253 { Bad_Opcode },
9254 { Bad_Opcode },
9255 { Bad_Opcode },
9256 { Bad_Opcode },
9257 { Bad_Opcode },
9258 { Bad_Opcode },
c0f3af97 9259 /* f8 */
592d1631
L
9260 { Bad_Opcode },
9261 { Bad_Opcode },
9262 { Bad_Opcode },
9263 { Bad_Opcode },
9264 { Bad_Opcode },
9265 { Bad_Opcode },
9266 { Bad_Opcode },
9267 { Bad_Opcode },
c0f3af97
L
9268 },
9269};
9270
43234a1e
L
9271#define NEED_OPCODE_TABLE
9272#include "i386-dis-evex.h"
9273#undef NEED_OPCODE_TABLE
c0f3af97 9274static const struct dis386 vex_len_table[][2] = {
592a252b 9275 /* VEX_LEN_0F12_P_0_M_0 */
c0f3af97 9276 {
ec6f095a 9277 { "vmovlps", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9278 },
9279
592a252b 9280 /* VEX_LEN_0F12_P_0_M_1 */
c0f3af97 9281 {
ec6f095a 9282 { "vmovhlps", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9283 },
9284
592a252b 9285 /* VEX_LEN_0F12_P_2 */
c0f3af97 9286 {
ec6f095a 9287 { "vmovlpd", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9288 },
9289
592a252b 9290 /* VEX_LEN_0F13_M_0 */
c0f3af97 9291 {
ec6f095a 9292 { "vmovlpX", { EXq, XM }, 0 },
c0f3af97
L
9293 },
9294
592a252b 9295 /* VEX_LEN_0F16_P_0_M_0 */
c0f3af97 9296 {
ec6f095a 9297 { "vmovhps", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9298 },
9299
592a252b 9300 /* VEX_LEN_0F16_P_0_M_1 */
c0f3af97 9301 {
ec6f095a 9302 { "vmovlhps", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9303 },
9304
592a252b 9305 /* VEX_LEN_0F16_P_2 */
c0f3af97 9306 {
ec6f095a 9307 { "vmovhpd", { XM, Vex128, EXq }, 0 },
c0f3af97
L
9308 },
9309
592a252b 9310 /* VEX_LEN_0F17_M_0 */
c0f3af97 9311 {
ec6f095a 9312 { "vmovhpX", { EXq, XM }, 0 },
c0f3af97
L
9313 },
9314
592a252b 9315 /* VEX_LEN_0F2A_P_1 */
c0f3af97 9316 {
bf890a93
IT
9317 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev }, 0 },
9318 { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev }, 0 },
c0f3af97
L
9319 },
9320
592a252b 9321 /* VEX_LEN_0F2A_P_3 */
c0f3af97 9322 {
bf890a93
IT
9323 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev }, 0 },
9324 { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev }, 0 },
c0f3af97
L
9325 },
9326
592a252b 9327 /* VEX_LEN_0F2C_P_1 */
c0f3af97 9328 {
9646c87b
JB
9329 { "vcvttss2si", { Gv, EXdScalar }, 0 },
9330 { "vcvttss2si", { Gv, EXdScalar }, 0 },
c0f3af97
L
9331 },
9332
592a252b 9333 /* VEX_LEN_0F2C_P_3 */
c0f3af97 9334 {
9646c87b
JB
9335 { "vcvttsd2si", { Gv, EXqScalar }, 0 },
9336 { "vcvttsd2si", { Gv, EXqScalar }, 0 },
c0f3af97
L
9337 },
9338
592a252b 9339 /* VEX_LEN_0F2D_P_1 */
c0f3af97 9340 {
9646c87b
JB
9341 { "vcvtss2si", { Gv, EXdScalar }, 0 },
9342 { "vcvtss2si", { Gv, EXdScalar }, 0 },
c0f3af97
L
9343 },
9344
592a252b 9345 /* VEX_LEN_0F2D_P_3 */
c0f3af97 9346 {
9646c87b
JB
9347 { "vcvtsd2si", { Gv, EXqScalar }, 0 },
9348 { "vcvtsd2si", { Gv, EXqScalar }, 0 },
c0f3af97
L
9349 },
9350
43234a1e
L
9351 /* VEX_LEN_0F41_P_0 */
9352 {
9353 { Bad_Opcode },
9354 { VEX_W_TABLE (VEX_W_0F41_P_0_LEN_1) },
9355 },
1ba585e8
IT
9356 /* VEX_LEN_0F41_P_2 */
9357 {
9358 { Bad_Opcode },
9359 { VEX_W_TABLE (VEX_W_0F41_P_2_LEN_1) },
9360 },
43234a1e
L
9361 /* VEX_LEN_0F42_P_0 */
9362 {
9363 { Bad_Opcode },
9364 { VEX_W_TABLE (VEX_W_0F42_P_0_LEN_1) },
9365 },
1ba585e8
IT
9366 /* VEX_LEN_0F42_P_2 */
9367 {
9368 { Bad_Opcode },
9369 { VEX_W_TABLE (VEX_W_0F42_P_2_LEN_1) },
9370 },
43234a1e
L
9371 /* VEX_LEN_0F44_P_0 */
9372 {
9373 { VEX_W_TABLE (VEX_W_0F44_P_0_LEN_0) },
9374 },
1ba585e8
IT
9375 /* VEX_LEN_0F44_P_2 */
9376 {
9377 { VEX_W_TABLE (VEX_W_0F44_P_2_LEN_0) },
9378 },
43234a1e
L
9379 /* VEX_LEN_0F45_P_0 */
9380 {
9381 { Bad_Opcode },
9382 { VEX_W_TABLE (VEX_W_0F45_P_0_LEN_1) },
9383 },
1ba585e8
IT
9384 /* VEX_LEN_0F45_P_2 */
9385 {
9386 { Bad_Opcode },
9387 { VEX_W_TABLE (VEX_W_0F45_P_2_LEN_1) },
9388 },
43234a1e
L
9389 /* VEX_LEN_0F46_P_0 */
9390 {
9391 { Bad_Opcode },
9392 { VEX_W_TABLE (VEX_W_0F46_P_0_LEN_1) },
9393 },
1ba585e8
IT
9394 /* VEX_LEN_0F46_P_2 */
9395 {
9396 { Bad_Opcode },
9397 { VEX_W_TABLE (VEX_W_0F46_P_2_LEN_1) },
9398 },
43234a1e
L
9399 /* VEX_LEN_0F47_P_0 */
9400 {
9401 { Bad_Opcode },
9402 { VEX_W_TABLE (VEX_W_0F47_P_0_LEN_1) },
9403 },
1ba585e8
IT
9404 /* VEX_LEN_0F47_P_2 */
9405 {
9406 { Bad_Opcode },
9407 { VEX_W_TABLE (VEX_W_0F47_P_2_LEN_1) },
9408 },
9409 /* VEX_LEN_0F4A_P_0 */
9410 {
9411 { Bad_Opcode },
9412 { VEX_W_TABLE (VEX_W_0F4A_P_0_LEN_1) },
9413 },
9414 /* VEX_LEN_0F4A_P_2 */
9415 {
9416 { Bad_Opcode },
9417 { VEX_W_TABLE (VEX_W_0F4A_P_2_LEN_1) },
9418 },
9419 /* VEX_LEN_0F4B_P_0 */
9420 {
9421 { Bad_Opcode },
9422 { VEX_W_TABLE (VEX_W_0F4B_P_0_LEN_1) },
9423 },
43234a1e
L
9424 /* VEX_LEN_0F4B_P_2 */
9425 {
9426 { Bad_Opcode },
9427 { VEX_W_TABLE (VEX_W_0F4B_P_2_LEN_1) },
9428 },
9429
ec6f095a 9430 /* VEX_LEN_0F6E_P_2 */
c0f3af97 9431 {
ec6f095a 9432 { "vmovK", { XMScalar, Edq }, 0 },
c0f3af97
L
9433 },
9434
ec6f095a 9435 /* VEX_LEN_0F77_P_1 */
c0f3af97 9436 {
ec6f095a
L
9437 { "vzeroupper", { XX }, 0 },
9438 { "vzeroall", { XX }, 0 },
c0f3af97
L
9439 },
9440
ec6f095a 9441 /* VEX_LEN_0F7E_P_1 */
c0f3af97 9442 {
ec6f095a 9443 { "vmovq", { XMScalar, EXqScalar }, 0 },
c0f3af97
L
9444 },
9445
ec6f095a 9446 /* VEX_LEN_0F7E_P_2 */
c0f3af97 9447 {
ec6f095a 9448 { "vmovK", { Edq, XMScalar }, 0 },
c0f3af97
L
9449 },
9450
ec6f095a 9451 /* VEX_LEN_0F90_P_0 */
c0f3af97 9452 {
ec6f095a 9453 { VEX_W_TABLE (VEX_W_0F90_P_0_LEN_0) },
c0f3af97
L
9454 },
9455
ec6f095a 9456 /* VEX_LEN_0F90_P_2 */
c0f3af97 9457 {
ec6f095a 9458 { VEX_W_TABLE (VEX_W_0F90_P_2_LEN_0) },
c0f3af97
L
9459 },
9460
ec6f095a 9461 /* VEX_LEN_0F91_P_0 */
c0f3af97 9462 {
ec6f095a 9463 { VEX_W_TABLE (VEX_W_0F91_P_0_LEN_0) },
c0f3af97
L
9464 },
9465
ec6f095a 9466 /* VEX_LEN_0F91_P_2 */
c0f3af97 9467 {
ec6f095a 9468 { VEX_W_TABLE (VEX_W_0F91_P_2_LEN_0) },
c0f3af97
L
9469 },
9470
ec6f095a 9471 /* VEX_LEN_0F92_P_0 */
c0f3af97 9472 {
ec6f095a 9473 { VEX_W_TABLE (VEX_W_0F92_P_0_LEN_0) },
c0f3af97
L
9474 },
9475
ec6f095a 9476 /* VEX_LEN_0F92_P_2 */
c0f3af97 9477 {
ec6f095a 9478 { VEX_W_TABLE (VEX_W_0F92_P_2_LEN_0) },
c0f3af97
L
9479 },
9480
ec6f095a 9481 /* VEX_LEN_0F92_P_3 */
c0f3af97 9482 {
58a211d2 9483 { MOD_TABLE (MOD_VEX_0F92_P_3_LEN_0) },
c0f3af97
L
9484 },
9485
ec6f095a 9486 /* VEX_LEN_0F93_P_0 */
c0f3af97 9487 {
ec6f095a 9488 { VEX_W_TABLE (VEX_W_0F93_P_0_LEN_0) },
c0f3af97
L
9489 },
9490
ec6f095a 9491 /* VEX_LEN_0F93_P_2 */
c0f3af97 9492 {
ec6f095a 9493 { VEX_W_TABLE (VEX_W_0F93_P_2_LEN_0) },
c0f3af97
L
9494 },
9495
ec6f095a 9496 /* VEX_LEN_0F93_P_3 */
c0f3af97 9497 {
58a211d2 9498 { MOD_TABLE (MOD_VEX_0F93_P_3_LEN_0) },
c0f3af97
L
9499 },
9500
ec6f095a 9501 /* VEX_LEN_0F98_P_0 */
43234a1e
L
9502 {
9503 { VEX_W_TABLE (VEX_W_0F98_P_0_LEN_0) },
9504 },
9505
1ba585e8
IT
9506 /* VEX_LEN_0F98_P_2 */
9507 {
9508 { VEX_W_TABLE (VEX_W_0F98_P_2_LEN_0) },
9509 },
9510
9511 /* VEX_LEN_0F99_P_0 */
9512 {
9513 { VEX_W_TABLE (VEX_W_0F99_P_0_LEN_0) },
9514 },
9515
9516 /* VEX_LEN_0F99_P_2 */
9517 {
9518 { VEX_W_TABLE (VEX_W_0F99_P_2_LEN_0) },
9519 },
9520
6c30d220 9521 /* VEX_LEN_0FAE_R_2_M_0 */
c0f3af97 9522 {
ec6f095a 9523 { "vldmxcsr", { Md }, 0 },
c0f3af97
L
9524 },
9525
6c30d220 9526 /* VEX_LEN_0FAE_R_3_M_0 */
c0f3af97 9527 {
ec6f095a 9528 { "vstmxcsr", { Md }, 0 },
c0f3af97
L
9529 },
9530
6c30d220 9531 /* VEX_LEN_0FC4_P_2 */
c0f3af97 9532 {
b50c9f31 9533 { "vpinsrw", { XM, Vex128, Edqw, Ib }, 0 },
c0f3af97
L
9534 },
9535
6c30d220 9536 /* VEX_LEN_0FC5_P_2 */
c0f3af97 9537 {
b50c9f31 9538 { "vpextrw", { Gdq, XS, Ib }, 0 },
c0f3af97
L
9539 },
9540
6c30d220 9541 /* VEX_LEN_0FD6_P_2 */
c0f3af97 9542 {
ec6f095a 9543 { "vmovq", { EXqScalarS, XMScalar }, 0 },
c0f3af97
L
9544 },
9545
6c30d220 9546 /* VEX_LEN_0FF7_P_2 */
c0f3af97 9547 {
ec6f095a 9548 { "vmaskmovdqu", { XM, XS }, 0 },
c0f3af97
L
9549 },
9550
6c30d220 9551 /* VEX_LEN_0F3816_P_2 */
c0f3af97 9552 {
6c30d220
L
9553 { Bad_Opcode },
9554 { VEX_W_TABLE (VEX_W_0F3816_P_2) },
c0f3af97
L
9555 },
9556
6c30d220 9557 /* VEX_LEN_0F3819_P_2 */
c0f3af97 9558 {
6c30d220
L
9559 { Bad_Opcode },
9560 { VEX_W_TABLE (VEX_W_0F3819_P_2) },
c0f3af97
L
9561 },
9562
6c30d220 9563 /* VEX_LEN_0F381A_P_2_M_0 */
c0f3af97 9564 {
6c30d220
L
9565 { Bad_Opcode },
9566 { VEX_W_TABLE (VEX_W_0F381A_P_2_M_0) },
c0f3af97
L
9567 },
9568
6c30d220 9569 /* VEX_LEN_0F3836_P_2 */
c0f3af97 9570 {
6c30d220
L
9571 { Bad_Opcode },
9572 { VEX_W_TABLE (VEX_W_0F3836_P_2) },
c0f3af97
L
9573 },
9574
592a252b 9575 /* VEX_LEN_0F3841_P_2 */
c0f3af97 9576 {
ec6f095a 9577 { "vphminposuw", { XM, EXx }, 0 },
c0f3af97
L
9578 },
9579
6c30d220
L
9580 /* VEX_LEN_0F385A_P_2_M_0 */
9581 {
9582 { Bad_Opcode },
9583 { VEX_W_TABLE (VEX_W_0F385A_P_2_M_0) },
9584 },
9585
592a252b 9586 /* VEX_LEN_0F38DB_P_2 */
a5ff0eb2 9587 {
ec6f095a 9588 { "vaesimc", { XM, EXx }, 0 },
a5ff0eb2
L
9589 },
9590
f12dc422
L
9591 /* VEX_LEN_0F38F2_P_0 */
9592 {
bf890a93 9593 { "andnS", { Gdq, VexGdq, Edq }, 0 },
f12dc422
L
9594 },
9595
9596 /* VEX_LEN_0F38F3_R_1_P_0 */
9597 {
bf890a93 9598 { "blsrS", { VexGdq, Edq }, 0 },
f12dc422
L
9599 },
9600
9601 /* VEX_LEN_0F38F3_R_2_P_0 */
9602 {
bf890a93 9603 { "blsmskS", { VexGdq, Edq }, 0 },
f12dc422
L
9604 },
9605
9606 /* VEX_LEN_0F38F3_R_3_P_0 */
9607 {
bf890a93 9608 { "blsiS", { VexGdq, Edq }, 0 },
f12dc422
L
9609 },
9610
6c30d220
L
9611 /* VEX_LEN_0F38F5_P_0 */
9612 {
bf890a93 9613 { "bzhiS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
9614 },
9615
9616 /* VEX_LEN_0F38F5_P_1 */
9617 {
bf890a93 9618 { "pextS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
9619 },
9620
9621 /* VEX_LEN_0F38F5_P_3 */
9622 {
bf890a93 9623 { "pdepS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
9624 },
9625
9626 /* VEX_LEN_0F38F6_P_3 */
9627 {
bf890a93 9628 { "mulxS", { Gdq, VexGdq, Edq }, 0 },
6c30d220
L
9629 },
9630
f12dc422
L
9631 /* VEX_LEN_0F38F7_P_0 */
9632 {
bf890a93 9633 { "bextrS", { Gdq, Edq, VexGdq }, 0 },
f12dc422
L
9634 },
9635
6c30d220
L
9636 /* VEX_LEN_0F38F7_P_1 */
9637 {
bf890a93 9638 { "sarxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
9639 },
9640
9641 /* VEX_LEN_0F38F7_P_2 */
9642 {
bf890a93 9643 { "shlxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
9644 },
9645
9646 /* VEX_LEN_0F38F7_P_3 */
9647 {
bf890a93 9648 { "shrxS", { Gdq, Edq, VexGdq }, 0 },
6c30d220
L
9649 },
9650
9651 /* VEX_LEN_0F3A00_P_2 */
9652 {
9653 { Bad_Opcode },
9654 { VEX_W_TABLE (VEX_W_0F3A00_P_2) },
9655 },
9656
9657 /* VEX_LEN_0F3A01_P_2 */
9658 {
9659 { Bad_Opcode },
9660 { VEX_W_TABLE (VEX_W_0F3A01_P_2) },
9661 },
9662
592a252b 9663 /* VEX_LEN_0F3A06_P_2 */
c0f3af97 9664 {
592d1631 9665 { Bad_Opcode },
592a252b 9666 { VEX_W_TABLE (VEX_W_0F3A06_P_2) },
c0f3af97
L
9667 },
9668
592a252b 9669 /* VEX_LEN_0F3A14_P_2 */
c0f3af97 9670 {
b50c9f31 9671 { "vpextrb", { Edqb, XM, Ib }, 0 },
c0f3af97
L
9672 },
9673
592a252b 9674 /* VEX_LEN_0F3A15_P_2 */
c0f3af97 9675 {
b50c9f31 9676 { "vpextrw", { Edqw, XM, Ib }, 0 },
c0f3af97
L
9677 },
9678
592a252b 9679 /* VEX_LEN_0F3A16_P_2 */
c0f3af97 9680 {
bf890a93 9681 { "vpextrK", { Edq, XM, Ib }, 0 },
c0f3af97
L
9682 },
9683
592a252b 9684 /* VEX_LEN_0F3A17_P_2 */
c0f3af97 9685 {
bf890a93 9686 { "vextractps", { Edqd, XM, Ib }, 0 },
c0f3af97
L
9687 },
9688
592a252b 9689 /* VEX_LEN_0F3A18_P_2 */
c0f3af97 9690 {
592d1631 9691 { Bad_Opcode },
592a252b 9692 { VEX_W_TABLE (VEX_W_0F3A18_P_2) },
c0f3af97
L
9693 },
9694
592a252b 9695 /* VEX_LEN_0F3A19_P_2 */
c0f3af97 9696 {
592d1631 9697 { Bad_Opcode },
592a252b 9698 { VEX_W_TABLE (VEX_W_0F3A19_P_2) },
c0f3af97
L
9699 },
9700
592a252b 9701 /* VEX_LEN_0F3A20_P_2 */
c0f3af97 9702 {
b50c9f31 9703 { "vpinsrb", { XM, Vex128, Edqb, Ib }, 0 },
c0f3af97
L
9704 },
9705
592a252b 9706 /* VEX_LEN_0F3A21_P_2 */
c0f3af97 9707 {
ec6f095a 9708 { "vinsertps", { XM, Vex128, EXd, Ib }, 0 },
c0f3af97
L
9709 },
9710
592a252b 9711 /* VEX_LEN_0F3A22_P_2 */
c0f3af97 9712 {
bf890a93 9713 { "vpinsrK", { XM, Vex128, Edq, Ib }, 0 },
c0f3af97
L
9714 },
9715
43234a1e
L
9716 /* VEX_LEN_0F3A30_P_2 */
9717 {
9718 { VEX_W_TABLE (VEX_W_0F3A30_P_2_LEN_0) },
9719 },
9720
1ba585e8
IT
9721 /* VEX_LEN_0F3A31_P_2 */
9722 {
9723 { VEX_W_TABLE (VEX_W_0F3A31_P_2_LEN_0) },
9724 },
9725
43234a1e
L
9726 /* VEX_LEN_0F3A32_P_2 */
9727 {
9728 { VEX_W_TABLE (VEX_W_0F3A32_P_2_LEN_0) },
9729 },
9730
1ba585e8
IT
9731 /* VEX_LEN_0F3A33_P_2 */
9732 {
9733 { VEX_W_TABLE (VEX_W_0F3A33_P_2_LEN_0) },
9734 },
9735
6c30d220 9736 /* VEX_LEN_0F3A38_P_2 */
c0f3af97 9737 {
6c30d220
L
9738 { Bad_Opcode },
9739 { VEX_W_TABLE (VEX_W_0F3A38_P_2) },
c0f3af97
L
9740 },
9741
6c30d220 9742 /* VEX_LEN_0F3A39_P_2 */
c0f3af97 9743 {
6c30d220
L
9744 { Bad_Opcode },
9745 { VEX_W_TABLE (VEX_W_0F3A39_P_2) },
9746 },
9747
9748 /* VEX_LEN_0F3A41_P_2 */
9749 {
ec6f095a 9750 { "vdppd", { XM, Vex128, EXx, Ib }, 0 },
c0f3af97
L
9751 },
9752
6c30d220 9753 /* VEX_LEN_0F3A46_P_2 */
c0f3af97 9754 {
6c30d220
L
9755 { Bad_Opcode },
9756 { VEX_W_TABLE (VEX_W_0F3A46_P_2) },
c0f3af97
L
9757 },
9758
592a252b 9759 /* VEX_LEN_0F3A60_P_2 */
c0f3af97 9760 {
15c7c1d8 9761 { "vpcmpestrm", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, 0 },
c0f3af97
L
9762 },
9763
592a252b 9764 /* VEX_LEN_0F3A61_P_2 */
c0f3af97 9765 {
15c7c1d8 9766 { "vpcmpestri", { XM, { PCMPESTR_Fixup, x_mode }, Ib }, 0 },
c0f3af97
L
9767 },
9768
592a252b 9769 /* VEX_LEN_0F3A62_P_2 */
c0f3af97 9770 {
ec6f095a 9771 { "vpcmpistrm", { XM, EXx, Ib }, 0 },
c0f3af97
L
9772 },
9773
592a252b 9774 /* VEX_LEN_0F3A63_P_2 */
c0f3af97 9775 {
ec6f095a 9776 { "vpcmpistri", { XM, EXx, Ib }, 0 },
c0f3af97
L
9777 },
9778
592a252b 9779 /* VEX_LEN_0F3A6A_P_2 */
922d8de8 9780 {
3a2430e0 9781 { "vfmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 },
922d8de8
DR
9782 },
9783
592a252b 9784 /* VEX_LEN_0F3A6B_P_2 */
922d8de8 9785 {
3a2430e0 9786 { "vfmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 },
922d8de8
DR
9787 },
9788
592a252b 9789 /* VEX_LEN_0F3A6E_P_2 */
922d8de8 9790 {
3a2430e0 9791 { "vfmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 },
922d8de8
DR
9792 },
9793
592a252b 9794 /* VEX_LEN_0F3A6F_P_2 */
922d8de8 9795 {
3a2430e0 9796 { "vfmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 },
922d8de8
DR
9797 },
9798
592a252b 9799 /* VEX_LEN_0F3A7A_P_2 */
922d8de8 9800 {
3a2430e0 9801 { "vfnmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 },
922d8de8
DR
9802 },
9803
592a252b 9804 /* VEX_LEN_0F3A7B_P_2 */
922d8de8 9805 {
3a2430e0 9806 { "vfnmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 },
922d8de8
DR
9807 },
9808
592a252b 9809 /* VEX_LEN_0F3A7E_P_2 */
922d8de8 9810 {
3a2430e0 9811 { "vfnmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW }, 0 },
922d8de8
DR
9812 },
9813
592a252b 9814 /* VEX_LEN_0F3A7F_P_2 */
922d8de8 9815 {
3a2430e0 9816 { "vfnmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW }, 0 },
922d8de8
DR
9817 },
9818
592a252b 9819 /* VEX_LEN_0F3ADF_P_2 */
a5ff0eb2 9820 {
ec6f095a 9821 { "vaeskeygenassist", { XM, EXx, Ib }, 0 },
a5ff0eb2 9822 },
4c807e72 9823
6c30d220
L
9824 /* VEX_LEN_0F3AF0_P_3 */
9825 {
bf890a93 9826 { "rorxS", { Gdq, Edq, Ib }, 0 },
6c30d220
L
9827 },
9828
ff688e1f
L
9829 /* VEX_LEN_0FXOP_08_CC */
9830 {
be92cb14 9831 { "vpcomb", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9832 },
9833
9834 /* VEX_LEN_0FXOP_08_CD */
9835 {
be92cb14 9836 { "vpcomw", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9837 },
9838
9839 /* VEX_LEN_0FXOP_08_CE */
9840 {
be92cb14 9841 { "vpcomd", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9842 },
9843
9844 /* VEX_LEN_0FXOP_08_CF */
9845 {
be92cb14 9846 { "vpcomq", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9847 },
9848
9849 /* VEX_LEN_0FXOP_08_EC */
9850 {
be92cb14 9851 { "vpcomub", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9852 },
9853
9854 /* VEX_LEN_0FXOP_08_ED */
9855 {
be92cb14 9856 { "vpcomuw", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9857 },
9858
9859 /* VEX_LEN_0FXOP_08_EE */
9860 {
be92cb14 9861 { "vpcomud", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9862 },
9863
9864 /* VEX_LEN_0FXOP_08_EF */
9865 {
be92cb14 9866 { "vpcomuq", { XM, Vex128, EXx, VPCOM }, 0 },
ff688e1f
L
9867 },
9868
592a252b 9869 /* VEX_LEN_0FXOP_09_80 */
5dd85c99 9870 {
bf890a93
IT
9871 { "vfrczps", { XM, EXxmm }, 0 },
9872 { "vfrczps", { XM, EXymmq }, 0 },
5dd85c99 9873 },
4c807e72 9874
592a252b 9875 /* VEX_LEN_0FXOP_09_81 */
5dd85c99 9876 {
bf890a93
IT
9877 { "vfrczpd", { XM, EXxmm }, 0 },
9878 { "vfrczpd", { XM, EXymmq }, 0 },
5dd85c99 9879 },
331d2d0d
L
9880};
9881
04e2a182
L
9882static const struct dis386 evex_len_table[][3] = {
9883#define NEED_EVEX_LEN_TABLE
9884#include "i386-dis-evex.h"
9885#undef NEED_EVEX_LEN_TABLE
9886};
9887
9e30b8e0 9888static const struct dis386 vex_w_table[][2] = {
43234a1e
L
9889 {
9890 /* VEX_W_0F41_P_0_LEN_1 */
ab4e4ed5
AF
9891 { MOD_TABLE (MOD_VEX_W_0_0F41_P_0_LEN_1) },
9892 { MOD_TABLE (MOD_VEX_W_1_0F41_P_0_LEN_1) },
1ba585e8
IT
9893 },
9894 {
9895 /* VEX_W_0F41_P_2_LEN_1 */
ab4e4ed5
AF
9896 { MOD_TABLE (MOD_VEX_W_0_0F41_P_2_LEN_1) },
9897 { MOD_TABLE (MOD_VEX_W_1_0F41_P_2_LEN_1) }
43234a1e
L
9898 },
9899 {
9900 /* VEX_W_0F42_P_0_LEN_1 */
ab4e4ed5
AF
9901 { MOD_TABLE (MOD_VEX_W_0_0F42_P_0_LEN_1) },
9902 { MOD_TABLE (MOD_VEX_W_1_0F42_P_0_LEN_1) },
1ba585e8
IT
9903 },
9904 {
9905 /* VEX_W_0F42_P_2_LEN_1 */
ab4e4ed5
AF
9906 { MOD_TABLE (MOD_VEX_W_0_0F42_P_2_LEN_1) },
9907 { MOD_TABLE (MOD_VEX_W_1_0F42_P_2_LEN_1) },
43234a1e
L
9908 },
9909 {
9910 /* VEX_W_0F44_P_0_LEN_0 */
ab4e4ed5
AF
9911 { MOD_TABLE (MOD_VEX_W_0_0F44_P_0_LEN_1) },
9912 { MOD_TABLE (MOD_VEX_W_1_0F44_P_0_LEN_1) },
1ba585e8
IT
9913 },
9914 {
9915 /* VEX_W_0F44_P_2_LEN_0 */
ab4e4ed5
AF
9916 { MOD_TABLE (MOD_VEX_W_0_0F44_P_2_LEN_1) },
9917 { MOD_TABLE (MOD_VEX_W_1_0F44_P_2_LEN_1) },
43234a1e
L
9918 },
9919 {
ec6f095a
L
9920 /* VEX_W_0F45_P_0_LEN_1 */
9921 { MOD_TABLE (MOD_VEX_W_0_0F45_P_0_LEN_1) },
9922 { MOD_TABLE (MOD_VEX_W_1_0F45_P_0_LEN_1) },
9e30b8e0
L
9923 },
9924 {
ec6f095a
L
9925 /* VEX_W_0F45_P_2_LEN_1 */
9926 { MOD_TABLE (MOD_VEX_W_0_0F45_P_2_LEN_1) },
9927 { MOD_TABLE (MOD_VEX_W_1_0F45_P_2_LEN_1) },
9e30b8e0
L
9928 },
9929 {
ec6f095a
L
9930 /* VEX_W_0F46_P_0_LEN_1 */
9931 { MOD_TABLE (MOD_VEX_W_0_0F46_P_0_LEN_1) },
9932 { MOD_TABLE (MOD_VEX_W_1_0F46_P_0_LEN_1) },
9e30b8e0
L
9933 },
9934 {
ec6f095a
L
9935 /* VEX_W_0F46_P_2_LEN_1 */
9936 { MOD_TABLE (MOD_VEX_W_0_0F46_P_2_LEN_1) },
9937 { MOD_TABLE (MOD_VEX_W_1_0F46_P_2_LEN_1) },
9e30b8e0
L
9938 },
9939 {
ec6f095a
L
9940 /* VEX_W_0F47_P_0_LEN_1 */
9941 { MOD_TABLE (MOD_VEX_W_0_0F47_P_0_LEN_1) },
9942 { MOD_TABLE (MOD_VEX_W_1_0F47_P_0_LEN_1) },
9e30b8e0
L
9943 },
9944 {
ec6f095a
L
9945 /* VEX_W_0F47_P_2_LEN_1 */
9946 { MOD_TABLE (MOD_VEX_W_0_0F47_P_2_LEN_1) },
9947 { MOD_TABLE (MOD_VEX_W_1_0F47_P_2_LEN_1) },
9e30b8e0
L
9948 },
9949 {
ec6f095a
L
9950 /* VEX_W_0F4A_P_0_LEN_1 */
9951 { MOD_TABLE (MOD_VEX_W_0_0F4A_P_0_LEN_1) },
9952 { MOD_TABLE (MOD_VEX_W_1_0F4A_P_0_LEN_1) },
9e30b8e0
L
9953 },
9954 {
ec6f095a
L
9955 /* VEX_W_0F4A_P_2_LEN_1 */
9956 { MOD_TABLE (MOD_VEX_W_0_0F4A_P_2_LEN_1) },
9957 { MOD_TABLE (MOD_VEX_W_1_0F4A_P_2_LEN_1) },
9e30b8e0
L
9958 },
9959 {
ec6f095a
L
9960 /* VEX_W_0F4B_P_0_LEN_1 */
9961 { MOD_TABLE (MOD_VEX_W_0_0F4B_P_0_LEN_1) },
9962 { MOD_TABLE (MOD_VEX_W_1_0F4B_P_0_LEN_1) },
9e30b8e0
L
9963 },
9964 {
ec6f095a
L
9965 /* VEX_W_0F4B_P_2_LEN_1 */
9966 { MOD_TABLE (MOD_VEX_W_0_0F4B_P_2_LEN_1) },
9e30b8e0
L
9967 },
9968 {
ec6f095a
L
9969 /* VEX_W_0F90_P_0_LEN_0 */
9970 { "kmovw", { MaskG, MaskE }, 0 },
9971 { "kmovq", { MaskG, MaskE }, 0 },
9e30b8e0
L
9972 },
9973 {
ec6f095a
L
9974 /* VEX_W_0F90_P_2_LEN_0 */
9975 { "kmovb", { MaskG, MaskBDE }, 0 },
9976 { "kmovd", { MaskG, MaskBDE }, 0 },
9e30b8e0
L
9977 },
9978 {
ec6f095a
L
9979 /* VEX_W_0F91_P_0_LEN_0 */
9980 { MOD_TABLE (MOD_VEX_W_0_0F91_P_0_LEN_0) },
9981 { MOD_TABLE (MOD_VEX_W_1_0F91_P_0_LEN_0) },
9e30b8e0
L
9982 },
9983 {
ec6f095a
L
9984 /* VEX_W_0F91_P_2_LEN_0 */
9985 { MOD_TABLE (MOD_VEX_W_0_0F91_P_2_LEN_0) },
9986 { MOD_TABLE (MOD_VEX_W_1_0F91_P_2_LEN_0) },
9e30b8e0
L
9987 },
9988 {
ec6f095a
L
9989 /* VEX_W_0F92_P_0_LEN_0 */
9990 { MOD_TABLE (MOD_VEX_W_0_0F92_P_0_LEN_0) },
9e30b8e0
L
9991 },
9992 {
ec6f095a
L
9993 /* VEX_W_0F92_P_2_LEN_0 */
9994 { MOD_TABLE (MOD_VEX_W_0_0F92_P_2_LEN_0) },
9e30b8e0 9995 },
9e30b8e0 9996 {
ec6f095a
L
9997 /* VEX_W_0F93_P_0_LEN_0 */
9998 { MOD_TABLE (MOD_VEX_W_0_0F93_P_0_LEN_0) },
9e30b8e0
L
9999 },
10000 {
ec6f095a
L
10001 /* VEX_W_0F93_P_2_LEN_0 */
10002 { MOD_TABLE (MOD_VEX_W_0_0F93_P_2_LEN_0) },
9e30b8e0 10003 },
9e30b8e0 10004 {
ec6f095a
L
10005 /* VEX_W_0F98_P_0_LEN_0 */
10006 { MOD_TABLE (MOD_VEX_W_0_0F98_P_0_LEN_0) },
10007 { MOD_TABLE (MOD_VEX_W_1_0F98_P_0_LEN_0) },
9e30b8e0
L
10008 },
10009 {
ec6f095a
L
10010 /* VEX_W_0F98_P_2_LEN_0 */
10011 { MOD_TABLE (MOD_VEX_W_0_0F98_P_2_LEN_0) },
10012 { MOD_TABLE (MOD_VEX_W_1_0F98_P_2_LEN_0) },
9e30b8e0
L
10013 },
10014 {
ec6f095a
L
10015 /* VEX_W_0F99_P_0_LEN_0 */
10016 { MOD_TABLE (MOD_VEX_W_0_0F99_P_0_LEN_0) },
10017 { MOD_TABLE (MOD_VEX_W_1_0F99_P_0_LEN_0) },
9e30b8e0
L
10018 },
10019 {
ec6f095a
L
10020 /* VEX_W_0F99_P_2_LEN_0 */
10021 { MOD_TABLE (MOD_VEX_W_0_0F99_P_2_LEN_0) },
10022 { MOD_TABLE (MOD_VEX_W_1_0F99_P_2_LEN_0) },
9e30b8e0 10023 },
9e30b8e0 10024 {
592a252b 10025 /* VEX_W_0F380C_P_2 */
bf890a93 10026 { "vpermilps", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10027 },
10028 {
592a252b 10029 /* VEX_W_0F380D_P_2 */
bf890a93 10030 { "vpermilpd", { XM, Vex, EXx }, 0 },
9e30b8e0
L
10031 },
10032 {
592a252b 10033 /* VEX_W_0F380E_P_2 */
bf890a93 10034 { "vtestps", { XM, EXx }, 0 },
9e30b8e0
L
10035 },
10036 {
592a252b 10037 /* VEX_W_0F380F_P_2 */
bf890a93 10038 { "vtestpd", { XM, EXx }, 0 },
9e30b8e0 10039 },
6c30d220
L
10040 {
10041 /* VEX_W_0F3816_P_2 */
bf890a93 10042 { "vpermps", { XM, Vex, EXx }, 0 },
6c30d220 10043 },
bcf2684f 10044 {
6c30d220 10045 /* VEX_W_0F3818_P_2 */
bf890a93 10046 { "vbroadcastss", { XM, EXxmm_md }, 0 },
bcf2684f 10047 },
9e30b8e0 10048 {
6c30d220 10049 /* VEX_W_0F3819_P_2 */
bf890a93 10050 { "vbroadcastsd", { XM, EXxmm_mq }, 0 },
9e30b8e0
L
10051 },
10052 {
592a252b 10053 /* VEX_W_0F381A_P_2_M_0 */
bf890a93 10054 { "vbroadcastf128", { XM, Mxmm }, 0 },
9e30b8e0 10055 },
53aa04a0 10056 {
592a252b 10057 /* VEX_W_0F382C_P_2_M_0 */
bf890a93 10058 { "vmaskmovps", { XM, Vex, Mx }, 0 },
53aa04a0
L
10059 },
10060 {
592a252b 10061 /* VEX_W_0F382D_P_2_M_0 */
bf890a93 10062 { "vmaskmovpd", { XM, Vex, Mx }, 0 },
53aa04a0
L
10063 },
10064 {
592a252b 10065 /* VEX_W_0F382E_P_2_M_0 */
bf890a93 10066 { "vmaskmovps", { Mx, Vex, XM }, 0 },
53aa04a0
L
10067 },
10068 {
592a252b 10069 /* VEX_W_0F382F_P_2_M_0 */
bf890a93 10070 { "vmaskmovpd", { Mx, Vex, XM }, 0 },
53aa04a0 10071 },
6c30d220
L
10072 {
10073 /* VEX_W_0F3836_P_2 */
bf890a93 10074 { "vpermd", { XM, Vex, EXx }, 0 },
9e30b8e0 10075 },
6c30d220
L
10076 {
10077 /* VEX_W_0F3846_P_2 */
bf890a93 10078 { "vpsravd", { XM, Vex, EXx }, 0 },
6c30d220
L
10079 },
10080 {
10081 /* VEX_W_0F3858_P_2 */
bf890a93 10082 { "vpbroadcastd", { XM, EXxmm_md }, 0 },
6c30d220
L
10083 },
10084 {
10085 /* VEX_W_0F3859_P_2 */
bf890a93 10086 { "vpbroadcastq", { XM, EXxmm_mq }, 0 },
6c30d220
L
10087 },
10088 {
10089 /* VEX_W_0F385A_P_2_M_0 */
bf890a93 10090 { "vbroadcasti128", { XM, Mxmm }, 0 },
6c30d220
L
10091 },
10092 {
10093 /* VEX_W_0F3878_P_2 */
bf890a93 10094 { "vpbroadcastb", { XM, EXxmm_mb }, 0 },
6c30d220
L
10095 },
10096 {
10097 /* VEX_W_0F3879_P_2 */
bf890a93 10098 { "vpbroadcastw", { XM, EXxmm_mw }, 0 },
6c30d220 10099 },
48521003
IT
10100 {
10101 /* VEX_W_0F38CF_P_2 */
10102 { "vgf2p8mulb", { XM, Vex, EXx }, 0 },
10103 },
6c30d220
L
10104 {
10105 /* VEX_W_0F3A00_P_2 */
10106 { Bad_Opcode },
bf890a93 10107 { "vpermq", { XM, EXx, Ib }, 0 },
6c30d220
L
10108 },
10109 {
10110 /* VEX_W_0F3A01_P_2 */
10111 { Bad_Opcode },
bf890a93 10112 { "vpermpd", { XM, EXx, Ib }, 0 },
6c30d220
L
10113 },
10114 {
10115 /* VEX_W_0F3A02_P_2 */
bf890a93 10116 { "vpblendd", { XM, Vex, EXx, Ib }, 0 },
6c30d220 10117 },
9e30b8e0 10118 {
592a252b 10119 /* VEX_W_0F3A04_P_2 */
bf890a93 10120 { "vpermilps", { XM, EXx, Ib }, 0 },
9e30b8e0
L
10121 },
10122 {
592a252b 10123 /* VEX_W_0F3A05_P_2 */
bf890a93 10124 { "vpermilpd", { XM, EXx, Ib }, 0 },
9e30b8e0
L
10125 },
10126 {
592a252b 10127 /* VEX_W_0F3A06_P_2 */
bf890a93 10128 { "vperm2f128", { XM, Vex256, EXx, Ib }, 0 },
9e30b8e0 10129 },
9e30b8e0 10130 {
592a252b 10131 /* VEX_W_0F3A18_P_2 */
bf890a93 10132 { "vinsertf128", { XM, Vex256, EXxmm, Ib }, 0 },
9e30b8e0
L
10133 },
10134 {
592a252b 10135 /* VEX_W_0F3A19_P_2 */
bf890a93 10136 { "vextractf128", { EXxmm, XM, Ib }, 0 },
9e30b8e0 10137 },
43234a1e 10138 {
1ba585e8 10139 /* VEX_W_0F3A30_P_2_LEN_0 */
ab4e4ed5
AF
10140 { MOD_TABLE (MOD_VEX_W_0_0F3A30_P_2_LEN_0) },
10141 { MOD_TABLE (MOD_VEX_W_1_0F3A30_P_2_LEN_0) },
43234a1e
L
10142 },
10143 {
1ba585e8 10144 /* VEX_W_0F3A31_P_2_LEN_0 */
ab4e4ed5
AF
10145 { MOD_TABLE (MOD_VEX_W_0_0F3A31_P_2_LEN_0) },
10146 { MOD_TABLE (MOD_VEX_W_1_0F3A31_P_2_LEN_0) },
1ba585e8
IT
10147 },
10148 {
10149 /* VEX_W_0F3A32_P_2_LEN_0 */
ab4e4ed5
AF
10150 { MOD_TABLE (MOD_VEX_W_0_0F3A32_P_2_LEN_0) },
10151 { MOD_TABLE (MOD_VEX_W_1_0F3A32_P_2_LEN_0) },
43234a1e 10152 },
1ba585e8
IT
10153 {
10154 /* VEX_W_0F3A33_P_2_LEN_0 */
ab4e4ed5
AF
10155 { MOD_TABLE (MOD_VEX_W_0_0F3A33_P_2_LEN_0) },
10156 { MOD_TABLE (MOD_VEX_W_1_0F3A33_P_2_LEN_0) },
1ba585e8 10157 },
6c30d220
L
10158 {
10159 /* VEX_W_0F3A38_P_2 */
bf890a93 10160 { "vinserti128", { XM, Vex256, EXxmm, Ib }, 0 },
6c30d220
L
10161 },
10162 {
10163 /* VEX_W_0F3A39_P_2 */
bf890a93 10164 { "vextracti128", { EXxmm, XM, Ib }, 0 },
6c30d220 10165 },
6c30d220
L
10166 {
10167 /* VEX_W_0F3A46_P_2 */
bf890a93 10168 { "vperm2i128", { XM, Vex256, EXx, Ib }, 0 },
6c30d220 10169 },
a683cc34 10170 {
592a252b 10171 /* VEX_W_0F3A48_P_2 */
bf890a93
IT
10172 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
10173 { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
a683cc34
SP
10174 },
10175 {
592a252b 10176 /* VEX_W_0F3A49_P_2 */
bf890a93
IT
10177 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
10178 { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW }, 0 },
a683cc34 10179 },
9e30b8e0 10180 {
592a252b 10181 /* VEX_W_0F3A4A_P_2 */
bf890a93 10182 { "vblendvps", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0
L
10183 },
10184 {
592a252b 10185 /* VEX_W_0F3A4B_P_2 */
bf890a93 10186 { "vblendvpd", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0
L
10187 },
10188 {
592a252b 10189 /* VEX_W_0F3A4C_P_2 */
bf890a93 10190 { "vpblendvb", { XM, Vex, EXx, XMVexI4 }, 0 },
9e30b8e0 10191 },
48521003
IT
10192 {
10193 /* VEX_W_0F3ACE_P_2 */
10194 { Bad_Opcode },
10195 { "vgf2p8affineqb", { XM, Vex, EXx, Ib }, 0 },
10196 },
10197 {
10198 /* VEX_W_0F3ACF_P_2 */
10199 { Bad_Opcode },
10200 { "vgf2p8affineinvqb", { XM, Vex, EXx, Ib }, 0 },
10201 },
43234a1e
L
10202#define NEED_VEX_W_TABLE
10203#include "i386-dis-evex.h"
10204#undef NEED_VEX_W_TABLE
9e30b8e0
L
10205};
10206
10207static const struct dis386 mod_table[][2] = {
10208 {
10209 /* MOD_8D */
bf890a93 10210 { "leaS", { Gv, M }, 0 },
9e30b8e0 10211 },
42164a71
L
10212 {
10213 /* MOD_C6_REG_7 */
10214 { Bad_Opcode },
10215 { RM_TABLE (RM_C6_REG_7) },
10216 },
10217 {
10218 /* MOD_C7_REG_7 */
10219 { Bad_Opcode },
10220 { RM_TABLE (RM_C7_REG_7) },
10221 },
4a357820
MZ
10222 {
10223 /* MOD_FF_REG_3 */
a72d2af2 10224 { "Jcall^", { indirEp }, 0 },
4a357820
MZ
10225 },
10226 {
10227 /* MOD_FF_REG_5 */
a72d2af2 10228 { "Jjmp^", { indirEp }, 0 },
4a357820 10229 },
9e30b8e0
L
10230 {
10231 /* MOD_0F01_REG_0 */
10232 { X86_64_TABLE (X86_64_0F01_REG_0) },
10233 { RM_TABLE (RM_0F01_REG_0) },
10234 },
10235 {
10236 /* MOD_0F01_REG_1 */
10237 { X86_64_TABLE (X86_64_0F01_REG_1) },
10238 { RM_TABLE (RM_0F01_REG_1) },
10239 },
10240 {
10241 /* MOD_0F01_REG_2 */
10242 { X86_64_TABLE (X86_64_0F01_REG_2) },
10243 { RM_TABLE (RM_0F01_REG_2) },
10244 },
10245 {
10246 /* MOD_0F01_REG_3 */
10247 { X86_64_TABLE (X86_64_0F01_REG_3) },
10248 { RM_TABLE (RM_0F01_REG_3) },
10249 },
8eab4136
L
10250 {
10251 /* MOD_0F01_REG_5 */
603555e5 10252 { PREFIX_TABLE (PREFIX_MOD_0_0F01_REG_5) },
8eab4136
L
10253 { RM_TABLE (RM_0F01_REG_5) },
10254 },
9e30b8e0
L
10255 {
10256 /* MOD_0F01_REG_7 */
bf890a93 10257 { "invlpg", { Mb }, 0 },
9e30b8e0
L
10258 { RM_TABLE (RM_0F01_REG_7) },
10259 },
10260 {
10261 /* MOD_0F12_PREFIX_0 */
507bd325
L
10262 { "movlps", { XM, EXq }, PREFIX_OPCODE },
10263 { "movhlps", { XM, EXq }, PREFIX_OPCODE },
9e30b8e0
L
10264 },
10265 {
10266 /* MOD_0F13 */
507bd325 10267 { "movlpX", { EXq, XM }, PREFIX_OPCODE },
9e30b8e0
L
10268 },
10269 {
10270 /* MOD_0F16_PREFIX_0 */
bf890a93
IT
10271 { "movhps", { XM, EXq }, 0 },
10272 { "movlhps", { XM, EXq }, 0 },
9e30b8e0
L
10273 },
10274 {
10275 /* MOD_0F17 */
507bd325 10276 { "movhpX", { EXq, XM }, PREFIX_OPCODE },
9e30b8e0
L
10277 },
10278 {
10279 /* MOD_0F18_REG_0 */
bf890a93 10280 { "prefetchnta", { Mb }, 0 },
9e30b8e0
L
10281 },
10282 {
10283 /* MOD_0F18_REG_1 */
bf890a93 10284 { "prefetcht0", { Mb }, 0 },
9e30b8e0
L
10285 },
10286 {
10287 /* MOD_0F18_REG_2 */
bf890a93 10288 { "prefetcht1", { Mb }, 0 },
9e30b8e0
L
10289 },
10290 {
10291 /* MOD_0F18_REG_3 */
bf890a93 10292 { "prefetcht2", { Mb }, 0 },
9e30b8e0 10293 },
d7189fa5
RM
10294 {
10295 /* MOD_0F18_REG_4 */
bf890a93 10296 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
10297 },
10298 {
10299 /* MOD_0F18_REG_5 */
bf890a93 10300 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
10301 },
10302 {
10303 /* MOD_0F18_REG_6 */
bf890a93 10304 { "nop/reserved", { Mb }, 0 },
d7189fa5
RM
10305 },
10306 {
10307 /* MOD_0F18_REG_7 */
bf890a93 10308 { "nop/reserved", { Mb }, 0 },
d7189fa5 10309 },
7e8b059b
L
10310 {
10311 /* MOD_0F1A_PREFIX_0 */
d276ec69 10312 { "bndldx", { Gbnd, Mv_bnd }, 0 },
bf890a93 10313 { "nopQ", { Ev }, 0 },
7e8b059b
L
10314 },
10315 {
10316 /* MOD_0F1B_PREFIX_0 */
d276ec69 10317 { "bndstx", { Mv_bnd, Gbnd }, 0 },
bf890a93 10318 { "nopQ", { Ev }, 0 },
7e8b059b
L
10319 },
10320 {
10321 /* MOD_0F1B_PREFIX_1 */
d276ec69 10322 { "bndmk", { Gbnd, Mv_bnd }, 0 },
bf890a93 10323 { "nopQ", { Ev }, 0 },
7e8b059b 10324 },
c48935d7
IT
10325 {
10326 /* MOD_0F1C_PREFIX_0 */
10327 { REG_TABLE (REG_0F1C_MOD_0) },
10328 { "nopQ", { Ev }, 0 },
10329 },
603555e5
L
10330 {
10331 /* MOD_0F1E_PREFIX_1 */
10332 { "nopQ", { Ev }, 0 },
10333 { REG_TABLE (REG_0F1E_MOD_3) },
10334 },
b844680a 10335 {
92fddf8e 10336 /* MOD_0F24 */
7bb15c6f 10337 { Bad_Opcode },
bf890a93 10338 { "movL", { Rd, Td }, 0 },
b844680a
L
10339 },
10340 {
92fddf8e 10341 /* MOD_0F26 */
592d1631 10342 { Bad_Opcode },
bf890a93 10343 { "movL", { Td, Rd }, 0 },
b844680a 10344 },
75c135a8
L
10345 {
10346 /* MOD_0F2B_PREFIX_0 */
507bd325 10347 {"movntps", { Mx, XM }, PREFIX_OPCODE },
75c135a8
L
10348 },
10349 {
10350 /* MOD_0F2B_PREFIX_1 */
507bd325 10351 {"movntss", { Md, XM }, PREFIX_OPCODE },
75c135a8
L
10352 },
10353 {
10354 /* MOD_0F2B_PREFIX_2 */
507bd325 10355 {"movntpd", { Mx, XM }, PREFIX_OPCODE },
75c135a8
L
10356 },
10357 {
10358 /* MOD_0F2B_PREFIX_3 */
507bd325 10359 {"movntsd", { Mq, XM }, PREFIX_OPCODE },
75c135a8
L
10360 },
10361 {
10362 /* MOD_0F51 */
592d1631 10363 { Bad_Opcode },
507bd325 10364 { "movmskpX", { Gdq, XS }, PREFIX_OPCODE },
75c135a8 10365 },
b844680a 10366 {
1ceb70f8 10367 /* MOD_0F71_REG_2 */
592d1631 10368 { Bad_Opcode },
bf890a93 10369 { "psrlw", { MS, Ib }, 0 },
b844680a
L
10370 },
10371 {
1ceb70f8 10372 /* MOD_0F71_REG_4 */
592d1631 10373 { Bad_Opcode },
bf890a93 10374 { "psraw", { MS, Ib }, 0 },
b844680a
L
10375 },
10376 {
1ceb70f8 10377 /* MOD_0F71_REG_6 */
592d1631 10378 { Bad_Opcode },
bf890a93 10379 { "psllw", { MS, Ib }, 0 },
b844680a
L
10380 },
10381 {
1ceb70f8 10382 /* MOD_0F72_REG_2 */
592d1631 10383 { Bad_Opcode },
bf890a93 10384 { "psrld", { MS, Ib }, 0 },
b844680a
L
10385 },
10386 {
1ceb70f8 10387 /* MOD_0F72_REG_4 */
592d1631 10388 { Bad_Opcode },
bf890a93 10389 { "psrad", { MS, Ib }, 0 },
b844680a
L
10390 },
10391 {
1ceb70f8 10392 /* MOD_0F72_REG_6 */
592d1631 10393 { Bad_Opcode },
bf890a93 10394 { "pslld", { MS, Ib }, 0 },
b844680a
L
10395 },
10396 {
1ceb70f8 10397 /* MOD_0F73_REG_2 */
592d1631 10398 { Bad_Opcode },
bf890a93 10399 { "psrlq", { MS, Ib }, 0 },
b844680a
L
10400 },
10401 {
1ceb70f8 10402 /* MOD_0F73_REG_3 */
592d1631 10403 { Bad_Opcode },
c0f3af97
L
10404 { PREFIX_TABLE (PREFIX_0F73_REG_3) },
10405 },
10406 {
10407 /* MOD_0F73_REG_6 */
592d1631 10408 { Bad_Opcode },
bf890a93 10409 { "psllq", { MS, Ib }, 0 },
c0f3af97
L
10410 },
10411 {
10412 /* MOD_0F73_REG_7 */
592d1631 10413 { Bad_Opcode },
c0f3af97
L
10414 { PREFIX_TABLE (PREFIX_0F73_REG_7) },
10415 },
10416 {
10417 /* MOD_0FAE_REG_0 */
bf890a93 10418 { "fxsave", { FXSAVE }, 0 },
c7b8aa3a 10419 { PREFIX_TABLE (PREFIX_0FAE_REG_0) },
c0f3af97
L
10420 },
10421 {
10422 /* MOD_0FAE_REG_1 */
bf890a93 10423 { "fxrstor", { FXSAVE }, 0 },
c7b8aa3a 10424 { PREFIX_TABLE (PREFIX_0FAE_REG_1) },
c0f3af97
L
10425 },
10426 {
10427 /* MOD_0FAE_REG_2 */
bf890a93 10428 { "ldmxcsr", { Md }, 0 },
c7b8aa3a 10429 { PREFIX_TABLE (PREFIX_0FAE_REG_2) },
c0f3af97
L
10430 },
10431 {
10432 /* MOD_0FAE_REG_3 */
bf890a93 10433 { "stmxcsr", { Md }, 0 },
c7b8aa3a 10434 { PREFIX_TABLE (PREFIX_0FAE_REG_3) },
c0f3af97
L
10435 },
10436 {
10437 /* MOD_0FAE_REG_4 */
6b40c462
L
10438 { PREFIX_TABLE (PREFIX_MOD_0_0FAE_REG_4) },
10439 { PREFIX_TABLE (PREFIX_MOD_3_0FAE_REG_4) },
c0f3af97
L
10440 },
10441 {
10442 /* MOD_0FAE_REG_5 */
603555e5 10443 { PREFIX_TABLE (PREFIX_MOD_0_0FAE_REG_5) },
2234eee6 10444 { PREFIX_TABLE (PREFIX_MOD_3_0FAE_REG_5) },
c0f3af97
L
10445 },
10446 {
10447 /* MOD_0FAE_REG_6 */
de89d0a3
IT
10448 { PREFIX_TABLE (PREFIX_MOD_0_0FAE_REG_6) },
10449 { PREFIX_TABLE (PREFIX_MOD_1_0FAE_REG_6) },
c0f3af97
L
10450 },
10451 {
10452 /* MOD_0FAE_REG_7 */
963f3586 10453 { PREFIX_TABLE (PREFIX_0FAE_REG_7) },
c0f3af97
L
10454 { RM_TABLE (RM_0FAE_REG_7) },
10455 },
10456 {
10457 /* MOD_0FB2 */
bf890a93 10458 { "lssS", { Gv, Mp }, 0 },
c0f3af97
L
10459 },
10460 {
10461 /* MOD_0FB4 */
bf890a93 10462 { "lfsS", { Gv, Mp }, 0 },
c0f3af97
L
10463 },
10464 {
10465 /* MOD_0FB5 */
bf890a93 10466 { "lgsS", { Gv, Mp }, 0 },
c0f3af97 10467 },
a8484f96
L
10468 {
10469 /* MOD_0FC3 */
10470 { PREFIX_TABLE (PREFIX_MOD_0_0FC3) },
10471 },
963f3586
IT
10472 {
10473 /* MOD_0FC7_REG_3 */
a8484f96 10474 { "xrstors", { FXSAVE }, 0 },
963f3586
IT
10475 },
10476 {
10477 /* MOD_0FC7_REG_4 */
bf890a93 10478 { "xsavec", { FXSAVE }, 0 },
963f3586
IT
10479 },
10480 {
10481 /* MOD_0FC7_REG_5 */
bf890a93 10482 { "xsaves", { FXSAVE }, 0 },
963f3586 10483 },
c0f3af97
L
10484 {
10485 /* MOD_0FC7_REG_6 */
f24bcbaa
L
10486 { PREFIX_TABLE (PREFIX_MOD_0_0FC7_REG_6) },
10487 { PREFIX_TABLE (PREFIX_MOD_3_0FC7_REG_6) }
c0f3af97
L
10488 },
10489 {
10490 /* MOD_0FC7_REG_7 */
bf890a93 10491 { "vmptrst", { Mq }, 0 },
f24bcbaa 10492 { PREFIX_TABLE (PREFIX_MOD_3_0FC7_REG_7) }
c0f3af97
L
10493 },
10494 {
10495 /* MOD_0FD7 */
592d1631 10496 { Bad_Opcode },
bf890a93 10497 { "pmovmskb", { Gdq, MS }, 0 },
c0f3af97
L
10498 },
10499 {
10500 /* MOD_0FE7_PREFIX_2 */
bf890a93 10501 { "movntdq", { Mx, XM }, 0 },
c0f3af97
L
10502 },
10503 {
10504 /* MOD_0FF0_PREFIX_3 */
bf890a93 10505 { "lddqu", { XM, M }, 0 },
c0f3af97
L
10506 },
10507 {
10508 /* MOD_0F382A_PREFIX_2 */
bf890a93 10509 { "movntdqa", { XM, Mx }, 0 },
c0f3af97 10510 },
603555e5
L
10511 {
10512 /* MOD_0F38F5_PREFIX_2 */
10513 { "wrussK", { M, Gdq }, PREFIX_OPCODE },
10514 },
10515 {
10516 /* MOD_0F38F6_PREFIX_0 */
10517 { "wrssK", { M, Gdq }, PREFIX_OPCODE },
10518 },
c0a30a9f
L
10519 {
10520 /* MOD_0F38F8_PREFIX_2 */
10521 { "movdir64b", { Gva, M }, PREFIX_OPCODE },
10522 },
10523 {
10524 /* MOD_0F38F9_PREFIX_0 */
10525 { "movdiri", { Em, Gv }, PREFIX_OPCODE },
10526 },
c0f3af97
L
10527 {
10528 /* MOD_62_32BIT */
bf890a93 10529 { "bound{S|}", { Gv, Ma }, 0 },
43234a1e 10530 { EVEX_TABLE (EVEX_0F) },
c0f3af97
L
10531 },
10532 {
10533 /* MOD_C4_32BIT */
bf890a93 10534 { "lesS", { Gv, Mp }, 0 },
c0f3af97
L
10535 { VEX_C4_TABLE (VEX_0F) },
10536 },
10537 {
10538 /* MOD_C5_32BIT */
bf890a93 10539 { "ldsS", { Gv, Mp }, 0 },
c0f3af97
L
10540 { VEX_C5_TABLE (VEX_0F) },
10541 },
10542 {
592a252b
L
10543 /* MOD_VEX_0F12_PREFIX_0 */
10544 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_0) },
10545 { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_1) },
c0f3af97
L
10546 },
10547 {
592a252b
L
10548 /* MOD_VEX_0F13 */
10549 { VEX_LEN_TABLE (VEX_LEN_0F13_M_0) },
c0f3af97
L
10550 },
10551 {
592a252b
L
10552 /* MOD_VEX_0F16_PREFIX_0 */
10553 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_0) },
10554 { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_1) },
c0f3af97
L
10555 },
10556 {
592a252b
L
10557 /* MOD_VEX_0F17 */
10558 { VEX_LEN_TABLE (VEX_LEN_0F17_M_0) },
c0f3af97
L
10559 },
10560 {
592a252b 10561 /* MOD_VEX_0F2B */
ec6f095a 10562 { "vmovntpX", { Mx, XM }, 0 },
c0f3af97 10563 },
ab4e4ed5
AF
10564 {
10565 /* MOD_VEX_W_0_0F41_P_0_LEN_1 */
10566 { Bad_Opcode },
10567 { "kandw", { MaskG, MaskVex, MaskR }, 0 },
10568 },
10569 {
10570 /* MOD_VEX_W_1_0F41_P_0_LEN_1 */
10571 { Bad_Opcode },
10572 { "kandq", { MaskG, MaskVex, MaskR }, 0 },
10573 },
10574 {
10575 /* MOD_VEX_W_0_0F41_P_2_LEN_1 */
10576 { Bad_Opcode },
10577 { "kandb", { MaskG, MaskVex, MaskR }, 0 },
10578 },
10579 {
10580 /* MOD_VEX_W_1_0F41_P_2_LEN_1 */
10581 { Bad_Opcode },
10582 { "kandd", { MaskG, MaskVex, MaskR }, 0 },
10583 },
10584 {
10585 /* MOD_VEX_W_0_0F42_P_0_LEN_1 */
10586 { Bad_Opcode },
10587 { "kandnw", { MaskG, MaskVex, MaskR }, 0 },
10588 },
10589 {
10590 /* MOD_VEX_W_1_0F42_P_0_LEN_1 */
10591 { Bad_Opcode },
10592 { "kandnq", { MaskG, MaskVex, MaskR }, 0 },
10593 },
10594 {
10595 /* MOD_VEX_W_0_0F42_P_2_LEN_1 */
10596 { Bad_Opcode },
10597 { "kandnb", { MaskG, MaskVex, MaskR }, 0 },
10598 },
10599 {
10600 /* MOD_VEX_W_1_0F42_P_2_LEN_1 */
10601 { Bad_Opcode },
10602 { "kandnd", { MaskG, MaskVex, MaskR }, 0 },
10603 },
10604 {
10605 /* MOD_VEX_W_0_0F44_P_0_LEN_0 */
10606 { Bad_Opcode },
10607 { "knotw", { MaskG, MaskR }, 0 },
10608 },
10609 {
10610 /* MOD_VEX_W_1_0F44_P_0_LEN_0 */
10611 { Bad_Opcode },
10612 { "knotq", { MaskG, MaskR }, 0 },
10613 },
10614 {
10615 /* MOD_VEX_W_0_0F44_P_2_LEN_0 */
10616 { Bad_Opcode },
10617 { "knotb", { MaskG, MaskR }, 0 },
10618 },
10619 {
10620 /* MOD_VEX_W_1_0F44_P_2_LEN_0 */
10621 { Bad_Opcode },
10622 { "knotd", { MaskG, MaskR }, 0 },
10623 },
10624 {
10625 /* MOD_VEX_W_0_0F45_P_0_LEN_1 */
10626 { Bad_Opcode },
10627 { "korw", { MaskG, MaskVex, MaskR }, 0 },
10628 },
10629 {
10630 /* MOD_VEX_W_1_0F45_P_0_LEN_1 */
10631 { Bad_Opcode },
10632 { "korq", { MaskG, MaskVex, MaskR }, 0 },
10633 },
10634 {
10635 /* MOD_VEX_W_0_0F45_P_2_LEN_1 */
10636 { Bad_Opcode },
10637 { "korb", { MaskG, MaskVex, MaskR }, 0 },
10638 },
10639 {
10640 /* MOD_VEX_W_1_0F45_P_2_LEN_1 */
10641 { Bad_Opcode },
10642 { "kord", { MaskG, MaskVex, MaskR }, 0 },
10643 },
10644 {
10645 /* MOD_VEX_W_0_0F46_P_0_LEN_1 */
10646 { Bad_Opcode },
10647 { "kxnorw", { MaskG, MaskVex, MaskR }, 0 },
10648 },
10649 {
10650 /* MOD_VEX_W_1_0F46_P_0_LEN_1 */
10651 { Bad_Opcode },
10652 { "kxnorq", { MaskG, MaskVex, MaskR }, 0 },
10653 },
10654 {
10655 /* MOD_VEX_W_0_0F46_P_2_LEN_1 */
10656 { Bad_Opcode },
10657 { "kxnorb", { MaskG, MaskVex, MaskR }, 0 },
10658 },
10659 {
10660 /* MOD_VEX_W_1_0F46_P_2_LEN_1 */
10661 { Bad_Opcode },
10662 { "kxnord", { MaskG, MaskVex, MaskR }, 0 },
10663 },
10664 {
10665 /* MOD_VEX_W_0_0F47_P_0_LEN_1 */
10666 { Bad_Opcode },
10667 { "kxorw", { MaskG, MaskVex, MaskR }, 0 },
10668 },
10669 {
10670 /* MOD_VEX_W_1_0F47_P_0_LEN_1 */
10671 { Bad_Opcode },
10672 { "kxorq", { MaskG, MaskVex, MaskR }, 0 },
10673 },
10674 {
10675 /* MOD_VEX_W_0_0F47_P_2_LEN_1 */
10676 { Bad_Opcode },
10677 { "kxorb", { MaskG, MaskVex, MaskR }, 0 },
10678 },
10679 {
10680 /* MOD_VEX_W_1_0F47_P_2_LEN_1 */
10681 { Bad_Opcode },
10682 { "kxord", { MaskG, MaskVex, MaskR }, 0 },
10683 },
10684 {
10685 /* MOD_VEX_W_0_0F4A_P_0_LEN_1 */
10686 { Bad_Opcode },
10687 { "kaddw", { MaskG, MaskVex, MaskR }, 0 },
10688 },
10689 {
10690 /* MOD_VEX_W_1_0F4A_P_0_LEN_1 */
10691 { Bad_Opcode },
10692 { "kaddq", { MaskG, MaskVex, MaskR }, 0 },
10693 },
10694 {
10695 /* MOD_VEX_W_0_0F4A_P_2_LEN_1 */
10696 { Bad_Opcode },
10697 { "kaddb", { MaskG, MaskVex, MaskR }, 0 },
10698 },
10699 {
10700 /* MOD_VEX_W_1_0F4A_P_2_LEN_1 */
10701 { Bad_Opcode },
10702 { "kaddd", { MaskG, MaskVex, MaskR }, 0 },
10703 },
10704 {
10705 /* MOD_VEX_W_0_0F4B_P_0_LEN_1 */
10706 { Bad_Opcode },
10707 { "kunpckwd", { MaskG, MaskVex, MaskR }, 0 },
10708 },
10709 {
10710 /* MOD_VEX_W_1_0F4B_P_0_LEN_1 */
10711 { Bad_Opcode },
10712 { "kunpckdq", { MaskG, MaskVex, MaskR }, 0 },
10713 },
10714 {
10715 /* MOD_VEX_W_0_0F4B_P_2_LEN_1 */
10716 { Bad_Opcode },
10717 { "kunpckbw", { MaskG, MaskVex, MaskR }, 0 },
10718 },
c0f3af97 10719 {
592a252b 10720 /* MOD_VEX_0F50 */
592d1631 10721 { Bad_Opcode },
ec6f095a 10722 { "vmovmskpX", { Gdq, XS }, 0 },
c0f3af97
L
10723 },
10724 {
592a252b 10725 /* MOD_VEX_0F71_REG_2 */
592d1631 10726 { Bad_Opcode },
592a252b 10727 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_2) },
b844680a
L
10728 },
10729 {
592a252b 10730 /* MOD_VEX_0F71_REG_4 */
592d1631 10731 { Bad_Opcode },
592a252b 10732 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_4) },
b844680a
L
10733 },
10734 {
592a252b 10735 /* MOD_VEX_0F71_REG_6 */
592d1631 10736 { Bad_Opcode },
592a252b 10737 { PREFIX_TABLE (PREFIX_VEX_0F71_REG_6) },
b844680a
L
10738 },
10739 {
592a252b 10740 /* MOD_VEX_0F72_REG_2 */
592d1631 10741 { Bad_Opcode },
592a252b 10742 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_2) },
b844680a 10743 },
d8faab4e 10744 {
592a252b 10745 /* MOD_VEX_0F72_REG_4 */
592d1631 10746 { Bad_Opcode },
592a252b 10747 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_4) },
d8faab4e
L
10748 },
10749 {
592a252b 10750 /* MOD_VEX_0F72_REG_6 */
592d1631 10751 { Bad_Opcode },
592a252b 10752 { PREFIX_TABLE (PREFIX_VEX_0F72_REG_6) },
d8faab4e 10753 },
876d4bfa 10754 {
592a252b 10755 /* MOD_VEX_0F73_REG_2 */
592d1631 10756 { Bad_Opcode },
592a252b 10757 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_2) },
876d4bfa
L
10758 },
10759 {
592a252b 10760 /* MOD_VEX_0F73_REG_3 */
592d1631 10761 { Bad_Opcode },
592a252b 10762 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_3) },
475a2301
L
10763 },
10764 {
592a252b 10765 /* MOD_VEX_0F73_REG_6 */
592d1631 10766 { Bad_Opcode },
592a252b 10767 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_6) },
876d4bfa
L
10768 },
10769 {
592a252b 10770 /* MOD_VEX_0F73_REG_7 */
592d1631 10771 { Bad_Opcode },
592a252b 10772 { PREFIX_TABLE (PREFIX_VEX_0F73_REG_7) },
876d4bfa 10773 },
ab4e4ed5
AF
10774 {
10775 /* MOD_VEX_W_0_0F91_P_0_LEN_0 */
10776 { "kmovw", { Ew, MaskG }, 0 },
10777 { Bad_Opcode },
10778 },
10779 {
10780 /* MOD_VEX_W_0_0F91_P_0_LEN_0 */
10781 { "kmovq", { Eq, MaskG }, 0 },
10782 { Bad_Opcode },
10783 },
10784 {
10785 /* MOD_VEX_W_0_0F91_P_2_LEN_0 */
10786 { "kmovb", { Eb, MaskG }, 0 },
10787 { Bad_Opcode },
10788 },
10789 {
10790 /* MOD_VEX_W_0_0F91_P_2_LEN_0 */
10791 { "kmovd", { Ed, MaskG }, 0 },
10792 { Bad_Opcode },
10793 },
10794 {
10795 /* MOD_VEX_W_0_0F92_P_0_LEN_0 */
10796 { Bad_Opcode },
10797 { "kmovw", { MaskG, Rdq }, 0 },
10798 },
10799 {
10800 /* MOD_VEX_W_0_0F92_P_2_LEN_0 */
10801 { Bad_Opcode },
10802 { "kmovb", { MaskG, Rdq }, 0 },
10803 },
10804 {
58a211d2 10805 /* MOD_VEX_0F92_P_3_LEN_0 */
ab4e4ed5 10806 { Bad_Opcode },
58a211d2 10807 { "kmovK", { MaskG, Rdq }, 0 },
ab4e4ed5
AF
10808 },
10809 {
10810 /* MOD_VEX_W_0_0F93_P_0_LEN_0 */
10811 { Bad_Opcode },
10812 { "kmovw", { Gdq, MaskR }, 0 },
10813 },
10814 {
10815 /* MOD_VEX_W_0_0F93_P_2_LEN_0 */
10816 { Bad_Opcode },
10817 { "kmovb", { Gdq, MaskR }, 0 },
10818 },
10819 {
58a211d2 10820 /* MOD_VEX_0F93_P_3_LEN_0 */
ab4e4ed5 10821 { Bad_Opcode },
58a211d2 10822 { "kmovK", { Gdq, MaskR }, 0 },
ab4e4ed5
AF
10823 },
10824 {
10825 /* MOD_VEX_W_0_0F98_P_0_LEN_0 */
10826 { Bad_Opcode },
10827 { "kortestw", { MaskG, MaskR }, 0 },
10828 },
10829 {
10830 /* MOD_VEX_W_1_0F98_P_0_LEN_0 */
10831 { Bad_Opcode },
10832 { "kortestq", { MaskG, MaskR }, 0 },
10833 },
10834 {
10835 /* MOD_VEX_W_0_0F98_P_2_LEN_0 */
10836 { Bad_Opcode },
10837 { "kortestb", { MaskG, MaskR }, 0 },
10838 },
10839 {
10840 /* MOD_VEX_W_1_0F98_P_2_LEN_0 */
10841 { Bad_Opcode },
10842 { "kortestd", { MaskG, MaskR }, 0 },
10843 },
10844 {
10845 /* MOD_VEX_W_0_0F99_P_0_LEN_0 */
10846 { Bad_Opcode },
10847 { "ktestw", { MaskG, MaskR }, 0 },
10848 },
10849 {
10850 /* MOD_VEX_W_1_0F99_P_0_LEN_0 */
10851 { Bad_Opcode },
10852 { "ktestq", { MaskG, MaskR }, 0 },
10853 },
10854 {
10855 /* MOD_VEX_W_0_0F99_P_2_LEN_0 */
10856 { Bad_Opcode },
10857 { "ktestb", { MaskG, MaskR }, 0 },
10858 },
10859 {
10860 /* MOD_VEX_W_1_0F99_P_2_LEN_0 */
10861 { Bad_Opcode },
10862 { "ktestd", { MaskG, MaskR }, 0 },
10863 },
876d4bfa 10864 {
592a252b
L
10865 /* MOD_VEX_0FAE_REG_2 */
10866 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_2_M_0) },
876d4bfa 10867 },
bbedc832 10868 {
592a252b
L
10869 /* MOD_VEX_0FAE_REG_3 */
10870 { VEX_LEN_TABLE (VEX_LEN_0FAE_R_3_M_0) },
bbedc832 10871 },
144c41d9 10872 {
592a252b 10873 /* MOD_VEX_0FD7_PREFIX_2 */
592d1631 10874 { Bad_Opcode },
ec6f095a 10875 { "vpmovmskb", { Gdq, XS }, 0 },
144c41d9 10876 },
1afd85e3 10877 {
592a252b 10878 /* MOD_VEX_0FE7_PREFIX_2 */
ec6f095a 10879 { "vmovntdq", { Mx, XM }, 0 },
1afd85e3
L
10880 },
10881 {
592a252b 10882 /* MOD_VEX_0FF0_PREFIX_3 */
ec6f095a 10883 { "vlddqu", { XM, M }, 0 },
92fddf8e 10884 },
75c135a8 10885 {
592a252b
L
10886 /* MOD_VEX_0F381A_PREFIX_2 */
10887 { VEX_LEN_TABLE (VEX_LEN_0F381A_P_2_M_0) },
75c135a8 10888 },
1afd85e3 10889 {
592a252b 10890 /* MOD_VEX_0F382A_PREFIX_2 */
ec6f095a 10891 { "vmovntdqa", { XM, Mx }, 0 },
1afd85e3 10892 },
75c135a8 10893 {
592a252b
L
10894 /* MOD_VEX_0F382C_PREFIX_2 */
10895 { VEX_W_TABLE (VEX_W_0F382C_P_2_M_0) },
75c135a8 10896 },
1afd85e3 10897 {
592a252b
L
10898 /* MOD_VEX_0F382D_PREFIX_2 */
10899 { VEX_W_TABLE (VEX_W_0F382D_P_2_M_0) },
1afd85e3
L
10900 },
10901 {
592a252b
L
10902 /* MOD_VEX_0F382E_PREFIX_2 */
10903 { VEX_W_TABLE (VEX_W_0F382E_P_2_M_0) },
1afd85e3
L
10904 },
10905 {
592a252b
L
10906 /* MOD_VEX_0F382F_PREFIX_2 */
10907 { VEX_W_TABLE (VEX_W_0F382F_P_2_M_0) },
1afd85e3 10908 },
6c30d220
L
10909 {
10910 /* MOD_VEX_0F385A_PREFIX_2 */
10911 { VEX_LEN_TABLE (VEX_LEN_0F385A_P_2_M_0) },
10912 },
10913 {
10914 /* MOD_VEX_0F388C_PREFIX_2 */
bf890a93 10915 { "vpmaskmov%LW", { XM, Vex, Mx }, 0 },
6c30d220
L
10916 },
10917 {
10918 /* MOD_VEX_0F388E_PREFIX_2 */
bf890a93 10919 { "vpmaskmov%LW", { Mx, Vex, XM }, 0 },
6c30d220 10920 },
ab4e4ed5
AF
10921 {
10922 /* MOD_VEX_W_0_0F3A30_P_2_LEN_0 */
10923 { Bad_Opcode },
10924 { "kshiftrb", { MaskG, MaskR, Ib }, 0 },
10925 },
10926 {
10927 /* MOD_VEX_W_1_0F3A30_P_2_LEN_0 */
10928 { Bad_Opcode },
10929 { "kshiftrw", { MaskG, MaskR, Ib }, 0 },
10930 },
10931 {
10932 /* MOD_VEX_W_0_0F3A31_P_2_LEN_0 */
10933 { Bad_Opcode },
10934 { "kshiftrd", { MaskG, MaskR, Ib }, 0 },
10935 },
10936 {
10937 /* MOD_VEX_W_1_0F3A31_P_2_LEN_0 */
10938 { Bad_Opcode },
10939 { "kshiftrq", { MaskG, MaskR, Ib }, 0 },
10940 },
10941 {
10942 /* MOD_VEX_W_0_0F3A32_P_2_LEN_0 */
10943 { Bad_Opcode },
10944 { "kshiftlb", { MaskG, MaskR, Ib }, 0 },
10945 },
10946 {
10947 /* MOD_VEX_W_1_0F3A32_P_2_LEN_0 */
10948 { Bad_Opcode },
10949 { "kshiftlw", { MaskG, MaskR, Ib }, 0 },
10950 },
10951 {
10952 /* MOD_VEX_W_0_0F3A33_P_2_LEN_0 */
10953 { Bad_Opcode },
10954 { "kshiftld", { MaskG, MaskR, Ib }, 0 },
10955 },
10956 {
10957 /* MOD_VEX_W_1_0F3A33_P_2_LEN_0 */
10958 { Bad_Opcode },
10959 { "kshiftlq", { MaskG, MaskR, Ib }, 0 },
10960 },
43234a1e
L
10961#define NEED_MOD_TABLE
10962#include "i386-dis-evex.h"
10963#undef NEED_MOD_TABLE
b844680a
L
10964};
10965
1ceb70f8 10966static const struct dis386 rm_table[][8] = {
42164a71
L
10967 {
10968 /* RM_C6_REG_7 */
bf890a93 10969 { "xabort", { Skip_MODRM, Ib }, 0 },
42164a71
L
10970 },
10971 {
10972 /* RM_C7_REG_7 */
bf890a93 10973 { "xbeginT", { Skip_MODRM, Jv }, 0 },
42164a71 10974 },
b844680a 10975 {
1ceb70f8 10976 /* RM_0F01_REG_0 */
a4e78aa5 10977 { "enclv", { Skip_MODRM }, 0 },
bf890a93
IT
10978 { "vmcall", { Skip_MODRM }, 0 },
10979 { "vmlaunch", { Skip_MODRM }, 0 },
10980 { "vmresume", { Skip_MODRM }, 0 },
10981 { "vmxoff", { Skip_MODRM }, 0 },
be3a8dca 10982 { "pconfig", { Skip_MODRM }, 0 },
b844680a
L
10983 },
10984 {
1ceb70f8 10985 /* RM_0F01_REG_1 */
bf890a93
IT
10986 { "monitor", { { OP_Monitor, 0 } }, 0 },
10987 { "mwait", { { OP_Mwait, 0 } }, 0 },
10988 { "clac", { Skip_MODRM }, 0 },
10989 { "stac", { Skip_MODRM }, 0 },
2cf200a4
IT
10990 { Bad_Opcode },
10991 { Bad_Opcode },
10992 { Bad_Opcode },
bf890a93 10993 { "encls", { Skip_MODRM }, 0 },
b844680a 10994 },
475a2301
L
10995 {
10996 /* RM_0F01_REG_2 */
bf890a93
IT
10997 { "xgetbv", { Skip_MODRM }, 0 },
10998 { "xsetbv", { Skip_MODRM }, 0 },
8729a6f6
L
10999 { Bad_Opcode },
11000 { Bad_Opcode },
bf890a93
IT
11001 { "vmfunc", { Skip_MODRM }, 0 },
11002 { "xend", { Skip_MODRM }, 0 },
11003 { "xtest", { Skip_MODRM }, 0 },
11004 { "enclu", { Skip_MODRM }, 0 },
475a2301 11005 },
b844680a 11006 {
1ceb70f8 11007 /* RM_0F01_REG_3 */
bf890a93
IT
11008 { "vmrun", { Skip_MODRM }, 0 },
11009 { "vmmcall", { Skip_MODRM }, 0 },
11010 { "vmload", { Skip_MODRM }, 0 },
11011 { "vmsave", { Skip_MODRM }, 0 },
11012 { "stgi", { Skip_MODRM }, 0 },
11013 { "clgi", { Skip_MODRM }, 0 },
11014 { "skinit", { Skip_MODRM }, 0 },
11015 { "invlpga", { Skip_MODRM }, 0 },
4e7d34a6 11016 },
8eab4136
L
11017 {
11018 /* RM_0F01_REG_5 */
2234eee6 11019 { PREFIX_TABLE (PREFIX_MOD_3_0F01_REG_5_RM_0) },
8eab4136 11020 { Bad_Opcode },
603555e5 11021 { PREFIX_TABLE (PREFIX_MOD_3_0F01_REG_5_RM_2) },
8eab4136
L
11022 { Bad_Opcode },
11023 { Bad_Opcode },
11024 { Bad_Opcode },
11025 { "rdpkru", { Skip_MODRM }, 0 },
11026 { "wrpkru", { Skip_MODRM }, 0 },
11027 },
4e7d34a6 11028 {
1ceb70f8 11029 /* RM_0F01_REG_7 */
bf890a93
IT
11030 { "swapgs", { Skip_MODRM }, 0 },
11031 { "rdtscp", { Skip_MODRM }, 0 },
9916071f
AP
11032 { "monitorx", { { OP_Monitor, 0 } }, 0 },
11033 { "mwaitx", { { OP_Mwaitx, 0 } }, 0 },
bf890a93 11034 { "clzero", { Skip_MODRM }, 0 },
b844680a 11035 },
603555e5
L
11036 {
11037 /* RM_0F1E_MOD_3_REG_7 */
11038 { "nopQ", { Ev }, 0 },
11039 { "nopQ", { Ev }, 0 },
11040 { "endbr64", { Skip_MODRM }, PREFIX_OPCODE },
11041 { "endbr32", { Skip_MODRM }, PREFIX_OPCODE },
11042 { "nopQ", { Ev }, 0 },
11043 { "nopQ", { Ev }, 0 },
11044 { "nopQ", { Ev }, 0 },
11045 { "nopQ", { Ev }, 0 },
11046 },
b844680a 11047 {
1ceb70f8 11048 /* RM_0FAE_REG_6 */
bf890a93 11049 { "mfence", { Skip_MODRM }, 0 },
b844680a 11050 },
bbedc832 11051 {
1ceb70f8 11052 /* RM_0FAE_REG_7 */
b5cefcca
L
11053 { "sfence", { Skip_MODRM }, 0 },
11054
144c41d9 11055 },
b844680a
L
11056};
11057
c608c12e
AM
11058#define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")
11059
f16cd0d5
L
11060/* We use the high bit to indicate different name for the same
11061 prefix. */
f16cd0d5 11062#define REP_PREFIX (0xf3 | 0x100)
42164a71
L
11063#define XACQUIRE_PREFIX (0xf2 | 0x200)
11064#define XRELEASE_PREFIX (0xf3 | 0x400)
7e8b059b 11065#define BND_PREFIX (0xf2 | 0x400)
04ef582a 11066#define NOTRACK_PREFIX (0x3e | 0x100)
f16cd0d5
L
11067
11068static int
26ca5450 11069ckprefix (void)
252b5132 11070{
f16cd0d5 11071 int newrex, i, length;
52b15da3 11072 rex = 0;
c0f3af97 11073 rex_ignored = 0;
252b5132 11074 prefixes = 0;
7d421014 11075 used_prefixes = 0;
52b15da3 11076 rex_used = 0;
f16cd0d5
L
11077 last_lock_prefix = -1;
11078 last_repz_prefix = -1;
11079 last_repnz_prefix = -1;
11080 last_data_prefix = -1;
11081 last_addr_prefix = -1;
11082 last_rex_prefix = -1;
11083 last_seg_prefix = -1;
d9949a36 11084 fwait_prefix = -1;
285ca992 11085 active_seg_prefix = 0;
f310f33d
L
11086 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
11087 all_prefixes[i] = 0;
11088 i = 0;
f16cd0d5
L
11089 length = 0;
11090 /* The maximum instruction length is 15bytes. */
11091 while (length < MAX_CODE_LENGTH - 1)
252b5132
RH
11092 {
11093 FETCH_DATA (the_info, codep + 1);
52b15da3 11094 newrex = 0;
252b5132
RH
11095 switch (*codep)
11096 {
52b15da3
JH
11097 /* REX prefixes family. */
11098 case 0x40:
11099 case 0x41:
11100 case 0x42:
11101 case 0x43:
11102 case 0x44:
11103 case 0x45:
11104 case 0x46:
11105 case 0x47:
11106 case 0x48:
11107 case 0x49:
11108 case 0x4a:
11109 case 0x4b:
11110 case 0x4c:
11111 case 0x4d:
11112 case 0x4e:
11113 case 0x4f:
f16cd0d5
L
11114 if (address_mode == mode_64bit)
11115 newrex = *codep;
11116 else
11117 return 1;
11118 last_rex_prefix = i;
52b15da3 11119 break;
252b5132
RH
11120 case 0xf3:
11121 prefixes |= PREFIX_REPZ;
f16cd0d5 11122 last_repz_prefix = i;
252b5132
RH
11123 break;
11124 case 0xf2:
11125 prefixes |= PREFIX_REPNZ;
f16cd0d5 11126 last_repnz_prefix = i;
252b5132
RH
11127 break;
11128 case 0xf0:
11129 prefixes |= PREFIX_LOCK;
f16cd0d5 11130 last_lock_prefix = i;
252b5132
RH
11131 break;
11132 case 0x2e:
11133 prefixes |= PREFIX_CS;
f16cd0d5 11134 last_seg_prefix = i;
285ca992 11135 active_seg_prefix = PREFIX_CS;
252b5132
RH
11136 break;
11137 case 0x36:
11138 prefixes |= PREFIX_SS;
f16cd0d5 11139 last_seg_prefix = i;
285ca992 11140 active_seg_prefix = PREFIX_SS;
252b5132
RH
11141 break;
11142 case 0x3e:
11143 prefixes |= PREFIX_DS;
f16cd0d5 11144 last_seg_prefix = i;
285ca992 11145 active_seg_prefix = PREFIX_DS;
252b5132
RH
11146 break;
11147 case 0x26:
11148 prefixes |= PREFIX_ES;
f16cd0d5 11149 last_seg_prefix = i;
285ca992 11150 active_seg_prefix = PREFIX_ES;
252b5132
RH
11151 break;
11152 case 0x64:
11153 prefixes |= PREFIX_FS;
f16cd0d5 11154 last_seg_prefix = i;
285ca992 11155 active_seg_prefix = PREFIX_FS;
252b5132
RH
11156 break;
11157 case 0x65:
11158 prefixes |= PREFIX_GS;
f16cd0d5 11159 last_seg_prefix = i;
285ca992 11160 active_seg_prefix = PREFIX_GS;
252b5132
RH
11161 break;
11162 case 0x66:
11163 prefixes |= PREFIX_DATA;
f16cd0d5 11164 last_data_prefix = i;
252b5132
RH
11165 break;
11166 case 0x67:
11167 prefixes |= PREFIX_ADDR;
f16cd0d5 11168 last_addr_prefix = i;
252b5132 11169 break;
5076851f 11170 case FWAIT_OPCODE:
252b5132
RH
11171 /* fwait is really an instruction. If there are prefixes
11172 before the fwait, they belong to the fwait, *not* to the
11173 following instruction. */
d9949a36 11174 fwait_prefix = i;
3e7d61b2 11175 if (prefixes || rex)
252b5132
RH
11176 {
11177 prefixes |= PREFIX_FWAIT;
11178 codep++;
6c067bbb
RM
11179 /* This ensures that the previous REX prefixes are noticed
11180 as unused prefixes, as in the return case below. */
11181 rex_used = rex;
f16cd0d5 11182 return 1;
252b5132
RH
11183 }
11184 prefixes = PREFIX_FWAIT;
11185 break;
11186 default:
f16cd0d5 11187 return 1;
252b5132 11188 }
52b15da3
JH
11189 /* Rex is ignored when followed by another prefix. */
11190 if (rex)
11191 {
3e7d61b2 11192 rex_used = rex;
f16cd0d5 11193 return 1;
52b15da3 11194 }
f16cd0d5 11195 if (*codep != FWAIT_OPCODE)
4e9ac44a 11196 all_prefixes[i++] = *codep;
52b15da3 11197 rex = newrex;
252b5132 11198 codep++;
f16cd0d5
L
11199 length++;
11200 }
11201 return 0;
11202}
11203
7d421014
ILT
11204/* Return the name of the prefix byte PREF, or NULL if PREF is not a
11205 prefix byte. */
11206
11207static const char *
26ca5450 11208prefix_name (int pref, int sizeflag)
7d421014 11209{
0003779b
L
11210 static const char *rexes [16] =
11211 {
11212 "rex", /* 0x40 */
11213 "rex.B", /* 0x41 */
11214 "rex.X", /* 0x42 */
11215 "rex.XB", /* 0x43 */
11216 "rex.R", /* 0x44 */
11217 "rex.RB", /* 0x45 */
11218 "rex.RX", /* 0x46 */
11219 "rex.RXB", /* 0x47 */
11220 "rex.W", /* 0x48 */
11221 "rex.WB", /* 0x49 */
11222 "rex.WX", /* 0x4a */
11223 "rex.WXB", /* 0x4b */
11224 "rex.WR", /* 0x4c */
11225 "rex.WRB", /* 0x4d */
11226 "rex.WRX", /* 0x4e */
11227 "rex.WRXB", /* 0x4f */
11228 };
11229
7d421014
ILT
11230 switch (pref)
11231 {
52b15da3
JH
11232 /* REX prefixes family. */
11233 case 0x40:
52b15da3 11234 case 0x41:
52b15da3 11235 case 0x42:
52b15da3 11236 case 0x43:
52b15da3 11237 case 0x44:
52b15da3 11238 case 0x45:
52b15da3 11239 case 0x46:
52b15da3 11240 case 0x47:
52b15da3 11241 case 0x48:
52b15da3 11242 case 0x49:
52b15da3 11243 case 0x4a:
52b15da3 11244 case 0x4b:
52b15da3 11245 case 0x4c:
52b15da3 11246 case 0x4d:
52b15da3 11247 case 0x4e:
52b15da3 11248 case 0x4f:
0003779b 11249 return rexes [pref - 0x40];
7d421014
ILT
11250 case 0xf3:
11251 return "repz";
11252 case 0xf2:
11253 return "repnz";
11254 case 0xf0:
11255 return "lock";
11256 case 0x2e:
11257 return "cs";
11258 case 0x36:
11259 return "ss";
11260 case 0x3e:
11261 return "ds";
11262 case 0x26:
11263 return "es";
11264 case 0x64:
11265 return "fs";
11266 case 0x65:
11267 return "gs";
11268 case 0x66:
11269 return (sizeflag & DFLAG) ? "data16" : "data32";
11270 case 0x67:
cb712a9e 11271 if (address_mode == mode_64bit)
db6eb5be 11272 return (sizeflag & AFLAG) ? "addr32" : "addr64";
c1a64871 11273 else
2888cb7a 11274 return (sizeflag & AFLAG) ? "addr16" : "addr32";
7d421014
ILT
11275 case FWAIT_OPCODE:
11276 return "fwait";
f16cd0d5
L
11277 case REP_PREFIX:
11278 return "rep";
42164a71
L
11279 case XACQUIRE_PREFIX:
11280 return "xacquire";
11281 case XRELEASE_PREFIX:
11282 return "xrelease";
7e8b059b
L
11283 case BND_PREFIX:
11284 return "bnd";
04ef582a
L
11285 case NOTRACK_PREFIX:
11286 return "notrack";
7d421014
ILT
11287 default:
11288 return NULL;
11289 }
11290}
11291
ce518a5f
L
11292static char op_out[MAX_OPERANDS][100];
11293static int op_ad, op_index[MAX_OPERANDS];
1d9f512f 11294static int two_source_ops;
ce518a5f
L
11295static bfd_vma op_address[MAX_OPERANDS];
11296static bfd_vma op_riprel[MAX_OPERANDS];
52b15da3 11297static bfd_vma start_pc;
ce518a5f 11298
252b5132
RH
11299/*
11300 * On the 386's of 1988, the maximum length of an instruction is 15 bytes.
11301 * (see topic "Redundant prefixes" in the "Differences from 8086"
11302 * section of the "Virtual 8086 Mode" chapter.)
11303 * 'pc' should be the address of this instruction, it will
11304 * be used to print the target address if this is a relative jump or call
11305 * The function returns the length of this instruction in bytes.
11306 */
11307
252b5132 11308static char intel_syntax;
9d141669 11309static char intel_mnemonic = !SYSV386_COMPAT;
252b5132
RH
11310static char open_char;
11311static char close_char;
11312static char separator_char;
11313static char scale_char;
11314
5db04b09
L
11315enum x86_64_isa
11316{
11317 amd64 = 0,
11318 intel64
11319};
11320
11321static enum x86_64_isa isa64;
11322
e396998b
AM
11323/* Here for backwards compatibility. When gdb stops using
11324 print_insn_i386_att and print_insn_i386_intel these functions can
11325 disappear, and print_insn_i386 be merged into print_insn. */
252b5132 11326int
26ca5450 11327print_insn_i386_att (bfd_vma pc, disassemble_info *info)
252b5132
RH
11328{
11329 intel_syntax = 0;
e396998b
AM
11330
11331 return print_insn (pc, info);
252b5132
RH
11332}
11333
11334int
26ca5450 11335print_insn_i386_intel (bfd_vma pc, disassemble_info *info)
252b5132
RH
11336{
11337 intel_syntax = 1;
e396998b
AM
11338
11339 return print_insn (pc, info);
252b5132
RH
11340}
11341
e396998b 11342int
26ca5450 11343print_insn_i386 (bfd_vma pc, disassemble_info *info)
e396998b
AM
11344{
11345 intel_syntax = -1;
11346
11347 return print_insn (pc, info);
11348}
11349
f59a29b9
L
11350void
11351print_i386_disassembler_options (FILE *stream)
11352{
11353 fprintf (stream, _("\n\
11354The following i386/x86-64 specific disassembler options are supported for use\n\
11355with the -M switch (multiple options should be separated by commas):\n"));
11356
11357 fprintf (stream, _(" x86-64 Disassemble in 64bit mode\n"));
11358 fprintf (stream, _(" i386 Disassemble in 32bit mode\n"));
11359 fprintf (stream, _(" i8086 Disassemble in 16bit mode\n"));
11360 fprintf (stream, _(" att Display instruction in AT&T syntax\n"));
11361 fprintf (stream, _(" intel Display instruction in Intel syntax\n"));
9d141669
L
11362 fprintf (stream, _(" att-mnemonic\n"
11363 " Display instruction in AT&T mnemonic\n"));
11364 fprintf (stream, _(" intel-mnemonic\n"
11365 " Display instruction in Intel mnemonic\n"));
f59a29b9
L
11366 fprintf (stream, _(" addr64 Assume 64bit address size\n"));
11367 fprintf (stream, _(" addr32 Assume 32bit address size\n"));
11368 fprintf (stream, _(" addr16 Assume 16bit address size\n"));
11369 fprintf (stream, _(" data32 Assume 32bit data size\n"));
11370 fprintf (stream, _(" data16 Assume 16bit data size\n"));
11371 fprintf (stream, _(" suffix Always display instruction suffix in AT&T syntax\n"));
5db04b09
L
11372 fprintf (stream, _(" amd64 Display instruction in AMD64 ISA\n"));
11373 fprintf (stream, _(" intel64 Display instruction in Intel64 ISA\n"));
f59a29b9
L
11374}
11375
592d1631 11376/* Bad opcode. */
bf890a93 11377static const struct dis386 bad_opcode = { "(bad)", { XX }, 0 };
592d1631 11378
b844680a
L
11379/* Get a pointer to struct dis386 with a valid name. */
11380
11381static const struct dis386 *
8bb15339 11382get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
b844680a 11383{
91d6fa6a 11384 int vindex, vex_table_index;
b844680a
L
11385
11386 if (dp->name != NULL)
11387 return dp;
11388
11389 switch (dp->op[0].bytemode)
11390 {
1ceb70f8
L
11391 case USE_REG_TABLE:
11392 dp = &reg_table[dp->op[1].bytemode][modrm.reg];
11393 break;
11394
11395 case USE_MOD_TABLE:
91d6fa6a
NC
11396 vindex = modrm.mod == 0x3 ? 1 : 0;
11397 dp = &mod_table[dp->op[1].bytemode][vindex];
1ceb70f8
L
11398 break;
11399
11400 case USE_RM_TABLE:
11401 dp = &rm_table[dp->op[1].bytemode][modrm.rm];
b844680a
L
11402 break;
11403
4e7d34a6 11404 case USE_PREFIX_TABLE:
c0f3af97 11405 if (need_vex)
b844680a 11406 {
c0f3af97
L
11407 /* The prefix in VEX is implicit. */
11408 switch (vex.prefix)
11409 {
11410 case 0:
91d6fa6a 11411 vindex = 0;
c0f3af97
L
11412 break;
11413 case REPE_PREFIX_OPCODE:
91d6fa6a 11414 vindex = 1;
c0f3af97
L
11415 break;
11416 case DATA_PREFIX_OPCODE:
91d6fa6a 11417 vindex = 2;
c0f3af97
L
11418 break;
11419 case REPNE_PREFIX_OPCODE:
91d6fa6a 11420 vindex = 3;
c0f3af97
L
11421 break;
11422 default:
11423 abort ();
11424 break;
11425 }
b844680a 11426 }
7bb15c6f 11427 else
b844680a 11428 {
285ca992
L
11429 int last_prefix = -1;
11430 int prefix = 0;
91d6fa6a 11431 vindex = 0;
285ca992
L
11432 /* We check PREFIX_REPNZ and PREFIX_REPZ before PREFIX_DATA.
11433 When there are multiple PREFIX_REPNZ and PREFIX_REPZ, the
11434 last one wins. */
11435 if ((prefixes & (PREFIX_REPZ | PREFIX_REPNZ)) != 0)
b844680a 11436 {
285ca992 11437 if (last_repz_prefix > last_repnz_prefix)
c0f3af97 11438 {
285ca992
L
11439 vindex = 1;
11440 prefix = PREFIX_REPZ;
11441 last_prefix = last_repz_prefix;
c0f3af97
L
11442 }
11443 else
b844680a 11444 {
285ca992
L
11445 vindex = 3;
11446 prefix = PREFIX_REPNZ;
11447 last_prefix = last_repnz_prefix;
b844680a 11448 }
285ca992 11449
507bd325
L
11450 /* Check if prefix should be ignored. */
11451 if ((((prefix_table[dp->op[1].bytemode][vindex].prefix_requirement
11452 & PREFIX_IGNORED) >> PREFIX_IGNORED_SHIFT)
11453 & prefix) != 0)
285ca992
L
11454 vindex = 0;
11455 }
11456
11457 if (vindex == 0 && (prefixes & PREFIX_DATA) != 0)
11458 {
11459 vindex = 2;
11460 prefix = PREFIX_DATA;
11461 last_prefix = last_data_prefix;
11462 }
11463
11464 if (vindex != 0)
11465 {
11466 used_prefixes |= prefix;
11467 all_prefixes[last_prefix] = 0;
b844680a
L
11468 }
11469 }
91d6fa6a 11470 dp = &prefix_table[dp->op[1].bytemode][vindex];
b844680a
L
11471 break;
11472
4e7d34a6 11473 case USE_X86_64_TABLE:
91d6fa6a
NC
11474 vindex = address_mode == mode_64bit ? 1 : 0;
11475 dp = &x86_64_table[dp->op[1].bytemode][vindex];
b844680a
L
11476 break;
11477
4e7d34a6 11478 case USE_3BYTE_TABLE:
8bb15339 11479 FETCH_DATA (info, codep + 2);
91d6fa6a
NC
11480 vindex = *codep++;
11481 dp = &three_byte_table[dp->op[1].bytemode][vindex];
285ca992 11482 end_codep = codep;
8bb15339
L
11483 modrm.mod = (*codep >> 6) & 3;
11484 modrm.reg = (*codep >> 3) & 7;
11485 modrm.rm = *codep & 7;
11486 break;
11487
c0f3af97
L
11488 case USE_VEX_LEN_TABLE:
11489 if (!need_vex)
11490 abort ();
11491
11492 switch (vex.length)
11493 {
11494 case 128:
91d6fa6a 11495 vindex = 0;
c0f3af97
L
11496 break;
11497 case 256:
91d6fa6a 11498 vindex = 1;
c0f3af97
L
11499 break;
11500 default:
11501 abort ();
11502 break;
11503 }
11504
91d6fa6a 11505 dp = &vex_len_table[dp->op[1].bytemode][vindex];
c0f3af97
L
11506 break;
11507
04e2a182
L
11508 case USE_EVEX_LEN_TABLE:
11509 if (!vex.evex)
11510 abort ();
11511
11512 switch (vex.length)
11513 {
11514 case 128:
11515 vindex = 0;
11516 break;
11517 case 256:
11518 vindex = 1;
11519 break;
11520 case 512:
11521 vindex = 2;
11522 break;
11523 default:
11524 abort ();
11525 break;
11526 }
11527
11528 dp = &evex_len_table[dp->op[1].bytemode][vindex];
11529 break;
11530
f88c9eb0
SP
11531 case USE_XOP_8F_TABLE:
11532 FETCH_DATA (info, codep + 3);
11533 /* All bits in the REX prefix are ignored. */
11534 rex_ignored = rex;
11535 rex = ~(*codep >> 5) & 0x7;
11536
11537 /* VEX_TABLE_INDEX is the mmmmm part of the XOP byte 1 "RCB.mmmmm". */
11538 switch ((*codep & 0x1f))
11539 {
11540 default:
f07af43e
L
11541 dp = &bad_opcode;
11542 return dp;
5dd85c99
SP
11543 case 0x8:
11544 vex_table_index = XOP_08;
11545 break;
f88c9eb0
SP
11546 case 0x9:
11547 vex_table_index = XOP_09;
11548 break;
11549 case 0xa:
11550 vex_table_index = XOP_0A;
11551 break;
11552 }
11553 codep++;
11554 vex.w = *codep & 0x80;
11555 if (vex.w && address_mode == mode_64bit)
11556 rex |= REX_W;
11557
11558 vex.register_specifier = (~(*codep >> 3)) & 0xf;
abfcb414 11559 if (address_mode != mode_64bit)
f07af43e 11560 {
abfcb414
AP
11561 /* In 16/32-bit mode REX_B is silently ignored. */
11562 rex &= ~REX_B;
f07af43e 11563 }
f88c9eb0
SP
11564
11565 vex.length = (*codep & 0x4) ? 256 : 128;
11566 switch ((*codep & 0x3))
11567 {
11568 case 0:
f88c9eb0
SP
11569 break;
11570 case 1:
11571 vex.prefix = DATA_PREFIX_OPCODE;
11572 break;
11573 case 2:
11574 vex.prefix = REPE_PREFIX_OPCODE;
11575 break;
11576 case 3:
11577 vex.prefix = REPNE_PREFIX_OPCODE;
11578 break;
11579 }
11580 need_vex = 1;
11581 need_vex_reg = 1;
11582 codep++;
91d6fa6a
NC
11583 vindex = *codep++;
11584 dp = &xop_table[vex_table_index][vindex];
c48244a5 11585
285ca992 11586 end_codep = codep;
c48244a5
SP
11587 FETCH_DATA (info, codep + 1);
11588 modrm.mod = (*codep >> 6) & 3;
11589 modrm.reg = (*codep >> 3) & 7;
11590 modrm.rm = *codep & 7;
f88c9eb0
SP
11591 break;
11592
c0f3af97 11593 case USE_VEX_C4_TABLE:
43234a1e 11594 /* VEX prefix. */
c0f3af97
L
11595 FETCH_DATA (info, codep + 3);
11596 /* All bits in the REX prefix are ignored. */
11597 rex_ignored = rex;
11598 rex = ~(*codep >> 5) & 0x7;
11599 switch ((*codep & 0x1f))
11600 {
11601 default:
f07af43e
L
11602 dp = &bad_opcode;
11603 return dp;
c0f3af97 11604 case 0x1:
f88c9eb0 11605 vex_table_index = VEX_0F;
c0f3af97
L
11606 break;
11607 case 0x2:
f88c9eb0 11608 vex_table_index = VEX_0F38;
c0f3af97
L
11609 break;
11610 case 0x3:
f88c9eb0 11611 vex_table_index = VEX_0F3A;
c0f3af97
L
11612 break;
11613 }
11614 codep++;
11615 vex.w = *codep & 0x80;
9889cbb1 11616 if (address_mode == mode_64bit)
f07af43e 11617 {
9889cbb1
L
11618 if (vex.w)
11619 rex |= REX_W;
9889cbb1
L
11620 }
11621 else
11622 {
11623 /* For the 3-byte VEX prefix in 32-bit mode, the REX_B bit
11624 is ignored, other REX bits are 0 and the highest bit in
5f847646 11625 VEX.vvvv is also ignored (but we mustn't clear it here). */
9889cbb1 11626 rex = 0;
f07af43e 11627 }
5f847646 11628 vex.register_specifier = (~(*codep >> 3)) & 0xf;
c0f3af97
L
11629 vex.length = (*codep & 0x4) ? 256 : 128;
11630 switch ((*codep & 0x3))
11631 {
11632 case 0:
c0f3af97
L
11633 break;
11634 case 1:
11635 vex.prefix = DATA_PREFIX_OPCODE;
11636 break;
11637 case 2:
11638 vex.prefix = REPE_PREFIX_OPCODE;
11639 break;
11640 case 3:
11641 vex.prefix = REPNE_PREFIX_OPCODE;
11642 break;
11643 }
11644 need_vex = 1;
11645 need_vex_reg = 1;
11646 codep++;
91d6fa6a
NC
11647 vindex = *codep++;
11648 dp = &vex_table[vex_table_index][vindex];
285ca992 11649 end_codep = codep;
53c4d625
JB
11650 /* There is no MODRM byte for VEX0F 77. */
11651 if (vex_table_index != VEX_0F || vindex != 0x77)
c0f3af97
L
11652 {
11653 FETCH_DATA (info, codep + 1);
11654 modrm.mod = (*codep >> 6) & 3;
11655 modrm.reg = (*codep >> 3) & 7;
11656 modrm.rm = *codep & 7;
11657 }
11658 break;
11659
11660 case USE_VEX_C5_TABLE:
43234a1e 11661 /* VEX prefix. */
c0f3af97
L
11662 FETCH_DATA (info, codep + 2);
11663 /* All bits in the REX prefix are ignored. */
11664 rex_ignored = rex;
11665 rex = (*codep & 0x80) ? 0 : REX_R;
11666
9889cbb1
L
11667 /* For the 2-byte VEX prefix in 32-bit mode, the highest bit in
11668 VEX.vvvv is 1. */
c0f3af97 11669 vex.register_specifier = (~(*codep >> 3)) & 0xf;
c0f3af97
L
11670 vex.length = (*codep & 0x4) ? 256 : 128;
11671 switch ((*codep & 0x3))
11672 {
11673 case 0:
c0f3af97
L
11674 break;
11675 case 1:
11676 vex.prefix = DATA_PREFIX_OPCODE;
11677 break;
11678 case 2:
11679 vex.prefix = REPE_PREFIX_OPCODE;
11680 break;
11681 case 3:
11682 vex.prefix = REPNE_PREFIX_OPCODE;
11683 break;
11684 }
11685 need_vex = 1;
11686 need_vex_reg = 1;
11687 codep++;
91d6fa6a
NC
11688 vindex = *codep++;
11689 dp = &vex_table[dp->op[1].bytemode][vindex];
285ca992 11690 end_codep = codep;
53c4d625
JB
11691 /* There is no MODRM byte for VEX 77. */
11692 if (vindex != 0x77)
c0f3af97
L
11693 {
11694 FETCH_DATA (info, codep + 1);
11695 modrm.mod = (*codep >> 6) & 3;
11696 modrm.reg = (*codep >> 3) & 7;
11697 modrm.rm = *codep & 7;
11698 }
11699 break;
11700
9e30b8e0
L
11701 case USE_VEX_W_TABLE:
11702 if (!need_vex)
11703 abort ();
11704
11705 dp = &vex_w_table[dp->op[1].bytemode][vex.w ? 1 : 0];
11706 break;
11707
43234a1e
L
11708 case USE_EVEX_TABLE:
11709 two_source_ops = 0;
11710 /* EVEX prefix. */
11711 vex.evex = 1;
11712 FETCH_DATA (info, codep + 4);
11713 /* All bits in the REX prefix are ignored. */
11714 rex_ignored = rex;
11715 /* The first byte after 0x62. */
11716 rex = ~(*codep >> 5) & 0x7;
11717 vex.r = *codep & 0x10;
11718 switch ((*codep & 0xf))
11719 {
11720 default:
11721 return &bad_opcode;
11722 case 0x1:
11723 vex_table_index = EVEX_0F;
11724 break;
11725 case 0x2:
11726 vex_table_index = EVEX_0F38;
11727 break;
11728 case 0x3:
11729 vex_table_index = EVEX_0F3A;
11730 break;
11731 }
11732
11733 /* The second byte after 0x62. */
11734 codep++;
11735 vex.w = *codep & 0x80;
11736 if (vex.w && address_mode == mode_64bit)
11737 rex |= REX_W;
11738
11739 vex.register_specifier = (~(*codep >> 3)) & 0xf;
43234a1e
L
11740
11741 /* The U bit. */
11742 if (!(*codep & 0x4))
11743 return &bad_opcode;
11744
11745 switch ((*codep & 0x3))
11746 {
11747 case 0:
43234a1e
L
11748 break;
11749 case 1:
11750 vex.prefix = DATA_PREFIX_OPCODE;
11751 break;
11752 case 2:
11753 vex.prefix = REPE_PREFIX_OPCODE;
11754 break;
11755 case 3:
11756 vex.prefix = REPNE_PREFIX_OPCODE;
11757 break;
11758 }
11759
11760 /* The third byte after 0x62. */
11761 codep++;
11762
11763 /* Remember the static rounding bits. */
11764 vex.ll = (*codep >> 5) & 3;
11765 vex.b = (*codep & 0x10) != 0;
11766
11767 vex.v = *codep & 0x8;
11768 vex.mask_register_specifier = *codep & 0x7;
11769 vex.zeroing = *codep & 0x80;
11770
5f847646
JB
11771 if (address_mode != mode_64bit)
11772 {
11773 /* In 16/32-bit mode silently ignore following bits. */
11774 rex &= ~REX_B;
11775 vex.r = 1;
11776 vex.v = 1;
11777 }
11778
43234a1e
L
11779 need_vex = 1;
11780 need_vex_reg = 1;
11781 codep++;
11782 vindex = *codep++;
11783 dp = &evex_table[vex_table_index][vindex];
285ca992 11784 end_codep = codep;
43234a1e
L
11785 FETCH_DATA (info, codep + 1);
11786 modrm.mod = (*codep >> 6) & 3;
11787 modrm.reg = (*codep >> 3) & 7;
11788 modrm.rm = *codep & 7;
11789
11790 /* Set vector length. */
11791 if (modrm.mod == 3 && vex.b)
11792 vex.length = 512;
11793 else
11794 {
11795 switch (vex.ll)
11796 {
11797 case 0x0:
11798 vex.length = 128;
11799 break;
11800 case 0x1:
11801 vex.length = 256;
11802 break;
11803 case 0x2:
11804 vex.length = 512;
11805 break;
11806 default:
11807 return &bad_opcode;
11808 }
11809 }
11810 break;
11811
592d1631
L
11812 case 0:
11813 dp = &bad_opcode;
11814 break;
11815
b844680a 11816 default:
d34b5006 11817 abort ();
b844680a
L
11818 }
11819
11820 if (dp->name != NULL)
11821 return dp;
11822 else
8bb15339 11823 return get_valid_dis386 (dp, info);
b844680a
L
11824}
11825
dfc8cf43 11826static void
55cf16e1 11827get_sib (disassemble_info *info, int sizeflag)
dfc8cf43
L
11828{
11829 /* If modrm.mod == 3, operand must be register. */
11830 if (need_modrm
55cf16e1 11831 && ((sizeflag & AFLAG) || address_mode == mode_64bit)
dfc8cf43
L
11832 && modrm.mod != 3
11833 && modrm.rm == 4)
11834 {
11835 FETCH_DATA (info, codep + 2);
11836 sib.index = (codep [1] >> 3) & 7;
11837 sib.scale = (codep [1] >> 6) & 3;
11838 sib.base = codep [1] & 7;
11839 }
11840}
11841
e396998b 11842static int
26ca5450 11843print_insn (bfd_vma pc, disassemble_info *info)
252b5132 11844{
2da11e11 11845 const struct dis386 *dp;
252b5132 11846 int i;
ce518a5f 11847 char *op_txt[MAX_OPERANDS];
252b5132 11848 int needcomma;
df18fdba 11849 int sizeflag, orig_sizeflag;
e396998b 11850 const char *p;
252b5132 11851 struct dis_private priv;
f16cd0d5 11852 int prefix_length;
252b5132 11853
d7921315
L
11854 priv.orig_sizeflag = AFLAG | DFLAG;
11855 if ((info->mach & bfd_mach_i386_i386) != 0)
cb712a9e 11856 address_mode = mode_32bit;
2da11e11 11857 else if (info->mach == bfd_mach_i386_i8086)
d7921315
L
11858 {
11859 address_mode = mode_16bit;
11860 priv.orig_sizeflag = 0;
11861 }
2da11e11 11862 else
d7921315
L
11863 address_mode = mode_64bit;
11864
11865 if (intel_syntax == (char) -1)
11866 intel_syntax = (info->mach & bfd_mach_i386_intel_syntax) != 0;
e396998b
AM
11867
11868 for (p = info->disassembler_options; p != NULL; )
11869 {
5db04b09
L
11870 if (CONST_STRNEQ (p, "amd64"))
11871 isa64 = amd64;
11872 else if (CONST_STRNEQ (p, "intel64"))
11873 isa64 = intel64;
11874 else if (CONST_STRNEQ (p, "x86-64"))
e396998b 11875 {
cb712a9e 11876 address_mode = mode_64bit;
e396998b
AM
11877 priv.orig_sizeflag = AFLAG | DFLAG;
11878 }
0112cd26 11879 else if (CONST_STRNEQ (p, "i386"))
e396998b 11880 {
cb712a9e 11881 address_mode = mode_32bit;
e396998b
AM
11882 priv.orig_sizeflag = AFLAG | DFLAG;
11883 }
0112cd26 11884 else if (CONST_STRNEQ (p, "i8086"))
e396998b 11885 {
cb712a9e 11886 address_mode = mode_16bit;
e396998b
AM
11887 priv.orig_sizeflag = 0;
11888 }
0112cd26 11889 else if (CONST_STRNEQ (p, "intel"))
e396998b
AM
11890 {
11891 intel_syntax = 1;
9d141669
L
11892 if (CONST_STRNEQ (p + 5, "-mnemonic"))
11893 intel_mnemonic = 1;
e396998b 11894 }
0112cd26 11895 else if (CONST_STRNEQ (p, "att"))
e396998b
AM
11896 {
11897 intel_syntax = 0;
9d141669
L
11898 if (CONST_STRNEQ (p + 3, "-mnemonic"))
11899 intel_mnemonic = 0;
e396998b 11900 }
0112cd26 11901 else if (CONST_STRNEQ (p, "addr"))
e396998b 11902 {
f59a29b9
L
11903 if (address_mode == mode_64bit)
11904 {
11905 if (p[4] == '3' && p[5] == '2')
11906 priv.orig_sizeflag &= ~AFLAG;
11907 else if (p[4] == '6' && p[5] == '4')
11908 priv.orig_sizeflag |= AFLAG;
11909 }
11910 else
11911 {
11912 if (p[4] == '1' && p[5] == '6')
11913 priv.orig_sizeflag &= ~AFLAG;
11914 else if (p[4] == '3' && p[5] == '2')
11915 priv.orig_sizeflag |= AFLAG;
11916 }
e396998b 11917 }
0112cd26 11918 else if (CONST_STRNEQ (p, "data"))
e396998b
AM
11919 {
11920 if (p[4] == '1' && p[5] == '6')
11921 priv.orig_sizeflag &= ~DFLAG;
11922 else if (p[4] == '3' && p[5] == '2')
11923 priv.orig_sizeflag |= DFLAG;
11924 }
0112cd26 11925 else if (CONST_STRNEQ (p, "suffix"))
e396998b
AM
11926 priv.orig_sizeflag |= SUFFIX_ALWAYS;
11927
11928 p = strchr (p, ',');
11929 if (p != NULL)
11930 p++;
11931 }
11932
c0f92bf9
L
11933 if (address_mode == mode_64bit && sizeof (bfd_vma) < 8)
11934 {
11935 (*info->fprintf_func) (info->stream,
11936 _("64-bit address is disabled"));
11937 return -1;
11938 }
11939
e396998b
AM
11940 if (intel_syntax)
11941 {
11942 names64 = intel_names64;
11943 names32 = intel_names32;
11944 names16 = intel_names16;
11945 names8 = intel_names8;
11946 names8rex = intel_names8rex;
11947 names_seg = intel_names_seg;
b9733481 11948 names_mm = intel_names_mm;
7e8b059b 11949 names_bnd = intel_names_bnd;
b9733481
L
11950 names_xmm = intel_names_xmm;
11951 names_ymm = intel_names_ymm;
43234a1e 11952 names_zmm = intel_names_zmm;
db51cc60
L
11953 index64 = intel_index64;
11954 index32 = intel_index32;
43234a1e 11955 names_mask = intel_names_mask;
e396998b
AM
11956 index16 = intel_index16;
11957 open_char = '[';
11958 close_char = ']';
11959 separator_char = '+';
11960 scale_char = '*';
11961 }
11962 else
11963 {
11964 names64 = att_names64;
11965 names32 = att_names32;
11966 names16 = att_names16;
11967 names8 = att_names8;
11968 names8rex = att_names8rex;
11969 names_seg = att_names_seg;
b9733481 11970 names_mm = att_names_mm;
7e8b059b 11971 names_bnd = att_names_bnd;
b9733481
L
11972 names_xmm = att_names_xmm;
11973 names_ymm = att_names_ymm;
43234a1e 11974 names_zmm = att_names_zmm;
db51cc60
L
11975 index64 = att_index64;
11976 index32 = att_index32;
43234a1e 11977 names_mask = att_names_mask;
e396998b
AM
11978 index16 = att_index16;
11979 open_char = '(';
11980 close_char = ')';
11981 separator_char = ',';
11982 scale_char = ',';
11983 }
2da11e11 11984
4fe53c98 11985 /* The output looks better if we put 7 bytes on a line, since that
8a9036a4
L
11986 puts most long word instructions on a single line. Use 8 bytes
11987 for Intel L1OM. */
d7921315 11988 if ((info->mach & bfd_mach_l1om) != 0)
8a9036a4
L
11989 info->bytes_per_line = 8;
11990 else
11991 info->bytes_per_line = 7;
252b5132 11992
26ca5450 11993 info->private_data = &priv;
252b5132
RH
11994 priv.max_fetched = priv.the_buffer;
11995 priv.insn_start = pc;
252b5132
RH
11996
11997 obuf[0] = 0;
ce518a5f
L
11998 for (i = 0; i < MAX_OPERANDS; ++i)
11999 {
12000 op_out[i][0] = 0;
12001 op_index[i] = -1;
12002 }
252b5132
RH
12003
12004 the_info = info;
12005 start_pc = pc;
e396998b
AM
12006 start_codep = priv.the_buffer;
12007 codep = priv.the_buffer;
252b5132 12008
8df14d78 12009 if (OPCODES_SIGSETJMP (priv.bailout) != 0)
5076851f 12010 {
7d421014
ILT
12011 const char *name;
12012
5076851f 12013 /* Getting here means we tried for data but didn't get it. That
e396998b
AM
12014 means we have an incomplete instruction of some sort. Just
12015 print the first byte as a prefix or a .byte pseudo-op. */
12016 if (codep > priv.the_buffer)
5076851f 12017 {
e396998b 12018 name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
7d421014
ILT
12019 if (name != NULL)
12020 (*info->fprintf_func) (info->stream, "%s", name);
12021 else
5076851f 12022 {
7d421014
ILT
12023 /* Just print the first byte as a .byte instruction. */
12024 (*info->fprintf_func) (info->stream, ".byte 0x%x",
e396998b 12025 (unsigned int) priv.the_buffer[0]);
5076851f 12026 }
5076851f 12027
7d421014 12028 return 1;
5076851f
ILT
12029 }
12030
12031 return -1;
12032 }
12033
52b15da3 12034 obufp = obuf;
f16cd0d5
L
12035 sizeflag = priv.orig_sizeflag;
12036
12037 if (!ckprefix () || rex_used)
12038 {
12039 /* Too many prefixes or unused REX prefixes. */
12040 for (i = 0;
f6dd4781 12041 i < (int) ARRAY_SIZE (all_prefixes) && all_prefixes[i];
f16cd0d5 12042 i++)
de882298 12043 (*info->fprintf_func) (info->stream, "%s%s",
6c067bbb 12044 i == 0 ? "" : " ",
f16cd0d5 12045 prefix_name (all_prefixes[i], sizeflag));
de882298 12046 return i;
f16cd0d5 12047 }
252b5132
RH
12048
12049 insn_codep = codep;
12050
12051 FETCH_DATA (info, codep + 1);
12052 two_source_ops = (*codep == 0x62) || (*codep == 0xc8);
12053
3e7d61b2 12054 if (((prefixes & PREFIX_FWAIT)
f16cd0d5 12055 && ((*codep < 0xd8) || (*codep > 0xdf))))
252b5132 12056 {
86a80a50 12057 /* Handle prefixes before fwait. */
d9949a36 12058 for (i = 0; i < fwait_prefix && all_prefixes[i];
86a80a50
L
12059 i++)
12060 (*info->fprintf_func) (info->stream, "%s ",
12061 prefix_name (all_prefixes[i], sizeflag));
f16cd0d5 12062 (*info->fprintf_func) (info->stream, "fwait");
86a80a50 12063 return i + 1;
252b5132
RH
12064 }
12065
252b5132
RH
12066 if (*codep == 0x0f)
12067 {
eec0f4ca 12068 unsigned char threebyte;
5f40e14d
JS
12069
12070 codep++;
12071 FETCH_DATA (info, codep + 1);
12072 threebyte = *codep;
eec0f4ca 12073 dp = &dis386_twobyte[threebyte];
252b5132 12074 need_modrm = twobyte_has_modrm[*codep];
eec0f4ca 12075 codep++;
252b5132
RH
12076 }
12077 else
12078 {
6439fc28 12079 dp = &dis386[*codep];
252b5132 12080 need_modrm = onebyte_has_modrm[*codep];
eec0f4ca 12081 codep++;
252b5132 12082 }
246c51aa 12083
df18fdba
L
12084 /* Save sizeflag for printing the extra prefixes later before updating
12085 it for mnemonic and operand processing. The prefix names depend
12086 only on the address mode. */
12087 orig_sizeflag = sizeflag;
c608c12e 12088 if (prefixes & PREFIX_ADDR)
df18fdba 12089 sizeflag ^= AFLAG;
b844680a 12090 if ((prefixes & PREFIX_DATA))
df18fdba 12091 sizeflag ^= DFLAG;
3ffd33cf 12092
285ca992 12093 end_codep = codep;
8bb15339 12094 if (need_modrm)
252b5132
RH
12095 {
12096 FETCH_DATA (info, codep + 1);
7967e09e
L
12097 modrm.mod = (*codep >> 6) & 3;
12098 modrm.reg = (*codep >> 3) & 7;
12099 modrm.rm = *codep & 7;
252b5132
RH
12100 }
12101
42d5f9c6
MS
12102 need_vex = 0;
12103 need_vex_reg = 0;
12104 vex_w_done = 0;
caf0678c 12105 memset (&vex, 0, sizeof (vex));
55b126d4 12106
ce518a5f 12107 if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE)
252b5132 12108 {
55cf16e1 12109 get_sib (info, sizeflag);
252b5132
RH
12110 dofloat (sizeflag);
12111 }
12112 else
12113 {
8bb15339 12114 dp = get_valid_dis386 (dp, info);
b844680a 12115 if (dp != NULL && putop (dp->name, sizeflag) == 0)
6c067bbb 12116 {
55cf16e1 12117 get_sib (info, sizeflag);
ce518a5f
L
12118 for (i = 0; i < MAX_OPERANDS; ++i)
12119 {
246c51aa 12120 obufp = op_out[i];
ce518a5f
L
12121 op_ad = MAX_OPERANDS - 1 - i;
12122 if (dp->op[i].rtn)
12123 (*dp->op[i].rtn) (dp->op[i].bytemode, sizeflag);
43234a1e
L
12124 /* For EVEX instruction after the last operand masking
12125 should be printed. */
12126 if (i == 0 && vex.evex)
12127 {
12128 /* Don't print {%k0}. */
12129 if (vex.mask_register_specifier)
12130 {
12131 oappend ("{");
12132 oappend (names_mask[vex.mask_register_specifier]);
12133 oappend ("}");
12134 }
12135 if (vex.zeroing)
12136 oappend ("{z}");
12137 }
ce518a5f 12138 }
6439fc28 12139 }
252b5132
RH
12140 }
12141
d869730d 12142 /* Check if the REX prefix is used. */
e2e6193d 12143 if (rex_ignored == 0 && (rex ^ rex_used) == 0 && last_rex_prefix >= 0)
f16cd0d5
L
12144 all_prefixes[last_rex_prefix] = 0;
12145
5e6718e4 12146 /* Check if the SEG prefix is used. */
f16cd0d5
L
12147 if ((prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS | PREFIX_ES
12148 | PREFIX_FS | PREFIX_GS)) != 0
285ca992 12149 && (used_prefixes & active_seg_prefix) != 0)
f16cd0d5
L
12150 all_prefixes[last_seg_prefix] = 0;
12151
5e6718e4 12152 /* Check if the ADDR prefix is used. */
f16cd0d5
L
12153 if ((prefixes & PREFIX_ADDR) != 0
12154 && (used_prefixes & PREFIX_ADDR) != 0)
12155 all_prefixes[last_addr_prefix] = 0;
12156
df18fdba
L
12157 /* Check if the DATA prefix is used. */
12158 if ((prefixes & PREFIX_DATA) != 0
12159 && (used_prefixes & PREFIX_DATA) != 0)
12160 all_prefixes[last_data_prefix] = 0;
f16cd0d5 12161
df18fdba 12162 /* Print the extra prefixes. */
f16cd0d5 12163 prefix_length = 0;
f310f33d 12164 for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
f16cd0d5
L
12165 if (all_prefixes[i])
12166 {
12167 const char *name;
df18fdba 12168 name = prefix_name (all_prefixes[i], orig_sizeflag);
f16cd0d5
L
12169 if (name == NULL)
12170 abort ();
12171 prefix_length += strlen (name) + 1;
12172 (*info->fprintf_func) (info->stream, "%s ", name);
12173 }
b844680a 12174
285ca992
L
12175 /* If the mandatory PREFIX_REPZ/PREFIX_REPNZ/PREFIX_DATA prefix is
12176 unused, opcode is invalid. Since the PREFIX_DATA prefix may be
12177 used by putop and MMX/SSE operand and may be overriden by the
12178 PREFIX_REPZ/PREFIX_REPNZ fix, we check the PREFIX_DATA prefix
12179 separately. */
3888916d 12180 if (dp->prefix_requirement == PREFIX_OPCODE
285ca992
L
12181 && dp != &bad_opcode
12182 && (((prefixes
12183 & (PREFIX_REPZ | PREFIX_REPNZ)) != 0
12184 && (used_prefixes
12185 & (PREFIX_REPZ | PREFIX_REPNZ)) == 0)
12186 || ((((prefixes
12187 & (PREFIX_REPZ | PREFIX_REPNZ | PREFIX_DATA))
12188 == PREFIX_DATA)
12189 && (used_prefixes & PREFIX_DATA) == 0))))
12190 {
12191 (*info->fprintf_func) (info->stream, "(bad)");
12192 return end_codep - priv.the_buffer;
12193 }
12194
f16cd0d5
L
12195 /* Check maximum code length. */
12196 if ((codep - start_codep) > MAX_CODE_LENGTH)
12197 {
12198 (*info->fprintf_func) (info->stream, "(bad)");
12199 return MAX_CODE_LENGTH;
12200 }
b844680a 12201
ea397f5b 12202 obufp = mnemonicendp;
f16cd0d5 12203 for (i = strlen (obuf) + prefix_length; i < 6; i++)
252b5132
RH
12204 oappend (" ");
12205 oappend (" ");
12206 (*info->fprintf_func) (info->stream, "%s", obuf);
12207
12208 /* The enter and bound instructions are printed with operands in the same
12209 order as the intel book; everything else is printed in reverse order. */
2da11e11 12210 if (intel_syntax || two_source_ops)
252b5132 12211 {
185b1163
L
12212 bfd_vma riprel;
12213
ce518a5f 12214 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 12215 op_txt[i] = op_out[i];
246c51aa 12216
3a8547d2
JB
12217 if (intel_syntax && dp && dp->op[2].rtn == OP_Rounding
12218 && dp->op[3].rtn == OP_E && dp->op[4].rtn == NULL)
12219 {
12220 op_txt[2] = op_out[3];
12221 op_txt[3] = op_out[2];
12222 }
12223
ce518a5f
L
12224 for (i = 0; i < (MAX_OPERANDS >> 1); ++i)
12225 {
6c067bbb
RM
12226 op_ad = op_index[i];
12227 op_index[i] = op_index[MAX_OPERANDS - 1 - i];
12228 op_index[MAX_OPERANDS - 1 - i] = op_ad;
185b1163
L
12229 riprel = op_riprel[i];
12230 op_riprel[i] = op_riprel [MAX_OPERANDS - 1 - i];
12231 op_riprel[MAX_OPERANDS - 1 - i] = riprel;
ce518a5f 12232 }
252b5132
RH
12233 }
12234 else
12235 {
ce518a5f 12236 for (i = 0; i < MAX_OPERANDS; ++i)
6c067bbb 12237 op_txt[MAX_OPERANDS - 1 - i] = op_out[i];
050dfa73
MM
12238 }
12239
ce518a5f
L
12240 needcomma = 0;
12241 for (i = 0; i < MAX_OPERANDS; ++i)
12242 if (*op_txt[i])
12243 {
12244 if (needcomma)
12245 (*info->fprintf_func) (info->stream, ",");
12246 if (op_index[i] != -1 && !op_riprel[i])
12247 (*info->print_address_func) ((bfd_vma) op_address[op_index[i]], info);
12248 else
12249 (*info->fprintf_func) (info->stream, "%s", op_txt[i]);
12250 needcomma = 1;
12251 }
050dfa73 12252
ce518a5f 12253 for (i = 0; i < MAX_OPERANDS; i++)
52b15da3
JH
12254 if (op_index[i] != -1 && op_riprel[i])
12255 {
12256 (*info->fprintf_func) (info->stream, " # ");
4fd7268a 12257 (*info->print_address_func) ((bfd_vma) (start_pc + (codep - start_codep)
52b15da3 12258 + op_address[op_index[i]]), info);
185b1163 12259 break;
52b15da3 12260 }
e396998b 12261 return codep - priv.the_buffer;
252b5132
RH
12262}
12263
6439fc28 12264static const char *float_mem[] = {
252b5132 12265 /* d8 */
7c52e0e8
L
12266 "fadd{s|}",
12267 "fmul{s|}",
12268 "fcom{s|}",
12269 "fcomp{s|}",
12270 "fsub{s|}",
12271 "fsubr{s|}",
12272 "fdiv{s|}",
12273 "fdivr{s|}",
db6eb5be 12274 /* d9 */
7c52e0e8 12275 "fld{s|}",
252b5132 12276 "(bad)",
7c52e0e8
L
12277 "fst{s|}",
12278 "fstp{s|}",
9306ca4a 12279 "fldenvIC",
252b5132 12280 "fldcw",
9306ca4a 12281 "fNstenvIC",
252b5132
RH
12282 "fNstcw",
12283 /* da */
7c52e0e8
L
12284 "fiadd{l|}",
12285 "fimul{l|}",
12286 "ficom{l|}",
12287 "ficomp{l|}",
12288 "fisub{l|}",
12289 "fisubr{l|}",
12290 "fidiv{l|}",
12291 "fidivr{l|}",
252b5132 12292 /* db */
7c52e0e8
L
12293 "fild{l|}",
12294 "fisttp{l|}",
12295 "fist{l|}",
12296 "fistp{l|}",
252b5132 12297 "(bad)",
6439fc28 12298 "fld{t||t|}",
252b5132 12299 "(bad)",
6439fc28 12300 "fstp{t||t|}",
252b5132 12301 /* dc */
7c52e0e8
L
12302 "fadd{l|}",
12303 "fmul{l|}",
12304 "fcom{l|}",
12305 "fcomp{l|}",
12306 "fsub{l|}",
12307 "fsubr{l|}",
12308 "fdiv{l|}",
12309 "fdivr{l|}",
252b5132 12310 /* dd */
7c52e0e8
L
12311 "fld{l|}",
12312 "fisttp{ll|}",
12313 "fst{l||}",
12314 "fstp{l|}",
9306ca4a 12315 "frstorIC",
252b5132 12316 "(bad)",
9306ca4a 12317 "fNsaveIC",
252b5132
RH
12318 "fNstsw",
12319 /* de */
ac465521
JB
12320 "fiadd{s|}",
12321 "fimul{s|}",
12322 "ficom{s|}",
12323 "ficomp{s|}",
12324 "fisub{s|}",
12325 "fisubr{s|}",
12326 "fidiv{s|}",
12327 "fidivr{s|}",
252b5132 12328 /* df */
ac465521
JB
12329 "fild{s|}",
12330 "fisttp{s|}",
12331 "fist{s|}",
12332 "fistp{s|}",
252b5132 12333 "fbld",
7c52e0e8 12334 "fild{ll|}",
252b5132 12335 "fbstp",
7c52e0e8 12336 "fistp{ll|}",
1d9f512f
AM
12337};
12338
12339static const unsigned char float_mem_mode[] = {
12340 /* d8 */
12341 d_mode,
12342 d_mode,
12343 d_mode,
12344 d_mode,
12345 d_mode,
12346 d_mode,
12347 d_mode,
12348 d_mode,
12349 /* d9 */
12350 d_mode,
12351 0,
12352 d_mode,
12353 d_mode,
12354 0,
12355 w_mode,
12356 0,
12357 w_mode,
12358 /* da */
12359 d_mode,
12360 d_mode,
12361 d_mode,
12362 d_mode,
12363 d_mode,
12364 d_mode,
12365 d_mode,
12366 d_mode,
12367 /* db */
12368 d_mode,
12369 d_mode,
12370 d_mode,
12371 d_mode,
12372 0,
9306ca4a 12373 t_mode,
1d9f512f 12374 0,
9306ca4a 12375 t_mode,
1d9f512f
AM
12376 /* dc */
12377 q_mode,
12378 q_mode,
12379 q_mode,
12380 q_mode,
12381 q_mode,
12382 q_mode,
12383 q_mode,
12384 q_mode,
12385 /* dd */
12386 q_mode,
12387 q_mode,
12388 q_mode,
12389 q_mode,
12390 0,
12391 0,
12392 0,
12393 w_mode,
12394 /* de */
12395 w_mode,
12396 w_mode,
12397 w_mode,
12398 w_mode,
12399 w_mode,
12400 w_mode,
12401 w_mode,
12402 w_mode,
12403 /* df */
12404 w_mode,
12405 w_mode,
12406 w_mode,
12407 w_mode,
9306ca4a 12408 t_mode,
1d9f512f 12409 q_mode,
9306ca4a 12410 t_mode,
1d9f512f 12411 q_mode
252b5132
RH
12412};
12413
ce518a5f
L
12414#define ST { OP_ST, 0 }
12415#define STi { OP_STi, 0 }
252b5132 12416
48c97fa1
L
12417#define FGRPd9_2 NULL, { { NULL, 1 } }, 0
12418#define FGRPd9_4 NULL, { { NULL, 2 } }, 0
12419#define FGRPd9_5 NULL, { { NULL, 3 } }, 0
12420#define FGRPd9_6 NULL, { { NULL, 4 } }, 0
12421#define FGRPd9_7 NULL, { { NULL, 5 } }, 0
12422#define FGRPda_5 NULL, { { NULL, 6 } }, 0
12423#define FGRPdb_4 NULL, { { NULL, 7 } }, 0
12424#define FGRPde_3 NULL, { { NULL, 8 } }, 0
12425#define FGRPdf_4 NULL, { { NULL, 9 } }, 0
252b5132 12426
2da11e11 12427static const struct dis386 float_reg[][8] = {
252b5132
RH
12428 /* d8 */
12429 {
bf890a93
IT
12430 { "fadd", { ST, STi }, 0 },
12431 { "fmul", { ST, STi }, 0 },
12432 { "fcom", { STi }, 0 },
12433 { "fcomp", { STi }, 0 },
12434 { "fsub", { ST, STi }, 0 },
12435 { "fsubr", { ST, STi }, 0 },
12436 { "fdiv", { ST, STi }, 0 },
12437 { "fdivr", { ST, STi }, 0 },
252b5132
RH
12438 },
12439 /* d9 */
12440 {
bf890a93
IT
12441 { "fld", { STi }, 0 },
12442 { "fxch", { STi }, 0 },
252b5132 12443 { FGRPd9_2 },
592d1631 12444 { Bad_Opcode },
252b5132
RH
12445 { FGRPd9_4 },
12446 { FGRPd9_5 },
12447 { FGRPd9_6 },
12448 { FGRPd9_7 },
12449 },
12450 /* da */
12451 {
bf890a93
IT
12452 { "fcmovb", { ST, STi }, 0 },
12453 { "fcmove", { ST, STi }, 0 },
12454 { "fcmovbe",{ ST, STi }, 0 },
12455 { "fcmovu", { ST, STi }, 0 },
592d1631 12456 { Bad_Opcode },
252b5132 12457 { FGRPda_5 },
592d1631
L
12458 { Bad_Opcode },
12459 { Bad_Opcode },
252b5132
RH
12460 },
12461 /* db */
12462 {
bf890a93
IT
12463 { "fcmovnb",{ ST, STi }, 0 },
12464 { "fcmovne",{ ST, STi }, 0 },
12465 { "fcmovnbe",{ ST, STi }, 0 },
12466 { "fcmovnu",{ ST, STi }, 0 },
252b5132 12467 { FGRPdb_4 },
bf890a93
IT
12468 { "fucomi", { ST, STi }, 0 },
12469 { "fcomi", { ST, STi }, 0 },
592d1631 12470 { Bad_Opcode },
252b5132
RH
12471 },
12472 /* dc */
12473 {
bf890a93
IT
12474 { "fadd", { STi, ST }, 0 },
12475 { "fmul", { STi, ST }, 0 },
592d1631
L
12476 { Bad_Opcode },
12477 { Bad_Opcode },
d53e6b98
JB
12478 { "fsub{!M|r}", { STi, ST }, 0 },
12479 { "fsub{M|}", { STi, ST }, 0 },
12480 { "fdiv{!M|r}", { STi, ST }, 0 },
12481 { "fdiv{M|}", { STi, ST }, 0 },
252b5132
RH
12482 },
12483 /* dd */
12484 {
bf890a93 12485 { "ffree", { STi }, 0 },
592d1631 12486 { Bad_Opcode },
bf890a93
IT
12487 { "fst", { STi }, 0 },
12488 { "fstp", { STi }, 0 },
12489 { "fucom", { STi }, 0 },
12490 { "fucomp", { STi }, 0 },
592d1631
L
12491 { Bad_Opcode },
12492 { Bad_Opcode },
252b5132
RH
12493 },
12494 /* de */
12495 {
bf890a93
IT
12496 { "faddp", { STi, ST }, 0 },
12497 { "fmulp", { STi, ST }, 0 },
592d1631 12498 { Bad_Opcode },
252b5132 12499 { FGRPde_3 },
d53e6b98
JB
12500 { "fsub{!M|r}p", { STi, ST }, 0 },
12501 { "fsub{M|}p", { STi, ST }, 0 },
12502 { "fdiv{!M|r}p", { STi, ST }, 0 },
12503 { "fdiv{M|}p", { STi, ST }, 0 },
252b5132
RH
12504 },
12505 /* df */
12506 {
bf890a93 12507 { "ffreep", { STi }, 0 },
592d1631
L
12508 { Bad_Opcode },
12509 { Bad_Opcode },
12510 { Bad_Opcode },
252b5132 12511 { FGRPdf_4 },
bf890a93
IT
12512 { "fucomip", { ST, STi }, 0 },
12513 { "fcomip", { ST, STi }, 0 },
592d1631 12514 { Bad_Opcode },
252b5132
RH
12515 },
12516};
12517
252b5132 12518static char *fgrps[][8] = {
48c97fa1
L
12519 /* Bad opcode 0 */
12520 {
12521 "(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12522 },
12523
12524 /* d9_2 1 */
252b5132
RH
12525 {
12526 "fnop","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12527 },
12528
48c97fa1 12529 /* d9_4 2 */
252b5132
RH
12530 {
12531 "fchs","fabs","(bad)","(bad)","ftst","fxam","(bad)","(bad)",
12532 },
12533
48c97fa1 12534 /* d9_5 3 */
252b5132
RH
12535 {
12536 "fld1","fldl2t","fldl2e","fldpi","fldlg2","fldln2","fldz","(bad)",
12537 },
12538
48c97fa1 12539 /* d9_6 4 */
252b5132
RH
12540 {
12541 "f2xm1","fyl2x","fptan","fpatan","fxtract","fprem1","fdecstp","fincstp",
12542 },
12543
48c97fa1 12544 /* d9_7 5 */
252b5132
RH
12545 {
12546 "fprem","fyl2xp1","fsqrt","fsincos","frndint","fscale","fsin","fcos",
12547 },
12548
48c97fa1 12549 /* da_5 6 */
252b5132
RH
12550 {
12551 "(bad)","fucompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12552 },
12553
48c97fa1 12554 /* db_4 7 */
252b5132 12555 {
309d3373
JB
12556 "fNeni(8087 only)","fNdisi(8087 only)","fNclex","fNinit",
12557 "fNsetpm(287 only)","frstpm(287 only)","(bad)","(bad)",
252b5132
RH
12558 },
12559
48c97fa1 12560 /* de_3 8 */
252b5132
RH
12561 {
12562 "(bad)","fcompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12563 },
12564
48c97fa1 12565 /* df_4 9 */
252b5132
RH
12566 {
12567 "fNstsw","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12568 },
12569};
12570
b6169b20
L
12571static void
12572swap_operand (void)
12573{
12574 mnemonicendp[0] = '.';
12575 mnemonicendp[1] = 's';
12576 mnemonicendp += 2;
12577}
12578
b844680a
L
12579static void
12580OP_Skip_MODRM (int bytemode ATTRIBUTE_UNUSED,
12581 int sizeflag ATTRIBUTE_UNUSED)
12582{
12583 /* Skip mod/rm byte. */
12584 MODRM_CHECK;
12585 codep++;
12586}
12587
252b5132 12588static void
26ca5450 12589dofloat (int sizeflag)
252b5132 12590{
2da11e11 12591 const struct dis386 *dp;
252b5132
RH
12592 unsigned char floatop;
12593
12594 floatop = codep[-1];
12595
7967e09e 12596 if (modrm.mod != 3)
252b5132 12597 {
7967e09e 12598 int fp_indx = (floatop - 0xd8) * 8 + modrm.reg;
1d9f512f
AM
12599
12600 putop (float_mem[fp_indx], sizeflag);
ce518a5f 12601 obufp = op_out[0];
6e50d963 12602 op_ad = 2;
1d9f512f 12603 OP_E (float_mem_mode[fp_indx], sizeflag);
252b5132
RH
12604 return;
12605 }
6608db57 12606 /* Skip mod/rm byte. */
4bba6815 12607 MODRM_CHECK;
252b5132
RH
12608 codep++;
12609
7967e09e 12610 dp = &float_reg[floatop - 0xd8][modrm.reg];
252b5132
RH
12611 if (dp->name == NULL)
12612 {
7967e09e 12613 putop (fgrps[dp->op[0].bytemode][modrm.rm], sizeflag);
252b5132 12614
6608db57 12615 /* Instruction fnstsw is only one with strange arg. */
252b5132 12616 if (floatop == 0xdf && codep[-1] == 0xe0)
ce518a5f 12617 strcpy (op_out[0], names16[0]);
252b5132
RH
12618 }
12619 else
12620 {
12621 putop (dp->name, sizeflag);
12622
ce518a5f 12623 obufp = op_out[0];
6e50d963 12624 op_ad = 2;
ce518a5f
L
12625 if (dp->op[0].rtn)
12626 (*dp->op[0].rtn) (dp->op[0].bytemode, sizeflag);
6e50d963 12627
ce518a5f 12628 obufp = op_out[1];
6e50d963 12629 op_ad = 1;
ce518a5f
L
12630 if (dp->op[1].rtn)
12631 (*dp->op[1].rtn) (dp->op[1].bytemode, sizeflag);
252b5132
RH
12632 }
12633}
12634
9ce09ba2
RM
12635/* Like oappend (below), but S is a string starting with '%'.
12636 In Intel syntax, the '%' is elided. */
12637static void
12638oappend_maybe_intel (const char *s)
12639{
12640 oappend (s + intel_syntax);
12641}
12642
252b5132 12643static void
26ca5450 12644OP_ST (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 12645{
9ce09ba2 12646 oappend_maybe_intel ("%st");
252b5132
RH
12647}
12648
252b5132 12649static void
26ca5450 12650OP_STi (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 12651{
7967e09e 12652 sprintf (scratchbuf, "%%st(%d)", modrm.rm);
9ce09ba2 12653 oappend_maybe_intel (scratchbuf);
252b5132
RH
12654}
12655
6608db57 12656/* Capital letters in template are macros. */
6439fc28 12657static int
d3ce72d0 12658putop (const char *in_template, int sizeflag)
252b5132 12659{
2da11e11 12660 const char *p;
9306ca4a 12661 int alt = 0;
9d141669 12662 int cond = 1;
98b528ac
L
12663 unsigned int l = 0, len = 1;
12664 char last[4];
12665
12666#define SAVE_LAST(c) \
12667 if (l < len && l < sizeof (last)) \
12668 last[l++] = c; \
12669 else \
12670 abort ();
252b5132 12671
d3ce72d0 12672 for (p = in_template; *p; p++)
252b5132
RH
12673 {
12674 switch (*p)
12675 {
12676 default:
12677 *obufp++ = *p;
12678 break;
98b528ac
L
12679 case '%':
12680 len++;
12681 break;
9d141669
L
12682 case '!':
12683 cond = 0;
12684 break;
6439fc28 12685 case '{':
6439fc28 12686 if (intel_syntax)
6439fc28
AM
12687 {
12688 while (*++p != '|')
7c52e0e8
L
12689 if (*p == '}' || *p == '\0')
12690 abort ();
6439fc28 12691 }
9306ca4a
JB
12692 /* Fall through. */
12693 case 'I':
12694 alt = 1;
12695 continue;
6439fc28
AM
12696 case '|':
12697 while (*++p != '}')
12698 {
12699 if (*p == '\0')
12700 abort ();
12701 }
12702 break;
12703 case '}':
12704 break;
252b5132 12705 case 'A':
db6eb5be
AM
12706 if (intel_syntax)
12707 break;
7967e09e 12708 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
252b5132
RH
12709 *obufp++ = 'b';
12710 break;
12711 case 'B':
4b06377f
L
12712 if (l == 0 && len == 1)
12713 {
12714case_B:
12715 if (intel_syntax)
12716 break;
12717 if (sizeflag & SUFFIX_ALWAYS)
12718 *obufp++ = 'b';
12719 }
12720 else
12721 {
12722 if (l != 1
12723 || len != 2
12724 || last[0] != 'L')
12725 {
12726 SAVE_LAST (*p);
12727 break;
12728 }
12729
12730 if (address_mode == mode_64bit
12731 && !(prefixes & PREFIX_ADDR))
12732 {
12733 *obufp++ = 'a';
12734 *obufp++ = 'b';
12735 *obufp++ = 's';
12736 }
12737
12738 goto case_B;
12739 }
252b5132 12740 break;
9306ca4a
JB
12741 case 'C':
12742 if (intel_syntax && !alt)
12743 break;
12744 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
12745 {
12746 if (sizeflag & DFLAG)
12747 *obufp++ = intel_syntax ? 'd' : 'l';
12748 else
12749 *obufp++ = intel_syntax ? 'w' : 's';
12750 used_prefixes |= (prefixes & PREFIX_DATA);
12751 }
12752 break;
ed7841b3
JB
12753 case 'D':
12754 if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
12755 break;
161a04f6 12756 USED_REX (REX_W);
7967e09e 12757 if (modrm.mod == 3)
ed7841b3 12758 {
161a04f6 12759 if (rex & REX_W)
ed7841b3 12760 *obufp++ = 'q';
ed7841b3 12761 else
f16cd0d5
L
12762 {
12763 if (sizeflag & DFLAG)
12764 *obufp++ = intel_syntax ? 'd' : 'l';
12765 else
12766 *obufp++ = 'w';
12767 used_prefixes |= (prefixes & PREFIX_DATA);
12768 }
ed7841b3
JB
12769 }
12770 else
12771 *obufp++ = 'w';
12772 break;
252b5132 12773 case 'E': /* For jcxz/jecxz */
cb712a9e 12774 if (address_mode == mode_64bit)
c1a64871
JH
12775 {
12776 if (sizeflag & AFLAG)
12777 *obufp++ = 'r';
12778 else
12779 *obufp++ = 'e';
12780 }
12781 else
12782 if (sizeflag & AFLAG)
12783 *obufp++ = 'e';
3ffd33cf
AM
12784 used_prefixes |= (prefixes & PREFIX_ADDR);
12785 break;
12786 case 'F':
db6eb5be
AM
12787 if (intel_syntax)
12788 break;
e396998b 12789 if ((prefixes & PREFIX_ADDR) || (sizeflag & SUFFIX_ALWAYS))
3ffd33cf
AM
12790 {
12791 if (sizeflag & AFLAG)
cb712a9e 12792 *obufp++ = address_mode == mode_64bit ? 'q' : 'l';
3ffd33cf 12793 else
cb712a9e 12794 *obufp++ = address_mode == mode_64bit ? 'l' : 'w';
3ffd33cf
AM
12795 used_prefixes |= (prefixes & PREFIX_ADDR);
12796 }
252b5132 12797 break;
52fd6d94
JB
12798 case 'G':
12799 if (intel_syntax || (obufp[-1] != 's' && !(sizeflag & SUFFIX_ALWAYS)))
12800 break;
161a04f6 12801 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
12802 *obufp++ = 'l';
12803 else
12804 *obufp++ = 'w';
161a04f6 12805 if (!(rex & REX_W))
52fd6d94
JB
12806 used_prefixes |= (prefixes & PREFIX_DATA);
12807 break;
5dd0794d 12808 case 'H':
db6eb5be
AM
12809 if (intel_syntax)
12810 break;
5dd0794d
AM
12811 if ((prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_CS
12812 || (prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_DS)
12813 {
12814 used_prefixes |= prefixes & (PREFIX_CS | PREFIX_DS);
12815 *obufp++ = ',';
12816 *obufp++ = 'p';
12817 if (prefixes & PREFIX_DS)
12818 *obufp++ = 't';
12819 else
12820 *obufp++ = 'n';
12821 }
12822 break;
9306ca4a
JB
12823 case 'J':
12824 if (intel_syntax)
12825 break;
12826 *obufp++ = 'l';
12827 break;
42903f7f
L
12828 case 'K':
12829 USED_REX (REX_W);
12830 if (rex & REX_W)
12831 *obufp++ = 'q';
12832 else
12833 *obufp++ = 'd';
12834 break;
6dd5059a 12835 case 'Z':
04d824a4
JB
12836 if (l != 0 || len != 1)
12837 {
12838 if (l != 1 || len != 2 || last[0] != 'X')
12839 {
12840 SAVE_LAST (*p);
12841 break;
12842 }
12843 if (!need_vex || !vex.evex)
12844 abort ();
12845 if (intel_syntax
12846 || ((modrm.mod == 3 || vex.b) && !(sizeflag & SUFFIX_ALWAYS)))
12847 break;
12848 switch (vex.length)
12849 {
12850 case 128:
12851 *obufp++ = 'x';
12852 break;
12853 case 256:
12854 *obufp++ = 'y';
12855 break;
12856 case 512:
12857 *obufp++ = 'z';
12858 break;
12859 default:
12860 abort ();
12861 }
12862 break;
12863 }
6dd5059a
L
12864 if (intel_syntax)
12865 break;
12866 if (address_mode == mode_64bit && (sizeflag & SUFFIX_ALWAYS))
12867 {
12868 *obufp++ = 'q';
12869 break;
12870 }
12871 /* Fall through. */
98b528ac 12872 goto case_L;
252b5132 12873 case 'L':
98b528ac
L
12874 if (l != 0 || len != 1)
12875 {
12876 SAVE_LAST (*p);
12877 break;
12878 }
12879case_L:
db6eb5be
AM
12880 if (intel_syntax)
12881 break;
252b5132
RH
12882 if (sizeflag & SUFFIX_ALWAYS)
12883 *obufp++ = 'l';
252b5132 12884 break;
9d141669
L
12885 case 'M':
12886 if (intel_mnemonic != cond)
12887 *obufp++ = 'r';
12888 break;
252b5132
RH
12889 case 'N':
12890 if ((prefixes & PREFIX_FWAIT) == 0)
12891 *obufp++ = 'n';
7d421014
ILT
12892 else
12893 used_prefixes |= PREFIX_FWAIT;
252b5132 12894 break;
52b15da3 12895 case 'O':
161a04f6
L
12896 USED_REX (REX_W);
12897 if (rex & REX_W)
6439fc28 12898 *obufp++ = 'o';
a35ca55a
JB
12899 else if (intel_syntax && (sizeflag & DFLAG))
12900 *obufp++ = 'q';
52b15da3
JH
12901 else
12902 *obufp++ = 'd';
161a04f6 12903 if (!(rex & REX_W))
a35ca55a 12904 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 12905 break;
07f5af7d
L
12906 case '&':
12907 if (!intel_syntax
12908 && address_mode == mode_64bit
12909 && isa64 == intel64)
12910 {
12911 *obufp++ = 'q';
12912 break;
12913 }
12914 /* Fall through. */
6439fc28 12915 case 'T':
d9e3625e
L
12916 if (!intel_syntax
12917 && address_mode == mode_64bit
7bb15c6f 12918 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
12919 {
12920 *obufp++ = 'q';
12921 break;
12922 }
6608db57 12923 /* Fall through. */
4b4c407a 12924 goto case_P;
252b5132 12925 case 'P':
4b4c407a 12926 if (l == 0 && len == 1)
d9e3625e 12927 {
4b4c407a
L
12928case_P:
12929 if (intel_syntax)
d9e3625e 12930 {
4b4c407a
L
12931 if ((rex & REX_W) == 0
12932 && (prefixes & PREFIX_DATA))
12933 {
12934 if ((sizeflag & DFLAG) == 0)
12935 *obufp++ = 'w';
12936 used_prefixes |= (prefixes & PREFIX_DATA);
12937 }
12938 break;
12939 }
12940 if ((prefixes & PREFIX_DATA)
12941 || (rex & REX_W)
12942 || (sizeflag & SUFFIX_ALWAYS))
12943 {
12944 USED_REX (REX_W);
12945 if (rex & REX_W)
12946 *obufp++ = 'q';
12947 else
12948 {
12949 if (sizeflag & DFLAG)
12950 *obufp++ = 'l';
12951 else
12952 *obufp++ = 'w';
12953 used_prefixes |= (prefixes & PREFIX_DATA);
12954 }
d9e3625e 12955 }
d9e3625e 12956 }
4b4c407a 12957 else
252b5132 12958 {
4b4c407a
L
12959 if (l != 1 || len != 2 || last[0] != 'L')
12960 {
12961 SAVE_LAST (*p);
12962 break;
12963 }
12964
12965 if ((prefixes & PREFIX_DATA)
12966 || (rex & REX_W)
12967 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 12968 {
4b4c407a
L
12969 USED_REX (REX_W);
12970 if (rex & REX_W)
12971 *obufp++ = 'q';
12972 else
12973 {
12974 if (sizeflag & DFLAG)
12975 *obufp++ = intel_syntax ? 'd' : 'l';
12976 else
12977 *obufp++ = 'w';
12978 used_prefixes |= (prefixes & PREFIX_DATA);
12979 }
52b15da3 12980 }
252b5132
RH
12981 }
12982 break;
6439fc28 12983 case 'U':
db6eb5be
AM
12984 if (intel_syntax)
12985 break;
7bb15c6f 12986 if (address_mode == mode_64bit
6c067bbb 12987 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28 12988 {
7967e09e 12989 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
1a114b12 12990 *obufp++ = 'q';
6439fc28
AM
12991 break;
12992 }
6608db57 12993 /* Fall through. */
98b528ac 12994 goto case_Q;
252b5132 12995 case 'Q':
98b528ac 12996 if (l == 0 && len == 1)
252b5132 12997 {
98b528ac
L
12998case_Q:
12999 if (intel_syntax && !alt)
13000 break;
13001 USED_REX (REX_W);
13002 if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
52b15da3 13003 {
98b528ac
L
13004 if (rex & REX_W)
13005 *obufp++ = 'q';
52b15da3 13006 else
98b528ac
L
13007 {
13008 if (sizeflag & DFLAG)
13009 *obufp++ = intel_syntax ? 'd' : 'l';
13010 else
13011 *obufp++ = 'w';
f16cd0d5 13012 used_prefixes |= (prefixes & PREFIX_DATA);
98b528ac 13013 }
52b15da3 13014 }
98b528ac
L
13015 }
13016 else
13017 {
13018 if (l != 1 || len != 2 || last[0] != 'L')
13019 {
13020 SAVE_LAST (*p);
13021 break;
13022 }
13023 if (intel_syntax
13024 || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
13025 break;
13026 if ((rex & REX_W))
13027 {
13028 USED_REX (REX_W);
13029 *obufp++ = 'q';
13030 }
13031 else
13032 *obufp++ = 'l';
252b5132
RH
13033 }
13034 break;
13035 case 'R':
161a04f6
L
13036 USED_REX (REX_W);
13037 if (rex & REX_W)
a35ca55a
JB
13038 *obufp++ = 'q';
13039 else if (sizeflag & DFLAG)
c608c12e 13040 {
a35ca55a 13041 if (intel_syntax)
c608c12e 13042 *obufp++ = 'd';
c608c12e 13043 else
a35ca55a 13044 *obufp++ = 'l';
c608c12e 13045 }
252b5132 13046 else
a35ca55a
JB
13047 *obufp++ = 'w';
13048 if (intel_syntax && !p[1]
161a04f6 13049 && ((rex & REX_W) || (sizeflag & DFLAG)))
a35ca55a 13050 *obufp++ = 'e';
161a04f6 13051 if (!(rex & REX_W))
52b15da3 13052 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132 13053 break;
1a114b12 13054 case 'V':
4b06377f 13055 if (l == 0 && len == 1)
1a114b12 13056 {
4b06377f
L
13057 if (intel_syntax)
13058 break;
7bb15c6f 13059 if (address_mode == mode_64bit
6c067bbb 13060 && ((sizeflag & DFLAG) || (rex & REX_W)))
4b06377f
L
13061 {
13062 if (sizeflag & SUFFIX_ALWAYS)
13063 *obufp++ = 'q';
13064 break;
13065 }
13066 }
13067 else
13068 {
13069 if (l != 1
13070 || len != 2
13071 || last[0] != 'L')
13072 {
13073 SAVE_LAST (*p);
13074 break;
13075 }
13076
13077 if (rex & REX_W)
13078 {
13079 *obufp++ = 'a';
13080 *obufp++ = 'b';
13081 *obufp++ = 's';
13082 }
1a114b12
JB
13083 }
13084 /* Fall through. */
4b06377f 13085 goto case_S;
252b5132 13086 case 'S':
4b06377f 13087 if (l == 0 && len == 1)
252b5132 13088 {
4b06377f
L
13089case_S:
13090 if (intel_syntax)
13091 break;
13092 if (sizeflag & SUFFIX_ALWAYS)
52b15da3 13093 {
4b06377f
L
13094 if (rex & REX_W)
13095 *obufp++ = 'q';
52b15da3 13096 else
4b06377f
L
13097 {
13098 if (sizeflag & DFLAG)
13099 *obufp++ = 'l';
13100 else
13101 *obufp++ = 'w';
13102 used_prefixes |= (prefixes & PREFIX_DATA);
13103 }
13104 }
13105 }
13106 else
13107 {
13108 if (l != 1
13109 || len != 2
13110 || last[0] != 'L')
13111 {
13112 SAVE_LAST (*p);
13113 break;
52b15da3 13114 }
4b06377f
L
13115
13116 if (address_mode == mode_64bit
13117 && !(prefixes & PREFIX_ADDR))
13118 {
13119 *obufp++ = 'a';
13120 *obufp++ = 'b';
13121 *obufp++ = 's';
13122 }
13123
13124 goto case_S;
252b5132 13125 }
252b5132 13126 break;
041bd2e0 13127 case 'X':
c0f3af97
L
13128 if (l != 0 || len != 1)
13129 {
13130 SAVE_LAST (*p);
13131 break;
13132 }
13133 if (need_vex && vex.prefix)
13134 {
13135 if (vex.prefix == DATA_PREFIX_OPCODE)
13136 *obufp++ = 'd';
13137 else
13138 *obufp++ = 's';
13139 }
041bd2e0 13140 else
f16cd0d5
L
13141 {
13142 if (prefixes & PREFIX_DATA)
13143 *obufp++ = 'd';
13144 else
13145 *obufp++ = 's';
13146 used_prefixes |= (prefixes & PREFIX_DATA);
13147 }
041bd2e0 13148 break;
76f227a5 13149 case 'Y':
c0f3af97 13150 if (l == 0 && len == 1)
9646c87b 13151 abort ();
c0f3af97
L
13152 else
13153 {
13154 if (l != 1 || len != 2 || last[0] != 'X')
13155 {
13156 SAVE_LAST (*p);
13157 break;
13158 }
13159 if (!need_vex)
13160 abort ();
13161 if (intel_syntax
04d824a4 13162 || ((modrm.mod == 3 || vex.b) && !(sizeflag & SUFFIX_ALWAYS)))
c0f3af97
L
13163 break;
13164 switch (vex.length)
13165 {
13166 case 128:
13167 *obufp++ = 'x';
13168 break;
13169 case 256:
13170 *obufp++ = 'y';
13171 break;
04d824a4
JB
13172 case 512:
13173 if (!vex.evex)
c0f3af97 13174 default:
04d824a4 13175 abort ();
c0f3af97 13176 }
76f227a5
JH
13177 }
13178 break;
252b5132 13179 case 'W':
0bfee649 13180 if (l == 0 && len == 1)
a35ca55a 13181 {
0bfee649
L
13182 /* operand size flag for cwtl, cbtw */
13183 USED_REX (REX_W);
13184 if (rex & REX_W)
13185 {
13186 if (intel_syntax)
13187 *obufp++ = 'd';
13188 else
13189 *obufp++ = 'l';
13190 }
13191 else if (sizeflag & DFLAG)
13192 *obufp++ = 'w';
a35ca55a 13193 else
0bfee649
L
13194 *obufp++ = 'b';
13195 if (!(rex & REX_W))
13196 used_prefixes |= (prefixes & PREFIX_DATA);
a35ca55a 13197 }
252b5132 13198 else
0bfee649 13199 {
6c30d220
L
13200 if (l != 1
13201 || len != 2
13202 || (last[0] != 'X'
13203 && last[0] != 'L'))
0bfee649
L
13204 {
13205 SAVE_LAST (*p);
13206 break;
13207 }
13208 if (!need_vex)
13209 abort ();
6c30d220
L
13210 if (last[0] == 'X')
13211 *obufp++ = vex.w ? 'd': 's';
13212 else
13213 *obufp++ = vex.w ? 'q': 'd';
0bfee649 13214 }
252b5132 13215 break;
a72d2af2
L
13216 case '^':
13217 if (intel_syntax)
13218 break;
13219 if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
13220 {
13221 if (sizeflag & DFLAG)
13222 *obufp++ = 'l';
13223 else
13224 *obufp++ = 'w';
13225 used_prefixes |= (prefixes & PREFIX_DATA);
13226 }
13227 break;
5db04b09
L
13228 case '@':
13229 if (intel_syntax)
13230 break;
13231 if (address_mode == mode_64bit
13232 && (isa64 == intel64
13233 || ((sizeflag & DFLAG) || (rex & REX_W))))
13234 *obufp++ = 'q';
13235 else if ((prefixes & PREFIX_DATA))
13236 {
13237 if (!(sizeflag & DFLAG))
13238 *obufp++ = 'w';
13239 used_prefixes |= (prefixes & PREFIX_DATA);
13240 }
13241 break;
252b5132 13242 }
9306ca4a 13243 alt = 0;
252b5132
RH
13244 }
13245 *obufp = 0;
ea397f5b 13246 mnemonicendp = obufp;
6439fc28 13247 return 0;
252b5132
RH
13248}
13249
13250static void
26ca5450 13251oappend (const char *s)
252b5132 13252{
ea397f5b 13253 obufp = stpcpy (obufp, s);
252b5132
RH
13254}
13255
13256static void
26ca5450 13257append_seg (void)
252b5132 13258{
285ca992
L
13259 /* Only print the active segment register. */
13260 if (!active_seg_prefix)
13261 return;
13262
13263 used_prefixes |= active_seg_prefix;
13264 switch (active_seg_prefix)
7d421014 13265 {
285ca992 13266 case PREFIX_CS:
9ce09ba2 13267 oappend_maybe_intel ("%cs:");
285ca992
L
13268 break;
13269 case PREFIX_DS:
9ce09ba2 13270 oappend_maybe_intel ("%ds:");
285ca992
L
13271 break;
13272 case PREFIX_SS:
9ce09ba2 13273 oappend_maybe_intel ("%ss:");
285ca992
L
13274 break;
13275 case PREFIX_ES:
9ce09ba2 13276 oappend_maybe_intel ("%es:");
285ca992
L
13277 break;
13278 case PREFIX_FS:
9ce09ba2 13279 oappend_maybe_intel ("%fs:");
285ca992
L
13280 break;
13281 case PREFIX_GS:
9ce09ba2 13282 oappend_maybe_intel ("%gs:");
285ca992
L
13283 break;
13284 default:
13285 break;
7d421014 13286 }
252b5132
RH
13287}
13288
13289static void
26ca5450 13290OP_indirE (int bytemode, int sizeflag)
252b5132
RH
13291{
13292 if (!intel_syntax)
13293 oappend ("*");
13294 OP_E (bytemode, sizeflag);
13295}
13296
52b15da3 13297static void
26ca5450 13298print_operand_value (char *buf, int hex, bfd_vma disp)
52b15da3 13299{
cb712a9e 13300 if (address_mode == mode_64bit)
52b15da3
JH
13301 {
13302 if (hex)
13303 {
13304 char tmp[30];
13305 int i;
13306 buf[0] = '0';
13307 buf[1] = 'x';
13308 sprintf_vma (tmp, disp);
6608db57 13309 for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++);
52b15da3
JH
13310 strcpy (buf + 2, tmp + i);
13311 }
13312 else
13313 {
13314 bfd_signed_vma v = disp;
13315 char tmp[30];
13316 int i;
13317 if (v < 0)
13318 {
13319 *(buf++) = '-';
13320 v = -disp;
6608db57 13321 /* Check for possible overflow on 0x8000000000000000. */
52b15da3
JH
13322 if (v < 0)
13323 {
13324 strcpy (buf, "9223372036854775808");
13325 return;
13326 }
13327 }
13328 if (!v)
13329 {
13330 strcpy (buf, "0");
13331 return;
13332 }
13333
13334 i = 0;
13335 tmp[29] = 0;
13336 while (v)
13337 {
6608db57 13338 tmp[28 - i] = (v % 10) + '0';
52b15da3
JH
13339 v /= 10;
13340 i++;
13341 }
13342 strcpy (buf, tmp + 29 - i);
13343 }
13344 }
13345 else
13346 {
13347 if (hex)
13348 sprintf (buf, "0x%x", (unsigned int) disp);
13349 else
13350 sprintf (buf, "%d", (int) disp);
13351 }
13352}
13353
5d669648
L
13354/* Put DISP in BUF as signed hex number. */
13355
13356static void
13357print_displacement (char *buf, bfd_vma disp)
13358{
13359 bfd_signed_vma val = disp;
13360 char tmp[30];
13361 int i, j = 0;
13362
13363 if (val < 0)
13364 {
13365 buf[j++] = '-';
13366 val = -disp;
13367
13368 /* Check for possible overflow. */
13369 if (val < 0)
13370 {
13371 switch (address_mode)
13372 {
13373 case mode_64bit:
13374 strcpy (buf + j, "0x8000000000000000");
13375 break;
13376 case mode_32bit:
13377 strcpy (buf + j, "0x80000000");
13378 break;
13379 case mode_16bit:
13380 strcpy (buf + j, "0x8000");
13381 break;
13382 }
13383 return;
13384 }
13385 }
13386
13387 buf[j++] = '0';
13388 buf[j++] = 'x';
13389
0af1713e 13390 sprintf_vma (tmp, (bfd_vma) val);
5d669648
L
13391 for (i = 0; tmp[i] == '0'; i++)
13392 continue;
13393 if (tmp[i] == '\0')
13394 i--;
13395 strcpy (buf + j, tmp + i);
13396}
13397
3f31e633
JB
13398static void
13399intel_operand_size (int bytemode, int sizeflag)
13400{
43234a1e
L
13401 if (vex.evex
13402 && vex.b
13403 && (bytemode == x_mode
13404 || bytemode == evex_half_bcst_xmmq_mode))
13405 {
13406 if (vex.w)
13407 oappend ("QWORD PTR ");
13408 else
13409 oappend ("DWORD PTR ");
13410 return;
13411 }
3f31e633
JB
13412 switch (bytemode)
13413 {
13414 case b_mode:
b6169b20 13415 case b_swap_mode:
42903f7f 13416 case dqb_mode:
1ba585e8 13417 case db_mode:
3f31e633
JB
13418 oappend ("BYTE PTR ");
13419 break;
13420 case w_mode:
1ba585e8 13421 case dw_mode:
3f31e633
JB
13422 case dqw_mode:
13423 oappend ("WORD PTR ");
13424 break;
07f5af7d
L
13425 case indir_v_mode:
13426 if (address_mode == mode_64bit && isa64 == intel64)
13427 {
13428 oappend ("QWORD PTR ");
13429 break;
13430 }
1a0670f3 13431 /* Fall through. */
1a114b12 13432 case stack_v_mode:
7bb15c6f 13433 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
3f31e633
JB
13434 {
13435 oappend ("QWORD PTR ");
3f31e633
JB
13436 break;
13437 }
1a0670f3 13438 /* Fall through. */
3f31e633 13439 case v_mode:
b6169b20 13440 case v_swap_mode:
3f31e633 13441 case dq_mode:
161a04f6
L
13442 USED_REX (REX_W);
13443 if (rex & REX_W)
3f31e633 13444 oappend ("QWORD PTR ");
3f31e633 13445 else
f16cd0d5
L
13446 {
13447 if ((sizeflag & DFLAG) || bytemode == dq_mode)
13448 oappend ("DWORD PTR ");
13449 else
13450 oappend ("WORD PTR ");
13451 used_prefixes |= (prefixes & PREFIX_DATA);
13452 }
3f31e633 13453 break;
52fd6d94 13454 case z_mode:
161a04f6 13455 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
13456 *obufp++ = 'D';
13457 oappend ("WORD PTR ");
161a04f6 13458 if (!(rex & REX_W))
52fd6d94
JB
13459 used_prefixes |= (prefixes & PREFIX_DATA);
13460 break;
34b772a6
JB
13461 case a_mode:
13462 if (sizeflag & DFLAG)
13463 oappend ("QWORD PTR ");
13464 else
13465 oappend ("DWORD PTR ");
13466 used_prefixes |= (prefixes & PREFIX_DATA);
13467 break;
3f31e633 13468 case d_mode:
539f890d
L
13469 case d_scalar_mode:
13470 case d_scalar_swap_mode:
fa99fab2 13471 case d_swap_mode:
42903f7f 13472 case dqd_mode:
3f31e633
JB
13473 oappend ("DWORD PTR ");
13474 break;
13475 case q_mode:
539f890d
L
13476 case q_scalar_mode:
13477 case q_scalar_swap_mode:
b6169b20 13478 case q_swap_mode:
3f31e633
JB
13479 oappend ("QWORD PTR ");
13480 break;
d20dee9e 13481 case dqa_mode:
3f31e633 13482 case m_mode:
cb712a9e 13483 if (address_mode == mode_64bit)
3f31e633
JB
13484 oappend ("QWORD PTR ");
13485 else
13486 oappend ("DWORD PTR ");
13487 break;
13488 case f_mode:
13489 if (sizeflag & DFLAG)
13490 oappend ("FWORD PTR ");
13491 else
13492 oappend ("DWORD PTR ");
13493 used_prefixes |= (prefixes & PREFIX_DATA);
13494 break;
13495 case t_mode:
13496 oappend ("TBYTE PTR ");
13497 break;
13498 case x_mode:
b6169b20 13499 case x_swap_mode:
43234a1e
L
13500 case evex_x_gscat_mode:
13501 case evex_x_nobcst_mode:
53467f57
IT
13502 case b_scalar_mode:
13503 case w_scalar_mode:
c0f3af97
L
13504 if (need_vex)
13505 {
13506 switch (vex.length)
13507 {
13508 case 128:
13509 oappend ("XMMWORD PTR ");
13510 break;
13511 case 256:
13512 oappend ("YMMWORD PTR ");
13513 break;
43234a1e
L
13514 case 512:
13515 oappend ("ZMMWORD PTR ");
13516 break;
c0f3af97
L
13517 default:
13518 abort ();
13519 }
13520 }
13521 else
13522 oappend ("XMMWORD PTR ");
13523 break;
13524 case xmm_mode:
3f31e633
JB
13525 oappend ("XMMWORD PTR ");
13526 break;
43234a1e
L
13527 case ymm_mode:
13528 oappend ("YMMWORD PTR ");
13529 break;
c0f3af97 13530 case xmmq_mode:
43234a1e 13531 case evex_half_bcst_xmmq_mode:
c0f3af97
L
13532 if (!need_vex)
13533 abort ();
13534
13535 switch (vex.length)
13536 {
13537 case 128:
13538 oappend ("QWORD PTR ");
13539 break;
13540 case 256:
13541 oappend ("XMMWORD PTR ");
13542 break;
43234a1e
L
13543 case 512:
13544 oappend ("YMMWORD PTR ");
13545 break;
c0f3af97
L
13546 default:
13547 abort ();
13548 }
13549 break;
6c30d220
L
13550 case xmm_mb_mode:
13551 if (!need_vex)
13552 abort ();
13553
13554 switch (vex.length)
13555 {
13556 case 128:
13557 case 256:
43234a1e 13558 case 512:
6c30d220
L
13559 oappend ("BYTE PTR ");
13560 break;
13561 default:
13562 abort ();
13563 }
13564 break;
13565 case xmm_mw_mode:
13566 if (!need_vex)
13567 abort ();
13568
13569 switch (vex.length)
13570 {
13571 case 128:
13572 case 256:
43234a1e 13573 case 512:
6c30d220
L
13574 oappend ("WORD PTR ");
13575 break;
13576 default:
13577 abort ();
13578 }
13579 break;
13580 case xmm_md_mode:
13581 if (!need_vex)
13582 abort ();
13583
13584 switch (vex.length)
13585 {
13586 case 128:
13587 case 256:
43234a1e 13588 case 512:
6c30d220
L
13589 oappend ("DWORD PTR ");
13590 break;
13591 default:
13592 abort ();
13593 }
13594 break;
13595 case xmm_mq_mode:
13596 if (!need_vex)
13597 abort ();
13598
13599 switch (vex.length)
13600 {
13601 case 128:
13602 case 256:
43234a1e 13603 case 512:
6c30d220
L
13604 oappend ("QWORD PTR ");
13605 break;
13606 default:
13607 abort ();
13608 }
13609 break;
13610 case xmmdw_mode:
13611 if (!need_vex)
13612 abort ();
13613
13614 switch (vex.length)
13615 {
13616 case 128:
13617 oappend ("WORD PTR ");
13618 break;
13619 case 256:
13620 oappend ("DWORD PTR ");
13621 break;
43234a1e
L
13622 case 512:
13623 oappend ("QWORD PTR ");
13624 break;
6c30d220
L
13625 default:
13626 abort ();
13627 }
13628 break;
13629 case xmmqd_mode:
13630 if (!need_vex)
13631 abort ();
13632
13633 switch (vex.length)
13634 {
13635 case 128:
13636 oappend ("DWORD PTR ");
13637 break;
13638 case 256:
13639 oappend ("QWORD PTR ");
13640 break;
43234a1e
L
13641 case 512:
13642 oappend ("XMMWORD PTR ");
13643 break;
6c30d220
L
13644 default:
13645 abort ();
13646 }
13647 break;
c0f3af97
L
13648 case ymmq_mode:
13649 if (!need_vex)
13650 abort ();
13651
13652 switch (vex.length)
13653 {
13654 case 128:
13655 oappend ("QWORD PTR ");
13656 break;
13657 case 256:
13658 oappend ("YMMWORD PTR ");
13659 break;
43234a1e
L
13660 case 512:
13661 oappend ("ZMMWORD PTR ");
13662 break;
c0f3af97
L
13663 default:
13664 abort ();
13665 }
13666 break;
6c30d220
L
13667 case ymmxmm_mode:
13668 if (!need_vex)
13669 abort ();
13670
13671 switch (vex.length)
13672 {
13673 case 128:
13674 case 256:
13675 oappend ("XMMWORD PTR ");
13676 break;
13677 default:
13678 abort ();
13679 }
13680 break;
fb9c77c7
L
13681 case o_mode:
13682 oappend ("OWORD PTR ");
13683 break;
43234a1e 13684 case xmm_mdq_mode:
0bfee649 13685 case vex_w_dq_mode:
1c480963 13686 case vex_scalar_w_dq_mode:
0bfee649
L
13687 if (!need_vex)
13688 abort ();
13689
13690 if (vex.w)
13691 oappend ("QWORD PTR ");
13692 else
13693 oappend ("DWORD PTR ");
13694 break;
43234a1e
L
13695 case vex_vsib_d_w_dq_mode:
13696 case vex_vsib_q_w_dq_mode:
13697 if (!need_vex)
13698 abort ();
13699
13700 if (!vex.evex)
13701 {
13702 if (vex.w)
13703 oappend ("QWORD PTR ");
13704 else
13705 oappend ("DWORD PTR ");
13706 }
13707 else
13708 {
b28d1bda
IT
13709 switch (vex.length)
13710 {
13711 case 128:
13712 oappend ("XMMWORD PTR ");
13713 break;
13714 case 256:
13715 oappend ("YMMWORD PTR ");
13716 break;
13717 case 512:
13718 oappend ("ZMMWORD PTR ");
13719 break;
13720 default:
13721 abort ();
13722 }
43234a1e
L
13723 }
13724 break;
5fc35d96
IT
13725 case vex_vsib_q_w_d_mode:
13726 case vex_vsib_d_w_d_mode:
b28d1bda 13727 if (!need_vex || !vex.evex)
5fc35d96
IT
13728 abort ();
13729
b28d1bda
IT
13730 switch (vex.length)
13731 {
13732 case 128:
13733 oappend ("QWORD PTR ");
13734 break;
13735 case 256:
13736 oappend ("XMMWORD PTR ");
13737 break;
13738 case 512:
13739 oappend ("YMMWORD PTR ");
13740 break;
13741 default:
13742 abort ();
13743 }
5fc35d96
IT
13744
13745 break;
1ba585e8
IT
13746 case mask_bd_mode:
13747 if (!need_vex || vex.length != 128)
13748 abort ();
13749 if (vex.w)
13750 oappend ("DWORD PTR ");
13751 else
13752 oappend ("BYTE PTR ");
13753 break;
43234a1e
L
13754 case mask_mode:
13755 if (!need_vex)
13756 abort ();
1ba585e8
IT
13757 if (vex.w)
13758 oappend ("QWORD PTR ");
13759 else
13760 oappend ("WORD PTR ");
43234a1e 13761 break;
6c75cc62 13762 case v_bnd_mode:
d276ec69 13763 case v_bndmk_mode:
3f31e633
JB
13764 default:
13765 break;
13766 }
13767}
13768
252b5132 13769static void
c0f3af97 13770OP_E_register (int bytemode, int sizeflag)
252b5132 13771{
c0f3af97
L
13772 int reg = modrm.rm;
13773 const char **names;
252b5132 13774
c0f3af97
L
13775 USED_REX (REX_B);
13776 if ((rex & REX_B))
13777 reg += 8;
252b5132 13778
b6169b20 13779 if ((sizeflag & SUFFIX_ALWAYS)
1ba585e8 13780 && (bytemode == b_swap_mode
9f79e886 13781 || bytemode == bnd_swap_mode
60227d64 13782 || bytemode == v_swap_mode))
b6169b20
L
13783 swap_operand ();
13784
c0f3af97 13785 switch (bytemode)
252b5132 13786 {
c0f3af97 13787 case b_mode:
b6169b20 13788 case b_swap_mode:
c0f3af97
L
13789 USED_REX (0);
13790 if (rex)
13791 names = names8rex;
13792 else
13793 names = names8;
13794 break;
13795 case w_mode:
13796 names = names16;
13797 break;
13798 case d_mode:
1ba585e8
IT
13799 case dw_mode:
13800 case db_mode:
c0f3af97
L
13801 names = names32;
13802 break;
13803 case q_mode:
13804 names = names64;
13805 break;
13806 case m_mode:
6c75cc62 13807 case v_bnd_mode:
c0f3af97
L
13808 names = address_mode == mode_64bit ? names64 : names32;
13809 break;
7e8b059b 13810 case bnd_mode:
9f79e886 13811 case bnd_swap_mode:
0d96e4df
L
13812 if (reg > 0x3)
13813 {
13814 oappend ("(bad)");
13815 return;
13816 }
7e8b059b
L
13817 names = names_bnd;
13818 break;
07f5af7d
L
13819 case indir_v_mode:
13820 if (address_mode == mode_64bit && isa64 == intel64)
13821 {
13822 names = names64;
13823 break;
13824 }
1a0670f3 13825 /* Fall through. */
c0f3af97 13826 case stack_v_mode:
7bb15c6f 13827 if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
252b5132 13828 {
c0f3af97 13829 names = names64;
252b5132 13830 break;
252b5132 13831 }
c0f3af97 13832 bytemode = v_mode;
1a0670f3 13833 /* Fall through. */
c0f3af97 13834 case v_mode:
b6169b20 13835 case v_swap_mode:
c0f3af97
L
13836 case dq_mode:
13837 case dqb_mode:
13838 case dqd_mode:
13839 case dqw_mode:
d20dee9e 13840 case dqa_mode:
c0f3af97
L
13841 USED_REX (REX_W);
13842 if (rex & REX_W)
13843 names = names64;
c0f3af97 13844 else
f16cd0d5 13845 {
7bb15c6f 13846 if ((sizeflag & DFLAG)
f16cd0d5
L
13847 || (bytemode != v_mode
13848 && bytemode != v_swap_mode))
13849 names = names32;
13850 else
13851 names = names16;
13852 used_prefixes |= (prefixes & PREFIX_DATA);
13853 }
c0f3af97 13854 break;
de89d0a3
IT
13855 case va_mode:
13856 names = (address_mode == mode_64bit
13857 ? names64 : names32);
13858 if (!(prefixes & PREFIX_ADDR))
aa178437
IT
13859 names = (address_mode == mode_16bit
13860 ? names16 : names);
de89d0a3
IT
13861 else
13862 {
13863 /* Remove "addr16/addr32". */
13864 all_prefixes[last_addr_prefix] = 0;
13865 names = (address_mode != mode_32bit
13866 ? names32 : names16);
13867 used_prefixes |= PREFIX_ADDR;
13868 }
13869 break;
1ba585e8 13870 case mask_bd_mode:
43234a1e 13871 case mask_mode:
9889cbb1
L
13872 if (reg > 0x7)
13873 {
13874 oappend ("(bad)");
13875 return;
13876 }
43234a1e
L
13877 names = names_mask;
13878 break;
c0f3af97
L
13879 case 0:
13880 return;
13881 default:
13882 oappend (INTERNAL_DISASSEMBLER_ERROR);
252b5132
RH
13883 return;
13884 }
c0f3af97
L
13885 oappend (names[reg]);
13886}
13887
13888static void
c1e679ec 13889OP_E_memory (int bytemode, int sizeflag)
c0f3af97
L
13890{
13891 bfd_vma disp = 0;
13892 int add = (rex & REX_B) ? 8 : 0;
13893 int riprel = 0;
43234a1e
L
13894 int shift;
13895
13896 if (vex.evex)
13897 {
13898 /* In EVEX, if operand doesn't allow broadcast, vex.b should be 0. */
13899 if (vex.b
13900 && bytemode != x_mode
90a915bf 13901 && bytemode != xmmq_mode
43234a1e
L
13902 && bytemode != evex_half_bcst_xmmq_mode)
13903 {
13904 BadOp ();
13905 return;
13906 }
13907 switch (bytemode)
13908 {
1ba585e8
IT
13909 case dqw_mode:
13910 case dw_mode:
1ba585e8
IT
13911 shift = 1;
13912 break;
13913 case dqb_mode:
13914 case db_mode:
13915 shift = 0;
13916 break;
b50c9f31
JB
13917 case dq_mode:
13918 if (address_mode != mode_64bit)
13919 {
13920 shift = 2;
13921 break;
13922 }
13923 /* fall through */
43234a1e 13924 case vex_vsib_d_w_dq_mode:
5fc35d96 13925 case vex_vsib_d_w_d_mode:
eaa9d1ad 13926 case vex_vsib_q_w_dq_mode:
5fc35d96 13927 case vex_vsib_q_w_d_mode:
43234a1e
L
13928 case evex_x_gscat_mode:
13929 case xmm_mdq_mode:
13930 shift = vex.w ? 3 : 2;
13931 break;
43234a1e
L
13932 case x_mode:
13933 case evex_half_bcst_xmmq_mode:
90a915bf 13934 case xmmq_mode:
43234a1e
L
13935 if (vex.b)
13936 {
13937 shift = vex.w ? 3 : 2;
13938 break;
13939 }
1a0670f3 13940 /* Fall through. */
43234a1e
L
13941 case xmmqd_mode:
13942 case xmmdw_mode:
43234a1e
L
13943 case ymmq_mode:
13944 case evex_x_nobcst_mode:
13945 case x_swap_mode:
13946 switch (vex.length)
13947 {
13948 case 128:
13949 shift = 4;
13950 break;
13951 case 256:
13952 shift = 5;
13953 break;
13954 case 512:
13955 shift = 6;
13956 break;
13957 default:
13958 abort ();
13959 }
13960 break;
13961 case ymm_mode:
13962 shift = 5;
13963 break;
13964 case xmm_mode:
13965 shift = 4;
13966 break;
13967 case xmm_mq_mode:
13968 case q_mode:
13969 case q_scalar_mode:
13970 case q_swap_mode:
13971 case q_scalar_swap_mode:
13972 shift = 3;
13973 break;
13974 case dqd_mode:
13975 case xmm_md_mode:
13976 case d_mode:
13977 case d_scalar_mode:
13978 case d_swap_mode:
13979 case d_scalar_swap_mode:
13980 shift = 2;
13981 break;
5074ad8a 13982 case w_scalar_mode:
43234a1e
L
13983 case xmm_mw_mode:
13984 shift = 1;
13985 break;
5074ad8a 13986 case b_scalar_mode:
43234a1e
L
13987 case xmm_mb_mode:
13988 shift = 0;
13989 break;
d20dee9e
L
13990 case dqa_mode:
13991 shift = address_mode == mode_64bit ? 3 : 2;
13992 break;
43234a1e
L
13993 default:
13994 abort ();
13995 }
13996 /* Make necessary corrections to shift for modes that need it.
13997 For these modes we currently have shift 4, 5 or 6 depending on
13998 vex.length (it corresponds to xmmword, ymmword or zmmword
13999 operand). We might want to make it 3, 4 or 5 (e.g. for
14000 xmmq_mode). In case of broadcast enabled the corrections
14001 aren't needed, as element size is always 32 or 64 bits. */
90a915bf
IT
14002 if (!vex.b
14003 && (bytemode == xmmq_mode
14004 || bytemode == evex_half_bcst_xmmq_mode))
43234a1e
L
14005 shift -= 1;
14006 else if (bytemode == xmmqd_mode)
14007 shift -= 2;
14008 else if (bytemode == xmmdw_mode)
14009 shift -= 3;
b28d1bda
IT
14010 else if (bytemode == ymmq_mode && vex.length == 128)
14011 shift -= 1;
43234a1e
L
14012 }
14013 else
14014 shift = 0;
252b5132 14015
c0f3af97 14016 USED_REX (REX_B);
3f31e633
JB
14017 if (intel_syntax)
14018 intel_operand_size (bytemode, sizeflag);
252b5132
RH
14019 append_seg ();
14020
5d669648 14021 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132 14022 {
5d669648
L
14023 /* 32/64 bit address mode */
14024 int havedisp;
252b5132
RH
14025 int havesib;
14026 int havebase;
0f7da397 14027 int haveindex;
20afcfb7 14028 int needindex;
1bc60e56 14029 int needaddr32;
82c18208 14030 int base, rbase;
91d6fa6a 14031 int vindex = 0;
252b5132 14032 int scale = 0;
7e8b059b
L
14033 int addr32flag = !((sizeflag & AFLAG)
14034 || bytemode == v_bnd_mode
d276ec69 14035 || bytemode == v_bndmk_mode
9f79e886
JB
14036 || bytemode == bnd_mode
14037 || bytemode == bnd_swap_mode);
6c30d220
L
14038 const char **indexes64 = names64;
14039 const char **indexes32 = names32;
252b5132
RH
14040
14041 havesib = 0;
14042 havebase = 1;
0f7da397 14043 haveindex = 0;
7967e09e 14044 base = modrm.rm;
252b5132
RH
14045
14046 if (base == 4)
14047 {
14048 havesib = 1;
dfc8cf43 14049 vindex = sib.index;
161a04f6
L
14050 USED_REX (REX_X);
14051 if (rex & REX_X)
91d6fa6a 14052 vindex += 8;
6c30d220
L
14053 switch (bytemode)
14054 {
14055 case vex_vsib_d_w_dq_mode:
5fc35d96 14056 case vex_vsib_d_w_d_mode:
6c30d220 14057 case vex_vsib_q_w_dq_mode:
5fc35d96 14058 case vex_vsib_q_w_d_mode:
6c30d220
L
14059 if (!need_vex)
14060 abort ();
43234a1e
L
14061 if (vex.evex)
14062 {
14063 if (!vex.v)
14064 vindex += 16;
14065 }
6c30d220
L
14066
14067 haveindex = 1;
14068 switch (vex.length)
14069 {
14070 case 128:
7bb15c6f 14071 indexes64 = indexes32 = names_xmm;
6c30d220
L
14072 break;
14073 case 256:
5fc35d96
IT
14074 if (!vex.w
14075 || bytemode == vex_vsib_q_w_dq_mode
14076 || bytemode == vex_vsib_q_w_d_mode)
7bb15c6f 14077 indexes64 = indexes32 = names_ymm;
6c30d220 14078 else
7bb15c6f 14079 indexes64 = indexes32 = names_xmm;
6c30d220 14080 break;
43234a1e 14081 case 512:
5fc35d96
IT
14082 if (!vex.w
14083 || bytemode == vex_vsib_q_w_dq_mode
14084 || bytemode == vex_vsib_q_w_d_mode)
43234a1e
L
14085 indexes64 = indexes32 = names_zmm;
14086 else
14087 indexes64 = indexes32 = names_ymm;
14088 break;
6c30d220
L
14089 default:
14090 abort ();
14091 }
14092 break;
14093 default:
14094 haveindex = vindex != 4;
14095 break;
14096 }
14097 scale = sib.scale;
14098 base = sib.base;
252b5132
RH
14099 codep++;
14100 }
82c18208 14101 rbase = base + add;
252b5132 14102
7967e09e 14103 switch (modrm.mod)
252b5132
RH
14104 {
14105 case 0:
82c18208 14106 if (base == 5)
252b5132
RH
14107 {
14108 havebase = 0;
cb712a9e 14109 if (address_mode == mode_64bit && !havesib)
52b15da3
JH
14110 riprel = 1;
14111 disp = get32s ();
d276ec69
JB
14112 if (riprel && bytemode == v_bndmk_mode)
14113 {
14114 oappend ("(bad)");
14115 return;
14116 }
252b5132
RH
14117 }
14118 break;
14119 case 1:
14120 FETCH_DATA (the_info, codep + 1);
14121 disp = *codep++;
14122 if ((disp & 0x80) != 0)
14123 disp -= 0x100;
43234a1e
L
14124 if (vex.evex && shift > 0)
14125 disp <<= shift;
252b5132
RH
14126 break;
14127 case 2:
52b15da3 14128 disp = get32s ();
252b5132
RH
14129 break;
14130 }
14131
1bc60e56
L
14132 needindex = 0;
14133 needaddr32 = 0;
14134 if (havesib
14135 && !havebase
14136 && !haveindex
14137 && address_mode != mode_16bit)
14138 {
14139 if (address_mode == mode_64bit)
14140 {
14141 /* Display eiz instead of addr32. */
14142 needindex = addr32flag;
14143 needaddr32 = 1;
14144 }
14145 else
14146 {
14147 /* In 32-bit mode, we need index register to tell [offset]
14148 from [eiz*1 + offset]. */
14149 needindex = 1;
14150 }
14151 }
14152
20afcfb7
L
14153 havedisp = (havebase
14154 || needindex
14155 || (havesib && (haveindex || scale != 0)));
5d669648 14156
252b5132 14157 if (!intel_syntax)
82c18208 14158 if (modrm.mod != 0 || base == 5)
db6eb5be 14159 {
5d669648
L
14160 if (havedisp || riprel)
14161 print_displacement (scratchbuf, disp);
14162 else
14163 print_operand_value (scratchbuf, 1, disp);
db6eb5be 14164 oappend (scratchbuf);
52b15da3
JH
14165 if (riprel)
14166 {
14167 set_op (disp, 1);
28596323 14168 oappend (!addr32flag ? "(%rip)" : "(%eip)");
52b15da3 14169 }
db6eb5be 14170 }
2da11e11 14171
1bc60e56 14172 if ((havebase || haveindex || needaddr32 || riprel)
7e8b059b 14173 && (bytemode != v_bnd_mode)
d276ec69 14174 && (bytemode != v_bndmk_mode)
9f79e886
JB
14175 && (bytemode != bnd_mode)
14176 && (bytemode != bnd_swap_mode))
87767711
JB
14177 used_prefixes |= PREFIX_ADDR;
14178
5d669648 14179 if (havedisp || (intel_syntax && riprel))
252b5132 14180 {
252b5132 14181 *obufp++ = open_char;
52b15da3 14182 if (intel_syntax && riprel)
185b1163
L
14183 {
14184 set_op (disp, 1);
28596323 14185 oappend (!addr32flag ? "rip" : "eip");
185b1163 14186 }
db6eb5be 14187 *obufp = '\0';
252b5132 14188 if (havebase)
7e8b059b 14189 oappend (address_mode == mode_64bit && !addr32flag
82c18208 14190 ? names64[rbase] : names32[rbase]);
252b5132
RH
14191 if (havesib)
14192 {
db51cc60
L
14193 /* ESP/RSP won't allow index. If base isn't ESP/RSP,
14194 print index to tell base + index from base. */
14195 if (scale != 0
20afcfb7 14196 || needindex
db51cc60
L
14197 || haveindex
14198 || (havebase && base != ESP_REG_NUM))
252b5132 14199 {
9306ca4a 14200 if (!intel_syntax || havebase)
db6eb5be 14201 {
9306ca4a
JB
14202 *obufp++ = separator_char;
14203 *obufp = '\0';
db6eb5be 14204 }
db51cc60 14205 if (haveindex)
7e8b059b 14206 oappend (address_mode == mode_64bit && !addr32flag
6c30d220 14207 ? indexes64[vindex] : indexes32[vindex]);
db51cc60 14208 else
7e8b059b 14209 oappend (address_mode == mode_64bit && !addr32flag
db51cc60
L
14210 ? index64 : index32);
14211
db6eb5be
AM
14212 *obufp++ = scale_char;
14213 *obufp = '\0';
14214 sprintf (scratchbuf, "%d", 1 << scale);
14215 oappend (scratchbuf);
14216 }
252b5132 14217 }
185b1163 14218 if (intel_syntax
82c18208 14219 && (disp || modrm.mod != 0 || base == 5))
3d456fa1 14220 {
db51cc60 14221 if (!havedisp || (bfd_signed_vma) disp >= 0)
3d456fa1
JB
14222 {
14223 *obufp++ = '+';
14224 *obufp = '\0';
14225 }
05203043 14226 else if (modrm.mod != 1 && disp != -disp)
3d456fa1
JB
14227 {
14228 *obufp++ = '-';
14229 *obufp = '\0';
14230 disp = - (bfd_signed_vma) disp;
14231 }
14232
db51cc60
L
14233 if (havedisp)
14234 print_displacement (scratchbuf, disp);
14235 else
14236 print_operand_value (scratchbuf, 1, disp);
3d456fa1
JB
14237 oappend (scratchbuf);
14238 }
252b5132
RH
14239
14240 *obufp++ = close_char;
db6eb5be 14241 *obufp = '\0';
252b5132
RH
14242 }
14243 else if (intel_syntax)
db6eb5be 14244 {
82c18208 14245 if (modrm.mod != 0 || base == 5)
db6eb5be 14246 {
285ca992 14247 if (!active_seg_prefix)
252b5132 14248 {
d708bcba 14249 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
14250 oappend (":");
14251 }
52b15da3 14252 print_operand_value (scratchbuf, 1, disp);
db6eb5be
AM
14253 oappend (scratchbuf);
14254 }
14255 }
252b5132
RH
14256 }
14257 else
f16cd0d5
L
14258 {
14259 /* 16 bit address mode */
14260 used_prefixes |= prefixes & PREFIX_ADDR;
7967e09e 14261 switch (modrm.mod)
252b5132
RH
14262 {
14263 case 0:
7967e09e 14264 if (modrm.rm == 6)
252b5132
RH
14265 {
14266 disp = get16 ();
14267 if ((disp & 0x8000) != 0)
14268 disp -= 0x10000;
14269 }
14270 break;
14271 case 1:
14272 FETCH_DATA (the_info, codep + 1);
14273 disp = *codep++;
14274 if ((disp & 0x80) != 0)
14275 disp -= 0x100;
65f3ed04
JB
14276 if (vex.evex && shift > 0)
14277 disp <<= shift;
252b5132
RH
14278 break;
14279 case 2:
14280 disp = get16 ();
14281 if ((disp & 0x8000) != 0)
14282 disp -= 0x10000;
14283 break;
14284 }
14285
14286 if (!intel_syntax)
7967e09e 14287 if (modrm.mod != 0 || modrm.rm == 6)
db6eb5be 14288 {
5d669648 14289 print_displacement (scratchbuf, disp);
db6eb5be
AM
14290 oappend (scratchbuf);
14291 }
252b5132 14292
7967e09e 14293 if (modrm.mod != 0 || modrm.rm != 6)
252b5132
RH
14294 {
14295 *obufp++ = open_char;
db6eb5be 14296 *obufp = '\0';
7967e09e 14297 oappend (index16[modrm.rm]);
5d669648
L
14298 if (intel_syntax
14299 && (disp || modrm.mod != 0 || modrm.rm == 6))
3d456fa1 14300 {
5d669648 14301 if ((bfd_signed_vma) disp >= 0)
3d456fa1
JB
14302 {
14303 *obufp++ = '+';
14304 *obufp = '\0';
14305 }
7967e09e 14306 else if (modrm.mod != 1)
3d456fa1
JB
14307 {
14308 *obufp++ = '-';
14309 *obufp = '\0';
14310 disp = - (bfd_signed_vma) disp;
14311 }
14312
5d669648 14313 print_displacement (scratchbuf, disp);
3d456fa1
JB
14314 oappend (scratchbuf);
14315 }
14316
db6eb5be
AM
14317 *obufp++ = close_char;
14318 *obufp = '\0';
252b5132 14319 }
3d456fa1
JB
14320 else if (intel_syntax)
14321 {
285ca992 14322 if (!active_seg_prefix)
3d456fa1
JB
14323 {
14324 oappend (names_seg[ds_reg - es_reg]);
14325 oappend (":");
14326 }
14327 print_operand_value (scratchbuf, 1, disp & 0xffff);
14328 oappend (scratchbuf);
14329 }
252b5132 14330 }
43234a1e
L
14331 if (vex.evex && vex.b
14332 && (bytemode == x_mode
90a915bf 14333 || bytemode == xmmq_mode
43234a1e
L
14334 || bytemode == evex_half_bcst_xmmq_mode))
14335 {
90a915bf
IT
14336 if (vex.w
14337 || bytemode == xmmq_mode
14338 || bytemode == evex_half_bcst_xmmq_mode)
b28d1bda
IT
14339 {
14340 switch (vex.length)
14341 {
14342 case 128:
14343 oappend ("{1to2}");
14344 break;
14345 case 256:
14346 oappend ("{1to4}");
14347 break;
14348 case 512:
14349 oappend ("{1to8}");
14350 break;
14351 default:
14352 abort ();
14353 }
14354 }
43234a1e 14355 else
b28d1bda
IT
14356 {
14357 switch (vex.length)
14358 {
14359 case 128:
14360 oappend ("{1to4}");
14361 break;
14362 case 256:
14363 oappend ("{1to8}");
14364 break;
14365 case 512:
14366 oappend ("{1to16}");
14367 break;
14368 default:
14369 abort ();
14370 }
14371 }
43234a1e 14372 }
252b5132
RH
14373}
14374
c0f3af97 14375static void
8b3f93e7 14376OP_E (int bytemode, int sizeflag)
c0f3af97
L
14377{
14378 /* Skip mod/rm byte. */
14379 MODRM_CHECK;
14380 codep++;
14381
14382 if (modrm.mod == 3)
14383 OP_E_register (bytemode, sizeflag);
14384 else
c1e679ec 14385 OP_E_memory (bytemode, sizeflag);
c0f3af97
L
14386}
14387
252b5132 14388static void
26ca5450 14389OP_G (int bytemode, int sizeflag)
252b5132 14390{
52b15da3 14391 int add = 0;
c0a30a9f 14392 const char **names;
161a04f6
L
14393 USED_REX (REX_R);
14394 if (rex & REX_R)
52b15da3 14395 add += 8;
252b5132
RH
14396 switch (bytemode)
14397 {
14398 case b_mode:
52b15da3
JH
14399 USED_REX (0);
14400 if (rex)
7967e09e 14401 oappend (names8rex[modrm.reg + add]);
52b15da3 14402 else
7967e09e 14403 oappend (names8[modrm.reg + add]);
252b5132
RH
14404 break;
14405 case w_mode:
7967e09e 14406 oappend (names16[modrm.reg + add]);
252b5132
RH
14407 break;
14408 case d_mode:
1ba585e8
IT
14409 case db_mode:
14410 case dw_mode:
7967e09e 14411 oappend (names32[modrm.reg + add]);
52b15da3
JH
14412 break;
14413 case q_mode:
7967e09e 14414 oappend (names64[modrm.reg + add]);
252b5132 14415 break;
7e8b059b 14416 case bnd_mode:
0d96e4df
L
14417 if (modrm.reg > 0x3)
14418 {
14419 oappend ("(bad)");
14420 return;
14421 }
7e8b059b
L
14422 oappend (names_bnd[modrm.reg]);
14423 break;
252b5132 14424 case v_mode:
9306ca4a 14425 case dq_mode:
42903f7f
L
14426 case dqb_mode:
14427 case dqd_mode:
9306ca4a 14428 case dqw_mode:
161a04f6
L
14429 USED_REX (REX_W);
14430 if (rex & REX_W)
7967e09e 14431 oappend (names64[modrm.reg + add]);
252b5132 14432 else
f16cd0d5
L
14433 {
14434 if ((sizeflag & DFLAG) || bytemode != v_mode)
14435 oappend (names32[modrm.reg + add]);
14436 else
14437 oappend (names16[modrm.reg + add]);
14438 used_prefixes |= (prefixes & PREFIX_DATA);
14439 }
252b5132 14440 break;
c0a30a9f
L
14441 case va_mode:
14442 names = (address_mode == mode_64bit
14443 ? names64 : names32);
14444 if (!(prefixes & PREFIX_ADDR))
14445 {
14446 if (address_mode == mode_16bit)
14447 names = names16;
14448 }
14449 else
14450 {
14451 /* Remove "addr16/addr32". */
14452 all_prefixes[last_addr_prefix] = 0;
14453 names = (address_mode != mode_32bit
14454 ? names32 : names16);
14455 used_prefixes |= PREFIX_ADDR;
14456 }
14457 oappend (names[modrm.reg + add]);
14458 break;
90700ea2 14459 case m_mode:
cb712a9e 14460 if (address_mode == mode_64bit)
7967e09e 14461 oappend (names64[modrm.reg + add]);
90700ea2 14462 else
7967e09e 14463 oappend (names32[modrm.reg + add]);
90700ea2 14464 break;
1ba585e8 14465 case mask_bd_mode:
43234a1e 14466 case mask_mode:
9889cbb1
L
14467 if ((modrm.reg + add) > 0x7)
14468 {
14469 oappend ("(bad)");
14470 return;
14471 }
43234a1e
L
14472 oappend (names_mask[modrm.reg + add]);
14473 break;
252b5132
RH
14474 default:
14475 oappend (INTERNAL_DISASSEMBLER_ERROR);
14476 break;
14477 }
14478}
14479
52b15da3 14480static bfd_vma
26ca5450 14481get64 (void)
52b15da3 14482{
5dd0794d 14483 bfd_vma x;
52b15da3 14484#ifdef BFD64
5dd0794d
AM
14485 unsigned int a;
14486 unsigned int b;
14487
52b15da3
JH
14488 FETCH_DATA (the_info, codep + 8);
14489 a = *codep++ & 0xff;
14490 a |= (*codep++ & 0xff) << 8;
14491 a |= (*codep++ & 0xff) << 16;
070fe95d 14492 a |= (*codep++ & 0xffu) << 24;
5dd0794d 14493 b = *codep++ & 0xff;
52b15da3
JH
14494 b |= (*codep++ & 0xff) << 8;
14495 b |= (*codep++ & 0xff) << 16;
070fe95d 14496 b |= (*codep++ & 0xffu) << 24;
52b15da3
JH
14497 x = a + ((bfd_vma) b << 32);
14498#else
6608db57 14499 abort ();
5dd0794d 14500 x = 0;
52b15da3
JH
14501#endif
14502 return x;
14503}
14504
14505static bfd_signed_vma
26ca5450 14506get32 (void)
252b5132 14507{
52b15da3 14508 bfd_signed_vma x = 0;
252b5132
RH
14509
14510 FETCH_DATA (the_info, codep + 4);
52b15da3
JH
14511 x = *codep++ & (bfd_signed_vma) 0xff;
14512 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
14513 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
14514 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
14515 return x;
14516}
14517
14518static bfd_signed_vma
26ca5450 14519get32s (void)
52b15da3
JH
14520{
14521 bfd_signed_vma x = 0;
14522
14523 FETCH_DATA (the_info, codep + 4);
14524 x = *codep++ & (bfd_signed_vma) 0xff;
14525 x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
14526 x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
14527 x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
14528
14529 x = (x ^ ((bfd_signed_vma) 1 << 31)) - ((bfd_signed_vma) 1 << 31);
14530
252b5132
RH
14531 return x;
14532}
14533
14534static int
26ca5450 14535get16 (void)
252b5132
RH
14536{
14537 int x = 0;
14538
14539 FETCH_DATA (the_info, codep + 2);
14540 x = *codep++ & 0xff;
14541 x |= (*codep++ & 0xff) << 8;
14542 return x;
14543}
14544
14545static void
26ca5450 14546set_op (bfd_vma op, int riprel)
252b5132
RH
14547{
14548 op_index[op_ad] = op_ad;
cb712a9e 14549 if (address_mode == mode_64bit)
7081ff04
AJ
14550 {
14551 op_address[op_ad] = op;
14552 op_riprel[op_ad] = riprel;
14553 }
14554 else
14555 {
14556 /* Mask to get a 32-bit address. */
14557 op_address[op_ad] = op & 0xffffffff;
14558 op_riprel[op_ad] = riprel & 0xffffffff;
14559 }
252b5132
RH
14560}
14561
14562static void
26ca5450 14563OP_REG (int code, int sizeflag)
252b5132 14564{
2da11e11 14565 const char *s;
9b60702d 14566 int add;
de882298
RM
14567
14568 switch (code)
14569 {
14570 case es_reg: case ss_reg: case cs_reg:
14571 case ds_reg: case fs_reg: case gs_reg:
14572 oappend (names_seg[code - es_reg]);
14573 return;
14574 }
14575
161a04f6
L
14576 USED_REX (REX_B);
14577 if (rex & REX_B)
52b15da3 14578 add = 8;
9b60702d
L
14579 else
14580 add = 0;
52b15da3
JH
14581
14582 switch (code)
14583 {
52b15da3
JH
14584 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
14585 case sp_reg: case bp_reg: case si_reg: case di_reg:
14586 s = names16[code - ax_reg + add];
14587 break;
52b15da3
JH
14588 case al_reg: case ah_reg: case cl_reg: case ch_reg:
14589 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
14590 USED_REX (0);
14591 if (rex)
14592 s = names8rex[code - al_reg + add];
14593 else
14594 s = names8[code - al_reg];
14595 break;
6439fc28
AM
14596 case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg:
14597 case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg:
7bb15c6f 14598 if (address_mode == mode_64bit
6c067bbb 14599 && ((sizeflag & DFLAG) || (rex & REX_W)))
6439fc28
AM
14600 {
14601 s = names64[code - rAX_reg + add];
14602 break;
14603 }
14604 code += eAX_reg - rAX_reg;
6608db57 14605 /* Fall through. */
52b15da3
JH
14606 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
14607 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
14608 USED_REX (REX_W);
14609 if (rex & REX_W)
52b15da3 14610 s = names64[code - eAX_reg + add];
52b15da3 14611 else
f16cd0d5
L
14612 {
14613 if (sizeflag & DFLAG)
14614 s = names32[code - eAX_reg + add];
14615 else
14616 s = names16[code - eAX_reg + add];
14617 used_prefixes |= (prefixes & PREFIX_DATA);
14618 }
52b15da3 14619 break;
52b15da3
JH
14620 default:
14621 s = INTERNAL_DISASSEMBLER_ERROR;
14622 break;
14623 }
14624 oappend (s);
14625}
14626
14627static void
26ca5450 14628OP_IMREG (int code, int sizeflag)
52b15da3
JH
14629{
14630 const char *s;
252b5132
RH
14631
14632 switch (code)
14633 {
14634 case indir_dx_reg:
d708bcba 14635 if (intel_syntax)
52fd6d94 14636 s = "dx";
d708bcba 14637 else
db6eb5be 14638 s = "(%dx)";
252b5132
RH
14639 break;
14640 case ax_reg: case cx_reg: case dx_reg: case bx_reg:
14641 case sp_reg: case bp_reg: case si_reg: case di_reg:
14642 s = names16[code - ax_reg];
14643 break;
14644 case es_reg: case ss_reg: case cs_reg:
14645 case ds_reg: case fs_reg: case gs_reg:
14646 s = names_seg[code - es_reg];
14647 break;
14648 case al_reg: case ah_reg: case cl_reg: case ch_reg:
14649 case dl_reg: case dh_reg: case bl_reg: case bh_reg:
52b15da3
JH
14650 USED_REX (0);
14651 if (rex)
14652 s = names8rex[code - al_reg];
14653 else
14654 s = names8[code - al_reg];
252b5132
RH
14655 break;
14656 case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
14657 case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
161a04f6
L
14658 USED_REX (REX_W);
14659 if (rex & REX_W)
52b15da3 14660 s = names64[code - eAX_reg];
252b5132 14661 else
f16cd0d5
L
14662 {
14663 if (sizeflag & DFLAG)
14664 s = names32[code - eAX_reg];
14665 else
14666 s = names16[code - eAX_reg];
14667 used_prefixes |= (prefixes & PREFIX_DATA);
14668 }
252b5132 14669 break;
52fd6d94 14670 case z_mode_ax_reg:
161a04f6 14671 if ((rex & REX_W) || (sizeflag & DFLAG))
52fd6d94
JB
14672 s = *names32;
14673 else
14674 s = *names16;
161a04f6 14675 if (!(rex & REX_W))
52fd6d94
JB
14676 used_prefixes |= (prefixes & PREFIX_DATA);
14677 break;
252b5132
RH
14678 default:
14679 s = INTERNAL_DISASSEMBLER_ERROR;
14680 break;
14681 }
14682 oappend (s);
14683}
14684
14685static void
26ca5450 14686OP_I (int bytemode, int sizeflag)
252b5132 14687{
52b15da3
JH
14688 bfd_signed_vma op;
14689 bfd_signed_vma mask = -1;
252b5132
RH
14690
14691 switch (bytemode)
14692 {
14693 case b_mode:
14694 FETCH_DATA (the_info, codep + 1);
52b15da3
JH
14695 op = *codep++;
14696 mask = 0xff;
14697 break;
14698 case q_mode:
cb712a9e 14699 if (address_mode == mode_64bit)
6439fc28
AM
14700 {
14701 op = get32s ();
14702 break;
14703 }
6608db57 14704 /* Fall through. */
252b5132 14705 case v_mode:
161a04f6
L
14706 USED_REX (REX_W);
14707 if (rex & REX_W)
52b15da3 14708 op = get32s ();
252b5132 14709 else
52b15da3 14710 {
f16cd0d5
L
14711 if (sizeflag & DFLAG)
14712 {
14713 op = get32 ();
14714 mask = 0xffffffff;
14715 }
14716 else
14717 {
14718 op = get16 ();
14719 mask = 0xfffff;
14720 }
14721 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 14722 }
252b5132
RH
14723 break;
14724 case w_mode:
52b15da3 14725 mask = 0xfffff;
252b5132
RH
14726 op = get16 ();
14727 break;
9306ca4a
JB
14728 case const_1_mode:
14729 if (intel_syntax)
6c067bbb 14730 oappend ("1");
9306ca4a 14731 return;
252b5132
RH
14732 default:
14733 oappend (INTERNAL_DISASSEMBLER_ERROR);
14734 return;
14735 }
14736
52b15da3
JH
14737 op &= mask;
14738 scratchbuf[0] = '$';
d708bcba 14739 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 14740 oappend_maybe_intel (scratchbuf);
52b15da3
JH
14741 scratchbuf[0] = '\0';
14742}
14743
14744static void
26ca5450 14745OP_I64 (int bytemode, int sizeflag)
52b15da3
JH
14746{
14747 bfd_signed_vma op;
14748 bfd_signed_vma mask = -1;
14749
cb712a9e 14750 if (address_mode != mode_64bit)
6439fc28
AM
14751 {
14752 OP_I (bytemode, sizeflag);
14753 return;
14754 }
14755
52b15da3
JH
14756 switch (bytemode)
14757 {
14758 case b_mode:
14759 FETCH_DATA (the_info, codep + 1);
14760 op = *codep++;
14761 mask = 0xff;
14762 break;
14763 case v_mode:
161a04f6
L
14764 USED_REX (REX_W);
14765 if (rex & REX_W)
52b15da3 14766 op = get64 ();
52b15da3
JH
14767 else
14768 {
f16cd0d5
L
14769 if (sizeflag & DFLAG)
14770 {
14771 op = get32 ();
14772 mask = 0xffffffff;
14773 }
14774 else
14775 {
14776 op = get16 ();
14777 mask = 0xfffff;
14778 }
14779 used_prefixes |= (prefixes & PREFIX_DATA);
52b15da3 14780 }
52b15da3
JH
14781 break;
14782 case w_mode:
14783 mask = 0xfffff;
14784 op = get16 ();
14785 break;
14786 default:
14787 oappend (INTERNAL_DISASSEMBLER_ERROR);
14788 return;
14789 }
14790
14791 op &= mask;
14792 scratchbuf[0] = '$';
d708bcba 14793 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 14794 oappend_maybe_intel (scratchbuf);
252b5132
RH
14795 scratchbuf[0] = '\0';
14796}
14797
14798static void
26ca5450 14799OP_sI (int bytemode, int sizeflag)
252b5132 14800{
52b15da3 14801 bfd_signed_vma op;
252b5132
RH
14802
14803 switch (bytemode)
14804 {
14805 case b_mode:
e3949f17 14806 case b_T_mode:
252b5132
RH
14807 FETCH_DATA (the_info, codep + 1);
14808 op = *codep++;
14809 if ((op & 0x80) != 0)
14810 op -= 0x100;
e3949f17
L
14811 if (bytemode == b_T_mode)
14812 {
14813 if (address_mode != mode_64bit
7bb15c6f 14814 || !((sizeflag & DFLAG) || (rex & REX_W)))
e3949f17 14815 {
6c067bbb
RM
14816 /* The operand-size prefix is overridden by a REX prefix. */
14817 if ((sizeflag & DFLAG) || (rex & REX_W))
e3949f17
L
14818 op &= 0xffffffff;
14819 else
14820 op &= 0xffff;
14821 }
14822 }
14823 else
14824 {
14825 if (!(rex & REX_W))
14826 {
14827 if (sizeflag & DFLAG)
14828 op &= 0xffffffff;
14829 else
14830 op &= 0xffff;
14831 }
14832 }
252b5132
RH
14833 break;
14834 case v_mode:
7bb15c6f
RM
14835 /* The operand-size prefix is overridden by a REX prefix. */
14836 if ((sizeflag & DFLAG) || (rex & REX_W))
52b15da3 14837 op = get32s ();
252b5132 14838 else
d9e3625e 14839 op = get16 ();
252b5132
RH
14840 break;
14841 default:
14842 oappend (INTERNAL_DISASSEMBLER_ERROR);
14843 return;
14844 }
52b15da3
JH
14845
14846 scratchbuf[0] = '$';
14847 print_operand_value (scratchbuf + 1, 1, op);
9ce09ba2 14848 oappend_maybe_intel (scratchbuf);
252b5132
RH
14849}
14850
14851static void
26ca5450 14852OP_J (int bytemode, int sizeflag)
252b5132 14853{
52b15da3 14854 bfd_vma disp;
7081ff04 14855 bfd_vma mask = -1;
65ca155d 14856 bfd_vma segment = 0;
252b5132
RH
14857
14858 switch (bytemode)
14859 {
14860 case b_mode:
14861 FETCH_DATA (the_info, codep + 1);
14862 disp = *codep++;
14863 if ((disp & 0x80) != 0)
14864 disp -= 0x100;
14865 break;
14866 case v_mode:
5db04b09
L
14867 if (isa64 == amd64)
14868 USED_REX (REX_W);
14869 if ((sizeflag & DFLAG)
14870 || (address_mode == mode_64bit
14871 && (isa64 != amd64 || (rex & REX_W))))
52b15da3 14872 disp = get32s ();
252b5132
RH
14873 else
14874 {
14875 disp = get16 ();
206717e8
L
14876 if ((disp & 0x8000) != 0)
14877 disp -= 0x10000;
65ca155d
L
14878 /* In 16bit mode, address is wrapped around at 64k within
14879 the same segment. Otherwise, a data16 prefix on a jump
14880 instruction means that the pc is masked to 16 bits after
14881 the displacement is added! */
14882 mask = 0xffff;
14883 if ((prefixes & PREFIX_DATA) == 0)
4fd7268a 14884 segment = ((start_pc + (codep - start_codep))
65ca155d 14885 & ~((bfd_vma) 0xffff));
252b5132 14886 }
5db04b09
L
14887 if (address_mode != mode_64bit
14888 || (isa64 == amd64 && !(rex & REX_W)))
f16cd0d5 14889 used_prefixes |= (prefixes & PREFIX_DATA);
252b5132
RH
14890 break;
14891 default:
14892 oappend (INTERNAL_DISASSEMBLER_ERROR);
14893 return;
14894 }
42d5f9c6 14895 disp = ((start_pc + (codep - start_codep) + disp) & mask) | segment;
52b15da3
JH
14896 set_op (disp, 0);
14897 print_operand_value (scratchbuf, 1, disp);
252b5132
RH
14898 oappend (scratchbuf);
14899}
14900
252b5132 14901static void
ed7841b3 14902OP_SEG (int bytemode, int sizeflag)
252b5132 14903{
ed7841b3 14904 if (bytemode == w_mode)
7967e09e 14905 oappend (names_seg[modrm.reg]);
ed7841b3 14906 else
7967e09e 14907 OP_E (modrm.mod == 3 ? bytemode : w_mode, sizeflag);
252b5132
RH
14908}
14909
14910static void
26ca5450 14911OP_DIR (int dummy ATTRIBUTE_UNUSED, int sizeflag)
252b5132
RH
14912{
14913 int seg, offset;
14914
c608c12e 14915 if (sizeflag & DFLAG)
252b5132 14916 {
c608c12e
AM
14917 offset = get32 ();
14918 seg = get16 ();
252b5132 14919 }
c608c12e
AM
14920 else
14921 {
14922 offset = get16 ();
14923 seg = get16 ();
14924 }
7d421014 14925 used_prefixes |= (prefixes & PREFIX_DATA);
d708bcba 14926 if (intel_syntax)
3f31e633 14927 sprintf (scratchbuf, "0x%x:0x%x", seg, offset);
d708bcba
AM
14928 else
14929 sprintf (scratchbuf, "$0x%x,$0x%x", seg, offset);
c608c12e 14930 oappend (scratchbuf);
252b5132
RH
14931}
14932
252b5132 14933static void
3f31e633 14934OP_OFF (int bytemode, int sizeflag)
252b5132 14935{
52b15da3 14936 bfd_vma off;
252b5132 14937
3f31e633
JB
14938 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
14939 intel_operand_size (bytemode, sizeflag);
252b5132
RH
14940 append_seg ();
14941
cb712a9e 14942 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
252b5132
RH
14943 off = get32 ();
14944 else
14945 off = get16 ();
14946
14947 if (intel_syntax)
14948 {
285ca992 14949 if (!active_seg_prefix)
252b5132 14950 {
d708bcba 14951 oappend (names_seg[ds_reg - es_reg]);
252b5132
RH
14952 oappend (":");
14953 }
14954 }
52b15da3
JH
14955 print_operand_value (scratchbuf, 1, off);
14956 oappend (scratchbuf);
14957}
6439fc28 14958
52b15da3 14959static void
3f31e633 14960OP_OFF64 (int bytemode, int sizeflag)
52b15da3
JH
14961{
14962 bfd_vma off;
14963
539e75ad
L
14964 if (address_mode != mode_64bit
14965 || (prefixes & PREFIX_ADDR))
6439fc28
AM
14966 {
14967 OP_OFF (bytemode, sizeflag);
14968 return;
14969 }
14970
3f31e633
JB
14971 if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
14972 intel_operand_size (bytemode, sizeflag);
52b15da3
JH
14973 append_seg ();
14974
6608db57 14975 off = get64 ();
52b15da3
JH
14976
14977 if (intel_syntax)
14978 {
285ca992 14979 if (!active_seg_prefix)
52b15da3 14980 {
d708bcba 14981 oappend (names_seg[ds_reg - es_reg]);
52b15da3
JH
14982 oappend (":");
14983 }
14984 }
14985 print_operand_value (scratchbuf, 1, off);
252b5132
RH
14986 oappend (scratchbuf);
14987}
14988
14989static void
26ca5450 14990ptr_reg (int code, int sizeflag)
252b5132 14991{
2da11e11 14992 const char *s;
d708bcba 14993
1d9f512f 14994 *obufp++ = open_char;
20f0a1fc 14995 used_prefixes |= (prefixes & PREFIX_ADDR);
cb712a9e 14996 if (address_mode == mode_64bit)
c1a64871
JH
14997 {
14998 if (!(sizeflag & AFLAG))
db6eb5be 14999 s = names32[code - eAX_reg];
c1a64871 15000 else
db6eb5be 15001 s = names64[code - eAX_reg];
c1a64871 15002 }
52b15da3 15003 else if (sizeflag & AFLAG)
252b5132
RH
15004 s = names32[code - eAX_reg];
15005 else
15006 s = names16[code - eAX_reg];
15007 oappend (s);
1d9f512f
AM
15008 *obufp++ = close_char;
15009 *obufp = 0;
252b5132
RH
15010}
15011
15012static void
26ca5450 15013OP_ESreg (int code, int sizeflag)
252b5132 15014{
9306ca4a 15015 if (intel_syntax)
52fd6d94
JB
15016 {
15017 switch (codep[-1])
15018 {
15019 case 0x6d: /* insw/insl */
15020 intel_operand_size (z_mode, sizeflag);
15021 break;
15022 case 0xa5: /* movsw/movsl/movsq */
15023 case 0xa7: /* cmpsw/cmpsl/cmpsq */
15024 case 0xab: /* stosw/stosl */
15025 case 0xaf: /* scasw/scasl */
15026 intel_operand_size (v_mode, sizeflag);
15027 break;
15028 default:
15029 intel_operand_size (b_mode, sizeflag);
15030 }
15031 }
9ce09ba2 15032 oappend_maybe_intel ("%es:");
252b5132
RH
15033 ptr_reg (code, sizeflag);
15034}
15035
15036static void
26ca5450 15037OP_DSreg (int code, int sizeflag)
252b5132 15038{
9306ca4a 15039 if (intel_syntax)
52fd6d94
JB
15040 {
15041 switch (codep[-1])
15042 {
15043 case 0x6f: /* outsw/outsl */
15044 intel_operand_size (z_mode, sizeflag);
15045 break;
15046 case 0xa5: /* movsw/movsl/movsq */
15047 case 0xa7: /* cmpsw/cmpsl/cmpsq */
15048 case 0xad: /* lodsw/lodsl/lodsq */
15049 intel_operand_size (v_mode, sizeflag);
15050 break;
15051 default:
15052 intel_operand_size (b_mode, sizeflag);
15053 }
15054 }
285ca992
L
15055 /* Set active_seg_prefix to PREFIX_DS if it is unset so that the
15056 default segment register DS is printed. */
15057 if (!active_seg_prefix)
15058 active_seg_prefix = PREFIX_DS;
6608db57 15059 append_seg ();
252b5132
RH
15060 ptr_reg (code, sizeflag);
15061}
15062
252b5132 15063static void
26ca5450 15064OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15065{
9b60702d 15066 int add;
161a04f6 15067 if (rex & REX_R)
c4a530c5 15068 {
161a04f6 15069 USED_REX (REX_R);
c4a530c5
JB
15070 add = 8;
15071 }
cb712a9e 15072 else if (address_mode != mode_64bit && (prefixes & PREFIX_LOCK))
c4a530c5 15073 {
f16cd0d5 15074 all_prefixes[last_lock_prefix] = 0;
c4a530c5
JB
15075 used_prefixes |= PREFIX_LOCK;
15076 add = 8;
15077 }
9b60702d
L
15078 else
15079 add = 0;
7967e09e 15080 sprintf (scratchbuf, "%%cr%d", modrm.reg + add);
9ce09ba2 15081 oappend_maybe_intel (scratchbuf);
252b5132
RH
15082}
15083
252b5132 15084static void
26ca5450 15085OP_D (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15086{
9b60702d 15087 int add;
161a04f6
L
15088 USED_REX (REX_R);
15089 if (rex & REX_R)
52b15da3 15090 add = 8;
9b60702d
L
15091 else
15092 add = 0;
d708bcba 15093 if (intel_syntax)
7967e09e 15094 sprintf (scratchbuf, "db%d", modrm.reg + add);
d708bcba 15095 else
7967e09e 15096 sprintf (scratchbuf, "%%db%d", modrm.reg + add);
252b5132
RH
15097 oappend (scratchbuf);
15098}
15099
252b5132 15100static void
26ca5450 15101OP_T (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15102{
7967e09e 15103 sprintf (scratchbuf, "%%tr%d", modrm.reg);
9ce09ba2 15104 oappend_maybe_intel (scratchbuf);
252b5132
RH
15105}
15106
15107static void
6f74c397 15108OP_R (int bytemode, int sizeflag)
252b5132 15109{
68f34464
L
15110 /* Skip mod/rm byte. */
15111 MODRM_CHECK;
15112 codep++;
15113 OP_E_register (bytemode, sizeflag);
252b5132
RH
15114}
15115
15116static void
26ca5450 15117OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132 15118{
b9733481
L
15119 int reg = modrm.reg;
15120 const char **names;
15121
041bd2e0
JH
15122 used_prefixes |= (prefixes & PREFIX_DATA);
15123 if (prefixes & PREFIX_DATA)
20f0a1fc 15124 {
b9733481 15125 names = names_xmm;
161a04f6
L
15126 USED_REX (REX_R);
15127 if (rex & REX_R)
b9733481 15128 reg += 8;
20f0a1fc 15129 }
041bd2e0 15130 else
b9733481
L
15131 names = names_mm;
15132 oappend (names[reg]);
252b5132
RH
15133}
15134
c608c12e 15135static void
c0f3af97 15136OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
c608c12e 15137{
b9733481
L
15138 int reg = modrm.reg;
15139 const char **names;
15140
161a04f6
L
15141 USED_REX (REX_R);
15142 if (rex & REX_R)
b9733481 15143 reg += 8;
43234a1e
L
15144 if (vex.evex)
15145 {
15146 if (!vex.r)
15147 reg += 16;
15148 }
15149
539f890d
L
15150 if (need_vex
15151 && bytemode != xmm_mode
43234a1e
L
15152 && bytemode != xmmq_mode
15153 && bytemode != evex_half_bcst_xmmq_mode
15154 && bytemode != ymm_mode
539f890d 15155 && bytemode != scalar_mode)
c0f3af97
L
15156 {
15157 switch (vex.length)
15158 {
15159 case 128:
b9733481 15160 names = names_xmm;
c0f3af97
L
15161 break;
15162 case 256:
5fc35d96
IT
15163 if (vex.w
15164 || (bytemode != vex_vsib_q_w_dq_mode
15165 && bytemode != vex_vsib_q_w_d_mode))
6c30d220
L
15166 names = names_ymm;
15167 else
15168 names = names_xmm;
c0f3af97 15169 break;
43234a1e
L
15170 case 512:
15171 names = names_zmm;
15172 break;
c0f3af97
L
15173 default:
15174 abort ();
15175 }
15176 }
43234a1e
L
15177 else if (bytemode == xmmq_mode
15178 || bytemode == evex_half_bcst_xmmq_mode)
15179 {
15180 switch (vex.length)
15181 {
15182 case 128:
15183 case 256:
15184 names = names_xmm;
15185 break;
15186 case 512:
15187 names = names_ymm;
15188 break;
15189 default:
15190 abort ();
15191 }
15192 }
15193 else if (bytemode == ymm_mode)
15194 names = names_ymm;
c0f3af97 15195 else
b9733481
L
15196 names = names_xmm;
15197 oappend (names[reg]);
c608c12e
AM
15198}
15199
252b5132 15200static void
26ca5450 15201OP_EM (int bytemode, int sizeflag)
252b5132 15202{
b9733481
L
15203 int reg;
15204 const char **names;
15205
7967e09e 15206 if (modrm.mod != 3)
252b5132 15207 {
b6169b20
L
15208 if (intel_syntax
15209 && (bytemode == v_mode || bytemode == v_swap_mode))
9306ca4a
JB
15210 {
15211 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
15212 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 15213 }
252b5132
RH
15214 OP_E (bytemode, sizeflag);
15215 return;
15216 }
15217
b6169b20
L
15218 if ((sizeflag & SUFFIX_ALWAYS) && bytemode == v_swap_mode)
15219 swap_operand ();
15220
6608db57 15221 /* Skip mod/rm byte. */
4bba6815 15222 MODRM_CHECK;
252b5132 15223 codep++;
041bd2e0 15224 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 15225 reg = modrm.rm;
041bd2e0 15226 if (prefixes & PREFIX_DATA)
20f0a1fc 15227 {
b9733481 15228 names = names_xmm;
161a04f6
L
15229 USED_REX (REX_B);
15230 if (rex & REX_B)
b9733481 15231 reg += 8;
20f0a1fc 15232 }
041bd2e0 15233 else
b9733481
L
15234 names = names_mm;
15235 oappend (names[reg]);
252b5132
RH
15236}
15237
246c51aa
L
15238/* cvt* are the only instructions in sse2 which have
15239 both SSE and MMX operands and also have 0x66 prefix
15240 in their opcode. 0x66 was originally used to differentiate
15241 between SSE and MMX instruction(operands). So we have to handle the
4d9567e0
MM
15242 cvt* separately using OP_EMC and OP_MXC */
15243static void
15244OP_EMC (int bytemode, int sizeflag)
15245{
7967e09e 15246 if (modrm.mod != 3)
4d9567e0
MM
15247 {
15248 if (intel_syntax && bytemode == v_mode)
15249 {
15250 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
15251 used_prefixes |= (prefixes & PREFIX_DATA);
6c067bbb 15252 }
4d9567e0
MM
15253 OP_E (bytemode, sizeflag);
15254 return;
15255 }
246c51aa 15256
4d9567e0
MM
15257 /* Skip mod/rm byte. */
15258 MODRM_CHECK;
15259 codep++;
15260 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 15261 oappend (names_mm[modrm.rm]);
4d9567e0
MM
15262}
15263
15264static void
15265OP_MXC (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15266{
15267 used_prefixes |= (prefixes & PREFIX_DATA);
b9733481 15268 oappend (names_mm[modrm.reg]);
4d9567e0
MM
15269}
15270
c608c12e 15271static void
26ca5450 15272OP_EX (int bytemode, int sizeflag)
c608c12e 15273{
b9733481
L
15274 int reg;
15275 const char **names;
d6f574e0
L
15276
15277 /* Skip mod/rm byte. */
15278 MODRM_CHECK;
15279 codep++;
15280
7967e09e 15281 if (modrm.mod != 3)
c608c12e 15282 {
c1e679ec 15283 OP_E_memory (bytemode, sizeflag);
c608c12e
AM
15284 return;
15285 }
d6f574e0 15286
b9733481 15287 reg = modrm.rm;
161a04f6
L
15288 USED_REX (REX_B);
15289 if (rex & REX_B)
b9733481 15290 reg += 8;
43234a1e
L
15291 if (vex.evex)
15292 {
15293 USED_REX (REX_X);
15294 if ((rex & REX_X))
15295 reg += 16;
15296 }
c608c12e 15297
b6169b20 15298 if ((sizeflag & SUFFIX_ALWAYS)
fa99fab2
L
15299 && (bytemode == x_swap_mode
15300 || bytemode == d_swap_mode
7bb15c6f 15301 || bytemode == d_scalar_swap_mode
539f890d
L
15302 || bytemode == q_swap_mode
15303 || bytemode == q_scalar_swap_mode))
b6169b20
L
15304 swap_operand ();
15305
c0f3af97
L
15306 if (need_vex
15307 && bytemode != xmm_mode
6c30d220
L
15308 && bytemode != xmmdw_mode
15309 && bytemode != xmmqd_mode
15310 && bytemode != xmm_mb_mode
15311 && bytemode != xmm_mw_mode
15312 && bytemode != xmm_md_mode
15313 && bytemode != xmm_mq_mode
43234a1e 15314 && bytemode != xmm_mdq_mode
539f890d 15315 && bytemode != xmmq_mode
43234a1e
L
15316 && bytemode != evex_half_bcst_xmmq_mode
15317 && bytemode != ymm_mode
539f890d 15318 && bytemode != d_scalar_mode
7bb15c6f 15319 && bytemode != d_scalar_swap_mode
539f890d 15320 && bytemode != q_scalar_mode
1c480963
L
15321 && bytemode != q_scalar_swap_mode
15322 && bytemode != vex_scalar_w_dq_mode)
c0f3af97
L
15323 {
15324 switch (vex.length)
15325 {
15326 case 128:
b9733481 15327 names = names_xmm;
c0f3af97
L
15328 break;
15329 case 256:
b9733481 15330 names = names_ymm;
c0f3af97 15331 break;
43234a1e
L
15332 case 512:
15333 names = names_zmm;
15334 break;
c0f3af97
L
15335 default:
15336 abort ();
15337 }
15338 }
43234a1e
L
15339 else if (bytemode == xmmq_mode
15340 || bytemode == evex_half_bcst_xmmq_mode)
15341 {
15342 switch (vex.length)
15343 {
15344 case 128:
15345 case 256:
15346 names = names_xmm;
15347 break;
15348 case 512:
15349 names = names_ymm;
15350 break;
15351 default:
15352 abort ();
15353 }
15354 }
15355 else if (bytemode == ymm_mode)
15356 names = names_ymm;
c0f3af97 15357 else
b9733481
L
15358 names = names_xmm;
15359 oappend (names[reg]);
c608c12e
AM
15360}
15361
252b5132 15362static void
26ca5450 15363OP_MS (int bytemode, int sizeflag)
252b5132 15364{
7967e09e 15365 if (modrm.mod == 3)
2da11e11
AM
15366 OP_EM (bytemode, sizeflag);
15367 else
6608db57 15368 BadOp ();
252b5132
RH
15369}
15370
992aaec9 15371static void
26ca5450 15372OP_XS (int bytemode, int sizeflag)
992aaec9 15373{
7967e09e 15374 if (modrm.mod == 3)
992aaec9
AM
15375 OP_EX (bytemode, sizeflag);
15376 else
6608db57 15377 BadOp ();
992aaec9
AM
15378}
15379
cc0ec051
AM
15380static void
15381OP_M (int bytemode, int sizeflag)
15382{
7967e09e 15383 if (modrm.mod == 3)
75413a22
L
15384 /* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */
15385 BadOp ();
cc0ec051
AM
15386 else
15387 OP_E (bytemode, sizeflag);
15388}
15389
15390static void
15391OP_0f07 (int bytemode, int sizeflag)
15392{
7967e09e 15393 if (modrm.mod != 3 || modrm.rm != 0)
cc0ec051
AM
15394 BadOp ();
15395 else
15396 OP_E (bytemode, sizeflag);
15397}
15398
46e883c5 15399/* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
246c51aa 15400 32bit mode and "xchg %rax,%rax" in 64bit mode. */
46e883c5 15401
cc0ec051 15402static void
46e883c5 15403NOP_Fixup1 (int bytemode, int sizeflag)
cc0ec051 15404{
8b38ad71
L
15405 if ((prefixes & PREFIX_DATA) != 0
15406 || (rex != 0
15407 && rex != 0x48
15408 && address_mode == mode_64bit))
46e883c5
L
15409 OP_REG (bytemode, sizeflag);
15410 else
15411 strcpy (obuf, "nop");
15412}
15413
15414static void
15415NOP_Fixup2 (int bytemode, int sizeflag)
15416{
8b38ad71
L
15417 if ((prefixes & PREFIX_DATA) != 0
15418 || (rex != 0
15419 && rex != 0x48
15420 && address_mode == mode_64bit))
46e883c5 15421 OP_IMREG (bytemode, sizeflag);
cc0ec051
AM
15422}
15423
84037f8c 15424static const char *const Suffix3DNow[] = {
252b5132
RH
15425/* 00 */ NULL, NULL, NULL, NULL,
15426/* 04 */ NULL, NULL, NULL, NULL,
15427/* 08 */ NULL, NULL, NULL, NULL,
9e525108 15428/* 0C */ "pi2fw", "pi2fd", NULL, NULL,
252b5132
RH
15429/* 10 */ NULL, NULL, NULL, NULL,
15430/* 14 */ NULL, NULL, NULL, NULL,
15431/* 18 */ NULL, NULL, NULL, NULL,
9e525108 15432/* 1C */ "pf2iw", "pf2id", NULL, NULL,
252b5132
RH
15433/* 20 */ NULL, NULL, NULL, NULL,
15434/* 24 */ NULL, NULL, NULL, NULL,
15435/* 28 */ NULL, NULL, NULL, NULL,
15436/* 2C */ NULL, NULL, NULL, NULL,
15437/* 30 */ NULL, NULL, NULL, NULL,
15438/* 34 */ NULL, NULL, NULL, NULL,
15439/* 38 */ NULL, NULL, NULL, NULL,
15440/* 3C */ NULL, NULL, NULL, NULL,
15441/* 40 */ NULL, NULL, NULL, NULL,
15442/* 44 */ NULL, NULL, NULL, NULL,
15443/* 48 */ NULL, NULL, NULL, NULL,
15444/* 4C */ NULL, NULL, NULL, NULL,
15445/* 50 */ NULL, NULL, NULL, NULL,
15446/* 54 */ NULL, NULL, NULL, NULL,
15447/* 58 */ NULL, NULL, NULL, NULL,
15448/* 5C */ NULL, NULL, NULL, NULL,
15449/* 60 */ NULL, NULL, NULL, NULL,
15450/* 64 */ NULL, NULL, NULL, NULL,
15451/* 68 */ NULL, NULL, NULL, NULL,
15452/* 6C */ NULL, NULL, NULL, NULL,
15453/* 70 */ NULL, NULL, NULL, NULL,
15454/* 74 */ NULL, NULL, NULL, NULL,
15455/* 78 */ NULL, NULL, NULL, NULL,
15456/* 7C */ NULL, NULL, NULL, NULL,
15457/* 80 */ NULL, NULL, NULL, NULL,
15458/* 84 */ NULL, NULL, NULL, NULL,
9e525108
AM
15459/* 88 */ NULL, NULL, "pfnacc", NULL,
15460/* 8C */ NULL, NULL, "pfpnacc", NULL,
252b5132
RH
15461/* 90 */ "pfcmpge", NULL, NULL, NULL,
15462/* 94 */ "pfmin", NULL, "pfrcp", "pfrsqrt",
15463/* 98 */ NULL, NULL, "pfsub", NULL,
15464/* 9C */ NULL, NULL, "pfadd", NULL,
15465/* A0 */ "pfcmpgt", NULL, NULL, NULL,
15466/* A4 */ "pfmax", NULL, "pfrcpit1", "pfrsqit1",
15467/* A8 */ NULL, NULL, "pfsubr", NULL,
15468/* AC */ NULL, NULL, "pfacc", NULL,
15469/* B0 */ "pfcmpeq", NULL, NULL, NULL,
9beff690 15470/* B4 */ "pfmul", NULL, "pfrcpit2", "pmulhrw",
9e525108 15471/* B8 */ NULL, NULL, NULL, "pswapd",
252b5132
RH
15472/* BC */ NULL, NULL, NULL, "pavgusb",
15473/* C0 */ NULL, NULL, NULL, NULL,
15474/* C4 */ NULL, NULL, NULL, NULL,
15475/* C8 */ NULL, NULL, NULL, NULL,
15476/* CC */ NULL, NULL, NULL, NULL,
15477/* D0 */ NULL, NULL, NULL, NULL,
15478/* D4 */ NULL, NULL, NULL, NULL,
15479/* D8 */ NULL, NULL, NULL, NULL,
15480/* DC */ NULL, NULL, NULL, NULL,
15481/* E0 */ NULL, NULL, NULL, NULL,
15482/* E4 */ NULL, NULL, NULL, NULL,
15483/* E8 */ NULL, NULL, NULL, NULL,
15484/* EC */ NULL, NULL, NULL, NULL,
15485/* F0 */ NULL, NULL, NULL, NULL,
15486/* F4 */ NULL, NULL, NULL, NULL,
15487/* F8 */ NULL, NULL, NULL, NULL,
15488/* FC */ NULL, NULL, NULL, NULL,
15489};
15490
15491static void
26ca5450 15492OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
252b5132
RH
15493{
15494 const char *mnemonic;
15495
15496 FETCH_DATA (the_info, codep + 1);
15497 /* AMD 3DNow! instructions are specified by an opcode suffix in the
15498 place where an 8-bit immediate would normally go. ie. the last
15499 byte of the instruction. */
ea397f5b 15500 obufp = mnemonicendp;
c608c12e 15501 mnemonic = Suffix3DNow[*codep++ & 0xff];
252b5132 15502 if (mnemonic)
2da11e11 15503 oappend (mnemonic);
252b5132
RH
15504 else
15505 {
15506 /* Since a variable sized modrm/sib chunk is between the start
15507 of the opcode (0x0f0f) and the opcode suffix, we need to do
15508 all the modrm processing first, and don't know until now that
15509 we have a bad opcode. This necessitates some cleaning up. */
ce518a5f
L
15510 op_out[0][0] = '\0';
15511 op_out[1][0] = '\0';
6608db57 15512 BadOp ();
252b5132 15513 }
ea397f5b 15514 mnemonicendp = obufp;
252b5132 15515}
c608c12e 15516
ea397f5b
L
15517static struct op simd_cmp_op[] =
15518{
15519 { STRING_COMMA_LEN ("eq") },
15520 { STRING_COMMA_LEN ("lt") },
15521 { STRING_COMMA_LEN ("le") },
15522 { STRING_COMMA_LEN ("unord") },
15523 { STRING_COMMA_LEN ("neq") },
15524 { STRING_COMMA_LEN ("nlt") },
15525 { STRING_COMMA_LEN ("nle") },
15526 { STRING_COMMA_LEN ("ord") }
c608c12e
AM
15527};
15528
15529static void
ad19981d 15530CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
c608c12e
AM
15531{
15532 unsigned int cmp_type;
15533
15534 FETCH_DATA (the_info, codep + 1);
15535 cmp_type = *codep++ & 0xff;
c0f3af97 15536 if (cmp_type < ARRAY_SIZE (simd_cmp_op))
c608c12e 15537 {
ad19981d 15538 char suffix [3];
ea397f5b 15539 char *p = mnemonicendp - 2;
ad19981d
L
15540 suffix[0] = p[0];
15541 suffix[1] = p[1];
15542 suffix[2] = '\0';
ea397f5b
L
15543 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
15544 mnemonicendp += simd_cmp_op[cmp_type].len;
c608c12e
AM
15545 }
15546 else
15547 {
ad19981d
L
15548 /* We have a reserved extension byte. Output it directly. */
15549 scratchbuf[0] = '$';
15550 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 15551 oappend_maybe_intel (scratchbuf);
ad19981d 15552 scratchbuf[0] = '\0';
c608c12e
AM
15553 }
15554}
15555
9916071f
AP
15556static void
15557OP_Mwaitx (int bytemode ATTRIBUTE_UNUSED,
15558 int sizeflag ATTRIBUTE_UNUSED)
15559{
15560 /* mwaitx %eax,%ecx,%ebx */
15561 if (!intel_syntax)
15562 {
15563 const char **names = (address_mode == mode_64bit
15564 ? names64 : names32);
15565 strcpy (op_out[0], names[0]);
15566 strcpy (op_out[1], names[1]);
15567 strcpy (op_out[2], names[3]);
15568 two_source_ops = 1;
15569 }
15570 /* Skip mod/rm byte. */
15571 MODRM_CHECK;
15572 codep++;
15573}
15574
ca164297 15575static void
b844680a
L
15576OP_Mwait (int bytemode ATTRIBUTE_UNUSED,
15577 int sizeflag ATTRIBUTE_UNUSED)
15578{
15579 /* mwait %eax,%ecx */
15580 if (!intel_syntax)
15581 {
15582 const char **names = (address_mode == mode_64bit
15583 ? names64 : names32);
15584 strcpy (op_out[0], names[0]);
15585 strcpy (op_out[1], names[1]);
15586 two_source_ops = 1;
15587 }
15588 /* Skip mod/rm byte. */
15589 MODRM_CHECK;
15590 codep++;
15591}
15592
15593static void
15594OP_Monitor (int bytemode ATTRIBUTE_UNUSED,
15595 int sizeflag ATTRIBUTE_UNUSED)
ca164297 15596{
b844680a
L
15597 /* monitor %eax,%ecx,%edx" */
15598 if (!intel_syntax)
ca164297 15599 {
b844680a 15600 const char **op1_names;
cb712a9e
L
15601 const char **names = (address_mode == mode_64bit
15602 ? names64 : names32);
1d9f512f 15603
b844680a
L
15604 if (!(prefixes & PREFIX_ADDR))
15605 op1_names = (address_mode == mode_16bit
15606 ? names16 : names);
ca164297
L
15607 else
15608 {
b844680a 15609 /* Remove "addr16/addr32". */
f16cd0d5 15610 all_prefixes[last_addr_prefix] = 0;
b844680a
L
15611 op1_names = (address_mode != mode_32bit
15612 ? names32 : names16);
15613 used_prefixes |= PREFIX_ADDR;
ca164297 15614 }
b844680a
L
15615 strcpy (op_out[0], op1_names[0]);
15616 strcpy (op_out[1], names[1]);
15617 strcpy (op_out[2], names[2]);
15618 two_source_ops = 1;
ca164297 15619 }
b844680a
L
15620 /* Skip mod/rm byte. */
15621 MODRM_CHECK;
15622 codep++;
30123838
JB
15623}
15624
6608db57
KH
15625static void
15626BadOp (void)
2da11e11 15627{
6608db57
KH
15628 /* Throw away prefixes and 1st. opcode byte. */
15629 codep = insn_codep + 1;
2da11e11
AM
15630 oappend ("(bad)");
15631}
4cc91dba 15632
35c52694
L
15633static void
15634REP_Fixup (int bytemode, int sizeflag)
15635{
15636 /* The 0xf3 prefix should be displayed as "rep" for ins, outs, movs,
15637 lods and stos. */
35c52694 15638 if (prefixes & PREFIX_REPZ)
f16cd0d5 15639 all_prefixes[last_repz_prefix] = REP_PREFIX;
35c52694
L
15640
15641 switch (bytemode)
15642 {
15643 case al_reg:
15644 case eAX_reg:
15645 case indir_dx_reg:
15646 OP_IMREG (bytemode, sizeflag);
15647 break;
15648 case eDI_reg:
15649 OP_ESreg (bytemode, sizeflag);
15650 break;
15651 case eSI_reg:
15652 OP_DSreg (bytemode, sizeflag);
15653 break;
15654 default:
15655 abort ();
15656 break;
15657 }
15658}
f5804c90 15659
7e8b059b
L
15660/* For BND-prefixed instructions 0xF2 prefix should be displayed as
15661 "bnd". */
15662
15663static void
15664BND_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15665{
15666 if (prefixes & PREFIX_REPNZ)
15667 all_prefixes[last_repnz_prefix] = BND_PREFIX;
15668}
15669
04ef582a
L
15670/* For NOTRACK-prefixed instructions, 0x3E prefix should be displayed as
15671 "notrack". */
15672
15673static void
15674NOTRACK_Fixup (int bytemode ATTRIBUTE_UNUSED,
15675 int sizeflag ATTRIBUTE_UNUSED)
15676{
9fef80d6 15677 if (active_seg_prefix == PREFIX_DS
04ef582a
L
15678 && (address_mode != mode_64bit || last_data_prefix < 0))
15679 {
4e9ac44a 15680 /* NOTRACK prefix is only valid on indirect branch instructions.
9fef80d6 15681 NB: DATA prefix is unsupported for Intel64. */
04ef582a
L
15682 active_seg_prefix = 0;
15683 all_prefixes[last_seg_prefix] = NOTRACK_PREFIX;
15684 }
15685}
15686
42164a71
L
15687/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
15688 "xacquire"/"xrelease" for memory operand if there is a LOCK prefix.
15689 */
15690
15691static void
15692HLE_Fixup1 (int bytemode, int sizeflag)
15693{
15694 if (modrm.mod != 3
15695 && (prefixes & PREFIX_LOCK) != 0)
15696 {
15697 if (prefixes & PREFIX_REPZ)
15698 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15699 if (prefixes & PREFIX_REPNZ)
15700 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
15701 }
15702
15703 OP_E (bytemode, sizeflag);
15704}
15705
15706/* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
15707 "xacquire"/"xrelease" for memory operand. No check for LOCK prefix.
15708 */
15709
15710static void
15711HLE_Fixup2 (int bytemode, int sizeflag)
15712{
15713 if (modrm.mod != 3)
15714 {
15715 if (prefixes & PREFIX_REPZ)
15716 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15717 if (prefixes & PREFIX_REPNZ)
15718 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
15719 }
15720
15721 OP_E (bytemode, sizeflag);
15722}
15723
15724/* Similar to OP_E. But the 0xf3 prefixes should be displayed as
15725 "xrelease" for memory operand. No check for LOCK prefix. */
15726
15727static void
15728HLE_Fixup3 (int bytemode, int sizeflag)
15729{
15730 if (modrm.mod != 3
15731 && last_repz_prefix > last_repnz_prefix
15732 && (prefixes & PREFIX_REPZ) != 0)
15733 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15734
15735 OP_E (bytemode, sizeflag);
15736}
15737
f5804c90
L
15738static void
15739CMPXCHG8B_Fixup (int bytemode, int sizeflag)
15740{
161a04f6
L
15741 USED_REX (REX_W);
15742 if (rex & REX_W)
f5804c90
L
15743 {
15744 /* Change cmpxchg8b to cmpxchg16b. */
ea397f5b
L
15745 char *p = mnemonicendp - 2;
15746 mnemonicendp = stpcpy (p, "16b");
fb9c77c7 15747 bytemode = o_mode;
f5804c90 15748 }
42164a71
L
15749 else if ((prefixes & PREFIX_LOCK) != 0)
15750 {
15751 if (prefixes & PREFIX_REPZ)
15752 all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15753 if (prefixes & PREFIX_REPNZ)
15754 all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
15755 }
15756
f5804c90
L
15757 OP_M (bytemode, sizeflag);
15758}
42903f7f
L
15759
15760static void
15761XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED)
15762{
b9733481
L
15763 const char **names;
15764
c0f3af97
L
15765 if (need_vex)
15766 {
15767 switch (vex.length)
15768 {
15769 case 128:
b9733481 15770 names = names_xmm;
c0f3af97
L
15771 break;
15772 case 256:
b9733481 15773 names = names_ymm;
c0f3af97
L
15774 break;
15775 default:
15776 abort ();
15777 }
15778 }
15779 else
b9733481
L
15780 names = names_xmm;
15781 oappend (names[reg]);
42903f7f 15782}
381d071f
L
15783
15784static void
15785CRC32_Fixup (int bytemode, int sizeflag)
15786{
15787 /* Add proper suffix to "crc32". */
ea397f5b 15788 char *p = mnemonicendp;
381d071f
L
15789
15790 switch (bytemode)
15791 {
15792 case b_mode:
20592a94 15793 if (intel_syntax)
ea397f5b 15794 goto skip;
20592a94 15795
381d071f
L
15796 *p++ = 'b';
15797 break;
15798 case v_mode:
20592a94 15799 if (intel_syntax)
ea397f5b 15800 goto skip;
20592a94 15801
381d071f
L
15802 USED_REX (REX_W);
15803 if (rex & REX_W)
15804 *p++ = 'q';
7bb15c6f 15805 else
f16cd0d5
L
15806 {
15807 if (sizeflag & DFLAG)
15808 *p++ = 'l';
15809 else
15810 *p++ = 'w';
15811 used_prefixes |= (prefixes & PREFIX_DATA);
15812 }
381d071f
L
15813 break;
15814 default:
15815 oappend (INTERNAL_DISASSEMBLER_ERROR);
15816 break;
15817 }
ea397f5b 15818 mnemonicendp = p;
381d071f
L
15819 *p = '\0';
15820
ea397f5b 15821skip:
381d071f
L
15822 if (modrm.mod == 3)
15823 {
15824 int add;
15825
15826 /* Skip mod/rm byte. */
15827 MODRM_CHECK;
15828 codep++;
15829
15830 USED_REX (REX_B);
15831 add = (rex & REX_B) ? 8 : 0;
15832 if (bytemode == b_mode)
15833 {
15834 USED_REX (0);
15835 if (rex)
15836 oappend (names8rex[modrm.rm + add]);
15837 else
15838 oappend (names8[modrm.rm + add]);
15839 }
15840 else
15841 {
15842 USED_REX (REX_W);
15843 if (rex & REX_W)
15844 oappend (names64[modrm.rm + add]);
15845 else if ((prefixes & PREFIX_DATA))
15846 oappend (names16[modrm.rm + add]);
15847 else
15848 oappend (names32[modrm.rm + add]);
15849 }
15850 }
15851 else
9344ff29 15852 OP_E (bytemode, sizeflag);
381d071f 15853}
85f10a01 15854
eacc9c89
L
15855static void
15856FXSAVE_Fixup (int bytemode, int sizeflag)
15857{
15858 /* Add proper suffix to "fxsave" and "fxrstor". */
15859 USED_REX (REX_W);
15860 if (rex & REX_W)
15861 {
15862 char *p = mnemonicendp;
15863 *p++ = '6';
15864 *p++ = '4';
15865 *p = '\0';
15866 mnemonicendp = p;
15867 }
15868 OP_M (bytemode, sizeflag);
15869}
15870
15c7c1d8
JB
15871static void
15872PCMPESTR_Fixup (int bytemode, int sizeflag)
15873{
15874 /* Add proper suffix to "{,v}pcmpestr{i,m}". */
15875 if (!intel_syntax)
15876 {
15877 char *p = mnemonicendp;
15878
15879 USED_REX (REX_W);
15880 if (rex & REX_W)
15881 *p++ = 'q';
15882 else if (sizeflag & SUFFIX_ALWAYS)
15883 *p++ = 'l';
15884
15885 *p = '\0';
15886 mnemonicendp = p;
15887 }
15888
15889 OP_EX (bytemode, sizeflag);
15890}
15891
c0f3af97
L
15892/* Display the destination register operand for instructions with
15893 VEX. */
15894
15895static void
15896OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
15897{
539f890d 15898 int reg;
b9733481
L
15899 const char **names;
15900
c0f3af97
L
15901 if (!need_vex)
15902 abort ();
15903
15904 if (!need_vex_reg)
15905 return;
15906
539f890d 15907 reg = vex.register_specifier;
5f847646
JB
15908 if (address_mode != mode_64bit)
15909 reg &= 7;
15910 else if (vex.evex && !vex.v)
15911 reg += 16;
43234a1e 15912
539f890d
L
15913 if (bytemode == vex_scalar_mode)
15914 {
15915 oappend (names_xmm[reg]);
15916 return;
15917 }
15918
c0f3af97
L
15919 switch (vex.length)
15920 {
15921 case 128:
15922 switch (bytemode)
15923 {
15924 case vex_mode:
15925 case vex128_mode:
6c30d220 15926 case vex_vsib_q_w_dq_mode:
5fc35d96 15927 case vex_vsib_q_w_d_mode:
cb21baef
L
15928 names = names_xmm;
15929 break;
15930 case dq_mode:
390a6789 15931 if (rex & REX_W)
cb21baef
L
15932 names = names64;
15933 else
15934 names = names32;
c0f3af97 15935 break;
1ba585e8 15936 case mask_bd_mode:
43234a1e 15937 case mask_mode:
9889cbb1
L
15938 if (reg > 0x7)
15939 {
15940 oappend ("(bad)");
15941 return;
15942 }
43234a1e
L
15943 names = names_mask;
15944 break;
c0f3af97
L
15945 default:
15946 abort ();
15947 return;
15948 }
c0f3af97
L
15949 break;
15950 case 256:
15951 switch (bytemode)
15952 {
15953 case vex_mode:
15954 case vex256_mode:
6c30d220
L
15955 names = names_ymm;
15956 break;
15957 case vex_vsib_q_w_dq_mode:
5fc35d96 15958 case vex_vsib_q_w_d_mode:
6c30d220 15959 names = vex.w ? names_ymm : names_xmm;
c0f3af97 15960 break;
1ba585e8 15961 case mask_bd_mode:
43234a1e 15962 case mask_mode:
9889cbb1
L
15963 if (reg > 0x7)
15964 {
15965 oappend ("(bad)");
15966 return;
15967 }
43234a1e
L
15968 names = names_mask;
15969 break;
c0f3af97 15970 default:
a37a2806
NC
15971 /* See PR binutils/20893 for a reproducer. */
15972 oappend ("(bad)");
c0f3af97
L
15973 return;
15974 }
c0f3af97 15975 break;
43234a1e
L
15976 case 512:
15977 names = names_zmm;
15978 break;
c0f3af97
L
15979 default:
15980 abort ();
15981 break;
15982 }
539f890d 15983 oappend (names[reg]);
c0f3af97
L
15984}
15985
922d8de8
DR
15986/* Get the VEX immediate byte without moving codep. */
15987
15988static unsigned char
ccc5981b 15989get_vex_imm8 (int sizeflag, int opnum)
922d8de8
DR
15990{
15991 int bytes_before_imm = 0;
15992
922d8de8
DR
15993 if (modrm.mod != 3)
15994 {
15995 /* There are SIB/displacement bytes. */
15996 if ((sizeflag & AFLAG) || address_mode == mode_64bit)
6c067bbb 15997 {
922d8de8 15998 /* 32/64 bit address mode */
6c067bbb 15999 int base = modrm.rm;
922d8de8
DR
16000
16001 /* Check SIB byte. */
6c067bbb
RM
16002 if (base == 4)
16003 {
16004 FETCH_DATA (the_info, codep + 1);
16005 base = *codep & 7;
16006 /* When decoding the third source, don't increase
16007 bytes_before_imm as this has already been incremented
16008 by one in OP_E_memory while decoding the second
16009 source operand. */
16010 if (opnum == 0)
16011 bytes_before_imm++;
16012 }
16013
16014 /* Don't increase bytes_before_imm when decoding the third source,
16015 it has already been incremented by OP_E_memory while decoding
16016 the second source operand. */
16017 if (opnum == 0)
16018 {
16019 switch (modrm.mod)
16020 {
16021 case 0:
16022 /* When modrm.rm == 5 or modrm.rm == 4 and base in
16023 SIB == 5, there is a 4 byte displacement. */
16024 if (base != 5)
16025 /* No displacement. */
16026 break;
1a0670f3 16027 /* Fall through. */
6c067bbb
RM
16028 case 2:
16029 /* 4 byte displacement. */
16030 bytes_before_imm += 4;
16031 break;
16032 case 1:
16033 /* 1 byte displacement. */
16034 bytes_before_imm++;
16035 break;
16036 }
16037 }
16038 }
922d8de8 16039 else
02e647f9
SP
16040 {
16041 /* 16 bit address mode */
6c067bbb
RM
16042 /* Don't increase bytes_before_imm when decoding the third source,
16043 it has already been incremented by OP_E_memory while decoding
16044 the second source operand. */
16045 if (opnum == 0)
16046 {
02e647f9
SP
16047 switch (modrm.mod)
16048 {
16049 case 0:
16050 /* When modrm.rm == 6, there is a 2 byte displacement. */
16051 if (modrm.rm != 6)
16052 /* No displacement. */
16053 break;
1a0670f3 16054 /* Fall through. */
02e647f9
SP
16055 case 2:
16056 /* 2 byte displacement. */
16057 bytes_before_imm += 2;
16058 break;
16059 case 1:
16060 /* 1 byte displacement: when decoding the third source,
16061 don't increase bytes_before_imm as this has already
16062 been incremented by one in OP_E_memory while decoding
16063 the second source operand. */
16064 if (opnum == 0)
16065 bytes_before_imm++;
ccc5981b 16066
02e647f9
SP
16067 break;
16068 }
922d8de8
DR
16069 }
16070 }
16071 }
16072
16073 FETCH_DATA (the_info, codep + bytes_before_imm + 1);
16074 return codep [bytes_before_imm];
16075}
16076
16077static void
16078OP_EX_VexReg (int bytemode, int sizeflag, int reg)
16079{
b9733481
L
16080 const char **names;
16081
922d8de8
DR
16082 if (reg == -1 && modrm.mod != 3)
16083 {
16084 OP_E_memory (bytemode, sizeflag);
16085 return;
16086 }
16087 else
16088 {
16089 if (reg == -1)
16090 {
16091 reg = modrm.rm;
16092 USED_REX (REX_B);
16093 if (rex & REX_B)
16094 reg += 8;
16095 }
5f847646
JB
16096 if (address_mode != mode_64bit)
16097 reg &= 7;
922d8de8
DR
16098 }
16099
16100 switch (vex.length)
16101 {
16102 case 128:
b9733481 16103 names = names_xmm;
922d8de8
DR
16104 break;
16105 case 256:
b9733481 16106 names = names_ymm;
922d8de8
DR
16107 break;
16108 default:
16109 abort ();
16110 }
b9733481 16111 oappend (names[reg]);
922d8de8
DR
16112}
16113
a683cc34
SP
16114static void
16115OP_EX_VexImmW (int bytemode, int sizeflag)
16116{
16117 int reg = -1;
16118 static unsigned char vex_imm8;
16119
16120 if (vex_w_done == 0)
16121 {
16122 vex_w_done = 1;
16123
16124 /* Skip mod/rm byte. */
16125 MODRM_CHECK;
16126 codep++;
16127
16128 vex_imm8 = get_vex_imm8 (sizeflag, 0);
16129
16130 if (vex.w)
16131 reg = vex_imm8 >> 4;
16132
16133 OP_EX_VexReg (bytemode, sizeflag, reg);
16134 }
16135 else if (vex_w_done == 1)
16136 {
16137 vex_w_done = 2;
16138
16139 if (!vex.w)
16140 reg = vex_imm8 >> 4;
16141
16142 OP_EX_VexReg (bytemode, sizeflag, reg);
16143 }
16144 else
16145 {
16146 /* Output the imm8 directly. */
16147 scratchbuf[0] = '$';
16148 print_operand_value (scratchbuf + 1, 1, vex_imm8 & 0xf);
9ce09ba2 16149 oappend_maybe_intel (scratchbuf);
a683cc34
SP
16150 scratchbuf[0] = '\0';
16151 codep++;
16152 }
16153}
16154
5dd85c99
SP
16155static void
16156OP_Vex_2src (int bytemode, int sizeflag)
16157{
16158 if (modrm.mod == 3)
16159 {
b9733481 16160 int reg = modrm.rm;
5dd85c99 16161 USED_REX (REX_B);
b9733481
L
16162 if (rex & REX_B)
16163 reg += 8;
16164 oappend (names_xmm[reg]);
5dd85c99
SP
16165 }
16166 else
16167 {
16168 if (intel_syntax
16169 && (bytemode == v_mode || bytemode == v_swap_mode))
16170 {
16171 bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
16172 used_prefixes |= (prefixes & PREFIX_DATA);
16173 }
16174 OP_E (bytemode, sizeflag);
16175 }
16176}
16177
16178static void
16179OP_Vex_2src_1 (int bytemode, int sizeflag)
16180{
16181 if (modrm.mod == 3)
16182 {
16183 /* Skip mod/rm byte. */
16184 MODRM_CHECK;
16185 codep++;
16186 }
16187
16188 if (vex.w)
5f847646
JB
16189 {
16190 unsigned int reg = vex.register_specifier;
16191
16192 if (address_mode != mode_64bit)
16193 reg &= 7;
16194 oappend (names_xmm[reg]);
16195 }
5dd85c99
SP
16196 else
16197 OP_Vex_2src (bytemode, sizeflag);
16198}
16199
16200static void
16201OP_Vex_2src_2 (int bytemode, int sizeflag)
16202{
16203 if (vex.w)
16204 OP_Vex_2src (bytemode, sizeflag);
16205 else
5f847646
JB
16206 {
16207 unsigned int reg = vex.register_specifier;
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)
16285 {
16286 if (vex.register_specifier != 0)
16287 BadOp ();
16288 need_vex_reg = 0;
16289 }
16290 OP_EX (bytemode, sizeflag);
16291}
16292
16293static void
16294OP_XMM_Vex (int bytemode, int sizeflag)
16295{
16296 if (modrm.mod != 3)
16297 {
16298 if (vex.register_specifier != 0)
16299 BadOp ();
16300 need_vex_reg = 0;
16301 }
16302 OP_XMM (bytemode, sizeflag);
16303}
16304
ea397f5b
L
16305static struct op vex_cmp_op[] =
16306{
16307 { STRING_COMMA_LEN ("eq") },
16308 { STRING_COMMA_LEN ("lt") },
16309 { STRING_COMMA_LEN ("le") },
16310 { STRING_COMMA_LEN ("unord") },
16311 { STRING_COMMA_LEN ("neq") },
16312 { STRING_COMMA_LEN ("nlt") },
16313 { STRING_COMMA_LEN ("nle") },
16314 { STRING_COMMA_LEN ("ord") },
16315 { STRING_COMMA_LEN ("eq_uq") },
16316 { STRING_COMMA_LEN ("nge") },
16317 { STRING_COMMA_LEN ("ngt") },
16318 { STRING_COMMA_LEN ("false") },
16319 { STRING_COMMA_LEN ("neq_oq") },
16320 { STRING_COMMA_LEN ("ge") },
16321 { STRING_COMMA_LEN ("gt") },
16322 { STRING_COMMA_LEN ("true") },
16323 { STRING_COMMA_LEN ("eq_os") },
16324 { STRING_COMMA_LEN ("lt_oq") },
16325 { STRING_COMMA_LEN ("le_oq") },
16326 { STRING_COMMA_LEN ("unord_s") },
16327 { STRING_COMMA_LEN ("neq_us") },
16328 { STRING_COMMA_LEN ("nlt_uq") },
16329 { STRING_COMMA_LEN ("nle_uq") },
16330 { STRING_COMMA_LEN ("ord_s") },
16331 { STRING_COMMA_LEN ("eq_us") },
16332 { STRING_COMMA_LEN ("nge_uq") },
16333 { STRING_COMMA_LEN ("ngt_uq") },
16334 { STRING_COMMA_LEN ("false_os") },
16335 { STRING_COMMA_LEN ("neq_os") },
16336 { STRING_COMMA_LEN ("ge_oq") },
16337 { STRING_COMMA_LEN ("gt_oq") },
16338 { STRING_COMMA_LEN ("true_us") },
c0f3af97
L
16339};
16340
16341static void
16342VCMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16343{
16344 unsigned int cmp_type;
16345
16346 FETCH_DATA (the_info, codep + 1);
16347 cmp_type = *codep++ & 0xff;
16348 if (cmp_type < ARRAY_SIZE (vex_cmp_op))
16349 {
16350 char suffix [3];
ea397f5b 16351 char *p = mnemonicendp - 2;
c0f3af97
L
16352 suffix[0] = p[0];
16353 suffix[1] = p[1];
16354 suffix[2] = '\0';
ea397f5b
L
16355 sprintf (p, "%s%s", vex_cmp_op[cmp_type].name, suffix);
16356 mnemonicendp += vex_cmp_op[cmp_type].len;
c0f3af97
L
16357 }
16358 else
16359 {
16360 /* We have a reserved extension byte. Output it directly. */
16361 scratchbuf[0] = '$';
16362 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 16363 oappend_maybe_intel (scratchbuf);
c0f3af97
L
16364 scratchbuf[0] = '\0';
16365 }
16366}
16367
43234a1e
L
16368static void
16369VPCMP_Fixup (int bytemode ATTRIBUTE_UNUSED,
16370 int sizeflag ATTRIBUTE_UNUSED)
16371{
16372 unsigned int cmp_type;
16373
16374 if (!vex.evex)
16375 abort ();
16376
16377 FETCH_DATA (the_info, codep + 1);
16378 cmp_type = *codep++ & 0xff;
16379 /* There are aliases for immediates 0, 1, 2, 4, 5, 6.
16380 If it's the case, print suffix, otherwise - print the immediate. */
16381 if (cmp_type < ARRAY_SIZE (simd_cmp_op)
16382 && cmp_type != 3
16383 && cmp_type != 7)
16384 {
16385 char suffix [3];
16386 char *p = mnemonicendp - 2;
16387
16388 /* vpcmp* can have both one- and two-lettered suffix. */
16389 if (p[0] == 'p')
16390 {
16391 p++;
16392 suffix[0] = p[0];
16393 suffix[1] = '\0';
16394 }
16395 else
16396 {
16397 suffix[0] = p[0];
16398 suffix[1] = p[1];
16399 suffix[2] = '\0';
16400 }
16401
16402 sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
16403 mnemonicendp += simd_cmp_op[cmp_type].len;
16404 }
be92cb14
JB
16405 else
16406 {
16407 /* We have a reserved extension byte. Output it directly. */
16408 scratchbuf[0] = '$';
16409 print_operand_value (scratchbuf + 1, 1, cmp_type);
16410 oappend_maybe_intel (scratchbuf);
16411 scratchbuf[0] = '\0';
16412 }
16413}
16414
16415static const struct op xop_cmp_op[] =
16416{
16417 { STRING_COMMA_LEN ("lt") },
16418 { STRING_COMMA_LEN ("le") },
16419 { STRING_COMMA_LEN ("gt") },
16420 { STRING_COMMA_LEN ("ge") },
16421 { STRING_COMMA_LEN ("eq") },
16422 { STRING_COMMA_LEN ("neq") },
16423 { STRING_COMMA_LEN ("false") },
16424 { STRING_COMMA_LEN ("true") }
16425};
16426
16427static void
16428VPCOM_Fixup (int bytemode ATTRIBUTE_UNUSED,
16429 int sizeflag ATTRIBUTE_UNUSED)
16430{
16431 unsigned int cmp_type;
16432
16433 FETCH_DATA (the_info, codep + 1);
16434 cmp_type = *codep++ & 0xff;
16435 if (cmp_type < ARRAY_SIZE (xop_cmp_op))
16436 {
16437 char suffix[3];
16438 char *p = mnemonicendp - 2;
16439
16440 /* vpcom* can have both one- and two-lettered suffix. */
16441 if (p[0] == 'm')
16442 {
16443 p++;
16444 suffix[0] = p[0];
16445 suffix[1] = '\0';
16446 }
16447 else
16448 {
16449 suffix[0] = p[0];
16450 suffix[1] = p[1];
16451 suffix[2] = '\0';
16452 }
16453
16454 sprintf (p, "%s%s", xop_cmp_op[cmp_type].name, suffix);
16455 mnemonicendp += xop_cmp_op[cmp_type].len;
16456 }
43234a1e
L
16457 else
16458 {
16459 /* We have a reserved extension byte. Output it directly. */
16460 scratchbuf[0] = '$';
16461 print_operand_value (scratchbuf + 1, 1, cmp_type);
9ce09ba2 16462 oappend_maybe_intel (scratchbuf);
43234a1e
L
16463 scratchbuf[0] = '\0';
16464 }
16465}
16466
ea397f5b
L
16467static const struct op pclmul_op[] =
16468{
16469 { STRING_COMMA_LEN ("lql") },
16470 { STRING_COMMA_LEN ("hql") },
16471 { STRING_COMMA_LEN ("lqh") },
16472 { STRING_COMMA_LEN ("hqh") }
c0f3af97
L
16473};
16474
16475static void
16476PCLMUL_Fixup (int bytemode ATTRIBUTE_UNUSED,
16477 int sizeflag ATTRIBUTE_UNUSED)
16478{
16479 unsigned int pclmul_type;
16480
16481 FETCH_DATA (the_info, codep + 1);
16482 pclmul_type = *codep++ & 0xff;
16483 switch (pclmul_type)
16484 {
16485 case 0x10:
16486 pclmul_type = 2;
16487 break;
16488 case 0x11:
16489 pclmul_type = 3;
16490 break;
16491 default:
16492 break;
7bb15c6f 16493 }
c0f3af97
L
16494 if (pclmul_type < ARRAY_SIZE (pclmul_op))
16495 {
16496 char suffix [4];
ea397f5b 16497 char *p = mnemonicendp - 3;
c0f3af97
L
16498 suffix[0] = p[0];
16499 suffix[1] = p[1];
16500 suffix[2] = p[2];
16501 suffix[3] = '\0';
ea397f5b
L
16502 sprintf (p, "%s%s", pclmul_op[pclmul_type].name, suffix);
16503 mnemonicendp += pclmul_op[pclmul_type].len;
c0f3af97
L
16504 }
16505 else
16506 {
16507 /* We have a reserved extension byte. Output it directly. */
16508 scratchbuf[0] = '$';
16509 print_operand_value (scratchbuf + 1, 1, pclmul_type);
9ce09ba2 16510 oappend_maybe_intel (scratchbuf);
c0f3af97
L
16511 scratchbuf[0] = '\0';
16512 }
16513}
16514
f1f8f695
L
16515static void
16516MOVBE_Fixup (int bytemode, int sizeflag)
16517{
16518 /* Add proper suffix to "movbe". */
ea397f5b 16519 char *p = mnemonicendp;
f1f8f695
L
16520
16521 switch (bytemode)
16522 {
16523 case v_mode:
16524 if (intel_syntax)
ea397f5b 16525 goto skip;
f1f8f695
L
16526
16527 USED_REX (REX_W);
16528 if (sizeflag & SUFFIX_ALWAYS)
16529 {
16530 if (rex & REX_W)
16531 *p++ = 'q';
f1f8f695 16532 else
f16cd0d5
L
16533 {
16534 if (sizeflag & DFLAG)
16535 *p++ = 'l';
16536 else
16537 *p++ = 'w';
16538 used_prefixes |= (prefixes & PREFIX_DATA);
16539 }
f1f8f695 16540 }
f1f8f695
L
16541 break;
16542 default:
16543 oappend (INTERNAL_DISASSEMBLER_ERROR);
16544 break;
16545 }
ea397f5b 16546 mnemonicendp = p;
f1f8f695
L
16547 *p = '\0';
16548
ea397f5b 16549skip:
f1f8f695
L
16550 OP_M (bytemode, sizeflag);
16551}
f88c9eb0
SP
16552
16553static void
16554OP_LWPCB_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16555{
16556 int reg;
16557 const char **names;
16558
16559 /* Skip mod/rm byte. */
16560 MODRM_CHECK;
16561 codep++;
16562
390a6789 16563 if (rex & REX_W)
f88c9eb0 16564 names = names64;
f88c9eb0 16565 else
ce7d077e 16566 names = names32;
f88c9eb0
SP
16567
16568 reg = modrm.rm;
16569 USED_REX (REX_B);
16570 if (rex & REX_B)
16571 reg += 8;
16572
16573 oappend (names[reg]);
16574}
16575
16576static void
16577OP_LWP_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16578{
16579 const char **names;
5f847646 16580 unsigned int reg = vex.register_specifier;
f88c9eb0 16581
390a6789 16582 if (rex & REX_W)
f88c9eb0 16583 names = names64;
f88c9eb0 16584 else
ce7d077e 16585 names = names32;
f88c9eb0 16586
5f847646
JB
16587 if (address_mode != mode_64bit)
16588 reg &= 7;
16589 oappend (names[reg]);
f88c9eb0 16590}
43234a1e
L
16591
16592static void
16593OP_Mask (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16594{
16595 if (!vex.evex
1ba585e8 16596 || (bytemode != mask_mode && bytemode != mask_bd_mode))
43234a1e
L
16597 abort ();
16598
16599 USED_REX (REX_R);
16600 if ((rex & REX_R) != 0 || !vex.r)
16601 {
16602 BadOp ();
16603 return;
16604 }
16605
16606 oappend (names_mask [modrm.reg]);
16607}
16608
16609static void
16610OP_Rounding (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16611{
16612 if (!vex.evex
16613 || (bytemode != evex_rounding_mode
70df6fc9 16614 && bytemode != evex_rounding_64_mode
43234a1e
L
16615 && bytemode != evex_sae_mode))
16616 abort ();
16617 if (modrm.mod == 3 && vex.b)
16618 switch (bytemode)
16619 {
70df6fc9
L
16620 case evex_rounding_64_mode:
16621 if (address_mode != mode_64bit)
16622 {
16623 oappend ("(bad)");
16624 break;
16625 }
16626 /* Fall through. */
43234a1e
L
16627 case evex_rounding_mode:
16628 oappend (names_rounding[vex.ll]);
16629 break;
16630 case evex_sae_mode:
16631 oappend ("{sae}");
16632 break;
16633 default:
16634 break;
16635 }
16636}
This page took 2.68187 seconds and 4 git commands to generate.